top | item 7186686

Don't Learn to Code, Learn to Program – But Come Back in 10 Years

108 points| dirtyvagabond | 12 years ago |johnkurkowski.com | reply

92 comments

order
[+] jimbokun|12 years ago|reply
My paraphrase of this article:

"All of the blood sweat and tears poured into making programming more productive over the years just isn't good enough. No, I haven't done anything, personally, to improve the situation. My plan is to continue bitching about how things aren't good enough until...well, indefinitely, because bitching about other people's efforts is much easier than doing the hard work of solving a challenging problem myself."

Is that too harsh? I don't see a single concrete, actionable proposal in there, let alone anything the author has personally done to fix the sorry state of programming.

I also think it's a huge disservice for him to dissuade his friends from programming until some state of nirvana is reached in programming tools. There are some hurdles to overcome, but a little bit of programming skill can greatly amplify the reach, scope and influence of non-programming talents.

[+] grovulent|12 years ago|reply
You got my upvote. I can't understand the point of view expressed in this article at all. I particularly can't understand the claim that the accessibility hasn't improved.

Yesterday I implemented a couple of different machine learning algorithms on some test data using python and sklearn. Now, I'm just noob - but there is no way I could have that quickly implemented a machine learning algo on some data 10 years ago. It would have literally taken me months to do the equivalent thing rolling everything myself. And even then my code would have probably taken several days to run for any dataset of any reasonable size because I wouldn't have a clue how to build numpy's optimised data arrays etc...

Plus all this code is just given away... for free... no questions asked. It's so unbelievably awesome it boggles my mind.

So yeah - I don't get why this author is giving all that it's due. It really deserves a crap tonne of due. y'know?

[+] nevir|12 years ago|reply
I read it as: "programming could be so much better; I have a glimpse of what it could be like, but don't know how to get there."
[+] zedshaw|12 years ago|reply
This is an entirely pointless false dichotomy. "Coding" and "Programming" are just synonyms of the same damn thing: make a turing machine do stuff. I have no idea why people are suddenly trying to make a false distinction when there was none for decades and decades, but frankly it's stupid. My only thought is there's a bunch of butt sore guys who are upset that learning to make a computer do stuff is nothing special and are now trying to find a new way to differentiate themselves with the moniker "Programmer" and looking to shit on anyone who's "Just A Coder".

So I propose a new term. Turingulate: verb. Making a turing machine do stuff. Typing Python into a file and running it with python? Turingulated! Running a PD graph to create a fuzz pedal? Turingulating! Using Max/SP? Turingulating! Programming because you're so special? Turingulate. Coding to .. uh code some ... uh code... which isn't programming? Turingulator!

So stupid.

[+] sjs|12 years ago|reply
Colloquially they are synonyms. Especially amongst people who don't make software. It's not derogatory and not worth getting bent out of shape about.

BUT ... (Bet you saw this coming)

Coders turn detailed specs into code. No real thought required.

Programmers, or software developers, design systems and code them themselves.

That's the distinction I make anyway. I've seen coders at some workplaces. It's a dreary job and I would never do it.

[+] mogui|12 years ago|reply
I cannot agree more. bored of those nonsense terms distinction if you see on linkedin or the likes everyone has his own software architect, wargods of the mighty developing...

Turingulators!

A Programming Motherfucker

[+] etler|12 years ago|reply
I notice this kind of article a lot these days. I feel like it's trying to come up with something to write out of nothing.
[+] j_baker|12 years ago|reply
Hold on a second. OOP, markup, APIs, and HTML/CSS/JS are snake oil, while visual programming isn't? Say what you will about the former technologies, but they're being used for productive purposes. Visual programming is vaporware that someone tries to build every 5 years or so to no effect. Functional programming has much the same challenge, but it's getting integrated into mainstream languages. Otherwise, it would likely still be a research toy as well.
[+] Jtsummers|12 years ago|reply
http://en.wikipedia.org/wiki/LabVIEW

I believe that's an example of visual/graphical programming, it's fairly mainstream in some areas and not vaporware.

Re: Rest of comment - Filtered site, I'll read it at home.

