There is an impassioned debate in the programming community about whether the right way to teach and learn this craft. It's probably been going on since the beginning of time. It usually boils down to whether we should teach the underlying fundamentals (data structures and algorithms) before moving onto the higher level industry abstractions (Ruby on Rails, ReactJs, etc.).
My position on the matter is that it does not matter as long as the student is engaged in the material. Sometimes it is up to the student (whether in solo learning or in a classroom setting) to make these choices, and sometimes that burden falls on the instructor.
But either way, here is what I know to be true: If you stick with it and stay curious, you will always learn what you need to learn. I can't say why that is. It just works out that way. The only way to fall off track is to lose interest, enthusiasm, or motivation. It's easy to lose interest, enthusiasm or motivation on your own. It's also easy for that to come from an outside source. For as many people as there are trying to lift you up and cheer you on, there are also the ones that want to tear you down. It's probably not a conscious effort on the part of these types. It's probably out of subconscious insecurity or projection, but those types exist.
Overcome these barriers, and you will learn what you need to learn. Programming is a never-ending series of aha moments until you look back and you realize that you're an experienced developer. The process of coding is actually quite anti-fragile in that every time you hit a major roadblock, you usually have to learn your way out of it. Your most frustrating pitfalls are also the things that propel you to the next level, unless you lose motivation. It's easy to lose momentum if you enter a downward spiral, but the only way to regain the mo' is to get back on the bicycle.
You don't need to worry if you are "specializing" too much because the deeper you go in a subject the more you need to learn about other subjects. If you are primarily trained as a front-end web developer, for example, you may feel nervous that you don't really understand what's going on under the hood. "I have no idea how any of this is happening under the hood. How am I ever going to truly become a great developer." This can be unnerving, but you don't need to go out of your way to learn the infinite things you don't know, they will come up naturally if you stay motivated and curious. There will come a time where something just isn't working right and you'll start tugging at the thread until you've unraveled the whole sweater. It's just what happens. Experienced developers can tell you this.
So focus on the task at hand, feed your curiosities and do whatever you need to do to stay motivated to put in the hours. The process takes years and you cannot rush it.
Top comments (30)
So, here's where I land on this, because I'm in a major roadblock right now.
I'm a self-taught programmer. I've had maybe one or two actual classes, but most of the programming I've learned has been on the fly while doing technical support, starting with VB (really got into that supporting MS Access). I learned C# because I wanted to learn something new when I had the need to write a quick app.
Through it all, I never really learned the basics, so to speak. Terminology, the right way to do things, that's where I got stuck. So I remain in this middle ground where, today, I want to learn JS.
I'm not starting from scratch, but I'm also not in the 'JavaScript for C# developers' audience.
I'm in that JavaScript for Hobbyists Who Taught Themselves to Code For Fun audience.
Almost every single 'Hello World' is written to such a level that it's disheartening to be sent back to kindergarten. Imagine telling a singer 'Okay, you want to learn how to dance? Let's start with how to keep a beat.'
I recently tweeted "I need something between Javascript for Newbs and Javascript for C# developers. something like 'Javascript for self-taught hobbyist programmers." and was almost disappointed that I didn't even get spam answers. I mean, not disappointed but am disappointed.
The thing with JS is... If you don't count rudimentary HTML, I'm a desktop coder. I haven't even managed to grok the whole JS ecosystem yet. Node? TypeScript? Angular?
And it isn't like I have a specific goal in mind apart from being able to create new and interesting things on my websites. I'll admit, this lack of a solid goal is part of my problem. This is legitimately the first time I've wanted to learn a language to be able to use it to do things rather than wanting to do something so needing to learn a language.
Lastly, I'm not sure why I'm leaving this as a comment. It feels more like a blog post or confessional.
PS I hope that recent twitter link to here got you some extra permanent traffic. =)
This would make for a decent dev.to #discuss thread if you want to take this to the community π
Once I figure out UWP for this side-hustle I'm on right now, I might do that. I can't imagine I'm alone in the particular level of knowledge/method of learning, but I'm just surprised there isn't more stuff geared towards the "We believe you're smart, so we're not going to teach you how to start an IDE (but we will have a link to show you what type of project to start in case you need it)" type.
I too experienced this early in my career.
There are lots of bootstrap tutorials, lots of advanced/specific tech tutorial, but very few intermediate level.
I found that simply picking a use case (todo list/calculator etc) and going through research -> develop -> test cycle helps bridge the gap.
Duckduckgo, SO, Medium and ofcourse dev.to will be your constant companions
Edit - Definitely check out Freecodecamp for web dev. They have broken knowledge into small (2-5min) modules so you can mix-match what you want to learn
@jaydeflix you can learn the language (modern javascript that is) using this as a guide javascript.info/ and its very well organized. Play with the examples and modify them on your own machine to get a better understanding.
I definitely agree with all of this. So much time I've spent trying to figure out exactly what to learn turns out to have been wasted, since most of that energy could be channeled back into just experimenting and learning more.
Don't get me wrong, setting priorities is important. But not to the point where it's paralyzing and it stops you from getting a balance of short and long term goals. For me the simplest and most effective way to quickly do this is ask "what could I improve most in my workflow?" In a blank I was learning more Rails, since it's used often at my job, and playing around with Vue, since I wanted a simpler JS framework for small ideas and experiments. I don't know if they're the absolute best things to learn for me right now (could be React instead), but they get me the most excited to learn more, and that matters more.
I also agree about learning your way around roadblocks. I'm a junior dev where I work, but I'm getting to the point where I'm about to ask a colleague for help, and most times I stop and realize I can figure it out myself with some extra digging and research. That's honestly helped the most with feeding my passion, knowing I'm getting better at teaching myself broader topics. And that's going to keep me going through my whole career :)
This issue resulted in major grief and frustration, but oh my god did it force me to learn a lot all at once. Looking back at all the times this sort of thing has happened and how to take that attitude into the next issue makes me feel pretty great.
It's all about getting back on that bicycle. π² Hope somebody finds this helpful. At some point in the future you're going to look back and realize how far you've come. I really don't think this ever goes away as long as you stay interested.
I needed to hear this...I started coding about a year ago and have been programming professionally since March. Up until now, it's been a pretty linear learning process -- not effortless, but the spiral has consistently moved upwards. About a month ago, I felt like I hit a plateau. I've been trying to "double-down" but the plateau is real. The last thing you said about the process taking years makes me feel hopeful. If I keep pedaling, I'll eventually start moving uphill again.
There have been so many times along the way I felt like I had plateaued and I had no idea if I'd ever work my way out of it. I always did, usually without even really realizing it.
...or learn how to make passive income)
Passive income just means less time pressure to master these machines π
I used to stress out that I was not focusing enough on a specialty, and was constantly jumping from thing to thing. Focusing is good to a point, but at a certain point, your free time is your free time and if you want to take a day to mess around with Haskell or something, don't feel bad about it! Some days you are allowed to Treat Yo Self!
Absolutely. My worries are usually the opposite, that I'm not exploring widely enough. Either way, they are mostly unnecessary worries. Progress happens when you stay enthusiastic about craft, no matter where you put your focus.
The list of my open Tabs tells the same story ;)
You are absolutely right!!
This is very true. You simply cannot rush it.
I'm very much at peace with this, but it was frustrating for a while. I really didn't want to be a newbie any more. I'm not complacent, but I'm trusting the process more than ever. When I see other developers struggling, the advice is to keep putting the work in and the "aha" moments will come more consistently.
The idea that learning to program is iterative, and takes place over extended periods of time through deliberate work, resonates with me.
I am very conflicted about junior devs who aren't exposed to "raw" programming skills like algorithmic thinking, SQL queries. Most companies interview with a "first principals" approach and dig into the basics of programming. Many of us are using frameworks and ORM's, and although we may have had some exposure of the basics, I don't think standard interviews test for our knowledge.
Would it make sense to practice algorithmic thinking, SQL, etc, simply for interviews, even though the relevant knowledge will be learnt over time?
Great points! I think an important part of this is accepting that you will write bad code in the learning stage of a new area/language.
If you're an experienced developer, it's quite hard to let yourself write stinky code. But, if you're working in a new language and you don't know how to make it right, stinky code is inevitable. It's part of the learning process. And having the humility to write it, then learn from it, is a vital step in keeping your learning going throughout your career.
Feeling like you're too experienced to write junk can be a source of paralysis and sap at the mojo. Really, it shouldn't be. We need to remember to learn like children, scientists, et al.: by making lots of experiments and not always considering code to be the end product.
"For as many people as there are trying to lift you up and cheer you on, there are also the ones that want to tear you down. It's probably not a conscious effort on the part of these types. It's probably out of subconscious insecurity or projection, but those types exist."
words of a wise man :D