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.
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.
I think that is part of the problem. The outside world sees these as equal. While after 10 years in the industry I can see the difference between someone who can write a script that will get the job done (for the time being), and someone who can design / write decent code that you expect to be working a year or two later.
Turingulators!
A Programming Motherfucker
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.
Or in summary I've seen large complicated Labview that's totally write once read never.
You might be interested in screenshots from GNURadio. Same effect. Spaghetti bowl of a schematic where a plain text version would be a lot clearer. Google for a simple WBFM radio with squelch and AFC aka your $5 walkman broadcast radio, and you get something that looks like its launching the space shuttle.
[1]:http://zone.ni.com/reference/en-XX/help/371361K-01/lvconcept...
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.
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.
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. :)
People who think that programming is not dramatically easier today than ten years ago just have a short memory. Or they're 25 years old...
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.
"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.
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?
The blog felt like it was saying "shut up till you do something better" where it should have said "Imagine how cool it would be to do something better".
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.
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?
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).
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.
I agree, text (reading and writing) is definitely a dying art, especially in America, although to me it seems to be part of the whole anti-intellectual culture brewing here and in other parts of the world.
Perl?
Very classy, dude.
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...
I'd say architecture and advances in neuroscience are tangential here. I think the core of the problem is still somewhere else.
* sidenote: Lisp machines weren't at least completely _ignored_ by academia.
Perhaps something like visual-based programming would suit a different mindset altogether.
Truth be told though, programmers have managed to solve the website problem with all the new site-builders out there. They all seem to be "drag and drop", which should have been addressed long ago as a standard for at least the frontend.
While there are some things I like about visual programming, there are also many issues - perhaps the biggest is that it lulls the developer into believing they don't need to understand the underlying computer. I think a similar analogy is how a newbie RoR developer can create a CRUD application without ever looking at or understanding the scaffold-generated code.
I've thought about this a lot (in fact, years before I found ProGraph I tried to develop a system I called FloPro which was standard Fortran flow-charts on the front end and generated C (to compile on your local platform) on the backend), but I haven't seen a solution to these problems in any visual programming system.
[1] http://en.wikipedia.org/wiki/Prograph [2] http://www.andescotia.com/products/marten/
Were you only able to build it by writing code itself?
That's is the Author's viewpoint.
"The current state of painting as a way to capture images sucks. It takes years of practice, and even then the likeness created is only ok unless you're a true master. There's this area of research around lenses and films that professional painters seem to scoff at - but I really think we could be doing profoundly better if we can get it working."
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.
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.
Any language that fully accepts the object-oriented paradigm lends itself very naturally to functional programming, and vice-versa.
[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.
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.
Perhaps coding will look like minecraft, where you dig physical paths for the water, for the chickens, and hunt down bugs with bows and arrows. Modern tablets with no keyboards do minecraft just fine (my 8 year old and all his friends are completely addicted to minecraft). Also, they can join lan games, and work in the same virtual world. This may allow multiuser programming, no? Weird thoughts. They won't call it programming either, they'll call it something like flowcraft or some such.
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.
"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.
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?'.
Or just configuration. Everybody wants to reinvent Make and they all do it wrong...
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.
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.
What this article proposes is a monolithic culture, where everything is centralized and controlled by a few entities. We tried this in the IBM/Microsoft days and it doesn't work. We end up with a single poorly documented tool that offers limited functionality.
The world of programming is more accessible today than ever before. If you are a novice, there are tools for you. If you are an expert, there are tools for you. If you are transitioning from novice to expert, there are tools for you!
It doesn't even get to the point (that programming does not have to be text-based) until halfway into the article.
The title and the objection to other people learning to code are at most tangentially related to that point. Just because there could be better ways to give instructions to machine doesn't mean other people should wait to learn how to instruct machines until those methods are developed.
I agree that the focus has shifted way too much on spec. technologies unfortunately.
Otherwise, why get hung up on definitions of "coding" vs "programming" or concepts such as "text" vs "visual"?
I think this post is an expression of the frustration that we have all reached at some point (if not many points) along the way while using any language or solution or architecture: this sucks and there's got to be a better way to get shit done!
How many times have you been working on project "foo", ran into a problem and employed solution "bar" (or better yet, created solution "baz" on your own) in order to solve your problem...only to find yourself derailed into a swamp of limitations with "bar" (that everyone forgot to mention in that awesome blog post you found)? Or, how many times have you lied to yourself and said "I'll improve upon the limitations of 'baz' in the v2 release" of your home grown masterpiece only to never return because you're actual goal is to finish the "foo" project?
The problem might be the tools or the user or the application or even the philosophy...or it might be a combination of that list plus some I haven't mentioned. Perhaps these problems have already been solved and the lessons have been lost? Or, perhaps more analysis is needed to come up with a new way around this issue entirely? I certainly don't have the answer right now but this article made me take a step backward to survey the landscape (or the wake?) of the most recent 10 years of "disruptive" (read, self-serving) technology and I feel an undeniable sense of dissatisfaction with it all.
Maybe that desire for something better just means I'm a programmer and not a coder? I don't know but I won't avert my eyes from the problem no matter how obvious it is to everyone simply criticizing the article. Awareness is the first step to understanding the problem you are trying to solve and I see people recoiling from that. Denial is a sign that a belief (or end of thought) is overruling the critical thinking process and to me that's acceptance of the status quo (not just dangerous but stupid too).
I did get a good chuckle at the metaphor provided by xerophtye's comment "you think of a pretty picture and tada! It appears on canvas!" The truth is always funny so perhaps this comment encompasses the entire article but I think it oversimplifies what the article attempts to drive toward. Sure, comprehension of the building blocks (or, the colors) allows you to build bigger and better buildings (or paintings), but, if that were truly the case, why aren't things improving? Wouldn't all of the so called experts chiming in have already built bigger and better buildings? And if so, what are they? NoSQL? Twitter Bootstrap? Ember or AngularJS? Bitcoins? Animated CSS? All I see are copies of the original idea done "my way" which is "better".
Amateurs borrow, professionals steal. And that is the process improvement methodology I see employed today.
If everyone thinks they know their craft so well, inside and out (and, for safety, let's say I don't), how might you take that knowledge (and a step back) and change/improve upon how things are accomplished today?
I think that's the core of this article.
To put it another way, if the acquired knowledge to accomplish tasks via "programming" is only useful and self-serving within the realm of the library/language being used, how is that moving the entire ball forward?
I think the solution implied here is that a re-examination of history and more experimentation with different architectures or applications of the existing building blocks might get us over this hump we're facing.