Live data from Hacker News

Is learning to program inherently hard?

computinged.wordpress.com

1–10 of 69 posts

Re: Is learning to program inherently hard?

#2
Is learning to ride a unicycle hard? It is if you don't have inherently good balance. Is linguistics hard? It is if you don't have a good associative memory. Is math hard? Is carving a wooden bowl on a lathe hard? Is pro-Hockey hard? Is sculpture hard? Metal working? Philosophy? Music?

The percentages of people with specific inherent skill sets will vary widely in society, so 'hard' is best defined as 'requiring a skill a smaller percentage of the population possess'. Good programming does require specific skills, but I don't see it as being any more difficult than other specialized tasks.

I don't find programming hard at all... perhaps that is because I started very young, perhaps it is just a 'natural' ability to understand and evaluate systems. To me it's second nature. However when I watch an artist form a mental image then extract it from a block of stone, or I watch my math PhD friend throw around set theory and abstract dimensions like cake recipes... I am fascinated.... and lost.

Hard is relative.

Re: Is learning to program inherently hard?

#4
Programming is hard, period. Knuth has noted that its so difficult for him that when he is programming he can't teach courses, and he's among the best programmers in history.

Jon Skeet wrote a blog on the topic: http://msmvps.com/blogs/jon_skeet/archive/2009/01/29/program...

Jon Skeet is right. Programming is hard, except the most trivial tasks. And anything that is not trivial is probably broken. But we're OK with things being a little broken, and we've made users bend to our will sufficiently now that we have pushed much of the cognitive load to the users.

Re: Is learning to program inherently hard?

#5
I think he got it spot on with the mental model stuff. People fail at programming because they've learned to always use plug-and-play formulas instead of properly understanding what's going on. This approach fails absolutely with programming. There are no shortcuts.

Re: Is learning to program inherently hard?

#6

Programming is hard, period. Knuth has noted that its so difficult for him that when he is programming he can't teach courses, and he's among the best programmers in history. Jon Skeet wrote a blog on the topic: http://msmvps.com/blogs/jon_skeet/archive/2009/01/29/program... Jon Skeet is right. Programming is hard, except the most trivial tasks. And anything that is not trivial is probably broken. But we're OK with t…

I will go ahead and claim, that even seemingly trivial programming tasks are astonishingly difficult.

http://www.cs.princeton.edu/introcs/42sort/

According to Knuth, the first binary search algorithm was published in 1946, but the first published binary search without bugs did not appear until 1962.

http://googleresearch.blogspot.com/2006/06/extra-extra-read-...

http://www.cs.princeton.edu/introcs/papers/bentley-binarysea...

Re: Is learning to program inherently hard?

#7
Learned to program when I was around five or six years old, by picking up a book of prewritten programs in BASIC for a Sinclair ZX80 (or ZX81? not sure), figuring out how they worked and writing my own.

I am not sure what the term "inherently hard" is supposed to mean in this context.

Re: Is learning to program inherently hard?

#8
post #5

I think he got it spot on with the mental model stuff. People fail at programming because they've learned to always use plug-and-play formulas instead of properly understanding what's going on. This approach fails absolutely with programming. There are no shortcuts.

I don't fully understand what's going on. However, as long as someone design the black box carefully, I can figure out what it can't and can do.

Re: Is learning to program inherently hard?

#9
Programming is like most things in life: hard if you have no affinity for it, much easier (but not necessarily easy) if you do.

I see programming to have a lot of parallels with being a combination mechanic and automotive engineer.

A mechanic fixes cars, diagnoses problems, tunes a car and so on. It's really a lot like (code) reading, testing, debugging and maintenance--all key programming skills.

An automotive engineer will actually a design a car, design and various components, model how it should work and so on. This is really program design and programming specifically.

The thing about programming is that involve perhaps the most tractable medium humans have ever used. It takes a long time to design and build a car. It still takes a long time to make significant changes to that car. Now compare that to software, which is easily changeable with a feedback loop that can be measured in as little as a few seconds (edit code, save, reload page in browser).

Of course some software has a longer feedback loop but at worst it tends to be in hours, possibly days. It's a different order of magnitude.

Cars can be adjusted within fairly tight limits (meaning you can make the engine more efficient or make the brakes work better or not at all but you can't easily make that car float or fly).

Is programming harder than being a mechanic and/or automotive engineer? Empirically I can't answer that question. I would be useless as a mechanic. Could I learn? Possibly. Would I be as good as those with a natural affinity? Absolutely not.

One thing I'll add is that the barrier to entry for programming is probably higher but this might simply be an issue of complexity.

Consider a car from 40-50 years ago. It wasn't that complicated. Now? Cars have dozens of computing units in them and qualified mechanics have to use computer systems to interface with them. So perhaps modern software is more like a modern car than a car from the 70s.

Now consider another discipline like medicine. Is medicine hard? It certainly requires a lot of knowledge. Part of many medical disciplines it appears involve a significant amount of rote learning. Bone names, nerves, diseases and so on.

Some have an affinity for rote learning and some don't. I know I don't.

The other part of medicine is the mental attitude required. Not everyone is psychologically capable of dealing with a patient who is dying or has the mental endurance to perform a 12 hour heart transplant. It's very exact.

But is it harder?

My own theory is that some people can become programmers and others can't. Some of the ones who can't sadly are employed as programmers.

Programming requires an extremely high level of abstract thought. I remember demonstrating to my sister how I used Splashtop on my iPad to connect to my PC at home to start it doing something. To her, it was for all intents and purposes magic (to paraphrase one of Arthur C. Clarke's laws).

To me--and anyone reading this--there's nothing magical about it. It's simply a system of concepts built on top of other concepts.

This also changes my thinking. I see (human) language much like a network protocol. Letters are merely agreed-upon symbols that, when combined, form sounds (most) humans are capable of making. Combine those sounds (or groups of letters) into words and you have a another layer of agreed-upon concepts (or definitions).

Network protocols work much the same way. Ultimately there is a physical layer where certain voltage differences equate to 1s and 0s. Once you have the concepts of transmitting bits, you arrange them into bytes. Certain bytes or byte sequences resolve to characters. Combine those characters and you have a message.

It's systems built on systems. Do non-programmers see language that way? Unless they're linguists, probably not.

So I guess my point is that programming (or anything for that matter) may simply look hard because the foundation in concepts simply isn't there. Whether or not someone can learn those concepts and whether or not that makes programming qualitatively hard is another matter.

Re: Is learning to program inherently hard?

#10
post #9

Programming is like most things in life: hard if you have no affinity for it, much easier (but not necessarily easy) if you do. I see programming to have a lot of parallels with being a combination mechanic and automotive engineer. A mechanic fixes cars, diagnoses problems, tunes a car and so on. It's really a lot like (code) reading, testing, debugging and maintenance--all key programming skills. An automotive engin…

What is affinity?

I just learned programming just like how I learn the artistic craft: Through sheer practice.

(Now, ironically, I actually make more money doing my lesser skill in art than I do in programming)

Post reply on HN