My learning philosophy today on software development

When I started coding, my focus on learning was trying to master the specifics of a programming language.

Then a few years later, my focus moved into trying to master specific frameworks and libraries.

But then I heard Uncle Bob Martin saying that software development has not changed in the last 40 years. I also heard Mattias Petter Johansson’s advise for programmers:

“… learn the stuff that doesn’t change around a lot. Learn the fundamentals that we figured out in the 70s and that have been true since. Learn programming in general. Don’t be a better Angular programmer, or even a better JavaScript programmer — just be a better programmer, period.”

So today, my focus moved into learning the basic principles of software design, because these are the things that do not change a lot, and these things will help me make software that is highly maintainable, which many master programmers say is the primary value of software for customers (and for the programmers also). And the maintenance phase is the most costly phase in the life of software.

“The true cost of software (80%) lies in its maintenance, not in its initial development.” — from “The Art of Clean Code” by Victor Rentea

Today, my learning philosophy is like this:

“Just-in-time learning” when learning about specific languages and frameworks and libraries

“Ahead-of-time learning” when learning about basic principles and practices in software development, and about programming in general

For example, there was a time when I was trying to learn AngularJS because it was the frontend framework being used in my new job (just-in-time learning of specific frameworks). Then on the side, I was consuming “Refactoring: Improving the Design of Existing Code” of Martin Fowler (ahead-of-time learning of general concepts.)

There was also a time when I was training on .NET Microservices and .NET Core while working for Arcanys (just-in-time learning of specific frameworks). At the same time I was reading “Patterns, Principles, and Practices of Domain-Driven Design” (ahead-of-time learning of general concepts).

I hope that kind of learning philosophy is okay with you. :blush: