Self-improvement

The rules of the game have changed

During many years, society expected you to graduate and find a job you kept until your retirement. Not many people changed jobs and only professions like medical doctors and lawyers keep studying and improving their skills.

Now the rules of the game have changed and nobody expects that almost from any profession. Maybe you are a baker and expect to use the same ingredients and make the same bread over and over again, but your clients can change or acquire new tastes! Thus, what about improving the costs? Maybe a new machine could make the baking process cheaper and you should know about its existence…

So, what about software engineers?

Software-related professions are very young if you compare with medicine or legal ones. Not only technologies change, are born and disappear each year, techniques and even (some) Computational Foundations too.

Yes, if you are a software engineer you should be improving yourself.

If you don’t do it, you’ll be passed by your profession mates, you will lose interesting jobs and of course, you’ll end up being a mediocre programmer.

Note that I’ve said programmer and not software engineer1, that’s because if you don’t improve yourself, you are walking backwards. Our profession is like a race. If you are working the same way 10 years ago, you are stopped in the middle of the track while your competitors are running towards the finish line.

What should be my sources of study?

Everything, literally everything. From MOOCS, masters degree programes to books.

MOOCS are a great tool to learn new technologies and I prefer them over books simply because I don’t like buying books with expiration date as technologies tend to have. Coursera have many specializations, Udacity have what they call nanodegrees and edx have multiple courses of several topics. My last course was about Ocaml and was taught by France Université Numérique. Its quality was excellent and it helped me understand functional programming foundations thru Ocaml.

Books fill the empty space that college education gave me. I try to read at least one each month although it is difficult given the length of software books. I prefer to buy my books in second-hand stores in abebooks but you can buy them in epub or Kindle format to read them in a eReader. Currently I’m reading Soft-Skills and Refactoring.

Of course there is also the option to earn a M.Sc./M.Eng. (or M.Res. in my case) in a reputable university. Assuming you have the money (or can ask anybody but a bank2), it is a good way to upgrade your qualifications and your career. Of course, don’t join a masters program just for the degree, join it because you are passionate about the topic they teach.

Open source projects

It is said that every programer3 should be programming in his or her spare time. I fully disagree with that idea, should a surgeon be making surgeries in his spare time? But, while I disagree, I agree that having open source projects is a great way of forming part of the community and, of course, the best way to show our skills.

So, maybe the solution can be convince your manager to free some parts of company software you wrote. Try to show him the positive effect that can have freeing some module and I’m sure that he will be delighted to achieve good PR to the company. Thus, remember him that this module will be improved with no cost for other developers, so it’s a win-win situation: good PR and gratis software.


  1. Please note that I don’t consider the terms programmer, software developer and software engineer equal. A programmer is a person who writes code to solve a problem, usually he or she has no specific education and uses a programming language (and environment) as a tool. Software developers are programmers that fully understand the stack where their code runs. Software Engineers are software developers with knowledge of the foundations of software they write: algorithmic theory, heuristics, programming language theory, concurrent/parallel programming, security, software design, information theory, project/client management, etc. ↩︎

  2. I don’t suggest you ask for a bank loan to study. Work for several years and when you have the money apply to join a master program. ↩︎

  3. Every software engineer is a programmer. Don’t be fooled by software designers that create UML diagrams and pass them to programmers that code. Software engineers rely on programmers for many parts of the code, but they need to be lead by a software engineer that will code with them. ↩︎