The problem with learning programming

My thoughts exactly. I agree with you @SarbjitGrewal. I must acknowledge that most programmers are good at what they do i.e. coding but they are very clueless about how learning takes place. Unfortunately there are tons of tutorials labelled as beginner friendly but when you look at the content, language used and how they are structured, most learners will have a negative learning experience and that includes FCC to some extent.

Programming is not harder or easier than any other discipline out there but what makes it hard are the so many clueless instructors ( but very good programmers) producing ‘lousy’ tutorials. This helps perpetuate the notion that ‘programming is hard’ yet it is not. You can be good at it with time and effort if you follow the right course. I honestly think before a tutorial is released on a platform such as this, it is thoroughly reviewed otherwise instead of helping people learn, you will find you are doing the complete opposite i.e frustrating the learning process.

1 Like

@nibble
i agree a little, (not trying to hijack @SarbjitGrewal @firdavsiQ ),
some of the excercises i see in “great” JavaScript books (which im currently learning) completely throw me, until i realise they have added some fancy syntax to their example code that isnt necessary to learn the principle being explained. A teacher needs to lose their ego at the door as best they can, and not use the teaching as an ego booster to show “how much they know” or “look how cool this feature is” or "this example is similar to xxx in ____ (enter another language here!!). I also don’t understand the need to show a beginner “look how great you can simplify this code”, when a beginner (i.e. ME) barely knows how to code at all in the first place! Improvement in coding should come AFTER you know the basics. Nobody runs before being fairly competent at walking!

Ive lost a ton of time going backwards in my learning because someone experienced adds in a word to their code that i think is a keyword (that i suddenly dont know and isnt necessary to explain the concept), or some new syntax that i think is important to a concept (that i think im stupid for missing)… only to find out that the fancy parts of the example code arent actually required to learn the principle being explained.

Also a lot of coding, for me, would be good to have practical examples of the principle being explained in REAL WORLD CODE to solve a REAL WORLD PROBLEMS, otherwise i feel like im just learning the “order of the planets” or “random dates in history” as a pointless exercise in future code aesthetics. I like to see how code translates into results. There is little to no practical value in code that does nothing useful.

I noticed last night, while perusing Kyle Simpsons well regarded YDKJS books, that the first book in the series on github says; “Keep in mind that even though this book is titled “Get Started,” it’s not intended as a beginner/intro book” - im supposed to have three months coding experience to “get started” :exploding_head:

FCC does a great job for free, but im a big believer in Kaizen. Im currently struggling to get recursion and other concepts in ES6, while not knowing enough practical JS code to build… anything! Surely thats the wrong way round? Ive been looking for basic “decomposition” excercises online (which i havent found) and ive got three personal web projects to build (i dont have enough knowledge to get the JS on any of them to work).

if you have suggestions of things to change, you can open an issue on github to discuss it, challenges are ever-changing
freecodecamp is proud to be beginner friendly and if you think there is anything that could be done better, Free Code Camp listen, and contributors make changes

I don’t agree that “learning programming is not a difficult task”. Different parts of programming are difficult to different people, and leaning to be a true expert is quite difficult.

The fact that different people encounter difficulties in different parts of learning is why I generally try to avoid language that minimizes the difficulties others are having. By saying things like “you simply…” or “you just…”. Different people have challenges while learning something new, and that’s ok.

It’s entirely possible that this is the person is trying to show off and has an ego problem. It’s also possible that they are trying to build you up to broader understanding and best practices.

A lot of pedagogical theory support teaching by

  1. reminding people of something they already know
  2. building something new off of the current knowledge
  3. mentioning future learning towards the final end learning goals

With coding, there is the minimum code required to get the example to run and there are modifications and extensions that push the code closer to best practices for real world examples.

1 Like

This topic temporarily took a turn into discussing the value and history of JavaScript. Those replies have been moved into their own topic.

I don’t think they’d accept any suggestions from people who come from third world countries. Do you think they do?

Free Code Camp has a wide variety of volunteer developers from across the world.

Ok, Do they accept a video tutorial on their curriculum but the simplified version created by me?

you just need to open an issue on github to suggest changes
everyone can do that, from all over the world.

That may be a tad too far from what the curriculum is right now, plus there is version 7.0 being worked on and it should be realesed sometimes this year with a completely different approach. At this time only changes to the currect challenges are accepted, not creating new ones.

But if you have suggestions on specific challenges, those are welcome.

you are certainly welcome to make your own video, or even try to become one of the authors for /news (here the style guide if you are interested, everything is written there)

or do you mean the scrimba videos for Get help -> Watch a video? there are a few of those that needs to be updated

2 Likes

That might be a good idea. Make a YouTube video on the subject and maybe link people to it. That might help. Also, keep in mind that there are plenty of confused beginners just like you who are ask questions here every day. Why not start answering their questions? It’s a great way to reinforce your own knowledge while helping people out, as you seem very passionate about that.

This is great in theory but breaks down extremely quickly.

What you’re talking about is more complicated than I think you presume: you can try to explain some fictional “purest form”, but there a. isn’t really any such thing and b. it’s all an abstraction anyway (for a for loop, is an instructor first supposed to explain while loops? or do they then need to explain the underlying implementation using jumps in the underlying code?). A teacher, any teacher has to pick a level that’s not too high level and not too low level and make assumptions about the student’s knowledge.

