90s-2002: My parents got me computer in the 90ās and did some very basic coding in BASIC. Did lot of jiggery pokery of code (essentially hack it, till it works) with very little understanding of how things worked. Learned C++ in +2 (2001/2002) and started to build hack more seriously. Also got my hands on CBTNuggets, that really helped understand what happens inside a computer.
2002-2004: Went to undergrad in India, had this amazing sysadmin who challenged us (Dennis & Jith Raj) to install Debian potato and get X running. This essentially meant that, install Debian and edit the display driver with some of the monitorās parameters. But what all of us knew was how to install Windows/Windows programs and nothing more !!!(some stuff like editing windows registry, make a simple virus, email bombing etc, which was rage back then). But this meant browsing at the internet cafe in college and then run to lab to try it out, rinse and repeat for next month. The fact that there were three of us, really helped, to persevere. Then slowly got to know about what Free Software was, the whole FSF story, the values and the Linux story. Started to read Linux Gazette, TLDP project, Linux Journal, Livejournal, LinuxForYou, Digit etc. We installed every possible Linux on our systems, tweak all possible desktop managers, hacked with GNU/HURD etc during this time.
2004-2007: Got to know about the FOSS Bangalore/foss.in community, Space/SMC folks, bunch of those Yahoo folks, folks from CCC, WTH and about OpenMoko. Met lots of folks doing interesting things like t3 (Gopal Vijayaraghavan), Shuveb Hussain, Shakti Kannan (Shaktimaan) etc. So continued to do more experiments: like trying out various articles that Pramode sir wrote. During this period, we hacked a bunch of things (like building robot-ish device running real time Linux: RTAI) and also did whole bunch of awareness stuff, like getting colleges/schools to install Linux etc. This is where I met folks like Pirate Praveen (NITC), Anivar Aravind (CUSAT), Hiran etc. I luckily, also got exposed to books like āArt of Unix Programmingā etc, which made understand programming as a craft than just hacking things together. And I learned, building is not hacking things up and that I sucked at building (sort of like the Ira Glass quote). Being from Electronics, didnāt help with some of the basics like solid Data Structure / Algorithms. Another thing that irked me about what I did and others did was, community outreach was high, hacks were a plenty but real development was minimal. I would learn that these two are issues were intricately linked only much later.
2007 Onwards: During masters is when, I really learned fundamentals a lot better. Really got the tools to really think ground up. When your courses forces to write an OS from scratch, a compiler from scratch, emulate a processor from scratch etc, you really get those. Not to just code but also importance of design, algorithmic and system design. Algorithms sort of gave you understanding, āok you build this, how far are you from optimal, what are all the ways one could have implemented this, this implementation and other, is actually the same from a computational complexity senseā. So now I have confidence in my design, I know the foundation of things I build are not clumsy and its not a jugaad.
PS: Slightly longish answers but wanted to give credits to various folks, give a sense of how things were at that time & what those big moments/insights for me were. Hope this helps those of you, who are just starting out.