Get off my lawn, programming n00bs!
May 15, 2012 11:40 AM   Subscribe

 
I think it is great that Mike is finally getting his shit together and thinking about his future. I imagine many late nights ahead, sitting up in his mansion cranking out iPhone fart apps, watching those 99cent payments roll in. I'm glad he has finally come to terms with the fact that he can't stay mayor forever.
posted by Ad hominem at 11:47 AM on May 15, 2012 [19 favorites]


Bit of a straw man here. where does it say Bloomberg wants to learn to program for his job? Maybe learning to code is a good intellectual exercise. Maybe learning to program helps people become better problem solvers because they are forced to think ahead.

Jesus. It's just backlash for backlash's sake.
posted by Edison Carter at 11:50 AM on May 15, 2012 [11 favorites]


Exactly, I can't picture him going out and interviewing for entry level java jobs, he is way too old to get hired.

If he wants a new career, I'm thinking Scrum Master.
posted by Ad hominem at 11:57 AM on May 15, 2012 [11 favorites]


Or the opposite, having a manager who demands you know everything about code--all sorts of dandy code.

Um dude, I'm a copywriter. Code this.
posted by stormpooper at 11:59 AM on May 15, 2012 [1 favorite]


I suspect that Atwood tried to express a slightly different point- I think he was trying to say that the act of coding is not in itself the most important thing that a coder does. Learning to code is not in itself very useful; it's far more important to be able to communicate your ideas clearly, think critically about a concept, and figure out how to transform that concept into reality. From that perspective, Bloomberg's trip through Codecademy seems to be closer to a cargo cultist than a real coder.

That said, I disagree with Jeff's stated point- computers are so unbelievably entrenched in our lives now, and coding is so ever present (look at excel formulas and word macros), that anyone who codes at all- even a little bit- will likely have an advantage. As the world grows more connected, it's likely that these advantages will increase.
posted by jenkinsEar at 12:08 PM on May 15, 2012 [8 favorites]


The Bloomberg part is a red herring, honestly. This dude seems mad that more people are learning what he knows in a way he doesn't like, and that they think they can just go get a job that HE LIKE WORKED FOR, MAN.

