Even if Bloomberg Didn't, You Can!
January 25, 2014 5:27 AM   Subscribe

Programmers will tell you that coding is one of the most approachable skills there is. If you want to learn, there's Code Academy, or perhaps LearnPython.org. There are major non-profits that want to help you learn, free books, and videos. Great! Finished with all of those?

You may be interested in learning different languages. Of course, not every resource is language specific. If you are math-oriented, you might like Project Euler. The Sphere Online Judge offers a few thousand problems and allows submission in several languages (including Brainfuck, for some reason). Theres also the UVa Online Judge, which is more finicky. There are problems from the ACM contests. There are free programming books of every description.

Good luck.
posted by sonic meat machine (97 comments total) 276 users marked this as a favorite
 
Or, you know, don't, because coding isn't the hard bit.
posted by grubby at 5:34 AM on January 25, 2014 [26 favorites]


Programmers will tell you that coding is one of the most approachable skills there is.

And they'd be wrong.
posted by Thorzdad at 5:43 AM on January 25, 2014 [15 favorites]


Okay, don't want to thread-sit, but I don't want these comments to stand without a response and discourage people.

Coding, in general, is not about becoming a software engineer and writing massive business solutions. It is about algorithmic thinking and learning to apply a mentality of tool-use to the raw computing power at your fingertips. Instead of "app thinking," where you rely on someone else (like me) to write a tool, you can use programming, even at a basic level, to improve your utilization of the computer and even to improve your employability.

Most people who "program" aren't writing solutions, they're writing exploratory data queries, or they're writing small utilities in Python to transform one type of file to another, or they're writing Excel functions. (Yes, Excel functions are programming.) All of these are useful, powerful skills that don't require a massive amount of background knowledge to understand. Atwood's examples are particularly bad because most people who work in an office environment aren't working with water pipes; they're working with data. If you don't have some level of algorithmic thinking and programming ability, data is an inscrutable lump: you interact with it only through tools provided by your employer, and you don't think about it too much. If you do have that background, you can turn horrible text files into useful data automatically, or eliminate a lot of tedium from your job with Excel.

Then, you can get a better job with those accomplishments on your résumé.
posted by sonic meat machine at 5:56 AM on January 25, 2014 [108 favorites]


activities = ['cook', 'write', 'play an instrument', 'paint', 'code']

activities.each do |activity|

  puts "Don't learn to #{activity} - even professionals say it can be hard."
  puts "Normal people don't need to #{activity}."
  puts "Knowing how to #{activity} won't get you rich."

end
There's a big difference between doing something difficult professionally and doing something small that's helpful as part of another project, or just for fun. Kids who learn to play instruments at school aren't all expected to become expert wealthy musicians.
posted by BinaryApe at 6:03 AM on January 25, 2014 [36 favorites]


Jeff Atwood is wrong on this one. It assumes everyone wants to quickly learn to code to
a) do lots of it
b) get paid to do it
c) thus will be a bad coder making more work for 'real' programmers.

Logical thinking is a very useful skill. Being able to break down a problem into smaller steps, try different approaches to find a way into a sticky problem, work through a series of steps in order to test an approach, and see if it's working or not etc etc. It's also a skill most people don't get to exercise much.

Is it really so terrible that people might want to learn to code as a way to exercise their mind a bit, do some logical mental workouts via python or javascript instead of say, soduku puzzles? Or as sonic meat machine says, learn to script data-munging a bit, which is often very useful.

I got back into coding, learning javascript last year via codeacademy to get me up to speed with jquery in particular. I hadn't done any real coding for well over a decade, and js is a LOT different than the C I learned at uni. But it's fun. And I've been able to put together some web-apps that scratched an itch for me, and have branched out into node.js.

I'm not likely going to be a world class professional coder, and I'm not asking anyone else to clean up my code, and I'm not going to be paid for it. But I am learning, I am getting better, and I'm enjoying it. Is that really so terrible, and I should just forget it and go back to my day job?
posted by ArkhanJG at 6:09 AM on January 25, 2014 [12 favorites]


Programmers telling other people not to bother to learn how to code is the height of hypocrisy. "Hey, you know that skill that I started learning as a hobby, that I love, and is now the basis for my very well-paying and rewarding career? Don't get into it as a hobby, bad idea, waste of your time."
posted by sid at 6:14 AM on January 25, 2014 [18 favorites]


ArkhanJG: " Logical thinking is a very useful skill. Being able to break down a problem into smaller steps, try different approaches to find a way into a sticky problem, work through a series of steps in order to test an approach, and see if it's working or not etc etc. It's also a skill most people don't get to exercise much."

Yeah, i was going to say that this was the paradoxical thing about the argument in the article grubby linked to. For many people, there are only so many things in their jobs that would benefit from a tiny bit of programming knowledge. They're much more likely to benefit from having done the problems on Coding Bat (the "online problems" link for Java, but I'd argue Python is more accessible, though I use Python and not Java, so have an obvious bias), most of which you can bash out without any thought, to gain a tiny bit of confidence and then doing like five Project Euler problems. If you can do that, you surely understand what you need to do with your spreadsheet to answer a question correctly and without a ton of faffing about. When they've asked you the same question 17 times, then, yeah, you should think about figuring out how to automate the answer, but that's not so important.
posted by hoyland at 6:18 AM on January 25, 2014


Programming is a fantastic and rewarding hobby that can turn out to be surprisingly useful even if you never try to make a dollar from it. And the only thing you need, from day 1 to day N, is a computer. And yes, coding well (where "well" means to professional standards) is very difficult, but writing a program that does something neat is surprisingly simple.

If you're interested in picking up a new skill for the sake of doing so, you could do a hell of a lot worse than learning to code.
posted by 256 at 6:19 AM on January 25, 2014 [5 favorites]


Learning to code for the non-programmer is like learning a musical instrument: fun, interesting, may come in handy or even make you some money and will give you better insight to things that are happening around you. It's not for everybody though, and requires a lot more effort than you think to get it right.

c) thus will be a bad coder making more work for 'real' programmers.

If this was the issue, programmers would encourage everybody to learn. Fixing other people's rookie mistakes for large amounts of money is the sweetest paycheck in the business. The real problem is people with no real technical competence who think they know enough: I can't remember the number of times an engineer with one semester of FORTRAN ten years ago told me to quit winning and implemement their feature already, it's only a couple of IF statements.
posted by Dr Dracator at 6:35 AM on January 25, 2014 [2 favorites]


Nice resources. Atwood sounds like that curmudgeon of a person that's somehow learned to enjoy hating his job, coworkers, etc. and become popular for blogging it from his upturned nose. People with that attitude kinda kept me away from code for years.

Now that I'm an aspiring code-monkey I'm glad to see posts like this. There didn't use to be such fun, neat and easily accessible tools to dip your toes in with. The Ruby koans are neat and remind me of a post that previously helped me find The Way of The Code.
posted by ThrowbackDave at 6:36 AM on January 25, 2014 [1 favorite]


I started codecademy a few weeks ago. Every night that I'm home I try to work through a couple of exercises.

It's SO exciting to learn something different and new. And it's fun to start to understand, at least in part, what has always been an aloof mystery.

I really appreciate the resources in this post, sonic meat machine. Thank you for sharing them.
posted by bunderful at 6:38 AM on January 25, 2014 [3 favorites]