They often get it wrong! Being able to judge that level is extremely difficult. And bear in mind that the explanations that clicked for you may not click for someone else. There are teaching methods that work better than others, but they’re overall methods, not just explanations, which are often (not always) very much dependent on the student.

Programming is about joining together simple primitives, and becomes complex fast – the “how things connected” overlaps with another few concepts, which overlaps with another few concepts, and so on, exponentially. And all of those are actually complex underneath. A teacher has to pick a cutoff point – like with the loops, they’re just saying “here’s an array to loop through”, not “here’s an array to loop through, let me explain where this array came from and how it works”. They don’t need to do the latter because that’s not what they’re teaching.

That’s literally what FCC is doing. It is not perfect by any means, but it is also open source. And writing teaching material that works is brutally difficult: saying “just make it better” isn’t going to be very helpful.

Some people are definitely better at teaching than others! But bear in mind that the people who are giving excellent explanations are often only able to that because they have expert knowledge of the material.

This relates to the first few things here, but that’s extremely difficult to do. “Real-life coding” is the same, but with huge amounts of stuff tacked on that isn’t remotely relevant to teaching basic programming. The best FCC can currently do is to teach extremely simplified examples (the curriculum is moving towards being project-based, but that comes with its own downsides as well).

What you’d consider real-life coding means being able to translate some requirement into code, and that code has to be built up of the primitive building blocks you’ve been taught in the “pointless” examples.

The challenges that are closest to real-life examples are also the ones that tend to trip people up immediately (the Record Collection challenge for example). And those are often saying “we have already shown you, via simple examples, the basic building blocks you need to do this. Now put those blocks together”. And then the projects do that again, at a larger level – they’ll often say use some library or framework. That library is just made up of the primitives you’ve been shown and will be used via those primitives. Each thing build upon itself, and it gets very complex, and it becomes increasingly difficult to teach – at some point, the curriculum needs to say “we’ve shown you all the individual bits, now put them together”.

ES6 is Javascript. The way it gets dumped in at that early stage in FCC is a bit of compromise, it was added after the sections surrounding it already existed. It does drop a load of things onto you without warning, but you need to be aware of those features because they are now standard. If you go out and look at JS codebases (which you should do), they are going to be using the syntactic constructs that were introduced the language five years ago. They won’t be being used to make the developer look good, they will be being used because they are useful.

I understand it is hard, I can remember it well. But you also need this challenge: you can’t just keep going over basics. Going over basics over and over often feels great, but it becomes less and less useful.

This is simply not true for very large % of learners (I would say the vast majority).

2 Likes

Well if you don’t show/ explain how things connected together than tell me how am I going to continue the course? you are leaving a gap/blank space in my knowledge.
If it is only one that’s okay I can google, even tho googling not always helps.
One of the reasons I wrote this post is because no matter how I google it by rephrasing hopefully someone has an explanation out there. They just don’t.
Even in this forum most say that I can’t teach you everything. True but I am not asking for extra stuff. You should be responsible for what you cover. You can’t assume your students know something while you are teaching them. Explain the topics that you cover.
So why actually it is important to teach that way?
I can skip many topics that you don’t explain. But do you know how it feels?
It makes programming like rocket science. I know that computer science is science too. But learning a language should not give you like you are learning rocket science. That’s the problem with the tutors online.
Instead of making it simple they make it harder than it is.
I am making my own videos now but hopefully free code camp change the way they teach too.

Most people think I was talking about FCC specifically Beau Carnes but this post wasn’t related to FCC only, ıt includes almost all udemy tutors and all of youtube devs.

Well, there’s your problem right here. Sorry to be flippant, but you’ve picked one platform (Udemy) that is well known to have exceptionally patchy content, and one (YouTube) which isn’t a learning platform at all, it’s random people posting videos. Complaining about these is just screaming into the void. For crying out loud, literally pick a better platform, don’t make obtuse complaints about something it’s impossible for you to change.

2 Likes

well it depends on what you learn. ı am not saying that youtube revolutionized learning but there are some great teachers in there. BTW FCC has a youtube channel too and all of their courses.

@DanCouper
I got very frustrated yesterday and it shows. I took some time away from the materials to have a break (as im counterintuitively trying to ram this learning home). I started looking back over the materials with a better more positive attitude this morning and will keep going at it. Today i have a new approach, going slowly and understanding the material is much better than racing through and not getting it, cos thats only compounding tomorrows problems.

I shouldnt be ungrateful, FCC has done an amazing job on a resource for FREE!! This is like trying to build a jigsaw without knowing what the final picture looks like, so it must be hard to teach as no matter which side or angle it is started from, the abstraction still makes it difficult - the only antidote is time on the job!! So the only way is to learn and understand each small step and keep going - and try not to let off steam in the forum in the process! :flushed:

if you want to start from something more basics than JavaScript, Harvard has a course called “CS50: Introduction to Computer Science”
there you can learn many things that are not taught in the FreeCodeCamp course

2 Likes

trying this but it feels like it’s more talking than writing actual code.
I mean I need both explanation and writing actual code. That’s why trying to look at different sources and combine "explanation + actual code "
I can understand explanation or reading but without getting your hands dirty with code it is just reading a story from a book and forgetting about it.

each chapter of the course has homeworks, the first one puts you doing a project in Scratch

pretty hands on I would say

you can find it on edX if you want the whole experience of a MOOC