A few weeks ago I shared about Why I got My Master's Degree in Computer Science. I went into depth about my background, story, and even my planning process.
Today, I want to answer the question of if I think my degree was worth it.
To do that, I decided to break it down into my Top Five Takeaways. These are my top lessons, learnings, and skills that getting my master's degree taught me and why I think my degree was worth it.
Learning is a subject I'm very passionate about actually. In my undergraduate days, I minored in cognitive science to understand more about how we learn effectively. In graduate school, I put some of those ideas to the test.
And then some. I learned how to read academic papers to understand the core ideas - and why nuance can be a massive shift in thinking.
I learned how to break vast topics (machine learning, for instance) into manageable chunks that I could understand, apply, and then reason about. I learned how to quickly determine what information was and what information wasn't important (hint - not every detail of every algorithm is, but knowing when, why, and how to apply an algorithm is).
The best way to learn isn't by just memorizing information or even grasping the general "rules" of how things work. The best way, I have found, is to make as many connections between your knowledge as you can. Link what you are learning to your existing knowledge and to related ideas you are in the midst of learning as well. In fact, this how our brain actually works! Check out this brief but comprehensive explanation.
Part of being an effective learner is asking the right questions. And make no mistake: there are no wrong questions. They are just more effective ones and less effective ones. I really like this take by Artem Zakharchenko where he discusses how important the role specificity is to asking good questions.
For instance, let's say you are trying to store a record in a relational table. Databases are new to you, and they are currently blocking your ability to move forward with your task at hand. Well, asking "how do relational databases work in general to store a record?" is likely too broad of a question at the moment. You need to learn enough to figure out how to store the record. So you Google or ask a friend, "how do I store a record in this SQL Server table?"
However, you soon realize you need to learn how to update a record in the same database. Now is probably a good time to ask, "how are records stored so that I can update one that exists?"
Notice that your first question was specific - how to store a single record in a single table. Your second question was broader - how are records stored so that they can be updated.
Learning when to be specific, when to be broad, and when to ask a question about applying an idea in another context is an art. And like all art, you only get better by practicing.
I know you are thinking, "I could have told you that, Dan! Everyone knows you can't know everything." In fact, I told myself that.
But there is always that inkling, for me anyway, to always be learning and growing. Even in my classes, the semester would end, and I would think, "That's it!? I need to know more!"
That is the funny thing about learning. The more you learn, the more you realize how much much more there is! Machine learning is massive. People earn PhDs for one algorithm! The rabbit hole goes deep.
The take away with this for me is that I don't need to understand exactly how a complicated network works to send requests over it. I don't need to understand every aspect of how distributed file-systems work to write efficient map-reduce jobs. I just need to know enough to do the work in front of me - and I can learn the rest.
We have in our heads that making anything takes time. And that is certainly true. In my experience, however, what you accomplish sometimes has more to do with effort than time. We tend to think that effort and time both work on roughly the same scale when they aren't at all.
Programming, for instance, is a great example of this idea. In my school programming assignments, I could crank out code extremely quickly - even though I was coding on the edge of my comfort zone. The reason is that I've programmed enough that coding doesn't scare me. I've become enough of an expert programmer that once I understand the problem, I can enter into a flow state quickly and knock it out. Most of the time, I would do my coding assignments in under 4-5 hours - half a working day!
Again, this isn't true for everything. Knowledge work does require long periods of uninterrupted time for growth to occur. But as you grow, you will find that the amount of effort you can exert on novel problems within a given time also grows. It's incredible.
About half-way through my first semester, I almost fell apart. I remember going to dinner with my family and thinking, "I can't do this. I should give up." Somehow I managed to push through.
I experienced a moment like this every semester. A moment where it seemed I was about to fall apart. And yet, every semester, I was able to find a way to learn what I needed, get the work done required, and get a decent grade.
I don't say this to brag about my ability to push through; I had insane support from my wife, family, and co-workers. I say this because sometimes we get so overwhelmed with the work to be done, we never actually start.
When I focused on doing the work in front of me and doing my best, I was able to do more than I thought. It didn't matter if it was a homework problem that was too hard, a paper that seemed too long, or preparing for a test. Focusing on the immediate work in front of me helped me finish ALL of the work I had to do.
All this to say that the most important takeaways I learned from my degree aren't things specific to computer science or software engineering. Certainly, those aspects are crucial, and I did learn a ton that will help me in my career. The most important takeaway for me is how graduate school helped elevate my mindset. I've cultivated a learning mentality that gives me confidence (but not arrogance) that I can achieve just about anything in front of me.
Many people reading might already have that mindset - and that is awesome! You don't need to go to graduate school to get it. It's simply how I did.
Happy coding (and learning!)