I didn't intend for Please Don't Learn to Code to be so controversial, but it seemed to strike a nerve. Apparently a significant percentage of readers stopped reading at the title.
So I will open with my own story. I think you'll find it instructive.
My mom once told me that the only reason she dated my father is because her mother told her to stay away from that boy, he's a bad influence.
If she had, I would not exist.
True story, folks.
I'd argue that the people who need to learn to code will be spurred on most of all by honesty, not religious faith in the truthiness of code as a universal good. Go in knowing both sides of the story, because there are no silver bullets in code. If, after hearing both the pros and cons, you still want to learn to code, then by all means learn to code. If you're so easily dissuaded by hearing a few downsides to coding, there are plenty of other things you could spend your time learning that are more unambiguously useful and practical. Per Michael Lopp, you could learn to be a better communicator. Per Gina Trapani, you could learn how to propose better solutions. Slinging code is just a tiny part of the overall solution in my experience. Why optimize for that?
On the earliest computers, everyone had to be a programmer because there was no software. If you wanted the computer to do anything, you wrote code. Computers in the not so distant past booted directly to the friendly blinking cursor of a BASIC interpreter. I view the entire arc of software development as a field where we programmers spend our lives writing code so that our fellow human beings no longer need to write code (or even worse, become programmers) to get things done with computers. So this idea that "everyone must know how to code" is, to me, going backwards.
I fully support a push for basic Internet literacy. But in order to be a competent driver, does everyone need to know, in detail, how their automobile works? Must we teach all human beings the basics of being an auto mechanic, and elevate shop class to the same level as English and Mathematics classes? Isn't knowing how to change a tire, and when to take your car in for an oil change, sufficient? If your toilet is clogged, you shouldn't need to take a two week in depth plumbing course on toiletcademy.com to understand how to fix that. Reading a single web page, just in time, should be more than adequate.
What is code, in the most abstract sense?
code (kōd) …
- A system of signals used to represent letters or numbers in transmitting messages.
- A system of symbols, letters, or words given certain arbitrary meanings, used for transmitting messages requiring secrecy or brevity.
- A system of symbols and rules used to represent instructions to a computer…
— The American Heritage Dictionary of the English Language
Is it punchcards? Remote terminals? Emacs? Textmate? Eclipse? Visual Studio? C? Ruby? JavaScript? In the 1920s, it was considered important to learn how to use slide rules. In the 1960s, it was considered important to learn mechanical drawing. None of that matters today. I'm hesitant to recommend any particular approach to coding other than the fundamentals as outlined in Code: The Hidden Language of Computer Hardware and Software, because I'm not sure we'll even recognize coding in the next 20 or 30 years. To kids today, perhaps coding will eventually resemble Minecraft, or building levels in Portal 2.
But everyone should try writing a little code, because it somehow sharpens the mind, right? Maybe in the same abstract way that reading the entire Encyclopedia Brittanica from beginning to end does. Honestly, I'd prefer that people spend their time discovering what problems they love and find interesting, first, and researching the hell out of those problems. The toughest thing in life is not learning a bunch of potentially hypothetically useful stuff, but figuring out what the heck it is you want to do. If said research and exploration leads to coding, then by all means learn to code with my blessing … which is worth exactly what it sounds like, nothing.
So, no, I don't advocate learning to code for the sake of learning to code. What I advocate is shamelessly following your joy. For example, I received the following email yesterday.
I am a 45 year old attorney/C.P.A. attempting to abandon my solo law practice as soon as humanly possible and strike out in search of my next vocation. I am actually paying someone to help me do this and, as a first step in the "find yourself" process, I was told to look back over my long and winding career and identify those times in my professional life when I was doing something I truly enjoyed.
Coming of age as an accountant during the PC revolution (when I started my first "real" job at Arthur Andersen we were still billing clients to update depreciation schedules manually), I spend a lot of time learning how to make computers, printers, and software (VisiCalc anyone?) work. This quasi-technical aspect of my work reached its apex when I was hired as a healthcare financial analyst for a large hospital system. When I arrived for my first day of work in that job, I learned that my predecessor had bequeathed me only a one page static Excel spreadsheet that purported to "analyze" a multi-million dollar managed care contract for a seven hospital health system. I proceeded to build my own spreadsheet but quickly exceeded the database functional capacity of Excel and had to teach myself Access and thereafter proceeded to stretch the envelope of Access' spreadsheet capabilities to their utmost capacity – I had to retrieve hundreds of thousands of patient records and then perform pro forma calculations on them to see if the proposed contracts would result in more or less payment given identical utilization.
I will be the first to admit that I was not coding in any professional sense of the word. I did manage to make Access do things that MS technical support told me it could not do but I was still simply using very basic commands to bend an existing application to my will. The one thing I do remember was being happy. I typed infinitely nested commands into formula cells for twelve to fourteen hours a day and was still disappointed when I had to stop.
My experience in building that monster and making it run was, to date, my most satisfying professional accomplishment, despite going on to later become CFO of another healthcare facility, a feat that should have fulfilled all of my professional ambitions at that time. More than just the work, however, was the group of like-minded analysts and IT folks with whom I became associated as I tried, failed, tried, debugged, and continued building this behemoth of a database. I learned about Easter Eggs and coding lore and found myself hacking into areas of the hospital mainframe which were completely offlimits to someone of my paygrade. And yet, I kept pursuing my "professional goals" and ended up in jobs/careers I hated doing work I loathed.
Here's a person who a) found an interesting problem, b) attempted to create a solution to the problem, which naturally c) led them to learning to code. And they loved it. This is how it's supposed to work. I didn't become a programmer because someone told me learning to code was important, I became a programmer because I wanted to change the rules of the video games I was playing, and learning to code was the only way to do that. Along the way, I too fell in love.
All that to say that as I stand at the crossroads once more, I still hear the siren song of those halcyon days of quasi-coding during which I enjoyed my work. My question for you is whether you think it is even possible for someone of my vintage to learn to code to a level that I could be hired as a programmer. I am not trying to do this on the side while running the city of New York as a day job. Rather, I sincerely and completely want to become a bona fide programmer and spend my days creating (and/or debugging) something of value.
Unfortunately, calling yourself a "programmer" can be a career-limiting move, particularly for someone who was a CFO in a previous career. People who work with money tend to make a lot of money; see Wall Street.
But this isn't about money, is it? It's about love. So, if you want to be a programmer, all you need to do is follow your joy and fall in love with code. Any programmer worth their salt immediately recognizes a fellow true believer, a person as madly in love with code as they are, warts and all. Welcome to the tribe.
And if you're reading this and thinking, "screw this Jeff Atwood guy, who is he to tell me whether I should learn to code or not", all I can say is: good! That's the spirit!
| [advertisement] Hiring developers? Post your open positions with Stack Overflow Careers and reach over 20MM awesome devs already on Stack Overflow. Create your satisfaction-guaranteed job listing today! |
Barry -- did you read beyond the first paragraph? Look for the paragraphs beginning with "On the earliest.." and a bit beyond.
Jeff Atwood on May 25, 2012 3:28 PMI remember when Jeff Atwood used to post about code and real programming challenges and solutions. Those were the days. This "You should do (or not do) this because I know better" junk you've been posting is not something I find interesting at all. Guess it's time to unsub the rss feed.
Chris Vann on May 25, 2012 3:34 PMI think advocacy of "learning to code" is focused more on learning to exercise the sorts of logical-thinking skills needed to get code to work, rather than on narrowly-focused learning of only the programming language, operating system, or input/output device that happens to be trendy at the moment.
Dan Tobias on May 25, 2012 3:39 PMCoding is a side effect of solving problems not the other way around. I have to say that i agree with your article, writing code will become just a step in the evolution of creating software not it's end like it is today.
Zwanchis on May 25, 2012 3:43 PMMakes so much sense to me looking back. Everyone assumes that I am a programmer because my Dad is. Which is sort of true because he told me not to become one so I immediately tried it anyway and loved it!
Coding Kiwi on May 25, 2012 3:45 PMJudging by the harsh reaction to your first post, I think many of our colleagues have become a little too obsessed with the programming part of their profession. We should be focused on building better solutions. Programming is probably no more than 20% of the work in delivering a solution. Projects rarely fail because of technical issues.
As others have blogged, we should be spending more time becoming better communicators and solution builders (and encouraging others to do the same). Instead it's easier to have the same old programming arguments.
I think the issue some take with the "everyone should learn to code" movement is that it seems to put coding at the center of the information age, while in reality it's just a small part of what goes into solving problems. It's also the part that's least likely to look the same in 20 years as it does today.
The main issue I have with the "please don't learn to code" movement is that it's pure whining, it does nothing to solve the purported problem. "Do what you love" is far from new advice. People who do what they love do not need encouragement or (much) guidance.
The problem is with the rest of us. People spend a total of years of their lives watching (non educational) TV. I'd rather they learn to code JavaScript instead, if there's something that motivates them. Yes, of course it would be even better if they learned to solve problems in general or to communicate better or to play the violin or what not.
But, you know what? Codecademy and friends are already there, offering a structured way to empower people to do things they thought were out of their league. And they aren't forcing anybody to subscribe and try to learn.
By all means, start a solvecademy or communicademy, I'm all for it. But let people decide what they want to do with their time. Whenever you take people off TV and Facebook and get them to instead acquire a skill, it's a net benefit to society. And when you whine and say don't without offering a similarly guided way to acquire a different skill, you are not adding value.
You are just whining.
Vinko Vrsalovic on May 25, 2012 4:17 PMThis whole new "everyone should code" movement is based on the predicate that all marginally scientific pursuits can be helped by knowledge of programming (more importantly automation).
We have evidence too. Every time a tech startup attacks a new domain and conquers it we can point to that and say, if their competitors knew the first thing about programming (not necessarily the second or third thing) they would have realized there were some serious deficiencies in their business and corrected. Maybe they could have hired some programmers and survived.
Justin Scheiner on May 25, 2012 4:26 PMThere is still something bothering me about your stance, however I am not as eloquent and, probably more important, experience as you and have trouble to put those feelings into words. I am still going to try though.
Pretty much every area of life can be deeply interesting, learning about ancient civilizations, about their leaders the sorrows of the population about incredible statesman like Cicero. This is deep and fascinating. Researching a tiny molecule like ATP synthase, a tiny tiny motor on which all higher life is based upon. Interesting beyond description. Caring about an elderly or disabled another person, making their lives better. Deeply touching and fulfilling. I want to highlight that one can find something a person can enjoy and be fulfilled of everywhere. This I think at least we agree upon.
So why not programming? I find your attitude exclusionist and maybe somewhat elitist. Problems in computer science in research and programming in general are also deeply interested. Every person should be exposed to a wide array of fields. So again why not programming? If the person you told us about had been exposed earlier to coding. His spark might have been ignited sooner and he might have had a very different and maybe more fulfilling career path. Maybe. Who knows?
I am troubled by your “survival of the fittest” approach to programmers. I know a lot of, in my opinion at least, programmers with incredible amounts of potential who think of themselves as not good enough and are in constant doubt of themselves. This is especially prevalent in the few girls in CS that I know. They are interested in coding, for a good reason, because it is interesting. The social stigma that programmers are supposed to be male, your "the toughest will survive" attitude (again as society at least pictures: a male) makes that even worse. There is not a single reason why girls or anyone should be excluded from this party.
You might be tainted by the black sheep, the ones who fail at FizzBuzz and still proclaim themselves the grandest programming being on earth. But that is just a vocal minority, the ones that are for whatever reason secure enough in themselves (or maybe desperate) to apply for random jobs they are not qualified for.
To sum this up, I think that we are actually agreeing to a large extend. Do whatever rocks your boat. Do not become a programmer in hope of a fat paycheck without having the passion for it. But I heavily disagree with your conclusion. Stumbling upon the programming world should not be a random occurrence like hacking a game you enjoyed. That is a random fluke; it might not happened for whatever reason. Maybe your family might not be able afford a computer, maybe they would not allow to experiment with it. So the recent “Learn to Code” campaigns are important.
Through the German education system I was exposed to coding in the sixth grade, if I recall correctly. I had learned through a similar path as yours a lot more a lot earlier then what I was thought in school. For other kids, that was the first time they had to solve a problem using explicit and exact instructions for a machine. I stuck with it, others did not. So what? I was exposed to a lot of things that I find are a “cute” way of spending ones time with at best. Things others have spent a lifetime studying or working with. But I am still incredibly glad that I was given this possibility. The possibility to get interested in something that might fulfill me. Is that not exactly what you want? Why the exclusionist attitude then?
When I was in high school and college, we took chemistry classes. I learned basic chemistry, some of the tools chemists used, what issues chemists deal with.
I'm not a chemist today. But those classes gave me a basic understanding, which allows me to talk a bit more with chemists I may meet, and which help me understand social or political issues that may involve chemistry, and which let me judge whether a career in chemistry was for me. (It wasn't, and that's OK.)
It seems reasonable that everybody might want a similar level introduction to programming. They don't need to become master programmers, or code every day, or even code ever again. But it will inform their interactions with coders and code issues as these intersect their lives in other ways.
Paul Workman on May 25, 2012 4:35 PMA programmer falls in love with programming naturally. You can't force someone to make great programs. When you program for the very first time itself and don't enjoy that, then probably you wont' find it interesting later either.
Almost all the great programmers i have read about were interested in making their own stuff from the beginning itself. The energy and will power to make great products comes automatically if you really love programming.
Interestingly, i posted an article with the same title as yours roughly 2 weeks ago. So, you want to be a Programmer
You concluded this post perfectly. If you enjoy programming and making stuff, then just go ahead with it. Don't care what others tell you to do.
Rahul Singh on May 25, 2012 4:36 PMI'm not sure why there is so much drama surrounding this meme. Honestly, if programming was for everyone, everyone would already be doing it. Would I like programming to be easier so that everyone could be doing it in the future, even if that put me out of a job? You bet! There are other things in life that I could jump right into and honestly find as interesting or even more challenging then twiddling bits in a computer.
Shawn Neal on May 25, 2012 4:52 PMWTH is truthiness?
Jonathanwkelly on May 25, 2012 5:23 PMI find myself getting deeper into the inner workings of software not because I love it or agree with the process, but because I think it's been done incorrectly all along. Looking forward to more people involved in coding and hopefully tearing down the tower of Babel that's been constructed these many years.
Wwestfall on May 25, 2012 5:28 PMJeff> what do you suggest is the best way to teach people basic digital literacy if not through code? I imagine that we differ on what basic digital literacy actually means...for me, it's e ability to understand how a problem can be abstracted and broken down into something solvable by, say, a for loop. Ive worked with a lot with otherwise very smart and digitally literate (they know how to use Twitter, Excel, even Access) but they still don't grasp why it's important, for example, to not mix "true", TRUE, and "Yes (see note)" in a column in a spreadsheet meant for programmatic parsing. I don't think this requires knowing how to use gcc or memorizing the classic design patterns, but I'm at a loss to understand why logical job professions can't understand these concepts. The result is that as programmers, we spend a lot of time writing code to compensate for fuzziness...which is a headache for the client and future programmers to maintain.
Maybe there's a way to improve data literacy without programming, just like there's a way to teach word processing without the actual use of a computer...but successes have been few.
I wrote a response to your original essay, demonstrating the use of simple code to simplify a common problem in fashion photography (for smaller operators), Others in more data-dependent fields can obviously think of more...I think you vastly underestimate the digital ignorance of non-coders
http://danwin.com/2012/05/fashionistas-and-bureaucrats-and-journalists-please-learn-to-code/
Dancow on May 25, 2012 6:08 PMI haven't even read "Please don't learn to code" but I agree with the sentiment one hundred percent.
All the things that could be learned by coding can be learned by studying math, physics, poker, go or pretty much anything else that engages the rational mind. It's only when one needs code that one should learn to code and if one can learn the previously mentioned things than learning to code should be no problem at all.
This reminds me of when my linear algebra teacher told the class that we were going to skip UL factorization because one never needs it and if one does need it and can't learn it from reading the book then one is screwed anyways.
Learning is for donkeys unless you need it. Learning how to learn is where it's at.
Aaron Sterling on May 25, 2012 6:10 PMI remember just learning to code and looking at the compiler and the API book and thinking "There's no way I'll ever learn all this stuff. It looks really hard". Then, as I was doing my assignments I began working on programming problems and remember being thoroughly enthralled with solving those puzzles, making the computer do as I wanted and hunting out those bugs.
I remember that feeling of working for 10 - 14 hours and being disappointed that I had to go to bed - and waking up in the middle of the night with a solution to a problem.
If coding is what you love doing, then do it. Don't do it because someone tells you it's important to know.
Dave Harding on May 25, 2012 6:28 PMI think the anger expressed is somewhat coming from our inability, as programmers, to provide the tools that users actually need. Spreadsheets were great advances, taking financial calculations out of the domain of programming and into the handles of the financial workers themselves.
Since then, we haven't seemed to be able to find anything but macros and visual flowcharting to take "end user programming" to the next level. So instead of finding ways to allow end users to automate their tasks and configure their computations, we are throwing "learn to program, noob" out as a "solution".
Godeke on May 25, 2012 6:39 PM> I fully support a push for basic Internet literacy. But in order to be a competent driver, does everyone need to know, in detail, how their automobile works?
But Jeff, that's exactly what the "everyone should learn how to code" movement is. We are not disagreeing. You are misunderstanding our message. Maybe we should have been saying "everyone should be technically literate" instead of "everyone should learn code". I agree it's ambiguous and probably the source of this confusion.
This has nothing to do with people following their joy or not. I also advise people should learn how to cross the road. If you believe you shouldn't because you don't find any joy in it. Then don't, and get run over.
Vandré Brunazo on May 25, 2012 7:02 PMMany of the negative comments here serve only to prove the point which the post is trying to make in the first place.
There are clearly people here who know how to code, and believe that this is a basic life skill, like reading or writing, which everybody should have, but who lack some pretty basic English comprehension skills themselves!
Those who suggest that this post is elitist, or trying to exclude people, or telling people what they should or should not do, appear somehow to have interpreted the article to mean almost precisely the opposite of what it actually says.
How does that happen? Yet these people can, apparently, code!
Patentology on May 25, 2012 7:07 PMJeff, I get you.
Everyone should learn to rebuild car transmissions and engines. And everyone should learn how to farm. And everyone should learn how to represent themselves in court.
There's a difference between understanding "knowing enough to get yourself in trouble" and actually digging in deep enough to get yourself out of trouble. I agree with you Jeff... too many people advocate we all know about all subjects enough to get us out of trouble. But folks, there isn't enough time in a life to do such. So focus on what comes naturally and makes you happy (because you are wildly successful at that domain and easily grasp it).
There's nothing wrong with knowing just enough to get in trouble as long as you know that's all you know and fall back on someone who can get you out. Don't abdicate, but delegate. If something comes up and sounds fishy, then dig a little deeper to verify your "expert's" statements, but don't go off studying everything so you can tell everyone else how incompetent they are. Just in time folks, YAGNI.
Justin Steele on May 25, 2012 7:27 PM"Here's a person who a) found an interesting problem, b) attempted to create a solution to the problem, which naturally c) led them to learning to code. And they loved it. This is how it's supposed to work." .. now swap code for maths, or science or english..
It may not an exact analogy but that's how its supposed to work for any subject. Sadly it so often doesn't get taught that way.
I'm not one to advocate elitism but if someone wants to suggest that I learn physics better because one day civilization might find itself in space? Please don't waste your breath. Even if that were to occur that'd still be someone else's job.
I know hardly anything about my car in terms of mechanics and I can still drive it. I can't cook but I still eat. I can't act or film but I still watch TV.
If everyone needed to learn to code for day-to-day situations then they would learn it. Most computer issues can't be solved with programming but rather with learning how to install a printer/software or learning to swap out a mouse/screen.
People should learn to be their own help-desk first. That's where I started and no knowledge of code was needed.
James Khoury on May 25, 2012 7:48 PMtoiletcademy :)
Tom_dignan on May 25, 2012 8:18 PMJeff,
I agree with your comment regarding the CPA story and "this is the way it's supposed to be" but I took a little issue with some of your tweets. Especially the ones about plumbers. I'm a developer not a plumber but I have repaired and replaced my own toilets. :)
I think it's an important thing to be able to do things yourself. Maybe we should bring back more shop classes and teach coding at an earlier level. Coding is almost like today's version of shop. It's a skill that can help you get around the world in which we live in.
Sometimes it feels like if you're toilet keeps flushing, call a plumber. If your computer is broken call Geek Squad. If your stomach is grumbling call for take out. And yes, if you need to have your computer or phone do something special, get an app or programmer.
It seems like more of an emphasis has been put on consuming and not creating. This country gained strength by building great things and we need to keep doing more of that. Coding is something we need to keep doing well and doing a lot of but that shouldn't be the only thing we focus on.
Somehow the US became a place where ideas are formed and the grunt work is sent to other countries were it's cheaper.
We need people that are able to do that "grunt work" locally and we also need to have jobs for them. Don't mean to sound like an isolationist but I think it's a good idea that if we're forced into isolation we're able to sustain ourselves. Just like I think it's important to be able to fix a running toilet that's keeping you awake at 3am when plumbers are $#^&@ expensive.
But I'm going to go back to my first comment I made in your first post. Bloomberg is just helping promote a local business :)
Www on May 25, 2012 10:17 PM> "But in order to be a competent driver, does everyone need to know, in
> detail, how their automobile works? Must we teach all human beings the
> basics of being an auto mechanic, and elevate shop class to the same
> level as English and Mathematics classes? Isn't knowing how to change
> a tire, and when to take your car in for an oil change, sufficient?"
For God's eternal holy sake, people:
Knowing "hello world" != "Knowing how to change the alternator"
Knowing "hello world" == "Knowing how to turn the headlights on"
Computers are computers and cars are cars.
How many times do I have to say it?
How many times do I have to say it?
How many times do I have to say it?
How many times do I have to say it?
How many times do I have to say it?
How many times do I have to say it?
I agree with you on this post (and the previous more controversial one).
In a few years I'm going to teach my daughter how to code, if she's willing to learn, but for a career choice I will recommend something else.
Johannes H on May 25, 2012 11:19 PMThis all seems like a bit of a storm in a teacup to me. I can't think of one of my none programmer friends who's expressed an interest in learning to code for the sake of it recently.
Seems to me the learn to code movement is driven by those who think they can make a quick buck by coding and those who are happy to make a quick buck trying to teach them.
Philip Mander on May 26, 2012 12:56 AMAnyone who makes salary, personal or other decisions about people who call themselves coders, hackers, programmers, developers or similar should learn to solve a real-life problem by programming and all that that process entails (encoding, i18n, lint, security, etc.). Given sufficient training, these people would gain a healthy respect for the seemingly enormous time it takes to solve problems which are simple to formulate (and which are only attempted because we're standing on the shoulders of giants), the complexity of existing programs, and just how much of a tossed-together mess 99.9% of all code is, including the reasons thereof.
Why people hates your position so much? Why they feel the urge of telling you what you should post or not. But most important, why they don't get it, that this is the question of them all.
Francesco Freezone on May 26, 2012 2:27 AMNo, not everybody needs to learn to code, to the same degree, that not everyone needs to learn maths. How many of us apply the maths we learn in school to our lives (apart from the basics). Yet, is considered important that everybody gets exposed to maths in school. This is part of a rounded education.
What would happen, if maths wasn't thought in schools beyond basic level. Do you think society would move forward from that? Do you think that those who love it, would naturally pursue it outside of class room. Do you think, they would do it in sufficient numbers to keep wheels of industry moving. I don't think so.
I would consider myself as having an aptitude for programming and a love of programming, yet I never got exposed to it until I was 27. I wish that programming had been a subject in my school. Of course, a lot depends on how the subject would be thought (preferably project based rather then exam based).
Now, I look at my own country, Ireland. Stuck in the biggest slump since the founding of the state, with 15% unemployment rate. You might think that in this environment, it should be easy to find workers. Not in programming, though:
http://www.independent.ie/national-news/it-crisis-the-70k-a-year-jobs-we-just-cant-fill-in-ireland-3072132.html
There are thousands of vacancies in this sector, and companies are having to fill these roles by importing staff.
This is nuts in my opinion. Thats why, I think programming should be thought in schools, so that we reach the minimum quota of programmers that we need to move forward.
Going back to the concept of a rounded education. Maths is considered a vital component of a rounded education, because it permeates the world of industry and progress, amongst other things. Without a sufficient amount of experts in this area, society could not move forward.
By the same token coding is driving almost every area of industry today. Think of robotics, industrial design and modeling, energy regulation etc. Its upturning the music, film, education and news industry.
Can you say the same about plumbing?
> Apparently a significant percentage of readers stopped reading at the title.
It's easier to dismiss then the discuss. Really, when you start your article with this, it's all down hill from here.
Regardless, you go on and on about passion and importance, and yet you stumble right on into the point many where making.
> Must we teach all human beings the basics of being an auto mechanic, and elevate shop class to the same level as English and Mathematics classes?
Now, I'll excuse the ill-informed comparison of the core elements of programming to auto mechanics (something that has, at it's core, not changed to something that has change dramatically), and instead focus on English and Math.
Somehow knowing what a participle phrase is is more critical than understanding an if clause. Reading and comprehending Frankenstein is of much greater importance then understanding the basics of a programming language. That knowing how to find X is critical to the daily life in a way that ordering a list isn't.
And all these coming from a man who helped champion the copy/paste programmer.
> So, if you want to be a programmer, all you need to do is follow your joy and fall in love with code.
Such wonderful touchy-feely sentiments. Do what you love.
It's important to learn coding not because someone might be a programmer, but because of the value learning the core elements of programming provide. Dismissing it out of hand simply because you feel there is no value in the problem solving skills it teaches is no better than supporting Math or English because that's the way it's been done. Math and English are important, not because someone might become a Mathematician or a writer, but because of the skills it teaches. Problem solving and comprehension in communication.
But whatever. Taking a dismissive approach to this is not surprising, considering what you've done.
Jason Lotito on May 26, 2012 4:36 AM@Chris Vann
"""Guess it's time to unsub the rss feed."""
Don't let the door hit you on the way out. Seriously, what's this with americans always announcing their intention to "unsubscribe" whenever they read something they don't like? I've met this in outlets ranging from the "The Atlantic", to trade press like "Keyboard" and "Dr. Dobbs", and lots of blogs. Just unsubscribe if you feel like it, as for the self-entitled threat to unsubscribe: nobody cares about it.
@Penguin_Pete
What's that an "argument by repetition"? You can say it one million times and you'd still be wrong. Yes, cars are not computers. That's why it's called an ANALOGY.
Bugpowder on May 26, 2012 4:59 AMI am 25-year old student of Mechatronics and I partly fund my studies by completing the projects on http://www.vworker.com. I write software for internation customers and I am not sure, nor do I care, if I fall into the domain of "true software developers" or not. All I know that I make some good bucks out of it and that I often ignore my studies in sake of programming, mostly because I feel so happy doing it and learning new stuff in the process.
I don't think anybody should be objected by this article. I am most certainly not. If someone finds himself insulted, perhaps he should ask himself a question: "why do I feel insulted in the first place". If you love what you do, then do it, no matter what it is (as long as it does not harm others, of course). If you're forced to do it, no matter how good you're at it - it's not your field, choose something else for your own sake.
Nikola Malešević on May 26, 2012 5:33 AMI like your blog, but I think you're off the mark on this one. Not everybody needs to be a professional programmer (just like not everybody needs to be a writer, mathematician, scientist, or language translator), but I do think everybody should study a little programming for pretty much the same reason they should study writing, math, science, foreign languages, etc.
For years I've told anybody who will listen that it's a tragedy that not everyone is taught to draw in school. (I learned as an adult.) Everybody thinks it's an innate skill that a few people have but they don't, but they are wrong. Drawing is a basic skill anybody can learn, just like reading, writing, or arithmetic. And furthermore, drawing is really just seeing with a critical eye, a crucial literacy in a visual culture, even if making art has nothing to do with your profession. I think a similar argument can be made about programming.
Basic programming (not crafting commercial products) is just formalized logical and methodical thinking, which never hurts to have in your arsenal, and in addition it helps to give you a mental model for understanding the strengths and limitations of these devices and apps (not to mention the people who make them) that play an increasingly dominant role in our daily lives, economy, and public policy. In the digital age, this is basic literacy.
I really liked Douglas Rushkoff's recent (and pleasingly brief) book, "Program or be Programmed," in which he lays out the intriguing thesis that each major technological revolution has not lived up to its potential, and has been accessible only to an elite, while the masses always stayed a generation behind:
The invention of alphabets could have turned everyone into readers, but didn't; an elite could read, everybody else listened and only got what the elite decided to read to them.
The invention of the printing press could have turned everyone into writers, but didn't: the masses became readers (finally fully participating in the previous revolution), but only an elite wrote and controlled the printing press, and thus controlled most of the public discourse. Radio, audio recordings, TV, movies, and video were pretty much just an extension of this -- content consumed by many, but produced by very few, who in the process set the bulk of the societal agenda.
Now we're at the digital revolution. It has unlocked the production of audio, video, and writing, and the means for widespread distribution of them; now everybody is a content producer -- of the kinds of content that the previous revolutions brought us. But the salient difference of this new technology is its programmability. What will we do? Will the masses control this technology themselves, or will they be passive receivers of whatever devices, apps, and features are handed to them fait accompli by the elite?
I'm not arguing that everybody should be a professional programmer, or even a hobby programmer, but rather that it will be a tragedy if only a small elite learns enough to appreciate what's involved in the task, to form a mental model that lets them understand and reason about hardware and software, and feel empowered that they could, at least in theory if they wanted to, make those devices do what they want, not just what somebody else decides to offer them.
"Is it punchcards? ... ". Effete modernist.
I programmed using punched paper tape for input, often patched with scotch tape. Beat that, horse'n buggy braggarts.
Is there any correlation between love of coding and love of crossword puzzle solving?
Observito on May 26, 2012 3:21 PMI'm amazed at how offended people are getting over this.
I don't think anyone should need to try coding at all. I know a hell of a lot of people who wouldn't get anything out of coding.
Nickjbedford on May 26, 2012 3:48 PMOne thing I like about learning to write code is that it makes you understand how computers solve problems. When you code, you have to break up your problem into dozens, hundreds, or thousands of sub-problems. Different from other fields, if you don't have a crystal clear definition of these sub-problems, you will drown instantly. A task as seemingly simple as recognizing a face - something our brain does in an instant - takes decades of research to approach, and consists of millions of sub-problems that brilliant minds have worked years solving. Programming forces you to take apart everything. What is it that actually makes up a face? What do all human faces have in common? How can I detect one face in a crowd of hundreds? How do I detect a pattern in an image? How can I tell a face apart from a balloon with a face painted on it? et cetera et cetera. Actually writing your own code makes you appreciate how much effort it takes to do the seemingly simplest things, and it takes away the impression that computers do magic. And seeing as how scary, hairy, and HUGE the rise of all this insanely complex technology is, understanding it a little bit can't be a bad thing.
But I guess it's not certain how much real insight a little bit of coding can get you in this respect. Plus the idea of having some basic knowledge applies to other fields as well, I'd say most notably economics.
Anyway, this feels a bit like a non-discussion. If some people want to learn to code, why not let them? Most of them will pull out quicly, and the few who persevere will bore us at parties with their coding knowledge. That's not a pleasant idea, but worse things happen.
Jeff,
I couldn't agree more. I remember back in high school, I would see kids with games on their TI-83+ and it fascinated me that people could "somehow" make games that run on a calculator. And so my curiosity led to me writing my first code in BASIC on my TI-83+ graphing calculator.
Looking back, I wonder where I would be today if the internet didn't exist 10 years ago. I might very well not be where I am today. The sheer wealth of resources out there for kids and adults to find by merely querying their favorite search engine is insane... we don't need to be trying to teach everyone to code, those who desire/need to learn to will do just so without it being imposed upon them. There are very few barriers to entry, if any at all for most. Being relatively young, and only having heard stories about the days of punch cards, vacuum tubes, etc. I can only imagine the barriers to learning to code that existed back then.
Mikeru on May 27, 2012 6:00 AMHad I taken a programming class in middle or high school, I might have found my love for code before my 30's. Had the people in my life been been less discouraging when I wrote a text based adventure game at 19 for fun, I wouldn't have a final next week to deal with. Girl nerds in the 90's was still rather taboo. So I'm all for a mandatory basic programming/comp sci class when kids are being forced to choose what they are going to do for the rest of their lives.
However, I agree with the meaning of this and the previous harsher post. The learn to code movement is just rather silly. You can get the benefit of the problem solving easier from logic puzzles without having to bother with syntax. You can understand computers quicker by googling the issues that come up instead of asking someone to fix it.
Luthi on May 27, 2012 3:59 PMThe posts get longer and less cogent.
KevDog on May 27, 2012 6:06 PMTo take yourself to the next level of development, from just a rank-and-file, there has to be passion. Otherwise it's just for the money. At least that's what I get from your telling of Parable of the Accountant.
To the car analogy (and yes every analogy breaks down), I would say that while you don't need to learn how to change a tire to be a competent driver, it's at least worth learning how to do.
Coding might not have the same "life-skill" value as changing a tire, but you can make the argument of learning to retrain your brain towards how to analytically solve problems is. That's the value of learning how to code. Not so much the hello world, but to stop and think "How can I write software to make this easier."
Should everyone learn to code? No.
Should everyone who uses a computer for their work, learn to code. Yah, I think so.
I have to agree to some extent with the backlash against this post and your previous post, I do think you're missing the point.
It's not about learning to code, it's learning *when* to code. Despite what we would all like to think is common knowledge - that computers are good at doing repetitive tasks, this is still widely unknown amongst non-technical users. Ineffeciencies and problems that could be easily automated are highly prevalent in a vast number of companies, yet those running up against these problems don't even seem to recognise that they're problems that could be solved with a computer.
I completely agree with you that not everyone should become programmers, but the easiest way to help users understand the problems that programming helps to solve is to teach the very basics.
To try and use your plumbing analogy, if water starts spilling across your kitchen floor, everyone knows to call a plumber. If people in your company spend all day typing the same values into the same fields of a database or a spreadsheet, it's still not largely known to call a programmer.
The second, slightly orthogonal issue is that the essence of programming is generally not taught in schools, meaning we're missing out on the opportunity to introduce the most suitable students to the field unless they stumble upon it purely by accident.
I'm firmly in the "everybody should learn" camp, but I think the point is being missed by both sides (here at least, and in some of the spill-over discussions I've seen elsewhere).
At the risk of "No True Scotsman", the universalist argument has not been that people can't truly be users (as opposed to "the used", I suppose) unless they know how to program their own computers, or at least write effective macros and utilities, the Stallmanites (both orthodox and conservative) notwithstanding. As Jeff and others have eloquently pointed out, for most people a computer is nothing more than a versatile sort of appliance. And if we in the development community are doing our jobs properly, we are making $person awesome at $task. (I really miss Kathy Sierra.)
Programming will probably always be a specialist venture. We may be able to modularize the heck out of things, but it's unlikely that we'll ever get much beyond the equivalent of a Moog synthesizer. Remember them? You could spend hours playing with patch cords without ever finding a way to change the pitch with the keyboard, and getting anything other than a rudely biological sound out of one required either special knowledge (whether that be book learnin' of the waveform interaction or experience with the synth) or luck. People who are trying to accomplish $task will learn what they need to use to do $task; their productive value lies somewhere other than in building TaskDoer 2100 (which is where our value lies).
There has also been an intimation that people will gain a clearer understanding of the development process, including things like project estimation and programmer husbandry by learning to sling a bit of code themselves. That is both a very long way from the truth and a long way from the universalists' point. In terms of the truth: do you really want somebody basing their understanding of highrise engineering difficulties and construction schedules on knowledge gleaned from building a gazebo during a carpentry night course? Because that's the sort of thing we're talking about here.
No, the true utility of having everybody learn to program (not necessarily code, but program) is to be found in the education of our children. As a side effect, we may find that we increase the pool of potential professional developers that we can draw from, but that, too, is missing the point somewhat. We have a tremendously narrow view of what it is that we're doing simply because the main application of it is accidentally tied up with computers at the moment, and because the bloody-minded literalness of digital computers (or, as Hofstadter's Crab so wonderfully named them, "smart-stupids") is an excellent milieu in which to test what we are really doing. What we are really doing is formalizing process, and that has application just about anywhere you care to look.
There are pedagogical aspects that need careful attention; what is taught and explored needs to be generalized to the wider world. There are just too many things that kids are exposed to in school without ever really learning their applicability outside of the classroom. We laugh at Schlemiel the Painter, but there are people out there in the real world performing strenuous physical tasks with a big-O of n^2 or n! without having any intuitive understanding of the complexity or how to determine whether there might be a better way. And what of those whose job it is to write instuctions for other people? That's not the exclusive province of documentation departments. Having a sense of how things may be interpreted, how things can go wrong, debugging, and so forth certainly wouldn't hurt. You may be able to do a top-down process improvement by bringing in time-and-motion analysts, but you'll get a lot more bang for the buck (and a lot more bucks from the bang) if people working at the pointy end can optimize their own work.
We who are in the biz are going to have to know (ideally) the "multivariate calculus" level of the formalism, as well as the accidental details of computing languages and environments, in much the same way as any specialist needs to have an in-depth technical knowledge of their area of specialty. That's not what needs to be universalized. It's the "arithmetic" level, maybe with a bit of "basic algebra". And while programming a digital computer might be a good vehicle for developing some of that understanding, it's not about getting everybody up to speed in JS/Java/C#. Raspberry Pi will include Scratch; Alice/Looking Glass is similar for kids beginning slightly older. I'm still a fan of Logo and chasing turtles around -- I never actually used a Logo machine, but I grokked recursion after reading about it (and before practical home computers).
Kids who want to go on to "real" programming can, using real-world programming tools, but if everybody had a basic understanding of how to decompose tasks and a feel for patterns of performance (learning big-O without ever thinking of saying the word asymptote), they'll all benefit. Well, unless they go on to study and then teach English Lit or something silly like that.
Stan Rogers on May 28, 2012 11:24 AMJeff Atwood write extraordinary posts, the extraordinary is that after all the verbose he don't get it.
"So, no, I don't advocate learning to code for the sake of learning to code. What I advocate is shamelessly following your joy."
That's not new, I would say "do what you love", and that doesn't mean that "not everyone should not learn to code".
There are always things that you should learn and you do not love, and things that you shouldn't but you do love.
When you learn to code, you do not learn how to write commands in a certain order, you learn how to think and solve problems.
Mike Cl on May 28, 2012 12:14 PMWell since most of us are actually coding against frameworks that are very abstracted from the actual "computer" upon which they reside, I don't think any of this kind of stuff strictly counts as computer programming...
Whilst I would agree with Jeff that this drive will not necessarily make good problem solvers (afaic, programming starts and ends on paper; anything else is just an implementation detail) and is perhaps more likely to end up producing Schleimels than anything else, I would also point out that if you throw enough mud at a wall, some of it will surely stick and as a way to perhaps encourage people to see if they are ready to try it for "real" - people who for example are already programmers (just not computer programmers - anyone who has ever designed any kind of a process is already a problem-solver) then I say, why not?
If nothing else it might help to de-mystify the profession and help someone to express their ability in something other than human language.
On the flip side; a part of me is scared that someday I'll have to deal with a client who is convinced I can build a facebook clone in a week because they can "debug HTML, it's not that hard" :)
So you should be doing what you value instead of learning for the sake of learning… Except you can't value something you haven't learned, so your advice doesn't help. Also, you should probably value learning in general anyway as it leads to knowledge and also keeps your brain healthy. Learning doesn't guarantee living a good life, but it's arguably the best approach. This post is just a self-serving attempt at damage control after finding out that "please don't learn" is seen as harmful advice. The only good follow-up from you would have been to show humility, but instead there is more verbose guru-style twaddle about how you are right because of . It's the point where at least this reader is parting ways with Coding Horror.
Slikts on May 29, 2012 12:44 AMIn the future, everyone will be interacting with code. A lot of us are going to be interacting with programs that let us tweak settings or maybe even churn out something resembling a finished program or homepage. Maybe we will even interact with honest-to-god coders.
To dot any of that at some non-ridiculous level of effeciency, we will have to learn "the first thing about coding". Maybe even the second. We need to code, a bit, in school. The same way we need to "math around" a bit in school, in order to understand basic tenets of math (ie. tax, purchases, loans, engineering, the world).
This is absolutely horrifying:
"On two occasions I have been asked,—"Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?" ... I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question. "
And it is still going on, in the corridors of economic and political power. And teaching everyone the first couple of things about coding would alleviate it.
PS: If you think post means that "everyone should be a programmer", you read it wrong.
D on May 29, 2012 3:25 AMIt's easy to setup straw men on either side of the debate. You're not saying that anyone should be computer illiterate while your detractors don't claim that everyone should write an OS. As you mention, 'coding' is tricky to define. Do Excel formulas count? How about simple MS Office scripting? I'm sure we'd all agree that everyone should learn basic skills that someone out there will call 'coding'.
Regardless of where you draw the line, what I think you're missing is that programming skills are only becoming more important as time goes on. Minimal acceptable competence is not a static concept. Although the ability to read was once only of marginal importance, forward-thinking individuals realized that it's nigh impossible to err on the side of becoming too literate. While programming is not currently essential to a majority of occupations, it's difficult to predict what things will look like a few decades hence. Learning to program might not be worthwhile for Michael Bloomberg but I can't imagine not teaching a child born in this millenum. The 'plumbing' analogy really breaks down when applied to more widely used skills such as 'algebra'.
Hollis Waite on May 29, 2012 8:24 AMCan you move the coding horror blog to the stackexchange already so we can vote replies up/down....
wading thru all the posts can be tedious, but crowdsourcing the quality ones (both positive and negative) would be great.
Eric Law on May 29, 2012 8:52 AMI think anyone who works with data needs to learn some basic programming. Even if they never write programs, the experience can at least give them a taste of what programs can do.
There is a big difference between computer and cars or plumbing: computers are infinitely programmable, and the average user often has no idea about the many things their computer could do for them, if only the right program for it existed.
Despite the advances in what software written by professional programmers can do, there will always be some obscure need that is so specialized that it can only be solved with a custom-written program.
People know that if the plumbing doesn't work, they can call a plumber, but they often don't even notice that their computer "doesn't work" and they could/should call a programmer. By "doesn't work" I don't mean that it is malfunctioning, but that it is being underutilized.
I've had coworkers who wasted hours, or even days, doing repetitive labor on a computer. When I learn about it, I write a script to automate the task. Writing the script usually takes a few minutes, or an hour at most, and ends up saving them huge amounts of time. You would wonder why they didn't ask for help before. The reason was that they had absolutely no idea that the task could be automated. When you show them that the computer can do that, they are as surprised as if it were doing magic (thus proving that Arthur C. Clarke was right).
My hope is that teaching people like my coworkers some basic programming will increase the odds that they will ask for help when they need to use a computer efficiently. This could even lead to increased employment for real programmers like us!
itub on May 29, 2012 12:50 PMYour analogy to car mechanics and changing a tire is a good one, but it actually does more to undermine your position than support it.
One of the biggest problems as a "programmer" (I know, you hate that title), is that the consumers don't understand the differences in complexity between incredibly different projects, such as, a device driver and parsing a text file.
I'm no mechanic, but I understand that rebuilding a transmission is much harder than changing a tire.
Secondly,
I think this article written by your fellow Stack Overflow founder is especially relevant -- http://www.joelonsoftware.com/articles/LeakyAbstractions.html
Just because I'm a user of software doesn't mean it doesn't benefit me to understand at least a little bit about the abstraction.
Again, I'm not a car mechanic, but I do know that an overheated engine can be helped by turning on the heater, because the heater works by just pulling heat from the engine. So, even though I don't plan on becoming a mechanic, it benefits me to learn a little bit about the abstractions of the things I use everyday, like cars and software.
Brendan Abel on May 29, 2012 3:08 PMThey teach programming in year 10 here in Australia (~16 years old) and i'm 31 now. For my end of year project i wrote a RPG adventure (overhead map and all, inventory and a boss!) while everyone else had trouble doing the "ask for a name and show it in a sentence" problem.
Now the question is: Did it help ANYONE of those in my class learn to think better, learn to understand computers better, learn to critically think better? NO - if anything it caused more confusion and they were just generally lost for the entire year. It was a complete waste of time for them.
The problem is that anyone at all can manage to write a few lines of code and get it working - the benefit of doing this exercise are next to nil so unless you want to be an actual coder and are genuinely interested WHY are you going it? If you want to just "see what its like cause you might like it" then go for it! you might indeed enjoy it :) and good luck to you! But don't try and force it down EVERYONE'S throat. It just doesn't work unless the student is actually interested.
@Brendan Abel
Learning what you listed about cars is akin to learning how to use the OS of a computer e.g files, file attributes, how to copy n paste, how to install an application and remove it again - NOT programming. These are the things that actually help users use their computers effectively.
Learning 'a bit of programming' is like randomly spending a week with a mechanic to learn a bit of how to tear down an engine 'just cause it helps me understand engines'. Which would be insane to most people and that's why we developers are wondering why everyone suddenly wants to learn some coding on a whim.
What people need to learn is how systems work, how files work, how the internet actually works - these things will give you a real benefit and huge levels of productivity at work or home and most people do NOT know them.
People STILL have no idea how EMAIL works for gods sake. Some spammer uses our from address from a newsletter to sell some viagra and they reply to us with angry letters and possible legal action (yes our smtp servers are ip relay restricted and i check the logs each time just in case, it's never us) - they have no idea anyone can effectively use anyone anyone's email address as the from address without an issue - its just very likely to be marked as spam that's all. You tell people this (young or old!) and they think you are crazy.
People need REAL computer education, effective education about real technically things they use! Personally i think email is broken and we need a real alternative - Email 2.0 as it were heh
-------------
Think of it this way:
How in the world will knowing how to create a messagebox with a users name it going to help you with the weekly report? Clue: It won't. Understanding how excel works might if the report is in excel like most seem to be. (General application knowledge is handy!)
How will knowing that applications use variables make you understand why the application just crashed and how to fix it? Clue: It won't. Understanding OS file locks might if the error is about a problem opening a file! (OS knowledge is handy!)
How will having the ability to make a basic windows application help you fix up the required power point presentation you need to send to Marketing? Clue: It won't. Understanding power point itself will! (General application knowledge is handy!)
I could go on for days on this.
So people! I beg you!
If you want to learn coding cause you think it might be fun: Go for it!
Otherwise - learn something your actually interested in!
Interestingly, people like doing the opposite. When you tell them not to do something, they seem to get anxious about why not to, so they do it.
Fahad Uddin on May 30, 2012 1:17 AMFor a supposedly rational bunch we sure do love jumping on the latest fashion / bandwagon /magic bullet.
Everyone should learn to code? Be careful what you wish for ;)
Ryan Wheeler on May 30, 2012 5:12 AMSeems that since that post where Jeff told about the benefits of everybody telling the true, he's getting a lot of sincere opinions about his blog. If he should follow those opinions, he could stop posting about "things about life" and could go back writing about "things about computers , a strictu sensu".
Woliveirajr on May 30, 2012 9:38 AMTotally agree with Jeff.
I think the "Everyone Should Learn To Code" is really just an attempt by programmers to make our job easier. How many times have we thought, "Man, the user wouldn't be bitching about this if they just effing understood how this stuff really worked?"
This movement, to me, is programmers trying to solve their own problems instead of the problems of the users.
Lord knows I've spent time with people explaining that I understand that to them a certain change should be "like a 30 second change" but it actually a 4-developer, 3-week nightmare involving multiple vendors, etc. It's frustrating and I wish - at those times - they understood that better. But that's not their job. Their job is not to understand me, it is my job to understand them.
The entire argument strikes me as very Apple vs. Linux in approach. The Apple approach insists that the user shouldn't be required to understand anything other than their want, whereas the Linux approach encourages the user to try and solve their want on their own. Is there anything wrong with the latter? No. Is it for everyone, no. And that's the problem with the "everyone should learn to code" conceit.
Matt Robold on May 30, 2012 12:47 PMPS: If you think post means that "everyone should be a programmer", you read it wrong.
Su Selin on May 31, 2012 3:18 AMPS: If you think post means that "everyone should be a programmer", you read it wrong.Agame new game
Su Selin on May 31, 2012 3:20 AMPerfect example of how knowing a bit of programming and the basics of what a computer and a program is, is a great idea:
http://tech.slashdot.org/story/12/05/31/237208/judge-rules-apis-can-not-be-copyrighted
A judge with no understanding of programming could have made this an absolute disaster for interoperability, licensing, and basically doing anything on a computer where a big software monopoly already has a vested interest (hint: that is a lot).
D on May 31, 2012 10:52 PMWhy are people so opposed to what in essence is learning on a 4th graders level?
Are you opposed to putting kids in school? Teaching them maths?
Programming is in no way different, it's just problem solving, using our most modern tools.
A programmers job is to solve problems according to their (other) primary area of expertise, not spoonfeeding folks who don't know what they are doing.
In any given program, "Usability" is directly att odds with "Usefulness", the extremes at the opposing sides of the scale.
And the only way to shorten the distance between the two is by simplifying the program to its' bare necessities, whereby requiring the user to have some skill in how computers work.
And the only way to really understand how computers work... (you guessed it) is by learning programming.
Nabeel Sowan on June 1, 2012 9:09 AMThat is exactly how I learned to love programming. I programmed industrial robots, plc's, and cnc's for years. It wasn't until I moved into the office and had to start solving business problems where I realized how powerful programming could really be. So I decided to get my CS degree.
I fear, however, that I to will become bored with apps and design patterns and unit testing and databases just like I became bored with robotics and cnc's. I think what people like in programming is the new challenges.
www.jesseseger.com
Jesse Seger on June 4, 2012 3:49 AMAll this debate is moot, it seems to me. I have always regarded the ability to program to be an innate skill, not something that one without the gift can really learn. Oh, I can learn the game of basketball, the rules and how I'm supposed to make my body work in order to perform the maneuvers needed to make a basket. But learning those things and putting them all together at game speed is another matter. Not to mention that I am vertically challenged. I can also learn to draw and paint and sculpt, with similar results.
When I discovered programming in college it was a revelation for me; it was such a natural fit for the way my brain was wired. When I tried to help others in the class who were having trouble, I was mystified that they just didn't get it; it was so clear to me. I tried and tried and came to be able to size up very quickly who had the gift and who didn't. Since then I've believed that programmers are born, not made.
I think that most who can program already know it and already are. But sure, it may be repressed in some I suppose. So let people hop on this bandwagon and give it a try. Those that don't get it will drop it very quickly, but those that do will have their own revelation, and it'll be great!
Darryl Whitmore on June 5, 2012 7:23 AMEssentially, Jeff is correct. But I think there is a middle ground between "don't learn to program" and "you must learn programming" which would be of overall benefit.
It's clear to me that good programmers are not made, they are born. Some people have an innate ability to think in such a way that makes them good at programming. Those that don't have this ability will inevitably struggle. Those without the ability may still be interesting in programming, and may even manage to get a CS degree! But they will still not be good programmers. I spoke to a guy working as a sysadmin recently, who admitted that he just "didn't get" programming (and he has a CS degree, but doesn't program as a part of his job).
Where there is middle ground is the notion of exposure to programming. This is not the same as "everyone should learn to program"! This is closer to a mere demonstration of programming, or the theory of programming - without the practice of it. If all people, say in schools, were exposed to programming, we might be able to better identify those who have that innate programming ability but aren't aware of it. By giving people the opportunity to learn about program, we will find people who are interested in learning more about it, at which point we can encourage them to move forward to the practice of programming.
After all, not all people that have this innate ability will discover it on their own. Identifying these people gives them, and us, opportunities they may not have otherwise had.
Yemema_au on June 5, 2012 7:42 PMI found your site very nice and also very distinguished. Thank you for your good work and continue.
lora on June 8, 2012 6:25 AMThe current Oracle v Google lawsuit shows exactly why it is important for non-programmers to understand the basics.
The judge knew a little programming and was able to call Oracle on their BS. Another judge could have easily been snowed.
Beavis on June 11, 2012 1:39 PMI've been programming for six years now ... If I follow The book, I have at least four more years to go ...
The industry hasn't been ... how do we say it ... 'good' to me ... But I still code ... I'm not the best coder by any sense ... by I still code ... I don't always make enough to pay bills ... but I still code ... Once I started coding I never looked back ... I guess I love to code.
Edwardbeckettx on June 11, 2012 5:55 PMI suppose you're posting this follow-up article to emphasize the importance of learning to program in order to solve problems and fulfill passions, not so that you can flip the process for a well-paying job (b/c with enough people doing so, the market would become diluted and oversupplied with incompetent programmers)?
Stanley Lee on June 12, 2012 12:53 AMI'm not really concerned about who should or should not learn to program; personally I think some people just would hate it, so they shouldn't do it.
Here's what strikes a nerve with me, though: Not either of your posts, but all the comments (specifically on the previous post) talking about the field being stuffed with "incompetent programmers," and the way many of those commenters defined both "incomptetent" and "programmer". I went through a very similar life situation to the person who sent you this email asking if they have any chance of making it as a programmer.
I too, discovered programming because there was a problem to be solved by automation, and fell in love. I spent two decades doing other things because I didn't have the requisite training to get hired as a "programmer." If you ask many folks, I still don't.
I failed two job interviews not long ago precisely because I couldn't code, on the spot, some of the "simple" algorithms that some of the commenters pointed out as so basic that you shouldn't be allowed to call yourself a programmer if you couldn't code them without looking it up and maybe thinking about it for a couple hours.
So given that that's the way you're going to be tested if you apply for a job as a programmer, trust me, it's going to be tough if you've come to programming the way I have. You're not going to know a lot of the stuff that some programmers consider fundamental.
For some of those jobs, I'm sure that sort of testing is entirely appropriate, and DOES say something about how successful you'll be in the job. What irks me is that it's applied in a blanket fashion to screen out "bad" programmers (defined as those not knowing how to write a function to find the least common multiple of two integers), when the candidate would actually be great at the task involved in the ACTUAL job. Maybe it's writing Javascript UI code. Maybe it's writing a Drupal module. But they're being tested for the wrong thing. And screened out because of it.
I'm not sure how people make the argument that you can't be any good at writing a Drupal module because you don't know, for instance, the definition of "third normal form." But they DO make that argument, and deny people jobs based on that.
Look, there are LOTS of kinds of programmer. All I ask is that people know what kind of programmer they actually need to hire and test accordingly.
(I have, BTW, subsequently found a programming job, which I'm doing really well at. "Doing really well" defined as "building things that clients really love and depend on." But ironically, I had to get hired by non-programmers for that to happen.)
Kevin Carlson on June 12, 2012 3:14 PMI think someone said that only 5% of coders are any good. If that's true it means the market for them is only close to 5%, since they are the main ones who could judge appropriately. Everyone else is just guessing.
Now if everyone knew *some* programming, the situation might be different.
I'm not just saying this to cover my own ass. I sincerely believe the quality of life of everyone can be raised, if they understood a little bit about how things can be automated.
It's also a skill of concentration. You learn to keep much larger systems in your head. It helps you use your brain in ways that you otherwise wouldn't.
Anyhow, It's just a tool, I want the job-description of programmer to disappear, just like most of the writing jobs once did, when people learned how to write themselves.
I feel people are severely limiting themselves by giving something a name, calling it "hard" and therefore not learning anything about it.
The average person knows *nothing* about programming, contrast that to plumbing, where everyone at least knows enough to do some little chores, like connecting a washer or a tap, and they know that a leak is bad.
Now, a memory leak... people don't even know if it's bad or why.
So, in contrast to plumbing, people aren't even qualified to order a programming job. What does that do to our markets?
What can be so hard about learning one letter and 32 keywords ;)
To Kevin Carlson:
I believe you'd have a much easier time finding a job as a tester. The job description is very misleading, since testers typically do most of the chore-like (and easier) programming jobs. At most places I've worked at, the pay is almost the same.
(I for one, welcome our new programmer overlords)
This was beautiful. Thank you very much. I don't call myself programmer - I'm a webdeveloper and I lack alot of skills. But I love code and you just reminded me why.
Some 15 years ago I did my first websites and I did it because I loved the idea that I can produce something and thousands of people have free access to it. Be it art or knowledge or entertainment. Over time I figured out that working with the code is much more satisfying than Frontpage (!) or Dreamweaver. And now these days I earn my daily bread with webdev.
And sometimes I struggle. Sometimes it's dull. And sometimes I think that I should do something else.
And then you come along and I remember: I love to code. I love to make weird grafics with algorythms. I like to experiment and see what happens.
Thank you.
Liminologie on June 14, 2012 1:17 AMI realize now I had a similar moment where I learned to love to code. For me, I'm a web guy so I stick mostly to the realm of HTML, CSS, PHP, etc.
The first version of my website was 100% custom html, which became unmanageable real fast. Version 2 I hated because I repurposed an existing theme in wordpress to do my bidding. However, I realized it wasn't wordpress I hated...I realize now that any project I've ever worked on which involved repurposing a pre-existing template I've hated working on. When I hit version 3 on my old site I said f*** the template, I'm making my own and I did. Ever since then I'm derived such pleasure from creating my own templates in anything I do.
I feel much better now after realizing this! Of course I can't avoid working in templates forever, but knowing what bothers me and what I enjoy is a great first step!
Sharpshark28 on June 24, 2012 10:34 PMnice post
cerita lucu on June 25, 2012 4:33 PMNice article with a lot of truth. I find myself extremely motivated for some of the more technical tasks and for these I'm devoted to getting the job done and getting people to appreciate the work and the result. While with other tasks just I'm just barely able to survive. Even if they are simpler!
Pvdmeer on June 29, 2012 3:47 AMThe content most powerful to viewers, this having a great information.
send bulk email
'Duck' is from Robert Venturi's architectural theory book Learning from Las Vegas, 1977
Zach on July 21, 2012 4:34 PMI like the article. I love knowing how things work so I just recently began a beginner programming class and I am loving it. Back when I had my first computer, a 486, I had some problems understanding all the programming language. Now that I am older, I seem to have grown into it. I am finding that now I get it and can't wait to learn more! I don't care if almost 50 is old or not, I'm going for it!!
Loveablelittlebuttercup on October 29, 2012 12:37 AM, that you need to watch out for?" Another big factor is whether your dog can handle being off leash, or if she needs a fenced-in area for some play time. Of course, always take into account how well your pup plays with other dogs. Once you know your dog's limits, it's time to get out and play. Here are some ideas to get you started bowling games
Jerry John on January 4, 2013 3:12 AMI hope one day one of your kids gets told that they shouldn't do something, because they'll probably suck at it. Then you'll get an idea how hard it can be to pull someone out of that hole. I hope one day one of your kids gets told that they shouldn't do something, because they'll probably suck at it. Then you'll get an idea how hard it can be to pull someone out of that hole. New York City Tax Preparation
But I can tell you that, in addition to being a father, a grandfather and a husband, he was a collector (with the largest collection of MG toy cars in the world); he was a Master Plumbe plumbers chino hills ca
The comments to this entry are closed.
|
|
Traffic Stats |