"Comparison is the thief of joy"
— Teddy Roosevelt
When you go on sites like r/learnprogramming or any other place where developers, experienced and novice alike, congregate, there is a ripe oppurtunity to have your self-esteem smashed. Not because people are cruel or overly-critical (although sometimes there is some of that, these communities are pretty good at policing bullies), but because it's intimidating to see just how talented people are or how much there is left to learn.
We work on our projects, we err, and err, and err again, then we get our big win! Our stylesheet is finally linked properly or our fetch request is returning 200. We are overcome with feelings of accomplishment and joy!
...then we look online.
Soon we find out that there are these strange things called JavaScript frameworks, or that those awesome fonts and icons are dramatically decreasing your site's performance, or that no one in these communities will likely give your site the time of day if it's not responsive, or that..., or that... We read about all these things we have no idea about and learn that because we are not implementing those things we are terrible people who are clogging up the internet with garbage.
And that's only the beginning. Then you learn about technical interviews and leetcode problems and runtime complexity. It's an overwhelming experience, but that's okay. As Socrates pointed out, wisdom is acknowledging that one does not know.
You don't know until you know
I was so naive when I first started learning to program. I remember creating an HTML document in Notepad where I changed the color of an h1 containing my name and feeling as though I was ready to apply to programming jobs — I wrote something that I can open in Chrome, I am invincible!
Of course this is humorous when one considers what it takes to land a developer job, but it reflects that people who don't study programming are completely clueless about this stuff. Generating something that is rendered in a browser elicits a powerful feeling — somehow, through your keystrokes, you made something that is now a part of the most important information tool ever created. To your friends and family who know nothing about coding you are some sort of technical guru who can "build an app," when in reality you just got off the blocks.
It's not until people look to broaden their programming knowledge that the iceberg is uncovered and a strong wave of fear washes over the body. Since I'm not great with analogies, I'll clarify that the iceberg is the list of things one needs to know and do to be even mildly competent at programming.
Navigating the Iceberg
Obviously getting around an actual iceberg is tricky, which is why no one lives on one — the same goes for metaphorical icebergs. With that in mind, I decided to cultivate a list of resources that helped me immensely on my programming journey. The one thing you'll notice about these resources is that they are 100% FREE, which means more money can be put towards things like hosting.
-
Reddit
This is my favorite resource, specifically r/webdev, r/web_design, r/learnprogramming, r/cscareerquestions. I primarily use reddit to stay up to date with industry trends, news and best-practices. Other than answering user questions, I don't really participate on these subreddits — I more passively observe and absorb the knowledge like an iceberg sponge. If you do ask a question, though, be sure to read the FAQ first!
-
Stackoverflow
I always access Stackoverflow through Google searches such as, "configuring Jekyll on Windows." It's essentially impossible to not come across stackoverflow when learning to program. It's worth mentioning that I don't have a stackoverflow account simply because I have always been able to find someone who had the same issue as me and received the solution, which is great.
-
MIT's 6.00.1x or Harvard's CS50
Despite successfully completing and enjoying immensely MIT's 6.00.1x course, the concensus seems to be that CS 50 is the best open-education intro. to programming course, so that's what I'll recommend here. Regardless, both courses will provide you with a strong understanding of the fundamentals that most get-up-and-running tutorials don't cover. These courses may be rather difficult, especially if you're new to programming, but they are definitely worth completing.
It will get better and faster (not just your websites)
It's sort of an odd feeling that occurs once you get into a routine of learning new tech on your own. Over time you notice that the learning becomes quicker, that you start seeing patterns that make debugging easier, and, ultimately, that reading about something you've never heard of before is now an opportunity to grow versus an agozining reminder of your incompetence.
The shift occurs because learning new things in tech is really a lot of the same. Once you have a solid amount of experience building things, breaking things, and fixing what breaks your builds, it becomes easier — not easy but easier — to learn how new tech integrates into your existing body of knowledge.
"But I'm not as good as ..."
Thus the quote at the top of the page. I must admit, sometimes when I look at the projects that people post on reddit, I am completely disenheartened. How could a single person create such an elaborate project? I would disregard all the knowledge I accrued and things I've built and hyperfocus on the what this person did — of course, this isn't a very healthy practice.
Two things to keep in mind, though:
-
A large portion of the Reddit community is pretty advanced/experienced
Though the subreddits like r/webdev and r/learnprogramming have hundreds of thousands subscribers, there's typically only a thousand or so visitors online at any given time.
For instance, these screenshots were taken on a Sunday evening.
I interpret these numbers as demonstrating that, though a lot of people may show a passing interest in programming, the actual number of people who contribute content and are active in these communities is relatively small, and thus perhaps not an accurate representation of skill level (i.e., reddit represents the upper-end of programmers in terms of skill).
Also, take a look at the github repos of the people whose projects get upvoted on reddit. Sometimes I'll get overwhelmed at how amazing someone's project is, only to view this person's github and see eight years of contributions. I think it's safe to assume someone whose been doing this for eight years will be better than someone whose been doing this for eleven months. Similarly, a project may be a collaboration of multiple programmers.
Either way, one should develop the ability to view the work of othes without having to make it a competition — this will help you to learn from others' projects as oppose to resenting them.
-
Some people are prodigys, but most aren't
And that's okay. It's a bit annoying, but okay.
Final Thoughts
I'm still a n00bmeister-400 myself, so I hope all my advice here is taken with a grain of salt. That said, I have been paid by someone to program and I did graduate as a research scholar in psychology, so I think I can provide some interesting insights into this learning to program discussion.
The biggest key, as with all learning, is how interested someone is in the topic at hand. I think if you love developing and building things, then getter better will just be a matter of how much time you put into this. Of course, one can't do so in a vacuum — it's important to be where the knowledge is and to stay up to date — but if you're getting feedback and challenging yourself, you should be moving forward.
I think a lot of the questions on learning this stuff are from people who don't understand that there isn't some bootcamp or tutorial that will give you all you need to be even mildly-mediocre at programming. Practically all learning occurs incrementally over a period of time, not all at once very quickly — this is especially so with programming.