It is no secret that in order for companies to remain relevant in the tech business, they must invest in the continuous education of their people. This is especially prominent in software development shops with various clients and partners across the globe and a wide coverage of domains and technology stacks.
There are many ways to support growth and education. From paid learning courses and materials, in-house training, engaging in lab projects or pairing with more senior level buddy, to allowing people to use office time for educational activities at one’s choice.
In software, we face the challenge of being able to adapt in fast paced and continuously evolving world of programming languages which went polyglot a long time ago. New players pop up every year, while the old grumpy C code is not about to retire. Therefore we are looking for ways how to encompass majority of languages without dedicating special interests in all of them.
That’s where our Programming Principles Series enters the stage. It’s a series of talks and workshops focused on theoretical foundations and concepts used in programming. It’s not tied to any particular language or programming paradigm, and while it may seem a bit academic, we make sure the concepts are demonstrated on a subset of modern languages. The fun part is then seeing the language feature battles in the form of application of these concepts.
So what we’ve thrown in the bag?
This is a non-exhaustive list of core principles and concepts to give you an idea of what it is all about:
- Type inference
- Algebraic data types
- Pure and Higher order functions
- Pattern matching
- Monadic structures
- Macros and metaprogramming
- Generic typing and Higher kinded types
- Memory management models
- Structural & Nominal typing
- Concurrent programming
- Actor model
- Dependency injection options
- Map/reduce operations
- Codecs and Serdes
What languages are used for illustration of the language features? Mainly Java, Typescript, Scala and Rust with some Kotlin or Elm to the mix. But the door is open for any other, not too exotic, if it helps to broaden the view.
The main goal here is not to become a master bad-ass developer able to switch language or platform in no time. It’s about having solid baseline to pick up new programming stuff with ease and be efficient when communicating intents across language boundaries. Abstracting away from syntax, grammars and implementation details, we embrace the diversity by understanding that it’s not that diverse after all.
Another video from the series coming soon…