Whatever you're doing, stop it

I’m serious, please stop studying code.

That tutorial you’re going through? Stop reading it and delete the test project you’re doing.

Have a subscription to Team Treehouse? Cancel it. You don’t need it. Save your money towards a droplet in Digital Ocean.

Deliberately stepping through a walkthrough on React? Delete the project. Your time is better served building something off your own idea or looking at a real-world code.

I’m noticing from a lot posts on here where new devs are spending a lot of time going through tutorials. That includes the challenges on FreeCodeCamp as well. This will not make you become a developer.

This isn’t really your fault if you’ve come from a non-technical background. Most traditional learning models are linear where topics are chunked sequentially and you are forced to imperatively learn each topic step by step. You can’t move on to class 2001 until you pass class 1080.

However, the learning model in technology doesn’t work like that. You learn based on the problem you’re faced with. In a way, you’re diving in the middle instead of starting with the fundamentals. This is why it’s important to immediately start building your own projects with your own ideas as soon as possible. Because once you’re presented with obstacles or problems, it’s up to you to figure out and learn what the solution is.

In other words, you need to experience the headaches and frustrations of building a software product. That’s the known secret that must be remembered.

It doesn’t have to be a complex, real-world project. It can be as small as an algorithm that builds and reverses strings. Don’t be afraid of your curiosity.

So the next time you are looking at the map on FreeCodeCamp and you get overwhelmed, tell yourself, “Screw it, I’m just going to build something”

EDIT - justing is not a word, how dare I

10 Likes

A lot of people have learned to code by using the approach you are condemning. Those tutorials and and education you condemn are great at teaching people the basic skills. Something are too complex to just learn on the fly. It’s also often easier to learn by standing on the shoulders of giants.

I ran into the same dangerous advice when I used to teach classical and jazz guitar. People would advise “don’t study, just play, it’s all you need!” That was terrible advice. Study exposes you to ideas that you won’t encounter otherwise. It gives you a framework to understand what you’re encountering in the real world.

You want to tell people they need to build things? I’m with you 100%. I give that advice all the time. You want to tell people that the “real” education will come when they’re building things? That is great advise. I give it myself. But telling people to stop reading and learning and doing tutorials and test projects? Over the top hyperbole aside, that is bad advise, imho.

“It doesn’t have to be a complex, real-world project. It can be as small as an algorithm that builds and reverses strings.”

Wait, what?!? Isn’t that exactly a common problem on many of the platforms you just mocked, including this one? Sorry, I almost fell off my chair laughing at this line. Maybe it was a joke. It just seemed such an incongruity with what came before.

Are you suggesting to “do toy problems” but only the ones they like? While I’m all for doing little side things for fun (or “Don’t be afraid of your curiosity.” as you say), the advantage of structured learning is that most people when they teach themselves tend to focus on what they like and what is easy - but a structured program of learning forces them to work on things they might have avoided, filling in gaps in knowledge. I saw this soooooooo many times teaching music too, self-taught musicians that were very good at the things they enjoyed but clueless about things that they didn’t like or required a lot of effort.

You give a lot of truck to the idea of pursuing their own ideas. But part of being a dev is learning to follow instructions and meet other people’s specs. Seriously, I meet a lot of devs that just can’t do that. They’re so used to just building what they want and adjusting it as they go to suit their whim or to avoid (probably unconsciously) some technical or algorithmic difficulty they don’t like. But they don’t get to do that on most jobs. I’ve had discussions with junior devs where they try to change the specs just to avoid having to deal with a problem they don’t understand or have to work with a tech they don’t like.

I like the parts about being curious and building things. I like telling people to work on side projects and feed their curiosity. I like telling people that their eventual goal is to just be building sites and apps to solve real world coding problems and force them to learn new libraries.

But I don’t think we need to go to the extreme of telling people to abandon their accounts in respected education sites, delete and (presumably) abandon test projects and just wing-it on their own.

I also feel like you’re arguing against a strawman to some extent. Are people telling learners to not build side projects? Are people telling them not to work towards a goal of building apps and working on real world code? Are there any people telling them to just keep doing algorithm challenges and tutorials forever?

You have a lot of enthusiasm here. I’m just not completely sure what real world actual problem you’re actually arguing against. And you seem unaware that pretty much everything says something similar, albeit not in the same “burn it all to the ground because I say so” fervor.

27 Likes

My experience with fcc until now: it needs some patience but time after time that projects influenced my daily work as webdeveloper: suddenly I started using flexbox or css-grid or using Array.reduce() or closures or callbacks…
I like having a study-plan and to deal with things I wouldn’t discover by myself. It’s very difficult to create such a plan by yourself just by doing any projects. There is too much random.