But I am biased. My whole life, my boyfriends, my best friends, my favorite coworkers have all been devs. And they told me I'd like it and I'd mostly be like "yeah, that would be cool, but it seems like a huge undertaking to just know where to start, so someday ..." And I picked up a little HTML & CSS just working in tech (and CSS concepts are similar enough to design concepts that it wasn't too huge a leap), but nothing big.

And then Codecademy totally changed everything. I understand basic concepts well enough, and learned in an enjoyable enough way, that I made a little website that uses Javascript to visualize my library. And it is fun. And I can call on my network to learn more and do more, and that is fun too. It turns out I really, really like programming, and I probably never would have found out without the fun push to demystify and decomplicate learning. So maybe everyone doesn't *have* to learn everything about programming, but I can't see the harm in introducing folks to the concepts. It can help them understand things in their own world. It can help interest people who were previously put off by some aspects of dev culture, and maybe diversify the joint. Now that I think of it, maybe that is this dude's real problem.
posted by dame at 12:12 PM on May 15, 2012 [31 favorites]


So maybe everyone doesn't *have* to learn everything about programming, but I can't see the harm in introducing folks to the concepts. It can help them understand things in their own world. It can help interest people who were previously put off by some aspects of dev culture, and maybe diversify the joint. Now that I think of it, maybe that is this dude's real problem.

Bingo.
posted by Edison Carter at 12:14 PM on May 15, 2012 [4 favorites]


It's not just understanding computers or "learning to program". Anything that turns a process from a black box into something you can effectively reason about is powerful to know. For those of us who live and breathe computers, it's pretty natural for that to turn into "you should learn to program". Which isn't to say we shouldn't stop saying it quite so much, but it is a lot more socially acceptable than “jesus christ wtf stop saying the computer ‘hates’ you wtf.”

…says the guy who refuses to bother learning anything about how cars work.
posted by jepler at 12:15 PM on May 15, 2012 [2 favorites]


Also this bit:

Please don't advocate learning to code just for the sake of learning how to code. Or worse, because of the fat paychecks. Instead, I humbly suggest that we spend our time learning how to …

Research voraciously, and understand how the things around us work at a basic level.
Communicate effectively with other human beings.


is totally ridic. I don't think people are advocating learning to code in place of broader skills. In fact, I would guess that there are plenty of people with these skills who lives are enriched by learning to code, so I am glad some people are out there building products for them.
posted by dame at 12:16 PM on May 15, 2012 [5 favorites]


Ok, I am going to defend Atwood a bit. I think he is just stating his point poorly. I'm sure he does not really object to people learning how to code as an exercise, or to get some insight into how computers work. I think the point he is trying to make is that learning HTML off codeacademy does not qualify you as a Software Engineer.

This is really part of a larger debate within the profession about how woefully underqualified most programmers seem to be. This is a guy who thinks most professional programmers can't actually program.
posted by Ad hominem at 12:27 PM on May 15, 2012 [1 favorite]


It can help interest people who were previously put off by some aspects of dev culture, and maybe diversify the joint. Now that I think of it, maybe that is this dude's real problem.

Yep. Insular community runs into intellectually curious "outsider". And once everyday people find out coding isn't as hard as it looks, that takes away a bit of the magic from the wizards.
posted by Blazecock Pileon at 12:29 PM on May 15, 2012 [4 favorites]


Then maybe he needs to work on learning to "Communicate effectively with other human beings". I don't think anyone thinks learning HTML (or Javascript, which was what I was talking about) makes them instantly ready to be a Software Engineer. I think that is a very convenient strawman to excuse being a jackass.
posted by dame at 12:32 PM on May 15, 2012 [4 favorites]


I think the point he is trying to make is that learning HTML off codeacademy does not qualify you as a Software Engineer.

But nobody's made any such assertion.
posted by Edison Carter at 12:34 PM on May 15, 2012


It's just backlash for backlash's sake.
posted by Edison Carter


It's just backslash for backslash's sake.
posted by StickyCarpet at 12:35 PM on May 15, 2012 [8 favorites]


I don't code because I expect to get a job doing it. I code because kicking my own ass trying to shave another 20% off a puzzle algorithm is better for my mental health than getting my ass kicked by other people at chess or go.

And I also do cross-stich, so there.
posted by CBrachyrhynchos at 12:35 PM on May 15, 2012 [2 favorites]


Another coder/cross-stitcher here..
posted by of strange foe at 12:37 PM on May 15, 2012


So, Bloomberg thinks he can learn Zed Shaw's profession in his spare time, and but he gets pissy at someone else for pointing out the absurdity. Think of the ridicule a politician would garner if he tweeted "I'm going to go to investment banking academy and learn how to make money!"

I think most of you are missing the point that Zed and Bloomberg are both promoting snake oil that says making software is easy once you learn a few arcane secrets. Zed has descended to the level of a woo-apologist troll with his "resentful" schtick.

And yes, basic programming is easy to learn, and everyone should learn it. But there are thousands of hours of practice and theory between that and writing software for things that actually matter. You know, like flight control systems, or medical devices, operating systems, etc.

And every time you bitch about bad software, just remember who made it acceptable. It wasn't people like Jeff Atwood.
posted by 0xdeadc0de at 12:39 PM on May 15, 2012 [1 favorite]


Jeff's plumbing analogy ruins his argument for me. Everyone probably should learn about plumbing or else they will end up hiring an expensive plumber for what could be a loose toilet chain. Everyone who drives should learn more about car repair so they don't get ripped off by the mechanic, or assume he is ripping you off when you actually need that fluid changed.

He does say "But I can also recognize plumbing problems when I see them without any particular training in the area.". Sure, you can recognize when there's water on your floor. But do you need a new toilet or do you need a new washer?

By that same logic, people may want to learn at least some programming so your company doesn't pay a ton of money to update a few pages on your website or generate reports that are a couple SQL select statements. They would also know when they need to hire a professional because their nephew doesn't know anything about web security.
posted by Gary at 12:41 PM on May 15, 2012 [4 favorites]


This is a guy who thinks most professional programmers can't actually program.

Back in the day, Atwood himself used to seem like kind of a mediocre programmer. I haven't followed him recently to say anything about what he's like now.

That said, I don't think this is a situation where Atwood wants to remain one of the privileged elite or whatever. The guy helped build stackoverflow, after all.
posted by a snickering nuthatch at 12:43 PM on May 15, 2012


Then maybe he needs to work on learning to "Communicate effectively with other human beings".

I agree, if he is trying to say that coding != software development, and I think he is:

•It assumes that coding is the goal. Software developers tend to be software addicts who think their job is to write code. But it's not. Their job is to solve problems.

He could have written a much better piece about what exactly developers besides coding and focused on what you need to learn to be a developer.

Like I said, Atwood is putting forth an argument about the nature of the profession, that we are not coders or programmers per se but "Solution Deliverers"
posted by Ad hominem at 12:46 PM on May 15, 2012


And every time you bitch about bad software, just remember who made it acceptable. It wasn't people like Jeff Atwood.

I like to hope anyone who has done client work knows there are many people to blame and usually none of them are the software engineers.
posted by dame at 12:47 PM on May 15, 2012


To those who argue programming is an essential skill we should be teaching our children, right up there with reading, writing, and arithmetic: can you explain to me how Michael Bloomberg would be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder?
Because he might have better analytical skills as a result, helping to come up with more innovative, sophisticated solutions to problems than he otherwise does?

I couldn't get past the first few sentences of that first link. Atwood's argument is so fundamentally flawed or poorly presented—or both—right out of the gate, that I don't see the point in trying to read on and decipher something meaningful out of it. And you're a software developer? Dude, get your thoughts together a little better before you vomit them out onto the screen, next time.
posted by Brak at 12:51 PM on May 15, 2012 [2 favorites]


I think most of you are missing the point that Zed and Bloomberg are both promoting snake oil that says making software is easy once you learn a few arcane secrets. Zed has descended to the level of a woo-apologist troll with his "resentful" schtick.

Well, thanks to the advantages of Amazon's "look inside" feature, we can know this just isn't true.
"If you go through this book, and do each exercise for one or two hours a night, you will have a good foundation for moving on to another book. You might not really learn 'programming' from this book, but you will learn the foundation skills you need to start learning the language."
---From Learn Python the Hard Way, unfortunately no page reference because the preview is for the Kindle edition, but it's the second full paragraph after the ToC.
And that's probably the most modest promise I've ever read in a book about computer programming in any language. I don't know that Bloomberg is promoting anything WRT software development, do you have a cite?
posted by CBrachyrhynchos at 12:55 PM on May 15, 2012 [2 favorites]


Atwood: We have way too many coders addicted to doing just one more line of code already.

I see what you did there.
posted by LMGM at 12:56 PM on May 15, 2012 [1 favorite]


I've spent the past few days lurking around on the latest humanities vs sciences thread of doom, so maybe that's coloring my perception. I also freely admit to not knowing first thing about code myself.

But to me, this article read like a giant slap in the face to the entire "let's eliminate all those illogical fields like art and English" crowd. If the thread linked above and the closing of university departments left and right are any indication, it seems like there's a good subsection of theworld that would dearly love to eliminate any non-computer-related field in the name of cost and "practicality." And here's a guy within the field saying "look, I like it here, but frankly some people have the aptitude for it."

Even if there is an element of "hey kids, off my lawn" in this article, I have to admire a guy who readily admits that the (potentially lucrative) career choices that worked for him won't necessarily work for everyone. That seems to be a vanishingly rare trait in current national dialogues about employment.
posted by ActionPopulated at 1:01 PM on May 15, 2012 [1 favorite]


Looks like another case of a straw man beating a straw dead horse.
posted by swift at 1:09 PM on May 15, 2012


I literally started yesterday on my new "Python in Small Words for Very Young, Stupid Children"-style book, so I'm just going to accept this article as another sign of the universe being snide toward me. (In that vein and totally against the spirit of the article, any recs for ExplainLikeImFivesque tech skillz learning resources?)

I think Atwood is overestimating how rarefied and precious coding ability is--while not skilled, the average web-surfing tween will learn some BBEdit & HTML just to yell at people in forums in bold about video games--and he's underestimating how many people are desperate to find and trying to cram on skills like Mardi Gras beads to catch someone's eye.

So what do I do with my BA in English? "Get a non-hobby degree in tech instead!" is not helpful. "Don't learn to code, just go do what you're already good at, only better!" is...not helpful helpful either. My backup backup plan to sell stuffed armadillos wearing funny hats looks better and better.

are armadillos endangered? oh well, felony charges, pshaw
posted by nicebookrack at 1:11 PM on May 15, 2012 [3 favorites]


The point of Code Year isn't to get everyone to become programmers and engineers. The point is that computers aren't as scary as so many people think they are, and yes, understanding how to use a computer is a basic skill, like reading, writing, and arithmetic. If you've learned a little coding, you have learned a little of how computers work. It doesn't mean that you need to code your own solutions to problems or generate vast amounts of code for codes sake, as the first article implies. What it means is that you have a better understanding of what computers are capable of, and you're better able to utilize computers and interact with things or people that use computers. Full disclosure: I've contributed to Code Year.
posted by brenton at 1:13 PM on May 15, 2012 [13 favorites]


*desperate to find JOBS, where we can put our hard-won ability to print "hello world" and italicize things to good use
posted by nicebookrack at 1:15 PM on May 15, 2012 [1 favorite]


I think the point he is trying to make is that learning HTML off codeacademy does not qualify you as a Software Engineer.

And companies like mine don't need $120,000 a year software engineers to do things like configure Wordpress plugins. Someone who is self-taught by things like Code Academy (like me) can do that fine.
posted by melissam at 1:20 PM on May 15, 2012 [8 favorites]


Learning to code is not in itself very useful

I like Jeff Atwood a lot, but this is a nerd not seeing the forest for the trees. The whole premise of his article is flawed: no one is saying everyone should become programmers. My take on the idea is, "You ought to learn the basic rudiments of scripting/ programming/ whatever because it's not as hard as you think and it will open your eyes to ways of making your current job easier."

There are so many times I talk to my wife or sister or Dad about some repetitive task they have and I know it would be trivial to automate. It's not a question of someone optimizing compilers, it's a question of giving people the confidence and the toolbelt to dig deeper into Excel macros or whatever they work with. How many people who could really use one don't know what a Mail Merge is in Office?
posted by yerfatma at 1:22 PM on May 15, 2012 [4 favorites]


Eye lurnd 2 c0de butt nv3r learnd 2 wryt.
posted by blue_beetle at 1:23 PM on May 15, 2012


I think the point he is trying to make is that learning HTML off codeacademy does not qualify you as a Software Engineer.

No one is saying everyone should be a software engineer. Saying that everyone should code is something very different.

I think that coding is like writing in this respect. Most of us don't have the aptitude or interest to write a good novel. We don't know how to structure a compelling plot or how to work with editors to revise our work to a professional level of quality. If we tried to write a book we'd probably wildly misjudge how long each step would take us, we'd have a poor sense for what is marketable, etc. But none of that means that our ability to write—at the level of, say, a Metafilter comment—is any less useful, or that we should just give up and fall back on smoke signals and interpretive dance because our writing is never going to be of the very highest quality.

Likewise, most people aren't interested in learning to design, write, and ship a commercial-quality piece of software, but that doesn't mean that knowing how to code at a basic level isn't worth it. You don't need to be a software engineer to make your life easier by automating tedious tasks.
posted by enn at 1:25 PM on May 15, 2012 [4 favorites]


Another coder/cross-stitcher here.

At some point there absolutely must be some form of knitted-stitched computer language, like a cross between spies communicating through coded color threads and those old computers directed through paper holepunched cards, only fuzzier and more attractive to hang on the wall.
posted by nicebookrack at 1:26 PM on May 15, 2012 [1 favorite]


I think most of you are missing the point that Zed and Bloomberg are both promoting snake oil that says making software is easy once you learn a few arcane secrets.

I've never seen Zed Shaw say anything like that. Cite?

(Lest there be any confusion on the subject, I'm no relation to Zed Shaw.)
posted by Zed at 1:35 PM on May 15, 2012


> Because he might have better analytical skills as a result, helping to come up with more innovative, sophisticated solutions to problems than he otherwise does?

Well, then, I must be a god damn analytical genius by now. I should run for mayor of New York. Or perhaps he'll learn fuck-all aside from how to make hello world and a simple web page from the class he'll actually be taking.

When I was young and graded proficiency tests given to prospective interviewers back around the dot-com bubble, more than nine out of ten couldn't write a function to evaluate whether a year was a leap year, and they were given the algorithm. It hasn't really changed that much since then. There is a ridiculously wide divergence of talent and skill in this industry, and those unreal expectations are damaging, for they waste time and money and lead people into careers that they are not suited for.

Jeff is arguing against the poisonous culture that encourages people to get into programming who really shouldn't be. Maybe Code Year isn't a part of that culture, but Zed is out of his fucking mind if he actually believes Jeff is making his argument based on resentment. Ask any programmer how thrilled they are when they actually find a new hire who knows their shit.
posted by 0xdeadc0de at 1:36 PM on May 15, 2012 [2 favorites]


> Cite?

The article at the top of this page, duh. Oh, I know, he doesn't say it explicitly, but you have to respect my ability to understand what he really means, the way he really understands that Jeff is lashing out in resentment that programming is now too easy to learn.
posted by 0xdeadc0de at 1:44 PM on May 15, 2012


Yeah, my reaction is the same as ActionPopulated. I don't know if any of the same people who are skeptical about the humanities are being critical of Atwood — maybe there's no overlap. If so, however, there's a lot of irony in that.

Programming is a very specific technical skill and to the degree to which it's a skill deeply involved with structured problem-solving, it's absolutely not unique in this regard and it's absolutely not the best approach to teaching/learning this sort of general skill. People no more have a general need to learn how to write computer programs than they do to learn how to design electronic circuits or write sonnets. It certainly doesn't harm people to learn these things, all else being equal. Indeed, learning pretty much anything is good for you and in some sense useful. The argument for the utility of people who don't need to code learning to code is exactly the same as it is for many humanities skills that are often ridiculed. Or, again, for other engineering (or science) skills that do not even remotely receive the same sort of promotion.

And Atwood is also correct to differentiate between knowing a a computer programming language or two (or three, or four, or six) and being a trained engineer. Today's world is filled with people who don't have sufficient training and skills to properly write software — and those are just the ones who actually do have some training. There's an even larger number of dabblers and self-taught incompetents who think they know what they're doing, but they don't. I've been coding, mostly without formal training (though I have some) for more than thirty years. And I'm incompetent. I'm no engineer, I don't have the training of an engineer, my code doesn't deserve any respect. That's not to say that there aren't exceptions to this rule, because there are. There are people who write quality mission-critical code who don't have the formal training for it. They've managed something very difficult, not unlike someone designing and building a bridge to contemporary standards without an ME or related degree. But most people who are building such "bridges", including those who ostensibly have training, are building crappy bridges that are unsafe and frequently fall-down. And a big part of the reason for this is this absurd and ignorant notion that computer programming is still some sort of informal craft that anyone can personally master with a little effort. It's not. It's an engineering discipline. (It's also a scientific discipline, but that often involves a different set of skills and being a brilliant computer scientist doesn't mean that you're a competent engineer, just as being a brilliant engineer doesn't mean that you're a competent computer scientist. You might be, but it's not necessarily the case.)

I would have thought that the faddish and terribly naive idea of my youth that everyone needed to learn to program would have been debunked by now. I recall working in a microcomputer lab (using DEC's CPM machines, as it happens) in a Business Department in 1984 to accomodate all the business majors who were required to take an intro programming class. They learned BASIC, of course. This was stupid. Most of those people wouldn't ever have need to program again; worse, god forbid that they did.

The only reason why this nonsense about "everybody should learn to program" hasn't entirely disappeared is because of the rise of the Internet and the enormous demand it created for anyone who could write crappy code. That shortage became entrenched so we live in a world filled with two orders of magnitude more crappy code than before. Because more than half of the people writing this code have either no real engineering training, or it's inadequate.

Now, again, I'm someone who believes passionately in the value of the humanities and a liberal arts education. When I studied ptolemaic astronomy in college (yes, really) I wrote a program to simulate basic ptolemaic astronomy, where the user could play with it like an interactive simulation, to help my classmates who were having difficulty with some things, but particualarly retrograde motion. I enjoy coding, I've done it a bit professionally, and I think that it's similarly useful in liberal arts terms as it is to learn, say, some more obscure math or a dead language. But it's not special in this regard, there's about a million things which are similarly useful. (How about introductory logic?)

And it oughtn't be vocationally useful — the only reason it is is because there's insufficient supply for all the programming being done at all levels, particularly in conjunction with the the fact that businesses have realized that they can get away with employing people with little or no training to code very cheaply because for some absurd reason we tolerate deeply unreliable IT when we shouldn't and don't have to. People tolerated poorly built bridges and homes and such for a long time, too, even after the knowledge and technology didn't require it. Because there's inertia and people take a long time to learn better and because people who make their living as craftsmen are especially resistant to change and protect their ability to build bridges which fall down but which are built according to some dubious lore they learned when they apprenticed.

Computer programming, both academically but especially professionally, has been absurdly and extremely expensively and irresponsibly resistant to becoming a true engineering discipline. And people cannot become engineers as a hobby, or by learning to use a few engineering tools. Nor should they attempt to do so.
posted by Ivan Fyodorovich at 1:47 PM on May 15, 2012 [6 favorites]


Well, then, I must be a god damn analytical genius by now.

When compared to the people that this flowchart was directed at, you probably are. There are countless people in this world who would benefit greatly from the exposure to structured problem solving that an introduction to coding fundamentals provides.
posted by radwolf76 at 1:52 PM on May 15, 2012


I'm pretty sure what ActionPopulated said is the exact same reason why I feel weirdly sympathetic to this article despite it making a point that I completely disagree with. I love dabbling in code, even if I'm terrible at it, and I'd never tell anybody to not learn something as a hobby even if it were genuinely useless. I haven't even come across many coders who fetishize code-for-the-sake-of-code in the way he's talking about, and it seems like a straw man. There's plenty of room for people to play with code without thinking they have to become professionals. But there are so many people who deride non-STEM activities that I'm willing to go with this just to hear somebody say that things like nuanced reading and writing are as important as being a programmer.
posted by Tubalcain at 1:52 PM on May 15, 2012 [1 favorite]


Problem solving is the critical skill to develop

This may be a tangent but I couldn't agree more. Even some programmers can't reason about software. Being able to formulate a hypothesis about something you are seeing, figuring out *some* way to test your hypothesis and proving your hypothesis correct is maybe the most valuable skill in software development.
posted by Ad hominem at 1:53 PM on May 15, 2012 [2 favorites]


Once upon a time, a well-rounded liberal arts curriculum included shop, home economics, and music. Not that there were any illusions that a semester building spice racks, cooking puddings, or sawing away at Mozart ever turned a kid into a master carpenter, cook, or concertmaster.

Frankly, I'm astonished that after multiple posts speculating that the next generation of computers inhibits DIY programming as a hobby, that people are now insistent on playing gatekeeper.

The article at the top of this page, duh.

Bloomberg's only quoted statement in the first article is the tweet, "My New Year's resolution is to learn to code with Codeacademy. Join me!" He's not mentioned at all in the second article. So where did Bloomberg make a statement about software development, rather than the statement that he's taking up a hobby?
posted by CBrachyrhynchos at 1:53 PM on May 15, 2012 [3 favorites]


My take on the idea is, "You ought to learn the basic rudiments of scripting/ programming/ whatever because it's not as hard as you think and it will open your eyes to ways of making your current job easier."

I have a friend who works for federal law enforcement, and this person, a non-programmer and very sweet person, was, one day, talking about their work over mimosas. Without getting into details, this project involved, in very broad terms, manually converting non-digitized information into digitized information and then manually searching that digitized information for hits that can help with cases.

And by manually, I mean paying highly-skilled people to do this conversion and searching by hand, which is slow, error-prone and a complete waste of this person and their co-workers' skill sets. This person noted that their workload was very heavy and that they were concerned about not getting it done in time. This person was very surprised to learn that nearly everything described about this project could have be automated in about a half-hour, had they known a little scripting, either by them or by the IT staff that the government had already hired, using software they already had installed on their computers.

Even knowing that the problem is easily solvable is half the battle, sometimes.

We really need our elementary schools to move beyond basic math problems that involve two trains moving in opposite directions, etc. because people really lack problem-solving skills that would save them all kinds of work and make themselves more productive, happier and competitive. I really scratch my head at why our school system doesn't make more use of simple programming to help teach kids basic problem solving skills.

People like Atwood who think they're hot shit and who make computer science into an ivory tower are a major part of the problem, because those like my friend think people in IT are magicians or geniuses, when they are, in fact, just glorified problem solvers who, more often than not, are mostly just using prewritten APIs (including Atwood, I'll bet) that someone else wrote, which hide most of the code under a hood of abstraction, anyway.
posted by Blazecock Pileon at 1:56 PM on May 15, 2012 [11 favorites]


Automating various and often idiosyncratic tasks with information technology is certainly a frequently encountered need in most contemporary environments. It's something that non-specialists should be able to do, as a part of using the IT tools they are using as part of their work. It absolutely should not be typically accomplished using scripting technology that originated from a more technical environment, as almost all such tools have, but rather should be accomplished with facilities that are organic, contextually-similar, and most likely functionally-integral to the IT tools that such users use every day. Such users should not have to "code" in any sense of the word we're using here. They will very likely need to problem-solve in a structured fashion; but, again, that's a general skill they either already have or should have because in an advanced economies like we see around the world today, that's a required skill for the average worker, not just senior people or those in positions that specifically require it. And, as a general skill, its manifestation within computer programming is too narrow and too idiosyncratic to be the best means for acquiring it.

The fact that ad hoc automation like this is almost never possible without highly technical and highly variable scripting tools which were designed to be like computer languages by people who regularly use computer languages and not to be easily accessibly to end-users is exactly why such automation isn't accomplished remotely as often as it ought to be. And the reason why these tools are not shipped as integral and user-friendly components of commonly used information technology is because of this absurd prejudice that using computing technology and being proficient with computing technology has, or should have, anything to do with programming computing technology.
posted by Ivan Fyodorovich at 2:19 PM on May 15, 2012 [2 favorites]


> So where did Bloomberg make a statement about software development

I said "promoting snake oil", as he is endorsing a free product. You may argue that it isn't snake oil (I may have been hasty, judging it by Shaw's defense rather than its own merits), but don't try to reframe what I said.
posted by 0xdeadc0de at 2:19 PM on May 15, 2012


The central problem is that I see computer-literacy advocates as being analogous to advocates for chess, sports, arts, crafts, DIY home-repair, music, world literature, and non-English languages. Sure, some of them probably oversell the university of their pet schlub, but probably not to the ridiculous extent that's the basis for this rant. Even if someone is selling "become a computer programmer in 40 days" snake oil I'm not certain that's enough to justify the get-of-my-lawn position here.

0xdeadc0de: Ok, then I'll quote your claims directly.

So, Bloomberg thinks he can learn Zed Shaw's profession in his spare time, and but he gets pissy at someone else for pointing out the absurdity.

1: Where did Bloomberg claim that he can learn programming as a profession.
2: Where did Bloomberg get "pissy?"

I think most of you are missing the point that Zed and Bloomberg are both promoting snake oil that says making software is easy once you learn a few arcane secrets.

3: Where have Zed and Bloomberg stated that making software is easy in any form?
posted by CBrachyrhynchos at 2:28 PM on May 15, 2012 [1 favorite]


Oh hurray, professional elitism rears its head once more. Goody. I'll join in, why don't I?

Very nearly none of the programmers I have ever known should, realistically, have called themselves "software engineers". They merely sought to cloak themselves with the desirable aura of a profession that was far more tightly controlled and rigorous. I've known one, now that I think of it. One. Maaayybe two.

When "software engineers" start paying for Errors & Omissions insurance, are required to spend time as an EIT, are subsequently required to take a reasonably painful exam (two-day version if you want to be a more serious version of engineer), must be licensed by the state (depending on reciprocity; some states may easily decide they don't like your state, and you have to jump through still more hoops before touching anything in their jurisdiction, god help you if you're from another country), are required to perform continuing education yearly, and if they make a serious mistake they run the risk of being barred from the profession for life (ask the guys at Gillum Assoc. about that), then they can be called software engineers.

Until then, they're programmers. Or coders, if they like. Competent as they may be, they're not engineers and the law should prevent them from saying they are, with serious legal penalties (I'm talking potential imprisonment).

There. Now that is how you do professional elitism.
posted by aramaic at 2:30 PM on May 15, 2012 [4 favorites]


> It's just backslash for backslash's sake.

This is actually how I saw it at first.. I'm not sure what that says about me.
posted by MysticMCJ at 2:33 PM on May 15, 2012


"There. Now that is how you do professional elitism."

Yes, and I agree with you entirely. That's how programming professionally should be. The fact that it isn't is the problem, and a big part of why it isn't is this nonsense that coding is a craft, like woodworking, that anyone can learn and should, because it's fun and useful.
posted by Ivan Fyodorovich at 2:35 PM on May 15, 2012


I wouldn't be surprised if the bizarre strawman Atwood is arguing against was originally informed by this CNN opinion piece by Douglas Rushkoff from mid-January. Rushkoff explicitly draws the connection between Codecademy/Code Year and jobs (via a presumably speculative quote from a friend about the 'free online course' business model likely being tied to head-hunting fees), and since the article starts off by talking about Bloomberg, a reader might be prone to assume that's the basis of the mayor's interest as well (not for himself, but for the city's legion on unemployed).

That said, I like what Code Year's doing, though certain aspects of the course design seem to betray its founders' inexperience (possibly both in teaching and in professional programming). It also suddenly shifted focus last month from Javascript to HTML/CSS, which seemed like a betrayal. They originally framed the choice of Javascript as one of convenience, emphasizing that the concepts learned could be usefully applied to other languages. I guess now it was really about web development all along?

On preview -- in response, most recently, to b1tr0t, but also to the others with similar opinions -- why not just learn to code for the sake of coding? Why is that so obviously a "bad idea"? Why not tinker with things for the sake of tinkering with them? What's the downside here? It's fun, like doing a crossword puzzle or making a crossword puzzle. Why not know how to do more things?

(Last month I made a little game. It's total scratchware, and all sorts of programming tasks were abstracted away by the framework I was using, but I couldn't have conceived of doing it without the understanding of arrays and for-loops and objects that I gleaned from the Code Year lessons in the two months prior. What's the harm here?)
posted by nobody at 2:39 PM on May 15, 2012 [1 favorite]


(excuse the typos. ugh.)
posted by nobody at 2:41 PM on May 15, 2012


The fact that ad hoc automation like this is almost never possible without highly technical and highly variable scripting tools which were designed to be like computer languages by people who regularly use computer languages and not to be easily accessibly to end-users is exactly why such automation isn't accomplished remotely as often as it ought to be. And the reason why these tools are not shipped as integral and user-friendly components of commonly used information technology is because of this absurd prejudice that using computing technology and being proficient with computing technology has, or should have, anything to do with programming computing technology.

I actually think a significant part of this is that it's hard to express procedures (that take arguments) graphically. We want people to be able to use GUIs, we want people to be able to automate their work, but we haven't really figured out good ways to automate GUIs. Photoshop Actions are close, but I'm not aware of any way to parameterize them.

There's stuff like TestComplete that can take a recording of someone interacting with a GUI and output an editable text script in a language that supports procedures that take parameters. At least there the user is starting the process by more or less normally interacting with the application they want to automate. But that still requires people to be able to at least have some minimal fluency in the scripting language that it outputs.
posted by a snickering nuthatch at 2:42 PM on May 15, 2012


No, he is arguing against just learning some basic code by rote that can do specific things.

No he's not. To quote:
can you explain to me how Michael Bloomberg would be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder (emphasis mine)
Such an assertion implies that he doesn't just know how to write basic code by rote, which in turn implies that Bloomberg shouldn't learn to code, no matter how far he takes that education.

If that's not his point, he's certainly doing a poor job of making whatever it in fact is.
posted by Brak at 2:42 PM on May 15, 2012


(I don't mean to imply that this is the only problem; there's also unsolved- and by that I mean completely not-on-anyone's-radar- issues regarding composability in GUIs.)
posted by a snickering nuthatch at 2:45 PM on May 15, 2012


As a founder of Stack Overflow, Atwood is very clearly part of the solution, not part of the problem.

As a longtime contributor to SO, I've observed that the site is not always friendly to newcomers*. And unless the site is coded in assembly, in abstract terms he has essentially been using the same types of problem-solving skills that people would learn the rudiments of via Codecademy, et al., only on a broader and perhaps more efficient scale.

He is suggesting that just learning to code for the sake of coding is a bad idea.

Some of his "advice" is perfectly applicable to people who program every day. If you get paid writing something every day in 100 lines of code that can take 10, you're probably doing it wrong. But learning the right API call and the vagaries of a language's syntax are usually issues of little concern to people who are just learning how to solve problems or otherwise expand their horizons, which is really what Bloomberg is calling for in his tweet.

* - For various reasons, to be fair, but which can occasionally include a thread of insularity or the need to protect territory from the unwashed.
posted by Blazecock Pileon at 2:45 PM on May 15, 2012


And it oughtn't be vocationally useful — the only reason it is is because there's insufficient supply for all the programming being done at all levels, particularly in conjunction with the the fact that businesses have realized that they can get away with employing people with little or no training to code very cheaply because for some absurd reason we tolerate deeply unreliable IT when we shouldn't and don't have to.

I couldn't disagree more. In my work, it is way more useful for me to have the basic skills to slap together a prototype of of an interaction without having to hand it over to a Professional Programmer (tm). It would take them longer, be less interesting to them, and just be too much overheard. But that I can do it? Vocationally useful. It's not going to be production-level code, but that isn't the point. The point is to determine what we should be production-level coding. If anything the reason there is a shortage of Professional Programmers to work on the hard projects is they are busy doing stupid things that a modicum of knowledge is sufficient for.

I also must admit ot being slightly lost by the link between this and humanities. I am certainly not on the STEM or nothing side (everyone I know who went to art school is employed and happy, and my degree is in literary theory fer chrissakes), and it seems as though learning a little code is EXACTLY like learning a little poetry and some art history — it gives you basic skills and appreciation for the wonders you interact with every day. And maybe you like it enough to do more.
posted by dame at 2:46 PM on May 15, 2012 [3 favorites]


b1tr0t: Atwood isn't saying that the gates must be locked and entry must be carefully regulated just like in law or medicine. He is suggesting that just learning to code for the sake of coding is a bad idea. This is good advice, and should be followed.

I'll argue that there's abundant evidence that learning for the sake of learning likely makes a person happier and more resistant to age-related cognitive disorders. I'll also argue that doing shit for the sake of wanting to do it, even if you're crap at it is likely an inherent good. Perhaps because I have a professional life and paid the financial, emotional, and physical cost of chasing that professional accreditation, I'm a big fan of leisure time as an opportunity to do things at an entirely unprofessional level of competency.

Ivan Fyodorovich: Yes, and I agree with you entirely. That's how programming professionally should be. The fact that it isn't is the problem, and a big part of why it isn't is this nonsense that coding is a craft, like woodworking, that anyone can learn and should, because it's fun and useful.

I don't see why "fun and useful" isn't sufficient reason for anyone to learn to do something. For that matter, I think "fun and useless" is sufficient.
posted by CBrachyrhynchos at 2:53 PM on May 15, 2012 [1 favorite]


Sarcasm start.

Man I hate Bob Ross. The audacity of that guy inspiring legions of people to think that if they could paint they could somehow be an artist. Clearly you can only be a real artist if you went to a real school or spent years practicing your craft (preferably with minimal caloric intake).
Look at how professional design has suffered with the sudden influx of mediocrity based in part on instructional hoo-haw like Ross's.

Sarcasm over.
posted by forforf at 2:54 PM on May 15, 2012 [2 favorites]


I don't think everybody should learn to code. But I think all young people should be taught to code in school. If they don't like it, fine, once they graduate they can stop worrying about it.

But it's becoming increasingly clear that the future of labor (in the Western world anyway) is in programming. As more and more things get automated, as computing devices become smaller and more ubiquitous, the demand for non-programming labor will shrink, and the demand for coders will increase.

For example, if self-driving cars replace taxi drivers the labor demand for the drivers will shift to the coders who will write the software and features of the cars and dispatching systems.

If I have kids, I will teach them to code, and hope to do it in a way that doesn't turn them off to it. Because I believe that it is the safest way to enter the workforce.
posted by braksandwich at 2:55 PM on May 15, 2012


The "everyone should learn to code" movement isn't just wrong because it falsely equates coding with essential life skills like reading, writing, and math. I wish. It is wrong in so many other ways.

So true. I failed school miserably. Our school ibrary had two (1981) Microbee mini computers that read instructions off tape. I was addicted to them instantly and understood them implicitly - I was banned from the computer room after altering a instructions that wrote a cowboy to the screen. I changed the colors and added the words "Hi ya" You had to stick to what was in the book lest you break the computer.

When I left school there weren't too many programming jobs that didn't require a comsci degree - and you needed good math to attain one - for some reason. So I drifted, did drugs, got in trouble, but in 1990 I met a dude who worked at Autodesk, we got talking and bingo, I had a job and was instantly saved.

30 Years later my father still doesn't quite believe I earn a wage, and is bemused that I own a house and support a wife and three lovely kids. I love coding, and love solving problems. The older I am the better problem solver I become.
posted by the noob at 2:56 PM on May 15, 2012 [1 favorite]


> 3: Where have Zed and Bloomberg stated that making software is easy in any form?

Really? "how easy it is for them to learn programming" "I am the proto-enabler of the meme that everyone can learn to code" "Now it's much easier to learn"

Now you give us your disingenuous rationalization that he doesn't mean "programming" as in making actual "software", and we can be done with this stupidly hostile diversion.
posted by 0xdeadc0de at 2:57 PM on May 15, 2012


And lest I come across as being pedantic about wording for its own sake, perhaps I should better explain myself. Atwood is a computer scientist, as am I. For better or worse, I hold people who claim this title to a higher standard when it comes to communicating their ideas.

0xdeadc0de, the irony of your response to my original post is that, if this guy presented the equivalent analytical skills present in this writing, in an interview with me, he wouldn't be hired. It's inconsistent. Too many edge cases. Low quality.

He knows better. He's trying to make a rational, logical argument, and doing a poor job of it. I've come to expect that your average person doesn't have great critical thinking skills, and as such often argues poorly. I expect more from people in this industry. If he can't put together a more sound argument, he should stop contributing to the morass of useless information on the Internet. He doesn't get a pass just because he helped create a large knowledge base of useful information. If anything, that puts an even higher standard on him.
posted by Brak at 2:58 PM on May 15, 2012


"It also suddenly shifted focus last month from Javascript to HTML/CSS"

Well, I have a big problem with anyone, anywhere, who equivocates markup with programming. That's a big red flag to me, right there. Writing markup is not programming.

"On preview -- in response, most recently, to b1tr0t, but also to the others with similar opinions -- why not just learn to code for the sake of coding? Why is that so obviously a "bad idea"? Why not tinker with things for the sake of tinkering with them? What's the downside here? It's fun, like doing a crossword puzzle or making a crossword puzzle. Why not know how to do more things?"

I won't speak for anyone else, but I am certainly not disagreeing with you about this.

What I have a problem with is four related claims: 1) that people should know how to tinker (with coding, their plumbing, their car, whatever). That's the product of a very self-centric point-of-view by those who are naturally tinkerers. (Which emphatically includes me, as it happens.) 2) that coding is some sort of ideal or nearly ideal equivalent to structured problem solving and that it therefore should be taught, or learned, as fundamentally and for the same reasons as, say, math. 3) that learning to code informally or incompletely is in any sense sufficient for professional competency. And, 4) that coding outside programming as an engineering profession is something that people should be doing. (They are, in fact, doing this and that's why we live in a world of unbelievably crappy software.)

But I'm not saying that anyone who is interested in learning some programming shouldn't. If they're interested, they should for the same reasons they'd learn about anything they're interested in. But it's not special and it's certainly not something that is good for everyone. And there's a vast gulf between tinkering with code for fun and writing software and the two should never be confused for each other. That they are is a big problem.
posted by Ivan Fyodorovich at 2:58 PM on May 15, 2012 [1 favorite]


One of my life goals is TEACH YOURSELF HOW TO MAKE VIDEO GAMES. I'm now in the third year of this pursuit, and I've found success by breaking seemingly impossible goals into tiny tasks, and learning only what I need to accomplish each task as it comes up. If you're unable to solve a particular problem (or, later on, your solution doesn't perform well enough), you go study until you better understand the underlying concepts, and then you come back and it seems effortless.

