The software industry is really dynamic and it requires a lot of effort to keep up with the latest trends. Basically, there is no end to learning in the IT industry. One of the most important skills that a software engineer must have is the way of staying up to date with the latest updates. I'm often asked how I keep up with the trends in the field of software engineering, and how I learn new stuff. Undeniably an important part of learning is practice. I still remember Uncle Bob`s quote in the Clean Coders book
It is not your employer's responsibility to make sure you are marketable. It is not your employer's responsibility to train you, or send you to conferences, or buy your books. These things are your responsibility. You should plan on working 60 hours a week. The first 40 are for your employer. The remaining 20 are for you. During this remaining 20 hours you should be reading, practising, learning, and otherwise enhancing your career.
Saying that I thought writing a blog post will give some guidelines to people that are finding it hard to follow up with software or want to discover other alternatives of learning.
Podcasts are a great way to learn new stuff and keep up with trends. I`ve been listening to podcasts since I was an undergrad and it's been an important way of learning for me. I used to listen to podcasts during my commute but nowadays working remotely I will probably do it in parallel with another activity. I prefer podcasts that are less than an hour because it does not require a lot of time commitment.
- Codurance Talks
- ThoughtWorks Technology
- AWS Podcast
- The Stack Overflow Podcast
- The 6 Figure Developer
- Simple Programmer
- Agile for Humans
Reading books seems kinda outdated. But books have been an important way of my learning process. If you want to explore a technical topic in-depth, then books are an excellent choice. Yes, the industry evolves incredibly fast, but certain books will help you explore your field of work on a much deeper level. The most influential thing throughout my career was reading Clean Code by Uncle Bob. I read that book while I was in the second year of my studies and it completely changed my mindset about software. Back then I did not know who Uncle Bob was, so after googling I learnt about Martin Fowler, Kent Beck, Grady Booch, Jim Coplien and all the well-known people in the software industry. This of course helped me create a backlog of books that I had to read since some of those books are "must-reads" for all software engineers regardless of their experience.
Here is my notion page of Books that I've read or about to read soon:
Conferences and meetings are an excellent way to follow new trends. Many new products and developments in the IT realm are presented at conferences and meetups. One of the most important benefits of such events is the ability to meet new people from the software industry and make valuable contacts. It's also a great way of discussing software, exchanging ideas with people that work in different domains/companies with different dynamics. Some of the events I would recommend attending are the following.
- London Software Craftsmanship Conference
- VoxxedDays Athens
- VoxxedDays Thessaloniki
- GOTO conference
- Thessaloniki not-only Java Meetup Group
- Thessaloníki .NET Meetup
- Domain-Driven Design London
- London Software Craftsmanship Community
- LJC - London Java Community
- London Microservices
I`ve met great people throughout my participation in those events and they helped me massively with my career progression. I feel really lucky that I had the chance to participate in such events which boosted my knowledge.
Whenever I learn a new technology, tool, or programming language I will always use Stack Overflow to verify my knowledge and try to answer questions regarding the new topic. One of the best ways to learn something is using the Feynman Technique where you try to explain in a simple way solutions to other people's problems. Answering questions in Stack Overflow helps me a lot construct my thoughts and potentially find gaps in my explanation. A second benefit of using Stack Overflow when learning a new subject is that you can quickly get a good essence of the common issues and problems other devs are facing regarding that subject. Another good way of practising a new topic I am learning is by doing code katas.
A code kata is an exercise in programming which helps programmers hone their skills through practice and repetition.
Code katas are an excellent way of practising a new tool, library, concept, programming language, or a new design technique. It's a practice session where the goal is not only to solve the problem but to practice and sharpen your skills during the process of solving it. You can find some of the katas I have solved in my GitHub account here.
There are two websites I use for finding katas:
One thing to note here is that pairing is extremely useful when solving code katas or working on side project. I strongly recommend working on a team so you can share tips, resources and experience.
Software is an industry where most of the information is publicly available through the internet. There are a huge number of tutorials that can help you learn new stuff. Tutorials are a great way of learning by doing, which for me is an effective technique of learning. Online education is really popular in our industry due to its low cost, and time-saving advantages. Besides, experience beats theory most of the time - so combining both is probably a more effective way of learning. These are the platforms I am using:
Youtube has a lot of good tutorials as well but compared to the above mentions the quality on average is much lower but there are exceptions.
Keeping up with software is certainly a hard task. Things do change constantly at a fast pace. The amount of information we as software engineers consume every day is huge and keeping track of everything is really difficult. Having a plan or a list of topics you want to learn can be quite helpful. I`ve been using tools as my second brain to help me structure all this information. To be honest I had a hard time finding a good tool to fulfil that purpose. I used Trello, Asana, Miro, Google Keep, Evernote but nothing quite worked for me.
Last 3 months I've been using Notion as my second brain tool and it's been an awesome experience. Notion has components for notes, kanban boards, wikis, databases, calendars etc. By connecting those components you can create systems for knowledge, data and project management. Here you can see my dashboard for the software section. I have subpages to each one of those pages but you probably get the idea. Everything new that I might need to read later, will go to the Reading List. If I have an idea of a project, or a blog post it will add that to Ideas and so forth.
Another useful resource I used throughout the years is the roadmap.sh. It's been a great guide for me to pick up the next topic I want to learn especially when I was more junior and I was overwhelmed by all the different topics under the software umbrella.
The following list is resources that I don't heavily rely on and it's more like optional ways for me for learning new stuff.
- Surveys - Surveys are great for giving you insights into the trends in software. In my opinion Stack Overflow Survey is by far the best one related to software.
- Follow People that Talk about Tech
- GitHub Explore
- Newsletters: HackerNews, TLDR
- Certifications: AWS Cloud
- Competitions: HashCode, IEEEXtreme
The world of IT is changing regularly and hence you have to evolve as IT evolves. Staying ahead of the competition and on top of your game requires a formidable effort. A final suggestion would be to read, practice, repeat.