Tech Corner, HotoWOW - 26. November 2021
header_image

Programming Principles – My Way of Being a 10x Developer

If I can name one thing that opened my eyes and showed me the path from Java-orthodox-land, it was attending an online course on the Functional Programming Principles in Scala by Mr. Odersky, the creator of Scala. It was not only a gateway into functional programming, but learning Scala – rightly considered a complex language – has led to me being able to properly name and reason about the components and characteristics of a computer program.

A few years down the road, and my Programming Principles Series has been born out of this love for programming. Over my 15-year career as a software engineer I’ve had the chance to work with Java, Typescript, Scala, Bash, a bit of Javascript, C#, Rust, Kotlin, Python and Elm. Trying all these, it's natural to compare the language features, developer experience, productivity and other aspects relevant to a coder's life that come from each. But more importantly, it's been intriguing to see what these languages have in common. While each has its own place and purpose, and special features or killer application, they also all share many things – so I started diving into theoretical concepts, and came up with a list of topics that I considered very interesting in how they can be applied to all the languages.

There are few reasons why this then evolved to become a series of public talks...

1. I always felt like giving back via sharing knowledge to the community I care about. It's my way of being a 10x developer. When you can inspire 10 people to become 10% more of their professional self, you’ve created the value of one whole developer... out of nowhere. Plus, it's one of the few community-building exercises we can take to the after-party, where we can enjoy heated discussions and friendly arguments without the pressure of a real deadline, and with a beer in our hand 🙂

2. It's a way to move myself forward. One of Richard Feynman’s many quotes (with questionable authenticity) goes: "If you want to master something, teach it." I’ve found that's very true. In order to prepare for any possible clarifying question, you need to go and answer it beforehand. This can lead to deeper and wider research about the topic.

3. It's a means of promoting myself and my company – which gives me the platform for more growth in this direction. We just want people to know what we are interested in, and what makes us happy.

So far we’ve talked about:

  • Algebraic Data Types
  • Pattern Matching
  • Monadic Data Structures
  • Map/Reduce your Streams
  • Advanced Polymorphism
  • Generics
  • Pure Functions and Immutable Data Structures

There are many more topics that we'd like to cover, including Async Programming, Meta programming, Memory management models and Abstract Syntax Trees. I'm looking forward to seeing what comes out of these sessions!

I did the Functional Programming Principles in Scala course in the mild winter of 2014. Almost a decade ago, and plenty of time to have become a 3x father over since. My priorities in life are super clear now. And as you can imagine, this greatly reduces your ability to be any more of an “X developer” – assuming you don't count staring mindlessly at a wall at the end of the day drooling! The ambitions are hard to kill though. So you have to be more creative with your work planning. Stepping back and looking at the theory behind programming is a good fit. It doesn’t require as much time as active development, and can be exercised within smaller focus windows. You can multitask and listen to podcasts while driving to pick up the little one from a dance class, or during those nights when you’ve accepted there won't be much sleeping anyway.

about the author

Michal Kaščák

blog author
Michal is a knowledge-obsessed, life-positive software developer who approaches every day with a passion for learning and a drive to inspire others. As a natural problem solver, he excels at applying creative thinking to solve complex problems and is constantly pushing the boundaries of what is possible in software development.
blog author

READ MORE