As an example, a game might need some form of enemy AI. How do you make enemy AI? This utterly baffled me at first. Well, a little reading and you find that Finite State Machines are a thing that people often use for this. How do you write one? Well, (list of dependencies continues for 3 pages, and ends with if-then statements). I find that for most big tasks, there are one or two basic CS or math concepts that I just don't get... so I go out and find info / ask friends, write a couple throwaway implementations to make sure I understand them, and suddenly my game's enemies can transition between "pissed off", "calm", or "suspicious", and I understand exactly how it all works. Now I'm learning about coroutines, another way to do it. Awesome!!

Learning how to program because you have a very specific goal you want to accomplish (like seeing a hovercraft zip around a world you built yourself) can take just as many years as learning it as a trade in school. Finishing a big project with complex systems still requires organization, structure, patterns... which you find out the hard way as your first little one-screen demo becomes an incomprehensible clusterfuck.

Incidentally, this is the exact same way I learned how to compose music, which is now my day job -- fake it 'til you make it.
posted by jake at 3:01 PM on May 15, 2012 [6 favorites]


Something is deeply, horribly, terribly wrong with politics in the state of New York.

Well yeah, but what does programming have to do with that?
posted by ubiquity at 3:14 PM on May 15, 2012 [1 favorite]


My argument may have been confusing to because it's necessarily two arguments in one and if I weren't making both of them, I'd not be making either of them. That is to say, I'm arguing a) against the push that it's good for everyone to learn to program and b) I'm arguing that programming as a vocation, in any sense, isn't a craft and shouldn't be approached like a craft and shouldn't be self-taught, because there's an prevalent equation of programming as a hobbyist interest and programming as a vocation.