5 Likes

That’s a good example. I have met a few devs that still try to do everything with for loops because they never really learned things like Array.reduce(). It just seemed strange to them, it was hard to learn, and they already had a hacky way to get it done. I’ve met more than a few self-taught devs that don’t understand some basic concepts of JS or even programming, because they taught themselves and skipped over the parts that didn’t interest them or seemed hard. The scary thing is that they were decent devs - they just had holes in their knowledge, holes they didn’t know existed. (In all fairness, I - and pretty much everyone - have holes in my knowledge. But I do work to fill them in and at least be aware that they’re there.)

Again, the OP’s point about building things and satisfying curiosity with side-projects - I agree 100%. But that is very common advice, and you don’t need to abandon all structured tutelage to do it.

7 Likes

My experience is the challenges on FCC are good at getting you to apply your new skills. At the same time they build a portfolio of work. Ideally you apply your experience to making something of your own or a variant of an existing challenge.

3 Likes

I don’t see how learning to code isn’t inherently structured learning. While there are folk out there that can go into a language completely cold and pick up the concepts of it, I guarantee you they’re coming from a background of previous coding experience.

Imagine coming off of html and css and going into javascript if you’ve never seen it in your life. Now imagine instead of introducing JS concepts one by one the next building off the previous, you just threw them all at the student. That seems incredibly overwhelming.

Now instead, let’s give them one concept at a time in a lesson/tutorial format. First we got variables, here’s what they do. Okay now check out comparison operators, you can use them with those variables you just learned about. Whoa…if/else statements?! Don’t panic, remember those comparison operators from before, well you can totally use them to check the current values of those variables you have and make certain things happen if those statements return true or false. True or false?! Oh yeah I remember that from learning about booleans in the variable section. You see what I’m getting at?

It all builds on top of itself.

Otherwise it’s like giving someone a photo of a house, a pile of materials and tools, and then telling them to make what’s in the picture and they have no idea what a hammer even is yet.

Funny you should say that, I am currently going through walkthroughs and tutorials on React. Regardless of me having my own ideas for projects to work on, if I don’t even know how to install the React CLI, I’m not going to get very far on my own. But I know how to do it because I watched Coding Garden tutorials on youtube (btw I highly recommend that channel as CJ does a fantastic job of breaking down React code into something digestible).

Now when I think about possible projects, they seem totally more feasible, I can actually start writing proto-code in my head before I even open up my editor.

Is doing side projects and coding your own ideas an absolutely essential part of becoming a great programmer? Definitely. I highly encourage it. But following along with a tutorial or lesson as the very first steps into learning something is invaluable too. The real problem is getting stuck in tutorial hell and never branching out on your own.

5 Likes

You’re forgetting that people have different learning styles.

Some are visual and do best with tutorials and reading along with hands-on doing. (that’s me).

Some are auditory learners and do well with podcasts and video tutorials (not me unless there are captions or a transcript lol).

Some are a mix.

There is NO right or wrong way to ‘learn’ and develop (no pun intended) their skill set.

What works for you will not be the same for everyone.

So, no I won’t stop whatever I’m doing- I will adapt if/when I find something is not working thank you. :slight_smile:

7 Likes

This post was geared towards the newer devs who are stuck and can’t figure out why they are not “getting” it. Specifically, the ones who are making a career change from a non-technical role and are still trying to land their first dev job.

The problem is that they’re coming from an education model that doesn’t work in IT

That statement right there is the type of education model that will work under that discipline (and the majority of others) however, you’re misunderstanding my message. There is this notion that these project ideas or exercises already address the building it yourself to understand what I’m harping about. However, it’s actually taking a concept, for instances immutability, and building something understand it through real-time problem-solving. So you write a program using that concept and you fiddle with it.

“Hmmm… what is this side effect thing that immutability prevents? Let me try mutating it”

“Huh, what if I used a Map object instead? Well that didn’t work, my values didn’t change. Wait, I’m using a function to set the value. Ohhhhhh!”

A framework doesn’t address the unexpected in a real-world project.

I am suggesting these new folks to do “toy” problems, even if it is problems they’re interested in. They have no real-world constraints other than the time devoted to coding. Other all that’s the whole point you’re trying to get across: structured learning is what provides those constraints. Yet, that learning approach isn’t going to facilitate their curiosity needed to attack problems that involve complex algorithms or technologies.

The main takeaway here is learning through application. It’s going to do a better job instilling the most vital trait a developer must have: curiosity.

