Learn new technologies efficiently

来源:互联网 发布:6级听力 知乎 编辑:程序博客网 时间:2024/04/28 06:06

Books are infinite in number and time is short. The secret of knowledge is to take what is essential. Take that and try to live up to it.
~ Swami Vivekananda

What Swami Vivekananda said more than a century ago is apt for the current internet age of information overload. As a software developer you need to deal with the rapidly changing IT industry and keeping yourself updated with the new technologies is one of the most important skills that you need to have. Sadly the fact is many developers find this task too daunting. A common complaint is there is so much to learn and deciding the right learning path is difficult. This task is made difficult further by the fact that new skills must be acquired in a timely manner. If you are too late to upgrade your skills you face the risk of missing good opportunities. So, developers are left with this question in their mind - How to learn a new technology in a given (usually short!) time frame?

There are a few factors that need to be considered to answer this question. Let's enumerate them in brief:

Decide what to learn

This factor may sound quite obvious but it is an important aspect. If you look around you will find so many new and upcoming technologies or versions that it becomes difficult to decide what exactly to learn. Let's say you an ASP.NET developer knowing web forms 2.0. When you think of upgrading your skills instantly plethora of options are thrown in front of you - ASP.NET 4.5 features, LINQ, MVC, Web API, HTML5, SignalR, WCF, REST, EF, new security schemes, TDD (although it is not a technology as such but still one needs to learn this way of development), design patterns (IoC, DI and others), jQuery and dozens of JavaScript frameworks! From all these overwhelming options you first need to narrow down what is needed for you and what is not. While making this selection you need to ask these questions to yourself:

  • Which new technologies my existing project / company needs?
  • Which new technologies are needed to increase my value in the job market?

Thinking about these questions will help you figure out a few topics that can fit onto your plate.

Make a list of sub-topics

Once you arrive at one or two main technologies (priority wise) you need to decide on what sub-topics or areas of that technology to learn. Modern technologies are quite vast and difficult to master in one go. You need to adopt a gradual approach to understand and master them. How to arrive at this list of sub-topics? See what are the most common programming and business scenarios you need to deal with on regular basis. For example, if you are primarily a web developer and your project has dedicated personnel for handling database tasks such as creation of tables and stored procedures then you can focus on EF database first approach but may not be (at least immediately) on Code First. Same can be said about topics such as asynchronous programming, advanced WCF techniques and dozens of JavaScript libraries. These individual topics and technologies might be important but they may not be your near future concern and hence can be on waiting list. The point is to arrive at a selection that is best suited for your current and near future job roles.

Figure out the most efficient way of learning the selected technology areas

The biggest bottleneck developers find while attempting to learn new technologies is time. Modern technologies are changing so quickly that learning them in timely fashion becomes equally important. As a trainer I come across many individuals who have lost their precocious time in deciding how to learn a new technology. After making a few attempts to learn new things on their own using various online (websites, blogs, videos) and offline (books, magazines etc.) they realize that although they have learned things in bits and pieces, at the end of the day they are still not confident about what they learned and fail to apply their knowledge on real world projects. To avoid such a  situation you need to figure out the best possible mode of learning for you. Remember, what is good for person A may not be good for B. So, you need to arrive at a learning mode by carefully evaluating things such as your time availability, grasping skills, access to resources and so on. If you feel that you can't reach your target in a stipulated time do not hesitate to join professional training courses. I have already wrote about theimportant of classroom training programs in my earlier article. The point is to figure out a structured way that :

  • Covers your expected set of technology topics and sub-topics.
  • Ensures that you learn and apply the new technology in the right way.
  • Allows you to gain good understanding of the technology in a given timeframe.

Set well-defined goals and timeframe

While learning a new technology, through a professional training program or otherwise, it is important to set well-defined goals and their respective timeframe. Ask questions to yourself such a - Why am I joining this course? What do I expect at the end of the training? Will I be able to work on real-world projects indecently and confidently after completing this training program? Set some realistic timeframe for each goal you decide. My experience of  training .NET developers tells me that if you are self-learning a new technology the time required to get a good understanding of the subject is quite long as compared to when you attend a formal training course. This is obvious because professional training programs have predefined timeframe and somebody is there to ensure that things are taught appropriately in the given timeframe. When you learn things on your own there are  chances to get deviated and distracted from the core topic time and again. You always need to keep your goals in mind and bring yourself back on track whenever needed (in a formal training program it is the trainer who owns up this responsibility).

To summarize, while learning new technologies you need to decide - What to learn, what is the best mode of learning and how can you accomplish your goals in time.