The circular saw analogy was pretty good because lots of people have circular saws and enjoy using them but most of those people would have no business being called upon to use a circular saw as part of their job and, if they were, likely both they and the work they'd be doing would suffer for it. The fact that lots of stuff is being made that requires a circular saw has become an excuse that most everyone should know how to use a circular saw, and which has also involved an argument that there's something inherently useful about knowing how to use a circular saw as a liberal art and so most everyone should be taught to use a circular saw because they'll be better people for it, like knowing some math or a foreign language. None of these things are true.

That's not to say that anyone who is interested in learning to use a circular saw oughtn't! I'm all in favor or learning new things and taking up hobbies and that there's value in knowledge for its own sake, and even more so personally with regard to being curious and active.

But the falsehoods I previously listed are counterproductive. They mean that people are learning to use circular saws in the workplace who should be learning other things. They mean that circular saws are being used in the workplace when other, better tools should have been used (and that often those tools don't exist because everyone assumes that a circular saw is the best tool there is). They mean that people are using circular saws in the workplace who aren't competent and thus crappy products result from this. They mean that people who aren't really interested in learning to use a circular saw for fun are doing so anyway, alternative to something that would suit them better, because they've being told that this One Size Fits All.
posted by Ivan Fyodorovich at 3:32 PM on May 15, 2012


Engineering is not the same as coding, and enforcement of professional standards will not increase quality in the programming world. First, we've not worked out the best way of doing it. Secondly a bit of incompetence in non important bits of your codebase is fine. Third, fast deployment and accelerated write/build/test cycles means coding is more akin to a creative task than an engineering one.

Atwood is being sorely misinterpreted here. As has been mentioned, finding Ok programmers is a nightmare task. People just can't code and all the 72 hour courses in the world ain't gonna fix that fact. Learn to program if you want, but its 99% certain you're not going to be able to translate that teaching into making something big.

Slightly off topic, but on the "markup is not code" topic. I agree, but did you see the "fizz-buzz solved with css"
example that's been doing the rounds?
posted by zoo at 3:44 PM on May 15, 2012 [1 favorite]


I think your argument is confusing because it makes no sense.

For one, programming is not using a circular saw. It is not dangerous and you are nor going to cut your hand off. And if you are mad about bad software, take it up with the big bosses. I'm not saying pro devs don't make bad decisions sometimes, but I do know the number of projects I've seen where *that* is the source of the biggest issues is so tiny as to be never. Pretty much any place I can think of making products that big are the kind of companies that scour their way to the best employees.

There is absolutely no harm caused by people messing around with little projects at home. It's like lit majors arguing people shouldn't be reading novels at home because they are not pros. And that makes no sense.
posted by dame at 3:50 PM on May 15, 2012 [1 favorite]


"Kids, you tried your best and you failed miserably. The lesson is: Never try." - Homer Simpson
posted by phoebus at 4:00 PM on May 15, 2012 [3 favorites]


Here's a thought experiment. If you did need an engineering level qualification with continuous assesment in order to program, what would the world of computers look like now.

Unfortunately, you can't answer this question here as in the world of my thought experiment, mathowie would have been barred for developing metafilter.
posted by zoo at 4:03 PM on May 15, 2012 [2 favorites]


Cold Fusion Error? People have gone to prison for less.
posted by zoo at 4:06 PM on May 15, 2012


It is more like "I hear there are a lot of librarian jobs so I am going to go memorize all the catalog numbers" or "There are great jobs for mathematicians so I'm going to learn all the multiplication tables up to 100"

By the way I am in favor of people learning to code for whatever reason. I majored in CS but never got a degree and I've worked with many self taught programmers. I don't consider myself an engineer, on my best days I am a developer or a solution provider. Mainly I've made enough mistakes to know how not to make them again and realized long ago that it is a neverending process, I've been doing this my entire adult life and still learn something new every day.
posted by Ad hominem at 4:07 PM on May 15, 2012


0xdeadc0de: Now you give us your disingenuous rationalization that he doesn't mean "programming" as in making actual "software", and we can be done with this stupidly hostile diversion.

How is that disingenuous? I programmed all of the data analysis tools I needed to do my thesis and publish. I wouldn't call those scripts anything close to professional software, which is the standard that you claim Bloomberg aspires to. It's not a diversion when your argument is based on claims about Bloomberg's general aspirations and specific response to a blog post. So please provide the evidence that Bloomberg got pissy over this blog post and aspires to be a professional programmer.

Ivan Fyodorovich: What I have a problem with is four related claims: 1) that people should know how to tinker (with coding, their plumbing, their car, whatever). That's the product of a very self-centric point-of-view by those who are naturally tinkerers. (Which emphatically includes me, as it happens.) 2) that coding is some sort of ideal or nearly ideal equivalent to structured problem solving and that it therefore should be taught, or learned, as fundamentally and for the same reasons as, say, math. 3) that learning to code informally or incompletely is in any sense sufficient for professional competency. And, 4) that coding outside programming as an engineering profession is something that people should be doing. (They are, in fact, doing this and that's why we live in a world of unbelievably crappy software.)

Well, to address these one by one:

1) and 2) are equally made by overenthusiastic boosters of any hobby or vocation. And yet, we don't get the argument that people should be discouraged from the practice of chess or music because overenthusiastic boosters make superlative claims about their universal applicability.

I think we're broadly in consensus about 3) and on 4) you contradict yourself in the next paragraph. You can't simultaneously say that coding outside of an engineering professional is bad, and then it's good in the next paragraph.

