Autumn is coming. This is the time when I like to grab a cup of hot tea and crawl under a warm blanket with my laptop. As a developer, it’s a good time to broaden your horizons with new knowledge. I want to motivate you to use that time as well to explore the tech world.
Whilst working on tech stuff, often a talk with a friend comes to my mind. When he asked in a deeply sarcastic tone whether I’ve got time to meet up or if I’m into my “private projects” again. Yeah, exploring the tech world can be pretty time consuming but doing so is great fun too. The result of that time was an Android note app which I use until today regularly. With that project, I learned a lot about clean architecture, object-orientation, Android, UX, and even project management.
How to approach it
Basically, the message is: Engage with a tech field you are new to. This is not a new idea. Despite, a lot of professional and experienced developers have a limited mindset when it comes to usage of appropriate technologies because they don’t know the objective advantages and disadvantages of choosing one technology over another.
So, the question is not whether you should broaden your horizons or not. It is when and how you should do it and how to keep on. Here are two approaches which both have their own up- and downsides:
- Private Projects: You can work on your own small projects about a topic you personally find interesting. As it is something you chose yourself chances are that you are super motivated to start the task. The problem is that you might choose the project scope too big and lose interest before finishing the project. Another problem might be that you don’t have an idea what to code. Therefore I prepared the second point.
- 7 Languages in 7 Weeks: This is a book written by an inspiring author called Bruce Tate. Within his book, you can find seven introductions to programming languages (what a surprise). They all have different emphasis just like different private projects. If you are a more structured kind of person this might be the choice for you because Mr. Tate guides you through advantages and disadvantages of technologies systematically.
Hacking to the Gate
My current project is part of our future gadget lab, so put your cup of hot tea aside and take a fresh cool Dr.Pepper instead! We gave our project the name Divergence Meter (modernized) Ver.2.31 and it will help us to finally leave the alpha attractor field and reach the Steins;Gate worldline. I can’t tell you too much as the organization is chasing after us. ~el psy kongroo
For the boring normies out there: A divergence meter is a fictional device from the anime Steins;Gate, but you can use it as a multifunctional clock. A friend of mine built the thing and I’m currently programming it. We created a modernized version using lixies instead of the original nixie tubes because for our poor lab they were more affordable. The lixies work with a rotary encoder called Cronios-1. Put simply, with the rotary encoder you can program your device using a dialect of BASIC namely LED-BASIC. Here is an impression of the beautiful code you can write with it:
' VAR: g: Month from data, q: Day from data 8020: for i = 1 to 10 step 3 g = read 50, i q = read 50, (i+1) if g = (IO.getrtc(4)) and q >= (IO.getrtc(3)) and i <> (IO.eeread(18)) then IO.eewrite(18, i) next i return
I never programmed that close to the actual hardware and it feels quite hacky in the beginning. You can spend hours trying to display a 6-digit number. The code for our clock has a length of more than 1800 lines in a single file with jump marks all over the place.
But I could learn a lot about imperative programming especially when it comes to separation of concerns. With such a long file and a maximum of 26 variables which are all global ones, you have to think about where to put what code snippet to avoid side effects and maintain the structure. Generally speaking, by engaging with projects like this one or the previously mentioned Android app you can think of problems in new ways and use your knowledge from one technology in another. This is also what Mr. Tate states as you will see in the next section.
7 Languages in 7 Weeks
Let’s assume that you’ve actually managed the difficult task of downloading and installing the interpreter or compiler for the language you are interested in. What should you do next? What will be your first program? – Joe Armstrong, creator of Erlang
This is an excerpt of the books preface. If you also have these questions in mind whenever you think about starting a project, then the book will be just right for you. It is stated that new programming models emerge roughly every 20 years. Some emerging new languages are covered and some well-known languages, too. By doing so you can see how different paradigms can overlap or make clean breaks. Concurrency, for example, is a topic which is treated very differently in different languages.
Here is quick overview of the languages and some of the aspects you can learn from them:
- Ruby: Object orientation, dynamic typing
- Io: Prototype programming, dynamic typing, concurrent programming
- Prolog: constraint-logic programming, declarative
- Scala: Functional programming, Object orientation, addresses critic about Java
- Erlang: Functional programming, concurrent programming, immutability
- Clojure: Functional programming, treat code as data, lisp near
- Haskell: Functional programming, strong static typing, lazy evaluation
How to proceed
As soon as you have worked through the book and you are still eager to learn you can search the web for code katas or object calisthenics. These little exercises will help you build more confidence in programming especially if you choose unfamiliar technologies.
As always thanks for reading! One rumors that you can find a pdf version of the book if you search the web. Maybe you should take the chance and start right away using it 😉