You know that game we were all playing yesterday...
 * CivClicker by dhmholley
 * If you're reading this, thanks for playing!
 * You may notice that I am not a good coder and my code is probably
 * awful. This game is as much about learning Javascript as it is
 * making a game. I'm not even nearly a professional at this stuff.
 * If you find anything that is obviously stupid or that could be
 * easily improved, please let me know
posted by RobotVoodooPower at 6:41 AM on January 25, 2014 [12 favorites]


There was this story on Reddit a few years back about a guy doing some menial data entry. And he figures it's very amenable to automation with human error checking and exception handling, so he sets out to do that. He doesn't have a clue but cobbles something together out of some mouse and keyboard macros and stuff, like the main time sink getting started everyday is he has to position all these windows in the right place and state. But once it's going, it goes, and he's getting as much done as everyone else put together, killing it on bonuses. I forgot if he got promoted or fired.
posted by save alive nothing that breatheth at 6:46 AM on January 25, 2014 [2 favorites]


Even really basic programming chops have the potential to make your life way easier. Back in undergrad (which was way more recently than that phrase makes it sound), I worked summers at a neuroscience research lab. I had at that point taken two semesters worth of intro CS, but I found that by using Python to automate a bunch of interactions with and calculations on data in Excel sheets I was able to speed up my job significantly - to the tune of finishing my summer project in two and a half weeks, allowing me to spend the rest of the summer working on other, even cooler stuff once the Powers That Be realized I had this particular skill set.

Granted, I'm a professional software engineer now, but nothing I did then required all that much skill past the basics. You never know when this stuff will come in handy.
posted by Itaxpica at 6:49 AM on January 25, 2014


Atwood couldn't be further from a curmudgeon, and explicitly says (and I think this is key):

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.



I agree with him that it's a mistake to think that learning to code will magically solve your problems and bring you a fat paycheck. I agree with various others in this thread that it can be a fun thing to do and bring its own rewards, and perhaps help you to understand how the things around us work at a basic level but I've met plenty of coders this didn't apply to.
posted by grubby at 6:52 AM on January 25, 2014 [1 favorite]


sonic meat machine & Itaxpica - exactly! I learned a Lisp variant in grade school, AppleBasic later on, and that experience helped me when I started fiddling with web coding in college. Screwing around with JavaScript on my website helped me get the basics of logical thinking (as in, thinking the way a computer needs to be told to get it to do anything). And now as a neuroscientist, I've learned enough Perl to write data scripts to help us analyze and process some very large text-based data files. Then I figured out how to package those for the non-tech-savvy in the lab, so anyone can just dump data files on them and get output. My coding is likely inelegant (there are comments in the source like "this works, but it does X, and I don't know why. Someday I should figure this out and correct it but for now here's a workaround."). But it works, and it has saved us a lot of time we used to spend cutting and pasting and manually converting in Excel. These are skills that make me useful to my colleagues, even if I am not a full-on coder, I know enough to be able to figure it out with the help of Google and the occasional trip to StackExchange when I'm stuck.
posted by caution live frogs at 7:11 AM on January 25, 2014 [4 favorites]


Yeah, I think Atwood was arguing against the idea that a few weeks of 'online learning' how to code would lead to a 'lucrative career' blah blah.

Learning to code to stretch one's brain, or have a cool hobby (are those the same thing?) is a different animal, seems to me.
posted by allthinky at 7:13 AM on January 25, 2014


I took a Coursera Intro to Python class basically because I was curious. It was fun, and I have used Python to automate a couple of annoying tasks that I do at work. I've been kicking around taking a university "intro to programming for non-CS majors" class, just because I think I'd enjoy it. I'm never going to get paid more because I can do very elementary Python, but I enjoy logic puzzles and making things, and I think there's something to be said for seeking out intellectual challenges even if they're not going to make you better at your job. I also very strongly support teaching kids to code in school, because coding encourages analytical and creative thinking and can be fun. Most kids aren't going to use Shakespeare in their jobs, either, but that doesn't mean they get nothing from reading great literature.
posted by ArbitraryAndCapricious at 7:31 AM on January 25, 2014 [4 favorites]


I love how the list of "different languages" starts with Clojure and Haskell. That's right, throw them in the functional deep end first!
posted by Inkoate at 7:49 AM on January 25, 2014 [9 favorites]


Seriously people don't use Haskell too much in the real world yet, Clojure a bit more but still niche. Not bad to learn, but be aware.
posted by save alive nothing that breatheth at 7:53 AM on January 25, 2014


A couple of points in response to Inkoate's comment. First, it's just in alphabetical order, no value judgment implied! :) Second, "deep end" is relative. Many of us began programming using imperative languages like BASIC, so those seem most natural; to someone who is just starting, there is no "natural." It's also arguable that languages they're likely to have already encountered, like Excel formulas, are already functional.
posted by sonic meat machine at 7:54 AM on January 25, 2014


I think the important thing is that people seek to better the world in some small way with the work they do. If coding helps you accomplish this then great. But neither technology nor coding are ends in themselves. You could be the World's Greatest Programmer but if you're just pushing meaningless bytes around what are you really accomplishing?

Yes I'm guilty of naive optimism
posted by nowhere man at 7:57 AM on January 25, 2014


Oh, I know, SMM. I took data structures and algorithms back when they were teaching it in scheme. I fully believe in the power of functional programming. I was just giving you a hard time.
posted by Inkoate at 7:59 AM on January 25, 2014


"Most kids aren't going to use Shakespeare in their jobs, either, ..."

I mean, this is it. Most anybody aren't going to be paid The Big Bucks for just programming.
If you do almost anything researchy or sciencey, programming skills are what used to be
called "instrumentation" - ad hoc, to-the-case tools. Perfection is rarely in the cards.

I've been writing programs since 1974, and I can assure you that even the most insanely
gifted coders don't sit down and rip off 20,000 line equivalents of the Sistine Chapel. No, it's more along the lines of a 3/4ths finished garage, with uncured cement floor, sliding door
riding off the rails, and a leaky roof. What I'm trying to get across is it is all a difference
of degree, not kind. Sit down, fire up whatever programming environment you favor, and dig in. You're already in the club.
posted by Chitownfats at 8:01 AM on January 25, 2014 [3 favorites]


"Most kids aren't going to use Shakespeare in their jobs, either ..."

Reading Shakespeare doesn't just teach you how to work, it teaches you how to live.
posted by nowhere man at 8:03 AM on January 25, 2014 [5 favorites]


Is it really so terrible that people might want to learn to code as a way to exercise their mind a bit, do some logical mental workouts via python or javascript instead of say, soduku puzzles?

Yes, it is, if it gives people the false impression that they understand everything that goes into writing and delivering quality software -- the "engineering" part.

I work for a large science research organization that is very data-driven, and we have lots of really smart science-y people who think that because they can do some scripting to deal with that data that they have all the requisite skills needed to involve themselves (read: interfere) with software development in general. UI design, requirements analysis, architectural design, project management -- oh, they know some scripting so they are automatically expert in those areas as well. It is incredibly disruptive.

Ever read about those large organizations where like 75% of the projects fail? Yeah, that's us.
posted by CosmicRayCharles at 8:10 AM on January 25, 2014 [5 favorites]


You could be the World's Greatest Programmer but if you're just pushing meaningless bytes around what are you really accomplishing?

That's what irked me about a fundraising email I got from a group advocating more programming classes in high school. They framed it in terms of helping the "next Mark Zuckerberg" invent "the next Facebook". I know they were relating it in a way to get non-technical people on board with the "everyone must code" cause, but if you're holding up Facebook and Zuckerberg as the paragon of what can be accomplished with programming skills you either a) don't know what you're talking about re: coding and problem solving as basic skills or b) you're peddling some stupid, unrealistic, aspirational, get-obscenely-rich-without-even-trying snake oil.

