top | item 11933700

Stop saying learning to code is easy

148 points| david90 | 9 years ago |hanselman.com | reply

99 comments

order
[+] VeejayRampay|9 years ago|reply
I really feel like current salaries are too much to bear for honchos of the industry and that there's been a recent push to make it seem like "programming is easy" and "everybody can take up code". I agree that the learning process has been made much easier than it ever was before (MOOC, screencasts, collaborative learning, cornucopia of open source code available everywhere), but that's only the first step in the learning process.

That part (the one that leads to being able to produce code) has actually always been rather "easy". It's the next steps that are usually hard. Learning data structures, design, architecture, how to collaborate with coworkers, how to fix, debug and review code, mastering the associated tools (shell, git, regex, making a given editor your home and harnessing its power, etc).

From what I've observed with more junior developers that are usually coming through self-learning or accelerated programs, it's not the "code" that is hard, it's those following phases because in the end, they're what really matters.

Though, don't get me wrong, it's absolutely nice that we're pushing programming literacy and making it more accessible for everyone, I just feel like we should not be selling false hope.

[+] Joeri|9 years ago|reply
> I really feel like current salaries are too much to bear for honchos of the industry and that there's been a recent push to make it seem like "programming is easy" and "everybody can take up code".

Salaries are too high from the perspective of many executives because they have the programmers doing low-value work. Instead of carefully considering what merits building they just have them build everything and then see what sticks and what doesn't.

If programmers were paid like executives, they would only be asked to write code that made a clear difference towards a company's bottom line. Much thought would go into the decision-making and preparation process before code was written to make sure that both problem and solution were appropriate and well understood. You would have whole fields of lower-wage analysts whose job it was to prepare the work of the programmer. There would be much less code written, but the code that was written would be much more valuable.

[+] stdbrouw|9 years ago|reply
> Learning data structures, design, architecture, how to collaborate with coworkers, how to fix, debug and review code, mastering the associated tools (shell, git, regex, making a given editor your home and harnessing its power, etc).

I learned all of those things way after shipping my first usable and useful code. These things don't make the programming learning curve steeper, they just make it longer.

[+] Swizec|9 years ago|reply
There's a difference between being literate and a professional novelist.

That doesn't mean being literate isn't valuable.

[+] jaggederest|9 years ago|reply
The problem that I see is the imprecision of english when it comes to the word "hard".

There are many different kinds of hard. There's hard like "I have to put effort into it", there's hard like "if you were not born being able to do it, you can't do it", and there's hard like "even people who can do it are only capable at their absolute best moments".

So the issue is not "Is programming difficult?" - clearly any learned skill is difficult to bring to an expert level.

The question I see people asking is, "Can the average person with diligence and application ever learn to program well?", and the answer is obviously yes, they can. It's not "hard" like running a <3:50 mile is "hard".

It's also not hard like "Can you taste PTC or distinguish red and green", in that you either "are born with it" or aren't, and find it effortless if you are capable.

So many people that I've met assume that they're fundamentally incapable of understanding algorithmic thought, and that's very sad. They don't need to be Kernighan or Torvalds in order to gain value from learning some programming skills.

[+] rubber_duck|9 years ago|reply
I think "learning to code" is more ambiguous. I have a designer friend getting in to web design - I've helped him out pick up some jQuery - he learned the stuff that was useful to him pretty fast. Is he a programmer ? No. Can he write code ? Yes.

So yea writing code is easy, copy-paste and replace the stuff that seems relevant to you, especially when you have a quick iteration method like a REPL.

Control flow might take a while to fully grasp but still it's not hard to understand, but takes practice to get comfortable with.

[+] benaadams|9 years ago|reply
> The problem that I see is the imprecision of english when it comes to the word "hard".

Learning to code is NP-Hard ?

[+] danbruc|9 years ago|reply
Learning to write code is not too hard, maybe not the easiest thing but really not too hard. Writing good code - readable, maintainable, secure code with few bugs - on the other hand is really hard. The gap between a non-programmer and a junior developer is way narrower than the gap between a junior developer and a good senior developer.

And something that I am missing in most of those articles is that writing code is actually the easy part of the job, the hard part is talking to the customer and figuring out what they actually want you to do and then keep up with them changing their mind every four weeks and still somehow manage to ship something that roughly does what it currently is supposed to do.

