back

by swyx·8y ago·view on hn ↗
this is a bit of an awkward question but.. have you ever come across anyone who you tried to teach but in the end was just not suited for coding? can everyone learn to code?
5 comments
Not everyone can learn to code (well), imo. But, that's not an elitist coding-is-harder-than-other-things statement -- it's just the truth for any discipline.

Not everyone can draw/paint; not everyone can sing; not everyone can learn new languages proficiently; not everyone is good with numbers; not everyone is good at teaching; not everyone is good with working with other people; not everyone is athletic. And by this I mean that some will naturally be good at learning and ultimately mastering the above list of things, while others have to work much harder to get even close, with a lower ceiling.

Most importantly though, it's not up to someone else to decide whether you're good at something or not. Everyone should have an opportunity to take class or learn a subject and find out for themselves if that's something that they're good at or naturally inclined to. And if they're not good at it, it's not the end of the world because there is something else that's probably more suitable for them that's just as important to this world as coding.

The trouble we run into is that we often think of programming or coding as something more important or more sacred than other disciplines, when in reality it's just another in a long line of disciplines that takes practice and a little bit of natural talent.

Everyone can learn how to code. Not everyone might be able to have the skills to be a great coder, but that happens with any discipline.
Any one can learn to code it isn't difficult to learn at all. Just like any one can learn math or english. What makes the difference is what level you can achieve. Just like math goes from elementary school to college level coding has a similar pattern where certain people get stuck in different areas. Hello world would be elementary level building large scalable enterprise application would be college level. You don't have to be able to build monsters applications that require knowing so much computer science that even physics and high level mathematics get involve. You can be a programmer that can build simple website that pays the bills. A entry level programmer doing simple website work makes $40,000 a year mattering your location and such. A senior arch developer makes around $400,000 a year also mattering location and such. Even some specialize areas pay their programmers $1,000,000 a year for what they can do. Some of the entry level people may make it to the top of the pile and some programmers will never leave that entry level position. I even know some programmers that are great, but decide to go another route. That has nothing to do with computers, because they get tired/burnout. Then I know some guys that are horrible programmers, but they enjoy it so much they just keep at it not caring.
Great answer. How does one find their level?
"Know thyself". I don't know exactly what you mean by the question. That was just my first thought. If you are asking where you place in the spectrum of the guy that builds simple websites vs the guy that build large scale enterprise applications the only way you will know is keep on trying till you succeed. Some would argue failure is the measurement, but in truth we fail all the time. Failing is the easiest thing for one to accomplish so it could never be the metric we use to measure. Failing repeatedly till we achieve success is what life is about. Every time we run into a problem or new situation is a chance to grow to expand and to achieve something we couldn't the day before. The whole whats the difference between the master vs his apprentice? The master has already failed a million times while the apprentice has only failed a handful of times. The master never cared about reaching greatness he just cared about taking care of the challenge that was placed in front of him when it came. Those challenges are what turn him into a master and the same shall happen to you. The level you speak of is the spoon in the matrix it only exist in your mind the second you realize that then you can bend the spoon.
By continually trying more difficult things. Of course, you may find that as you try more and more difficult things, your skills continue to grow. So your level can keep getting higher and higher. Also, note that some people reach higher levels in specific areas. One person might be amazing at low-level, highly optimized C++ or assembly, while another person might be amazing at building deep learning systems, while a third person might be great at designing hugely scalable and robust distributed web applications. Be curious, try learning a lot of things, find out what interests you, and what you're good at, and see how far you can go down the various rabbit holes.
In my experience of teaching I have to say it depends.

Basic coding is rather simple and basically everyone can do that.

Actually writing/designing larger applications is a skill most people don't have the time/patience to learn, similar to how most people can write on hackernews/twitter/facebook etc, but only few people can write a novel.

Apart from the sequential understanding of how a computer operates, not everyone can express the goal in code that is, for lack of a better word, beautiful. Meaning 'easy' to read/follow, simple, expressive etc. And even less people can document/describe what happens, and even less people can see how the code they uses resources (cpu cycles,wait times,storage,etc) and thus cannot optimize appropriately.

I won't mine being mentored by you. I can code but I lack some of the high level understanding you mentioned.
Yes. If a person is able to do things sequentially (get up, brush teeth, etc etc), be able to decide, (if I do this, then I do that), they can code
That's only true for very small, commercially useless values of "can code".
however useless of a code someone writes, they might have had alot of fun writing it. Coding can be alot of fun, and everyone can learn it.
love your positive attitude. i think my weakness as a javascript peer mentor/teacher is that sometimes i get frustrated when people dont get what I am trying to teach and its either i am a bad teacher or they aren't learning it right. and constantly at the back of my mind i'm wondering if its worth my time/effort to keep trying to teach the person or if they should go ask someone else who is better at teaching.
Since you asked, I'll try to share what I've learned. You can become incredibly effective if you invest in the skills to become a better teacher. Usually if someone is not learning, its the teacher not doing a good job.

1. Test - before starting any topic, make sure your student has a grasp of the prerequisites by giving them simple tasks. Just because you have taught them the prerequisites a week ago does not mean that they didn't forget.

2. When you are teaching them, talk as little as possible. The only thing you should be saying is the concepts.

3. Ask lots of questions. Ie: What is an object (expect them to repeat what you told them); What happens if (insert 10x different cases). Teach by asking.

4. Set 0 expectations. If you get frustrated its because you have expectations. Many people have self confidence issues. Being disappointed will cause your students emotional stress and they will not be able to learn. They might start to avoid asking you questions...

5. Listen. Many times, your students could be saying what you wanted to hear, but worded differently. Their analogy could have the same concept as yours but very different. Learn to recognize what students are saying.

I can't emphasize #3 enough. When I teach, I never say more than 2 sentences without asking a question. Because you quickly realize that people have a hard time retaining more than 2-3 sentences at a time.

You should 100% invest your time to get better at teaching. Teaching is a skill that schools robs from our childhood growing up. It helps you sympathize with people better, understand people better, communicate with people better, etc., all pretty real skills to have.

these are a really good set of principles. saving these to reflect on.
What fields do you have knowledge in (okay, JS, but more specifically?), and how much free time do you have?

You have a bit of a goldmine here: there are _guaranteed_ a ton of people on here who wouldn't mind a bit of private tuition. Bam, instant feedback.

As long they are interested in coding, they can code.

It may take longer if they're not as adept. They can try some strategies to assist coding, such as books, checklists, pair programming, etc.

Imagine a graph where one axis is how interested you are and the other axis is how quickly you pick it up. There is a diagonal line the separates those that will persist long enough to be a good coder.
This perfectly explains my own reaction/opinion when I started reading the comment that started this subthread.

Worded much better than I could have put it.

It's takes a lot more than interest. Programming requires intelligence. A lot of people are not very intelligent.
If you compare someone with quite a few of the ai bots out there (image recognition, chat bots), you will realize how intelligent they actually are. Every human person is like a super AI machine.