But beyond that, I don't think most of the problems caused by software are the result of bad code, but the result of bad design. Gmail is working as designed when it moves the send button to three different places, all of them less prominent than the compose button. Microsoft Word is working as designed when it applies a paragraph style to a single character in the middle of a paragraph (and spawns a new style as a result). Making the implementation of the underlying algorithm less buggy and more efficient isn't going to do much if the conceptual design of the system is wrong to start with. I don't think that either of these problems were designed by amateurs promoted beyond their competence either.

Atwood points to this but misses target in venting at basic computer-literacy boosters. Higher professional standards on the people creating the code are one part of the solution. But you need a high degree of professionalism across the entire organization. And even then, Frank Lloyd Wright working with a team of professional masters bungled on at least on occasion.

And oh wait, there's more in preview.

The circular saw analogy strikes me as deeply flawed. First of all, the circular saw is a specific tool with a limited set of applications. A closer analogy would be to say that everyone shouldn't learn how to use PCREs for the same reason that everyone shouldn't learn how to use a circular saw. On that, I'll agree because a badly formed PCRE might seek backward in spacetime and replace Hitler with Hester, resulting in the proliferation of homicidal vampire bunnies across North America.

But aside from PCREs programming isn't dangerous. In fact, programming using various DSLs is often pedagogically useful in teaching other skills, especially in STEM. I must say, I'm not a big fan of crunching large datasets or graphing complex functions by hand. The right environment and DSL can open doors for experimentation and play.

I'm not making an argument that programming should be mandatory, just available outside of a context of professional practice.

They mean that people are learning to use circular saws in the workplace who should be learning other things.

This is a leap of logic. The Commodore 64, Texas Instruments Calculator, LOGO, the free software movement, Mayor Bloomberg, and CodeAcademy are not responsible for bad management decisions in the workplace.
posted by CBrachyrhynchos at 4:18 PM on May 15, 2012


Everyone under 40 should learn to program, because in the future, the only job left will be programming the robots that do all the other jobs. Yes, including all of the ones you're thinking of, and yes, eventually, including programming itself. Whether our society will survive this remains to be seen.

Everyone who can't find a job now, and who can afford to do so, and who has the aptitude and interest, should learn to program today because a job is almost guaranteed.
posted by novalis_dt at 4:22 PM on May 15, 2012 [3 favorites]


Wel, Ad hom,l as one of the only people left down here who has known nothing about code until the latest wave of Learn to Code whatever, I would say it is more like having someone point you to the light-switch, so you can see the room and find out what else you might want to learn and mess around with.

I've had a chance to learn a lot more fun stuff because I have some really smart people to help show me around (aforementioned boy- and platonic friends), and I am perhaps capable of learning that because my analytical thinking skills are pretty decent (funnily enough from all that impenetrable literary theory).

But I am starting to repeat myself, so maybe I will go do something else now. I will end by saying I find the impulse to dissuade people from learning something (esp with a whole bunch of *shoulds* to be bizarre and kinda sad. Oh well.
posted by dame at 4:25 PM on May 15, 2012


And I think few things have greater potential to disabuse a person of illusions of being able to simply create complex works of software than actually knowing a programming language and trying to build something more complex than a simple script.
posted by CBrachyrhynchos at 4:30 PM on May 15, 2012 [2 favorites]


Hey, mess around all you want. I am just saying coding is a subset of what professional developers do. I also think it is possible for someone to learn the multiplication table up to 100, go to a conference and say holy shit I have a lot more to learn. There is a whole new learning curve once you enter the workplace.

Yes, Yes, not everyone who wants to learn to code wants to become a professional developer, but some do. They have to be prepared for the fact that mastering a programming language to whatever extent is just the tip of the iceberg.
posted by Ad hominem at 4:32 PM on May 15, 2012


Seems like being able to do SQL queries could be a pretty useful skill for someone running a city. In most organizations, the people who actually do the queries and manipulate the data have the actual power to change things, the people nominally in charge have to actually ask them to make whatever change they want done.

Anyway, these people who think people shouldn't learn to program are idiots. It should be considered a basic skill, like math. Will some people not be good at it? Possibly, but there are lots of people who are a "not good" at math. We still teach it to everyone and expect smart people to be able to do it.

Yes, not everyone is going to be a professional software developer but so what? It's still a useful skill to have. Even if you're just doing SQL queries or simple PHP or JavaScript for your website.

And btw, is anyone seriously suggesting that Mike Bloomberg can't communicate well with other people?
posted by delmoi at 4:57 PM on May 15, 2012 [1 favorite]


Ivan Fyodorovich: 4) that coding outside programming as an engineering profession is something that people should be doing. (They are, in fact, doing this and that's why we live in a world of unbelievably crappy software.)

If you are doing Code Academy and then writing your own bad code from scratch, you are doing it wrong. If there is anything I've learned from being self-taught it's that you don't code if you don't have to. And if you write ugly code, people will blame you because you are the self-taught one, so you better be really damn careful. People like me also tend to develop an eye for bad code because it gives us more problems than it would an engineering genius. I spent the last two years working with software engineers with real degrees and I saw some awful code. I was the author of the coding guidelines for my workplace.

And the point shouldn't be to just teach some random people to code, there are great efforts out there to mentor these n00bs so they don't just become some terrible-software writing monsters. Like Drupal Ladder, which teaches that you need to get into reviewing code before you write it. I learned a lot from doing that and became a very cautious person sensitive to syntax and security flaws.
posted by melissam at 5:00 PM on May 15, 2012 [1 favorite]


"I will end by saying I find the impulse to dissuade people from learning something (esp with a whole bunch of *shoulds* to be bizarre and kinda sad. Oh well."

There's a big difference between "dissuading people from learning something" and "dissuading people from persuading large numbers of people to learn something". A big difference.

Also, if the danger of a circular saw were in any way part of my intent in using it as a metaphor, I would have mentioned something about it being dangerous.

"I'm not making an argument that programming should be mandatory, just available outside of a context of professional practice."

And I'm not making an argument that programming shouldn't be available outside of a context of professional practice. I do think that anything outside the hobbyist context — that is anything that matters — should be within a rigorous engineering practice with the relevant training and certification and related.

The comment just earlier by novalis_dt, which was a repeat of the same argument made at least once before in the thread, is about as wrongheaded as it could possibly be (and, not incidentally, it's exactly what people were saying 30 years ago, and it's not become true) and is an example of this confusion of the proliferation of computing technology with programming. The same argument could apply to electronic engineering, but no one is proposing it. And, in fact, there's more in the world that is a product of EE than there is of computer programming (and EE involves either explicitly programming, or something qualitatively similar) and no one claims that everyone should know EE.

It's the conflation of hobbyist knowledge, professional competence, that this particular form of structured problem solving is somehow especially useful means to learning to problem solve in a structured fashion, and that lots of computers mean everyone will need to program computers, is where the problem lies. It's not any one of these things in isolation.

The EE comparison strikes me as pretty good because it's as if, fifty years ago, people were encouraged to learn how to design and build electronic circuits because everyone will be doing it in the future, it's an ideal way for people to learn to rigorously solve problems, and that designing a large integrated circuit is something within the reach of a hobbyist/dilettante. If I were to have been arguing against that position then, I wouldn't have been arguing that no one should learn about electronics and such if they wanted to, or that there's nothing good and right and useful in learning about electronics. I'd be saying stop confusing the ubiquity of electronics with the necessity of knowing how to design and build electronics, stop confusing knowing how to build a simple circuit from a Radio Shack booklet with being someone who designs consumer electronics, and stop thinking that there some personal and general utility in knowing about electronics that is especially large in comparison with pretty much any other similar knowledge, like basic biology, history, woodworking, a foreign language, auto mechanics, plumbing, meteorology, or a bazillion other things. This is a faddish enthusiasm that doesn't have the especially large utility that its adherents claim it does and, furthermore, the conflation of it in its faddish and naive incarnation with its engineering incarnation has badly harmed its engineering incarnation.
posted by Ivan Fyodorovich at 5:13 PM on May 15, 2012


Saying that people shouldn't learn to code because it won't make them professional software developers is like saying people shouldn't learn math because they are not going to become professional mathematicians.

In the future, it may be that there is no one "professional software developer" but rather lots of different professions that involve programming the same way there are lots of jobs that involve programming, either doing SQL queries or working with "Big Data" stored in other formats to make decisions or whatever.

Basically any job that involves sitting at a desk working with papers or digital files will be easier if you can do basic scripting.
The comment just earlier by novalis_dt, which was a repeat of the same argument made at least once before in the thread, is about as wrongheaded as it could possibly be (and, not incidentally, it's exactly what people were saying 30 years ago, and it's not become true)
I'm not sure how not true it is. Obviously if you compare manufacturing today to 30 years ago, those jobs are gone. More and more 'office jobs' are going to be automated away, I think.
posted by delmoi at 5:18 PM on May 15, 2012


"Anyway, these people who think people shouldn't learn to program are idiots. It should be considered a basic skill, like math."

That assertion is about as idiotic as they come. Programming is not basic in the way that math is. If you can't see that, then you don't know much about math, or programming, or both.

A good portion of CS involves stuff that is pretty close to these basic things. But anyone with a good CS education knows that this isn't what you're defending. It's Knuth's books. It's algorithms. Which everyone admires but few read because, well, it's not much like the programming that regular programmers do.

Similarly, the coding that melissam discusses is just coding, not software engineering. I'm not complaining about crappy code (though there's lots of that) but crappy engineering. All other varieties of engineering are totally different from programming because programming isn't taught or practiced as engineering. Proper software engineering isn't in the code, it's in the design, in industry standard best-practices, the use of tried-and-true toolsets that are extremely well-understood. This is how actual engineering works. There's a lot of math in engineering, but knowing how to do engineering math without mistakes is only the smallest part of engineering. People think they are self-taught at writing software because they taught themselves how to write code. That's like self-teaching yourself to do engineering math and believing yourself to be an engineer. And this is no small part of why our computers crash but our bridges don't.

"I'm not sure how not true it is."

It's very not true. There are computers operating ubiquitously today. We're surrounded by them, in our cars, in our phones, not just on our desks. The amount of computing being done today is astronomical compared to 30 years ago. That part of the prediction mostly came true. But that was the basis for the argument that all these computers will need programmers and therefore everyone will be programming computers. But that's not happened because it was an extremely naive conception of both technological progress in general and computing technology specifically. You're making the same argument, as if using all this IT in the future will involve people hand-crafting SQL queries or scripting or whatever. That's so naive and historically ignorant that I find it shocking.
posted by Ivan Fyodorovich at 5:36 PM on May 15, 2012


Jeff Atwood be worrying more about his backups than this.
posted by narcoleptic at 5:42 PM on May 15, 2012


And this is no small part of why our computers crash but our bridges don't.

As far as I know, Microsoft and most other companies that produce the software running on most computers, does not hire self-taught software engineers. They recruit heavily from the CS departments at top universities. It's just an issue of poor quality control here.
posted by melissam at 5:56 PM on May 15, 2012


That assertion is about as idiotic as they come. Programming is not basic in the way that math is. If you can't see that, then you don't know much about math, or programming, or both.
That's a solid argument "No you're wrong and if you disagree with me you're stupid!" What is it about math that makes it a "basic skill" anyway? Most people never need to use much math once they graduate from high-school or college. You don't need it for most jobs. And in fact, for most office jobs that use math, people use spreadsheets - which are actually a kind of programming anyway.

What is it about math that makes it a "basic skill"? What about advanced "highschool" math like Geometry, Trigonometry or even Algebra? What about calculus? Almost all high-school students are taught algebra, most are taught Geometry and Trig, and many are taught calculus. Basically, you need Algebra if you're going to learn the rest, and you need the rest if you are going into engineering. But if you're not, you can obviously go through life without them.