[+] icehawk219|9 years ago|reply
I agree with this but one other side affect of lowering the barrier to entry (which is a good thing I completely support) is it also makes it easier for people who genuinely don't care about that to get into the game. I've met so many devs who absolutely could write readable, maintainable, secure code with few bugs (while working in places where higher ups supported it and allowed for the time for it). They just didn't give a crap. Those are the ones that drive me up the wall. I have no problem taking time out of my day to help a junior developer learn those things. I'll gladly spend my work day helping someone and then make up the time in the evening but when I meet someone who already has the know-how and just doesn't care I want to scream at them.
[+] x5n1|9 years ago|reply
The hard part, as you describe it, is usually not the job of coders. It's the job of project managers. In lesser organization the coders are doing work that management is suppose to be doing, so they might be doing multiple roles which makes their job much harder.
[+] franciscop|9 years ago|reply
Totally agree. I have taught to some friends and my gf (pointing that it's people that I care about). What I tell them is that there's easy parts and difficult parts, and that things like SUM() in excel is a basic way of programming.

Then I teach them about html+css but starting only on the "easy-ish" part. So using my own library [1] for things like ".row" where you'd need either floats+negative margins or flexbox. Teaching them about images, images sizes (should be set at 100% in many situations), colors, backgrounds, paragraphs and links. That really motivates them.

Then some day they will need more advanced things, but if they can make a layout with the content then they become really motivated since they can see their programming real time.

I have to do this mainly because some people hate "irrationally" maths, so if I taught the same way I started learning --calculating primes-- then they'd be bored to death. Instead I like choosing something they are personally connected: what website do you like? Okay, let's do something similar...

I've even tried doing a small course for free [2], but so far it's not been really effective with those people I'm teaching, but some other friends asked me things about it :)

[1] http://picnicss.com/ [2] https://en.libre.university/subject/4kitSFzUe

[+] garrettgrimsley|9 years ago|reply
You aren't teaching programming, you're teaching web design. Programming doesn't have to start with calculating primes, but it does have to be actual programming. Maybe try introducing the to something like Scratch or Logo.
[+] asenna|9 years ago|reply
> but so far it's not been really effective with those people I'm teaching

Interesting. The resource looks like a good start. Could you give some more detail on why you think it was not effective?

I too am thinking of teaching web design and development basics to my gf and a few other people who are interested. Do you have any tips / more resources to look at which would help?

[+] vinceguidry|9 years ago|reply
The main thing that makes learning how to code difficult is the sheer amount of technologies you need to learn before you feel like you can make real progress. Each individual technology isn't by itself particularly difficult, with a few exceptions; (looking at you git) but also aren't particularly useful by themselves.

You either have to be willing to learn a simpler stack and pick up skills gradually, or deal with the intense frustration of drinking from the firehose right out the gate.

When I was in high school, I went from doing BASIC to elementary web stuff to trying to learn C++. (I didn't have practically anybody who knew how to code to guide me) I gave up and didn't go back to coding for some ten years, sticking to just being a power user.

If I were trying to teach someone to code nowadays, I wouldn't really know where to begin. People want instant gratification without the frustration. You can't have both. I've had limited success, but only after finally convincing them that they have to be patient.

[+] owenwil|9 years ago|reply
I absolutely concurr. The hardest thing for me has simply been connecting the dots. Suddenly needing to understand Git, or how to configure Apache, just to learn PHP. THere are so many bits that aren't explained to you, all the while you're jumping into the deep end with a language. It's hard to hang in there, but it's worth it – however many don't.
[+] bigger_cheese|9 years ago|reply
I think the problem is trying to teach 'a technology' if you want to teach someone to code treat it like math - teach algorithms. I'm talking about the basics Conditional statements, Iteration and Boolean logic.

Hell you don't even need a programming language - you could teach someone to code by drawing flow charts on a blackboard.

"if statements" and "For loops" those are the tools everything is built on. Want to teach someone to code start there not with a "Python tutorial".

[+] tikhonj|9 years ago|reply
It feels like you could write a perfectly symmetrical article—just as convincing—in the opposite direction. We've been telling people "math is hard" for years and look where that's gotten us. People seem do a better job of learning abstract algebra if you trick them into not thinking it's difficult and arcane.

I'm not saying that one view or the other is right. Rather, I'm just saying that it's not obvious which is better or even how much it matters. Posts like this—which basically do say "it's obvious that..." and little more—aren't contributing anything substantial.

[+] sgeisenh|9 years ago|reply
I'm not sure I agree. The title doesn't match the content. The title contends that learning to code is hard, and I've never heard anybody disagree, learning to code is difficult. But then the content of the post contends that coding itself is hard. And I disagree. Programming difficulty is a function of a huge number of factors. Among which familiarity and experience are paramount. If you're writing a program that's familiar to one you've written before, programming is easy. If you're writing a complex new system with little to no precedent, programming is hard. There isn't a blanket statement that can be made about the difficulty of programming, it is all contextual.
[+] caffed|9 years ago|reply
I am going to support Cory Koski's comment on your post:

I don't know what your intentions are, but you have a post titled "Stop saying learning to code is easy" and a photo of three women with laptops. Are you trying to make a correlation of women being glib about the difficulty of software development/programming?

[+] shanselman|9 years ago|reply
The three young women are programmers sitting in the NYC Microsoft office. They are my friends and the image is part of the WoCTechChat CC Image collection. There is no correlation. Flip a few coins and it could have been three men or a combination. Sorry if it felt correlated, it's not.
[+] yborg|9 years ago|reply
I don't know why the parent post is even trending on HN, it's content-less trivial fluff, but I also facepalmed at the inclusion of the picture. I'm not a supporter of the idea of the "patriarchy" meme, but putting this picture on a post like that certainly implies at least an unconscious association in this guy's mind. Good thing he's a "former professor".
[+] codingdave|9 years ago|reply
I work mostly with people teaching kids to code, and for our goals, it is easy. We aren't trying to teach them how to write the most elegant and efficient code... we are trying to get them to understand basic logic and building blocks. We are teaching them how to solve problems, and debug their work. And we are teaching them basic computer literacy.

If they are good at it and go deeper into software development or computer science, then it may get hard. But it is a pessimistic view to look for reasons why something will be hard, and pontificate on those problems. Why not just help people take some simple steps, get a few successes under their belts, and decide for themselves if they want to go into deeper more difficult waters.

[+] Waterluvian|9 years ago|reply
Coding is like driving. Even someone from a developing nation who has never seen it before can learn it. But we aren't all professional race car drivers.

It is easy. And it is very very hard.

[+] kamaal|9 years ago|reply
My dad was a trailer/truck/bus/cab driver throughout his life. He is sort of retired now, but when I talked to him about Uber and every tom dick and harry now being able to drive a taxi, he just laughed the issue aside.

Sure some one can drive and make a few $$'s a day. But to make that considerable source of income to send kids to a good education, to buy your self a home, a retirement and a decent income to retire one to cover all your expenses you have to do a heck lot more. That is when you realize the taxi license was likely least of your worries. You'd have to wake up at 3 am in the morning, suffer rude passengers, wash your car often, have the discipline to spectrum all those things that being successful in profession demands.

At the end you really come to the conclusion that what stopped you was not the lack of coding classes at college or government bureaucracy or union or any of that stuff. The true reason is its hard, and most people simply aren't resourceful enough to see through the end.

[+] draugadrotten|9 years ago|reply
Coding is like singing. Even someone from a developing nation who has never heard it before can learn it. But we aren't all professional opera singers. It is easy. And it is very very hard.
[+] prodigal_erik|9 years ago|reply
I'm in favor of self-exclusion. Anyone who holds interviews should be aware that there are way too many duds in the industry for no good reason. I want to work with the obsessives who tell themselves "no, there must be some right way to do this" rather than relying on some strange kind of cheerleading that didn't exist when I started.
[+] Philipp__|9 years ago|reply
Sincerely I think it would be the best to meet somewhere in the middle, between Scott's and symmetrical but opposite opinion on this matter.

I am student, and freelance developer. And I ask myself a lot of times, what is the code that we write? Lines aren't clear like in electronics (I studied EE for 2 years, after which I pivoted to CS), where you got rules, theorems, which you use to analyze and build things. Code is a live thing. It grows, it changes, it lives and it dies. And the most paradoxical thing of all is that computers are pretty "dead" and dumb things, bunch of registers, ICs and transistors. (I am oversimplifying things here to prove my point better).

The way we approach writing code always changes, code can be pretty personal thing, you can have your own style (like handwriting). And possibilities are almost endless now!

So I think people in general should stop treating things with black or white principle. I feel that is very immature. Especially not coding.

Software development is single most weirdest and interesting things that happened to me. It makes me scary and enthusiastic at the same time. It is easy and hard at the same time. And I think it is really stupid to try to ascribe any of those exclusive attributes. But everyone has it's own opinion. And that is what makes dev culture and community so interesting in the end.

[+] jokoon|9 years ago|reply
I learned C/C++ by myself with "C++ for dummies". I was already taught assembly at school at a very short class. I learned more from linux and C through a linux fanboy, and I seriously learned industrial C++ at school, but I already knew most of the basics.

I was obsessed about learning how to code because I always played a lot of video games and loved electronics.

I don't have a degree, am chronically unemployed. I admit that learning code is really about understanding the details. Having a taste for computers and math is a huge advantage. If you don't, you will quickly hate it and only learn it for a job, but not for passion.

I agree that code looks lame and is really not accessible, while most people who need it, can't always afford to work with a programmer. There needs to be solutions like MIT's scratch or anything that is more intuitive than textual syntax. It's amazing what some people can manage to do with excel.

[+] shafaq|9 years ago|reply
Why everyone is being pushed to learn to code in the first place? The reason behind 'coding is easy' is that industry needs lots of programmers? Really?
[+] gaius|9 years ago|reply
If there really was a shortage, there would be no ageism. There is only a shortage of very junior people willing to be exploited because they don't know any better. That exploitation starts on day one of a very expensive"boot camp", continues with 80 hour weeks for 0.01% equity in their first job, then they burn out...
[+] krapp|9 years ago|reply
I think in part to flood the market with low quality applicants, and drive salaries down.
[+] prodmerc|9 years ago|reply
Learning to fix electronics is easy. Learning to fix your car is easy. Just open up the enclosure/hood and... do stuff :D
[+] matchagaucho|9 years ago|reply
Playing piano is hard, but teachers that keep the learning experience fun see much lower drop-out rates.

Teaching, mentoring, and onboarding students to enjoy coding is the real hard work.

[+] gingerrr|9 years ago|reply
My personal variant has always been "learning to code is easy, you just have to be okay with feeling completely stupid for a while until it clicks."

It's a way to encourage while being up front with the amount of time and mental toil learning new ways of thinking and expressing your ideas takes.

It also encourages self-selection, as the few people who took it to heart are some of the best devs I know now, they saw the challenge and remained undaunted.

[+] projektir|9 years ago|reply
Interesting. I tend to learn better when I don't perceive something as "hard", as that creates a mental block of sorts for me. Acquiring proficiency requires significant amounts of time investment + effort, but it would seem "hard" should denote something above that.

I tend to prefer terms like "tractable", where it's less about whether the given problem is "easy" or "hard", and more about whether I can find a productive way to reason about the problem. An easy subject can be made intractable by the wrong kind of presentation. Most subjects that are very /new/ to a given person may be intractable on the onset. Some subjects, ones that I would call truly "hard", do not become tractable for a very long time.

So I don't know if I'd call software development hard, but it's still a new and unfamiliar thing to a lot of people, and it can be quite intractable at various times, which is basically what "bad documentation" means.

[+] Mandatum|9 years ago|reply
I think learning to code _is_ easy.

I've recently pointed a friend towards FreeCodeCamp, he's never tried development but was asking about it (previous non-tech related jobs) so I pointed him to the website.

Yesterday he must have spent 8 hours doing tutorials, occasionally asking questions and has started building his first website. He's beginning to pick up the basic building blocks of programming, not for loops and if blocks, but data structures, debugging (Chrome is amazing), etc.

I think the hardest part of learning to code is choosing a language and deciding what to build. The rest is Stack Overflow and online tutorials. Oh, and a whole lot of time.

Sure to become an "Expert" you'll need to learn about a vast range of things that are not code, but affect code - like security, best practices, readability and maintainability, different stacks, etc. But getting your foot in the door with the basics is pretty easy.

[+] brianwawok|9 years ago|reply
So this applies to anything.

I helped my friend learn to paint. Bought him a canvas and 4 brushes and some paint. He watched YouTube all day yesterday . I think he painted this circle thing that looked like a sun. Painting isn't hard.