Learn, learn, learn… but what, when and how?

In IT, constant learning is a must. If you have chosen this career path and you hope to stop educating yourself right after finishing university, you better change your decision ;) Getting to know tools in your expertise area is part of everyday work. We often call it craftsmanship. Tools and technologies are changing rapidly. If you don’t follow newest trends, you will quickly fall behind the others. That’s why on almost every IT conference, there is at least one motivational talk about necessity of constant learning, broadening your horizons and getting out of your comfort zone. Stagnation kills! But as soon as you do realise it and you start making up for the lost time you may get into panic mode. There are so many stuff to learn… So many tools in your domain which could make the life much easier if you only knew them. So many other technologies to try. So many courses to take, books to read and workshops to attend. And only limited amount of time and other resources. What can we do about it?

I am from Java world and I’ve been working as Java developer for over four years observing different approaches to learning. I’ve been observing myself: how my personal approach to learning evolved over time. I’ve been observing my teammates and colleagues to learn from their experience. Most of my professional life I’ve spent in Cracow which is a city full of IT conferences and meet-ups. There is no way to attend all of them. Often, one day there are multiple very valuable events. Some people already got bored with ‘yet another meet-up initiative’. Recently, I’ve moved to Wrocław where the situation is quite different. I stepped into new environment and learned new behaviours. In this article I would like to share conclusions I gathered during this time.

For me, definitely the best place to develop yourself is the workplace. You can often hear that learning is most effective through experience, while doing things instead of reading or watching videos about them. At work, you have almost 8 hours of practical experiences — 8 hours which can be filled in with learning new stuff. This is one of the aspects I like most about IT: if you have challenging project, with smart and inspiring people around you don’t have to spend evenings studying at home on your own. Moreover, you gain professionally useful skills which you can apply directly not only for your own benefit but to move project and company next step further. If you feel like you don’t learn much in the current project, it sounds to me like a good time to change… the project ;) Usually to achieve it, you don’t have to quit your current job. Most organisations already realised that people need changes to grow and stay motivated. As a result, programs such as ‘internal job opportunity’ were created. Lately, I’ve used such opportunity. After working over one year in a web project, I’ve changed team inside the company to learn more about service-oriented architecture and backend world. Lately I’ve also discovered that in order to learn something new, you don’t have to always aim for the newest technologies and brand new project. Smart people you are working with are far more important when it comes to learning than technologies. Every brand new project will become legacy after some time (usually sooner than later ;)) and people often stay longer. From my personal experience I can say that even if you end up working on a big monolith application with a long history of commits, but with smart people caring about quality, eager to learn and not afraid to fail, very soon someone will come up with an idea to define bounded contexts and get some parts into services… Isn’t it a good way to learn not only about services but also motivations behind, problems of both approaches and refactoring practices?

Brain provoking projects and tasks are one way to learn at work but it’s not the only one. For me, code reviews are also perfect way to learn. In my team, code reviews are every-day practice. Each task before marked as done needs to be reviewed. The aim is not only to find bugs and code-smells but even more importantly to share the knowledge. Often, it is an entry point to further discussions or a place to exchange interesting materials about new libraries. It’s a good lesson not only for an author of the code under review but for the reviewers as well. It’s one of the occasions to seek for potential improvements, rethink architecture and look on the solution from the user’s perspective. Very brain-teasing.

