The concept of abstraction has fascinated me since I read Head First Java at age 10-11. This book introduced me to Java and Object Oriented Programming, making abstract concepts accessible to me at a young age.
I’ve had three pivotal moments in my programming journey:
-
Realizing we can abstract real-life objects and encode them in code, through OOP, using data and actions. This led to a different understanding of the world around as well as a different way to approach and solve problems. It made me a better programmer and I felt like I’m getting smarter as a human being.
-
Learning about first-class functions in JavaScript, where functions can be treated, passed, returned, and manipulated as values. I used this wonderful lessons by the awesome MPJ and they got me hooked to functional programming and left me wanting more. Unfortunately, my desire was later faced by the limitations of JS/TS as FP languages.
-
Discovering, by mistake, an awesome playlist that taught functional programming concepts in a simple and clear way in TypeScript. The creator tried to replicate the wonderful structures that are commonly used in FP using TS and its type system. This deepened my interest in functional programming even more, and I decided to pursue it because it’s hella fun to go one more abstract level further.
Currently, I’m learning Category Theory using these lectures and exploring programming languages like OCaml and Haskell. The declarative nature of these languages just intrigues me, and I hope to find practical applications for my day-to-day work within this world, but I’m 100% sure that it will satisfy my “mental training” needs.