Programming is logical thinking in practise. Programming is breaking a problem set down, thinking step by step through it, thinking of edge cases, and making it work. There is nothing wrong with Jeff's BASIC example, if that is where the mayor of NYC ends up.
There was once a time when books were only read and written by an elite group. Now everyone can read - and everyone can write. There are still the elite authors that write better than the rest of us. Just because everyone can write, doesn't mean everyone is trying to be a professional author.
Computers are a part of society. To function well in society, it's beneficial to understand a little about how they work, and how to make them do things. The essence of programming is making a computer do something more efficiently than you can.
Programming isn't just the advanced stuff - recursion, pointers, functional programming, or whatever. Maybe Jeff is too far down the rabbit hole to realise this, but most people don't know what programming even looks like. They don't know how we tell computers to do the things they do. Recently I was with a customer, making notes about changes I needed to make to their application. They asked me "Is that how you make it do that?". No - that was my TODO file. And these are people that work on computers all day, every day.
It's beneficial if marketing folk understand the basics of programming when they're doing web ads. It's useful that CAD engineers know the basics so they can automate AutoCAD. Its useful that financial accountants know basic programming so they can become more efficient with analysing data.
If the mayor of NYC wants to learn to program in his spare time, why the hell not? I bet there wouldn't be the same complaints if he wanted to learn how to surf.
I still can't write a basic app, but that doesn't matter. I can do things that provide massive value, and I wouldn't be able to do them without programming knowledge.
I think Jeff is underestimating how much time the average office worker would save simply by learning Excel Macros or some basic scripting. Learning to program is really damn valuable, especially in fields where most people don't know any programming.
I'm working my way through Ruby on Rails tutorials simply because I think there's tremendous value to be created without the need for anything groundbreaking. Just tailored.
And if I'm right, I'll be able to afford to hire someone to fix my crappy code.
But learn to code anyway :-)
No offence, but what often ends up happening is you turn into a know-it-all client. "This should only take an hour. You just have to loop over these results and format them...".
Finding a technical co-founder is a sales process where you need to prove that it's a good idea and that you've made a significant investment yourself (I would prefer if it wasn't code) like thinking through the interface, and as many use cases / stories as you can think of, and describing in detail the problem(s) being solved.
The pitches we hate are the guys who know you through a friend who want you to make a Groupon-like application for their specific market, without having invested more than the 5 minutes it took to write it down while baked. I'm still not going to be sold on this idea even if they manage to throw together some terrible PHP site that sort of acts like a real application.
That being said, I'm in the boat that thinks at least some rudimentary programming skills would be useful for everyone.
That sounds exactly like the skillset of a good software engineer. This whole debate is about the fact that a whole bunch of people don't know how to break down a large problem into small logical pieces.
"describing in detail the problem(s) being solved" is about the most concise and accurate description of programming I can think of. Asking someone non-technical to do this is like asking a ramen noodle-eater to describe in detail the process of flambéing Steak Diane.
Breaking a problem down into solvable parts is something I was taught in math and it was invaluable. I'd written programs before and after that, so I wouldn't say that this technique makes you a programmer. Rather it's an approach you'll need to be a good programmer.
Asking someone non-technical to describe the problem they want to solve in detail is completely within the realm of reason. Non-technical != moron. Knowing how to do this, does not make you a programmer. Likewise, being a programmer doesn't make you good at this.
As a programmer of many years, I still miss-calculate the amount of work required to solve a problem. It's something you get better at over time, but I totally sucked at it when I was starting out as a programmer. It's one of the hardest skills to attain IMO.
I think it's great that more people learn to code. I'm just saying it's not some magic faerie dust that solves all your problems. It's just another piece of the puzzle.
I've also used my ability to code to develop learning apps for my students. It's been incredibly valuable in my career.
Knowledge of programming wasn't required to save your company 2mm per year. All it would have taken is someone recognizing there was a problem that could be solved by programming. If you did the job with a couple of months of programming knowledge someone could have been easily hired to do this job, right? They just had to realize there was a problem to be solved.
It seems to me that someone who had any knowledge of what computers could do could have saved your company that money. Just like a person working in a commercial kitchen that wasn't a carpenter could have hired people to improve efficiency and save money.
Seeing what is already being done with computers on a daily basis gives people knowledge of what can be done without knowledge of programming. Knowing programming but not enough could also be an impediment as well. You may not realize there are simple ways of solving an issue that to you with your limited knowledge seems like it could take a tremendous amount of effort. There is an expression "a little knowledge can be dangerous".
And how many people are going to take the time to learn to code enough anyway to see all the possibilities?
Knowledge of programming and the business are both important and key here, but it's the slant towards business that can give someone the leg up on saving companies money. It isn't always about simple data entry or automation, it's going about your daily job with the insights and skills that basic programming provide that allow people to recognize where a new script or application could improve their business process in some way.
Business processes can be extremely complicated, and you can't easily impart business knowledge and processes upon a programmer in a manner sufficient to give them the ability to recognize where their skills can be best applied in a business.
Not true at all, people can use computers every day of their life in their job and still not even understand where a window goes when they minimise it.
Let us not forget the difference between scripting and software. Shell scripts or bookmarklets or greasemonkey/browser plugins - These can be useful to the majority of workers.
Many have a specific problem that could be made much easier by coding but never will be address by professional coders.
I think the most similar skill to coding is writing. John Updike remarked, several decades ago, that fiction creates value without destroying anything (ok, a trivial fraction of the value). But it's clearly not just about being able to put some words on a page.
Learning programming has helped me in many other walks of life. It has taught me that every problem can be tackled with a systematic approach, given enough time. I like to think that helps me to notice things that would have gone unnoticed without. More than anything else, it is this approach, enforced by programming, for which I hold gratitude. Critical thinking.
I don't know why you should feel threatened or defensive about the fact that a lot of people want to understand your basic skill set. I don't know many mechanical engineers who discourage people from learning to fix their own cars.
Are you sure about it?
What if he suddenly starts thinking that he actually knows what goes into building software?
Democratization of programming is a lofty ideal, but in the reality anybody who wants to learn to code will do so if he has a computer. This latest fad is nothing more than a trivialization of a complex skill and an attempt by some non-technical hipsters to be even more hip. If plumbing was cool we would see the same people vowing to learn how to plumb this year.
I doubt he solders today, but he has the background to understand the interplay of software, hardware, delivery, etc. He has been noted to be very big into prototyping technology with his company's platform. You might say agile.
For me it was like reading: "Writing is not a basic skill; we have plenty of books out there. Most people, when they learn to write, start writing books that are of awful quality!"
If the benefit of everyone learning programming is logical/critical thinking, breaking a problem down and thinking of edge cases, etc, then why not focus on teaching everyone how to do that instead?
A good way of doing that may very well be teaching some form of programming, but unless you explicitly state the goals up front a lot of people are very likely to miss the point completely and either teach just programming, or learn just how to code.
"Hey look, my computer just said Hello to the world!"
The ability to play with scenarios while exercising your logical critical thinking and to get instant feedback is essential to learning.
I liken it to the difference between learning photography in the film days vs. digital. I bought an SLR in the late 80s but it was very expensive and time consuming to get good. I had to buy and use up a roll of film, take some notes about when, where and how I made the shot, then pay to get them developed. With digital, I see the shots I make instantly, and I can make mistakes and try again without incurring constant film and development costs.
Scripting basically takes the problem and a language and directly transforms the problem into a working program. You don't need fancy algorithms, you don't need fancy background knowledge in programming topics, you need python, a python dictionary and directory access (for example). Or Excel and VB and a few arrays and a formula.
On the other hand, heavier programming would require more and more thought when actually implementing a solution to a problem. Efficiency might become a large concern earlier, you might need more complicated algorithms sooner and so on. Think about every occasion where you transformed a problem into a graph problem and applied some graph search, or graph coloring to this problem.
If I understand "coding" as "scripting" and "programming beyond coding" as "programming", the distinction makes sense, and it makes sense to call for more people with the ability to script simple things, because scripting is not too hard and saves a lot of time.
However, given the current state of the world, where many things are in one way or another controlled by software. It would be a good idea to have a skill related to coding, just to know if something is possible with code. And understand that it is not just magic under the hood.
I agree totally, not only would it be good for him but it sets a good example for his constituency (because as a basic competence it is good for anyone).
Most people don't even have the slightest idea what kind of problems software can solve. Jeff Atwood seems to interpret "learn to code" as "learn to set the DYLD_LIBRARY_PATH variable". Others—myself included—think that having at least a bit of exposure to programming provides you with a better overall understanding of how computers operate.
I don't think it's necessary to have that understanding. But neither is speaking a second natural language. Apart from acquiring the skills themselves, learning any of those will teach you meaningful things about yourself and your environment, which seems to be worthwhile.
I was once told by a good friend of mine in industry X that people in that industry have money but they don't know whats possible - they don't know what could be automated or calculated with computers and so they don't do it, even though it would provide a lot of value to them.
 In general, I think the industry is irrelevant and this applies to most industries that don't already directly employ programmers. There are often already some high tech firms that do and they have a huge advantage over the masses that don't. In this particular case, the industry was the betting (horses) industry and there are actually plenty of firms that are high tech and hire programmers and mathematicians and such to create complex software, but I think his point is that there are still a lot of smaller firms and people who spend a lot of money that still don't know what is actually possible. He since moved to a much more high tech company, but he still does most (if not all) of his complex risk assessment modeling in excel.
I, for one, wish more people understood what programming "looks like", so that I could actually talk to people about what I do without them being completely confused. People can visualize what nearly every other profession does day-to-day, but what programmers do is a complete mystery to most people. I tell people that I'm a writer for a language with a very structured grammar, but that's only part of the story.
No they don't. They know an architect draws pictures of buildings. An engineer draws pictures of a bridge and hammers away at a calculator (actually the first thing most people think of with engineer is probably either boats or trains or Star Trek). A banker sits and acts like a total dick. What architects, engineers and bankers really do is a complete mystery to people.
When someone asks what you do and they do not have any domain specific knowledge, you say you write applications, you're a programmer. That's all they want to know, they don't care what the details of what you write are. They don't want to know the differences between languages. They don't want to know what a structured grammar is and why you care about it. Those are details of your job, that's not what they were asking.
"I'm a system administrator. I keep computers working." That is the maximum extent people want to know about what I do. They're being polite in asking, they don't really want to know details. And at the end of the day they still think that all I do is sit on my ass and look at a computer screen. Just like the way they visualize a programmer, and a banker and a ...
"I keep computers working" and "I write computer programs" are on opposite sides of a conceptual understanding chasm - most people have tried keeping computers working, even if they hated it and failed miserably, but most people haven't tried programming, and don't really know what the concept means.
One refers to picking up some skills for any of a variety of reasons. The other refers to embarking on a career.
Should everyone have an understanding- probably.
Should everyone build a public bit of code - probably not.
Coding as a hobby is great but making strategic decisions still requires experts.
My mom recently (2012) just asked me if when I'm programming, the screen is full of symbols, kind of like the matrix.
Many people I know consider computers "illogical". We could do a lot to help people understand how a computer works, and the best way is through programming.
Programming (and computers in general) have nothing to do with 1s and 0s and saying stuff like "at the end of the day, its all 1s and 0s" is like saying that at the end of the day banking just comes down to scrap pieces of pressed tree pulp or a bakers job is just about a bunch of grain or a teachers job reduces to sitting in a room for a few hours or whatever silly analogy you want to dream up.
All of these things are implementation details that, really, are irrelevant to pretty much everyone everywhere. If you are dealing with low level digital systems you will encounter 1s and 0s (and analog voltage and resistance and capacitance and a whole lot more besides), but usually (especially when building something complex like a computer) this gets abstracted away pretty quickly.
I did not at all think you were joking when you asserted this:
Given this fact, I don't consider the idea of coding only with the letter 's' that much of a stretch.
Which I completely agree with.
I'm beginning to think your mom is smarter for not knowing how to code, because she hasn't been biased yet by exposure to mainstream tools.
Perhaps there is value in a blank slate, but that is definitely not being smart.
It's like novelists novelists being afraid of people learning to write because then they'd take their jobs or scientists being afraid that people learnt physics, mathematics, cosmology...
One case I can think of... religious priests are sometimes afraid of people actually reading their religious books aren't they? :-P
Every time a good term, besides "coder" and "programmer", appears, it gets overused by the wrong people and losts it's power. I strongly believe that what Jeff is describing could be called an "Information Systems Designer", but the term "Information Systems" has such a baggage of bullshit consulting that it can't be used.
I can't tell you how excited I was when I wrote a simple joystick driven paint program for my Atari 400 in Atari BASIC :)