Wednesday, January 20, 2016

Learn technologies just in need not just in time

Technologies come and go, and if you try to cope with all new technologies you will get dissapointed — if not totally failed!
Even if you try to follow a single technology, like .NET or javascript for example, you will not be able to follow all their advancements!
On the other hand, if you buy in every new trend and try it directly in your production code, then be prepared for disasters!  One of the popular reasons of software project failures is depending on immature technologies!
I have heard some geeks said that they didn't use any product of Microsoft till the first service pack is live!
Even if we take their words seriously, we will not be able to apply this advice on all new technologies. And it seems that the solution may be to avoid learning new technologies altogether!

But how to keep competitive in this dynamic industry?

1- Spend most your time learning core concepts.

When I interview a candidate, most of the questions I used to ask related to technology agnostic concepts. Concepts that will not fade with time and differentiate geeks from amateurs.
For example, I rarely ask a candidate if she knows OOP concepts or what she knows about design patterns, instead I give her a simple problem that could be simply solved by applying a certain pattern.
Among the concepts that I believe any serious developer should invest most of his time in:

  • Object Oriented Programming (OOP)
  • Object Oriented Design (OOD)
  • Design Patterns
  • Database design
  • Algorithms and data structures
  • Mastering a general purpose programming language

2- Learn technologies just in need not just in time!

Someone gave this advice before, and it helped me too much during my career path!
In brief, you don't need to learn every new technology, and you can't! But when you need a solution for a certain problem, then it's time to learn a technology that solves this problem, or do it yourself!
But how do you know their is an existing technology that solves your problem?

3- Keep updated with emerging technologies

Don't learn new technologies till you need them, but keep monitoring the trends and know what problems are solved by which technology. I will tell you how I do this right now...
  • Register in an RSS feeds aggregator, I am using Feedly
  • Subscribe in important development sites' RSS feeds. I am following a bunch of sites/blogs, but here are the most useful IMHO:
  • I created an account on Quora some days ago, I can't remember why! But they magically send very interesting content to my email, and it seems they have a strong recommendation system that they customize the content they send me day after another! So, go and create an account on Quora, follow some topics their, upvote some answers you feel good, and you will be impressed of the content they will send you, I promise :)
  • Medium is a great source for geeks as well, visit it frequently.

4- Select technologies that worth knowing about, not learning

Actually, I rarely read a complete article from my feeds! but I keep passing through the titles, and I do this many times, every day! When I notice some technologies gain traction, that is, I see their  names repeated frequently, I  know this in the correct time to know what this technology is all about. I don't learn how to use this technology, rather, I learn what problems it solves and may read some reviews from developers who already use it.
This advice has a good side effect. Many times you will be asked in technical interviews about technologies you don't know. Good answers here is to provide an alternative. For example, if you are asked about NHibernate, which you never used, you can answer simply that you know Entity Framework instead! This gives the impression that you know what you are talking about, ... and it works!

5- Select technologies that worth learning

This advice is not for you unless you feel confident about your level in the first advice.
When you follow the previous advice (#4), you may find that certain technology gain more traction that it got adopted by giants, many companies has vacancies for it, ..etc. Then it's time to start learning it. For example, Microsoft created TypeScript. People kept talking about it for a while. I applied the previous advices on it till Google announced that the next AngularJS version will be built using TypeScript. Now, it's obvious that this is the correct time to adopt TypeScript (I didn't took the decision od learning TypeScript till now, just for priorites)


This is the best advice I can give for the busy developer to keep competitive in the market.
If you feel it useful, kindly help spreading it with your friends

No comments:

Post a Comment