January 15, 2016

A new perspective

From time to time you get used to the environment you work with, you feel confident about what you do and you think that your approaches are kind of safe an standard.

That is something really naive for someone who is a developer, I have been/I am that person. During my first programming years I was exposed to Java and C++, these were the door-openers for my to the entire programming world.

I have set my expectations around the way these environments, and for a long time I thought that I was right in investing time and effort into making myself an expert on them. But then after a while, after some rough corners and rusted code I have thought to myself 'there must be a different way'.

And of course we have the Internet of things to ask for opinions, and that I did, and what a wonderful world I have found after that.

In my point of view, programming is much more like carpentry, there are tools to do the work, there are different kinds of wood, there are different kinds of furniture, and you can do many things with a different combinations.

As you might know carpenters have different styles and tools depending on how they learned to do their job, and I think of programming in a similar way, we do have really different ways to do things. And we should better know the most we can in order to make a decision.

So, to make it short, here are some programming languages that I would suggest you to learn (but learn, not just try, learn to the core by doing something with them):
  • Ruby: You will get a whole new mindset about programming and problem solving, it combines metadata-based programming, imperative programming and functional programming.
  • Go-lang: This is more than a language, is a whole environment that provides a practical and really simple programming experience.
  • Clojure: Still learning this, but is so much different to what I normally use that I'm really having my brain twisted backwards.

January 6, 2016

A strange path in development

During the time I've being a software developer there are many things that I noticed in my personal growth as a programmer, I can quickly list the following phases/periods:
  • Beginner: You do have notions for programming, but write awful code.
  • User: You start writting better code, you also see your previous mistakes.
  • Experienced: You know the ground, and you are comfortable with it.
And the interesting thing about these phases is that are technology/language/paradigm based. What I mean with this is that you cycle through these phases every time you learn something new (at least in programming, in my personal case).

First I learned structured programming, then object-oriented programming, then aspect-oriented programming, then functional-programming, then DCI. All of them in a different set of technologies and tools that completely changed what I thought I knew about programming. This is a learning pattern of mine that I know it works, every time I try to learn something new I know that these phases are going to be in the way.

I kind of know now how I learn, and I can do something about it. Now it's simpler to learn something new, and at the moment this new thing is LISP via Clojure, not sure what is gonna happen, but I can tell you that my brain is breaking old rules every week.

I think that's the message for this post, know how you learn, then kick the shit out of your brain.