Why noobs feel bad
It's good to feel like you know what you are doing and most people spend their entire lives trying their best to feel that way.
It makes sense because the opposite feeling, that of being a noob, is scary and disheartening. Noobs feels bad because they don't quite have an orientation of the world they are operating within. They don't know right from wrong and everything seems rather abstract. I have been thinking recently about how humans deal poorly with abstractions, especially upon first encountering them.
Humans didn't evolve to think abstractly, at least not as a primary source of thinking. We thought about practical things far more than abstract things, hence why we never evolved greater tools for a hundreds of thousands of years - if the tool could kill our prey and we had food for the tribe then that was all that mattered. Abstract thought was likely reserved for star gazing at night after a long day of hunting and when the mouths, including your own, had been fed.
So, we don't naturally deal with abstraction very well. What do I mean by abstraction? An abstraction is a way of representing something material in a way that is not the material representation. An event, an action, or an object is a material representation - it is physically real. Meaning, theory, and concepts are abstractions. We didn't have much need for abstraction when our inventories were small and our tools simple, but as the complexity of the material world grew, so too did the need for greater levels of abstraction.
The difference between a seasoned veteran and a noob is often rooted in their understanding of things, which is inherently linked to their abstractions of the how the subject matter works. The veteran has many abstractions which lead to effective practical applications, while the noob has little to no abstractions and therefore poorly executed applications. Abstractions are important because they let us deal with lots of information in easy to digest ways, but they are difficult to grasp early on.
Confusion and impatience
An activity like programming involves lots of abstractions. This is good because it helps make sense of all of the technical jargon related to software and hardware. They help programmers understand concepts - of which there are far fewer than techniques - which they can use to understand new techniques or work on old techniques (that they may have forgotten). Another way of thinking about abstraction is as heuristics. Though they are not synonymous both have similar functions, they are used as ways of removing technical complexity, of getting rid of layers that are unnecessary to the brain for understanding just enough.
The noob often worries that they do not know enough. That they are somehow lacking the fundamental knowledge to get started. This is classic noob behaviour and makes a lot of sense. When you don't know what you don't know, then everything seems important *and* hard to grasp. The noob usually compiles a bunch of resources, orders them in a particular way, and then starts to work - *this is how I will learn.*
But, they don't learn this way. In fact, they don't even get through the first couple of chapters of the first book they pick up, or they abandon the series that they started watching after they hit a wall. Why? Because you don't learn by sequentially deciding what to do, and then doing it. If you knew what to do, and you were correct, then in a lot of ways you wouldn't need to do those things. If you somehow knew exactly how to learn programming before you did, you would be an uber genius. Plus, this makes learning programming seem like an algorithm. A repeatable formula that anyone can copy and get the same output from. This is absolute delusion - something the noob may find themselves indulging in from time to time.
I myself have acted like this before. When I first started playing poker (at age 16), I won a tournament and decided to invest it in a training course. This was a wise decision in itself, but then what did I do? I tried to rush through the course. The mindset was *the quicker I get through the course, the quicker I will be good*. But that is not how learning works, hell it is not how life works. You don't get to rush, to cram things in and get results. As cliche as it may sound *results take time*.
The noob should embrace frustration and not try to run from doubt. I would argue that self doubt is an essential element of becoming proficient at something. Only when you get good does impostor syndrome start creeping in. Also, noobs should not look for a silver bullet because none exist. If there were a single track to become a programmer then everyone would do it. If there were one course that guaranteed (honestly) to make you a proficient hacker then that course would sell millions of copies and there would be a lot more hackers. But there is not, and thank God for that, hacking is a hard skill, just like BJJ and just like Poker. Even those who become okay at it are bad. Which brings me to my next point.
You don't need to suck
A lot of people think it takes a long time to get good at a sport like Brazilian jiu-jitsu. There is a lot of talk of 5 years to even be remotely competent, and the general wisdom is that it takes 10 years to become a black belt (at least). The thing is it just is not true. I don't agree too much with the 10,000 hour rule (Gladwell), because I think there is a clear distinction between good and bad hours. Not all hours spent are equal. If you have a world class coach from birth, then your quality per hour spent will be far higher than someone who had a grade C coach for the first 5,000 hours. There is some kind of volume required to become genuinely competent at something - but that is more to do with becoming natural through exposure to a new activity. This is "smoothness" that a lot of people associate with competent BJJ players, or high level programmers. So, if not all hours are equal, then how do we spend them wisely?
A how to for how to?
There is great debate between theory and practice. The general question is... how much time should I spend on theory vs. on practice. I have a process that aims to resolve this question. It is based upon two relate fields: Human psychology - related to motivation, incentive, and desire; Effective Learning - learning, studying, and reviewing effectively.
Humans need incentive. We need to have reasons to do things. This is another evolutionary thing, if we had equal incentive to do every thing; or worse no incentive to do any thing, then life would be impossible to navigate. Therefore, our minds have been wired to act based upon incentive and motivation. It is my belief that we cannot do anything we do not have incentive to do, or at least we will not do it well. And when it comes to learningb effectively, if we are not doing it well then we are not doing it all.
I have been thinking a lot about the concept of "natural progressions", that is how we chain together activities based upon natural incentives which start from a root activity but then lead into more activities.
This leads to an interesting conclusion, we often find greater incentive in problems to be solved, than in benefits to be gained. Recently, I have been trying to arbitrarily start new projects, starting them from pure *a priori* reasoning. This would work well if we were robots, that is we had equal incentive regarding all projects, and all subject matter could be understood equally well. Fortunately, I am not a robot, but it means I need to find better, more motivating things to work on. So how?
Problems
I think there are two types of problems. Those that find you, and those that you seek. The former are more efficient for us to deal with, because we don't have to really grapple with our motivations or the relative worth of a problem. Your foot gets broken, the problem found you. You decide to tackle climate change because you want a lot of money then you have found a problem. The issue with finding problems is that our moods change, so the spark that inspired you to start on a problem will likely change. When a problem finds you it is usually mood agnostic - whether you want it or not it presents itself.
There are of course times when it is required to go and find a problem. Would be start up founders have to do this. They need to identify a problem, and then solve it, in a rather arbitrary way. Often, however, there are underlying motivations and incentives that direct the energy and keep them going.
I think the optimal way to learn is to have a problem find you, or to identify a problem that is genuinely meaningful to you, and then to sequentially work on new problems as they appear in relation to the root problem. This is what noobs should focus on.