How to learn hard things in tech
I feel like a pretty slow learner, which may be surprising coming from a self-taught software engineer, but it’s true. I regularly need to learn a new technology, software, or toolset. More often than not I feel like I’m sitting there staring at the wall with no idea where to start. Can anyone relate? I think to myself:
technicallychallenged.substack.com
Good post.
Honestly as an engineer in this field you gotta learn to get comfortable with the unknown. You almost have to have a bit of suspension of disbelief - the same thing you tap into when watching a superhero movie, accepting the fact that even though you don't have a complete understanding now.. eventually, you will get there.
I've been developing software for almost 20 years now, working as a consultant, employee, startup co-founder, current indie hacker. At every single step of the way it can be hard to shake the feeling: "do I actually know what I'm doing?"
I actually find that delving into the unknown, and experiencing that doubt, is the most exhilarating part of the process. At a certain point you become numb to the doubts, and you find that you just naturally start to learn things faster. Your experience compounds. You've been through so much already, and solutions and ideas just naturally start populating your mind and things just click.
Negative questioning of yourself can get in the way of your understanding of complex topics and become a mental blocker. It can kick off a series of events that can lead to you abandoning learning more, due to the knock on your ego. This is even worse if you're working on a team with negative leadership.
I think anyone who is struggling with this type of thing could really benefit from a good mentor.
Every dev questions themselves at some point. Every dev struggles in understanding some new concept, or algorithm. Every dev has a habit of comparing themselves to others (not just devs, this applies to everyone). The ones who succeed and push forward do so because they have a natural thirst for creative problem solving and expanding their domain.
It's really not until you can view your progress objectively, that you can see how far you've actually come.
And it's easy to be blind to that.
Developing software is hard. The "just learn to code" crowd you see around the web are morons who have never seen a codebase more than a couple thousand lines. And I say that as someone who fully supports these bootcamps and getting more people on board. It's hard. There's a reason seasoned devs are paid very highly.
Experience is king!
I guess my central message is, keep at it. Remain objective. Acquire a thirst for that whole "figuring out the unknown" thing, it can be intoxicating.
okay now i'm really learning typescript.
I completely agree with your point. Accepting the fact that you will never know everything is key to moving forward in our field. The sooner you do that the better off you will be. I often see beginners try to learn 2 or 3 different things at once, be it programming languages, frameworks or what have you, which is completely unfeasible for anyone to do.
Here are some of my recommendations:
Don't learn something new as an end in itself.
What you want to learn should serve to solve a task in the current project. This way you avoid having to learn all the features right at the beginning, even though you don't need them.
Try to explain the topic to someone.
I definitely agree with this approach! Trying to explain a concept to someone else is a great way to solidify your own understanding and figure out where your gaps in knowledge are.
Great advice!
It's easy to overwhelm ourselves with everything we don't know. If we try to learn too much at once, we often don't end up accomplishing much.
If you focus on a single problem, you'll be surprised how much you've grown after a few months.
Thanks for this.
So true!
I've been a developer for over 40 years. When I started, the only way to learn a new language was the official documentation and lots of trial and error. It was grueling at best but very satisfying. Also, getting information from a single source made it easy to create a straightforward learning strategy.
Nowadays, the opposite is the case; if I want to learn something new, I find hundreds of resources and have no idea where to start. A google search provides a cursory overview of what to expect but no real plan. I find that I often follow your iterative three-step process, but only after I've gotten through a few preliminary gates:
A tutorial to get a development environment up and running. I find I can learn any language as long as I can get a solid foundation and working example of the development lifecycle. YouTube and Udemy are my gotos.
Understand what tools I'm using to do all tasks involved in producing the results. For instance, I'm currently working on an angular project that leverages Firebase. Before I could be competent, I figured out that I had to learn several new technologies:
a. Node and NPM; node's package manager.
b. Angular CLI
c. TypeScript
d. Firebase (Auth, Storage, Analytics, etc.)
e. Firebase CLI
I've been at this for six months and regularly struggle with new concepts. Patience is a virtue for members of the Slow Learner Club!
Find out about best practices and coding standards. This helps me better understand the random examples found when searching to solve a specific problem.
Find one or two trusted sources. While I do use Stack Overflow when trying to do something specific, more often than not, I fall back on my trusted sources for a definitive answer.
I hope this adds value!
That was helpful. Thanks :)
I observed over the years that once I am faced with challenging problems or skills I don't master yet TIME is the most important factor (plus persistence).
At the very beginning I usually don't feel challenged but overwhelmed. I learned though that this feeling of being overwhelmed is not at all a sign to throw in the towel.
Be aware of the feeling that you're overwhelmed. When being overwhelmed you cannot act rationally (reptile brain speaking) so just let it go - for today. Then be persistent and continue with that challenge the next day. YES! A lot of your troubles solve themselves over night. Your brain is working like f... while sleeping. And the next day, you feel challenged, but not overwhelmed. That's the a starting point to actually master your challenge.
Thank you for your advice! I will definitely keep this in mind the next time I'm feeling overwhelmed by a challenge. I think you're right that often times the feeling of being overwhelmed is just a result of being tired or stressed, and that if I can just push through and keep working at it, the challenge will eventually become manageable.
Great article. I completely agree with these steps. I've found training videos to be the most useful when learning to code as I'm a visual learner.
What kind of videos do you prefer? Which one more helpful; theoretical contents or real-life projects?
A very insightful read.
Yes, at first it may seem very difficult to learn new technology, especially one completely unfamiliar to you. However, as for me, it is very important to set your mind to that, focus, and be ready for challenges (because they'll obviously be on your way). And constantly practice. They say practice makes perfect.
Great, concise read.
I'm curious if you had other projects that you killed along the way?
If so, why did this OSS project last and the others not?
I've been putting of typescript for 3 years. I'm going to learn it...
Probably the hard way.
There's no one answer to this question, as the best way to learn hard things in tech will vary depending on the person and the specific skill or concept in question. However, some general tips that may be helpful include: breaking the skill or concept down into smaller, more manageable pieces; seeking out resources (such as books, articles, or tutorials) that can provide a clear and concise explanation; and practicing regularly. Additionally, it can be helpful to talk to others who are already knowledgeable about the subject, as they can offer valuable insights and advice.
Most of us have fantasized about going back in time and teaching our younger selves the ropes. Unfortunately, time travel hasn't been invented yet. However, we can settle for the next best thing: learning from the top smart people with extensive business and life experience. So I approached a select group of tech executives and business leaders and asked them the same question: what advice they would give their younger selves if they could.
One: We can't control the situation, but at least we can control how we react to it
Although we can't always control situations, we can at least control how we react to them.
Whenever he encountered a difficult problem, he always asked himself what he could learn from it. And then, whether something good is going to happen in that situation.
If you approach difficulties with this kind of curiosity and skepticism, then even a disagreement can change a relationship for the better, or the loss of a key client can become an opportunity to rethink your company's business model.
In other words, by being calm and thoughtful about disasters, you can turn a bad situation into a valuable experience that will shape your future.
Two: Spend more time on the right long-term strategy
Large-scale industrial transformations take longer than you might think, because "it takes quite a while for the whole technology to mature, and it takes years for the impact to be fully felt.
It's vital for business and life. The pace of the modern world puts pressure on us to respond quickly to trends, leaving us with the feeling that if we don't act now, opportunities will slip through our fingers.
This is usually not the case - long-term focus on the right thing will yield better results than hasty and poorly planned projects. But don't confuse long-term thinking with rigid thinking.
Having a long-term vision and being flexible may sound counterintuitive, but it's not hard and fast. The key is to try to find balance and keep an open mind, and stay true to yourself and your beliefs throughout.
Three: Filter out people who don't share your values
You were taught to dream big and because of that, risks and challenges never stand in your way. Don't be discouraged by those who don't share your values. If you "stay true to what you believe in," eventually someone will agree with you, both at work and in life.
Four: When in trouble to wake up and subconsciously tell yourself that there will always be obstacles and difficulties, step by step over the good
The subliminal admonition is clear: "Everyone has experienced this.
Admitting you're in trouble doesn't make you weak, on the contrary, it's hard to build a business, family, friendship, or anything else important. When you really care about something, your emotions are stronger than ever.
Never be afraid to feel. Don't be afraid to admit that things aren't the way you want them to be, but they can all change.
We may be a while away from time travel, but it's never too late to try to better ourselves.
i am Focusly working on How to learn hard things in tech.
Which i am gone b apply on the Site
https://mepcobills.pk/
whcich need to be a tech
Be prepared to suck at it for a while.
Spaced repetition and interleaved practice.
Be intentional about making connections and analogies.
Get better at asking the right questions and querying for the right things.
A short pencil is better than a long memory.
Pragmatism is more important than theory.
You can't do this alone, talk to people and engage with communities.
Agree what other say in this thread: Build a strategy, smart small, have a pragmatic goal.
But also: Keep on it. This isn't meant in the inspirational-poster way, but as pragmatic advice. When trying to predict success, hours invested dwarf every other variable for learning just about anything. Chess, basket ball, startup success, academic citations, YouTube subscribers. You name it.
You are going to be quite dangerous when you invested 300 hours in React.js, even when you have no "talent" or whatever. No? Ok, try 600 hours.
Others build a Twitter following in 10 days, you need a year. So what? Invest that year. You would like to be good at math but some 12 year old is better anyways, so what? Do some math every day for 20 months and you are going to be in the top 1% percentile of the general populace.
How to put this philosophy into practice w/o being discouraged, well, that's another story. But it is still a valuable mental model to start with.
I agree that continuous smart learning is the important and hard part of the coding craft. I come from the science field so for me, the understanding theory has been paramount. With software development, you learn differently by building and breaking and failing and succeeding that is experiential learning. Still, solid problem framing and theory are helpful.
You're absolutely right - continuous learning is essential to success as a coder. The best way to learn is by doing, so it's important to get your hands dirty and experiment as much as possible. However, a strong foundation in theory can also be extremely helpful. Understanding the underlying principles behind coding can make it easier to troubleshoot problems and come up with creative solutions.
Great content!
I think it will better making a project and sharing your information to improve yourself and learn more.
I would have liked to know this before, I hope someone helps.
Step one: Google what you want to learn, search for information with the keywords: Reddit and Quora.
Step Two: Before you start watch 2-3 Meetups as an introduction to the technology
Step three: Go to the documentation, there is all the theory and code you need to understand how it works, unless it is a frontend framework that generally has not very good documentation (perhaps this is why developers stay away from the documentation).
Step four: Look at the Quickstart and from that code base start making modifications.
Step five: If something doesn't work or you don't understand something you can go to YouTube.
Note 1: Documentation is the fastest way to learn something.
Note 2: There are times when you won't understand everything from the beginning, think you understand it until you understand it.
Note 3: You do not need to memorize code, memorize references, it is also a good idea to analyze the errors you have had or the faulty learning about something that has caused you to go a different route.
Note 4: Running hurts but it becomes less painful if you do it every day.
Note 5: Create projects (to learn), the requirements and the technology come alone.
Note 6: If someone can teach you something in 5 minutes (ex: the new X architecture) you don't need to read a book, I think computer science books are overrated and therefore don't expect much from them (this is my opinion, I know it's a good way to share information).
Different culture learn things with different approaches:
The real hard stuff, really is hard. Luckily most things are not that hard. There are methodologies to make things easier like "divide and conquerer", etc. I think the real hard stuff are the stuff that can't be explained clearly or there are too many variables. If the problem statement can be specified, most the challenges can be addressed already.
I'd say this is the key to learning anything, not just tech. Start with the smallest working example and test your understanding of it. Everything always looks hard to begin with, but once you learn the basics you realize it's not as hard as you thought. I'd say I'm a slow learner too but that doesn't mean you can't learn. I can't think of anything I haven't been able to learn even if it's taken me ages, I do eventually get it. Can anyone think of anything they failed to learn because it 'was' too hard? As opposed to giving up because they 'perceived' it to be too hard?