I’m your next potential dream boss. I run a cool, rapidly growing company in the digital field, where the work is interesting and rewarding. But I’ve got to be honest about some unfortunate news: I’m probably not going to hire you. … If you want to survive in this economy, you’d be well-advised to learn how to speak computer code. – Kirk McDonald, president of PubMatic, writing in the Wall Street Journal, 10 May 2013
This is another article beating the “everyone must learn to code” drum. Employers can’t find enough people with programming skills, schools aren’t turning out enough engineers, jobs at these cool companies are left unfilled because American students are too lazy or short-sighted to spend a summer learning “basic computer language.”
If only it was that simple. I have some complaints about this “everyone must code” movement, and Mr. McDonald’s article gives me a starting point because he touched on so many of them.
A dilettante is not a programmer
That isn’t writing at all, it’s typing. – Truman Capote
Learning a little bit of programming is probably worse than not learning it at all if you are going to be working with professional programmers. Anyone who has worked in the software business has had to deal with a manager or marketing or sales person who took a BASIC or Pascal class back in college. Although their exposure was shallow and short, they will refer back to it as if their mastery of a FOR…NEXT
loop qualifies them to make decisions about programming projects. Consider Mr. McDonald’s example: “Suppose you’re sitting in a meeting with clients, and someone asks you how long a certain digital project is slated to take.” How exactly does knowing a little bit of Python help answer that question? I’d rather hire someone who said “I can’t tell you offhand but I will find out,” and then consulted people who can help estimate.
There are lots of people who have training and degrees in computer programming who can’t program: see Jeff Atwood’s article Why Can’t Programmers.. Program?. I can’t see how adding more amateurs to these ranks is a good thing. I specialize in debugging and fixing code that is abandoned or unsupported by the original programmer, so I see plenty of what happens when someone who half-understands programming tries to develop real programs.
Programming languages are not programming
Teach yourself just enough of the grammar and the logic of computer languages to be able to see the big picture. – Kirk McDonald
The grammar and logic of computer languages are not the big picture. Programming languages are not the hard part of programing; not even the most important part. Programming is methodically using software to solve problems — business problems, rocket guidance problems, selling ads online problems. Programming languages and APIs are tools to write programs: they aren’t programming. By analogy you know you are in a group of amateur photographers when they have $3,000 cameras but don’t know what an f-stop is or how it affects depth of field. Professional photographers talk about composition and lighting, not camera features.
Good programmers can construct, hold, and analyze complex models in their head. They can translate business requirements into code. They know how programming languages and software tools can be applied to solve a problem.
Not everyone has the talent or inclination to program
I never learned to skateboard. I can’t dance. I can’t play a musical instrument. I struggle learning foreign languages. I know people who can do those things well. They apply themselves because they are interested and motivated, in the same way I applied myself to computer programming, for years, until I got good at it. I used to tutor college students and teenagers, and I learned that very few people find programming interesting or fun. Students sit through the courses because they have to. Their experience paying me to write their Fibonacci sequence assignment while they tried and failed to understand recursion will be cited later in their career as programming expertise. Maybe they will estimate important projects based on that half-remembered exposure to Visual Basic.
I’m not saying programming should be exclusive. I’m all for the kind of curriculum upgrading and partnerships with business that Mr. McDonald supports. Anyone who wants to learn programming should be able to, and experienced programmers should help and mentor. But let’s not kid ourselves that everyone wants to program, or will have the combination of talent and interest to get good at it.
It’s setting people up to fail
Most people who try to learn to program are going to fail or lose interest. Telling high school and college students and job seekers that they don’t have a chance because they didn’t learn to “speak computer code” is creating a phony bar to entry. At best it’s a distraction, like business students forced to take a programming class they will forget about. At worst it’s another demoralizing episode—like trigonometry was for a lot of us— where students are told they must master something that most of them will find uninteresting and difficult and inapplicable to their life.
In most jobs some level of familiarity and comfort with computers and technology is required. But you don’t need to know how to write code to do most jobs. I’ve worked in ad agencies and most of the employees didn’t program but could do the job they were supposed to be doing just fine.
Programmers have worked hard to learn their skill
So the book can only be talking about a superficial familiarity, not a deep understanding. As Alexander Pope said, a little learning is a dangerous thing. – Peter Norvig
Suggesting that just anyone can learn programming in a summer spent with Python tutorials and getting “acquainted with APIs” trivializes the amount of real time and effort required to learn programming. Peter Norvig wrote Teach Yourself Programming in Ten Years, and I think he got it right. Malcolm Gladwell came to similar conclusions in “Outliers.” As a professional programmer with 35 years experience, much of it continuously upgrading my skills, I’m a bit offended at the suggestion that everyone and their mother can be programming after watching some videos online.
The idea that programming is something anyone can learn if they just sit down with a book and type examples is not just offensive to programmers—it’s a dangerously misleading idea for management to hold. It feeds the idea that programming is a rote skill that can be trained into anyone, and that programmers are therefore more or less interchangeable. Many of my friends and almost all of my colleagues are programmers, but I would flail for a while trying to do their jobs if I was rotated in as a new “resource” or headcount. Programmers tend to specialize. Our underlying expertise and experience, and our innate interest in programming, means that we can do another programming job better than someone fresh out of school, but we aren’t interchangeable.
So what do I tell my kids?
I tell my own kids to invest in learning useful skills, whether the skill is programming, plumbing, writing, or fixing cars. Learning any skill well enough to make a living from it takes a lot of time and commitment. I also teach them that credentials are not the same thing as expertise, and the more competitive the job market gets the more skills and experience will be valued over credentials, especially as we figure out how degraded a lot of credentials really are. I teach my kids that they can learn anything they are interested in, but I can’t make them interested in any specific thing. And I tell them to be skeptical of advice like “Everyone must learn to code.”
Comments
oldtaku on 12 May 2013 at 1:40 pm
For me the first major separator between a programmer and a non-programmer (even one who abuses code) is that they’ve internalized ‘If and only if A, then B’ and then chaining that. People don’t naturally think this way, and it takes real effort to learn. Once you’ve learned it, it then takes real effort to remember that most people don’t really grasp cause and effect, which is why you are having trouble communicating with them, and why his/her code is the equivalent of flailing around randomly.
Of course there’s much more (solving problems). But that’s a big one you are not going to learn just by watching some videos.
TechForProgress on 12 May 2013 at 1:54 pm
Just because McDonald argues that everyone should learn to code, does not presume that each and everyone of them will consider themselves an expert. I took a drawing class freshman year, but I don’t go into the design department saying that I’m an artist, and my opinion outweighs theirs. Those who do will get weeded out of their position appropriately.
Your argument that most of us don’t use trigonometry later in life so we shouldn’t learn it because its demoralizing is a fallacy at best. Not to mention how defeatist your argument of “well, you’re going to fail, so don’t bother trying” is.
We should all be exposed to the compendium of knowledge and see what sticks. Some people may not realize their affinity to programming until they’re exposed to it.
I’m not an artist but when the designer comes to me and asks me what I think, because of that intro drawing class, I can comment on proportion, lighting, and aesthetic. Because of that trig class, when I try my hand at home improvement, I know how to cut an angle into a piece of wood. I don’t presume to be a carpenter though.
The challenge of knowing what you don’t know is always present, whether you are ignorant, a novice, or an expert. But that’s just me.
-=jwk=- on 12 May 2013 at 1:58 pm
“This is another article beating the “everyone must learn to code” drum. ”
No it isn’t. It’s a plea for all students to have some idea how programming works, which sounds like a good idea to me. It’s not about knowing how to code an API. It’s about knowing what an API is , understanding the limitations and being able to listen intelligently while the real developers explain which functions the API is capable of. Mr McDonalds theses is that the best way to learn this is to try and write one yourself. I am pretty sure anyone who had (tried) to write a function call will understand the impact of changing it much better than someone who has not. I haven’t programmed since Turbo C for DOS (well, little SQL when needed) but because I understand the basic mechanics I am a much better manager for it.
Rex Kerr on 12 May 2013 at 2:04 pm
You make good arguments for why not everyone should be taught programming poorly. But you can remove everything you said about programming and replace it with “math” or “writing” and the logic would be unchanged.
Programming in today’s world should be a core competency so that people can better understand how the world around them works, and so that any time they need to free themselves from a tedious intellectual task, they have some hope of doing so.
Not all people who know how to write will be writers, but a literate society has many advantages over one that is not–you can ask people to send you information in writing, for example, and have some expectation that they actually can. Not all people who know how to do math will be mathematicians or economists or data analysis, but a numerate society has many advantages over one that is not–you can expect a basic level of efficiency from calculations, and outrage or acquiescence to political decisions to be made from a position of knowledge. Not all people who know how to program will be professional programmers either, but giving people more tools to take charge of their lives and be more capable is, if you can do it well, a huge plus.
That we can’t get math and writing instruction right is a problem. Let’s fix those, and then note that computation is ubiquitous and being able to instruct our machines is important.
Ruben Dias on 12 May 2013 at 2:53 pm
Perhaps it is not programming that we need to learn — after all, it is mostly about solving a problem with a given set of tools (be it the language, or whatever libraries you chose to use/learn). I would argue that we are not being taught in schools how to approach a problem and solve it. We are being taught that you may encounter this set of problems, and you may solve them with this set of solutions. If you’re clever, you can see that those solutions can be adapted to other problems, thus translating into problem-solving skills and not just “I solve this by doing that because I was taught”.
Unless the man does mean everyone should learn how to code. In such case, I mostly agree with you.
Brian Dunbar on 12 May 2013 at 3:25 pm
I’m a systems administrator, twenty years experience.
Now, I’m not a programmer, but I have spent my entire working life writing code to do stuff: systems management tasks, mostly, with the languages you would expect: perl, bash, and so on.
I like my job, and what I’m doing – bossing computers around is fun- but I have a small, growing, dissatisfaction with it.
In your experience, can people from a ‘sysadmin’ background transition to a programming one?
Timothy on 12 May 2013 at 3:36 pm
Anyone who senses that either both authors are correct xor both authors are incorrect, must appreciate what was not said but well understood: Good programmers are smarter than and frustrated by most everyone else. If programming is a skill in high demand, it is necessary to intersect smart people, potential interest, and skilled educators. In the context of programming skill, resources spent outside of the Venn is necessarily waste. The two authors only disagree on scope and perspective: the optimistic vs the pessimist.
Timothy on 12 May 2013 at 4:11 pm
@Brian, generally yes. That you are asking implies that you have not tried. Given opportunity in an ideal environment, not having tried implies lack of interest. Lack of interest translates to: No.
Why don’t you just bite the bullet and jump in? Sounds like you’ve got the basics of logic and tools. Maybe you could find a small simple open source project that interests you and seems to have competent developers; Read the code, scratch an itch. Or start with the hello worlds, sorts, graphics, then solve some curiosity, like calculating the dates of Easter, write an AI that plays tic tac toe, calculate the odds of poker hands, or rewrite one of your slow bash scripts in a compiled language.
kredit report online immediately afterlife on 7 February 2017 at 11:32 pm
Average Joe wrote, “Ren:The major differences between races and ethnic groups is that ethnic groups refer to subgroups within the same race. For example, Swedes and Norwegians are different ethnic groups who belong to the Caucasoid racial group. Because Swedes and Norwegians come from the same racial group they are going to be more closely related than different racial groups such as Caucasoids and Negroids.”This is circular, but somehow I don’t think you’ll understand why, even if I explained.
Ryan on 12 May 2013 at 4:55 pm
Steve Jobs says everyone should learn to program:
http://www.youtube.com/watch?v=mCDkxUbalCw
Danyel Lawson on 12 May 2013 at 6:53 pm
My 20+ year programming career resembles something closer to the theatre of the absurd. You should consider yourself lucky if your career hasn’t been one bad manager after another with most if not all either megalomaniacs or ill informed liberal arts majors or people who think speed to delivery is king.
The framework as programming language and requiring experience in one is the latest expression of a deep misunderstanding of what is the role of a software developer. No one would ever require a carpenter or plumber to use their layman’s opinion of what tools they think someone in that profession needs. But you can’t get work these days without proving you have experience using some neophyte’s latest version of their college project. That you could probably rewrite faster than you could learn about all the immature features and poorly thought through design principles.
In the current work environment professional software developers are treated to the new prototype tool of the week by competing software developers whose aborted attempts at delivering the penultimate tool based on the current meme of web server as multilayered over engineered object orientated database obfuscator for those with phobias about working with a database while simultaneously having no understanding of the mysterious inner workings of HTTP and a deep rooted aversion to working directly with POST data much less so any documented file format or protocol.
The framework AKA use my Dremel approach to programming requirements is only the first of many insults and obstacles flung in the path to delivering the optimal and correct solution to the programming task placed in front of a developer. The recurring theme as insult I have personally been bumping into for years from coworkers/managers is the I could have written what you wrote faster than you. Which completely ignores the fact that I just fixed said insulters code. Which is the first sign that this is not the work environment I was looking for/start interviewing now.
Brian Dunbar on 12 May 2013 at 7:15 pm
@Timothy
“That you are asking implies that you have not tried.”
Yes, and no. Over the last few years I have schooled – or tried to school – myself in interesting languages and tools: Ruby, ROR. I liked common LISP, Racket and Clojure. Dabbled with node.
“Why don’t you just bite the bullet and jump in? ”
Good question. I’ve done a half-dozen ‘apps’ that solve various itches. I don’t think I am, yet, good enough to contribue code that other people would use.
I have talked to a few companies about actual paid work: shopped my resume around. I’ve gotten nothing back, yet, except polite interest: sounds great, like your enthusiasm, we’ll get back to you.
Antoine on 12 May 2013 at 7:39 pm
Your concern about stating the nature of programming as the praxis of specialized knowledge is well-founded.
- Bloated ego of coworkers/clients : things already are hard enough
- Human mortality beats human curiosity : no-one has the time to be a true Jack of all Trades
These are fair and understandable.
Yet, WHAT ABOUT ANALPHABETISM ?
As I see, you define and defend “programmer” in the fashion of a writer with the term “writer”.
Algorithms are not merely a tool, they’re a cognitive process, a way of life, a unique angle of approch to problems, just like sentences.
- I know words, and I humbly accept that I’m no writer ; it’s easier on my ego because alphabetism is ubiquitous.
- I loved every second I spent learning words
Let : Analgorithmism, aka Analgorism = lack of knowledge of the algorithms.
Context : I need to communicate on/using algorithms.
Proposition : I won’t hire an analgorithmist.
Counting and reading are mandatory skills today. Algorithming (duh) tries to wiggle its way in the list. Programming shouldn’t, of course.
Algorithms are awesome. They deserve to be known.
Timothy on 12 May 2013 at 8:18 pm
@Brian “[not] good enough to contribute code”. Bullshit. Example: Timer I like didn’t store previously selected duration and wasn’t ready to ‘go’ again after stopping. Simple and appreciated solution but required getting into the guts a bit. Alternatively, make your day job tools better, maybe off the clock.
It doesn’t sound fair or realistic to expect an employer to hire you with the expectation that you’ll learn the trade on the job. Get your flying wings, build up some code, and then get a new job.
If I needed a mechanic/cook/artist/programmer and you came with no experience, the only way I’d let you into the shop to learn is if you were working for free. Which is not a bad idea actually, but if you wanna keep your day job, open source is a good education and resume builder.
Jhonson on 12 May 2013 at 8:26 pm
The major point missed is the ability to communicate with computer related people. Understanding and able to tell a programmer what is needed implies the understanding the fundamentals of programming. If you don’t know say, English grammar and composition, you can still talk but cannot write cogently to communicate with others. To communicate with an auto mechanic, if you can outline the problem in his language such as, I got the engine light on and it is time to change my timing belt is better than telling I have my engine light on which leads to cheating etc. So, instead of arguing about the merits of learning a programming language, algorithm, memory management(data structure) and some hardware knowledge, dismissing them as “not needed” is not worth any thing.
Pseudonym on 12 May 2013 at 8:27 pm
@Brian Dunbar:
Your apparent humility says to me that you’re exactly the sort of person who should be programming. We need more engineers, not more prima donnas.
Steve Nordquist on 12 May 2013 at 11:11 pm
Watch, it’ll turn out middle schoolers could only ever have been taught Perl6, J, obscure vertical market frameworks, and lawn tennis; the singularity will be set back 5 years straightaway. Because grass stains. Also, human advancement. Java RMI and VM will eventually be boiled down to better preschool toys (…than the mere 55-core 1TiB tablets of the day, somehow…) or 560-level courses, whichever’s fungible.
Benjamin Ondari on 12 May 2013 at 11:34 pm
Should anyone and everyone Know How to program? The motivating philosophy behind this push to get everyone into the coding bandwagon is simple.The belief that the person who is is experiencing a need or problem will most likely be the one who understands it the most and hence could come up with the most accurate solution.More often than not hiring a cs programmer to solve a business problem ends up with having to adopt a less than accurate solution as these techies end up creating cool but useless solutions.Its more or less like the story of blogging and web design,in the past a web presence was the preserve of the tech elite or those who could afford to hire someone to develop and maintain(including updating)their website,however with the advent of easy blogging software anyone with basic computer skill can build and maintain a blog,what has this created?we now have quality posts in all areas or expertise ,doctors,politicians,academia e.etc can share their knowledge online. I am a professional programmer by the way.
Zinc on 12 May 2013 at 11:49 pm
Danyel Lawson — my 35+ year programming career has been greatly enhanced by developers like you who hate working with badly designed tools and preexisting code, which in my experience has mostly been what the job is about. I’m perfectly happy to work with badly designed frameworks and make it work the way managers want, however convoluted, as long as they are paying my salary. Fact is, I’m darn good at it and that’s a valuable skill. Fad new techniques are just another means of micro-managing the job, something I’m perfectly willing to allow whoever is paying my bills to do. Could I do it faster, cleaner, more elegantly and efficiently? No doubt. And I do with that which is fully under my control, or when asked. Do I care if it is or not? Mainly to the extent that it makes my job easier, which does usually include ongoing support of code I’ve worked on. But if a manager wants to badly design the overall structure himself, I’ll offer helpful suggestions, but I see no compelling reason to stand in his way. He’s the boss, and if he wants to drag the project out years longer than necessary because he thinks he knows better how things should be done, I’ve no real problem with that. It’s my bread and butter, after all. Bailing him out of the situations he gets himself in is one of the things I’m good at, and in fact, generally enjoy.
Regarding programming as a “core competency”, I’m not sure I have an opinion on that. I would ask those arguing for it, what would be an example of a skill that you would argue should not be included in core competency? Rocket science? Brain surgery? Atomic physics? Motor vehicle repair? Computer repair? Basic electronics? Integrated circuit design? Why or why not?
Peter on 13 May 2013 at 2:44 am
Learning a small amount of something will either result in overconfidence (as you suggest), or a better appreciation of the complexities of the subject (which could be valuable). I’d look to spot the difference when it came to interview.
David Smith on 13 May 2013 at 3:05 am
Kirk MacDonald would probably get better results if he sought a few qualified IT project managers. He seems to have confused that with a passing acquaintance with high-level scripting.
Patrick Sinz on 13 May 2013 at 4:37 am
I would probably not want to work for M. MacDonald, but mostly because I’m not really interested in his business model. And I agree that knowing the syntax and grammar of Python is not “knowing how to program”. But I would agree that everybody should learn “how to program” at least somewhat. Not in order to be able to write some code, but to understand how to organize their work in general. If you are a manager in Logistics you should be able to think about “while something if this then that but there might be some contention on this resource so …”
If you are a sociology major and have no clue how to organize your data and do some datamining not only you should fail to get a degree, but you will be unable to do or to explain what you need to get to an IT person. Etc ….
You do not need to be able to fix your car to work as a taxi driver, but if you do not understand it you will be unable to choose the right mix between reliability, total cost of ownership, attraction to clients and cost, and each time you have a car problem, the mechanics will be happy to take you to the cleaner. (of course us IT people are nice an patient people, we would never bambouzle our internal client just because we can and are tired of their incompetence..)
Greg Jorgensen on 13 May 2013 at 4:51 am
@TechForProgress – Thanks for your comment. I don’t presume everyone can be an expert either. I just don’t think everyone needs to code to get a job, Mr. McDonald does. And I don’t say that we shouldn’t teach trig or anything else because we might fail. I object to using things like coding, or trig, as phony bars to entry for jobs where those skills aren’t really necessary. Mr. McDonald says that college grads who can’t program can’t get a job with his company and probably not anywhere else — that’s the phony bar I referred to.
@jwk – Thanks. My reading of Mr. McDonald’s article is that he specifically tells college grads that they need to know how to code at some level in “at least” two programming languages. That’s not the same thing as computer literacy or a higher-level understanding of software.
@Rex Kerr — Thanks. I’m not convinced that programming is a core competency. Computer literacy and some understanding of software and what it can (and can’t) do is a core competency for many jobs, just like math and writing. And there are many jobs where math or writing aren’t core competencies. Anyway I didn’t argue against anyone mastering math and writing — I’m all for that.
@Ruben Dias — Exactly, thanks.
@Brian Dunbar — In my experience anyone who wants to learn to program can learn. I also believe that some people are more inclined to be good at programming than others. Programming even moderately well takes a lot of commitment and time. If you have 20 years as a sys admin I’d guess that the logical thinking process and understanding software parts are already there.
@Danyel Lawson — Agree. Watch the old Cary Grant comedy “Mr. Blandings Builds His Dream House” for a laugh at the laymen running a project.
@Jhonson — A good programmer should be able to speak in plain language to non-technical people. Good communication skills are a core competency for programmers.
@David Smith — exactly.
@Patrick Sinz — I agreee that there are higher-level thought processes more fundamental than programming: organizing data, logical thought, thinking in discrete steps. A good programmer has mastered these skills and can use a computer language to express a solution.
Joe on 13 May 2013 at 5:15 am
I personally lean more toward the side that a little too much of the wrong knowledge can be dangerous. One needn’t look further than sites like TheDailyWTF to find countless stories of managers and people in power who make crazy decisions (and feel empowered to do so) by their limited knowledge of programming and how computers work.
But, perhaps that’s more a problem of ego and bad management in general, and had these people lacked their basic programming knowledge, they’d still be bad managers/supervisors/project leads/etc. They’d just screw something else up.
That said, I think there is huge value in stripping away at least a little of the “magic” behind computers. I hate watching people be victims of technology. I’ve watched so many manual, time consuming processes happen that could be automated with just a little bit of thought. It’s like the difference between hand washing clothes with a scrubbing board in a tub, versus using an automatic washing machines. Unfortunately, programming computers is a little tougher than sorting by fabric type, reading the care label, and dialing in a few knobs.
And maybe that’s another angle: There’s (at least) two levels of programming that are worth separating because they’re quite different, but they’re both “programming.” One is high level, basic automation. I want to automate a few basic tasks, hooking these pre-existing, complex pieces together. That is something I think more people should learn. The other is the lower level, “real” programming, that involves creating those pieces.
You can build things with Legos, but someone had to make the Legos.
Greg A on 13 May 2013 at 5:37 am
You’ve completely missed the point. A manager can know how to program and still be a bad manager, but not knowing how to program won’t guarantee that he will be a good manager. Teaching programming fundamentals to non-programmers is not a tool to allow you to replace your programmers. And you should learn how to skateboard or make music. As a general statement, I have invested more time and love into programming than anyone I know, and that probably includes you. If you are somehow even more dedicated to programming than I am (which I find laughably hard to believe, but you never know), THEN IT IS ALL THE MORE IMPORTANT TO DIVERSIFY YOUR EXPERIENCES. Dedicate some time to learning how to swing a hammer or hold a Sawzall. You might still hire a contractor when your bathroom floods! But it will make you a better person, and a better home-owner.
Bozon on 13 May 2013 at 5:59 am
My first job out of college (many years ago.) My boss asked me to write a program to sort some data a special way. I thought he was testing my ability, so I didn’t use the operating system included sorting algorithm. I instead wrote an optimized “Quick Sort” Sorting program taken from Knuthe’s book on algorithms. I was proud of myself. He then scheduled a meeting with me, and proceeded to lay into me because a sort could be written in a couple of lines of code, and no he wasn’t talking about calling the system sort routines. He was talking about writing a bubble sort that he had seen in a magazine print out. He literally thought I didn’t know how to code because I had used many lines of code to sort data when you only needed a couple. I tried to explain that the sort was fast and we needed it to be fast for the large amount of data we were sorting.
I literally almost got fired because my boss thought he knew how to program. I did leave as soon as I could find another job though.
David on 13 May 2013 at 7:18 am
Maybe everybody should learn English. The first sentence of the second paragraph, “If only it was that simple,” should have been written “if only it were that simple.” For more details see the Grammar Girl at
http://grammar.quickanddirtytips.com/subjunctive-verbs-was-i-were.aspx
I don’t know if there are other grammatical mistakes. I stopped reading the article after encountering this one.
JT on 13 May 2013 at 7:24 am
I don’t think learing to program is good because every one should be writing production code for their business. But in this day and age, not being able to program is like not being able to write 1900s.
You can get by, but you don’t really understand how the world works. People who can program will explain it to you, in metaphors, but the metaphors will break. Not being able to program means not being able to really use tools like excel. Not being able to program means not getting the most out of your mac (the CLI is programming). Yeah you can live without programming, but if you work in a digital world, you’ll be much better off if you can program. Sort of like if you worked at a newspaper in the 1900s it’d be kinder handy to be able to read, write and type.
Oh yeah I am no one you know. /. effect.
Greg Jorgensen on 13 May 2013 at 7:25 am
@David Thanks for noticing. It must be hard getting through the day frustrated over common usages that may be incorrect according to a website. It must be tough getting through Shakespeare and Hemingway, too.
I’m sure I made other grammatical mistakes but according to Google Analytics tens of thousands of people slogged through.
Yahoo Answers may not be as authoritative as Grammar Girl, but it did confirm that I’m in line with common usage: “… the subjunctive is disappearing and, at least in spoken conversations, the indicative, was, has gained popularity and is accepted as proper.”
Jon Nials on 13 May 2013 at 8:05 am
@Brian:
I’ve been a sysadmin for 25 years. I’ve also been a developer and managed developers during that time. I discovered that even though I consider myself a plodder as a programmer, some programmers I respect think I’m better than a lot of people I work with.
I think it is easier for a sysadmin to become a programmer than the reverse. We bring to the table some very useful mind sets: Change one thing at a time to see what happens, a certain amount of attention to details that is hard for some to learn, and a viewpoint of “how does this affect the whole system” that some times eludes programmers who are focused on just their piece of the puzzle.
Just find something that interests you and start working on it. However small your contribution it will make you a better programmer and sysadmin.
Josef Richberg on 13 May 2013 at 10:30 am
I learned programming way back in high school, because I found it fun and interesting. It was one of the few subjects that could hold my attention. It still holds my attention to this day, due mainly to he fact that there are so many different ways to do the same thing, in so many different languages (syntax differences).
I have taught numerous students through various organizations and not everyone has the ability to grasp the fundamentals of programming. Learning the syntax for a Python “for loop” does nothing to help you understand the problem was better solved with a “while loop”.
Feynman Fan on 13 May 2013 at 10:40 am
Dude! You’re awesome. I really like your analysis and agree with everything that you’ve suggested. I mostly like your segment because I like when people like McDonald make these kinds of proclamations and when people like yourself really call them on the validity of their proclamation and point out the real problems with their “policy”. Frequently the “policy” just really isn’t that good of an idea and may also reveal their own agendas or mindsets.
For example, like that programmers are interchangeable. I think that shows that he doesn’t like paying programmers and what he really wants to do is cut their rates or resents paying them at all.
And I also really like your replies as well and I like that practice as well in general. In your case you expressed your ideas, listened to the reader’s views and then responded. But your responses weren’t defensive they were very matter of fact and appropriate. Kudos to you again.
Finally, @Greg A? I don’t think Jorgenson has missed the point at all. He has read the article and expressed an opinion. And that opinion and belief is based on facts not ego. But the same cannot be said for your own posting. If you were half as good as you think you are then you would be quite talented indeed. Shouldn’t you be like running a multi billion dollar company or something? Or curing world hunger?
Ryan Hupfer on 13 May 2013 at 12:16 pm
I feel like you’re taking this article a little too personally. I know you can code and the idea of saying that everyone should possess your level of skill might seem a little ridiculous to you (and I would agree). But that’s not what Kirk is saying here.
The way I took this is that he’s actually saying how it would benefit everyone (not only hardcore engineers) to have a good idea of what’s going on under the hood of the technology they’re using everyday. The world we live in doesn’t require you to build a lot of things from scratch and knowing how things can work with each other to add value is a powerful skill to have.
Of course these typs of people don’t need to build APIs or write code all day, but they should know what an API is, why they’re so important and what they have to do with their business. I’m not going to kid myself and say that everyone can learn to code at level high enough to make it their career. But they should be able to hold a conversation with someone who can. (just like how an engineer should be able to hold a business conversation with a sales guy)
Coding is more of an art than anything and it requires a very unique set of skills and interest. But that doesn’t mean it wouldn’t hurt for non-engineers to be able to understand technology to a level that would help them work more efficiently with the engineers and product managers on their team.
Personally I love coding and I even took a job out of college where I coded all day long. After a year or so I figured out it wasn’t really my thing and I ended up moving over to sales and marketing. The skills I’ve learned from the days of coding have only helped me do my job better and I feel like it differentiates me in the market and puts me in the category that Kirk is talking about. Knowing a little code never hurts.
Greg Jorgensen on 13 May 2013 at 12:24 pm
@Joe — well put, thanks.
@Greg A — Thanks for reading and commenting. I think you are arguing against things I didn’t say. I have been programming professionally for 35 years. I spend quite a bit of time keeping my skills up to date because I’m way outside the 20-something age range employers prefer when looking for programing “rock stars.” I may never learn to skateboard but I am competent with auto and motorcycle mechanics, motorcycle riding, plumbing, and fixing things around the house, including with hammer and Sawzall. I don’t know how you got the idea that I’m one-dimensional just because I listed a few things I can’t do.
@Bozon — Thanks. I’ve had similar experiences myself, including almost the same argument over bubble sort half-remembered from college. I tried to explain to the person who brought it up that bubble sort is usually presented as an example of bad way to sort.
@JT — agree that not knowing how to use a computer to get things done can be a crippling deficiency in the job market, and knowing how to program is a good thing. But I don’t think we’re at the point that knowing how to program is a required skill for everyone, nor do I think Mr. McDonald’s “dabble for a summer in Python” approach is a valid solution.
Greg Jorgensen on 13 May 2013 at 12:26 pm
@Feynman Fan — Thanks!
@Ryan Hupfer — Thanks, I agree that computer literacy and some understanding of software and automation are a good thing and increasingly necessary for a lot of jobs. However Mr. McDonald specifically prescribed learning “at least” two programming languages and gave specific examples of what he thinks college grads should know.
TEVIS on 13 May 2013 at 2:50 pm
Thank you. As a graphic design student who wanted nothing to do with animation or web design i was forced to take classes in both as a part of a curriculum. It seems like it may be a good idea to know how those things work but the problem is you cant just take the parts you need. I had to learn programming in flash and how to debug html and install java components into a website. wasting time, money and a chair for someone who wants to be there.
hammer on 13 May 2013 at 4:07 pm
Does Kirk McDonald really think you can understand the fundamentals of computer science by taking a few courses or reading a few book? This is absolute nonsense!
It takes years of hard work and studying just to understand the fundamentals of computer science, and then lots of experience to become a competent software engineer.
The main reason there is so much terrible software is because there are too many incompetent software developers that don’t know the first thing about crafting well designed software.
Keith Bowes on 13 May 2013 at 7:06 pm
These are both interesting articles. I know myself that getting employed is nearly impossible (a lot of employers,not just Mr. McDonald, are defining unrealistic requirements, like a bachelor’s degree to work at McDonald’s). But getting to the level of programming that I do is something I don’t consider it hard work. It’s basically just a case of RTFM to get an idea of how the programming language and compiler work and then use basic logic to translate an idea to a solution through it.
Bruno Garcia on 14 May 2013 at 6:19 am
Perhaps if I could write this well, I’d end up with the exact same text as you! Couldn’t agree more.
richard wilner on 14 May 2013 at 6:47 am
This is the most articulate and well thought-out response I’ve seen to the “everyone should program” movement. It’s also the only article I’ve read that properly attributes the level of talent, experience, and craftsmanship that is a REQUIREMENT for any usable and valuable program.
Bravo.
Bob on 14 May 2013 at 8:08 am
I hear most of your arguments, but in today’s economy, credentials are being used first to weed out the mountains of applications coming in for most openings. The Digital Ad Exec that would hire you does value credentials first, experience coming in at a distant second.
hugov on 14 May 2013 at 11:55 am
Maybe I’ll refer more to science fiction than to close future. I am wondering if this debate is not finally about the idea that everybody should be a programmer with a second “major” in another field – like medecine, finance, law?
Greg Jorgensen on 14 May 2013 at 11:56 am
@Bruno Garcia — Thanks! I was afraid my grammatical errors would drive readers away. 😉
@richard wilner — Thanks!
@Bob — If Mr. McDonald or any employer is screening based on credentials first then a college grad with no programming classes but a summer spent “dabbling” with Python and APIs is not going to get through anyway. Mr. McDonald doesn’t say how he would measure the programming expertise of applicants, just that they have to know how to program. Even for experienced technical managers that’s not easy — see Jeff Atwood’s article I linked or Joel Spolsky’s articles in that vein.
John on 27 June 2013 at 6:52 am
I am a programmer and i have been interacting with lots of clients, over the years. Most of them want an excellent programmer in their fold. Most of the time, I find non programmers leading the so called IT department and those who know a bit are wise enough to advise their employers to get the programming task outsourced.
In order to become a good programmer, the basic ingredient is to be excellent at problem solving, good mathematics skills always help. Lots of top tech companies like IBM hire a fresher on the basis of their problem solving skills and not their knowledge of various syntax of a programming language.
So having problem solving skill is a must.