Matteo Agosti

Software engineer

Hints for Improving the Learning Process

As a software engineer I’m always challenged with new languages and frameworks, potentially of great use in my daily work. During the last 5 years, in fact, I spent several time (almost everyday) in learning new things. With this post I’d like to share my considerations on how the learning process could be improved. I am far from being an expert on learning methodologies and related-stuff, so consider this post more like a list of tips that works… at least for me :)

Avoid information overload and stay focused

Distringit librorum multitudo
(the abundance of books is distraction)

Seneca Epistulae Morales Ad Lucilium

I wonder what Seneca could have said of our times if almost 2000 years ago there were already too many books. Joking apart, especially when learning new things, the first issue you have to face is trying to narrow down the number of information sources available. It isn’t easy with so many free channels where good information can be found: blogs, tweets linking to other blogs, podcasts, iTunes U and many, many others.

Despite being tempted to read as much as I can, the first thing I do when approaching a new learning subject is find out the community of people behind it and spot which are the individuals with good reputation. By following only the latter I avoid all the redundancy of contents caused by re-posts.

I then list all top resources on the subject discussed within the community - mostly articles and books - and analyze them roughly. I almost end up with a long list of readings that I narrow down to a maximum of 5 items. This doesn’t mean that I’m not going to read everything; it just means that in the first learning phase I’ll force myself to stay within this boundary. Additionally, I try to focus on one reading at a time (from start to end) avoiding multitasking, because it can hurt learning effectiveness. When you start digging deeply into a resource, in fact, the amount of time needed to switch to another one increases dramatically, thus making you learn more slowly and become less efficient.

Understand your learning styles and combine them

Another hint for a good learning strategy is understating which are your best ways of learning. This is an absolutely personal factor as everyone has his/her own learning habits and styles. I’d just recommend trying to search for resources that suite your learning styles. As an example, I am that kind of developer that needs to get his hands dirty with the code and best understand things by breaking them down to discover how they are made; I’d also add that is even better if the thing doesn’t work out of the box because solving problems is, at least for me, the best way to make what I’ve learned sticky into my head. After reading books and articles I typically end up finding good projects on GitHub and spend time understanding how they work.

The more regions of the brain that store data about a subject, the more interconnection there is.

Recently I discovered that learning in more than one way could also help in permanently pin things into my mind. Instead of just reading an article, listening to a podcast or watching a screencast - which clearly involves other areas of my brain - helps me in recalling what I’ve learned. I’d suggest focusing on learning in more than just a single way.

Set learning goals and practice as much as possible

There is no achievement without goals

Robert J. McKaine

Always have learning goals. I should have made this sentence sticky as many of the failures I faced when learning something were due to the lack of clear learning goals. You can see goals as the milestones of a project: without them you clearly don’t have an end, you can’t track your progresses, you can’t motivate yourself for having reached a checkpoint. Actually, without goals you do not have a valuable reason to progress within your learning.

My goals when learning a new language or framework are always related to solving a problem I’ve already went through with other systems. In this way I can focus more on applying what I’m learning rather than understanding the problem itself. Not surprisingly, many times I come out with a better solution thanks to the facilities of the new language. In addition, approaching something you already know, but from a different point of view, forces you to make comparisons and this helps cementing what you have learned.

Always create opportunities to apply what you’ve learned, whether on a sample project or on a real one. The most important thing is that you should do it as soon as possible, not to let going away what you have just learned. Practice is extremely important and you should never stop it. Personally I always try to introduce something new inside my work routine and as soon as there is an opportunity for a new project I jump straight into it by bringing whatever I learned (the fact that this is then accepted is another story :P).

Teach and get taught

If you can’t explain it simply, you don’t understand it well enough

Albert Einstein

It is well known that one of the best way to learn something is teaching it to someone else. The reason why this is true lies in the fact that to convey notions and make them comprehensible you first have to clearly understand and organize them in your head. One great way to achieve that, even if you don’t have students, is to talk as much as you can with colleagues or friends interested into what you are learning. You’ll be surprised to see how hard is to explain concepts if they are not totally clear in your head. In addition, you could do a sort of knowledge transfer where you get taught back on things that could potentially interest you.

Finally, don’t be afraid of engaging in dialog or ask questions within communities. It’s not easy, but always useful to get others point of view. It can dramatically help in taking the right decisions or solving issues. As an example, during the last months I’ve discovered completely different viewpoints on building server side apps using pure JavaScript; that has been a mind changer for me, always focused on using JS just for front-end development.

Never stop learning and feed your enthusiasm

If you never stop learning, you will never stop seeing the possibilities

Bill Gates

The last but not least hint is learning over time. In my opinion (and luckily I’m not the only one) the best way to learn is to keep learning. Never think that you reached an end, because around the corner there will always be something new to discover and study. Never think that you reached a perfect state, because there will always be a better way for doing what you’ve already done. The only way to progress and improve is throughout learning. In addition, it has been scientifically proven that the learning process positively affects the brain improving the old gray matter :P

Always be enthusiastic of what you learn and take frustration as a sign of determination.

If you want to discuss about this article, I'm @matteoagosti on Twitter.