I recently learned how to plumb a little. Now I can do minor household plumbing fixes without having to hire professional help. A very useful skill indeed. I know it's a demanding activity that requires more than reading a book and knowing how to hold a wrench, so I know to stay away from the serious pipes and stick to little fixes.
He did say that everyone should learn some basic concepts of programming, which I think we could all agree with. Perhaps everyone shouldn't know how to create the next Gmail, but surely there's an advantage to us all knowing how for loops work and how to write a bit of simple code (perhaps just doing math and text basics in Ruby). Many schools already teach this as a standard part of their curriculum using Basic.
I don't think he means that learning plumbing is a bad idea.
I think his point is just that a big hype cluster around learning plumbing would seem silly. There are a lot of useful skills in the world. Programming is one. Plumbing is another. Let's not get crazy and over-emphasize programming.
It's strange he made that point about plumbing, then later said you should learn how things work to solve real problems.
He seems to have confused an initiative among some people to learn a new skill in their spare time with a totalitarian injunction that we all become programmers.
To me it's no different to an initiative among people to learn a foreign language. It may be a somewhat qiuxotic spare-time hobby, but the prospect of acceptable failure is partly what part-time hobbies are for, right?
Learning a bit of coding will give one an insight into how hard it is to get right, which will make one appreciate which bits are easy and which bits are hard. What's wrong with that?
The little plumbing I've learned on my own initiative has taught me similar, and I'm less likely to get ripped off as a result.
Exactly! I've encountered the attitude many times: If you learn to DIY your time must not be valuable. This is so wrong, and avoiding dishonest service is an obvious benefit.
Traversing those learning curves is more rewarding the longer you keep at it. Also, it's rare that one field of knowledge doesn't benefit many more.
"Can you explain to me how Michael Bloomberg would be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder?"
If anything should trickle down, it would be the joy and satisfaction of acquiring a basic competence.
I get what he is saying, not everyone can or should be a programmer. But if you take 'learn to code' as a euphemism for learning how to build an excel spreadsheet properly, how to write a macro to automate your job, something like that, then, well learning to write a bit of code isn't a bad thing at all.
We all benefit when we learn a little bit about another profession, whether it is painting or plumbing, bricklaying or baking. In that context demystifying coding for the average person isn't a bad goal. Just to clue people in that tough solutions they have might be easily solved is a good thing. Getting people to wrap their heads around logical thinking is definitely a good thing.
Not really. I learned to code Pascal 16 years ago, because I wanted to make DOS computer games.
And here I am now: 10+ years of professional web-dev experience, spoke at local dev conferences, won awards for my work, etc..
What I learned during all these years is that methodologies and models help you after you learn how to build apps/plugins/games/whatever. And still they won't save you from wasted hours hunting an accidental typo.
The thing is, programming can help automate basic tasks. Anyone who uses a computer regularly can benefit from this fact. Sometimes, these tasks are just throwaway scripts - but they save time.
I mean, even learning Excel and it's various functions is a form of programming and undoubtedly a valuable skills even for a politician.
If you understand how to code you have a much better idea of what's achievable by code and what's not.
(incidentally given Michael Bloomberg has a degree in electrical engineering and he founded a multi-billion dollar tech company in the 80s I'm pretty sure he can code already; even if only in fortran)
I doubt Bloomberg uses eight grade chemistry, biology or physics in his day job either. We still teach the sciences -- if nothing else than as a way to entice kids to continue studying it and keeping a steady influx of engineers in to society. There is nothing different about computation, per se. Instead of a teacher droning on to kids about how to surf, let them learn how to do webpages, or robots. Get them excited about CS and try to disspel the notion that the machine they're sitting by is in any way, shape or form magical and archaic.
As for Bloomberg at this phase in his life picking up coding, probably not. On the other hand, he made his fortune in part via hardware and software, so I doubt he's completely clueless about it even now.
I don't think you truly believe that though. Most people who hack daily have at least a basic working model of the computer. There's a compiler parsing, generating code, there's possibly a VM executing bytecode, an operating system managing memory, scheduling, network and other services, below that there's a CPU executing some representation of assembly code, it's in turn composed of some sort of a logic array, etc. etc. I'm not saying you know the inner workings of everything.
It's more along the lines of, we teach physics with the aim that people finishing high school should have a vague notion about at least newtonian physics, some electromagnetism and the scientific model. For computers, we teach how to open Word, check your e-mail etc. Stuff kids know. What they don't know is how this all ticks, and I think there is certainly value in helping kids construct a vague mental model of it all, and how to apply certain parts of it to a screen they'll probably interact with 4-16 hours per day for the rest of their lives.
I respectfully disagree. Learning to read is a necessary skill where most of the world's information is written - but to be productive, to create, to contribute, you have to learn to write. Code is the same: whether that's a good thing or not, more and more of your surrounding, of your environment will depend on - code. Fortunately, a lot of services have made it very easy to contribute to this augmented world without coding yourself, but you will not be able to understand the basic mechanics of this augmented environment without basic code literacy.
Why should a mayor learn to code? Well, I don't expect him to be a Java nut, but I do expect leaders in politics to grasp the basics of privacy, security, productivity, cost and benefits of the coded world surrounding us.
You BASIC example would be okay. Learning old-school BASIC could be a week-long set of workshops.
Plotting a graph, old school style can be useful.
10 HGR
20 HCOLOR=12
30 HLINE 100,100 to 100,200
40 FOR X = 1 to 300
50 HPLOT X,0.01XX
60 NEXT X
Doing operations on text files can be useful -- I have a nice program for processing my web-site log files. It has to be custom, absolutely.
What's one week of workshops?
God says...
C:\Text\BIBLE.TXT
ter: 14:7 And he shall
sprinkle upon him that is to be cleansed from the leprosy seven times,
and shall pronounce him clean, and shall let the living bird loose
into the open field.
14:8 And he that is to be cleansed shall wash his clothes, and shave
off all his hair, and wash himself in water, that he may be clean: and
after that he shall come into the camp, and shall tarry abroad out of
his tent seven days.
14:9 But it shall be on the seventh day, that he shall shave all his
hair off his hea
If tomorrow you want to learn to cook, how would you feel if a master chef told you "No, don't. You'll never be as good as me. If you're hungry, come to my restaurant instead".
I think there's nothing wrong with learning a new skill, whoever you are, whatever you do.
This is a great example. My brother in law is a chef. I asked for his scone recipe, and he said to throw in some sugar, flour and milk (or something like that, I'm not a chef). Mix it until it looks right. That's expertise.
I'm a lousy cook - but I can cook food if I follow instructions that have accurate measurements.
You're not a lousy cook, you're just not used to the process. All it is is following instructions with precise measurements, and then doing it over and over again with different instruction sets until you start to recognize patterns and you find yourself having to look at the instructions less and less. That's 99% of cooking.
That is not what being a professional cook is about though. My girlfriend is a pastry chef and it takes more than being able to follow a recipe. Part of being a professional means knowing why certain ingredients taste the way they do when mixed with other ingredients. It means knowing how the altitude and temperature of where you are cooking can affect the taste of an ingredient. And there are a lot more little details that go into it as well.
For most people, they are just going to follow a recipe and you are right, that is all they need. But to be on a professional level and to be able to reproduce those flavors it takes a lot more than that. Check out the book "Professional Baking", it shows a lot of the complex nature that goes into being a pro.
Cooking may not be the best analogy. What if everyone started learning to build bridges instead? Sure, the general population might benefit from knowing how bridges work and what loads they can take, but when a bunch of inexperienced, improperly educated bridge-builders start trying to create new ones because it pays well, we end up with dangerous bridges.
Jeff's article is trying to point out that while understanding code isn't a bad thing, coding isn't the most important part of writing software. Those who think it is end up writing code without purpose, something I consider as dangerous in the long term as shoddy bridges.
Shoddy bridges aren't bad, relying on them is. The fact that Bloomberg will write some code doesn't mean we'll have to use it, just like I have plenty of code in my HD that I don't throw into the world, because it's absolute crap.
If we could all build bridges in the our own yard, I think we'd see some of new fantastic bridges which we could re-use. With coding, we can.
Building bridges may not be the best analogy. What if everyone started learning to dance the macarena instead?
Seriously, cooking as an analogy highlights a difference between private recreational practice and public for-pay professional practice. Building bridges, unless you live in a place where everyone has a backyard with a river in it, not so much.
I don't think anyone is saying that everyone should write professional software. Just that it would be beneficial if they learned the equivalent of making a ramp for a wheelbarrow in the back yard.
But should it be mandatory for everybody to learn cooking on the same level as reading and writing? Is it such a basic requirement, that we're decreasing our children's chance of success, if we don't teach them cooking (edit: Again, on the same level as reading and writing)?
Apart from at least a fundamental ability to use a stove, it is naturally not that crucial of an ability. The argument of the blog post is that it is the same with programming, i.e. It is not a necessity to succeed in life to know how to code.
I don't think the point of the post is to discourage anybody from learning to code. Rather it is a counterpoint to the recently heavily promoted idea that programming is somehow a necessary life skill.
I can only add to this. Because one of the most important skills, after checking my finances, was being able to cook. And knowing, what healthy food is and how to make it, so it stays healthy and(!) tasty.
I might be able to learn a lot of math in school, reading/writing, research (in university), critical thinking (throughout life). But being able to care for my own food, to know, what not to buy (or what to buy) and so on, helped me stay sane and in good shape.
I think I might have worded the second paragraph wrong, as it seems a few people have taken it literally and misunderstood my point as being that cooking is a useless skill.
Cooking is of course a good skill to have. So is plumbing, car repair and a lot of other things. But this is entirely besides the point.
The point was this: Is it a necessity for children to be taught [cooking/car repair/plumbing] on the same level as math, reading and writing: From 1st to final grade in school, 10 hours every week? Of course not.
Atwood argues that it is the same with programming. No matter how much we and he love programming, it is not comparable to reading, writing, math, communication and similar.
Definitely not! In my own opinion the majority of curriculum both in public school through to many university courses, is a waste of time, but that's a different discussion.
Your initial statement doesn't make sense anymore in the new context you're trying to paint. You're building a strawman here. Absolutely nobody said that programming should be taught "from 1st to final grade in school, 10 hours every week".
And in school you're not learning just "reading, writing, math, communication and similar".
Other disciplines learned in school are biology and its branches, like botany or anatomy of the human body, chemistry, physics, history, foreign languages like French and Latin, psychology, philosophy and so on. Not all of these disciplines are taught 10 hours per week.
Also, reading and writing are only taught in the first years. After that they teach you grammar and literary analysis, but considering how illiterate today's teenagers are, many schools are clearly doing a poor job, so to save some taxpayer's money they should just make those optional.
And seriously, I could think of a couple of disciplines I learned in school that would be less important than cooking or programming.
I don't really know what your argument is, except that you somehow think I'm revising my comment "trying to paint a new context" and even "building a strawman" to boot. Yet you offer no explanations for these very rude remarks.
The parts in my comments about cooking, 10 hours pr week, and the short list of subjects, are all merely examples. Replace it with car repair, 2 hours a week and your informative list of school subjects, and the argument is untouched. It should be obvious that these details are entirely irrelevant.
Car repair, 2 hours a week for a quarter or so would be an excellent use of most students' time (with minor the exception of people who live in the biggest cities and never drive). You're missing the point of the people rebutting your argument, which is that cooking, programming, car repair, and many other day-to-day subjects are more important than many of the subjects that you take for granted as being necessary.
Please understand that my original comment is not about cooking. It's not about car repair either. And it's definitely not about whether cooking and car repair are valuable skills. Or even if they should be taught for 10 hours a week or 2 hours of week.
The argument was that a very high proficiency in reading, writing and maths has more value for the average student, than a very high proficiency in a niche subject. A nice subject being FOR EXAMPLE, cooking, car repair or programming.
Sure, our students might benefit from these subjects. But I doubt anyone would seriously suggest giving the same level of educational focus to those areas, rather than to basic life skills such as reading and writing.
And that is Atwood's point: Programming, like car repair, is an esoteric subject, and as such not equal in worth compared to more basic skills such as reading, writing and communication. By all means, subjects such as cooking, car repair and programming is good to know. But for the average student, a high level in reading will be considerably more important than a high proficiency in car repair.
This is the point (and that's actually Atwood's point, I haven't supplied mine), which I was merely explaining to the OP, as the OP interpreted the blog post as being against learning programming at all.
A couple of people countered by argumenting against irrelevant details, such as the use of cooking and car repairs as examples of esoteric subjects. They even started arguing the value of the specific examples compared to the basic skills, which of course is entirely irrelevant to the point I was making.
I don't think that being able to program is a necessary life skill. On the other hand, programming is not all about writing code. Fundamentally, it is about problem solving, usually by breaking a large problem down into smaller steps. That skill is necessary. While it is taught in math classes, there is not a chance for the creativity that programming brings.
On a personal note, I was not very good at math in high school and college. I learned Perl for my first job and developed better problem solving skills. I've noticed that the concepts that confused me in my math classes have become more clear.
If tomorrow you want to learn to cook, how would you feel if a master chef told you "No, don't. You'll never be as good as me. If you're hungry, come to my restaurant instead".
I think people who want to learn to program are learning already. The right analogy would be teaching everyone cooking in elementary school as a required subject, together with reading, writing and mathematics.
> The right analogy would be teaching everyone cooking in elementary school as a required subject, together with reading, writing and mathematics.
Would that be a bad thing? Many-many-many moons, sorry - summers, ago they did that. Along with maths/etc pupils were taught practical stuff, like woodwork, cookery, etc. Not that the goal was to make them all carpenters or cooks, but just to give an idea what it is like and teach to look after themselves.
So I think that coding is something along the woodwork lines. New generations should get at least an idea of what it's like, regardless whether they're going to use it professionally or not.
I would hope that someone who has tried their hand at creating a working program might appreciate, even in a very limited way, what kinds of issues face those of us who have to create these systems for a living: the difficulties of gathering requirements, the non-obvious relationship between the apparent complexity of a bug/feature and what it will take to implement/fix etc.
Almost all of these arguments can be applied to a large majority of our school curriculum. If you are arguing that people shouldn't learn to code for the sake of learning to code, you are correct. If, however, you don't actually think learning to code translates to solving problems, or has any real world benefit, you should also be insisting we remove all of Math from our school curriculum, because who uses anything beyond basic algebra? Hell, who uses anything beyond basic arithmetic now that we have calculators that can do algebra and calculus for us? Why teach kids anything?
I should also point out that, the more politicians know how to code, the less politicians treat computers as black boxes that "the nerds" need to perform magic with. It won't go away, certainly, but its a step in the right direction.
That's like a mathematician saying "people shouldn't learn maths!". Of course they should, it teaches you other skills on top of learning maths. Are most people going to go on to learn cryptography or crack one of the Unsolved Puzzles of Maths? Of course not, they'll leave it where they are and have new skills and new ways of solving problems.
Of course they could be one of the minority and go on to solve one of the big problems and create huge amounts of value. Which would be terrible.
A basic grasp of computational thinking has never been more important. It's become a prerequisite for making informed decisions about the world we live in.
The world may or may not need more working programmers (or mathematicians, novelists or plumbers), but why wouldn't we want to teach these elementary skills to as many people as possible?
Came here to post something along these lines and to link to this 2006 article by Jeanette Wing, head of the Carnegie Mellon computer science department:
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.
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!
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.
"If the mayor of NYC wants to learn to program in his spare time, why the hell not?"
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).
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[1] 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.
[1] 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.
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.
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 see ... so we're watering down the profession to the point where it is all inclusive. Can I start calling myself a doctor the next time I administer first aid?
To turn your statement around, are you saying that no one should bother learning first aid unless they are planning on becoming a medical professional?
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.
Thank you for saying exactly what was in my head and saving me some typing. Learning to code is to being a professional programmer as learning to write is to being a journalist/editor
I agree - and would specifically add things like changing the washer on a leaky tap, or fixing the toilet float...you know, basic plumbing for "those who aren't plumbers".
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.
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.
Regardless of one's feelings w/r/t the Atwood OP, it's hard to argue that programmers often conflate programming with solving problems. They are distinct concepts.
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.
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.
"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.
Knowing that programming could solve a problem requires knowledge of programming. Someone with zero programming experience doesn't look at a problem and say, "Yeah I can write a script to solve that."
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.
"Seeing what is already being done with computers on a daily basis gives people knowledge of what can be done without knowledge of programming"
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.
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.
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.
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.
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!"
Also wanted to come here and say this, thanks for pointing it out.
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
> 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.
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 :)
> most people don't know what programming even looks like
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.
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.")
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.
A good friend of mine recently tweeted[0]: "Those who do not study history are doomed to repeat it; those who do not study mathematics or programming are doomed to repeat themselves."
>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?
I have this horror scene in my mind where Bloombergs of this world are terrorizing their developers, with their "deep knowledge" of computers that they picked up by doing an online JavaScript course, I mean "code year".
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.
The problem is that the underlying message implies that the Mayor of NYC can be gainfully employed as a programmer after a year of solving code snippets. Which is BS and very misleading. More at http://blog.sidu.in/2012/05/everyone-should-learn-programmin...
Maybe he just thinks it would be fun, wants to feel the joy of that first "Hello Gotham"? He certainly wouldn't be the first person coding for avocational reasons.
People who make and apply laws regarding software should understand how software works and is made. They could talk to experts instead, but to choose right experts they also need to understand how software works.
So maybe New York Mayor don't need to code, but IP lawyers that works on software cases, and politicians voting on software related law - yeah, I think they should.
For all X, it is always better (toknow X) than (not (toknow X)).
There are innumerably unpredictable circumstances that may arise in which it will prove useful.
Bureaucrats in general could all profit from some minimal understanding of programming if only to stop them saying things like: 'the computer says: no!'
Except in cases where a little knowledge of the subject is more dangerous than no knowledge.
(But I disagree with the post, teaching people to program would be a net gain I think but I'm sure most people won't bother so no danger of ever finding out.)
I should probably disagree. The point of code being a life skill is not that we want more people to write code on a day-to-day basis. You should think about teaching kids to paint, rather than teaching them to read. It's not because we want more painters or because painting makes you better at the job you do, but painting helps you to see things from a different (artistic) perspective, to appreciate certain joys and certain other techniques.
Sussman has gone on record with a talk titled, "Why Programming is a Good Medium For Expressing Poorly Understood and Sloppily Formulated Ideas." That's probably an everyday use of programming which I've not seen, and it's part of what people learn as one of these "background skills" in college: how to think of things precisely.
I still get a lot of people who are shocked when I teach them relativity. You mean it's not a bunch of mysticism about "mass is squared light energy"? You mean you can prove that this Lorentz transformation doesn't lead to paradoxes? You mean you can derive it with high-school geometry plus some simple axioms that I can clearly understand? The only part which is hard to get across is the causal structure of "light cones", because people don't think in intersecting cones. (I have had some success with calling them "expanding light bubbles," with some reference to supernova explosions.)
Coming back to clarity, and finding it, programming is a good way to pick up that habit, even if you don't code on a day-to-day basis.
There is of course one well-known disadvantage which goes unmentioned in this Coding Horror post: coders are disproportionately more likely to think of legal systems as made of immutable and strict laws. The idea that a judge is supposed to, y'know, judge the human costs of competing legal priorities, and make a decision which is both fair and in keeping with the laws as written -- this discretion seems to be missing. You see this as well with how coders approach pharmacists: it's as if pharmacy was no longer a medical discipline and was somehow relegated to counting pills. No, that's what we code the robots for. Stop equating people with robots.
But if we remain sensitive to the humanity of others, then being able to code probably functions to a net benefit, much like Jeff's example of plumbing does. I mean, there are still occasions where you need a professional, but everyone should have disassembled the pipes to their sink at some point in their life, just for the experience.
I don't think anyone is saying that (I hope). Instead we're telling people to learn to code as a means to better understand technology, and then use technology to your favor to improve your life. And when that happens, coding will naturally become more common in your life, even if indirectly (managing others who write code, but this time actually knowing what you're doing). "Coding" is just a more common part of the problem, which has a much deeper meaning. I tell everyone they should learn to code, not because I think they should be writing hundreds or thousands of lines per day like I do. But because they should better understand the world we live in. And learning to code will get you there faster.
Thinking we're telling people they should learn to code just for the sake of coding is completely missing the point. I tell everyone they should learn to code for the exact same reason I tell everyone they should learn science, politics and law. Your life will be better if you're scientifically literate and technologically literate because you'll better understand the world around you.
> can you explain to me how Michael Bloomberg would be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder?
That's the wrong question. You should be asking how can be better at his day job if he was technologically literate. And I'm pretty sure anyone here can think of many different awesome ways anyone at all could be better at their job if they knew how to better use technology around them in their favor. Let alone a major of a metropolis.
> so please pardon my skepticism of the sentiment that "everyone can learn to code".
This is a separate problem. I think everyone should learn how to code, how science, politics and law works. For their own sake. Their life will be better if they do. Implying they shouldn't try because they're not good enough is analogous to saying most people shouldn't vote because they're not competent enough to choose the right candidates. The point is, it's in their interest to do so. Now is it in our interest that they do so? And that's a whole separate issue I would really rather not get into.
> the mayor of New York City will hopefully spend his time doing the job taxpayers paid him to do instead. According to the Office of the Mayor home page, that means working on absenteeism programs for schools, public transit improvements, the 2013 city budget, and … do I really need to go on?
Being a Mayor means it is his job, not his life, outside of work it's not our business to tell him he's wasting time regardless of whether he's learning to code or reading the first Harry Potter book over and over again.
The problem is that coding is still too hard. It should be easier to automate things, and then even the major of NY could benefit. Coding should be as easy as using a computer.
In fact I have argued that installing apps is kind of like coding for noobs. It is modding their world in a very primitive way, by installing functions on their phone. If it was easier to fine tune those functions, it would be a net win.
271 comments
[ 3.4 ms ] story [ 235 ms ] threadI think his point is just that a big hype cluster around learning plumbing would seem silly. There are a lot of useful skills in the world. Programming is one. Plumbing is another. Let's not get crazy and over-emphasize programming.
He seems to have confused an initiative among some people to learn a new skill in their spare time with a totalitarian injunction that we all become programmers.
To me it's no different to an initiative among people to learn a foreign language. It may be a somewhat qiuxotic spare-time hobby, but the prospect of acceptable failure is partly what part-time hobbies are for, right?
Learning a bit of coding will give one an insight into how hard it is to get right, which will make one appreciate which bits are easy and which bits are hard. What's wrong with that?
The little plumbing I've learned on my own initiative has taught me similar, and I'm less likely to get ripped off as a result.
Traversing those learning curves is more rewarding the longer you keep at it. Also, it's rare that one field of knowledge doesn't benefit many more.
If anything should trickle down, it would be the joy and satisfaction of acquiring a basic competence.
We all benefit when we learn a little bit about another profession, whether it is painting or plumbing, bricklaying or baking. In that context demystifying coding for the average person isn't a bad goal. Just to clue people in that tough solutions they have might be easily solved is a good thing. Getting people to wrap their heads around logical thinking is definitely a good thing.
* taking problems and reducing them to a sequence of repeatable instructions and decision points (branches)
.
I think 'LtC' is irrelevant if defined as:
* I wanna make iPhone apps / Facebook plugins / Instagram ... Where do I get the Magic Handshake for the Mega $$$ ?
And here I am now: 10+ years of professional web-dev experience, spoke at local dev conferences, won awards for my work, etc..
What I learned during all these years is that methodologies and models help you after you learn how to build apps/plugins/games/whatever. And still they won't save you from wasted hours hunting an accidental typo.
I mean, even learning Excel and it's various functions is a form of programming and undoubtedly a valuable skills even for a politician.
(incidentally given Michael Bloomberg has a degree in electrical engineering and he founded a multi-billion dollar tech company in the 80s I'm pretty sure he can code already; even if only in fortran)
* He is one of the great technological innovators of our time.
* I may be wrong, but he doesn't draw a significant salary from the city, being a billionaire and all.
As for Bloomberg at this phase in his life picking up coding, probably not. On the other hand, he made his fortune in part via hardware and software, so I doubt he's completely clueless about it even now.
It's more along the lines of, we teach physics with the aim that people finishing high school should have a vague notion about at least newtonian physics, some electromagnetism and the scientific model. For computers, we teach how to open Word, check your e-mail etc. Stuff kids know. What they don't know is how this all ticks, and I think there is certainly value in helping kids construct a vague mental model of it all, and how to apply certain parts of it to a screen they'll probably interact with 4-16 hours per day for the rest of their lives.
Why should a mayor learn to code? Well, I don't expect him to be a Java nut, but I do expect leaders in politics to grasp the basics of privacy, security, productivity, cost and benefits of the coded world surrounding us.
Plotting a graph, old school style can be useful.
10 HGR
20 HCOLOR=12
30 HLINE 100,100 to 100,200
40 FOR X = 1 to 300
50 HPLOT X,0.01XX
60 NEXT X
Doing operations on text files can be useful -- I have a nice program for processing my web-site log files. It has to be custom, absolutely.
What's one week of workshops?
God says... C:\Text\BIBLE.TXT
ter: 14:7 And he shall sprinkle upon him that is to be cleansed from the leprosy seven times, and shall pronounce him clean, and shall let the living bird loose into the open field.
14:8 And he that is to be cleansed shall wash his clothes, and shave off all his hair, and wash himself in water, that he may be clean: and after that he shall come into the camp, and shall tarry abroad out of his tent seven days.
14:9 But it shall be on the seventh day, that he shall shave all his hair off his hea
If tomorrow you want to learn to cook, how would you feel if a master chef told you "No, don't. You'll never be as good as me. If you're hungry, come to my restaurant instead".
I think there's nothing wrong with learning a new skill, whoever you are, whatever you do.
Learning new skills is what makes us human.
I'm a lousy cook - but I can cook food if I follow instructions that have accurate measurements.
That doesn't mean I shouldn't learn to cook.
For most people, they are just going to follow a recipe and you are right, that is all they need. But to be on a professional level and to be able to reproduce those flavors it takes a lot more than that. Check out the book "Professional Baking", it shows a lot of the complex nature that goes into being a pro.
Jeff's article is trying to point out that while understanding code isn't a bad thing, coding isn't the most important part of writing software. Those who think it is end up writing code without purpose, something I consider as dangerous in the long term as shoddy bridges.
If we could all build bridges in the our own yard, I think we'd see some of new fantastic bridges which we could re-use. With coding, we can.
Seriously, cooking as an analogy highlights a difference between private recreational practice and public for-pay professional practice. Building bridges, unless you live in a place where everyone has a backyard with a river in it, not so much.
Apart from at least a fundamental ability to use a stove, it is naturally not that crucial of an ability. The argument of the blog post is that it is the same with programming, i.e. It is not a necessity to succeed in life to know how to code.
I don't think the point of the post is to discourage anybody from learning to code. Rather it is a counterpoint to the recently heavily promoted idea that programming is somehow a necessary life skill.
Yes. Knowing cooking is paramount to feeding yourself and your family cheap, healthy meals.
I might be able to learn a lot of math in school, reading/writing, research (in university), critical thinking (throughout life). But being able to care for my own food, to know, what not to buy (or what to buy) and so on, helped me stay sane and in good shape.
Cooking is of course a good skill to have. So is plumbing, car repair and a lot of other things. But this is entirely besides the point.
The point was this: Is it a necessity for children to be taught [cooking/car repair/plumbing] on the same level as math, reading and writing: From 1st to final grade in school, 10 hours every week? Of course not.
Atwood argues that it is the same with programming. No matter how much we and he love programming, it is not comparable to reading, writing, math, communication and similar.
And in school you're not learning just "reading, writing, math, communication and similar".
Other disciplines learned in school are biology and its branches, like botany or anatomy of the human body, chemistry, physics, history, foreign languages like French and Latin, psychology, philosophy and so on. Not all of these disciplines are taught 10 hours per week.
Also, reading and writing are only taught in the first years. After that they teach you grammar and literary analysis, but considering how illiterate today's teenagers are, many schools are clearly doing a poor job, so to save some taxpayer's money they should just make those optional.
And seriously, I could think of a couple of disciplines I learned in school that would be less important than cooking or programming.
The parts in my comments about cooking, 10 hours pr week, and the short list of subjects, are all merely examples. Replace it with car repair, 2 hours a week and your informative list of school subjects, and the argument is untouched. It should be obvious that these details are entirely irrelevant.
The argument was that a very high proficiency in reading, writing and maths has more value for the average student, than a very high proficiency in a niche subject. A nice subject being FOR EXAMPLE, cooking, car repair or programming.
Sure, our students might benefit from these subjects. But I doubt anyone would seriously suggest giving the same level of educational focus to those areas, rather than to basic life skills such as reading and writing.
And that is Atwood's point: Programming, like car repair, is an esoteric subject, and as such not equal in worth compared to more basic skills such as reading, writing and communication. By all means, subjects such as cooking, car repair and programming is good to know. But for the average student, a high level in reading will be considerably more important than a high proficiency in car repair.
This is the point (and that's actually Atwood's point, I haven't supplied mine), which I was merely explaining to the OP, as the OP interpreted the blog post as being against learning programming at all.
A couple of people countered by argumenting against irrelevant details, such as the use of cooking and car repairs as examples of esoteric subjects. They even started arguing the value of the specific examples compared to the basic skills, which of course is entirely irrelevant to the point I was making.
On a personal note, I was not very good at math in high school and college. I learned Perl for my first job and developed better problem solving skills. I've noticed that the concepts that confused me in my math classes have become more clear.
I think people who want to learn to program are learning already. The right analogy would be teaching everyone cooking in elementary school as a required subject, together with reading, writing and mathematics.
Would that be a bad thing? Many-many-many moons, sorry - summers, ago they did that. Along with maths/etc pupils were taught practical stuff, like woodwork, cookery, etc. Not that the goal was to make them all carpenters or cooks, but just to give an idea what it is like and teach to look after themselves.
So I think that coding is something along the woodwork lines. New generations should get at least an idea of what it's like, regardless whether they're going to use it professionally or not.
I should also point out that, the more politicians know how to code, the less politicians treat computers as black boxes that "the nerds" need to perform magic with. It won't go away, certainly, but its a step in the right direction.
Of course they could be one of the minority and go on to solve one of the big problems and create huge amounts of value. Which would be terrible.
A basic grasp of computational thinking has never been more important. It's become a prerequisite for making informed decisions about the world we live in.
The world may or may not need more working programmers (or mathematicians, novelists or plumbers), but why wouldn't we want to teach these elementary skills to as many people as possible?
Came here to post something along these lines and to link to this 2006 article by Jeanette Wing, head of the Carnegie Mellon computer science department:
http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing0...
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.
edit: grammar
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[1] 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.
[1] 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.
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.
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.
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.
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.
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.
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.
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.
I've also used my ability to code to develop learning apps for my students. It's been incredibly valuable in my career.
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.
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!"
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
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.
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 :)
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.
http://pksunkara.github.com/semicolon/
http://rosettacode.org/wiki/Pascal%27s_triangle#APL
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.
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.
[0]: https://twitter.com/#!/Sniffnoy/status/201187266197065729
Are you sure about it?
What if he suddenly starts thinking that he actually knows what goes into building software?
I have this horror scene in my mind where Bloombergs of this world are terrorizing their developers, with their "deep knowledge" of computers that they picked up by doing an online JavaScript course, I mean "code year".
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.
So maybe New York Mayor don't need to code, but IP lawyers that works on software cases, and politicians voting on software related law - yeah, I think they should.
There are innumerably unpredictable circumstances that may arise in which it will prove useful.
Bureaucrats in general could all profit from some minimal understanding of programming if only to stop them saying things like: 'the computer says: no!'
(But I disagree with the post, teaching people to program would be a net gain I think but I'm sure most people won't bother so no danger of ever finding out.)
Sussman has gone on record with a talk titled, "Why Programming is a Good Medium For Expressing Poorly Understood and Sloppily Formulated Ideas." That's probably an everyday use of programming which I've not seen, and it's part of what people learn as one of these "background skills" in college: how to think of things precisely.
I still get a lot of people who are shocked when I teach them relativity. You mean it's not a bunch of mysticism about "mass is squared light energy"? You mean you can prove that this Lorentz transformation doesn't lead to paradoxes? You mean you can derive it with high-school geometry plus some simple axioms that I can clearly understand? The only part which is hard to get across is the causal structure of "light cones", because people don't think in intersecting cones. (I have had some success with calling them "expanding light bubbles," with some reference to supernova explosions.)
Coming back to clarity, and finding it, programming is a good way to pick up that habit, even if you don't code on a day-to-day basis.
There is of course one well-known disadvantage which goes unmentioned in this Coding Horror post: coders are disproportionately more likely to think of legal systems as made of immutable and strict laws. The idea that a judge is supposed to, y'know, judge the human costs of competing legal priorities, and make a decision which is both fair and in keeping with the laws as written -- this discretion seems to be missing. You see this as well with how coders approach pharmacists: it's as if pharmacy was no longer a medical discipline and was somehow relegated to counting pills. No, that's what we code the robots for. Stop equating people with robots.
But if we remain sensitive to the humanity of others, then being able to code probably functions to a net benefit, much like Jeff's example of plumbing does. I mean, there are still occasions where you need a professional, but everyone should have disassembled the pipes to their sink at some point in their life, just for the experience.
I don't think anyone is saying that (I hope). Instead we're telling people to learn to code as a means to better understand technology, and then use technology to your favor to improve your life. And when that happens, coding will naturally become more common in your life, even if indirectly (managing others who write code, but this time actually knowing what you're doing). "Coding" is just a more common part of the problem, which has a much deeper meaning. I tell everyone they should learn to code, not because I think they should be writing hundreds or thousands of lines per day like I do. But because they should better understand the world we live in. And learning to code will get you there faster.
Thinking we're telling people they should learn to code just for the sake of coding is completely missing the point. I tell everyone they should learn to code for the exact same reason I tell everyone they should learn science, politics and law. Your life will be better if you're scientifically literate and technologically literate because you'll better understand the world around you.
> can you explain to me how Michael Bloomberg would be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder?
That's the wrong question. You should be asking how can be better at his day job if he was technologically literate. And I'm pretty sure anyone here can think of many different awesome ways anyone at all could be better at their job if they knew how to better use technology around them in their favor. Let alone a major of a metropolis.
> so please pardon my skepticism of the sentiment that "everyone can learn to code".
This is a separate problem. I think everyone should learn how to code, how science, politics and law works. For their own sake. Their life will be better if they do. Implying they shouldn't try because they're not good enough is analogous to saying most people shouldn't vote because they're not competent enough to choose the right candidates. The point is, it's in their interest to do so. Now is it in our interest that they do so? And that's a whole separate issue I would really rather not get into.
Being a Mayor means it is his job, not his life, outside of work it's not our business to tell him he's wasting time regardless of whether he's learning to code or reading the first Harry Potter book over and over again.
In fact I have argued that installing apps is kind of like coding for noobs. It is modding their world in a very primitive way, by installing functions on their phone. If it was easier to fine tune those functions, it would be a net win.