300 Hours of Programming - Check-Up
Recently I have been trying to become a better programmer. I have always had a big interest in computers and always felt that I would like to learn how to program properly, but I always end up falling a bit short. I am trying to change this now with a more systematic approach and my yearly goal of doing at least 300 hours of programming.
Background
In school, I have taken a few courses in object-oriented programming focusing on Java and courses more focused on other computers science concepts such as data structures, algorithms, and databases. These courses have given me a good foundation in software engineering, but I have not been great at using my programming skills in personal projects or outside of school. Like most things, if you don't practice them frequently you end up forgetting parts of them. One of the problems with learning programming for me was that I would practice it a lot when I had classes in it, but during the semesters where I did not have any classes, I would not program. This created a feeling of beginning a new for each programming class instead of building on a foundation of knowledge. I have been interested in learning more about web development for a long time, but we never got around to that in school. To fill that need I started working on The Odin Project's web development track.
The first time I started on the Odin Project, my plan was to finish the Foundation track during a summer a few years ago. The problem was I got a new job which got in the way of practicing my programming and I gradually stopped working on the project as I got busier. I have made other attempts at picking up programming and diving deeper, but it is always a similar story. I do a week or two of consistent programming and then I end up stopping and eventually I quit fully. This time will be different!
Action Plan
How am I planning to make this time different than all those other times? Well at first I started with setting a very tangible goal of doing 300 hours of programming outside of my studies to improve my programming skills which I publicly stated on Twitter to be more accountable it can be seen in my yearly goals. This goal combined with a simple spreadsheet where I track all of my hours of coding has helped me create a habit of doing an hour of coding most days. Some days I do five hours and some I do none, but having created the habit and expectation of doing 1 hour per day makes sure I on average accomplish it. When I don't feel like doing it I tell myself I will only do five minutes and then quit, but what tends to happen is that when I get into it I just keep going because problem-solving is fun, and all of sudden I have found myself working on it for an hour or two.
So what am I working on you might be asking yourself? Well, I started off with trying the Odin Project again but decided I needed something a bit more structured, then as I was diving into the world of programming more and more I was watching videos of self-taught programmers and many of them recommended the online course CS50 from Harvard. CS50 is an introduction to computer science that is taught at Harvard and Yale but also has a huge online learning network. Looking at the content of the course I concluded that it would fill a few of the gaps I felt I had. The course is a great introduction to the world of computer science and the teachers have been fantastic and have really pushed me to want to learn more. This newfound interest in programming created by the course combined with a daily habit of programming and a goal to reach at least 300 hours of programming within the year (at my current pace it will be more like 700 hours) have been great for learning more. I read somewhere that "motivation is the reward you get for action" and this rings true as I get more motivated to program the more I do it. If you too have been looking at getting more into computer science or programming CS50 is a great starting point and I recommend it highly!
Next Steps
My plan going forward is to finish CS50, I am currently on week 6 of 10 and am having a blast doing it. After I finish the course I have three things I want to do and I am not sure in which order I will do them. The first one is to increase my knowledge of SQL, this is because I want to learn more about data analytics, but also because I have an exam for a class in databases in early January so it would be hitting two birds with one stone. The second one is improving my skills in Python, CS50 introduces you to python but does not go very deeply into it, and having heard so many good things about the language I would love to learn more about it. Finally, the third thing is getting a better understanding of data structures and algorithms, this is similar to the SQL where it would be beneficial to improve my understanding of this for my programming skills, but I might also retake an exam I passed but did not get a great grade in, and the exam takes place in January. If I keep up the pace I am going now I believe I will be able to do all three.
Recommendations
If you feel inspired to start learning more about programming too here are three resources you can use:
- Harvard's CS50 - This is the course I am currently doing and it is exceptional. If you are new to the world of computers and programming this will provide a great foundation. If you have already done some programming like me, but feel like you need a refresher it is also great. The course has its own codespace on GitHub and does not require you to set up very much to get started.
- The Odin Project - This is the course I started taking to do web development. It is an open-source project compiling different free resources around the internet for you to learn more about web development. The course does take more time setting up than CS50 as it requires you to work in Unix (Mac OS/Linux) and have some more technical specifications. That said it covers a lot of good information and you will get started on working with HTML, CSS, and JavaScript quickly.
- Replit 100 Days of Code - This 100-day course is a daily 10-20 min challenge where you learn a new concept of Python each day. I just got started on this 4 days ago, in addition to CS50 as it only takes around 15 min each day and I feel like it is a good refreshing way of picking up some Python. Replit is an IDE that works both on the web and on their mobile application so that you can write your code everywhere. This is great if you are not around your computer. If you want to learn to code in smaller bite sizes or just want a fun daily challenge this is a great way.
I hope you can pick up some things from my learnings. This hopefully marks the start of some more activity here on the blog!