It's hard to believe that there is a programming language that changed my life, but Java did. Perhaps the language itself did not but the class that first exposed me to Java, COMPSCI 100, did.
I always thought I would be a mechanical engineer or architect. God bless my loving sister who bought me my first K-NEX set on my seventh birthday. I built that K-NEX airplane in less than an hour and wanted more. Eventually I would build structures much taller than me and would build contraptions such as a ball machine that would switch the light off in my room. In high school I took this passion further and became heavily involved in the robotics club. My primary role was in designing and building the various mechanical appendages of our robot. But my attentive mother, new that she needed to expose me to more.
In the seventh grade I attended the California State Summer School for Mathematics and Science, COSMOS. There I befriended Kevin and became intrigued by his constant ramblings on video cards and overclocking. He was a gamer and the best gamers were the ones who built and modified their computers for optimal performance. I bothered him like a little brother to teach me about computers. And when the summer program ended I told my mom I wanted to build one.
My resourceful mother found a church parishioner who had a computer repair shop and convinced him to teach me how to build computers. On a Saturday, I built my first computer and installed my first OS, Windows 2000 Professional. I walked through the process of screwing in the motherboard, connecting the various drives, and setting the proper jumpers. I stepped through the BIOS to tell it to boot off the CD-ROM and inserted the Windows 2000 disk. But this was not the magical moment that changed my life. In fact, I realized quickly soon after that even though I could build computers and set up networks, I did not enjoy it. So what else was there to do with computers?
In eighth grade, my mother convinced the local high school to let me take AP Computer Science. AP Computer Science was my "Hello, World." into programming. I was as interested in it as I was in music and tennis. They were just activities I did, but my passion was still in building mechanical gadgets.
In the tenth grade, my mother enrolled me at the Jisan Research Institute. There I got more exposure to programming by building various genetic algorithms in C. This was the first time I saw the cleverness of algorithms and was involved in larger scale software projects. My fellow researchers at Jisan were brilliant. In fact, I was intimated by those there who could hack into your computer and send you random messages. Some friends there were already being paid top dollar to work for web consulting companies. In addition, there were other programming geniuses at my high school too. One friend in particular ran a web hosting company, won various programming competitions, and later went on to receive a Microsoft scholarship. How could I ever compare to these guys?
When I finally entered college, I was going to study biomedical engineering. I wanted to build nano-robots to cure diseases. The more I researched nano-robotics, the more I realized how much I needed to learn about materials and electrical engineering. I then decided to double major in electrical engineering and one of the requisite courses was COMPSCI 100.
COMPSCI 100 was the first class where I attended every lecture (sorry Mom). I could not resist the entertainment of Owen Astrachan dancing around the room as he described tree traversal. Solving the problem sets was fun because they required real ingenuity. I loved learning about Big-O notation. I loved algorithms. And with Eclipse it was easy to program, intellisense made it easy to remember the various methods. The Java APIs made it easy to utilize many of the data structures we had learned about. Everything just made sense.
With engineering you begin with a problem, you design a solution, you build it, you test it, and iterate until the problem is solved. With software engineering, the fast development time makes it that much more rewarding. There's, for the most part, instant gratification. And even bigger projects can be broken down into discrete tasks that have immediate results.
Software engineering, to me, is the ideal form of engineering. It has given me the ability to explore my ideas to solving big ideas. And it's not a matter of being the best at software engineering, it's about solving problems I find interesting and fun. For that I am thankful for taking COMPSCI100 and for Java for opening that door for me.