I really, really disagree with Jeff Atwood here. Jeff has interpreted "learn to code" with "become a programmer". They're not the same thing. I don't think that is what this meme is about at all.
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.
With a couple of months of programming knowledge, I wrote a program that saved my company $2MM/year. The key was combining knowledge of the business processes with some knowledge of programming. There were people with knowledge of one or the other, but not both.
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 agree with this wholeheartedly. My line of work could be made much easier through some very simple software. The only reason that software doesn't exist is because (I assume that) nobody with programming knowledge understands the needs of someone who does my job. Or cares, for that matter. There aren't many of us.
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.
If you are right there are probably a hundred people on here able to provide a working MVP alongside you and do it faster, cleaner and pick up on solutions you cant possibly know yet. Be a domain expert.
I'm sure anyone here could do that. But how many people here are looking for a non technical co-founder? Coders are solving their own problems, and until I can hack together a prototype I don't think I'll be able to draw any attention from real programmers.
I think I'd actually prefer a pure domain expert who can express their business and ideas well than a half-assed programmer.
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.
> you need to prove that it's a good idea and that you've made a significant investment yourself ... 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.
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.
I agree it's a good skill to have in many careers, software engineer included, but it is definitely not the definition of programmer. If you wanted to map this skill to a profession, I'd probably go with Business Analyst being the closest.
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.
What about knowing enough coding to understand the amount of work that needs to be put in to transform an idea into reality? Also to be able to construct the interface is easier when you know some code. Those are some reasons why I'm investing time to learn programming.
I think the assumption that you will understand the amount of work needed for a given solution is part of the problem. Estimating a project accurately is NOT a skill you're going to pick up by learning a bit of programming.
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.
Not by me. I can't afford to pay them unless I can raise some money. I don't see how I can raise the money unless I can cobble together a prototype myself... even if just to show that my idea is viable and that I'm serious about it.
I wrote an online attendance system for my school, which often come with way more features than we need and cost in the range of $50k. It's not $2 million, but $50k is a teacher's salary. In education, that's huge. It took me 2 weeks to set up, and another 4 weeks of testing with teachers to iron out all of the bugs, but now it is used every day by all of our teachers.
I've also used my ability to code to develop learning apps for my students. It's been incredibly valuable in my career.
In terms of capital + human capital multiplying your effort, programming is pretty hard to beat. Compare sales calls, meetings with important people, instructions delivered to staff, farming with tractor; even hands-free investing requires a lot of time.
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.
"The key was combining knowledge of the business processes with some knowledge of programming."
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.
Sorry you're wrong based on my many years experience with dealing with non-programmers and this exact situation.
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?
I'd say they're right, based on my many years experience dealing with non-programmers and this exact situation.
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.
Sure, I think he's also underestimating what percent of average office workers actually do have some of the talents and inclination to become skilled professional programmers. Despite excelling at math and doing some basic programming (in qbasic in fact) as a kid, it didn't occur to me to major in CS until I was halfway through college. I think broader exposure can only help people realize that programming is something they actually are interested in.
Well said. I wholly agree with "learn to code" != "become a programmer".
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 am trying to say there is a distinction between those who are trained professionals and those who have basic knowledge. I am getting the feeling people are taking this issue personally. If you want to become a trained professional, please do so. As for me, I have paid my dues and consider myself one.
Well, it is your camp that is equating "learning programming" with "becoming a programmer."
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.
>There is nothing wrong with Jeff's BASIC example, if that is where the mayor of NYC ends up.
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 can't tell if you meant that in a pejorative way, but are you sure? BSEE, started a "big data" company a thousand years ago which is still the "Xerox" of its industry.
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.
> 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.
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.
You could do that, but one of the best things with coding is that you get instant gratification and constant feedback.
"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.
To be fair, all programs sort of get reduced to 1s and 0s. Given this fact, I don't consider the idea of coding only with the letter 's' that much of a stretch. You know, in lisp I code with parentheses!
I know you're joking and this isn't really too relevant to your comment at all, but the 1s and 0s thing that non-techies fixate on is just stupid.
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.
For the record, I was mostly serious. I was half-joking about the Lisp part. This is not really related to your comment, but just to clarify: I'm serious that coding using just 's' doesn't sound that unreasonable. If you're a professional programmer, sure, you know you need more characters than that to be productive. But I wouldn't fault a lay-person, even one who has some knowledge of coding, for believing someone who said they programmed using only 's'. Plenty of weird programming languages are possible. Take a look at http://rosettacode.org/wiki/Reverse_a_string#Brainf.2A.2A.2A.
I get that, I meant you're joking in that I don't think you believe that programming or computers really does just boil down to 1s and 0s in a way thats at all relevant to programming - there is, of course, a tiny grain of truth in that, but not one that is IMHO at all important, though most non-techies don't know that and they're told that computers are just 1s and 0s.
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.
There's a usefulness to coming at a problem from a completely new direction, but it's orthogonal by virtue of being orthogonal. Why is the alphabet the best way? Couldn't we express ideas better? (And I actually keep an eye on the constructed language space, so I actually know people who say, "Yes.")
I don't understand the distinction you raise in the first paragraph. Coding is programming. Just because everyone can divide doesn't mean everyone is trying to be a mathematician, but I think everyone should (at least have the opportunity to) learn long division. Programming may not be the fourth "R", but maybe "Research" is!
I think the important distinction would be how much additional knowledge you need to solve the problems you solve. I'm gonna call the "coding" "scripting" for now, and the "programming" "programming", because these are older and in my opinion better terms.
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.
As opposed to a professional "coder"? (I also see "programmer" as a more distinguished title and I prefer it to "coder" (and even "software engineer"), but I don't understand any of these terms to have any generally-accepted definition; personally it is only a matter of taste.)
I'm not trying to be facetious, just misunderstanding whatever point original commenter is making. "Most people don't what programming even looks like"? I don't think that is true because most people can search for code samples if needed.
You seem to be a bit disconnected from reality. If I told any one of my friends who are not programmers by trade to look for code samples, they would either not understand what I'm talking about, or simply not know where to look.
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.
Most people don't even have the slightest idea what kind of problems software can solve.
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.
You are very wrong about this - people who know how to "search for code samples" know what programming looks like, but they are far from the majority.
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.
> People can visualize what nearly every other profession does day-to-day
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 don't buy it. An architect designs structures - most people don't know what the actual work of designing a structure looks like, but they know what a design of a structure looks like. An engineer figures out how to make a structure stand - most people don't know what the process of making a structure stand is, but they know what a standing structure looks like. A banker moves money around, people don't know how that is accomplished, but they know what a loan looks like. Most people I've met don't have any idea what a computer program looks like, not even that it involves text. I didn't say anything about the differences between languages, and I think you misunderstood my comment about "structured grammar". I didn't mean it as a specific feature of what I do, but as a generic feature of what a computer program is. I only meant that the closest analogy I've found to programming that most people can relate to is writing.
"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.
Being a programmer is really really really fun the first few years. Kinda like playing video game. However, it eventually become something that is can be unhealthy. It really undermine other sensory input from the body. And primarily focus on the mind and finger interaction.
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.
Even "programmer" is, in my opinion, too broad of a term. And the difference between "coder" and "programmer" is not really that clear.
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 couldn't agree more. If nothing else, learning to code is an incredibly useful thought experiment for anyone who enjoys using their brain in new and interesting ways. So what if you never make a cent? How many of us started coding simply because we were passionate about it and it got us excited?
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 :)