Achievements
Jason Rudolph’s article “How to level up as a developer” has inspired me to not only go deep with my programming skills but also wide.
I have copied Jason’s list over from his blog so that I can tick off the items as I learn more. I hope this list will help me with keeping my learning efforts focused. After all, there’s so much to learn and so little time for all of those interesting topics and Youtube videos about them…
programming paradigms
- Write a program in assembly language ✅
- Write an application in a functional language ✅
- Write an application in an object-oriented language ✅
- Write an application in a prototype-based language
- Write an application in a logic programming language
- Write an application using the Actor model
- Write an application in Forth
I have started to learn Clojure because I realized there’s a lot more to learn about programming than OOP. Clojure has captivated me because of the power despite its simplicity. The language itself is not very complex but it seems to be exactly this simplicity that is responsible for the language being so powerful. It runs both in your browser (as Clojurescript) and on the JVM. In the family of LISPs I want to learn Common Lisp as well. I have written a Telegram chat bot in Clojure and was amazed at how simple the language is and how much you can achieve with lists as the main language construct.
There are still so many paradigms to explore. I would love to learn Erlang, Prolog and Smalltalk.
platforms
- Write a nontrivial web app ✅
- Write a nontrivial desktop app ✅
- Write a nontrivial mobile app
- Write an embedded app
- Write a realtime system
building blocks
- Write a networking client (e.g., HTTP, FTP) ✅
- Write a device driver
- Write a B-tree database
- Wrap an existing library to provide a more pleasant user experience
- Write an application or framework that provides a plugin model
- Write a testing framework
- Write a programming language
koans, katas & the wisdom of ages
- Complete five code katas ✅
- Complete the koans for a language that you want to learn ✅
- Attend a code retreat ✅
- Read SICP and complete all the exercises
Code katas are a great way to learn indeed. My first kata was FizzBuzz to learn the mechanics of TDD. I’m still using it to teach the basics because the problem domain is just so trivial that you can focus on the mechanics like triangulation.
Kevlin Henney has demonstrated some more elegant solutions to this seemingly simple kata at SC London 2017. Make sure you watch the whole video. It explains a lot about the appropriate mindset for katas.
Next I worked on Roman Numerals both recursively and iteratively. This kata taught me a lot about how to refactor and generalize while TDDing.
These are the two katas I recommend for starting with TDD.
If you want to work on your refactoring skills, check out Gilded Rose, Racing Car and Tennis.
Coderetreats are great! I’ve been attending them regularly since 2012’s Global Day of Coderetreat and have progressed to facilitating them after a few years. If you want to hone your software crafting skills like TDD, pair programming, simple design and the mastery of your tools, you should definitely attend a few coderetreats.
programming in the open
- Contribute to an open source project ✅
- Have a patch accepted ✅
- Earn commit rights on a significant open source project
- Publish an open source project ✅
- Perform a Refactotum of an open source project
I’ve started to contribute a few smaller features to open source projects in 2018. I definitely want to do more here.
If I ever start my own open source project, I hope I will be able to manage it as well as Joel Costigliola does. I teamed up with the awesome Sandra Parsick and we pair programmed our contributions together. Joel made it really easy for us to contribute to AssertJ. He always took the time to give us feedback for our pull requests and pointed out things we’ve missed. AssertJ is a great project for your first contribution!
Sandra Parsick and I have taken over the Dependency Update Maven Plugin from Oliver Weiler.
teaching others
- Present a lightning talk ✅
- Present at a local user group ✅
- Present at a conference ✅
- Deliver a training course ✅
- Publish a tutorial ✅
- Publish a constructive code review of an open source project
- Write a programming book
I firmly believe that in order to achieve mastery at what you’re doing you need to be able to teach others how to do it.
That’s why I’ve been pretty active in this category over the last few years. Standing in front an audience of unknown people is a bigger challenge for me than for many others - but I’ve grown from doing so.
Teaching others helps me improve my skills not only because I learn how to structure material according to my audience’s level and how to motivate them to go deeper, but also because they provide really helpful feedback simply by asking and trying to learn more.
Thanks to Sandra’s nudging and encouragement, I have started to speak at conference inside and outside of Germany. Check out My Talks if you want to learn more.