Right!! Why do so many people think everything should be easy?
Oh, I know why - their "self-esteem" has been carefully protected from reality throughout the years they spent being indoctrinated in the state school system.
For the same reasons that many people find learning mathematics so hard: it requires abstract thinking and the ability to layer abstractions on top of one another.
I think anyone can learn to code, or learn maths, but there's no doubt that some folks are MUCH better predisposed to it. That said, some good tips in the article.
I found learning to code easier than learning to write in my native language. I think some people are just better suited to some subjects.
That said, I never did enjoy writing but always enjoyed programming, so I think an earlier commenter hit the nail on the head when he said it's down to having enough interest in a subject to learn things properly:
http://news.ycombinator.com/item?id=4933004
Conversations about "learning to code" frighten me because they overlook a necessary foundation in engineering concepts like abstraction and the value of simplicity. If you're looking to hire software developers, stop interviewing "coders".
I dropped out of college to learn to program, thought I could teach myself everything. The issue is that tutorials and books gloss over the theory.
It wasn't until I returned to college for a CS degree that my eyes were opened to what I was missing.
Why is this algorithm better than that algorithm? BigO...
What does the compiler do with my code? PL...
How does the code I write interact with the OS?
What is concurrent vs parallel? amdahl's law...
why can
for i ...
for j...
be better than
for j
for i
pass by value vs pass by reference
which languages, when...
How many people use languages these days that require them to manage memory themselves?
Coding is hard because coders don't learn the theory of computing and the abstract concepts that extend beyond any particular language.
I tend to be a bit of an evangelist in whatever endeavor I'm currently engaged. I'm a big mouth. There, I said it. With that out of the way, this tends to put me in the teacher's seat once someone says, "Ok, Brad, show me what's so cool about this thing you're always talking about."
What I've observed is that there are two types of learners. One set of learners starts from a set of instructions. These instruction sets are simple, enumerated lists. The learner executes the steps and looks at the outcome. As they advance, they might begin to explore deviations in the steps. Reasoning like, "What happens if I swap steps 2 and 3?"
The other type of learner cares less about the steps and more about the concepts behind the steps. They begin by asking, "Why do I do step 1" or "How does step 1 work?"
Everyone I've taken under my wing who engages in the enumerated list approach hits a wall at some point. When the complexity of the enumerated list extends beyond their ability to tweak inputs, they become frustrated, and ultimately give up.
The latter group tends to get further, but it's not a free pass to stardom. Many still hit a conceptual complexity wall where they fail to grasp some of the more abstract concepts.
The former group far outnumber the latter, in my experience. I'd posit that what makes learning to code so hard is that it is more accessible to a means of learning that fewer people possess.
I think he hit upon the main point at the very end. If you wanna' learn something, and I mean really learn it, you've gotta' be invested in it - and there's no better way to do that then building your own projects. Saying I want to learn to code, and having to learn to code to see your idea come alive are two different animals of motivation.
Sudden leap in difficulty – Nearly everyone noted that at some point in their learning they stumbled upon a sudden leap in difficulty that crippled their ability to grasp the follow-on concepts
I have hit this in every subject I've studied where I wasn't really motivated to learn the material. The reason this happens is that you reach a point where suddenly all the basic concepts start supporting the follow-ons. If you never really learned the basics, you will be lost. For example this happened to me with foreign languages. I had no real interest in learning French, but a foreign language was required in school. The first year was easy: basic vocabulary, stock phrases, and simple rules of grammar. The second year was not too bad either. But I never really learned anything... I would cram before exams and get decent scores, then promptly forget the material. Third year, when you actually had to put it all together... I was sunk.
If you're studying something, and can't motivate yourself to really learn the basics, you can only go so far. If you're studying computer science because you heard the jobs pay well, but you don't really care about learning the first and second material, you will hit that "leap of difficulty" at some point.
Coding requires effort, which is acquired like any other skill such as reading/comprehension. Many people try to run before they even learn to walk and this is when the sudden leap in difficulty is encountered. It took me years( read - coding time and effort) to move from novice to an intermediate programmer and this occurs each time you want to move up on your skill level. You need to commit effort, and no doubt you are going to fail before you succeed.
Pair programming, code reviews , mentoring etc ...appropriate to your own individual learning ability is paramount for success.
I personally found:
1. Code imitation - coupled with understanding
2. Code reviews - of a next level programmer
3. Blogging/Q & A(Stackoverflow sort)
4. CONFIDENCE
as important in becoming a better programmer.
Why is learning to read and write so hard? It seems natural to you now, but when you were in 1st grade, it was a pretty big challenge...It's not that it's "hard" or "easy" - the most interesting thing is that you chose to do it. Maybe a better question is "Why don't more people choose to learn coding?".
I found that I underestimated how hard it was for me in the beginning.
I had to learn C in university and I applied for BA first and thought coding is for monkeys (What an arrogant prick I was...). I hated it, I didn't understand anything first but I struggled trough. At some point it made "click" and I loved it ever since.
The funny thing is, afterwards I was biased in believing coding is easy and it has been for me from the beginning. It took me a while to realize how hard it was for me to start.
Why do we think that coding is at all unique in this regard? Have you looked through your standard fare cook book? The leaps from step to step are sometimes astounding. Yet folks are usually able to pick that up. Same for sewing. Show me the typical sewing pattern and it looks like someone dropped some lines somewhere. How is anyone able to learn that?
It never ceases to amaze me that the IF..THEN..ELSE concept seems to be beyond the ability of my wife to comprehend, but she can do things with knitting needles that are far more complex. She once tried to explain a "simple" knitting concept and all I could do is nod and realize that this is what she feels like while looking at a computer screen.
The thing I notice about people who are frustrated about how difficult it is to code is that they don't give themselves enough time. Learning how to code, like any good craft, takes time and that's something most people cannot understand because of all the flashy and motivating books and tutorials out there. "Learn Ruby on Rails in 24 hours blablabla".
I would say 3 years is a good start for the total beginner.
Learning to code is hard, and everyone's specific struggle is unique. The key issue though is why do they fail to learn, and that answer is the same for everyone that fails: they give up.
All kinds of mental talents can be helpful for learning to code, but tenacity is probably the most important. Better learning materials can be great, and they're getting better all the time, but they are still no substitute to an unshakable commitment to being a developer.
For my 12th birthday in about 1980, my grandparents heard I liked computers and bought me a college level textbook on microprocessors. I didn't understand a word of it when I first read it really. But I did read it, and re-read it, for a couple of years. And it's one of the key reasons I wasn't afraid of doing assembly language a while later when I got my first computer. The book was a terrible way to learn, and it was completely at the wrong skill level for me. But I was really into it and made up for my lack of capability with a tremendous commitment and huge amount of time, slurping up every bit of information on computers I could find.
This is an incredible answer - persistence is absolutely key. What I'm exploring is how to make persistence efficient. How can we make it so that people don't have to spend that horribly inefficient time reading a textbook like that?
That's actually not the correct answer. For most developers, it's not hard. Not only is it not hard, it's a joy to learn a language, or two, or eight. If this is a struggle, perhaps this is a barometer that you're on the wrong path.
I'm not saying coding should be limited to the elite. If you want to learn code because there's something burning inside of you, that's awesome. However, I'm thinking of the MBA founder who decided the startup thing was the ticket. They discover they need a developer, and that's expensive.
"Hey, this can't be that hard! I'll just learn to code!" I see this movement, and it's scary. Not scary because it's a threat to me. Scary because I'm a decent developer (been doing it sine 1998), and there's a lot of mean scary people who are smarter than me who want to break into code I've written. I can't imagine how insecure code from someone who wrote their first line 6 months ago. Learning is cool, we were all there. The idea that production apps are being launched based on this experience level definitely isn't cool. I might be totally off base here, but I feel like this is a rising trend. Crackers are going to have a field day with all the superduper.ly's out there.
It takes 3-5 years to get a marketing or management degree. Anyone who thinks they are going to learn to code in 3 months and build the next Instagram is so delusioned they make the most southern Baptist church look like a center for logical discourse.
I think part of it is trying to learn the wrong thing. I am self-taught and still struggle, but I found one big breakthrough came from returning to principles.
A lot of people who want to learn to code jump into a language and as soon as they finish "Hello World", they go headlong into a full scale project. This is the main culprit behind the unhelpful "help" sections alluded to in the article. If you don't understand the basics, that inevitable bump in difficulty becomes insurmountable. It wasn't until after I went back and figured out basic algorithms, how to properly use and test with an IDE and other little, less "sexy" details that learning to code became manageable.
Some people find it hard because they are not interested enough to really take the time to understand it.
Others just don't have the mind for it, like how some don't have the body to dance or play sports at a professional level.
There are, indeed, some concepts that come naturally to only a handful of people (kernel development is hard for me; interesting, but hard), but I think the fundamentals are pretty easy to grasp for most of the mainstream languages.
You mentioned to contact you if anyone is interested in mentoring/being mentored but I couldn't find any email on your blog except the one for makersacademy...which is for something else?
Having a meaningful and interesting project to complete that can also grow with you helps a lot. I was fortunate enough to be paid as well.
When you need to get something done to complete the job it's a lot easier to force yourself to concentrate and learn. I can imagine if I didn't have that motivator I'd be too tempted to just leave features out if they were too difficult.
It's still hard, but it's getting easier. The open source movement and free resources like Github, EdX, Coursera, etc. are all making it much easier. The information is all out there on the internet and most of it is free. It's a matter of setting aside the time and digging into it.
I'm not a good programmer by anyone's standard yet, but I'm reaching the point where it's becoming a serious hobby for me. I audited my way through the first couple computer science courses (in Java) offered by my university, which posts all the lecture slides and homework online. Then I worked through the university's web programming course while I wrote an ad-hoc reporting web app for my employer in PHP. I just finished the two edX courses in Ruby on Rails and am writing a Rails app in my free time for practice. Now I am starting an iOS development course to learn Obj-C and the iOS SDK. Also planning to take online courses about databases, algorithms, and security soon. I have a LOT left to learn, but that's part of what motivates me.
Point is, though, if you want to learn programming, there has never been a better time. The availability of free and inexpensive learning resources is greater than it has ever been. As long as you invest the time and approach it with curiosity, determination, and patience, you will learn it.
29 comments
[ 4.5 ms ] story [ 88.8 ms ] threadBecause it's f*cking complicated!!!
Oh, I know why - their "self-esteem" has been carefully protected from reality throughout the years they spent being indoctrinated in the state school system.
I think anyone can learn to code, or learn maths, but there's no doubt that some folks are MUCH better predisposed to it. That said, some good tips in the article.
That said, I never did enjoy writing but always enjoyed programming, so I think an earlier commenter hit the nail on the head when he said it's down to having enough interest in a subject to learn things properly: http://news.ycombinator.com/item?id=4933004
I dropped out of college to learn to program, thought I could teach myself everything. The issue is that tutorials and books gloss over the theory.
It wasn't until I returned to college for a CS degree that my eyes were opened to what I was missing.
Why is this algorithm better than that algorithm? BigO... What does the compiler do with my code? PL... How does the code I write interact with the OS? What is concurrent vs parallel? amdahl's law...
why can for i ... for j... be better than for j for i
pass by value vs pass by reference which languages, when...
How many people use languages these days that require them to manage memory themselves?
Coding is hard because coders don't learn the theory of computing and the abstract concepts that extend beyond any particular language.
EOR.
What I've observed is that there are two types of learners. One set of learners starts from a set of instructions. These instruction sets are simple, enumerated lists. The learner executes the steps and looks at the outcome. As they advance, they might begin to explore deviations in the steps. Reasoning like, "What happens if I swap steps 2 and 3?"
The other type of learner cares less about the steps and more about the concepts behind the steps. They begin by asking, "Why do I do step 1" or "How does step 1 work?"
Everyone I've taken under my wing who engages in the enumerated list approach hits a wall at some point. When the complexity of the enumerated list extends beyond their ability to tweak inputs, they become frustrated, and ultimately give up.
The latter group tends to get further, but it's not a free pass to stardom. Many still hit a conceptual complexity wall where they fail to grasp some of the more abstract concepts.
The former group far outnumber the latter, in my experience. I'd posit that what makes learning to code so hard is that it is more accessible to a means of learning that fewer people possess.
Too few employers are willing to pay for learning and evaluation.
I have hit this in every subject I've studied where I wasn't really motivated to learn the material. The reason this happens is that you reach a point where suddenly all the basic concepts start supporting the follow-ons. If you never really learned the basics, you will be lost. For example this happened to me with foreign languages. I had no real interest in learning French, but a foreign language was required in school. The first year was easy: basic vocabulary, stock phrases, and simple rules of grammar. The second year was not too bad either. But I never really learned anything... I would cram before exams and get decent scores, then promptly forget the material. Third year, when you actually had to put it all together... I was sunk.
If you're studying something, and can't motivate yourself to really learn the basics, you can only go so far. If you're studying computer science because you heard the jobs pay well, but you don't really care about learning the first and second material, you will hit that "leap of difficulty" at some point.
I personally found: 1. Code imitation - coupled with understanding 2. Code reviews - of a next level programmer 3. Blogging/Q & A(Stackoverflow sort) 4. CONFIDENCE as important in becoming a better programmer.
I had to learn C in university and I applied for BA first and thought coding is for monkeys (What an arrogant prick I was...). I hated it, I didn't understand anything first but I struggled trough. At some point it made "click" and I loved it ever since.
The funny thing is, afterwards I was biased in believing coding is easy and it has been for me from the beginning. It took me a while to realize how hard it was for me to start.
Anybody here with a similar experience?
All kinds of mental talents can be helpful for learning to code, but tenacity is probably the most important. Better learning materials can be great, and they're getting better all the time, but they are still no substitute to an unshakable commitment to being a developer.
For my 12th birthday in about 1980, my grandparents heard I liked computers and bought me a college level textbook on microprocessors. I didn't understand a word of it when I first read it really. But I did read it, and re-read it, for a couple of years. And it's one of the key reasons I wasn't afraid of doing assembly language a while later when I got my first computer. The book was a terrible way to learn, and it was completely at the wrong skill level for me. But I was really into it and made up for my lack of capability with a tremendous commitment and huge amount of time, slurping up every bit of information on computers I could find.
You've only lost when you quit fighting.
That's actually not the correct answer. For most developers, it's not hard. Not only is it not hard, it's a joy to learn a language, or two, or eight. If this is a struggle, perhaps this is a barometer that you're on the wrong path.
I'm not saying coding should be limited to the elite. If you want to learn code because there's something burning inside of you, that's awesome. However, I'm thinking of the MBA founder who decided the startup thing was the ticket. They discover they need a developer, and that's expensive.
"Hey, this can't be that hard! I'll just learn to code!" I see this movement, and it's scary. Not scary because it's a threat to me. Scary because I'm a decent developer (been doing it sine 1998), and there's a lot of mean scary people who are smarter than me who want to break into code I've written. I can't imagine how insecure code from someone who wrote their first line 6 months ago. Learning is cool, we were all there. The idea that production apps are being launched based on this experience level definitely isn't cool. I might be totally off base here, but I feel like this is a rising trend. Crackers are going to have a field day with all the superduper.ly's out there.
It takes 3-5 years to get a marketing or management degree. Anyone who thinks they are going to learn to code in 3 months and build the next Instagram is so delusioned they make the most southern Baptist church look like a center for logical discourse.
A lot of people who want to learn to code jump into a language and as soon as they finish "Hello World", they go headlong into a full scale project. This is the main culprit behind the unhelpful "help" sections alluded to in the article. If you don't understand the basics, that inevitable bump in difficulty becomes insurmountable. It wasn't until after I went back and figured out basic algorithms, how to properly use and test with an IDE and other little, less "sexy" details that learning to code became manageable.
Others just don't have the mind for it, like how some don't have the body to dance or play sports at a professional level.
There are, indeed, some concepts that come naturally to only a handful of people (kernel development is hard for me; interesting, but hard), but I think the fundamentals are pretty easy to grasp for most of the mainstream languages.
Some concepts are just plain
You mentioned to contact you if anyone is interested in mentoring/being mentored but I couldn't find any email on your blog except the one for makersacademy...which is for something else?
When you need to get something done to complete the job it's a lot easier to force yourself to concentrate and learn. I can imagine if I didn't have that motivator I'd be too tempted to just leave features out if they were too difficult.
I'm not a good programmer by anyone's standard yet, but I'm reaching the point where it's becoming a serious hobby for me. I audited my way through the first couple computer science courses (in Java) offered by my university, which posts all the lecture slides and homework online. Then I worked through the university's web programming course while I wrote an ad-hoc reporting web app for my employer in PHP. I just finished the two edX courses in Ruby on Rails and am writing a Rails app in my free time for practice. Now I am starting an iOS development course to learn Obj-C and the iOS SDK. Also planning to take online courses about databases, algorithms, and security soon. I have a LOT left to learn, but that's part of what motivates me.
Point is, though, if you want to learn programming, there has never been a better time. The availability of free and inexpensive learning resources is greater than it has ever been. As long as you invest the time and approach it with curiosity, determination, and patience, you will learn it.