On the other hand, the ability to program, even basic programming like scripting, SQL, spreadsheets and HTML/JavaScript is incredibly useful for doing basic things in the world today.
Similarly, the coding that melissam discusses is just coding, not software engineering.
So what? Bloomburg's post was about "learning to code" not "learning to do software engineering"
And this is no small part of why our computers crash but our bridges don't.
We're talking about people writing software for themselves or basic tools for their jobs. It doesn't matter if it crashes, because if it does you can just go and fix it. It's more like building a tree-house. The only one who gets injured if it falls is you. Except you don't actually get injured, you just have to rebuild it.

In one sense, everyone's life would be easier if they knew, for example, basic car repair or even basic medicine. But the problem is if you screw those things up there can be pretty serious consequences, in medicine especially. But with programming, there aren't really any serious consequences on to a lot of it. The reason why software crashes and bridges don't is because bridges are built to higher standards.

The software used on aircraft, on the other hand, is far more reliable because it's written in a way that makes it just as safe and stable as the bridge, which is what you would expect, since lives are at stake. But if someone's SQL query doesn't work, they just have to go and try writing it again.
Proper software engineering isn't in the code, it's in the design, in industry standard best-practices, the use of tried-and-true toolsets that are extremely well-understood. This is how actual engineering works.
Yeah, no one is saying it is. This has nothing to do with "software engineering", it's a question of whether people should either know how to code or not know. Not all coding needs to be software engineering. If you're literally saying that that is better to not know how to program then know how to program and not know how to do "software engineering" then all I can say is that it's idiotic. How can ignorance possibly be better then knowledge? Programming can still be useful even if you don't do it "right".

That's like saying, if you can't do mathematical proofs of the quality of a professional mathematician (which essentially means an academic at this point) then you shouldn't know math at all. It's insane.

Also, you can make money as a programmer without knowing "software engineering" there are lots of jobs like that
1) One example would be a "data analyst", someone who takes data and analyzes it, often writing basic tools (perhaps in something like matlab) to apply different algorithms to it. - there are lots of jobs that basically boil down to this now. A lot of biology involves analyzing lots of data about gene interactions (or whatever). Knowing how to code well enough to extract the information you need can be helpful, but you don't need to ever release a product that doesn't crash. There was a talk by a lexicographer in an FPP a long time ago, who basically said a lot of her work was data analysis with computers. Her only product was a dictionary, but you have to write software tools to do the analysis itself.

2) Someone writing low level drivers or embedded software. Yes, you don't want the software to crash, at all, but at the same time you're writing fairly simple 'programs' that don't need a lot of complex algorithms - you just need to shuffle data from one device to another, but you need to keep track of a lot of low-level hardware details.

3) Game programming. John Carmak gave a talk recently discussing how Id was just starting to get into software engineering now that their codebases were getting larger and larger. For something like Angry Birds or a million other 99 ¢ cellphone games the code itself isn't that large, and it just needs to work and be stable, beyond that it's largely disposable.

4) User interface design, web coding - The job may be "design" but knowing JS and basic programming will obviously be really helpful. The code doesn't always need to be super complex, and if it seems to work, it can be good enough. If it fails every once in a while, oh well. It's not the end of the world.
Of course, you've not even defined software engineering anyway, maybe if you did we could talk about what you don't actually need to know or not know in order to make money or get some use out of the ability to code.

But ultimately, we are only talking about whether or not it's a good idea to know how to "code". I can not understand how it could possibly be good to not know even if you don't know "proper engineering". Even if you do write app that crash once in a while, it can still be very useful in day to day life.
posted by delmoi at 6:55 PM on May 15, 2012 [6 favorites]


I wish they would lay off Bloomberg, maybe he just wants to find the first ten occurrences of his birthday in the decimal expansion of pi.
posted by A dead Quaker at 7:04 PM on May 15, 2012


Ivan: It's the conflation of hobbyist knowledge, professional competence,...

Well then, stop conflating the two, because as far as I can tell, no one else is, and certainly not Bloomberg or Zell.

Similarly, the coding that melissam discusses is just coding, not software engineering.

That's the crux of the disagreement. Let's go with your EE example. I want an EE certifying my telephone. I also want an EE designing the systems of the plane I fly on.

Between the EE and Joe Fixit replacing a fuse, are dozens (perhaps hundreds) of degrees of professional competency: electrical contractors, an entire hierarchy of electrical professions in theater, HVAC, professors using data-capture devices, photographers (who have entire degrees on how to rig lights), astronauts, computer-service techs, and a wide variety of military specialists.

The same is true for computer programming. =sum(a2:a20) is a function call (one guy solves Project Euler problems using Excel matrices). So is an ADA-friendly fold on a Web page. My previous life involved hacking large quantities of data for an NSF grant. None of these are tasks that demand the attention of a professional engineer.

You're making the same argument, as if using all this IT in the future will involve people hand-crafting SQL queries or scripting or whatever.

Predictions that we'll get a powerful, general, and graphical programming paradigm have not materialized. So scripting is often a requirement for implementing small, fast, and cheap tasks that don't have enough demand to be elevated to the level of a software feature. As an example, I ended up using R because it had libraries created by a friendly researcher working in the same field. The alternative was a commercial application also created by a friendly researcher working in the same field. These algorithms were over 20 years old.
posted by CBrachyrhynchos at 7:19 PM on May 15, 2012 [3 favorites]


And this is no small part of why our computers crash but our bridges don't.

I think that this is putting the blame at the wrong level of the system, though. The individual developer has to work with the conventions and tools already in place in the industry. Most developers can't choose their own language or say "sorry boss, I only develop for OSes that were developed clean room with proofs of correctness".

I put the blame for our crashy computers mostly on C and C++. Any program you pick at random has a good chance of either being written in C or C++, or being executed by a VM/runtime written in C or C++. Your operating system is in all likelihood written in C or C++. These languages have a number of features that interact in spectacularly bad ways. They:
a. don't manage memory for you
b. use nullable pointers and references by default
c. have weak type systems
d. use pointer arithmetic without bounds-checking, and make certain equivalencies between pointers and arrays

C and C++ were not developed by people that were self-taught. They were created by academics. Self-taught developers had essentially nothing to do with the creation of C and C++. The legacy of C was largely imposed before any personal computers (a key tool for the hobbyist) were even available for sale to the general public.

Now, if you want to make a C or C++ program that never crashes, just make sure that you never access a null pointer, never access a pointer that's been freed, always cast your void pointers to the right type, always specify the right size for malloc (always making sure you know the right size in advance), always check the bounds of your array accesses (you are wrapping all of your arrays in structs that keep track of their bounds, aren't you?), etc.

You could look at the stringent requirements for crash-free C and C++ programs as evidence that autodidacts simply should not be professional programmers. I look at it and think, "Man, we need a new toolchain with much stronger static guarantees. We can't just keep paying the price for this legacy shit for the rest of eternity."
posted by a snickering nuthatch at 7:32 PM on May 15, 2012 [2 favorites]


"I don't disagree that well understood toolsets and best practices are how engineering disciplines work. I'm not sure I can agree that software "engineering" is there yet. Software development and design toolsets are still evolving rapidly. Best practices are changing as well, though maybe less rapidly."

I've been watching this debate for decades and was in a CS department that was pioneering clean-room techniques. I'm not denying that there's some things about computing that make it more difficult and ambiguous for software to become a true engineering discipline. But I also think that 75% of why it hasn't done so isn't because of these difficulties, but because of the particular history of the development of computer programming which badly outraced the institutional development (in training and in business) of this sort of rigor and then the lack thereof became entrenched.

Properly engineered software is quite a bit more expensive to produce than conventionally produced software. I mean, for christ's sake, you know as well as I do that absolutely basic things like code control and such came into widespread use only in the late nineties. Testing in any significant sense. A lot of stuff that everyone knew was crucial to reliable software was put off and put off and put off because everyone could get away with putting it off and they'd rather do so because to implement these practices was difficult and expensive and they'd obviously have a competitive disadvantage if they did.

"Predictions that we'll get a powerful, general, and graphical programming paradigm have not materialized."

No, but an enormous array of common tasks are accomplished because there's already tools available to perform them and the end-user certainly didn't need to build them themselves. I'm contesting the notion that what end-users accomplish by crafting a SQL query today they'll be accomplishing by crafting SQL queries twenty years from now. Instead, they'll be using tools more appropriate for an end-user. There was a time when entire categories of business apps didn't exist and everyone wrote spreadsheets to accomplish those things. That's because there was a demand to do these things, a lack of alternatives, and the absurd notion that a spreadsheet was the most natural way to accomplish these things and everyone in these business environments could and should be expected to learn how to accomplish these things. It was dumb.

There will always be people writing code. But we'll no more need everyone writing code in twenty years than we need everyone writing code today.

"Between the EE and Joe Fixit replacing a fuse, are dozens (perhaps hundreds) of degrees of professional competency: electrical contractors, an entire hierarchy of electrical professions in theater, HVAC, professors using data-capture devices, photographers (who have entire degrees on how to rig lights), astronauts, computer-service techs, and a wide variety of military specialists. "

Yeah, but those are all pretty carefully delineated, in many cases requiring certfication, and an electrical contractor doesn't get hired to design part of your car.
posted by Ivan Fyodorovich at 7:43 PM on May 15, 2012


I put the blame for our crashy computers mostly on C and C++. Any program you pick at random has a good chance of either being written in C or C++, or being executed by a VM/runtime written in C or C++. Your operating system is in all likelihood written in C or C++. These languages have a number of features that interact in spectacularly bad ways. They:
I just saw this the other day on reddit: Joint Strike Fighter Air Vehicle C++ Coding Standards Apparently some of the code that flys on the plane was done in C++, and these standards were used to help ensure the thing didn't crash.

And that's the thing is possible to write code that doesn't crash, it's just not as common. But actually in the past few years it's become much more common. Google Chrome and other browsers have to be vary crash resistant, simply because any crash in a network app is also a potential security bug.

If you're a professional mathematician, you don't solve math problems for a living, you prove theorems - many of which have no applicability to everyday life or engineering or anything else for that matter.

But the vast majority of math done by other people isn't done to that standard. Someone could be using a mathematical technique that might have flaws in extreme cases, for example.

---
I'm contesting the notion that what end-users accomplish by crafting a SQL query today they'll be accomplishing by crafting SQL queries twenty years from now.
Here's the thing: on that front, we're actually regressing. 20 years ago was 1992. In 1992 if you had an Access database you actually could design a query graphically. Today, unless you're still using access, which is basically totally obsolete now. you basically can't. It's kind of ridiculous, IMO.

In fact, given the trajectory over the past few years the idea that we'll all have graphical logic tools is actually less likely then the idea that everyone will know how to program. It's actually something that was tried and given up on so far.

But that said, how is using a graphical query tool not "programming" or "coding"? It's the same thing, just because you're using a flowchart style layout rather then typing commands doesn't mean it's not "programming". The problem with graphical techniques is that they get bogged down when you start making things larger. That's why people use hardware description languages to design complex circuits, rather then laying everything out using CAD tools.
Yeah, but those are all pretty carefully delineated, in many cases requiring certfication, and an electrical contractor doesn't get hired to design part of your car.
Yeah, but that electrical contractor might, you know try to fix his own car if something was wrong with it, even if he wasn't "certified" to do so. It wouldn't somehow be a bad thing if he were to have basic car repair skills.

Similarly, it wouldn't be a bad thing if the average person, or perhaps a mayor or CEO were able to write an SQL query or had some basic scripting knowledge. No one is saying we should take the average person and have the write mission critical applications that Can't Ever Crash.

It could save a non-programmer a ton of time and money if they could whip up a little solution to some problem, maybe one that crashes every once in a while rather then hire a "Software engineer" to do it for them.
posted by delmoi at 7:55 PM on May 15, 2012


"You could look at the stringent requirements for crash-free C and C++ programs as evidence that autodidacts simply should not be professional programmers. I look at it and think, 'Man, we need a new toolchain with much stronger static guarantees. We can't just keep paying the price for this legacy shit for the rest of eternity.'"

I agree with you about this. But, basically — and I've avoided this terminology because I've feared it would be provocative — I believe that the hacker culture is why this is the case. It's not that people want to be audidacts at programming, or do so. I largely did. Like so many others. But because there's so many of us, there's huge resistance to the cultural changes that would be necessary to transition to a true engineering paradigm. It's not about autodidacts, it's that, as you say, within universities and industry the status quo is a mess that allows for products that are far more unreliable than they ought to be.