[+] codygman|12 years ago|reply
I would make the argument that purely functional programming languages have already seen success and are seeing more as time goes on.
[+] john_b|12 years ago|reply
> "Programming is a notion to extend human capability, by offloading humanly-infeasible work onto a machine. It is the promise of an amplified knowledge worker. This would be worthy to learn."

With this (correct) notion the author continues until he decides that

> "Meanwhile there are few souls looking to evolve text code into something more humanly intuitive. For example something you can touch, you don’t have to read, or that tells you what the computer is thinking, so you don’t have to think like a computer yourself."

I can't help but feel that what the author really wants is some futuristic kind of AI assistant. Decades of programming progress has resulted in numerous abstractions piled on top of one another in order to minimize the amount of "thinking like a computer" that you have to do. But all abstractions are leaky and when you encounter those leaks you will inevitably have to be able to think like the machine you are trying to communicate with.

Why is it acceptable to say that effective communication with people depends on being able to think like the person you're talking to, but demand that communication with a far more different and limited machine should never require you to compromise on your preferred thought patterns? This is the fundamental fallacy of the natural language programming advocates. They want to use another entity to do things for them but demand all communication with that entity be in their preferred language, on their own terms.

[+] dllthomas|12 years ago|reply
Moreover, I'd just jump in here to point out that effective communication with people quite frequently involves "text code".
[+] ForHackernews|12 years ago|reply
> Why is it acceptable to say that effective communication with people depends on being able to think like the person you're talking to, but demand that communication with a far more different and limited machine should never require you to compromise on your preferred thought patterns?

Other people are sentient beings with their own personalities, dreams, desires, and attitudes. Recognition of our shared humanity necessitates some level of compromise, respect, and accommodation when dealing with other individuals.

In contrast, computers are unfeeling machines. We made them, and within the limits of physics, math, and our own creative powers, we can make them do whatever we wish. Why shouldn't we strive to make them as accommodating as possible? Why shouldn't I try to create a machine that intuitively corrects my mechanical errors to represent the shape of my ideas?

[+] overgard|12 years ago|reply
Just because something is hard doesn't mean it's broken. Nobody would say that say, advanced mathematics is broken because the layman doesn't get it.

My bullshit detector notes that he talks very generally about "knowledge workers leveraging machines". The problem with the phrase "knowledge worker" is it often means "person who sends lots of emails". You don't need to be a programmer to send lots of emails.

Real "knowledge workers", like, the kind of people that actually are working to extend human knowledge and need computers to do it, largely do know how to program to some degree (IE, scientists and mathematicians and so on). A lot of it isn't "professional" grade, but it works well enough for them and it keeps getting better.

Also a tangent: but I'm sick of the whole "coding is literacy" nonsense. Not everyone needs to code. Literacy unlocks centuries worth of knowledge in any domain you want, from contemporary thinkers to people who are long dead. Coding lets you tell a computer how to do specialized things. It's not even remotely comparable.

[+] midas007|12 years ago|reply
Exactly. Life is hard. Business is hard. Coding doesn't eliminate work, it just enables new kinds of work. And, it's like coding an app that makes money isn't completely effortless but it is obviously possible.

Coding != literacy. In fact, not everyone needs to go to college either and can still make a living. Mike Rowe's trades-awareness work is fantastic: http://profoundlydisconnected.com/ There are many trades where the average age is 50 because no one wants to be seen as blue collar. Some of these are high income opportunities that are being missed because they're not mainstream fashionable.

[+] wwweston|12 years ago|reply
> Nobody would say that say, advanced mathematics is broken because the layman doesn't get it.

We do make math more tractable and accessible over time with various reformulations and new abstractions and conceptual tools, though. You're probably using arabic numerals when you do arithmetic, and there are good reasons for that.

(Though heaven knows, if I'm likely to run across an abacist anywhere in this sort of discussion, it's probably here. :)

[+] ozten|12 years ago|reply
Agreed.

Woodworking is hard. The more you know and the better your toolchain, the better your projects and experience.

At one time, woodworking was incredibly relevant, so there was a good payoff for dabbling in it and you'd have a few tools and get "okay" or "pretty good" without becoming a professional wood worker.