Coding is an important, basic skill that people should learn for problem solving, not as means to an end.
posted by RonButNotStupid at 8:14 AM on January 25, 2014 [3 favorites]


Reading Shakespeare doesn't just teach you how to work, it teaches you how to live.

Learning the kind of deep analytical skills and approach to dealing with problems, both technical and nontechnical, that comes from learning how to code (more specifically, learning how to think about code) doesn't just teach you how to work, it teaches you how to live.
posted by Itaxpica at 8:17 AM on January 25, 2014 [3 favorites]


Hey sonic meat machine, thanks for the post. I've toyed with the idea of learning to program from time to time, but your post caught me at just the right moment, and the optimistic tone and the widely available free resources have made me feel like now's the time.

A quick question for you and/or anyone reading -- my impetus for programming (and my immediate need) is for a sort of enhanced calendar module in SugarCRM. My understanding is that SugarCRM is all php. I don't see any php resources here, and I've been told by programmer friends that php isn't as sexy/exciting as Python et. al. I would have no problem learning both, or more accurately dabbling in both, but I wonder if anyone here would actively discourage me from learning php. Or if not, is there a "best learn-php-for-free" site I should check out?

Thanks again for the post!
posted by sleevener at 8:18 AM on January 25, 2014 [1 favorite]


Yeah... you pretty much got it, Chitownfats. The barrier to entry is pretty low, so I'm always surprised more people don't take up programming, given the high reward-to-job satisfaction ratio. It's not like it requires any special equipment or really, any money. For whatever it's worth, if someone were to ask what to learn if they want to be a professional web developer, I'd point them towards javascript, both on the front and back ends...

That said, at times, being a developer can be super challenging. You have to be humble, that's for sure... things will always break. To be effective, it ain't just if / then / else anymore and the learning treadmill is relentless. You have to be wiling to corral build systems, configure linux boxes and database servers, evaluate frontend and backend frameworks, throw things together in html / css, debug network issues... more and more these days, I'm finding that a lot of my job involves dealing with other people, either in shared workspaces or just generally collaborating across the company.

RonButNotStupid -- I totally disagree. Programming for problem solving is cool and all, but programming for problem solving is a very practical, useful tool. That's certainly more reflective of the life of a professional dev, for whatever it's worth -- programming used to attract a lot of types who were super OCD and only wanted "pure" environments to work in... and while sure, there are still a lot of those types of people around, the people who seem to succeed aren't necessarily the "best" programmers, but the ones who can spit out workable solutions quickly.
posted by ph00dz at 8:21 AM on January 25, 2014 [1 favorite]


Sleevener — learn what you want to learn! If PHP is something that interests you, and you have an application for it that you can really use, by all means, learn it. I don't recommend it as your first language, because it's got some, ah, foibles, but it's something that can be in your toolbox. (I made a respectable living as a PHP programmer for a while.)

I don't keep up with the PHP "scene," so to speak, but you might find the Code Academy PHP tracks useful.
posted by sonic meat machine at 8:30 AM on January 25, 2014 [2 favorites]


Sleevener - Personally, I think a project like that is the best possible way to learn how to program. I develop in PHP for a major corporation. To be honest, I'm not sure about its future within our organization, but I'd never discourage anyone from learning any programming language as long as it suits their needs. You've gotta start somewhere... and modifying / extending an existing PHP project is as good as anywhere. The language is well documented and in very wide use, and the syntax is pretty easy to understand.... and any skills you pick up in the process will likely transfer over to other languages and problems.
posted by ph00dz at 8:31 AM on January 25, 2014 [2 favorites]


This is a great post. Bookmarked for the next time I want to add a language to my skillset! Thank you.

I am a materials scientist by training (and always will be in my heart). The last couple of years have been bumpy ones and I've had a lot of time to learn new skills — that is to say, unemployed. Now, I may have intended and failed to learn to play two musical instruments, pick up a new language and write a novel, but I did get good enough at Python and JS to make some cool projects. Having a partner who codes for a living and loves teaching helped, I have to admit. Thanks, Zarkonnen! Anyway, off the back of that I got a few months' work at a startup over the summer, and just started my first real programming job at the beginning of the year. I'm working in open data, so it's not where I thought I'd end up, but it's still something very exciting.

Compared to the other skills that would have been relevant to my career, programming was absolutely the most accessible. A chemistry lab or an atomic force microscope wouldn't have fit into our flat (so disappointing) but I already had a laptop. Learning to program has the benefits of fast feedback and a huge range of possibilities for projects; it can be incredibly satisfying.

I saw Kay Thaney of Mozilla talk about "upping our digital literacy" a few months ago, and she made the great point that scientists should learn to code, not so that they can become programmers or engineers, but so they have better understanding of their software and can troubleshoot it, and know when a problem is serious or something they can fix themselves. I also wish I'd learned a little bit of Python sooner, just for all the spreadsheet wrangling I could have automated out of my life.

RonButNotStupid: I work for a large science research organization that is very data-driven, and we have lots of really smart science-y people who think that be cause they can do some scripting to deal with that data that they have all the requisite skills needed to involve themselves (read: interfere) with software development in general.

I get that that must be frustrating, but I think you're gonna get those people everywhere. My last supervisor in academia thought that because he was an expert in his field, he must also be infallible in the areas of pedagogy, management and mental health. Ha, ha, ha.
posted by daisyk at 8:36 AM on January 25, 2014 [6 favorites]


%!
%%BoundingBox: 17 17 191 35
/box { 2 copy moveto 3 index exch lineto 3 -1 roll 2 index lineto exch lineto
closepath } def
18 dup dup 4 add dup moveto /Helvetica 12 selectfont
(yo.) (stacks, ) (use ) (languages ) (Real ) 5 {show} repeat
currentpoint exch 2 add exch 12 add box stroke showpage
posted by scruss at 9:00 AM on January 25, 2014 [5 favorites]


The "please don't learn to code" response is a bunch of Dunning-Kruger bullshit. A significant part of my day job involves polishing code written by analysts, and by polishing I mean fixing, and by fixing I mean completely rewriting. These are people who don't want to be slowed down by the need to make their code efficient and maintainable, but more often than not, their lack of programming expertise can result in programs that don't even do the job correctly. These are brilliant people with Ph.D.s and decades of domain expertise, but they make elementary mistakes transforming their ideas into software, and could end up publishing erroneous results because they made an error deep within the bowels of their program.

Given how robust the job market is for anyone who can string ten quality lines of code together, I don't see how anyone could be opposed to non-programmers building up their knowledge of programming concepts to the point where they'll hand over higher quality first-draft code to the "real developers." If that means the people working with the code end up doing more themselves, it's not like we're going to run out of other technical problems to solve using computers.
posted by tonycpsu at 9:11 AM on January 25, 2014 [6 favorites]


JeffL: " I'm opposed to it because often, in my experience, that "hand over" never happens: If the "first draft" works at all, it becomes the final draft. And then after the amateur moves on, someone else has to maintain his POS."

That's an organizational deficiency, not something that's going to be solved by fewer non-programmers taking some programming tutorials online.
posted by tonycpsu at 9:21 AM on January 25, 2014 [12 favorites]