On the contrary, I’m not entirely bashing linear or structured learning. If one thinks so from reading my post, they’re jumping to conclusions. As developers, we do use it implicitly when we’re building a project. It’s not uncommon to do a tutorial if it’s part of a project you are building and you’re implementing a tool or paradigm you never used. You end up using that tutorial code you did the walkthrough on with alternations matching the specs of the project. I am not against that.

What I do think where aspiring devs need to have a paradigm shift is those that are adhering to a path where they have to do a tutorial walkthrough and THEN build the project.

2 Likes

That’s one of the major issues why I wrote this post. Traditional learning leads to tutorial hell.

1 Like

I obviously struck a chord.

Sorry, but “learning styles” are pseudo science. For example, read here. A lot of people believe in them and assume that they are scientific fact. They often get used as an excuse to not do things they don’t like or at least in a way they don’t like, but there isn’t any good science behind the idea.

Furthermore, I submit that the way computer languages are taught should mimic the real work conditions, which I think they for the most of the part do. If you are given an assignment, your boss isn’t going to give you a gamified interactive video because you tell him you have a different learning style. You’re going to have to read some (often a little vague) specs, comb through the docs, try some things out, and ultimately meet someone else’s specifications. And you’re going to have to keep at it until you get it, no matter how unstimulated your dopamine centers are.

5 Likes

I do not fully agree with the OP, however, he makes a point. A lot of the tutorials (in various parts of the web) show only really simple applications. Until you hack through a hard app yourself, and get errors and figure out how to fix them, and then realize half way through there was a better way to begin the app . . . well, it is going to be really hard to understand what you should have been doing from a tutorial. Coding correctly is in fact hard. It just seems simple to someone who has spent 10K hours learning their craft.
Having said that, for someone who knows absolutely nothing and is switching over to programming, a structured learning environment is best, as long as it builds the correct foundation. If you followed the OP’s advice as a beginner you would just get frustrated and quit.
I have been coding for a long time as a hobby, but only about 3 years ago, decided to learn correct coding, modern design patterns, testing, CI, etc. I have at least another 2 years to go before I could realistically call my self a professional programmer, however, I am doing this as a side project - it could be done faster, but only if somewhere in there there was structured learning added to (what I perceive as the the OP point) of code and break, learn, code and break etc.

2 Likes

I view newbie tutorials and code-a-longs as entertainment. Let’s face it, most people who try to learn to code will never do it for a living. That’s just a fact. So there is nothing wrong with them watching dummy tutorials that explain concepts with contrived and banal examples that have no reality to them.

They are still getting something out of it. They’re still establishing a habit. It sure beats watching CSI miami or american idol. Maybe after wasting a few months doing this they’ll be ready to try something else. And they’ll understand some of the basic concepts and the transition to making harder stuff will go smoother as opposed to starting from scratch.

That being said, there are some wonderful tutorials/courses out there that build real world apps using real world patterns and structure the curriculum in a way that provides A TON of value to newbie developers. Just because you’ve had a bad experience with some popular “feel good” courses doesn’t mean there are no excellent courses out there. They do exist, you just have to find them.

The “just go build it” approach usually leads to a lot of spaghetti code and a lot of time wasted going through outdated stack overflow discussions. Especially when it comes to something like javascript. There are some key concepts out there and some really useful, easily explained patterns of organizing code, solving small, recurring problems that a new developer just cannot arrive to on their own. That is why i think the “learning by doing” and “just follow what the instructor is writing” approaches have to meet somewhere in the middle.

Some courses are based on building one big project and have exercises scattered throughout the course that ask the student to implement some of the features of the app on their own. They have explanation/the teacher’s implementation of the feature as a separate video, which allows you to compare the result and refactor your code as needed. You learn quickly this way, you’ll learn way more than bashing your head against the wall trying to glue together snippets from stack overflow and MDN. A newbie developer is just not ready for that yet. He needs code review and guidance. Courses like that are one of the easier and more reliable ways of getting a quality “code review”.

Another idea is building apps that are popular starter apps online, like “30 apps in 30 days” kind of thing, FCC practice projects. These are usually simple, doable for beginners and provide plenty of challenge, while at the same time allowing you to compare the way you solved the problem and your code with the results of others on github, codepens, etc… This one is harder to evaluate, because there is a lot of crappy code out there and some of the solutions out there are actually terrible.