Today wood working is irrelevant, so very few learn it.

So it is with programming.

[+] joesmo|12 years ago|reply
I don't think we have to worry about "everyone" or even a small percentage thereof learning how to code. They won't. It's not that they can't, but it takes more than a couple of hours writing "Hello World" to do anything substantial and most people are not willing to put in the time, day after day, to learn anything substantial.

That being said, I can't imagine anything more human and more powerful than text. If I want to give instructions to a _human_, the best way I know of is to write them down as clearly as possible. If this works with a complex person, why would it not work with an incredibly simple (from an abstract point of view, not implementation) microprocessor. After all, all processors have an extremely limited set of instructions (even CISC ones).

This desire for something that is not text seems misplaced. After all, text is (IMO) certainly better than pairs of numbers indicating operation and data. Writing is one of the greatest human achievements. To dismiss it in favor of touch or something graphically visual is to disregard its power and superiority to both touch and visual systems of communication.

When designing a system, if I am able to give it commands in English (or any other language), this would be vastly superior to anything visual or touch based that I can think of or that the article specifies (or rather doesn't). To take the whole system of a language like English with its complex idea-expression engine and its vast array of words (1 million++) and discard it is ridiculous. Now, we are not currently programming in English, or anything even remotely close (though many languages' grammar follows from natural language somewhat), but I do believe this is, and has been for decades, a goal that may one day be achievable. This is desirable as humans are naturally inclined towards language and those who practice it can be incredibly good communicators (programmers of reality).

[+] VLM|12 years ago|reply
"It's not that they can't"

No, they really can't. Garbage in garbage out. Can't implement an algorithm or follow a protocol unless you understand it, and the world is full of people who literally don't understand how a thermostat works, how to drive safely, or how to implement the NRAs three basic rules of gun safety.

Note that our shared enjoyment of text as per your 3rd paragraph is only politically correct WRT to programming... if you dare to suggest text might also be the superior user interface, the dogpile will begin. Which is sad. Closed minds are always weaker than open minds...

Lets play a game, I'm thinking of a well designed, expressive, long lived programming language developed by a linguist... Its dumped on here at HN for no logical reason, just the usual womens fashion fad explanations. I suspect this would happen to any "English like" future programming language.

[+] ef4|12 years ago|reply
The author is frustrated by a real and frustrating problem, but he's missing why things are this way.

The "triumvirate of HTML/CSS/Javascript" isn't just a technology. It's a social consensus. It's not actually "designed" in a meaningful sense -- it's evolved.

And things pretty much need to be this way, unless you want to be an island. Even if you have the ambition and the resources to throw it all away and "do it right" from scratch, by the time you finish the world will have moved on and your perfect gem will be obsolete. Real technology is always iterative.

The same constraints apply to programming languages in general, because they truly are languages that human beings use for thinking. Languages and their associated cultures can only evolve so fast. It's not really a technical issue, it's a social issue.

The author's assertion that our "arcane" interfaces persist out of a kind of perverse pride just doesn't ring true to my experience. Programmers cry tears of joy when they get to throw away something old and arcane because they don't need it anymore. And his assumption that visual programming will necessarily be better than textual programming is completely unproven.

Anyone who could actually make programming easy would reap vast wealth. The incentive is there. If it's really a no-brainer to build visual programming tools, well, where are they? There must be something harder about it than you think if we're still waiting.

[+] analog31|12 years ago|reply
An interesting thought about evolution is that text-based programming languages are exquisitely evolve-able, because the technology and effort to evolve a language or create a new one aren't too far out of our reach. If you don't care too much about efficiency, you can create a new language from an old one, and pass it around for others to try out.

This may be why there are 100's of text based languages, but I can think of only one graphical language -- LabVIEW -- in widespread use. LabVIEW requires a monumental organization to maintain. Adding a structural feature to the language, requires changing the entire GUI, menus, and so forth.

I suspect that if LabVIEW came out with a text based option for dataflow programming with support for their massive libraries, folks would abandon the graphical interface.

Maybe graphical isn't always better. Maybe text is really the best way to express programs after all. We could wait for programming to become "intuitive," or learn to develop our intuitions.

