30 March 2011

Over 16 Years of Code

While I at the gym, I began introspective line of thought about how much I have learned in programming and software engineering as a whole, and I came upon a terrific realization: I've been writing code for at least 16 years of my life. Granted, I've only written code professionally for the last 4 years, but nonetheless, my first formal programming class was when I was a freshman in high school. (more after the break)
I remember that my desire to write code started earlier than when I was a freshman, writing simple things like DOS batch scripts that did nothing but output information to the screen and execute programs. From there I moved on to slightly more advanced scripting using Central Point Software's Windows 3.1 desktop shell replacement's scripting language. After that, Windows 95 was released and I stopped writing code for a while became enamored with the Internet and the wealth of information at my fingertips - if I was willing to wait. Ah, the good 'ole days of dial-up AOL...
It wasn't until Windows 98SE's release that I returned to coding, jumping into early forms of JavaScript and DHTML. This was one of the first times I managed to create tiny games, and even coded up my own website complete with some basic JavaScript. However, due to the incredibly difficult nature in figuring out the DOM and debugging JavaScript code at the time, I again abandoned programming in favor of 3D modeling and animation.
I was pretty much content with 3D until I was a freshman in high school and decided to take my first programming course in QBASIC - it was also around the same time when I found that 3D was difficult for me as I was not very creative visually. Windows XP was released around this time, and I felt pretty confident that I wanted to continue pursuing programming as a career choice as the feeling of building something working from just an idea brought me immense joy - like a kid who finishes building a Lego toy (of which I was one). My next step in programming was C and C++, and I grasped concepts of the language fairly quickly and became one of the top coders in my classes. I also touched a little on Java, but again, the tools and the language were a little foreign and difficult to use, causing me to abandon the language for some time. However I continued on my path, taking AP Computer Science as a junior and getting a 5 on the AB test - the highest score you could receive. Needless to say, it stroked my ego and I felt more confident that computer programming was a fit for me. From then on, my college studies focused on computer programming. I became fairly adept at the data structure concepts and program organization, but as any professional can tell you, the exercises in school never really prepare you enough for life in the real world.
When I landed my current gig, I was thrust into a "hit the ground running" pattern for writing Java code. It was difficult at first to re-acquaint myself with the language and the programming paradigms the language enforced, especially since at the time I was an ardent proponent of C++ since I was familiar with it. Quickly, though, I became more comfortable with the language and fell in love with Java's enforcement of OO concepts and its simplification of previously difficult concepts such as pointers, and I began to lose my ties (and my ability to write) with C++ - though one never really forgets such a powerful language.
And so here I am today. I have learned a great deal about software engineering, and have run a fairly wide gamut in terms of programming languages I've used. I continue to write code in a variety of other languages when I need to, such as PHP, JavaScript, C/C++, and other OS-dependent scripting languages, but I continue to use Java as my primary language. I do admit that I still struggle with some programming design patterns such as composition, which is understandable considering my academic C/C++ background which repeatedly reinforced the ideas of inheritance and never really touched on design pattern concepts. But I am confident that over time, with patient mentoring (I am very stubborn, after all), I believe that those concepts will become as familiar to me as the thought patterns necessary to even write code.
Now, if only I can find a good design patterns book I can read and keep on my bookshelf for reference...

No comments: