Learning is very important in a programmer’s life. Despite this, a lot of people entering this field don’t know how to go about it. I think that it’s a tough question for everyone – How much time you should be spending on learning? What topics you should cover? What sources you should learn from 🤔?
In the past, when I was looking at the job offers, on each of them there were these two pointless requirements:
- Fast learner
- Problem solver
I was like - come on, how could you not expect it from a programmer? How could someone even become one without being a fast learner? Well, it would make sense if they would benchmark my fast learning skills on the interview - “Here is the book, you have 15 minutes to summarize it”, but guess what - they didn’t 😀.
As time went by, I realized that absorbing big amounts of information squeezes the juice out of your brain and it’s reasonable that some people tend to avoid it. In the end, everyone has his/her own natural level of curiosity about the world around us.
For example, I thought that I’m an exceptionally curious person, but it’s nothing compared to my son. He is 2 years old and instead of chasing other children on the playground he takes me to the parking and points at the letters on the license plates, asking me to read them aloud. Every car at the parking, every day. He has such a strong need to discover all of these letters 😮.
Of course, Being naturally curious can have its drawbacks. I remember that I was very often finding myself in a situation when I’m trying to explain something that is (for me) very interesting and important, but the person I talk to is nervously nodding his head in hope that I’ll finish as fast as possible. For example RSA algorithm – It’s so simple and brilliant that I thought that everyone will be delighted to hear about it. Imagine my disappointment after not finding anyone who is even remotely excited about it 😪.
My second life lesson is that if you are such an exceptionally curious person, you have to be careful to not bore people to death. And as a teacher, it makes it harder to choose the right information for your learners – not too obvious and not too specific. Your gut feeling will mislead you in this.
But the biggest threat for the curious people is something different… the dark playground. I will be describing procrastination and my approach to surfing the web in more detail some other time because it deserves its own post, but be informed. Sometimes I come to my senses with multiple Wikipedia pages about the causes of the fall of the western Roman empire opened and I wish I was a less curious person 😅.
Ok, so what about the upsides? Luckily, I think that they are exceeding the drawbacks - natural curiosity is the only protection from the software development specific “mental fatigue”, that I know about. To start doing anything new in software development you have to deal with such a vast number of unanswered questions, new terms to learn, small decisions and unknown problems, that without any internal drive to learn it all it’s hard to keep going. If you don’t already feel what I’m talking about, read this story for example.
I can’t imagine a way to improve oneself as a software developer without learning new things. And the less interested you are, the harder it is to learn. I think that you can recall your first encounters with coding. Wasn’t there too many things at once that you didn’t understand? Weren’t you afraid that for some reason everything will crash and you will never understand why? The machine is always against us 😅.
On the other hand, I don’t know how it is after, let’s say, 10+ years of experience. Are people giving up, because they are tired of all these years of not-understanding anything? Or maybe they don’t have to learn as much, because we are reinventing the wheel every X∈<2,10> years? I wish someone with such a long experience would tell me what problems should I expect in the future.
Do you agree with these upsides and drawbacks of curiosity? Are there anything else that comes up to your mind?
So now something actually useful. What do I learn from?
- In my first three years as a coder, I have read nearly 25 books (thanks to the fact that I was commuting to work by the train and had almost 1,5h every day without anything else to do). That was super effective on my early career.
- I follow people on the internet that are role models for me. I read their blogs, their twitter threads. It keeps me motivated, reassures me what do I want to learn and helps with staying up to date with the newest tech.
- There are more sources of information that I can’t tell anything about like podcasts and conferences, because I don’t have any experience with them.
- If you want to learn something specific or gain practical skills, you will have to get your hands dirty some way. Either you follow some of the courses (platforms that I’m aware of and are nice are egghead.io and frontendmasters.com), or try to Clone open source apps. And remember - the more interested you are in the application you are coding, the more motivation you will have. Take advantage of it.
- Another important factor in your learning is your passion. Describe some field that is fascinating you and absorb inspiration and new ideas from them. For me it’s maths, games, writing, teaching people and nurturing my children. For example, the inspiration to make my second toy application is coming from my fascination about certain maths field and urge to explore something in it, and making this application made me learn new things both in programming and maths.
If you are new to programming and want to learn, I highly recommend all of the Shawn Wang’s Essays. If you aren’t new, go and see them anyway ;)
When I was starting, I’d love to have some sort of guidance on what and how to learn, so I’ll post here lists of all of the books I’ve read and people I follow. Maybe it will help someone who is now struggling with the question “The internet is full of everything, What should I do?”.
This is the list of books that I’ve read (ones I recommend to everyone are in bold):
- Ritchie, Kernighan - C Programming
- Mark Pilgrim - Dive into Python
- Doni Tamblyn - Laugh and learn
- Tom DeMarco - Peopleware
- Michał Bartyzel - Getting things programmed (Polish only)
- “Uncle” Bob Martin - Clean Code
- Dave Hoover, Adewale Oshineye - Apprenticeship Patterns
- Programming C# 4.0
- Craig Larman - Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development
- The Pragmatic Programmer
- Kent Beck - Test Driven Development: By Example
- “Uncle” Bob Martin - The Clean Coder
- Head First Design Patterns
- Bob Nystrom - Game programming patterns
- Gojko Adzic - Bridging the Communication Gap: Specification by Example and Agile Acceptance Testing
- Asp.Net MVC 4
- The Art Of Unit testing
- Exam 70–483
- Introduction to Algorithms
- Functional C#
- Bartosz Milewski - Category theory for programmers
- “Uncle” Bob Martin - Clean Architecture
- Floyd Marinescu, Abel Avram - DDD quickly
This is the list of people I follow (it’s good to follow them also on Twitter):
- Swizec https://swizec.com/blog/
- Mark Seeman http://blog.ploeh.dk/
- Eric Dietrich https://daedtech.com/
- Dan Abramov https://overreacted.io/
- Kent C. Dodds https://kentcdodds.com/blog
- James K. Nelson https://frontarm.com/articles
- Shawn Wang https://www.swyx.io/writing
People I don’t follow, but their blogs are real treasure troves:
- Joel Spolsky https://www.joelonsoftware.com/
- Bob Martin https://blog.cleancoder.com/
- Patric McKenzie https://www.kalzumeus.com/
- Eric Elliott https://medium.com/@_ericelliott
If you are eager for learning, there are more lists like mine, for example the Post graduation mind map, developer roadmap, react-learning, awesome-react, or any other “awesome-X” Github repo about the technology you would like to learn.
There is a lot of other wise things on the internet, I suspect that my list is not complete, but it’s hard to recall now everything I’ve read in my life 😉.
I recommend you to learn in public and make your own to-do list of things that you plan to learn (you can start with the general concepts and break down them into proper subparts during the learning).
What do you think about my lists? What are your main sources of learning? How much time do you spend on daily learning?