Programming New Years Resolutions for 2015
I've decided to make a number of changes this year, but today I wanted to share my goals in the realm of programming.
It is my understanding that something like 97% of new years resolutions fall face first within only a couple of months and to me that's pretty unfortunate. I guess some goals are too lofty or cumbersome and that's understandable given the overall grandiosity of a new year. Shooting too big and failing to me isn't a sign of weakness but rather a sign that the person is looking at the goal as a whole rather than breaking it into small chunks.
That's why as I approach my goals, I want to keep in mind that if they seem too big at times, then I'm likely looking at the world with a flat perspective. Goals can be better managed in pieces and I intend on applying the same method of a todo list to mine. Checking things off feels good and I plan on checking a lot of things off.
So without further adieu, my list.
Become a better computer scientist
I wanted to lead off with the biggest and most important goal for me this year. In 2014, I participated in a number of interviews and have practiced a number of questions just to get a general guage for where I stand in terms of competence.
Do you know what I found out?
I'm not as good of a computer scientist as I believed myself to be. I went to Penn State university and got a four year degree in Information, Science, and Technology. This isn't computer science but I told myself that it was very similar in the sense that I did take a lot of programming classes and learned a lot about the fundamentals of software design. I learned object oriented programming, developing large systems, threading, networking, and a lot of other things. But as I take interviews and practice problems online I realize that I don't know the basics about data structures and algorithms.
I'm someone who uses a lot of built-in language constructs without thinking about if they're the most efficient solution.
In a way, this upsets me.
I spent the money and took the time to learn programming as a trade and I left without taking a fundamental knowledge of things. This is why I'm taking 2015 to become better and finish my education. I want to be a true computer scientist and I want to solve real problems. I love the web, but software is more than using a framework and trusting the built-in support system it provides. It's problem solving, doing math, doing less processing to achieve better results.
How do I do this though because I can't go back to school?
Well in a way, I can. Coursera is a great website for free programming classes taught by prestigious universities. If you haven't seen it, I highly recommend searching their class database to see if something you find is interesting. It has more than programming so if you just want to pick up a new useful skill then it's worth a glance. I've attempted to take some courses there before but the problem was that I didn't challenge myself. I took an intro to Python course because a friend was taking it too and I was bored to tears since I knew more than each lesson.
I need challenges and what that I have selected a few courses. Before I list them though, I want to make clear that my schedule may not be able to handle these courses as they stand. Their concurrent and managing a 20 hour a week work load plus a job and family is not easy. Nonetheless, if it becomes too much time then I'll be dropping a class and waiting for it to resume at a later date to get the knowledge.
So here's what I'll be taking:
- Cryptography I (taught at Stanford | January 5th - March 9th): This class is an introduction to cryptography and I think it's important to know in the realm of computer science. As you may have seen, I created an app ProtectedMessage where you can create messages that will be encrypted for sharing and they will expire after 30 minutes. This is where I realized how much I liked knowing some cryptography. I want to study this deeper and understand what's really going on to build these ciphers. I believe this course will be one of the harder ones for me.
- Algorithms Part I (taught at Stanford | January 19th - March 15th): This is a class I'm excited for as it is being taught by legendary engineer Robert Sedgewick. It focuses on basic data structures and basic algorithms that all computer scientists should know. It's a short course and looks like one that I'll truly take a lot from.
- Algorithms Design and Analysis Part I (taught at Stanford | January 19th - March 15th): In this class, you dig into why these data strictures and algorithms are important and what makes them smarter choices when compared to others. Some of the things will overlap with the other algorithm course (which is something I want) and hopefully together they will give me a much deeper knowledge.
Those classes will be the start of my year. After each of them finishes, there will actually be a part two for each of them so I plan on taking those as well to truly enhance my learning on this topic. This will take me to somewhere around June which means I'll be able to look at my year at the halfway mark and make a decision on how I would like to continue my learning of computer science. Likely that route will be learning more data structures and algorithms while finding ways to apply the things I have learned.
This is a big one for me and one I'm very passionate about so I'll be updating my blog with things I learn.
Become a better Python Programmer:
Python is my muse. It's fun to me and come very naturally. I plan on digging even deeper into the lower level concepts of the language and truly making it as efficient as I can through the use of best practices and smart idioms. There are a lot of things I can still learn in the language and by the end of 2015 I want to consider myself an expert.
I already started this goal in December of 2014, but I want to continue to build on this. I've learned the basics and understand a lot of the construction of a Go project, but I want to dig in deeper. Go is amazing for concurrency and I'm super in love with concurrency at the moment. I plan on using Go as my bridge into typed languages again which will in turn help me look back at C or C++ to get to a low level of understanding.
My blog was doing great for a couple months and then the end of the year became hectic and I fell off the path. I want to change that. Luckily, I'll be employing a post about things I learn strategy. From my courses, doing overviews of weekly concepts or anything will be both a way to give to community and to really digest it for myself. So be aware that I'll likely be doing a little less about Python in general and more about computer science. That said, I still have a lot to write about in a lot of categories. This blog should hopefully see some mileage this year.
Learn Sysadmin Tasks
This year I briefly touched on a few things in the world of a sysadmin, but I want to grow in this field. I want to be able to configure secure servers and manage installs in a smart way. With this comes automation software like Docker and SaltStack. I want to understand more about firewalls, tuned configurations for things like NGINX and Apache. I believe I'll be doing more of this in the second half of the year as my first half will be pretty full as it stands.
In the end, I want to diversify myself as a programmer and truly feel like I'm a valuable asset in any situation. I call myself a full stack developer because I can move around servers, code, and most tech things very easily. I haven't mastered these things yet though and at 25 years old I want to get a step closer to having a truly great skill set.
I have big plans for this new year and am excited to see where I go. What are some resolutions that you have?
comments powered by Disqus