As software engineers, developers or architects, it is pivotal to stay current and relevant within the technologies and the domains we work. Some of the skills we studied a few years ago at uni have become outdated, so unless we get in charge of our learning we will lose our competitiveness. Also, we quite often sacrifice learning and development in favour of project deadlines.
This short-term thinking carries a long-term price!
Although it is impossible to stay up to speed with everything in this rapidly changing world of I.T., we need to choose a few areas that interest us (whether these areas are related to our current job, or the one we want in the future) and carve time out to up-skill.
Step #1 towards continuous learning is to set time aside!
In this article I will share the ways I use to sharpen my skills and a couple of others that are next in my list!
I read a lot! Irrespective of the methodology (conventional or digital), having a broad library of books is essential, as they provide a deep understanding of the subject in question. I avoid buying any technology specific books as they have an expiration date: when a new version of the technology they cover is released, or a different way of doing things becomes more popular, they become obsolete. I instead favour:
My O’Reilly subscription is worth every penny, as it provides on demand access to a plethora of technical books (and other media, like videos, conferences, tutorials, etc). Although I prefer paper books, the ability to quickly browse a book is really handy.
Reading blogs is one of my favourite methods to keep up to date: I totally respect other fellow-developers who take time to share their personal experiences, opinions, successes and failures using specific technologies. Some of the best tutorials out there are written by amateur technical authors, hidden deep down Google’s search! I use bookmarking apps (like Pocket and OneNote) to save them into my personal stack and then read them when I am commuting or between meetings at work.
The currency of blogging is authenticity and trust — Jason Calacanis
As long as we use our critical thinking to distinguish good quality blogs to those written in haste (frequently with half-cooked ideas or even misleading), then blogs are great to help us evolve and gain insights in new territories.
Medium is a terrific home for technical know-how articles and my preferred publication is, by far, Towards Data Science (cc: TDS Team). Other blogs include Coding Horror, The Seattle Data Guy (cc: SeattleDataGuy), DZone etc.
Following technical influencers in social media is another popular means of keeping up to date with technology. Reaching out to them with questions is essential to enhance our learning. One reason they maintain their ‘industry leader’ status is because they are generous with sharing resources and experiences, and they all welcome the engagement from people who want to learn from them.
Who is reshaping our industry is the million-dollar question. I will refrain from giving any recommendations on here, as we all have different interests and there are literally so many inspirational leaders out there, but you can always see who I follow as an example.
For the last 9 months I have started my own blog. Initially it was daunting: I was erroneously thinking that only experts with original ideas should write blogs, or that my views might not be good enough (imposter syndrome, you say?), but I quickly realised that I am writing for myself first — it is a means of recording my own learning but also adding my personal stamp to popular subjects.
To teach is to learn twice — Joseph Joubert
Not to mention that it is a great way to have an online presence, establish my experience and passion in a certain area, and most importantly get live feedback from those who kindly read and engage with my content!
🔔 Did you know? Based on the learning pyramid, the top 3 ways to retain information, are:
1. Teaching others : 90%
2. Practice by doing : 75%
3. Group discussions : 50%
Podcasts are one of my major life hacks: they are tailored for multitasking(while cooking dinner, ironing, running errands etc) and their bite-size format is perfect for my daily routine. This is a selection of the ones I listen to, which cover my chosen tech stack (.Net) as well as generic I.T. updates: Herding Code, .NET Rocks!, Hanselminutes, Software Engineering Radio, Coding Blocks, This Week in Tech, Developer Tea, Software Engineering Daily.
Don’t get me wrong: I prefer to be hands-on and I do learn deeply by doing! This is my first choice — Always! But I now have a young family so my personal time is scarce. In order to kick-start learning a new technology I watch videos: they provide the perfect balance between theory and practice and being a visual learner I find them really effective. I watch them in an increased playback speed to maximise the amount of material I get through. Some of them offer industry certifications too.
There are endless online courses to dive in, but these are the resources/platforms I use more often: PluralSight, Coursera, Khan Academy, edX.
As an architect I need to justify technical project decisions so I resort to developing POCs. They help me experience the challenges or benefits of the technology in question in order to provide forward looking research, as well as I get better at estimating (and not trivialise how long ‘easy’ tasks take to develop). Depending on my other commitments, I try to focus on one item at a time (e.g. data science, ReactJs, big data etc) and produce a prototype in that area. Looking at my velocity I get through 6 – 8 POCs per year. Not too shabby!
Pet projects allow us to play, experiment and learn in a safe environment, so we can then apply what we have learnt to real projects. In fact, they are real projects without the pressure: no deadlines, no restrictions on technologies, no control on the requirements (that are mostly cut due to budgetary reasons), no shortcuts on patterns. We are the bosses — we set the rules!
Contributing to open source projects is an excellent way to raise our public profiles and practise: we just locate the project we are interested in, download the source code, inspect the codebase, make sure we can run it end to end, debug through and we are ready to get stuck in.
Although it is an area I have not actively engaged with (i.e. have not checked-in any changes), the main benefit I have experienced is that I get to see the best-of-the-best developers out there, coding in action — this by itself is a fantastic learning experience!
❗️ Check what is trending on GitHub here.
🍭 Double Whammy: You can make your Pet Projects Open Source and double up on the benefits described above!
Becoming an active member of an online community by asking and answering questions on sites like Stack Overflow is also a fantastic opportunity not only to learn but help others learn too. Promoting code and knowledge sharing offers a great sense of accomplishment.
Katas are simple coding exercises, i.e. they can be understood in a few minutes but are complex enough not to be solved too quickly — the term was coined by Dave Thomas, co-author of the book The Pragmatic Programmer, embracing the Japanese concept of Kata in the martial arts. I tried this technique once as an experiment but lost interest very quickly. I prefer looking at real problems and the big picture, rather than individual puzzle-like exercises. For experienced programmers, I think the other approaches mentioned in this article are more powerful.
Nevertheless, a resource for Katas is kata.softwarecraftsmanship.org.
❗️ If this sort of thing tickles your fancy, check these platforms out too: Code Chef, Coder Byte and Hacker Rank.
Hackathons are sprint-like marathons that allow developers and I.T. professionals to collaborate on software projects and create a working prototype, an application feature or an integration (API). The benefits are listed nicely in Quora, so no more for me to say here! I have never participated in one but it is in my list of things to try!
What was new and hot yesterday is old and junky today!
While learning from textbooks and online resources has plenty of advantages, there is little that can top the day to day interactions we share with our colleagues. I am lucky to be working with some of the best C# developers, they are a source of inspiration and learning for me — Thanks guys 👍!
What I have come to realise is that there is no such thing as a dumb question: we all know this old saying, and yet we still take it for granted! Questions are actually the foundation of most learning as they become the basic starting points for conversation.
There are several compelling reasons why pair programming enhances our learning too, but the best advantage I have found is that we are forced to structure our thoughts, making us thoroughly understand our own ideas before we try to explain them to others.
Finally, code reviews are the best way to improve our knowledge by getting direct feedback on our code. They are not about exposing our own limitations, but validating our ideas or have them challenged.
💡 Pro Tip: If there is someone at work whose coding wisdom and skills you admire, consider asking them if they might mentor you.
Attending a conference or a presentation is a brilliant way to get a sense of where the industry is heading, what other companies are doing, which technologies are being adopted, what the best practices are when bringing the technologies in-house etc. Networking with other developers is an added bonus too — swapping ideas with fellow developers is a guaranteed pattern to become sharper and expand your professional connections!
This sort of events can be pricey so it is best if your company sponsors you. Otherwise you can opt for watching the recorded sessions online, once they are published. Here are the ones I watch on their respective YouTube channels: GOTO Conferences, O’Reilly, Thought Works.
LinkedIn groups are an excellent way to find like-minded professionals, as well as get stay informed in the software development realm.
Professional organisations (such as the British Computer Society), periodically run training sessions and offer a comprehensive access to industry news, surveys, career information, jobs and details of events (often at discounted rate).
The catch here is that we get what we put in: to fully reap the intrinsic benefits offered to us as members, we need to invest our time to actively participate.
The idea that developers are introverted geeks is totally outdated!
Joining local user groups and technical communities is an easy way to interact with other developers. The diversity of backgrounds, domains and experiences is what makes these special. There is one thing in common though: everyone is passionate about programming! And as such everyone is happy to learn and share what they know!
Would you like to take networking a step further? Here are some hands-on ideas:
There has never been a better time to be a developer!
Skill up to keep up!
We often fail to understand that our career is no longer the end product of our education, but itself is an education for us! If we keep the learning habit, we are likely to extend our longevity and improve our employability. Another common pitfall is using time as an excuse for not adopting continuous learning. We all have time! In fact, we all have exactly the same amount of time. The difference is how we choose to spend it! (← this is a friendly reminder to myself)
I have listed here a few resources that I tap into in order to develop my know-how excellence! I hope it helps you too!
Thanks for reading!