Over the past two years I have had the opportunity to teach university students from all over the world about software architecture design and quality analysis. During this time I have received repeated questions on what to study to become a successful professional in the field of software engineering.  Often a follow up question is: Should I learn this technology/library or this other competing one.

Here’s a summary of  my answer to those students.

  • Study and learn many different technologies, algorithms and programming paradigms
    • Acquiring new tools and techniques is a must to get ahead and stay ahead.
  • Study many different real systems
    • Study and learn from the widely acknowledged successful sw. architectures.
    • Especially, understand the principles applied, the context of application, the constraints of the domain and the value created
  • Tinker and experiment
    • Play around with as much projects, products and technologies you manage to get hold of, if only for a little while.
    • It does not have to result in a completed show-off project, in fact, it does not have to result in anything other than you having a bit of fun, with stuff you never tried before.
  • Learn some basic economics
    • Enough to understand investment calculus, ROI, net-present-value, book-keeping basics like cost and payment, income and revenue, profit and loss.
    • You need this to become a bridge builder between stakeholders, in the end you need to understand and express the value you create to make all stakeholders aware.
  • Engage in situations where you lead other people, and seek to work for the best leaders around.
    • observe and understand what the leaders you work for are concerned with
    • observe leaders and act lika a leader yourself
    • With seniority your accomplishments will be through others, both technical and non-technical persons.
  • Build your network in both software and other domains
    • The future is full of higly competent people that knows software,
    • Get ahead by having a broad knowledge of many domains and deep knowledge in a few
  • Write lots of real production code and maintain it for some time
    • There are no shortcuts around this.
But above all these, is to stay curious and to search for new insights.
Every day, …
Every week,
Every month
Every fall and spring
Every year