Yeah, I'll never forget pirating Turbo Pascal off of AOL in the 90s, going to my local library and taking out a book about Turbo Pascal so I could learn what I could do with it. Ended up coding a program that embedded metadata for all of Rush's songs, their titles, and how long they were, so that you could plan out a mixtape of just Rush's songs. Even allowed you to specify what kind of tape you had, so you could adjust each side, whether it was 45 minutes or 30 minutes, things like that. It was called Rush Mixtape Creator, and I shared the compiled binary on Usenet. Got emails about it as long as six years later asking me to make changes and update it. It was the first actual program I ever distributed. 1995.
The thing that I really liked was that you felt like you were programming for the hardware and not really for an OS. Most systems ran a single program at a time so you pretty much had full control except for interrupts. On DOS TSR (terminate, stay resident) interrupt handlers could also do amazing things.
Knowing a lot about my personal computer (Atari 400 and later Atari ST) made it so easy to do work on embedded systems as a student intern. Without internet, learning about your hardware/ROM was paramount from magazines and word-of-mouth.
Another thing that I learned from that time is how to make designs fast and small. This is a skill that's not really taught, shared, or practiced much and makes a huge positive impact on a codebase keeping it light on abstraction depth and high on flexible capability. Huge improvement to maintainability and extension into unforeseen directions too.
I had a project at a private bank where we couldn't use the internet - we had to turn our phones in when we checked in, had to use their computers on their network, couldn't access the outside internet... we did have access to api documents electronically thankfully. If we wanted to update a library it had to go through a big security review that took weeks.
It slowed work down a lot but was totally fine - the bank was paying us tons of money hourly.
Grab BBC Basic manual (supplied with the computer) off the shelf, switch my Model B on (later Master). Within milliseconds a fresh working environment is created (ie a cursor starts flashing next to a “>”) and I’m off to the races.
Hope the tape recorder works to save my work every hour or so. Switch on my Epson fx80 to dump hard copy.
Those manuals were fantastic. I was still coding on our Beeb in the early 90s and I wanted the assembly manual. My dad ordered it from Acorn but it never arrived. Ended up going to the small claims court to get our money back.
In the late 90s, I wanted to learn x86 assembly and sent an email to Intel asking for their reference manuals. They sent four huge volumes to me for free. I've no idea whether that was a mistake, but I was very grateful.
I still can't believe any of us were able to write programs just from reading books, and I'm not sure to what extent that's even possible today. Even online documentation now seems really crappy compared to those old manuals.
This period lasted quite some time. In the mid 00s it was still like this. I remember writing code in notepad and vim. Version managers like tortoiseSVN were a total game changer when it came to collaborating.
I still think learning like this is the best way to truly understand things. Neovim still my favourite IDE.
Definitely, up to 2003 I only had access to dial up outside work, meaning I could not just go online every time I felt like doing it.
And during the 90's while at the university, not even that, at home zero Internet, I could not afford paying for dial up as student, other expenses were more relevant.
You would regularly find students on the campus at weekend that were there only to check stuff on Internet.
I memorized the z80 instruction in hex and would code Basic and data 3E, 15, CD, 00, C0, etc just as if it was readable and wrote many games with that. It was nice income for a 10 year old kid in the 80s and even better after. It does slightly suck more now, but AI does help making it similar; focus on the important parts, not this garbage around it.
Most Linux systems just symlink vim to vi, and it launches in a compatibility mode. Vim without plugins is still close. Old workflows can still be achieved. The user simply has to really want that experience.
This varies wildly person to person but for me, it's not only about the means. It's a combination of means and end. If I want the computer to do something, and the only way to get it to do so is read a book and tinker, the reading and tinkering are very fun. If I could just ask the computer in plain English (which I can now), I would. Of course it's way less of a fun journey then. But just reading and tinkering with no extrinsic element is not a fun journey.
i understand this very well. i’m trying to work through SICP but without a goal i’m struggling even though i enjoy LISP. on the other hand i’m playing Mindustry[1] in which you can use a kind of domain specific assembly language called mlog, and there’s very little documentation and no in-game console for error messages, so the code either works or doesn’t and you have to manually print assertions to understand what’s going wrong. in some ways similar to this article. we had an intro to 8085 in school but beyond that i would otherwise have never bothered to learn low level stuff, but i’m having a very good time now.
AI tools can write mlog but there’s not much of it out there so they frequently make errors, making it even more of a “you’re on your own” experience. i recommend the game anyway (it’s libre) but the opportunity to code this way has considerably added to the enjoyment for me.
That's not enough as the abstraction of hardware and software has increased exponentially. Not only that expectations are more. Just building for a definitive set of single configuration is not enough. Any software needs to run on Amd64, RiscV, Arm64, has to be containerised, and run on OsX, Windows, Linux.. Nowadays you would need more and more knowledge/experience to be able to function without external help.
Yeah, all the computer science students in the dorms would collaborate on homework assignments, but I was a non-traditional student living in a small home near the college campus, so no interaction on that front, unless no one in the dorms was able to solve something, then I'd get a phone call and would try to coach people through the solution over the phone, or would walk to the lab, printout in hand....
Failed the 301 Systems Programming class because C on my NeXT Cube was sufficiently different from the compiler in the labs and I never managed to work out how to bridge that gap mentally....
Information was so much more scarce back then. Made programming feel like a black art. I remember when I learned about overlays in Turbo Pascal, it felt like I learned a new spell :)
I did an independent study of C in high school in 2003.
I sat at a non-internet-connected terminal in the back of the TechED room and typed examples from the provided book into a very simple editor. Sometimes they compiled and worked. Sometimes they did not work despite being to all appearances character for character the same as the book, and I was often left with no idea why.
It was not an entirely unfamiliar experience. I had a Mattel Aquarius as a young child and spent countless hours typing games in from the back of the manual before attempting to save them to cassette.
Dont forget: Back then, after shoving tons of floppy disks (later 600MB CDs) for installing just the IDE and the compiler etc., you had to shovel another tower of media into the machine just to get the "help/doc" function installed :-D
Even early 2000s my experience coding was writing code, building it at my PC, copying it to a floppy, carrying it to the device I worked on
In the lab, burning the NVRAM with it, rebooting it, and seeing if it worked. Debugging meant manually typing in memory addresses into the keypad to inspect (I had the address of every global var in the system).
For deeply thought intensive tasks like “why did the system crash” I printed out pages of C code and hand-executed code to find places with invalid memory access. For example a null pointer wouldn’t segfault and print a nice stack trace, it’d just overwrite the in memory code itself.
It was laborious but lots of fun. I learned a ton about C and embedded programming
Memories of coding in FoxPro 2.5, with the reference manual on my lap. I wasn't the original programmer, so I had to figure out another guy's copypasta.
There were BBSes back then where you could often find help from others or share code. Not just mail and magazines.
> But something also got lost along the way, and it's that obligation to read slowly, to understand every line because there was no shortcut available
Not really sure what got "lost" here. But fundamentally nothing has really changed much, except for deeper abstractions, more powerful tools and the cost of "generating" (or producing) code approaching near zero (if you discount the cost of subscriptions to Claude/Codex, etc and the underlying costs of running those st scale).
You still have to understand, and read every line. Although now we just get tools to do so for us. But the understanding is still a requirement.
I had a ZX81. I remember copying hexadecimal lines of code from magazines using the tiny "keyboard". At least the hexadecimal code had checksums on every line, it made it a little easier to spot errors, but had to translate to Z80 machine code to be able to see any code at all! :)
> Just last week, I spent several hours reading the rsync C Language source code line-by-line so I could write a custom patch to add nanoseconds to the file creation dates.
>What is your use case, if you don't mind sharing?
I have custom utilities that detects moved/renamed files by analyzing heuristics of filesize, modification times, and creation times. It can work with files' timestamps without any fractional seconds (nanoseconds) but the most reliable and confident heuristics takes advantage of nanoseconds to build the most accurate hashtable of files.
The latest rsync 3.4.4 will copy creation times but it didn't copy over the nanoseconds. It does copy the nanoseconds for file modification times but not the creation/birth times.
Command line file sync tools like rsync or robocopy can't detect file moves which means they will blindly delete files from the old spot and re-copy them to the new spot. Imagine a directory that's 2 terabytes full of files that were just renamed. Those utilities will delete 2 terabytes then recopy another 2 terabytes. It's a risk of losing 2 tb of files if there's a interruption and needless SSD wear & tear.
I may send my changes up to the rsync github repo. I just don't have an active account at the moment.
I have always verified that rsync copies the modification timestamps with nanosecond resolution, because I use these timestamps, but I have never looked at the creation times, because I do not use them.
I always have content hashes attached to files in an extended attribute.
For detecting duplicates with different names I always use the content hash, which is much more reliable than a creation timestamp and it is also useful for other purposes, e.g. for detecting file corruption.
I cannot see the original comment as it was deleted, but it seems very weird.
There are indeed a lot of Linux/UNIX programs that lose metadata when copying or archiving files, like losing extended file attributes or the high-resolution timestamps with nanosecond resolution.
The filesystems that I use (XFS on Linux and UFS on FreeBSD) have timestamps with nanosecond resolution and also extended file attributes, so I was also annoyed in the past when discovering the many utilities that lose metadata.
However, rsync is one of the few utilities that preserve all metadata even when copying between distinct file systems, e.g. between UFS and XFS.
That is why for many years I have never used anything else except rsync over ssh, to be sure that the metadata is intact.
However, to preserve metadata no Linux utility may be used with default options.
For instance, I alias rsync to '/usr/bin/rsync --archive --xattrs --acls --hard-links --progress --rsh="ssh -p XXX -l YYYY"'
Therefore I wonder on which filesystem the previous poster has seen that rsync loses metadata, because this does not match my experience.
In the past, I have also patched some open-source programs to preserve the high-resolution timestamps, but rsync was OK since the beginning.
In 1990, I was using the BRIEF editor on MS-DOS, which was an editor for programmers and which was quite similar to Emacs (also including a scripting language somewhat similar to LISP). BRIEF must have already existed for some years.
It had a completely configurable auto-complete, which I rewrote to insert big code templates in the languages that I was using (C, C++, Fortran, Basic, assembly), covering almost all boilerplate that I encountered at that time.
The BRIEF editor for programmers was one of the best software products that I have ever used. Nothing that I encountered later on Windows approached it in customizability. Actually I find it strange that I cannot recall any Windows program that I would consider as a high-quality software product, while there are a handful of programs for MS-DOS that I consider as examples of high-quality, even decades later (e.g. the programming editor BRIEF, the file manager XTree, the spreadsheet Lotus 1-2-3, the technical drawing program AutoCAD for MS-DOS; all these were extremely customizable).
Nowadays Emacs may have even more customizable features, but it has always been more opaque for newbies. BRIEF was instantly usable on an IBM PC clone, even if discovering its advanced features could require some time.
Despite having used continuously for 3 decades various UNIX-derived operating systems, including Solaris, FreeBSD and Linux, only this year I have switched to Emacs, in order to recreate the great programming experience that I had with BRIEF many years ago. Emacs includes all that is necessary, but it requires a much longer initial study in comparison with BRIEF, before becoming able to master it, which is why I hesitated for a long time before trying it.
I started a job (moving cities for this new job) in 2004 and found my boss (at that time, a grizzled old veteran of computing) using BRIEF.
I recall him trying to convince me to switch to it a few times, from vim. I never found it as advanced as vim, but I could see the capabilities. I recall being impressed by some macro he had that improved navigation, both within a file and opening new files.
I also recall him being impressed when I showed him vim's ctags commands.
Which is why when being on UNIX, and having only vi, Emacs and XEmacs available, with basic tools like ctags, unless being lucky to work at some place paying for really expensive UNIX IDEs felt like a downgrade for folks raised in Amiga/PC world.
I remember using usenet newsgroups (outlook express anyone :-)
The Wrox books had a mailing list where you could reply or ask questions by email... I used those a lot.. in the beginning to ask and in the end I was answering more and more
> Debugging, back then, was an almost physical thing. Comparing character by character what was on screen against what was printed on the page. Realizing that the "1" that looked like a lowercase "l" had tricked you for half an hour.
And the 0 and 8. And this was used by some copy-protection to try to prevent reverse engineering. Back then real debuggers (by "real debugger" I mean not just "debugging in your head": but an actual, although very minimal, debugger) were very simplistic too, and so you'd read everything line by line, keeping in your head what the program was doing, was the register contained, what subroutines would do etc. And then you'd have "tricks" by the copy protection where that line with a '0' you just analyzed a few commands before would turn, sneakily, into a '8' (maybe by a function or a side effect of a command etc.).
And when we'd spot it we'd be: "Wait dude, did you notice how sneaky it is, this actually turns the 0 into an 8, so the next this execute, everything shall be corrupt" (or something like that).
And so debuggers got enhanced: for example if anything on screen got modified, the modified value would flash than stay in green. Stuff like that.
Our tools were much more basic.
But then we learned to eat 68x00 and x86 opcodes for breakfast.
I remember enhancing the F-PC visual editor to display the checksum for the current line because I did not have access to whatever method the magazine recommended (maybe OCR with Logitech Scanman?).
Compute!'s Gazette first began offering BASIC programs to type in. These became more elaborate over time, and then they announced a revolutionary concept: they began publishing programs written in machine language, for maximum compactness and performance.
But alongside these machine-language programs, they published a short BASIC editor, and this is how you typed in the machine code. It was all numbers, and the editor program would calculate the CRC, and it could flag typos, so you could re-enter the bad lines. That was way better than arduously entering DATA statements in BASIC, or just having a malfunction because of a typo in those programs.
This stuff was all rather magical for me. At first I didn't even have a storage device. I'd type in short BASIC programs, shut off the machine, and they'd be wiped: gone forever. Of course, with the Commodore computers, there was always an option to purchase cartridge-based software that was durable.
Eventually I had a Datasette cassette recorder, so I could save those programs I'd typed in. It was quite amazing to be able to finally save my own stuff, or the magazine programs.
Yeah, I'll never forget pirating Turbo Pascal off of AOL in the 90s, going to my local library and taking out a book about Turbo Pascal so I could learn what I could do with it. Ended up coding a program that embedded metadata for all of Rush's songs, their titles, and how long they were, so that you could plan out a mixtape of just Rush's songs. Even allowed you to specify what kind of tape you had, so you could adjust each side, whether it was 45 minutes or 30 minutes, things like that. It was called Rush Mixtape Creator, and I shared the compiled binary on Usenet. Got emails about it as long as six years later asking me to make changes and update it. It was the first actual program I ever distributed. 1995.
Coding was different back then.
The thing that I really liked was that you felt like you were programming for the hardware and not really for an OS. Most systems ran a single program at a time so you pretty much had full control except for interrupts. On DOS TSR (terminate, stay resident) interrupt handlers could also do amazing things.
Knowing a lot about my personal computer (Atari 400 and later Atari ST) made it so easy to do work on embedded systems as a student intern. Without internet, learning about your hardware/ROM was paramount from magazines and word-of-mouth.
Another thing that I learned from that time is how to make designs fast and small. This is a skill that's not really taught, shared, or practiced much and makes a huge positive impact on a codebase keeping it light on abstraction depth and high on flexible capability. Huge improvement to maintainability and extension into unforeseen directions too.
I had a project at a private bank where we couldn't use the internet - we had to turn our phones in when we checked in, had to use their computers on their network, couldn't access the outside internet... we did have access to api documents electronically thankfully. If we wanted to update a library it had to go through a big security review that took weeks.
It slowed work down a lot but was totally fine - the bank was paying us tons of money hourly.
It was same for some Nokia projects, it was called "blackbox" model (other people where not allowed to see in the room you were developing in).
Possible but very inefficient way of doing things.
Also very secure.
Grab BBC Basic manual (supplied with the computer) off the shelf, switch my Model B on (later Master). Within milliseconds a fresh working environment is created (ie a cursor starts flashing next to a “>”) and I’m off to the races.
Hope the tape recorder works to save my work every hour or so. Switch on my Epson fx80 to dump hard copy.
Simpler, happier times.
Those manuals were fantastic. I was still coding on our Beeb in the early 90s and I wanted the assembly manual. My dad ordered it from Acorn but it never arrived. Ended up going to the small claims court to get our money back.
In the late 90s, I wanted to learn x86 assembly and sent an email to Intel asking for their reference manuals. They sent four huge volumes to me for free. I've no idea whether that was a mistake, but I was very grateful.
I still can't believe any of us were able to write programs just from reading books, and I'm not sure to what extent that's even possible today. Even online documentation now seems really crappy compared to those old manuals.
Memory error - it was a Seikosha dot matrix I used back then. The FX80 came later.
This period lasted quite some time. In the mid 00s it was still like this. I remember writing code in notepad and vim. Version managers like tortoiseSVN were a total game changer when it came to collaborating. I still think learning like this is the best way to truly understand things. Neovim still my favourite IDE.
Definitely, up to 2003 I only had access to dial up outside work, meaning I could not just go online every time I felt like doing it.
And during the 90's while at the university, not even that, at home zero Internet, I could not afford paying for dial up as student, other expenses were more relevant.
You would regularly find students on the campus at weekend that were there only to check stuff on Internet.
I memorized the z80 instruction in hex and would code Basic and data 3E, 15, CD, 00, C0, etc just as if it was readable and wrote many games with that. It was nice income for a 10 year old kid in the 80s and even better after. It does slightly suck more now, but AI does help making it similar; focus on the important parts, not this garbage around it.
You can always just use vim, no plugins, and a book. No one said that one must use a fancy IDE and online stuff.
Actually no, because vim was created in 1991, during the 80s it was classical vi.
Most Linux systems just symlink vim to vi, and it launches in a compatibility mode. Vim without plugins is still close. Old workflows can still be achieved. The user simply has to really want that experience.
This varies wildly person to person but for me, it's not only about the means. It's a combination of means and end. If I want the computer to do something, and the only way to get it to do so is read a book and tinker, the reading and tinkering are very fun. If I could just ask the computer in plain English (which I can now), I would. Of course it's way less of a fun journey then. But just reading and tinkering with no extrinsic element is not a fun journey.
i understand this very well. i’m trying to work through SICP but without a goal i’m struggling even though i enjoy LISP. on the other hand i’m playing Mindustry[1] in which you can use a kind of domain specific assembly language called mlog, and there’s very little documentation and no in-game console for error messages, so the code either works or doesn’t and you have to manually print assertions to understand what’s going wrong. in some ways similar to this article. we had an intro to 8085 in school but beyond that i would otherwise have never bothered to learn low level stuff, but i’m having a very good time now.
AI tools can write mlog but there’s not much of it out there so they frequently make errors, making it even more of a “you’re on your own” experience. i recommend the game anyway (it’s libre) but the opportunity to code this way has considerably added to the enjoyment for me.
[1] https://anuke.itch.io/mindustry
That's not enough as the abstraction of hardware and software has increased exponentially. Not only that expectations are more. Just building for a definitive set of single configuration is not enough. Any software needs to run on Amd64, RiscV, Arm64, has to be containerised, and run on OsX, Windows, Linux.. Nowadays you would need more and more knowledge/experience to be able to function without external help.
Yeah, all the computer science students in the dorms would collaborate on homework assignments, but I was a non-traditional student living in a small home near the college campus, so no interaction on that front, unless no one in the dorms was able to solve something, then I'd get a phone call and would try to coach people through the solution over the phone, or would walk to the lab, printout in hand....
Failed the 301 Systems Programming class because C on my NeXT Cube was sufficiently different from the compiler in the labs and I never managed to work out how to bridge that gap mentally....
Information was so much more scarce back then. Made programming feel like a black art. I remember when I learned about overlays in Turbo Pascal, it felt like I learned a new spell :)
I did an independent study of C in high school in 2003.
I sat at a non-internet-connected terminal in the back of the TechED room and typed examples from the provided book into a very simple editor. Sometimes they compiled and worked. Sometimes they did not work despite being to all appearances character for character the same as the book, and I was often left with no idea why.
It was not an entirely unfamiliar experience. I had a Mattel Aquarius as a young child and spent countless hours typing games in from the back of the manual before attempting to save them to cassette.
> Sometimes they did not work despite being to all appearances character for character the same as the book, and I was often left with no idea why.
The book may have been wrong - between 2000 and 2005 there were a ton of programming books that were flat out wrong. Many of these were C books.
Just one example: the examples from https://wozniak.ca/blog/2018/06/25/1/index.html are full of UB and are almost guaranteed to crash.
Dont forget: Back then, after shoving tons of floppy disks (later 600MB CDs) for installing just the IDE and the compiler etc., you had to shovel another tower of media into the machine just to get the "help/doc" function installed :-D
A customised mix of Turbo Pascal and MS-DOS 3.3 could fit in a 3.5 inch high density floppy, meaning 1.44 MB for the young folks.
I know that because I used to carry one for use on high school computer lab.
Then a couple others for programs.
Even early 2000s my experience coding was writing code, building it at my PC, copying it to a floppy, carrying it to the device I worked on In the lab, burning the NVRAM with it, rebooting it, and seeing if it worked. Debugging meant manually typing in memory addresses into the keypad to inspect (I had the address of every global var in the system).
For deeply thought intensive tasks like “why did the system crash” I printed out pages of C code and hand-executed code to find places with invalid memory access. For example a null pointer wouldn’t segfault and print a nice stack trace, it’d just overwrite the in memory code itself.
It was laborious but lots of fun. I learned a ton about C and embedded programming
Memories of coding in FoxPro 2.5, with the reference manual on my lap. I wasn't the original programmer, so I had to figure out another guy's copypasta.
There were BBSes back then where you could often find help from others or share code. Not just mail and magazines.
> But something also got lost along the way, and it's that obligation to read slowly, to understand every line because there was no shortcut available
Not really sure what got "lost" here. But fundamentally nothing has really changed much, except for deeper abstractions, more powerful tools and the cost of "generating" (or producing) code approaching near zero (if you discount the cost of subscriptions to Claude/Codex, etc and the underlying costs of running those st scale).
You still have to understand, and read every line. Although now we just get tools to do so for us. But the understanding is still a requirement.
In VB6 I just scrolled the autocomplete dropdown in the 2005 IDE to find what's possible + Some random answer from codeproject.com
The good times...
My first computer from the 80's had autocomplete: ZX80.
Was only BASIC, but needed as there wasn't any way to save...
I had a ZX81. I remember copying hexadecimal lines of code from magazines using the tiny "keyboard". At least the hexadecimal code had checksums on every line, it made it a little easier to spot errors, but had to translate to Z80 machine code to be able to see any code at all! :)
Copying scripts from books is still the best way to learn, and still the only choice in some areas.
Trends will come and go but vim will always be here.
> Just last week, I spent several hours reading the rsync C Language source code line-by-line so I could write a custom patch to add nanoseconds to the file creation dates.
Pause
I need to hear about this :)
What is your use case, if you don't mind sharing?
>What is your use case, if you don't mind sharing?
I have custom utilities that detects moved/renamed files by analyzing heuristics of filesize, modification times, and creation times. It can work with files' timestamps without any fractional seconds (nanoseconds) but the most reliable and confident heuristics takes advantage of nanoseconds to build the most accurate hashtable of files.
The latest rsync 3.4.4 will copy creation times but it didn't copy over the nanoseconds. It does copy the nanoseconds for file modification times but not the creation/birth times.
Command line file sync tools like rsync or robocopy can't detect file moves which means they will blindly delete files from the old spot and re-copy them to the new spot. Imagine a directory that's 2 terabytes full of files that were just renamed. Those utilities will delete 2 terabytes then recopy another 2 terabytes. It's a risk of losing 2 tb of files if there's a interruption and needless SSD wear & tear.
I may send my changes up to the rsync github repo. I just don't have an active account at the moment.
OK, you may be right.
I have always verified that rsync copies the modification timestamps with nanosecond resolution, because I use these timestamps, but I have never looked at the creation times, because I do not use them.
I always have content hashes attached to files in an extended attribute.
For detecting duplicates with different names I always use the content hash, which is much more reliable than a creation timestamp and it is also useful for other purposes, e.g. for detecting file corruption.
I cannot see the original comment as it was deleted, but it seems very weird.
There are indeed a lot of Linux/UNIX programs that lose metadata when copying or archiving files, like losing extended file attributes or the high-resolution timestamps with nanosecond resolution.
The filesystems that I use (XFS on Linux and UFS on FreeBSD) have timestamps with nanosecond resolution and also extended file attributes, so I was also annoyed in the past when discovering the many utilities that lose metadata.
However, rsync is one of the few utilities that preserve all metadata even when copying between distinct file systems, e.g. between UFS and XFS.
That is why for many years I have never used anything else except rsync over ssh, to be sure that the metadata is intact.
However, to preserve metadata no Linux utility may be used with default options.
For instance, I alias rsync to '/usr/bin/rsync --archive --xattrs --acls --hard-links --progress --rsh="ssh -p XXX -l YYYY"'
Therefore I wonder on which filesystem the previous poster has seen that rsync loses metadata, because this does not match my experience.
In the past, I have also patched some open-source programs to preserve the high-resolution timestamps, but rsync was OK since the beginning.
man studio and the like were really helpful trying to figure out what something did in a piece of code
Maybe not 80s, but I vaguely remember visual basic 4 having autocomplete...
In 1990, I was using the BRIEF editor on MS-DOS, which was an editor for programmers and which was quite similar to Emacs (also including a scripting language somewhat similar to LISP). BRIEF must have already existed for some years.
It had a completely configurable auto-complete, which I rewrote to insert big code templates in the languages that I was using (C, C++, Fortran, Basic, assembly), covering almost all boilerplate that I encountered at that time.
The BRIEF editor for programmers was one of the best software products that I have ever used. Nothing that I encountered later on Windows approached it in customizability. Actually I find it strange that I cannot recall any Windows program that I would consider as a high-quality software product, while there are a handful of programs for MS-DOS that I consider as examples of high-quality, even decades later (e.g. the programming editor BRIEF, the file manager XTree, the spreadsheet Lotus 1-2-3, the technical drawing program AutoCAD for MS-DOS; all these were extremely customizable).
Nowadays Emacs may have even more customizable features, but it has always been more opaque for newbies. BRIEF was instantly usable on an IBM PC clone, even if discovering its advanced features could require some time.
Despite having used continuously for 3 decades various UNIX-derived operating systems, including Solaris, FreeBSD and Linux, only this year I have switched to Emacs, in order to recreate the great programming experience that I had with BRIEF many years ago. Emacs includes all that is necessary, but it requires a much longer initial study in comparison with BRIEF, before becoming able to master it, which is why I hesitated for a long time before trying it.
I started a job (moving cities for this new job) in 2004 and found my boss (at that time, a grizzled old veteran of computing) using BRIEF.
I recall him trying to convince me to switch to it a few times, from vim. I never found it as advanced as vim, but I could see the capabilities. I recall being impressed by some macro he had that improved navigation, both within a file and opening new files.
I also recall him being impressed when I showed him vim's ctags commands.
Good times. Pity he was a mean SOB.
You can always recreate it for Windows or Linux. Perfect hobby hehe
Which is why when being on UNIX, and having only vi, Emacs and XEmacs available, with basic tools like ctags, unless being lucky to work at some place paying for really expensive UNIX IDEs felt like a downgrade for folks raised in Amiga/PC world.
We had SWAG for pascal
This period latest until the mid 00s. I remember trying to learn Java in the early 00s and it was really hard and I needed a textbook.
No blogs, no SO, no autocomplete, crappy IDEs, no AI, etc...
I miss that difficult focused learning. The smallest successes felt like huge accomplishments.
I remember using usenet newsgroups (outlook express anyone :-) The Wrox books had a mailing list where you could reply or ask questions by email... I used those a lot.. in the beginning to ask and in the end I was answering more and more
This also marked peak IQ by humans developers...
> Debugging, back then, was an almost physical thing. Comparing character by character what was on screen against what was printed on the page. Realizing that the "1" that looked like a lowercase "l" had tricked you for half an hour.
And the 0 and 8. And this was used by some copy-protection to try to prevent reverse engineering. Back then real debuggers (by "real debugger" I mean not just "debugging in your head": but an actual, although very minimal, debugger) were very simplistic too, and so you'd read everything line by line, keeping in your head what the program was doing, was the register contained, what subroutines would do etc. And then you'd have "tricks" by the copy protection where that line with a '0' you just analyzed a few commands before would turn, sneakily, into a '8' (maybe by a function or a side effect of a command etc.).
And when we'd spot it we'd be: "Wait dude, did you notice how sneaky it is, this actually turns the 0 into an 8, so the next this execute, everything shall be corrupt" (or something like that).
And so debuggers got enhanced: for example if anything on screen got modified, the modified value would flash than stay in green. Stuff like that.
Our tools were much more basic.
But then we learned to eat 68x00 and x86 opcodes for breakfast.
Software was way simpler back then.
Nothing would get me more frustrated than copying code from a magazine for it to not work because they published something wrong.
The more sophisticated magazines had CRC codes after every line, so you could know where in the code you has mistyped.
I remember enhancing the F-PC visual editor to display the checksum for the current line because I did not have access to whatever method the magazine recommended (maybe OCR with Logitech Scanman?).
Compute!'s Gazette first began offering BASIC programs to type in. These became more elaborate over time, and then they announced a revolutionary concept: they began publishing programs written in machine language, for maximum compactness and performance.
But alongside these machine-language programs, they published a short BASIC editor, and this is how you typed in the machine code. It was all numbers, and the editor program would calculate the CRC, and it could flag typos, so you could re-enter the bad lines. That was way better than arduously entering DATA statements in BASIC, or just having a malfunction because of a typo in those programs.
This stuff was all rather magical for me. At first I didn't even have a storage device. I'd type in short BASIC programs, shut off the machine, and they'd be wiped: gone forever. Of course, with the Commodore computers, there was always an option to purchase cartridge-based software that was durable.
Eventually I had a Datasette cassette recorder, so I could save those programs I'd typed in. It was quite amazing to be able to finally save my own stuff, or the magazine programs.
[flagged]
[dead]