An anecdote about graphical systems. When I read tutorials for Windows, it's usually a lot of text interspersed with pictures of windows and dialogs. Even videos. Walking someone through a process over the phone is excruciating.

The same process using Linux: Open the terminal and enter this text.

In fact, Windows tutorials are starting to use: Press the start button and enter some text. I find the device manager by entering "device manager" into the start button menu, not by following an "intuitive" GUI.

[+] bestrapperalive|12 years ago|reply
"A relief from the unintuitive, unscalable, unfounded snake oils like OOP, markup, APIs, or the triumvirate of HTML/CSS/JS. As if these technologies are the best we can do."

At first I was mad. Then I read the above quote and everything clicked into place. This article is hilarious and I love every shrill, indignant, purposefully absurd word of it.

[+] angersock|12 years ago|reply
Probably the biggest bit:

"Can’t I just make a website?"

That type of question is where a lot of things go wrong. Newbies ask that because they don't have the experience to break it into smaller parts, experienced people get tripped up because they can't see past the "well, what type of website doing what?"--all the while the question is "what would you use it for?".

It's a bad question, because the asker doesn't know enough to ask a useful one. Our job, then, is to help them learn how to ask the right question.

[+] kamaal|12 years ago|reply
There is no point in teaching something to people they don't like doing. Its a bit like forcing painting or sketching on people who just don't like doing it. A lot of schools do it, and kids who don't like painting or sketching do it real bad and become the object of ridicule.

Programming et al has a meta science its called 'making', 'tinkering' or 'hacking' or whatever you call it. If there are people who don't have a taste for it, teaching them sorting algorithms is as boring as learning math. Now common people are one thing, most people who join our industry as programmers discover they just want to do something else and go down the managerial stream.

Programming isn't for every one, just like building houses, cars, dams, or an electric grid isn't for every one. In all those disciplines common patterns of problem solution and general science are at play. Chances are if you like chasing a difficult bug and fixing it, you will also like repairing a car engine, or fixing your TV.

I have an elder cousin who runs a shoe shop for a living, he tried very hard to learn programming during the dot com boom era. He gave up in like six months. He just realized that procedurally learning something only because, every one is just doesn't work out, the problem isn't just programming. If you don't like solving problems and are not good at problem identification and opportunity identification, it gets really really boring at one point. He likes to sell things and is exceptionally good at that. Building things is just not for him. And there is nothing wrong about it.

The biggest problem with 'teach every one to code' is you have to first ask 'Do they want to learn coding?'.

[+] opnitro|12 years ago|reply
The issue with every Visual programming language I have used is that while it is easier to learn for beginners, it is almost always faster to type once you start to understand programming.
[+] cliveowen|12 years ago|reply
I don't think programming should be mainstream, I think software should simple and intuitive enough to let anyone get work done without having to know how to write code.
[+] xradionut|12 years ago|reply
I agree with the author in regards to coding web sites. It's not enough to know a just a few languages, there's a whole frickin' vocabulary of crap piled on layers of services and frameworks frosted by the JS flavor of the week.

Or just configuration. Everybody wants to reinvent Make and they all do it wrong...

[+] clavalle|12 years ago|reply
There is a reason we speak and write words to communicate complex ideas rather than hold up pictures. Words are powerful and flexible. They are not going away.
[+] mathattack|12 years ago|reply
When I saw the title, I thought it was, "Come back after you practiced for 10 years" which doesn't help much.

I used to think the solution was better interfaces, or making programming more accessible to the lay person. I get less sure of this over time. It seems like what we've gained in language ease of use (Python versus C) we've given back in environmental complexity. The net is better productivity for programmers, and more people crossing the divide (CS programs growing by leaps and bounds) but we're far from being there for the Everyperson. I don't see this changing in 10 years without increasing the rigor and logic requirements of our entire educational system.

[+] jaybill|12 years ago|reply
The author of the article wrote it using words. He didn't make a video or draw a picture, because words were the best way for him to communicate with other humans. For some reason, he wants a different way to communicate with machines, one that is inherently not the way humans communicate with each other.