I'm by nature a tinkerer and that's obviously why I was playing with computers in the 70s (even writing mainframe programs). And I think the contemporary DIY movement with regard to tech is a very cool thing. In fact, I think it's a good model of what the future should look like with regard to computing tech. Anyone who wants to learn about this stuff and build cool things should be able to do so — cool things will come from that, not just with regard to personal development. But it should be distinct from what it means to, say, design and build an HVAC system. Right now in computing there's a huge overlap between the hobbyist sphere and the industrial sphere and that confuses things in some bad ways. This had been slowly being unwound when the internet age came upon us and retrenched the whole thing even worse.

To answer melissam's comment, while I'm not thrilled with the quality of the software engineering at Microsoft and similar, the problem with IT is that it's an "ecosystem", in a sense, where everything is dependent upon everything else. Often, a chain is only as strong as its weakest link and the weakest link is very weak, indeed. This is so very true with the Internet because here more than anywhere else we have a melange of interacting technologies that run the gamut from something some untrained person made in his basement to stuff made by large corporations to the most stringent standards.
posted by Ivan Fyodorovich at 8:00 PM on May 15, 2012


There will always be people writing code. But we'll no more need everyone writing code in twenty years than we need everyone writing code today.
What does this have to do with what "we" need? Maybe this is about what the person who wants to learn to program needs? Or maybe just about what they want?

I mean, looking at the EE thing, there are tons and tons of hobbyists out there building little electronic gadgets, sometimes using Ardurnos or whatever, sometimes just raw components. I don't think anyone would say it's somehow a bad thing that they can do it. On the other hand, their skills don't help "us", they just help the person who knows it.

Similarly "we" don't actually need for most people to know math either. "We" certainly don't need people to know history. Don't you think it's possible for those things to benefit the person who knows them?

If a person knows how to program, they'll be empowered to make computers do anything that they can imagine in enough detail. In a world increasingly run by computers, that's going to be more and more useful. They don't need to be "software engineers", and they don't need to write high quality code for widespread release to get value out of it.
I agree with you about this. But, basically — and I've avoided this terminology because I've feared it would be provocative — I believe that the hacker culture is why this is the case. It's not that people want to be audidacts at programming, or do so. I largely did. Like so many others. But because there's so many of us, there's huge resistance to the cultural changes that would be necessary to transition to a true engineering paradigm.
Again dude, It's like comparing people who "know math" with what standards you think should should apply for professional mathematicians?

I guarantee you you could not write an academic grade mathematical proof for some new theorem. Does that mean all the time you spent learning math was a waste? No, because math is useful for the very few people who are not "professional mathematicians".

Likewise, programming would be useful for people who are not professional "software engineers"
posted by delmoi at 8:04 PM on May 15, 2012 [1 favorite]


btw: professional mathematicians are another group who really get a lot of benefit from knowing basic programming. I'd best most of them couldn't write a high quality release application to save their lives, but being able to script Matlab or Mathematica are very helpful - and most of them probably know basic programming and can implement most mathematical concepts in code.
posted by delmoi at 8:07 PM on May 15, 2012


To try to put this article in the broader context it comes from, if you haven't read the various "X Should Know How to Code" articles and blog posts, then it will seem out of left field, elitist, etc.

It's not.

Right now designers -- of both the visual and user experience persuasion -- are dealing with recruiters and job ads that are now asking for front-end (and, in the crazier ones, back end) dev chops. Not just HTML and CSS, but Ruby and PHP and my god, take your pick.

It's insane. We're backsliding to 12+ years ago when companies were all sorts of clueless and cheap and wanted one person to do everything. It's a brutal fight, and not made any easier by the mindless parroting about "Everyone should know how to code". There's an increasingly real expectation that well, really, it's all the same thing, you know, and how hard can it be? Of course, heaven forfend that the salaries reflect the sheer amount of expertise demanded.

So, there's a larger fight going on, of which this coding argument is a part.
posted by gsh at 8:11 PM on May 15, 2012 [3 favorites]


I guess part of the conflict here is that I strongly suspect that a graph of number of programs with the characters of code they contain probably follows a power-law distribution. I suspect that most programs are less than 20 lines of code, have very simple inputs and outputs, and don't perform error checking or exception handling because the input is strictly defined for the domain, and nothing materially is lost if the thing crashes or returns obviously bad results. These programs are built by designers, accountants, researchers, and system administrators, using well-tested techniques and patterns.

Properly engineered software is quite a bit more expensive to produce than conventionally produced software.

Certainly. Which is why fully engineered software is expensive overkill for the majority of scripts that get executed. Why should I pay an engineer to do unit testing of my 10-line batch job? Either it runs and produces the results, or it doesn't.

There will always be people writing code. But we'll no more need everyone writing code in twenty years than we need everyone writing code today.

As far as I can tell, the only person suggesting that was sarcastic. But yes, end users will need to produce code if their professions require the implementation of algorithms or features not adopted by commercial or open-source software.

Yeah, but those are all pretty carefully delineated, in many cases requiring certfication, and an electrical contractor doesn't get hired to design part of your car.

Certainly, there were 685,000 housing starts in November 2011, in in contrast to three dozen new car designs a year. So the argument that anyone who works professionally with electricity needs to be an EE doesn't make a lick of sense. Likewise with the argument that everyone who works professionally with code needs to be a certified software engineer.
posted by CBrachyrhynchos at 8:11 PM on May 15, 2012


But it should be distinct from what it means to, say, design and build an HVAC system.

You seem to be under the assumption that most programming tasks are the equivalent of building an HVAC system, and I think that's a weak assumption at best.
posted by CBrachyrhynchos at 8:14 PM on May 15, 2012


gsh: Right now designers -- of both the visual and user experience persuasion -- are dealing with recruiters and job ads that are now asking for front-end (and, in the crazier ones, back end) dev chops. Not just HTML and CSS, but Ruby and PHP and my god, take your pick.

I'm still baffled about how this is a problem with DIY computer literacy programs that promise little beyond having some fun, perhaps on your own Web page. Or with Mayor Bloomberg.

Since Ivan seems to love dumb and crazy analogies, I'll pose one of my own. It's like bitching about the YMCA on the grounds that a pick-up game gives kids delusion of joining professional sports.
posted by CBrachyrhynchos at 8:20 PM on May 15, 2012 [3 favorites]


I wasn't paid to produce code, I was paid to produce research results. My choices were:

1: commit fraud by keeping the money and producing no results
2: return the money since I couldn't produce the results
3: pay a professional software engineer (who would need to be vetted through the ethics committee) more than I earned to hack the results for me
4: pay a CS student (who would need to be vetted through the ethics committee) more than I earned to hack the results for me
5: write the thing using the available libraries myself.

So the argument that I did something deeply unprofessional by writing a scripts designed to be used a handful of times on confidential research data, fulfilling my grant obligations, and feeding my family for a year doesn't make a lot of sense.
posted by CBrachyrhynchos at 8:34 PM on May 15, 2012


I joined the blue tonight (long time listener, first time caller) specifically to reply to this thread. Per usual I'm pretty persuaded by Jeff Atwood, and this Zed guy sounds too self-important for me like what he has to say, but ultimately this all seemed like a a case of miscommunication between the two of them.

