With the new year come new resolutions to become a better person. If you're into software development (or looking to get into it), you may be looking to learn something new. I do believe that one of the most important things we can do as software engineers is to explore other technologies and programming languages. Seeing other approaches gives you additional perspective when trying to approach a problem. In the past, this typically meant picking up a book and spending a few days going through it. Nowadays, there are many ways to learn something new and improve your skills. Below are a few examples and their pros and cons.
In-person classes and workshops
Pros: You don't have to re-enroll to take these classes. Both HPU and UH have Computer Science courses ranging from introductory level programming to more specialized topics such as mobile development and game programming. UH's Pacific New Media program have smaller workshops that may not be as in depth, but require less commitment as well. These workshops are cheaper, too.
Cons: Full classes like the ones taught at HPU and UH require a significant time commitment. They also cost money, so the pressure to get your money's worth is there as well. For people who are new to programming, trying to get into more introductory level courses at the universities and community colleges can be difficult.
Pros: The content provided by these online universities range from beginner level to advanced. Coursera started off with some advanced topics (Machine Learning and Artificial Intelligence), but went even further as more universities joined up. Courses I've participated in in the past year include Functional Programming Principles (taught by the creator of Scala), Computational Investing, and Heterogeneous Parallel Programming. There are still introductory-level programming classes and now there are more courses that have nothing to do with technology. The course websites also include forums where you can talk to other people who are taking the class. And all of this content is free!
Cons: Again, these classes require a significant time commitment and because of the short class periods (8-10 weeks), it's easy to fall behind and not be able to catch up. For me, finding motivation can be difficult since your only tangible reward is a certificate (if you get one at all). Of the courses I mentioned, I went the furthest with Functional Programming Principles. Some professors may opt to remove access to a course after it's done, although you are free to take it again if it's offered.
Pros: The content for these classes vary in difficulty too. The aforementioned sites focus a lot on web and mobile design and development, which are sought-after skills these days. Code School also delves into tools and techniques that can help experienced developers be more productive. The courses often have interactive code editors that tell you if you got something right or wrong almost immediately. Once a course is completed, you can go back and review the content if you so desire.
Cons: Other than introductory courses, these classes usually cost money to take. Code School and Treehouse have subscription plans where all of the classes are open to you for a monthly fee. There aren't any user forums to ask for help, but there may be hints to help you along the way.
Contributing to open source
Examples: Search Github
Pros: I actually don't have a lot of experience doing this, but I know it's something I should do. Of course, having your name as an author/committer to a project that you use on a regular basis would be amazing. You would also be able to interact with other developers around the world.
Cons: It's really hard to figure out where to get started. That's probably the main reason why I haven't done it yet. There are also so many projects out there.
Pros: This is usually my preferred way for learning a new technology. Having an introduction is nice, but it sticks when you use what you learned to solve problems and actually create something. The opportunity to learn something new was my primary motivation for doing the recycling app in a previous blog post. And the sense of gratification when you finally do put something together is unparalleled in my opinion.
Cons: It's sometimes hard to get started. Many of us are busy and want to unwind after some tough days. If you don't have as much development experience, it can seem like a daunting task with many unknowns. The best advice to mitigate this is to just take it little by little and try to do it consistently. If you spend a half hour to an hour every day working on it, you'll get it done eventually.
I'm hoping that the next blog I do will be about some new technology that I've been tinkering with. Start this new year by finding something new and dive in!