That being said, being able to read and understand the code that others have written is one of the most valuable skills a junior developer can have. Dealing with legacy code is a huge part of the job. Developers often spend weeks reading the code bases while onboarding at a new job. And you are saying it’s a waste of time. Nope. Everything matters. Write code. Read code. Think about code. Immerse yourself in code. Stay hungry. And you will become a developer. If you are willing to learn new things every day and are not afraid of frustration and constant small failures becoming a developer is going to be inevitable, it’s just a matter of time.

1 Like

I think the point being made is somewhat equivalent to learning a spoken language by living among native speaking people and picking it up through use and direct contact vs sitting in a classroom 6 hours a week.

I don’t personally think there is anything inherently wrong with using tutorials, written or video. But it can be a bit of a trap, where you can find yourself in tutorial purgatory if you don’t take the right steps to, on your own, actually use what you have learned.

2 Likes

Maybe I should have approached this a different way… or not at all… I never said I believed it as scientific fact.

“As an excuse to not do things they don’t like or at least in a way they don’t like”.
I get it- that would fit for the majority of able bodied, hearing, sighted people. So now it’s an ‘excuse’ (as a deaf person) to say that I prefer visual cues/“learning” over auditory/voice? Maybe I’m misunderstanding or misreading something (if so apologies and I’m willing to listen eyes open).

On this I agree- it’s better to do the actual work and I would NEVER ‘expect’ gamified interactive whatever on the job.
What I’m trying to say is exactly what you said- Read through docs, look through the existing projects, ‘use’ the product/app/program. THAT is how I learn and how I picked up things on many previous jobs. It’s hands on and visual documents etc that work best. Auditory?
shoot… I thought of a perfect way to express that this morning but it’s gone but really… as a deaf person- I rely more on visual ways to work through what I am learning.

Yes…yes I am aware and last I checked my dopamine center(s) are just fine thank you ;). But I do agree that “working at it” is key (with a reminder to remember to take breaks from the computer :slight_smile: ).

1 Like

I don’t fully agree with this post. Granted, maybe you learn the most when are hitting a wall in a real world project and you have to solve it yourself, but I cannot imagine going to work without all those Udemy courses, tutorials and hundreds of hours spent in freecodecamp, treehouse, codeacademy and more on my back…Those give you a fundamental set of tools to be able to tackle the problems later.

What I’d say is that no course will prepare you to solve real world problem scenarios.

2 Likes

There is no better teacher than a problem or obstacle put in your way. The faster you learn to artificially challenge yourself by ideating on a project idea and then facing it head on the better. Learning development is not about memorizing and absorbing technical information. I have a horrible memory and rely on google for the details most days but the thinking part is like a mental version of going to the gym.

It takes time to be able to naturally break down a problem in to the smallest chunks possible so that you can tackle the problem by solving the much easier problems that compose back into the original problem you face.

I see nothing wrong however with doing tutorials and exercises to begin with but at some point you have to take the training wheels off and learn to ride that bike yourself.

1 Like

I think the answer is neither extreme. You can’t learn with tutorials alone but without them it’s a battle many might give up on without some help along the way. His post was probably a bit extreme to catch your attention.

My personal strategy is to take a tutorial and make it my own. I spin off in a different direction with it. Now that I’m more experienced I can take an idea I have and build it without the tutorials but I certainly didn’t start out that way. I think the advice given in the post is valid but it’s only half the story as you point out.

I get where you’re coming from, and I get you’re being deliberately hyperbolic in a glib kind of way, and that advice works…sort of…for more experienced developers who know what questions to ask. And sure, just doing tutorials will get noone anywhere fast. But it’s terrible advice for new devs, mainly because this:

DanStockham:

The problem is that they’re coming from an education model that doesn’t work in IT

This just isn’t true. IT, like any other skilled job, needs a combination of tuition and deliberate practice (which is basically what you talk about) to get good at. Software development isn’t something special here, same rules apply. If learning a subject at a beginner level:

  • tutoring from an experienced and good teacher, who can adapt to where the learner is at, is best.
  • learning from a mentor within a job is also excellent; this needs the learner to be in a job to start off with though.
  • when undertaking self-directed learning the first option is not available, so in sectors where they are applicable, tutorials take the place of this. Yes, they are a very bad replacement, because they cannot respond to what the learner needs at any particular time, but they are the best you can get in the situation

They provide half if what is needed for understanding of a [group of] concept[s], the other half is deliberate practise (this is again easier in a job, where there are financial incentives and disincentives to drive focus). Tutorials provide the teaching, then the practise provides application and drives mental retention of the former. You can do without the first part, as you suggest, but the process of actually learning things is brutally slow, as it is if you do without the second part

10 Likes