Need For Self-Learning and Personal Projects in University
Before entering university I had the naive idea that most, if not all, of the material that I would need for a career in software development would be taught to me. In fact, one of the reasons I was excited to go to college was that there would be a structured learning environment where I would be forced to learn what I need for my career.
Anyone who has completed a four year degree knows that there really is no way for a university to teach you everything that you need to know for a career in software development. However, there are a few topics and exercises that I would consider to be essential to be prepared for a career in this field including:
- Data Structures and Algorithms
- Writing full stack web applications
- Writing programs with at least 500 LOC to practice code organization and implement useful abstractions
For various reasons, these classes and exercises were not emphasized in my college education. This caused an intense frustration on my part and caused many of my fellow classmates not to pursue careers in computer science and change majors. As that was something I did not want to do, I knew that self-learning was my only option.
Self learning With Limited Discipline
I was fortunate to go through an amazing internship at Paycom where I built a backend Node.js application with a native Android front-end. This partly replaced the need for intensive classes in databases and for a non trivial programming project.
This left me with Data Structures and Algorithms to learn on my own. As I was nearing the end of my time at Paycom, I foresaw that learning data structures was something that I was going to want to focus on in order to succeed in a technical interview.
Sitting down and staying focused on something that nobody is requiring me to do is something I have always struggled with. A method to stay focused that had worked for me for a friend of mine was to give himself a minimum amount of time to spend on a task. So I started my telling myself that I needed to work on learning data structures or coding challenges for a minimum of 30 minutes a day. Once I actually started doing the learning or work, I found that it was easier to keep working than for 30 minutes but just having that requirement for myself made it much easier to get started. After a period of a few weeks, it became a habit.
I also found that sticking to one cohesive resource that included exercises helped me to stay focused on the material instead of looking around for free resources which might distract me.
After working through the material for a couple months followed by lots of Leetcode exercises to cement the knowledge and application, I feel much more comfortable in my knowledge of computer science and also my ability to learn difficult topics on my own.
My advice for anyone who is discouraged because they are not learning what they need to from their curriculum is to find a highly rated class with assignments and dedicate time to it every day. I would also recommend that you find exercises and meaningful projects to build on their own outside of the normal tutorials that you are going to be able to passively consume on Youtube or Medium.
In the end, some modicum of self control and discipline will be required to teach yourself difficult topics, but creating habits and using focused and complete study materials helped me a great deal.
Below I have left some of the resources that I used and plan to use again when I need to review or find another side project.
Courses and Tools I Used to Learn Data Structures:
- Leetcode (Easy and Medium problems will get you far here)
- MIT Open Courseware Class
- Technical Interview Cheat Sheet