I apologize for the length of this post, I post this only because this might bring a perspective that might be a bit new here: of Linux in India way back then.

If its not appropriate here I wouldnt mind at all if its downvoted so that it does not take visible real estate. This is from a mail I wrote some time ago.

--

As you would know my background is not in EE or CS but in manufacturing where we had very little hands on experience with computers. We had a course where we learned FORTRAN and that was about it. In those days, a pc magazine used to distribute redhat in a CD. I think the first one I got my hands on was version 5.2. The mighty 486s in college used to command a lot of respect, and as lowly undergrads we weren't allowed to touch them. I owe Linu[x|s] and Stallman a lot of gratitude because much of what I learned about how a computer works was not from a course but actually digging through the linux and GNU system.

This was also quite normal for all linux users then. The whole point of using Linux was to figure out how things work and change things to your liking. "Change" meant editing a file and compiling, not pushing mouse buttons. If you wanted a system that worked [or not], there was always windows. It was very confusing to hear anyone complain that not everything worked right out of the box on Linux. The whole point of Linux then was then to poke around and re-tool it, it was not even expected that everything will work. It was a rudimentary car, that came with an excellent set of tools, a workshop and a manual.

If I were to choose a single word to desribe the linux user base that would be "curiosity". A lot of that has changed, now many use linux not because it allows them to learn and tinker, but because its a better windows. I dont begrudge the fact, it shows Linux has matured.

One of my first forays into personal programming was
because of a printer. Printing would always make me cringe because I could not get economy mode or two-up. I barely new C. Over multiple trips to the printer room to check if the patch worked, I finally got it to run. In the process I learned the the entire path from the point one types "lpr
filename" to the bits dumped on the network. I also learned how pretty code can be. Deutsch's ghostscript code is one of the most beautiful C code around, atleast to me then. I think only way to pick up good coding style is to read good code.

To give an example how bad the scenario was then: if you wanted to install something that was not on the CD, doing an apt-get install (or rpm) was out of question over the 2B/s dialup we had then. So I had to hack up a p2p file distribution system for rpms. It did signature verification and multiple parallel downloads of the same file broken up into chunks. All I can say is that it did not become napster :) But I learned a lot. Till before that I did not much know what a network even was.

I wrote it in TCL (writing that in C would have been way beyond my league) and contributed a patch for TCL's FTP client. Given that I was a complete novice, and that this worked at all and that I, a complete clueless newbie
could actually contribute anything was unimaginably gratifying for a manufacturing engineering undergrad.

TL,DR
Was taught quite a bit by the GNU and Linux sources