The barrier to entry is pretty low, so I'm always surprised more people don't take up programming, given the high reward-to-job satisfaction ratio. It's not like it requires any special equipment or really, any money.

Because despite your own experiences, coding is hard for very many people, even on the level of just slapping some Python scripts together that we're talking about here. The way of thinking and the impulse to noodle that this sort of tinkering requires is just not present in very many people.

It's not surprising that for many of y'all these were not difficult skills to master, since well, this is MetaFilter and not the most ungeeky place on the web. But in my own experience, having worked as a software tester since 1998 and always looking for "hacks" (ugh) to make life easier, I've found that skill set just isn't there for a great many of my cow-orkers, without it impacting their skills at actually doing their jobs.

The idea that everybody should learn to code, even to the level we're talking about here is based on a severe underestimate of how difficult and how useful it is.
posted by MartinWisse at 9:31 AM on January 25, 2014 [1 favorite]


Eh, there's a ton of stuff that I do at work that benefits from scripting and automation, but for which it would still be a giant pain in the ass to write up specs, set up weeks of meetings with "business analysts" who serve as intermediaries between business people and developers, and wait for programmers to spend months building industrial-strength code that will become obsolete as soon as I want to incorporate a new data source or apply a slightly different analysis.

I doubt "everyone" should learn to code, but coding is relatively accessible and you can use it "build" things, which makes it a really nice skill if you're so inclined.