Besides everyday tasks which develop our domain related skills, it is good to get out of our expertise area from time to time. Learn something from the completely different world. That’s how we broaden our horizons. Learning yet another Java library will become everyday bread very quickly… That’s when conferences and meet-ups come into play. If you are a Java master, don’t limit yourself to attending only Java Users Group events. Check other societies. Discover Python or Ruby community. If you have always been working with front-end, visit business intelligence or big data groups. The aim is not to become an expert in all these areas but to open yourself to different domains, see what problems people encounter and how they solve them. It may inspire you to implement solutions from different domain into your own, add a new tool to your toolbox or maybe even switch technology you’ve chosen for the new project. It will let you get to know different people and learn different points of views. If you have yearly conference budget, try to choose conferences from different areas. Last year I’ve attended three big Java related conferences in Cracow: Devoxx, Geecon and JDD. One of the main themes in all of them were micro-services. The other keywords were Scala and Akka. They were all very good conferences but the content was similar. After this experiment, I’ve realised that there is no point in attending all existing conferences from one domain. Most probably, all of them will be focused on newest trends within the area which should not differ very much during one year. This year, I’ve decided to join Lambda Days — http://www.lambdadays.org/ which were mainly around Erlang Virtual Machine and languages designed for it. My Erlang knowledge was limited to three-days course taken a few years ago... This conference was a really good eye-opener for me. I felt like discovering world besides Java :) Meeting Bruce A. Tate (author of Seven Languages in Seven Weeks), who voiced his appreciation to Jose Valim, creator of Elixir language (http://elixir-lang.org/) used by Whatsapp and Heroku, made me realise my knowledge about Erlang world is far behind the reality…

If we are talking about conferences: they are not only about watching presentations (most of them in fact can be watched later on at home) but about talking with people and networking as well. Sometimes skipping a talk and talking with other attendees may turn out to be far more beneficial. If you are so passionate about all topics and don’t want to miss a word, don’t skip after party. :) I am not a party person but it’s a perfect way to get to know people from different ecosystems, with different backgrounds and point of views.

Another, very nice and fun way to broaden your horizons is to organise “Watch together” sessions. In my company it works the following way: once in two weeks we gather together to watch a video from a past conference, TED talk or anything else which is IT related and inspiring. After watching we discuss the topic. Quite often discussions after are even more interesting and inspiring than the movie itself. This form of knowledge sharing it’s very easy to organise, requires little preparation, is a good team-building activity and fun in the first place! :) A little bit more demanding form of creating learning-oriented environment are “Tech talks”. They can have different forms. We’ve created a habit of having them once in a month. Someone prepares presentation about technology/tool he/she is using and finds worth sharing with others. It can be live demo or power-point presentation. It’s also a perfect way to spread knowledge about internal products and projects from your company. Especially useful in bigger organisations, with multiple locations. It may help you realise that someone is successfully using framework you struggle to adapt in your project or that another team already automated process to create change requests on production. It will make people more aware about what’s going on in the company. It’s also a great learning experience for the person giving presentation. Presenting something or teaching others is a perfect way to becoming an expert in a given area. If you like teaching, organising internal practical workshops for your colleagues is another step further. Such workshops are not expected to give in-depth knowledge on a particular subject but usually are good starting points for further learning.

It would be un-fair, not to mention benefits of self-education in the privacy of your own house. If you get inspired and motivated to learn something new there are many possibilities. I can recommend courses on https://www.coursera.org/. They are a good way to get first hands-on experience with a new technology. They guide you through theory and practical assignments. Some of them are time-boxed and require regular work every week to complete the course. Coursera is obviously not the only platform of this kind so you can choose whatever suits you best. Reading books, online resources are usually also beneficial to make the first steps easier. However, I would like to emphasise here that theoretical knowledge without practical experience is usually not the most desirable outcome :)

All of the above are only examples of what I find most effective to take care of my professional development. The list is not exclusive and what works for me may not work for everyone. My goal was to show you the wide variety of choices so that you can try yourself and pick the most suitable one. If I had to summarise them in three golden rules, they would be:

  1. Try to get the most out of your work. Surround yourself with smart and helpful people. Learn from doing ambitious tasks and organise knowledge sharing activities to create learning culture in the organisation.
  2. Attend meet-ups and other IT related events. Talk with people from different backgrounds. Attend conferences both from your domain of work and outside of it.
  3. Get in-depth skills with online courses, materials and most importantly by contributing to practical projects.

And remember: rest, fun and taking care of your body are as much important as feeding your brain!