13 January 2015

New Questions Create New Results

I was in the final stages of creating a JSON parser yesterday and needed help with a few aspects of it. I went into an WebDev IRC channel to ask questions. I asked questions regarding escape characters and someone replied, "What are you using this for?". I told this inquisitive user that I am making a JSON parser for learning purposes. He replied,

"That's stupid, those already exist. I have been a developer for eight years and never needed to know that"
I was a little let down, but not at all surprised.

This reminded me of a similar experience at Harvard when I took a data structures and algorithms class. One student in class remarked that they don't get why they had to learn algorithms. I began thinking,

"Why DO we need to learn algorithms?"
I began asking this question, and when you ask a question with consistency, you tend to get answers with consistency.

The Purpose of Learning Algorithms

The reason it is valuable to learn CS fundamentals like algorithms and computational theory is because it teaches you how to think dynamically. When people first learn programming syntax they pretty much have a few basic design patterns they use over and over again. Usually they just keep lumping a series of for-loops and if statements together. It's kind of like playing a video game with someone and having your opponent just be a 'button masher'. That is, only knowing two moves and keep pressing the same button over and over which performs those two moves. When you learn how to build more complex things, many times those basic patterns don't work anymore. You can't create QuickSort or a JSON parser by arranging a series of for loops and if statements in just the right sequence. These challenges require a higher level of thinking. They require you to hold multiple ideas in your head simultaneously and organize them in unique ways. And they also require thinking about one problem on multiple levels of abstraction.

The Results of Learning Algorithms

Okay so I mentioned the reason, but what about the effect? Is learning algorithms and computational theory actually useful? In my experience solving problems that required computational theory, algorithms, and data structures has really accelerated my learning curve. It taught me how to multitask while problem solving and organize my code better. Furthermore it taught me to think on multiple levels of abstraction. It also really honed my concentration skills. Solving complex problems requires very deep concentration for an extended period of time. Finally, it really increased my confidence in my ability to program. Which helped me blast through the mental barriers of what I thought I couldn't do.