The issue I face at work is well summarized by this xkcd cartoon which I saw linked around here recently (I don't think it was in this thread though!)
posted by leopard at 9:38 AM on January 25, 2014


I'm not surprised either. I'm a good enough programmer that I can toss off a thousand lines of decent, working code with suitable error checks in an afternoon. I find it very rewarding and fun. And I'd never apply for a job that was more than 10% coding. It's hard, it makes my head hurt, and once you get past the proof of concept phase, it isn't sexy at all.
posted by wotsac at 9:38 AM on January 25, 2014


I don't understand why there is always a discouraging block of people when it comes to the idea of increasing the numbers of people out there with coding knowledge. I've learned a few disciplines in my life, really difficult intellectual undertakings in fact, but coding is different to anything I've ever seen or heard of. Someone mentions up above it's like learning a musical instrument. I don't see that myself. Ok, I know coding will make things happen on a computer just like I know learning to read music and operate an instrument will produce song, but I still have no idea whether I'd like it or if have the aptitude for it.

I can see what fingering a flute or the notes look like written down (the tools and the work); but coding, for me, has no real comparative hand-holds I've ever come across. "oh it's problem solving" "it's fierce mathematics" "it's logic" etc. -- that kind of vague description conveys next to zero in terms of what might be in store. I could give you a decent overview in a few minutes of some subject areas such that you'd have a reasonable idea whether you might be interested or not, but I've always been put off by the apparent foreignness of the coding world.

I did try to get one job to put into a programming course because, at the time, I could see that a coal face worker who had knowledge of how the worker's program got built could give salient advice to the programmers who had no idea how their programs were really used. The idiots declined. But now, it's just me and I still can't work out whether or not coding is something that'd light my fuse, or if it's worth my while, and how I might even test my toe to find out. I'm not looking to be persuaded, here, one way or another (at this point, after years of thought, it's really on my back), I'm just expressing long felt frustration with this general topic that is intensified by those who want to dissuade people from having a go because they have a skewed or narrow view of the matter.
Thanks for the post sonic meat machine!
posted by peacay at 9:44 AM on January 25, 2014 [1 favorite]


I honestly think "everybody should learn to code" is a straw man. A tweet from Michael Bloomberg isn't proof of a nationwide trend. Of course there are more people taking these tutorials simply because it's becoming more accessible for the hobbyist, but weren't a vast majority of us who write software for a living also hobbyists at one point? El Bloombito probably wasn't going to be able to turn a few hours of a Clojure tutorial into something useful in his life, but of the millions of people who do try to self-teach, a non-trivial number of them will end up turning it into something useful. What's wrong with that?

Let me try to approach this from another angle. A small minority of programmers out there are writing software that doesn't really depend on any knowledge domain other than software itself. Most people are, in some way, developing software that requires knowledge of other areas of expertise. The boundary between the developers and the domain experts is often times a difficult one to cross, and, in my experience, it's best if the people on both sides of this divide start building the bridge on their side and meet in the middle. This means programmers doing their best to understand the application domain, and, yes, it means the domain experts improving their programming chops.
posted by tonycpsu at 9:47 AM on January 25, 2014 [4 favorites]


I've often wondered what a logic-and-computation-focused K12 curriculum would look like. The closest thing I got to algorithmic thinking in high school was doing geometry proofs (which if you believe Curry-Howard, is programming).

I wonder if a future Chinese Sputink moment will goad us into another New Math movement focused on logic and algorithms. People made jokes back then about the ridiculousness of non-base-10 numbers; now hex and binary are core concepts of programming. And set theory would be handy for understanding type systems.
posted by RobotVoodooPower at 9:51 AM on January 25, 2014


Please, not New Math.
posted by Longtime Listener at 9:58 AM on January 25, 2014


I used to be a programmer - Z80, 68K and x86; some C - a long time ago, and I was reasonably good at doing clever things in assembler and in coping with a decently sized project (I wrote large chunks of a TCP/IP stack, screen UI components and a co-operative multitasking kernel for a server - none of which turned out to actually need a Superman Coder, which was just as well).

My trouble now is, while I can still do Ardunio-level stuff without problems, as soon as I look at interesting problems (graphing prices on eBay for certain products over a few months, for example, or an app whose one job is to make an identical app on a friend's phone go Ping in a distinctive way) there's so much to learn for just the mechanics of whatever framework I want to use, before I get anything rewarding. It's like my skills with foreign languages: I can learn to read them with moderate effort, but acquiring all the grammar rules to write them is too daunting.

Too much futzing.
posted by Devonian at 10:26 AM on January 25, 2014 [3 favorites]


I recently made the switch from chemistry graduate student to software engineer, and a substantial portion of this involved me teaching myself how to code using web resources like the ones above. One thing that most of these introductions don't teach you about -- but is equally necessary to know when you're busy bootstrapping yourself -- is how to deal with all the nitty-gritty "plumbing" work that most people in big companies might leave to devops people. Getting a developer environment set up correctly on a new machine is frequently difficult, even when you do have a devops team to help you sort it out. I imagine that one of the bigger barriers to learning how to code is not "Gee, I really don't understand what a for loop is" but "Why isn't system foo integrating with system bar?" which if you're untrained is a really daunting task to answer all on your own. Solving these sorts of questions takes a lot of persistence and dedication when you're a beginner and understand none of what's going on and nothing is working.
posted by thermopoetics at 10:44 AM on January 25, 2014 [11 favorites]


Re: everybody learning to code. "Everybody" is an obvious straw man. If you change it to the more accurate "a large proportion of educated persons should code at least a little bit", it's tough to make any of these existing arguments stick. This kind of pronouncement also makes more sense when put into context:

Bret Victor, riffing on Alan Kay:
Think about modeling phenomena, modeling situations, simulating models, gaining a common-sense intuition for nonlinear dynamic processes. Then think about a society in which every educated person does these things, in the computational medium, as easily and naturally as we today read and write complex logical arguments in the written medium.

Reading used to be reserved for the clergy, to hand down unquestionable Revealed Truths to the masses. Today, it's just what everyone does. Think about a society in which science is not reserved for the clergy, to hand down unquestionable Revealed Truths to the masses, but is just what everyone does.
Harold Abelson: "[Computer science] is not about computers in the same sense that physics is not really about particle accelerators." (1 hour video; I am aware CS != programming)

Carol Dweck: "Everybody benefits from the idea that [STEM] is a learned set of skills and that your abilities can grow."

The point is that programming isn't just about code. In this context, it's a learnable skill that expands the mind in the same exponential way that literacy and logic expand the mind. (Some programming languages more than others. Scripting, functional programming, and direct manipulation a la Bret Victor come to mind. YMMV.) For people who are into expanding their mind and aren't too crushed by life or capitalism or a giant block of cheese to put time aside and learn, programming might be a good choice for learning a new form of problem-solving or exploring the world.

On a related note, programming pedagogy suffers from a devastating lack of curriculum. We have all these programmers doing all sorts of work, but the next generation is left to figure it out from either unguided exploration (which depends largely on talent and luck) or a poorly-designed CS curriculum that arranges a marriage between hot-programming-language-of-10-years-ago and esoterica-to-many-workaday-programmers computer science concepts. Open-sourcing and otherwise making these textbooks and problem sets widely available isn't a complete solution for guiding the next generation of programming problem solvers--it lacks the critical elements of structure, feedback, and mentorship--but it's a step in the right direction.
posted by daveliepmann at 10:45 AM on January 25, 2014 [7 favorites]


I learned to code back in the early 80's, because somebody told me coding was the new drugs.

What a fucking liar.
posted by PeterMcDermott at 11:02 AM on January 25, 2014 [4 favorites]


My experience with attempting to learn to code is how infinite the number of tiny-yet-show-stopping problems that you can run into. I'm not talking about typos in your source causing errors, though those can be frustrating to track down. What really stymies me are the un-googleable questions I come up with.

One resource I found particularly laughable was "Learn Python the Hard Way." Vocabulary isn't even defined. To my mind, something as exacting, this-will-not-run-if-you-have-one-character-wrong as coding should have fairly exhausting definitions for the terms being introduced.

I've asked a three of coders I know how to learn program, and all three of them said "solve problems on Project Euler." Back when they told me this, the first exercise on Project Euler was to implement the Fibonacci Sequence in a programming language of your choice. Well, I happened to know the Fibonacci sequence, at least in terms of pencil-and-paper algorithm, but I didn't know how to translate that into a programming language. That's the thing that I did not know how to do and was trying to learn! It boggled my mind.

Now, of course, you can google for a solution to that. But seeing the example didn't tell me much, at the level I was at.

I'm currently taking CS050 through EdX. I'm extremely impressed at how they handwave away the syntax to explain the fundamentals---it's very easy to lose the conceptual forest for the curly braces and indentations.

One resource that I would love to have, but have never found (I've actually thought about making an Ask Metafilter post regarding this; still might) is a collection of small programs and scripts in a given language, say Python or Ruby. Small as in sub-100 written lines (blank lines not counting). I've always thought having a number of well written small scripts or programs that I could disassemble and put back together again would go miles to help me learn, but I haven't found a way to search for "small programs." That's not a category on Github, unless I'm missing something.

edit: split a paragraph, added exclamation pt.
posted by wires at 11:06 AM on January 25, 2014 [4 favorites]


Wires, you want Rosetta Code.
posted by sonic meat machine at 11:12 AM on January 25, 2014 [3 favorites]


The google keyword you want for "small programs" is "snippets", e.g. Snyppets for Python. Similar collections exist for many other languages. (I think the use of "snippets" started with this collection of small C programs that I remember downloading many, many years ago.)
posted by tonycpsu at 11:12 AM on January 25, 2014 [4 favorites]


I'm not sure why anyone would need encouragement to "learn to code."

Learn to code, learn to knit, learn to refinish furniture, it really makes no difference to me.

Professionally speaking, it's a very high-paying field where there are always jobs, and people often get them without a degree in the field or any degree at all. So I think the encouragement there takes care of itself- it certainly did for me.

As far as the "intellectual curiosity" angle, I'm not clear on why it should be valued over reading books, or doing chemistry experiments, or taking a hike, or any other pursuit.
posted by drjimmy11 at 11:24 AM on January 25, 2014 [3 favorites]


JeffL: "Is it really so terrible that people might want to learn to code as a way to exercise their mind a bit, do some logical mental workouts via python or javascript instead of say, soduku puzzles?"

Yes, it is. If you want do puzzles, stick with stuff where you can't do any harm.


Oh, let's please not go there. And I say that as someone who does programming for work, who works with a software developer way more skilled than I am for a larger software development project (I am the dreaded "client") and as someone who played with Python at home because it's fun.

I would enjoy seeing my friends work through the same online tutorials, just like I would enjoy seeing them do puzzle games, because it's fun. It's not off-limits because it is also functional in another domain of activity. For many complicated-enough problems there is currently a serious barrier to entry anyway, as per Devonian; but the little one-off things are still fun and stretch the mind in a pleasant way.

In conclusion, beginner-programming is fun and it would really put my back up to tell people "no, this is a game you are not allowed to learn how to play."


"I don't see how anyone could be opposed to non-programmers building up their knowledge of programming concepts to the point where they'll hand over higher quality first-draft code to the "real developers.""

I'm opposed to it because often, in my experience, that "hand over" never happens: If the "first draft" works at all, it becomes the final draft. And then after the amateur moves on, someone else has to maintain his POS.


I'm truly sorry that your job situation is so irritating, but as tonycpsu already pointed out, your problem is mainly organizational/workplace-cultural, so complain about your managers who don't know anything about managing programs with software components. Yes, part of the issue is that your presumably bad-amateur-coder co-workers don't know their limits. If their work isn't being vetted, if it's causing a waste of your time afterwards, that is a bad use of human talent (both your and your co-workers') and your managers should feel bad.

In the meantime, I maintain that my, say, mechanical engineer co-workers sitting down with Codecademy over the weekends is absolutely no skin off of my nose, besides, that Python module is fun. They are way too busy to take over the data analysis software development, but if they did launch their own projects---which they have in the past---it would be reviewed and checked for maintainability and robustness before it would pass into general use. Because my Powers That Be have a clue.

It might help make my life a little easier, even, as they would eventually be thinking a bit more about how the data they generate flows. And again, even if it didn't, why shouldn't they play a computer game over the weekend that happens to be a puzzle game? It's fun.

--------------------------------

peacay: This game (which I am pretty sure I found linked on the blue before) does do a good job of taking some of the abstraction down and making it concrete.
posted by seyirci at 11:32 AM on January 25, 2014 [5 favorites]


In 1996 I learned enough on my own to start a career in web app programming (server-side, mainly). Still going, though age-ism and all the new hawtnesses ("Java is so oooold. Use Rubeeee") and the framework-of-the-month club are sometimes making it harder to find gigs.

The toughest part to learning is finding motivation. Having a specific requirement, a problem to solve, often helps. (Having someone pay you to learn is even better :) )

As pointed out, it's hard to get started in some programming languages because of the need to learn not just a language but also an entire infrastructure and environment too. This winter, i set myself the goal of learning to develop for Android devices. I already know Java, have an Android phone, and everything I'd need to start developing at home (aside from a computer) - tools, ADK, emulators, tutorials - is available for FREE. Nonetheless, I''m now taking a not-inexpensive weekly Android course at a small uni, to get the right stuff force-fed to me in a relatively short period, as well being in proximity to a subject matter expert.

To the person who asked about PHP - it's by no means dead; in my experience it's still very much in use commercially, and if you simply want to start with a few lines of code that produce immediate results without six weeks of prior study, it's hard to beat. Python is also easy to start with.
posted by Artful Codger at 11:47 AM on January 25, 2014 [2 favorites]


As far as the "intellectual curiosity" angle, I'm not clear on why it should be valued over reading books, or doing chemistry experiments, or taking a hike, or any other pursuit.
I guess that in my perfect world, everyone would have at least tried reading books, doing chemistry experiments, and taking hikes, too. I'm not saying that coding is better than other pursuits. I'm saying that it's one of the many pursuits that can be intellectually rewarding in its own right and can make you a better thinker even if you don't do it professionally. There's also value in making something cool, even if it's not earth-shatteringly novel and even if nobody but you will ever use it. I took a silly free MOOC class and at the end of it I could make a computer game that was actually fun to play! That's sort of awesome.

I'm a knitter, too, fwiw, and I think I enjoy elementary coding for some of the same reasons that I enjoy knitting.
posted by ArbitraryAndCapricious at 11:54 AM on January 25, 2014 [5 favorites]


To add another resource to sonic's list, there's Software Carpentry. This is a volunteer organization aimed at teaching basic computing skills for scientists and other researchers. By now they are running two-day long bootcamps in well over a dozen countries. The core skills they teach in their bootcamps are the Unix shell, a bit of Python or R, version control, and some SQL.
posted by Numenius at 12:11 PM on January 25, 2014 [3 favorites]


tonycpsu, those linked pages are great!
posted by JHarris at 12:30 PM on January 25, 2014


Gratuitious self-link: A while back, I posted a bunch of JavaScript and CS learning resources on the Blue...
posted by schmod at 1:31 PM on January 25, 2014 [2 favorites]


PeterMcDermott: "I learned to code back in the early 80's, because somebody told me coding was the new drugs.

What a fucking liar.
"

To be fair, getting high on PHP sounds about right.
posted by pwnguin at 1:34 PM on January 25, 2014


As far as the "intellectual curiosity" angle, I'm not clear on why it should be valued over reading books, or doing chemistry experiments, or taking a hike, or any other pursuit.

I think one thing coding has over those other activities is that as our society becomes more and more dependent upon software, it's good to get at least some idea of how software works. Though it would be cool to find ways (with similar low barriers of entry) to satisfy intellectual curiosity into other things our modern world is reliant upon, such as, I don't know, biological advances or petrochemistry.
posted by Apocryphon at 3:07 PM on January 25, 2014 [1 favorite]


I like the idea behind nodeschool.io, but haven't had a chance to try it yet- CLI choose-your-own-adventure based node.js lessons
posted by p3t3 at 3:38 PM on January 25, 2014 [2 favorites]


This post inspired me to try writing a Python script to automate something for work, and it worked! I hadn't used Python since high school, and it was cool being able to use it for something useful irl (as opposed to solving an inane math problem in class). I had a fun afternoon writing it. Thanks for the post, sonic meat machine.
posted by topoisomerase at 4:15 PM on January 25, 2014 [7 favorites]


Always
Be
Coding
posted by michaelh at 4:33 PM on January 25, 2014 [2 favorites]


DANGER Will Robinson. Once started you'll be unable to quit.

Skip all of the heavyweights and go straight for Javascript. It's light without overbyte. And, because the results play in any browser, all kinds of people can see what you've been up to. And because it's become the most common language, your results will last much longer.
posted by Twang at 4:33 PM on January 25, 2014 [1 favorite]


Always
Be
Coding


Put that JavaScript down. JavaScript is for Clojure.
posted by Mr. Bad Example at 4:36 PM on January 25, 2014 [11 favorites]


I've been writing programs since 1974, and I can assure you that even the most insanely gifted coders don't sit down and rip off 20,000 line equivalents of the Sistine Chapel. No, it's more along the lines of a 3/4ths finished garage, with uncured cement floor, sliding door riding off the rails, and a leaky roof.

That's why Angie created her List
posted by IndigoJones at 4:39 PM on January 25, 2014


I've tried, and failed, several times to learn how to code. The problem, I think, is that I like the end result of something and don't particularly care how I get there. Most programming classes are excruciatingly slow and there's very little to show for you efforts. I'd like to be able to program something interesting by the end of the first day.
posted by runcibleshaw at 5:34 PM on January 25, 2014


I took the Coursera course on beginning Python last year. It was quite refreshing at first, after being away from school and structured learning for over a decade. I was doing alright, made a couple simple programs (pong, blackjack, memory) but hit the wall when we started doing classes. There was just something with that that I could not wrap my head around at the time, and I didn't really have anyone I could ask questions face to face (there was a forum, but that's not the same). I got really discouraged cause it seemed like most folks were able to get it.

It's been a while, though, so I might try giving it another go sometime. Thanks for this post! Great links.
posted by snwod at 6:07 PM on January 25, 2014 [2 favorites]


That was my exact experience on Coursera. Also, people in the forums were real smug pricks when I didn't understand some basic concepts.
posted by runcibleshaw at 6:15 PM on January 25, 2014


I took the Coursera course on beginning Python last year.

I've taken about 8 Coursera courses last year, and I would say the Intro to Python one is one of the best ones on there. It was good enough that I paid to get "certified". The other class I paid for, Intro to Processing, I didn't like and felt the lectures and video were not as good as the Python one.
posted by FJT at 6:29 PM on January 25, 2014 [2 favorites]


I've been trying to get motivated to learn more about coding, but I don't plan or have any desire to work as a programmer or anything. Having a basic idea of what's possible and, more importantly, the importance of being clear and specific in what you expect an application to do long before the first line of code is thought about has been incredibly valuable in working with those that will write it. I recently signed off on business case specs and then functional specs for a project at work and both the business analyst and developer commented that this was done in about half the time it usually takes and the specs are much clearer and more precise than usual because we were able to have conversations about our expectations vs reality at a much more technical level than they have been able to do in other projects with our organisation. Having some knowledge of their world made this possible. It would have been even better had they any real understanding of what we do, of course :-(
posted by dg at 7:27 PM on January 25, 2014 [2 favorites]



This is fabulous. Thanks. I've just started my own DIY "Jalliah needs to learn some more computer stuff, including some basic programming' course to take advantage of a slower time at work. These are some great resources.
posted by Jalliah at 8:20 PM on January 25, 2014


I always wonder what to start with. I've messed around with C++ a bit, but whenever I mention that as a language I might start learning with online people's eyes seem to bug out, but I can never get a straight answer why. Then I start looking at all the other languages out there (Python, Ruby/Rails, Java, C#, etc.) and I just run into that too many choices problem I encounter all the time in the cereal aisle.
posted by AdamCSnider at 9:22 PM on January 25, 2014


as our society becomes more and more dependent upon software, it's good to get at least some idea of how software works.

Why though? Why would this be more relevant to most people's lives, rather than, as you mention, knowning the ins and outs of the petrochemical industry? And in both cases, isn't knowning about the technical side of things exactly the wrong kind of knowledge to have if you want to know about the impact of either industry on wider society?

I always wonder what to start with.

Probably no help, but start with what you can use right now, in your job or hobby. I can understand why people are ...struck... by your experiments with C++ as it's neither a fashionable nor a novice friendly language, which according to many will also teach you bad habits that'll hinder you with other languages. But if it works for you and fits the way you think and you can use it and you're not just doing theoretical exercises, go on.
posted by MartinWisse at 1:33 AM on January 26, 2014


...whenever I mention that as a language I might start learning with online people's eyes seem to bug out, but I can never get a straight answer why.

C++ is a complex, difficult language. It leaves everything in the programmer's hands, for better or for worse: you must allocate and free memory, you must be careful not to reference unallocated memory, and so on. The syntax is grotesque. For example, object.method is correct, but if that object is referenced by a pointer, you need to dereference with -> as in (*object)->method. Clear as mud, right? Couple that with templates (which are basically code that gets compiled into other code before the entire intermediate code gets compiled) and the other eight million features of the language, and you have a recipe for beginners either being discouraged or learning a lot of things that just don't matter for most of the problems you're going to want to solve.

If you want to learn a low level language, learn C—you'll have to know it to use C++ anyway—but I'd still recommend you start by learning a high-level language like Python to begin, because that will teach you the thought processes and algorithms that you'll use most often, instead of trying to figure out what subtle sin you have committed against the compiler.
posted by sonic meat machine at 5:57 AM on January 26, 2014 [3 favorites]


Why though? Why would this be more relevant to most people's lives, rather than, as you mention, knowning the ins and outs of the petrochemical industry? And in both cases, isn't knowning about the technical side of things exactly the wrong kind of knowledge to have if you want to know about the impact of either industry on wider society?

My feeling, in general, is that while software may share characteristics with other industries that have dominated our economy at different times, most people weren't sitting at their desks dealing with crude oil chemistry or automotive parts. White-collar workers do work with data, and software is, at its heart, the process of using computers to operate on data. An office worker who understands that can make his job easier, be more productive, and so on. I should know; I followed this path myself.
posted by sonic meat machine at 6:01 AM on January 26, 2014


tonycpsu said: "... I don't see how anyone could be opposed to non-programmers building up their knowledge of programming concepts to the point where they'll hand over higher quality first-draft code to the "real developers." If that means the people working with the code end up doing more themselves, it's not like we're going to run out of other technical problems to solve using computers."


Programmer's objections won't be about the amount of work or number of technical problems in existence--per se. The fear of increased programming literacy resides in the inevitable skew this will cause within the workforce. Which is not to say there won't be a need for highly skilled programmers. Instead the fear is the massive increase in lower skilled workers will cause instability in the job market as the threshold between programmers and workers who program shifts. The most highly skilled programmers will still stand out in the top percentile. Its the middle which will suffer. Combine this with the admitted constant need to learn new programming languages and wot wot, and a normally ever increasing graduation rate for programmers which already threatens older programmers. Not that their skills are no longer needed. Rather how do older programmers develop their careers--will they make the right choices, will their managers help develop their careers into management, or will they get stuck with an ever increasingly short stick?
posted by xtian at 6:19 AM on January 26, 2014


  I'd like to be able to program something interesting by the end of the first day

You might enjoy Processing (or the same but runs in your browser Processing.js). I've seen non-coders produce pretty, interactive results in a couple of hours from first learning about it.
posted by scruss at 7:26 AM on January 26, 2014 [1 favorite]


  One resource that I would love to have … is a collection of small programs and scripts in a given language

In addition to Snippets and RosettaCode, you might also find PLEAC (Programming Language Examples Alike Cookbook) useful. It is a project to translate the examples from the Perl Cookbook into other languages.
posted by scruss at 8:32 AM on January 26, 2014


tonycpsu said: "... I don't see how anyone could be opposed to non-programmers building up their knowledge of programming concepts to the point where they'll hand over higher quality first-draft code to the "real developers." "

Whoa. Stop right there.

I program because I like completely get off on coming up with a software-based solution to a real-world problem. All the programming minutiae and administrivia I put up with only because they're tools I use to build and run the solution.

So... letting a desk jockey cherry-pick all the challenge and fun out of a task and leave me all the tedious crap work? Nofuckingway.
posted by Artful Codger at 8:34 AM on January 26, 2014


It doesn't matter how often it happens, if management can't tell the difference between real expertise and someone who took a class or two then that's their problem. It's in no way, not at all, a valid argument against learning. That's ridiculous.

(As has already been pointed out, there are also lots of problems that can be and are solved by terrible code that really doesn't need to be any better than it is. But if a manager at General Atomics thinks that the guy who coded up a useful excel macro should be the one to write the next version of the Predator control software, well... maybe the manager should have taken a Coursera class in management or something).
posted by jjwiseman at 9:29 AM on January 26, 2014 [3 favorites]


The syntax is grotesque. For example, object.method is correct, but if that object is referenced by a pointer, you need to dereference with -> as in (*object)->method. Clear as mud, right?

I like C, but I have great difficulty actually coding in it, because I continually get the syntax of pointers and the things they point at mixed up. I know what pointers are, I've coded 6510 assembly for crying out loud, but when the syntax starts requiring * and &s some latent dyslexia takes over and my code turns into a snarl of compile errors.

There is nothing more disheartening when learning a new language than writing a short function, trying to compile it, getting caught up with a compile error that you don't see what caused it, trying a dozen things to remedy it, finally hitting something that compiles there(50% chance of see exactly what it is you fixed), but then hitting another error three lines down. This happens every time I try to code in C++. Less often with C, but still.
posted by JHarris at 9:50 AM on January 26, 2014


Riffing off of scruss, if you're an absolute beginner, Hello Processing is a solid hold-your-hand intro to programming. Specifically, coding art.

90% of complaints about getting stuck on compile errors, not understanding where the program hooks into the larger system, and so on are because of a lack of tutoring/hand-holding during the early stages. We're drowning in learning material but dying of dehydration for lack of mentors to help people get past picayune BS in the early stages.
posted by daveliepmann at 11:10 AM on January 26, 2014 [6 favorites]


Just a shout out to the folks upthread who pointed me towards Code Academy: Thank you! I'm having a blast. I wrote a little PHP script that outputs the Fibonacci sequence up to the first 100 numbers and I nearly died of bliss when it finally worked. Only took me an hour and a half!!
posted by sleevener at 11:41 AM on January 26, 2014


I hear you on bad compiler messages, and that some languages are pickier/more arcane than other. The Grand C++ Error Explosion Competition includes a tiny program that generates an error message from the compiler that is 5.9 billion times the size of the original program.

But in the general, the often frustraint "pickiness" involved in writing code is tied directly to why it's worth doing, and learning about. Software (or at least its theoretical underpinnings, the Turing machine) is the most powerful, best way the human-kind has discovered to describe process. And when doing that, there are no shortcuts. At some point, every single thing needs to be completely specified.
posted by jjwiseman at 11:56 AM on January 26, 2014 [1 favorite]


Undoubtedly, daveliepmann, whenever I get that problem I wish I could just ask someone and find out what on earth am I doing wrong. I'm sure there's some discipline I could adopt that would make those errors go away if I could learn it and keep it straight in my mind, but I don't know what it is. The worst part is I can read C code generally well, and most of the tutorials I read are full of infomation I already know, but there's still these little stumbling blocks that drive me crazy whenever I try to make use of them.

This gets to a larger part of the problem with tutorials, which is that they're almost always written from the perspective of someone who knows everything about what they're writing, but very frequently they'll assume the reader knows something they think is obvious, and sometimes isn't. They might be obvious, to a learner, but they might not be. But while reading through a tutorial, each little thing a reader fails to grasp (and he might not realize he's failed to get it) adds up, and the reader's picture of the subject accumulates error, until eventually he reaches an example he realizes he just doesn't get, and no amount of staring at it is going to clear it up, because the thing he really doesn't understand is in the preceding chapters.
posted by JHarris at 11:57 AM on January 26, 2014


JHarris: "I like C, but I have great difficulty actually coding in it, because I continually get the syntax of pointers and the things they point at mixed up. I know what pointers are, I've coded 6510 assembly for crying out loud, but when the syntax starts requiring * and &s some latent dyslexia takes over and my code turns into a snarl of compile errors."

It's a platitude by now, but the chapter in Kernighan and Ritchie's The C Programming Language concerning pointers really helps with this. At one point you implement a little parser that translates pointer declarations of arbitrary complexity into English, and besides improving your intuitive command of the pointer syntax it gives you a pretty straightforward algorithm that you can do in your head for disentangling pointer expressions when your intuition fails you.
posted by invitapriore at 2:18 PM on January 26, 2014 [2 favorites]


jjwiseman: "...management can't tell the difference between real expertise and someone who took a class [is] in no way, not at all, a valid argument against learning. [...] a manager at General Atomics thinks that the guy ... should be the one to write the next version of the Predator control software,"

I couldn't agree more: Its ridiculous to argue against learning. Managers for defense contractors have no problem ranking their programmers. ;P
posted by xtian at 3:01 PM on January 26, 2014


Atwood's examples are particularly bad because most people who work in an office environment aren't working with water pipes; they're working with data.

Reading Atwood's words again, I don't think he's is saying not to learn any coding or logical thinking or Excel functions at all. In fact, he says he could supporting learning the basics of any skill to recognize whether or not the skill could be useful in certain situations. In other words, he also sees programming as a tool, and just like any tool it's not going to be useful in every situation.

Rather, Atwood seems to be chafing against the statement that "everyone should learn to code". Because, there are two parts of the statement that sound ridiculous. One, that no matter who or where or what you are, coding will apply to your life so learn it. And two, it's not "learn a little bit about code" or "at least learn the basics of code", it's the phrase "learn to code". This implies that code mastery is a binary status of either knowing it or not, similar to saying "learn to tie your shoes" rather than a discipline that has a huge range of different skill levels and levels of dedication from amateur hobbyist to hardcore professional.
posted by FJT at 5:20 PM on January 26, 2014


xtian: "Programmer's objections won't be about the amount of work or number of technical problems in existence--per se. The fear of increased programming literacy resides in the inevitable skew this will cause within the workforce... Its the middle which will suffer."

Right, and my question is why should programmers be any more immune to this phenomenon than workers in any other sector? If someone who didn't study CS in school can beat me at my own job, then I need to improve my own skills or go find some other field to work in.

There are obviously components of a CS education that most of these people taking tutorials are likely to skip over as they learn to program (discrete math and logic, data structures and algorithms, etc.) but these can be learned outside of a university environment as well. My BS and MS in the field gives me an advantage, but it's not an insurmountable advantage for someone who really has the talent.

I'm not saying that I'm not concerned for older programmers and programmers in the "middle" percentiles. Heck, I probably fit into both categories -- late 30s, not at the top of my field by any means. But really, anxiety about needing to keep up one's skills and keep the next generation who has it much easier in terms of access to learning the ropes is pretty much a permanent feature of any career path. Why should our field be any different?
posted by tonycpsu at 8:37 AM on January 27, 2014 [1 favorite]


It's a platitude by now, but the chapter in Kernighan and Ritchie's The C Programming Language concerning pointers really helps with this.

Aaaah... so I went and looked, and very soon I discover that the meaning of the asterisk when declaring a pointer variable of a type, is subtly different from when using it to dereference, which right away is something I had misapprehended.

Yeah, I guess there's really no substitute for K&R.
posted by JHarris at 1:18 PM on January 27, 2014 [1 favorite]


Honestly, I think people just underestimate how hard it is for most people. It's hard to say this without sounding like the stereotypical neckbeard, but at least half of the professional programmers I work with spend a week or more doing badly what one of the decent programmers could do better in an hour. The idea that a beginner handing over something to an advanced programmer would be helpful in any way is ridiculous. To think that pros are worried about competition from people who pick it up as a fun thing to try with an online course is equally misinformed.

This is not to say at all that brilliant programmers can't be self-taught, of course.
posted by callmejay at 4:46 PM on January 27, 2014 [1 favorite]


tonycpsu: "Why should our field be any different?"

Programming is not unique in the sense other jobs and careers are vulnerable to changes in the market and technological innovations. And just to express I'm really not trying to be alarmist, I just heard a positive piece on NPR about manufacturing jobs coming back to the US--"reshoring". Even the impossible (improbable) can be possible again.

Unique to programming is the way in which it acts like a language.
posted by xtian at 4:48 PM on January 27, 2014


Yeah, I guess there's really no substitute for K&R.

You can't beat the basics, but "The Descent to C" by Simon Tatham is nice little read for those who are familiar with high-level programming languages and are new to the world of memory management. Dennis Kubes' posts on C are very helpful, as well.
posted by Apocryphon at 7:57 PM on January 27, 2014 [2 favorites]


Honestly, I think people just underestimate how hard it is for most people. It's hard to say this without sounding like the stereotypical neckbeard, but at least half of the professional programmers I work with spend a week or more doing badly what one of the decent programmers could do better in an hour.

Yep, and that's not even the worst. 1/40 progress is bad enough, but negative progress happens a lot too.

I can swing a hammer and drive a screw, but I'm still either gonna hire people or up my skills bigtime if I want to build a house.
posted by save alive nothing that breatheth at 8:04 PM on January 27, 2014


Edd Dumbill has a nice bloggy walkthrough of solving a problem (the coin-tossing game from NN Taleb's The Black Swan) with Clojure. As he says,
Sometimes all you need to get learning a new programming language is the right size problem. Nothing too trivial or too daunting.
I like how it demonstrates the expressiveness of Clojure and the benefits of having a "conversation" through a REPL.
posted by daveliepmann at 1:13 AM on January 28, 2014


We have been spending decades solving computer problems (badly, I'll add) by asking software-fluent people to become fluent in someone else's subject area. I'm a career programmer who has built software for human resources, learning games, solar energy estimation, finance portals and garden variety of manipulate the data in/out stuff. Each transition has involved me spending considerable time learning the lingo and business purpose for each domain. Like most programmers from Lake Wobegon, I consider myself to be above average in my ability to keep a foot in both software and userland, but let's face the facts: most software fails because the wrong product was delivered, and this happens because it is hard to understand someone else's subject.

I'm rather enchanted by the idea of inverting this process. Let's get subject experts who can learn enough code to stand up a reasonably functioning edition of what they want to do. All of us "real" programmers can snark about how they will abuse the code in ignorance and whatnot, but then we can be engaged to solve real problems, such as scalability, security or re-use of components in other contexts.
posted by dgran at 8:05 AM on January 28, 2014 [3 favorites]


The idea that a beginner handing over something to an advanced programmer would be helpful in any way is ridiculous. To think that pros are worried about competition from people who pick it up as a fun thing to try with an online course is equally misinformed.

This makes me think of the piece that Peter Norvig (Director of Research at Google) wrote poking fun at the "Learn C++ in Three Days" sorts of books: Teach Yourself Programming in 10 Years.
posted by jjwiseman at 10:53 AM on January 28, 2014


« Older Real vs. Unreal, Grotesque vs. Gorgeous   |   Animal Communication: What do we know ? Newer »


This thread has been archived and is closed to new comments