The reason I started Dev-eryday was to push myself to get better as a software developer everyday. The goal was to do something every single day to get a little further down the path to mastery. Well, I’m into the final month of the first year of this experiment, and the results have been pretty good. I’m closer to where I want to be, but there’s still a long way to go. In effort to help narrow the gap I’m issuing myself a challenge for the month of December and a little beyond.
Challenge: Five Languages in Five Weeks
Learn the basics of five programming languages over the span of five weeks. One week won’t be enough to truly learn any of these languages, but it will be enough to get a taste of each language and find out what they excel at. Objectively, the challenge is to do the following for each language:
- Learn the basic syntax.
- Identify the strengths and weaknesses.
- Create a “Rosetta Stone” style file with all basic language constructs.
- Complete a basic project.
- Chart out a path for future learning with the language.
- Determine if the language is worth focusing on in the future.
To get better at rapidly learning new programming languages. In my career I’m going to have to learn a lot of different technologies. The better equipped I am to go through the learning cycle, the better off I’ll be in the long run. Use this opportunity to better understand the similarities and differences in programming languages, and try to get a sense of what makes a language stand out. Use the challenge to potentially find a language worth focusing on learning deeply in 2018.
Week 1 - TypeScript (12/1/2017 - 12/7/2017)
Week 2 - Elixir (12/8/2017 - 12/14/2017)
Week 3 - Haskell (12/15/2017 - 12/21/2017)
Week 4 - Go (12/22/2017 - 12/28/2017)
Week 5 -
KotlinSwift (12/29/2017 - 1/4/2017)
I picked each of these languages because I have a strong interest in each of them. The fact that they are all fairly trendy right now was a big part of the selection process too. They also cover a wide range of paradigms and touch practically all types of delivery areas (web, systems, client side, apps, scientific computing, etc). Other languages I strongly considered were Rust and
SwiftKotlin. Haskell is probably the least reasonable language on the list, but poses the greatest challenge and growth opportunity. This list isn’t set in stone yet, but I feel good about it.
Over the long holiday weekend I spent a good amount of time thinking about things I could write to breathe some life into Dev-eryday. I feel like when 99% of my posts are “Weekly Update” posts that’s a bit of a blog smell. I haven’t been doing this site justice. So I did what I often do, I put together a list of things I could do to make Dev-eryday better. The best idea, by far, was to do a series where I attempt to learn five languages over five weeks. Coincidentally, I was also looking for a monthly challenge for December. At that moment, there was clarity and the path forward was set.
In 2011 I picked up a book called Seven Languages in Seven Weeks. I never finished it, but I did read a little bit of it. I’m sure that, in some way, that book led to the idea for this challenge. I hadn’t thought of that book in years and remembered it only after writing out a description of the proposed challenge in OneNote. Luckily for me, I still have the book. I can use it as guide through the learning process. Better yet, the book also covers Haskell and I can use it as reference for learning it.
Of all the challenges I’ve taken on in 2017, this one is the most intimidating. I don’t know what’s going to happen, but I’m sure I will learn a lot. My approach coming in to this is to put in at least an hour each day to learning the scheduled language for that week. We’ll see how far I can get by the end of the challenge. I feel like if I’m not uncomfortable, I’m too comfortable. It’s time to get comfortable with being uncomfortable.