I also agree with what others have said, that this is nothing but a bitch fest with nothing actionable other than we ought to be creating visual programming tools no one wants or needs instead of doing actual work. Sure, buddy. I'll get right on that.

[+] rdudek|12 years ago|reply
Man, people are so overly sensitive... it's almost like someone is trying to promote job security.
[+] zenbowman|12 years ago|reply
I don't the author understands programming if he sees object-oriented programming as being in the same bucket as HTML/CSS/JS. OOP is a way to deconstruct problems, just like functional programming, and their beginnings are based on very similar principles.

Any language that fully accepts the object-oriented paradigm lends itself very naturally to functional programming, and vice-versa.

[+] nbouscal|12 years ago|reply
Uh. What? Fully accepting the object-oriented paradigm does not make a language any more likely to properly isolate state and side effects[1], any more likely to have immutability as a default assumption, or any more likely in any other way to encourage referential transparency. As referential transparency is the essence of functional programming, this makes your claim very confusing.

[1] Following OOP design patterns makes a given program more likely to properly isolate state, but this is by no means a virtue of OOP languages.

[+] reyan|12 years ago|reply
I think the author should read Fred Brooks's "No Silver Bullet". Many of his arguments are still valid after 28 years. "There is no single development, in either technology or in management technique, that by itself promises even one order-of-magnitude improvement in productivity, in reliability, in simplicity."
[+] slacka|12 years ago|reply
"No Silver Bullet" reminds me of the physicists at turn of century claiming that Newtonian physics held all of the answers. He blames the issues in software engineering on bad programmers, instead of questioning his field. His narrow minded, defeatist arguments fail to recognize the full potential of computer science. I don't buy his argument that Java or JavaScript have eliminated most of the accidental complexity in programming. It's like Von Neumann claiming, “I don’t see why anybody would need anything other than machine code.

Computer Science is still in its infancy. We haven't reached the full potential of Von Neumann architecture, let alone the dozens of non-Von Neumann systems that have been largely ignored by academia. Recent advances in neuroscience may open up a whole new model for information processing, such as IBM's SyNAPSE project.[1] Have you watched Bret Victor's, "The Future of Programming"?[2] He does a wonderful job of countering many of Fred Brooks's points.

[1] https://www.research.ibm.com/cognitive-computing/neurosynapt...

[2] http://worrydream.com/dbx/

[+] Aqueous|12 years ago|reply
I think the reason visual programming hasn't taken off is there is a very real difference between what you can express with language and what you can express visually. Images don't really contain determinate, precise statements or propositions the same way that written or spoken word does. In contrast language can express any thought, no matter how recursive or abstract, effortlessly. For the narrow domain of programming - not typesetting, not rendering and manipulating images - the text editor happens to be an extremely very powerful tool that allows us to tell the computer exactly what we want it to do. It hasn't been replaced because it hasn't needed to be - it is simply the most powerful tool in which to write language.

The other reason visual programming hasn't taken off is because programmers aren't visually oriented, right-brained, intuitive people. Exceptions to this rule abound, but I am certainly not one of them, and neither are many programmers I've known. They've tended to be left brained, linear, linguistic, rational-over-intuitive sort of people - which is why we pick up computer languages so quickly, and it's also why we like typing code into a text editor instead of drawing our program on screen. I know that functionality isn't lateralized to easily and this is an oversimplification - but there does seem to be a dispositional difference between those who are attracted to programming and those who aren't.

But this'll probably change, as everything does. As the author notes FP and lambda calculus have been around since the beginning of computer science as a field and they are just now starting to get mainstream traction. So, maybe, in about 20 years visual programming tools will start to be mature enough to applied to any arbitrary problem., and a powerful visual language will develop that attracts enough visually-oriented people to change or revolutionize the field. But we can't put the chicken before the egg - the tooling needs to mature enough to cause this network effect to occur.

[+] collyw|12 years ago|reply
I would say I am pretty visual. I like to draw ER diagrams of database design so I can see whats going on. I usually have a visual representation of the tables in my head with positions when I am thinking of queries. The tables stay in the same position (probably based o the ER diagram I drew ages ago).