Unfortunately, and per usual, the thread became more about taking sides between the two articles, rather than understanding what they had to say. I feel like I agree with Jeff (coding literacy is a nice thing, but there are a lot of things that are more important, like learning to actually communicate with other people), though I can see plenty of flaws in the overall argument (don't confuse an argument against "coding per se" with an argument against "coding professionally").

Ultimately, Jeff was trolled by Michael Bloomberg, who trolled Zed, who trolled me. I wasn't just trolled, I was 3rd derivative trolled.
posted by wormwood23 at 8:40 PM on May 15, 2012 [1 favorite]


It's insane. We're backsliding to 12+ years ago when companies were all sorts of clueless and cheap and wanted one person to do everything. It's a brutal fight, and not made any easier by the mindless parroting about "Everyone should know how to code". There's an increasingly real expectation that well, really, it's all the same thing, you know, and how hard can it be? Of course, heaven forfend that the salaries reflect the sheer amount of expertise demanded.
Right but that actually proves the "you should learn to code" side's argument: If random, non-programming jobs out there are requiring people to know how to code to get the job then, obviously you're better off if you know how to code.

Those are two separate arguments one is "given the job market, it's better to know how to code then not" and the other is "the job market should not be structured that way".

But anyway, I don't think it's a problem of "wanting one person to do everything", but rather take a UI designer: you want them to be able to code so that they can interface their stuff with the work of programmers. I was working on a side project with a UI designer recently: I was able to give her a block of JSON data, and she was able to take that and turn it into a web page by writing her own JavaScript. She's not a professional programmer, and she certainly isn't a professional "Software Engineer", but if she didn't have that knowledge then I would have had to have taken her HTML and manually connected it to the stuff I'd written. It would have been even worse if she'd just given me PSD files and left it up to me to do the CSS and HTML.

If a designer can code, then the programmer and designer can integrate each others work by using APIs and coding examples, rather then making the "official" programmer spend all their time tweaking simple javascript in order to get designs and layouts to work.

The other thing, it could simply be working as a filter, just like hiring only people with a college degree for a job that could be done by anyone.
(coding literacy is a nice thing, but there are a lot of things that are more important, like learning to actually communicate with other people)
Um, hello, Mike Bloomberg is the mayor of New York and before that he was a billionaire CEO of a company he founded (Which is why it's also called "Bloomberg"). Do you actually think he has a problem communicating with other people? Obviously it's a helpful skill, but it's also something a lot of people, you know, have covered.

It just seems like a ridiculous point to make.
posted by delmoi at 8:58 PM on May 15, 2012


"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects." - Robert Heinlein, emphasis mine

Emphasis mine. I'm surprised nobody brought this one out yet.

Honestly, if the mayor of New York wants to learn a bit about programming in his spare time, what's the problem? Maybe he's looking for a new hobby. Maybe he's curious. If he learns a little bit about it - and remains humble about his skills - then he'll be better equipped to notice places his job could be slightly automated, he'll be in a better position to realistically assess projects that involve programming. He won't see them as MAGIC BOXES. And I am all for that.

I made my own tarot deck a couple years ago. I made a few changes, like adding 99s of every suit. The 99 of Cups was titled "Recursion", and contained a small Python program to print out the lyrics of "99 Bottles Of Beer On The Wall" in its text, along with the suggestion to look at your current situation and see what you can automate - so you can get on with the fun parts, like drinking all the beer.

> The "everyone should learn to code" movement isn't just wrong because it falsely equates coding with essential life skills like reading, writing, and math.
- Atwood, in the first article

Computers are infiltrating every single part of our lives. Being able to effectively manipulate them is not an essential life skill... YET. And it may never be as core as the ones he cites. But knowing how to throw together a script, or a GUI macro, or whatever, to get some tedious task done? This is pretty damn useful for those of us who don't have the funds to delegate that stuff to a human.

Man what has Atwood been smoking, seriously.
posted by egypturnash at 10:42 PM on May 15, 2012 [2 favorites]


In fact, given the trajectory over the past few years the idea that we'll all have graphical logic tools is actually less likely then the idea that everyone will know how to program. It's actually something that was tried and given up on so far.

But that said, how is using a graphical query tool not "programming" or "coding"? It's the same thing, just because you're using a flowchart style layout rather then typing commands doesn't mean it's not "programming". The problem with graphical techniques is that they get bogged down when you start making things larger. That's why people use hardware description languages to design complex circuits, rather then laying everything out using CAD tools.
I don't know... These "CAD tools" still exist. I'm using them that lay things (albeit not everything) out in a model using graphical and/or textual formalisms.

For instance, right now, I'm learning to specify concurrent systems graphically using statecharts (an example involving a stopwatch model). A statechart is like a finite-state diagram, but it has more fancy features. For instance, it supports the concept of "superstates," which is like "modules" in conventional programming languages. A superstate is roughly a statechart itself, so that I can shovel all the complex details into a superstate; the resulting model will not look as bogged down when I'm "zooming out" from a superstate.

On the textual side, I'm learning how to specify concurrent systems using pi-calculus, which is a process-calculus language that was developed by Robin Milner and others. The meanings of most process-calculus languages are formally defined (well, at least in operational sense), so that I can verify the correctness of these models partially but automatically using a model checker.

These concurrent models are not executable themselves; there is no "compiler" for them. As such, specifying these models is not considered "programming" or "coding" per se and hence does not belong to a programmer's lawn.

Instead, we can refine these abstract models into concrete executable code (e.g., C, C++, Java, Python) automatically using a code generator. This model-to-code generation is a popular topic in the model-driven development (MDD; not-so-previously) community. But how about the reverse direction, that is, going from executable code to more readable models? This code-to-model direction started to become interesting when dealing with the Y2k problem, when one needed to re-engineer millions and millions lines of code in legacy systems to comply to Y2K standards.

In any case, I'm just a programming n00b, so I have a lot of trouble using these software modelling "CAD tools." For example, consider the Eclipse Modelling Project. Their DSL tools (such as GMF and the XText/Xtend/Xpand suite) and some of their transformation languages (such as Atlas and Acceleo) are amazing, and yet many of their other subprojects are still in (not-so-)active development. I'm not very comfortable with this inconsistency in "completeness," but I guess this is a typical issue in Free'ish software. Another tool I use somewhat often is Rational Software Architect (which is built on top of Rational Application Developer, which is built on top of Eclipse), although I have some weird allergy against Rational Software for some strange and unknown reasons...
posted by kiwi4boy at 11:57 PM on May 15, 2012


I joined the blue tonight (long time listener, first time caller)

Welcome, and please keep commenting, ultimately Jeff and Zed ( Zed Shaw is the last of the coders's coders, I see him as taking up the mantle of JWZ in terms of tech before all else) are closer than they think, as are the rest of us in this thread.
posted by Ad hominem at 1:00 AM on May 16, 2012


These concurrent models are not executable themselves; there is no "compiler" for them. As such, specifying these models is not considered "programming" or "coding" per se and hence does not belong to a programmer's lawn.

Instead, we can refine these abstract models into concrete executable code (e.g., C, C++, Java, Python) automatically using a code generator. This model-to-code generation is a popular topic in the model-driven development (MDD; not-so-previously) community.
How is Automated Model -> C/C++/Java/Python "refinement" different from automated C/C++/Java/Python -> machine code compilation? If you're using a graphical tool, you're still "Programming".
posted by delmoi at 1:41 AM on May 16, 2012


Learn how to program as a hobby, but or the love of Christ, do not get so good at it that you have to do it for a living.

Programming is the most frustrating, difficult, low-status white-collar job available. You're on the bottom of the food chain in every company in the world. Money will be spent on floral urinal cakes before they buy the programmers new keyboards.

As a programmer in the business world, you will always be subject to the whims of marketing or sales or advertising. You will never have the power to say, "No, Advertising Exec Guy, putting a giant Flash ad on this checkout page is a terrible idea. We're not doing that." There's a gun in your back at all times. You will write bad software. You will do terrible things you know are wrong and you will smile and pretend like you're on board because if you don't you're not "a team player".

Programming is the 21st century version of a brick layer or a plumber. Except it's worse, because you don't have a union or a guild or any sanctioned standards that you can point to in order to prevent your employer from doing something unbelievably stupid and dangerous to boost their profit by 1% for one quarter. No business ever skimps on plumbing, but you can bet they'll cut corners on their software. If you're lucky, you'll find a place that takes the notion of craftsmanship seriously, but that's the case in fewer than 5% of programming jobs.

Your only hope of ever being important to a company instead of an expendable gadfly is to rise into tech management, where you're managing programmers as opposed to actually programming. I wish that somebody had sat me down and leveled with me about this before I went into programming. If you have any other options, go for those first; let programming be your backup.
posted by deathpanels at 7:40 AM on May 16, 2012 [1 favorite]


Right now designers -- of both the visual and user experience persuasion -- are dealing with recruiters and job ads that are now asking for front-end (and, in the crazier ones, back end) dev chops. Not just HTML and CSS, but Ruby and PHP and my god, take your pick.

There's no reason a designer needs to know Ruby, but CSS/HTML? Yeah, you should pretty much be an expert at that before you can call yourself a web designer. I'm sick of working with designers that have absolutely no idea how to make a web page. If you're a designer working exclusively in print, I don't expect any kind of technical competence – but if your chosen medium is the web, you'd think that knowing how the web works would be crucial.
posted by deathpanels at 7:43 AM on May 16, 2012 [1 favorite]


"Programming is the 21st century version of a brick layer or a plumber."

Not really. I wish it was the case, but programmers are comfortable, relatively well paid, and quite highly respected. You may feel under appreciated and all, and you may actually be under appreciated, but you're not in the same league as a bricklayer or a plumber.
posted by zoo at 8:30 AM on May 16, 2012


The treatment and status of programmers varies a great deal from company to company. At a tech-focused company, you will probably be treated better. At a company that believes tech is peripheral to the company ("we can hire one person to do it all!") it is less likely that you will be satisfied with your job.
posted by a snickering nuthatch at 8:43 AM on May 16, 2012


In most other fields, a basic knowledge of the domain often results in management better capable of understanding the level of skill and complexity required for a given job. That software design becomes a hard job demanding skill, insight, and organization becomes apparent to anyone who's worked on anything beyond a few dozen lines of code. And as I linked earlier, Zell's published claims about what a person can achieve with a few hours of daily practice are extremely modest (progression to more advanced programming texts.)
posted by CBrachyrhynchos at 9:31 AM on May 16, 2012


Money will be spent on floral urinal cakes before they buy the programmers new keyboards.

Heh. I don't even try anymore. (Some personal possessions of mine at work: the external hard drive my machine boots from, the video card, my keyboard.)
posted by Zed at 1:27 PM on May 16, 2012


I mean this in the best possible way, but I'm sure it will come across poorly. If it helps, try to imagine a your buddy tossing you a beer as he/she says this, or maybe it's your therapist saying this:

At this point in history, in any city in the world, anyone working in programming at a job they hate so much is either incompetent, depressed, or working at a bad company for some other reason entirely (do you need the health insurance that much? Are you sure?)

...seriously. There is something wrong with your life, which you need to sort out. I'm not kidding. It's not the profession, it's not the city, it's you. You can fix it. There is a solution. I don't know what your solution is, but there is one out there somewhere and you can find it.
posted by aramaic at 2:12 PM on May 16, 2012


My comments dont necessarily reflect my personal experience at the moment. It is my perception from years of working various programming jobs and having had many friends and colleagues in similar positions. Programmers don't command the sort of respect and investment in resources allocated to, say, partners in a law firm. Some do, but they are in the minority, usually in the Valley, where the current bubbled is centered. The bulk of positions are in IT departments of non-tech-focused companies.
posted by deathpanels at 3:15 PM on May 16, 2012


Programming is the most frustrating, difficult, low-status white-collar job available. You're on the bottom of the food chain in every company in the world. Money will be spent on floral urinal cakes before they buy the programmers new keyboards.
Including Microsoft? Furthermore, how many other white collar jobs have you had? I had a friend who started working as a document scanner. All she did all day was scan documents that had previously been put in filing cabinets. Later on she moved to a new job with more responsibility -- for the same pay. She said it sucked, because it was actually a lot more responsibility and stress then just feeding documents into a machine all day.

I'm guessing that if you work at a company that treats programmers like shit, they're probably treating everyone else like shit as well.
posted by delmoi at 6:02 PM on May 16, 2012


, "No, Advertising Exec Guy, putting a giant Flash ad on this checkout page is a terrible idea. We're not doing that."
That's a design decision that has nothing to do with "programming". Now, maybe ad executives should not be making design decisions, but it's not the programmers' job to make design decisions either, it's the designer's job.

If you only have a programmer and an ad guy, well, it does seem like the ad guy should have more authority over design, as advertising is actually closer to design.
Programmers don't command the sort of respect and investment in resources allocated to, say, partners in a law firm.
Yeah, why would they? They probably don't make as much money as partners in a law firm either, and most lawyers are not partners in a lawfirm. I'm sure the CIO at a company gets more respect then a jr. person in the legal department.
posted by delmoi at 6:09 PM on May 16, 2012


advertising is actually closer to design.
This is so, so very wrong.
posted by deathpanels at 7:08 PM on May 16, 2012


This is so, so very wrong.
No, it's completely correct.

There may be a design sense to how you write your code, but that has nothing to do with what the website looks like or how the UX works. That only matters to people who actually look at the code. Putting together code that looks nice is nothing at all like commercial design, which is about making things that look good to the customer

In fact Advertising is considered a "creative" profession. It's all about design, the difference though is that advertising doesn't try to create things that are "beautiful" but instead tries to create things that increase conversion or are just memorable or whatever. The point is to make money.

And look, you have no idea whether or not putting a flash video at the end of a checkout processes is going to increase customer retention or not because it's not your job to know. It may be annoying, but that isn't a problem in advertising at all. The point of advertising is to make money. If an ad is annoying, but you remember the product, or if other people are more likely to click a link and buy a product, then it's done it's job.

Now, it's entirely possible that this particular ad guy was an idiot. But that has nothing to do with whether these decisions should be made by ad people or programmers in general

Anyway, here's the thing. This kind of thing is generally called "UX" these days and the people who do it are "UX designers" or whatever. A lot of the time, those people can code. But it's ridiculous to assume that just because you can program, you should automatically be the person who gets to make UX decisions. If a company doesn't have a dedicated UX guy, then it's up to the boss to decide who gets to do it. It might be the ad guy, or it might be the programmer, or it might be a dedicated graphics designer, who knows. But just asserting that a programmer should get to make a decision because they're just so obviously smarter and know more is ridiculously hubristic.

And the kind of "design" that goes into making a program easy to maintain has nothing to to do with commercial design that makes products appealing.

It's like the difference between "designing" a car engine to be reliable and easy to fix, and designing the way a car looks so that it looks sleek and powerful and beautiful and people really want to buy it.

It would be absurd to imagine that someone who knows how to build reliable engines should get to decide how a car looks, or that the artist who designs the body panels should get to make decisions about how the engine put together.

They are both "design" but programming is much more like the former, except with a car - the owner may actually work on the engine, whereas with a website, the customer will never even see the code.
posted by delmoi at 1:34 AM on May 17, 2012 [2 favorites]


I don't know who's going to check here again, and perhaps this is worthy of its own FPP, but here's an excellent article about the gendered history of computer programming (pdf) that goes into -- among other issues -- the pointed shift from referring to computer workers as 'coders' to referring to them as 'programmers.' Of note is how this and other language shifts corresponded with a repeated regendering of the field, with up to 50% of coders being women in the early years of mainframe programming and that number falling significantly by the 80s. Likewise, where earlier we might see an article in, for instance, Cosmopolitan saying that anyone can learn to program (the field was starving for more and more labor; a couple aptitude tests were the main barrier to entry, with companies frequently testing internally among their existing workers, including, naturally, secretarial staff), only subsequent decades introduced the idea of programming as an inscrutable "dark art," or, even later, a professionalized craft.

(Of particular note to some might be page 21 or so where it goes into how the idea of programmer as "nerd" was likely manufactured.)

(Of particular note to me is how this history seems to track with the similar history of film editing as a field, the language shift from 'film cutter' to 'editor' corresponding with a shift from the position's earlier feminized roots. In both cases some of the 'confusion' initially may have had to do with mistaking the tools as the main component of the job: scissors and tape for film cutters, punchcards and wires resembling telephone operator boards for the early computer coders. In both cases women were doing highly skilled work but likely treated as though it were inconsequential translation -- encoding -- of the 'real work' of their superiors.)
posted by nobody at 3:49 PM on June 3, 2012 [1 favorite]


« Older Et tu, Yahoo? I suppose I saw it coming.   |   City on a Marsh Newer »


This thread has been archived and is closed to new comments