EDIT: This blog post comes unedited from my (now nonexistent) Wordpress blog. Pictures have not been included, however.
I have begun to write code in Emacs, and compile from a command line. As this is my first blog entry, I should explain why I chose such a masochistic path. I only ever took one technology course ever. It was “Introduction to Computer Science” and was taken purely to fulfill a high school graduation requirement. I learned the basics of computer hardware, some basic programming concepts like what a variable is, and some Visual Basic syntax. That was not enough for me, and I continued to learn on my own.
I became the lead programmer on an FIRST Robotics Competition team at my high school my junior year. Because of an extremely small programming team my sophomore year, many of us knowing little to nothing, I learned Java as fast as possible out of necessity. The only issue was that I made it a habit to take shortcuts and use Eclipse IDE as a crutch rather than a tool. The software mentor guided me through how to think like a “real” programmer, but I found myself on my own for the actual code writing due to his frequent work traveling at what seemed to always be the busiest times for the software team. I became proficient at writing autonomous robot code, as well as debugging code and explaining it to others. I taught multiple programming team members as much as I could, I mentored FIRST Lego League, and I helped teach elementary schoolers after school how to play with Legos. All the while, I still felt a gap in my knowledge.
Fast forward to my freshman year of college. Word somehow spread that I was “good at programming”, so I helped people as they needed it. It might have had something to do with living on the engineering floor of the freshman dorm, but who knows? I helped with assignments in mostly Java and C. I don’t even know C, but I somehow connected the dots enough to fake it. When it came to logic, I was golden. But when people asked me to help them study the terminology section for their upcoming exams, I was just as lost as they were. Pointers being “that thing with the asterisk that works like a regular variable but not” is my favourite of my explanations.
During that time, I also mentored a FRC team that one of my classmates is an alumni from. Just like my experience in FRC, there was a small, mostly clueless, programming team that had very little time to accomplish a lot. Unlike with my school’s software team, the majority of them had taken AP Computer Science or was currently in the class. As the build season progressed, it became apparent that it was one thing to know how to write code, but another to work through the logic of a brand new project.
I was confused as to what I was missing then to become a better programmer. Do I need to gain countless hours of experience as well as take many classes in computer science? As of right now, that seems like the answer. But I am trying a different approach. I am going back to the beginning of programming. I am going to write programs in languages that I know, but only using Emacs. I am on my own for compiling, rather than having a button that does it all for me. Debugging will be the most difficult task without a built-in debugger and syntax error highlighter. I will go through as many tutorials and free references as possible to better understand and learn how to program. I am also going to learn Lisp, purely because I have heard that it changes how one sees computers in general. I hope to finish this journey with at the very least a better appreciation for how far we have come technologically.