How Do You Code?
February 11, 2014 10:41 AM   Subscribe

 
Wow! Neat. If I can give a bit of advice to people that might read this thread and are thinking about coding: DO IT! I started two months ago using Python 2.7.6 ( I really want to make a roguelike some day and libtcodpy isn't ported to 3.x python) and Codecademy. I've since stopped using codecademy but now use a combo of Khan Academy videos, Udacity CS101 course, and this little nifty little book that is intended to teach Python to kids and novices. That book has helped me so much. The most important part to me is that all these things can be had for FREE RIGHT NOW. You could be writing 'Hello World!' in the next hour if you wanted! Even less! GO CODE!
posted by Our Ship Of The Imagination! at 10:47 AM on February 11, 2014 [5 favorites]


With great vengeance and furious anger, obvs.
posted by invitapriore at 10:50 AM on February 11, 2014 [22 favorites]


This is a great resource and I'll contribute a non-joke answer there later today!
posted by invitapriore at 10:51 AM on February 11, 2014


This is neat, but I'm a little bit at a loss for what the goal of the project is. I get that it's trying to collect information about how different people (especially people who aren't full-time professional programmers) do/learn programming, but is there a plan to do something with the submissions other than just collect and display it? Is this meant to lead to better learning materials for non-traditional programmers, or a curated directory of resources regarding how people with various backgrounds as far as profession, skill level, needs, goals etc. might go about teaching themselves programming in a way that is maximally useful for them? The site doesn't make this very clear to me, though maybe I'm just missing the explanation somewhere.
posted by Scientist at 10:52 AM on February 11, 2014 [1 favorite]


While I'm happy there is a push to evangelize coding on one hand I'm a bit tired of the 'EVERYONE SHOULD CODE NOW!' rhetoric. Coding isn't easy and not everyone is suited to it...especially when you don't have a concrete goal in mind. Learning coding for the sake of learning coding...without any actual use for it...is a guaranteed way to make people forget how to code.
posted by jnnla at 10:53 AM on February 11, 2014 [6 favorites]


And then those people that realize that it isn't for them move on to other things that might be for them so why shouldn't they try in the first place if they have even the SMALLEST inclination to?
posted by Our Ship Of The Imagination! at 10:55 AM on February 11, 2014 [1 favorite]


Programming Languages: Turing
What kind of 'coding' do you do?: I can draw a blue box. Or ANY color box, really.
posted by Kabanos at 10:55 AM on February 11, 2014 [4 favorites]


Angrily. Sadly. Frustratedly. Joyously. Lazily. Half-heartedly. Concentratedly. When-will-this-game-ever-get-donedly?
posted by symbioid at 10:57 AM on February 11, 2014 [2 favorites]


Tomorrow.
posted by Riton at 10:59 AM on February 11, 2014 [8 favorites]


Programming Languages: Turing

Object-Oriented Turing was a thing.....Turing++, I guess.
posted by thelonius at 11:00 AM on February 11, 2014




While I'm happy there is a push to evangelize coding on one hand I'm a bit tired of the 'EVERYONE SHOULD CODE NOW!' rhetoric. Coding isn't easy and not everyone is suited to it

I think this project is to highlight how varied coding is. Not everyone's working on some large application or server project. Some people are making microcontrollers flash LEDs, others are banging out quick MATLAB scripts to reduce sensor data, others are using Python to make a simple countdown clock for when to leave to catch the next bus downtown, and still others are using a spreadsheet to budget a vacation and explore various "what if" scenarios.

I used to be a skeptic about EVERYONE SHOULD CODE NOW until sonic meat machine's comment in the last thread on the topic. It's not about making everyone a programmer, it's about overcoming the learned helplessness we've collectively suffered at the hands of technology and encouraging people to actually do things instead of pining for apps to do it for us.
posted by RonButNotStupid at 11:06 AM on February 11, 2014 [9 favorites]


Python? Bah. Real programmers wrote their first code in Malbolge.
posted by flabdablet at 11:08 AM on February 11, 2014


I'm all for trying out coding, but it isn't for everyone, and don't feel bad if it's not for you.

Let's stop trotting that out. The researchers whose work Atwood based that on have since walked back many of their conclusions.

Sure, lots of people fail out of intro programming coursework. But there's no reason yet to suspect that this means that some people just can't cut it. There are many ways to teach programming that have not been explored or even conceived.
posted by a snickering nuthatch at 11:14 AM on February 11, 2014 [2 favorites]


In big fucking circles.
posted by phaedon at 11:34 AM on February 11, 2014


RonButNotStupid: "I used to be a skeptic about EVERYONE SHOULD CODE NOW until sonic meat machine's comment in the last thread on the topic. It's not about making everyone a programmer, it's about overcoming the learned helplessness we've collectively suffered at the hands of technology and encouraging people to actually do things instead of pining for apps to do it for us."

It's a good point, and to that end I do think that the occupational focus here could be relaxed so that people are encouraged to contribute for whom code is just another tool to get things done, rather than a vocation. But that's just my (λfx.ffx) cents.
posted by invitapriore at 11:34 AM on February 11, 2014 [2 favorites]


In sweatpants under a hushed stream of profanity, mostly in C++, sometimes Shit++.
posted by Divest_Abstraction at 11:34 AM on February 11, 2014


Pedantically every program is a language, it's just that many if not most are not Turing complete, and most are not especially general.
posted by idiopath at 11:36 AM on February 11, 2014


I talk out loud, or write in public, and try my best in to describe what result I'm wishing for.
Every now and then someone says 'Oh, that would be trivial, hmmmm ...." and the world changes.

(My first sysop, on a VAX 750 at 300 baud, defined "trivial" as "Oh, not worth my time, and you'll never figure it out on your own"; I've improved since then, um, trivially.)
posted by hank at 11:36 AM on February 11, 2014 [1 favorite]


Id by dose, usually, though sobetibes it goes into by lugs.
posted by Greg_Ace at 11:36 AM on February 11, 2014 [3 favorites]


I code like a lot of people code: In a text editor, with StackExchange threads in like 13 open browser tabs in the background.
posted by caution live frogs at 11:39 AM on February 11, 2014 [39 favorites]


Haltingly, in shell script or Fitnesse markup, swiping half understood fragments from much better programmers.

Dammit Jim, I'm a tester, not a developer.
posted by MartinWisse at 11:43 AM on February 11, 2014 [2 favorites]


Naked.
posted by clvrmnky at 11:46 AM on February 11, 2014


Bird by bird.
posted by Obscure Reference at 11:46 AM on February 11, 2014 [4 favorites]


If everyone can code, then coding and programmers become sort of devalued. I wonder if that has something to do with why learning coding (so far) has been way more convoluted than it needs to be. There's a sort of willed obfuscation at work. My backgrounds are law and computer science, and I definitely see parallels in the way those two disciplines end up obfuscating principles and concepts that (let's be honest!) any middle schooler can pick up relatively quickly with the right toolset. Fortunately we have stuff like the Kano coming out that reveals the truth of all this. Play a modified version of Minecraft and pick up most of the basics! In a world with tools like these, kids should be making their own Flappy Bird clones within a few months.
posted by naju at 12:02 PM on February 11, 2014 [2 favorites]


Coding is the practice of looking up medical conditions and entering the wrong 5 or 6 digit number into a form.

Programming is the process of writing the form, and making sure it never displays the name or description for that code, thus ensuring garbage input.

Or maybe I'm just cynical when it comes to the medical world.
posted by MikeWarot at 12:12 PM on February 11, 2014 [3 favorites]


people are encouraged to contribute for whom code is just another tool to get things done, rather than a vocation

As someone who does it full-time, my bias is strongly in favor of the former and against the latter. The Good Lord save us from people for whom it's not a means to an end.

people who call it "coding" instead of "programming" can usually be ignored

See what I mean?
posted by yerfatma at 12:15 PM on February 11, 2014 [2 favorites]


And then there are the next level that deride "programming" in deference to "engineering".

Half way through the comments my response was "With Persistence", which is often the biggest issue, what poorly documented api call requires an array rather than a scalar? How is such and such initialized, do we need a colon or a semicolon?

Persistence, determination, patience.
posted by sammyo at 12:15 PM on February 11, 2014


yerfatma: "As someone who does it full-time, my bias is strongly in favor of the former and against the latter. The Good Lord save us from people for whom it's not a means to an end."

I mean, yeah, I agree and have met that type, but I meant the latter more as "people whose primary occupational output is an executable," which is ideally a subset of people who program to get things done.
posted by invitapriore at 12:21 PM on February 11, 2014


Jeez, it's my own project and I'm real late to the party.

Big thanks to everyone who's contributed so far, and if you're curious you can see me talk a lot more over in this /r/learnprogramming post from a few days ago.

I'm a bit tired of the 'EVERYONE SHOULD CODE NOW!' rhetoric. Coding isn't easy and not everyone is suited to it...especially when you don't have a concrete goal in mind. Learning coding for the sake of learning coding...without any actual use for it...is a guaranteed way to make people forget how to code.

I'm completely sick of it, too, and it's exactly why I built the site! Why do a musician and a doctor and an administrative assistant and a chemist and a journalist all need to learn how to pop up an alert window in JS? Or map an array in Python? People need to learn to accomplish the tasks they want to do, and sometimes that involves coding. And what kind of coding? Well, hopefully How Do You Code can help.

I get that it's trying to collect information about how different people (especially people who aren't full-time professional programmers) do/learn programming, but is there a plan to do something with the submissions other than just collect and display it?

Yup! Check out the results page - there's a big ol' banner at the top about making it more than just a long ol' list.

In my experience, people who call it "coding" instead of "programming" can usually be ignored.

This is the sort of attitude that makes programming needlessly scary. Doing a =SUM in Excel isn't any less worthwhile than putting together an abstract class in Java, just useful for different things. It's these same sort of hangups that have put compiled languages on some magic tier above interpreted languages.
posted by soma lkzx at 12:22 PM on February 11, 2014 [8 favorites]


It's a good point, and to that end I do think that the occupational focus here could be relaxed so that people are encouraged to contribute for whom code is just another tool to get things done, rather than a vocation.

I'd LOVE to hear ideas about how to make it sound more open to those folks! Under the job field I have "Make it up if you have to! Make board games on the weekend? You're a board game developer, I promise," but if that ain't enough I'm 150% open to suggestions.
posted by soma lkzx at 12:27 PM on February 11, 2014


That's the spirit. Coding can be useful, can be fun to learn, but like any other skill you need to do something with it or it'll atrophy.

And, like every other skill, it's not something everybody can learn, though doing a little of it is easier than it's made out to be, but being good enough to make it your living is harder than the "everbody code" people would like it to be.

There's no moral failing if you can't or don't want to code.
posted by MartinWisse at 12:28 PM on February 11, 2014


> Coding isn't easy and not everyone is suited to it...especially when you don't have a concrete goal in mind

I've found it pretty easy so far. What's hard is the ecology, all the standards and frameworks and the 'why don't I understand this documentation' and the whole jungle of stuff that needs to play nice if you want everything to work properly.

But having a concrete goal is super helpful. About a year and a half ago I was running pretty intensive reports with excel to flag potentially corrupt data and spit out some general statistics on a given file. It was practically programming already with all the formulas (excel had to crunch the last calculation for 10-20 minutes), but I didn't have it to the point where I could just package it up and just run it on any new set of files; each time I did it there was several hours of repetitive prep-work which required juuuust enough concentration -- making sure headers and list values and etc. lined up -- that I couldn't zone out.

I hated it, so I started noodling around with Python. I could mentally break the report down to its component steps, but had no idea how to tell the computer to do those steps for me. I mean, any more than I already was telling it with excel. So why not see if I could pick up the basics and convince the computer to save me a few hours each day?

Well, the reports ended before my Python caught up, but I kept at it anyway. And sure enough, a few months down the road I all of a sudden had to analyze and clean a whole bunch of different data sets. Really, really messy data sets which only sorta-kinda followed the conventions their owners had described, and each of which had to fit in a slightly different container.

The first one I did, a tiny set of records a couple orders of magnitude smaller than the others, took two days in excel.

So in comes Python, the language that loves you and wants you to be happy. It took a few tries (and a lot of paranoid-level checking) to get things working right, but oh my goodness, the first time it ran correctly...all the cleanup, done for me in under 8 seconds. I felt like I'd just gotten away with something huge.

The next script did the analysis too, and spit out a report I could just copy/paste into an email. I used both of them daily over the next few months, expanding as necessary and refactoring when bored.

Two loops, a couple if-thens, and a handful of dictionaries to do some transformations. It was that simple, and my computer became a little robot butler who happily, quickly, and exactly did all kinds of tedious stuff for me. And I didn't have to buy an app to get it done, either. I just needed to know how to ask.
posted by postcommunism at 12:29 PM on February 11, 2014 [15 favorites]


By the seat of my pants, because there's never time to write unit tests. Everything is a damn emergency. ;)
posted by wierdo at 12:44 PM on February 11, 2014 [3 favorites]


If everyone learns to code then i won't be able to freak people out by opening the terminal on my Mac and hammering out *nix commands anymore...

Nice site, just submit my answers.
posted by lawrencium at 12:55 PM on February 11, 2014 [1 favorite]


Poorly, and with much refactoring.
posted by the painkiller at 1:06 PM on February 11, 2014 [2 favorites]


oh my goodness, the first time it ran correctly...all the cleanup, done for me in under 8 seconds. I felt like I'd just gotten away with something huge.

Yeah, that's the addicting part for me: When everything goes right, you end up with something that is almost illicit in its power.
posted by jjwiseman at 1:15 PM on February 11, 2014


soma lkzx: "I'd LOVE to hear ideas about how to make it sound more open to those folks! Under the job field I have "Make it up if you have to! Make board games on the weekend? You're a board game developer, I promise," but if that ain't enough I'm 150% open to suggestions."

I don't think the occupation section needs to change or go away, really. Maybe the simplest change would just be putting the occupation-related stuff below the "nitty gritty" section, so that someone filling out the form who might be otherwise put off by that is already pretty invested by the time they get to that section. Potentially rephrasing that disclaimer to emphasize that it's optional (even just "Optional, but you can make it up if you have to! ..."). It's pretty inviting as-is, but I think changes like that might make it more so. Thanks for putting this together!
posted by invitapriore at 1:17 PM on February 11, 2014


> If everyone can code, then coding and programmers become sort of devalued. I wonder if that has something to do with why learning coding (so far) has been way more convoluted than it needs to be.

Hah! No, it isn't some sort of conspiracy to prevent you from learning how to code!

Honestly, we could use more actual programmers - it's hard to get things done because you generally have to do it yourself. I never feel excessive competition, quite the reverse...

Lots of issues:

* most people don't find programming very interesting past a certain point.
* many smart people can't hold the structure of a program in their head and manipulate it, and can't learn it either.
* many good programmers have no time to teach because they have too much programming to do.
* lots of people who are good at pushing together technical things until they work are not good at programming, because you can't just do it that way.

That last point needs some clarification.

I've helped quite a few people with their programming, but a sizable subset of them don't get the "must understand exactly what you're doing" idea and go the "fake it till you make it" route. I see all sorts of code which is nonsensical - blocks of code with no side-effects, so that all the work that went on is lost, for example - but when I ask, "What do you want to do with this line?" I don't even get a reasonable answer. They're writing "a bunch of stuff" and hope to debug it into doing what they want.

It's funny that this seems to affect "bright" people more than most - but "bright" non-science/math/technology types only. They seem to want to "jump" to an answer - but you can't jump to the answer in programming, you have to write all the parts.

(And I can't get them to "try it out in the terminal" either. I mean, Python makes it SO easy to do this...!)
posted by lupus_yonderboy at 1:20 PM on February 11, 2014 [7 favorites]


Mangled, tangled, spangled. And spaghetti!
posted by Cookiebastard at 1:25 PM on February 11, 2014


My god, yes, as a professional programmer I wish more people were better programmers, and that we knew great ways of teaching people to be good programmers.

My response: http://www.howdoyoucode.com/responses/15e85f72a6f5

My advice to people interested in learning to code:

Get curious. Write code that satisfies your curiosity. Write code that gives you new power, that lets you do things you couldn't do before.

Coding can be frustrating, but buck up! The reason it feels hard is because it actually is inherently one of the most challenging things that humankind will ever attempt. We're all pretty bad at programming, when it comes down to it. It's still worth doing, though.
posted by jjwiseman at 1:35 PM on February 11, 2014 [3 favorites]


"I've helped quite a few people with their programming, but a sizable subset of them don't get the "must understand exactly what you're doing" idea and go the "fake it till you make it" route. I see all sorts of code which is nonsensical - blocks of code with no side-effects, so that all the work that went on is lost, for example - but when I ask, "What do you want to do with this line?" I don't even get a reasonable answer. They're writing "a bunch of stuff" and hope to debug it into doing what they want."

Most of the people who think they understand their code comprehensively are delusional. (Ie. Are you using mutation (ie. "x = x+1") ? well the semantics of that are a fucking mess, especially when you want to have more than one thread).

As far as I am concerned we all start out writing a bunch of useless nonsense, and you keep learning. The illusion that you fully understand your code becomes slimmer with experience, replaced with comprehension. But this isn't a linear step by step build up, it is a gestalt of understanding.
posted by idiopath at 1:45 PM on February 11, 2014 [2 favorites]


Drowning in a sea of "I don't know how to do this oh god why did I take on this project" and then I claw my way up over the bodies of a hundred dead stackexchange threads and finally get my head above the surface. It's actually really fun to code that way! Put me on a project that I firmly know how to do and I get bored really fast, but learning the completely unknown stuff is great, it feels like I made a working car out of rocks and sticks and twine. As much as I'd like a job that's more straight up programming than what I do now, I don't know how much I'd enjoy it when I can't just silently fail until I get it with only my own expectations to satisfy.
posted by jason_steakums at 2:07 PM on February 11, 2014 [8 favorites]


Drowning in a sea of "I don't know how to do this oh god why did I take on this project" and then I claw my way up over the bodies of a hundred dead stackexchange threads and finally get my head above the surface.

I think I've found my new answer to "What is programming?"
posted by soma lkzx at 2:12 PM on February 11, 2014 [1 favorite]


idiopath, I hate to say it, but I don't agree with your comment at all.

> Most of the people who think they understand their code comprehensively are delusional.

Note that you added the word "comprehensively" - and then gave it a great big huge meaning that means that no human could ever "comprehensively" understand their code, or indeed anything at all.

Yes, it's impossible to understand the totality of what your computer is doing, but it's impossible to "comprehensively" understand anything at all by your definition.

When I talk about people faking it, I'm not talking about people missing some thread subtlety in x = x + 1 - I'm talking about cargo cult programming. I'm talking about pointing at x = x + 1 and saying, "Now, I see you aren't using x anywhere else in the program so...?" and having them looking blankly at you.

> As far as I am concerned we all start out writing a bunch of useless nonsense, and you keep learning.

That ain't no way to run a railroad!

I write a lot of code almost every day, and nearly all of it works right the first time. I honestly couldn't proceed if it didn't, life would be too awful for me - because in a large system, there just isn't time to debug every line.

And how do I do this? I do a lot of experiments before I start - do I understand how this function or class works? Let me try some examples! (One of the lovely things about Python is that you can do this from the command line...)

Then I write the code as carefully as I can - and then I spend a long time reading it and tweaking it. I just won't run something until I'm reasonably hopeful that it's going work right the first time.

Often I have complex logic - if I can't be sure that it's going to work, I write a unit test, or several tests - or I split the logic up.

Sure, I miss small things, and sometimes big things, but it's surprising how often I pop my new component in to the system and it just works.

When I first started, a very long time ago, I was lazy and didn't work out the consequences of what I was doing - just trusted my natural talent to more or less put together the right stuff and then fix it up. But you can't do real "software engineering" that way - it's like building bridges and then fixing them up when they fall down.

I spent lots of time debugging, even shotgun debugging, and it was stressful, and I was never sure when a bug would pop up.

These days, I think charging forward and writing a lot of nonsense and then fixing it is the absolute worst way to go. You make decisions based on fictions, you have no idea how long anything will take you, and your confidence is impaired.

You can see my process right here if you're interested. There are definitely some embarrassments but overall I think I'm as good as my word.
posted by lupus_yonderboy at 2:50 PM on February 11, 2014 [7 favorites]


Programming teaches us that the hardest thing a person can ever do is decide exactly what they want.
posted by LogicalDash at 4:15 PM on February 11, 2014 [6 favorites]


lupus_yonderboy: my point is that most programmers are cargo culting mutation. There is an upgrade path from cargo cult to actual programming. That process of trying small examples and figuring out what actually works is actually part of that upgrade path, but it isn't a difference of kind, it is a difference of quality.
posted by idiopath at 4:16 PM on February 11, 2014


Also, I picked mutation for the very reason that it is one of those things leading to code that will easily work in your examples and tests and then totally fail in production.
posted by idiopath at 4:18 PM on February 11, 2014


> There is an upgrade path from cargo cult to actual programming.

I don't believe that at all. I believe that in order to get past a certain level in programming, you have to completely foreswear cargo cult programming forever, and the earlier you do it, the better off you are.

You cannot put together a lot of rickety parts to get a solid whole. You must renounce the evil of Magical Thinking before you can really be an engineer, and not just someone who writes computer code.
posted by lupus_yonderboy at 4:28 PM on February 11, 2014 [2 favorites]


You just described the upgrade path. It isn't a paradigm shift, it's a new skill added to the ones you have already.
posted by idiopath at 5:13 PM on February 11, 2014


I don't have the desire to learn programming to a deep level, but I have found that certain types of code have helped me immensely, namely markup and scripting (mostly scripting in Unix and DOS shells). It's not full-fledged OO, and markup is (was) really just formatting, but it's been a huge timesaver in many situations. I even learned some Perl so I could do some parsing that would have been very difficult otherwise. I've been toying with Python for a while but never really dug in, but it is a relief in some ways after Perl (and a nightmare in other ways).

I started out learning BASIC in the '70s, and did a bit of assembly on my old Apple ][e (mostly through peeks and pokes, but even did some straight binary), and it just never took hold of my soul like it did some other kids I knew. I liked it alright, but I was more interested in music than programming, and of course Ultima IV...

I do think on a fundamental level it's a skill like carpentry that should be taught and understood by many laypeople, to use as tools, but without the idea that it's something to be conquered or is only the purview of rarefied intellects. It can be fun and not nearly so intimidating...
posted by krinklyfig at 5:35 PM on February 11, 2014 [1 favorite]


If everyone learns to code then i won't be able to freak people out by opening the terminal on my Mac and hammering out *nix commands anymore...

A friend of mine was fussing around in the terminal when someone came up and asked "what is that?". The asker, it turns out, does up websites for a living and didn't know what a terminal is.
posted by sebastienbailard at 6:00 PM on February 11, 2014 [1 favorite]



I'm a bit tired of the 'EVERYONE SHOULD BECOME MUSICIANS NOW!' rhetoric. Writing and playing music isn't easy and not everyone is suited to it...especially when you don't have a concrete goal in mind. Learning music theory and technique for the sake of learning music theory and technique...without any actual use for it...is a guaranteed way to make people forget how to write and play music.

I'm a bit tired of the 'EVERYONE SHOULD PAINT/DRAW/SCULPT NOW!' rhetoric. Art isn't easy and not everyone is suited to it...especially when you don't have a concrete goal in mind. Learning art for the sake of learning art...without any actual use for it...is a guaranteed way to make people forget how to paint, draw, or sculpt.

I'm a bit tired of the 'EVERYONE SHOULD WRITE CREATIVELY NOW!' rhetoric. Creative writing isn't easy and not everyone is suited to it...especially when you don't have a concrete goal in mind. Learning creative writing for the sake of learning creative writing...without any actual use for it...is a guaranteed way to make people forget how to write creatively.

I'm a bit tired of the 'EVERYONE SHOULD N NOW!' rhetoric. N isn't easy and not everyone is suited to it...especially when you don't have a concrete goal in mind. Learning N for the sake of learning N...without any actual use for it...is a guaranteed way to make people forget how to N.

Not to belabor the point or anything but just in case I'm being too ambiguous somehow:
The idea that "coding" or "programming" or whatever you want to call it is somehow different or better or more worthy of special gatekeeping* than LITERALLY EVERY SINGLE SKILL OR ART CONTRIVED BY HUMANKIND is laughably, deliciously small minded. As if it is some magical arcane force which only certain anointed beings can truly and faithfully wield. What a silly notion.

What's that famous quote by Heinlein? I think it's relevant here:
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.

*Which I'm willing to concede may be an uncharitable read of the aforementioned statement. I'm also willing to admit that a great many other skills and endeavors are heavily guarded by nebbish elitists. I disagree with that shit too.

posted by Doleful Creature at 7:48 PM on February 11, 2014 [4 favorites]


change a diaper... etc

That's a quote not from Heinlein per se, but from his fictional character Lazarus Long, whose schtick is living for thousands and thousands of years.

Most of us don't have that many lifetimes to gain anything approaching mastery of anything like the suggested number of skills.

I have no problem with the idea that somebody who has spent twenty years working at improving their ability to write sound code has a valuable skill that most people just don't. In that regard I can see no reason for not treating skilled programming with the same respect we afford any other kind of craft worth taking seriously.

I personally don't much like the term "software engineering", but for no better reason than that it tends in my mind to de-emphasise the degree of engagement and work required to become skilled in the craft of writing reliable software. Great software is not, to my way of thinking, primarily about engineering any more than great musicianship is primarily about technical proficiency. Sure, good engineering principles help - but I have been involved in the software industry for thirty years and in my experience good code comes from people who are good at it; put a best-practices manual in front of a clueless drone and the result, even if the procedures are followed to the letter, will be shit software that's a pain in the arse to use and an even worse pain to maintain.
posted by flabdablet at 8:53 PM on February 11, 2014


Most of us don't have that many lifetimes to gain anything approaching mastery of anything like the suggested number of skills.

But that barely even registers with the majority of the skills mentioned in that quote. Not mention there's no implication that one must MASTER any of these, just learn how to do them. Likewise I don't think it's really fair to assert that "learn to code" is interchangeable with "master the art of code" in order to serve this need to defend the seriousness of the craft. This seems like a false dichotomy to me.

I also agree that we should treat skilled programming with respect...but I fail to see how that justifies a "No NO stop trying to code you AMATEUR" attitude that seems (to my reading, anyway) to lurk behind some of the frustrated comments made in these kinds of conversations.

Again as an example, I don't know the guy who made the beatiful bench in that video you posted but I seriously doubt he'd be all "I'm tired of people trying to get everyone to learn woodworking! It's not for everybody. Seriously." Again maybe I'm reading it wrong but that whole idea just seems unnecessarily discouraging and I don't know why it's such a useful or important position to maintain.
posted by Doleful Creature at 9:13 PM on February 11, 2014


I seriously doubt he'd be all "I'm tired of people trying to get everyone to learn woodworking! It's not for everybody. Seriously."

Wouldn't be at all surprised to see him raising one eyebrow at yet another report of some keen yet clueless goose losing a couple fingers after dropping a few thou on a shiny new bandsaw, though.

Some skills just aren't for everybody, and that's fine. Aptitude really is a thing.
posted by flabdablet at 9:30 PM on February 11, 2014


> I personally don't much like the term "software engineering", but for no better reason than that it tends in my mind to de-emphasise the degree of engagement and work required to become skilled in the craft of writing reliable software.

I'm not sure where you get this image of engineers, but engineering is a huge amount of work and engagement.(*) The reason that so many programs are buggy whereas buildings and airplanes rarely fall down is partly because software is a young field which doesn't even have - but partly because there are too many programmers and not enough real engineers in the field.

I personally think everyone who can, should learn how to program, at least a bit, in the same way that you should learn how to swim, do your accounts or speak a foreign language - because these are useful skills that also make you a better person. As you've guessed, I personally enjoy it a great deal.

The baffling part is of course that people seem to have more difficulty with it than you'd expect. Learning a foreign language, even just enough to have limping conversations about the location of bathrooms and the availability of hotel rooms, would seem to be much more difficult than writing a few programs, but far more people do it.

At least part of it is that magical thinking/cargo cult idea that I talked about above. That attitude does actually work really well in learning languages - people work with you, so even if you say, "Tengo veinte anos," they figure it out, and you fix up your errors by hearing other people speak.

But as I said above, if you never get surety, you won't make progress. Watching (some of) my students using shotgun debugging was very discouraging to me - they seemed to understand the concepts really well, they could answer questions in class very well, but then they simply refused to do things like "Put a lot of print statements in" or "Take out small chunks you don't understand and run them in the terminal", preferring to repeatedly perturb the code in the hope that it would suddenly start working.
posted by lupus_yonderboy at 9:41 PM on February 11, 2014


For what it's worth, I'm dead keen for everybody I know to learn how to code, because I like to code and I find it deeply personally satisfying to write code I can come back to three years later and easily adapt to some new purpose, and it would make me happy to know that somebody else was on the way to experiencing that kind of satisfaction as well. But honestly the main thing that gets in my way of helping others find that kind of satisfaction is precisely the fact that so few of the people I know actually have any kind of aptitude for it.

Trying to teach somebody with no aptitude for coding how to code really is like trying to teach a pig to sing (wastes your time, annoys the pig). So I am personally opposed to the idea that coding really is something everybody should learn. If you're interested: sure! Go for it! Have a crack! But if you find yourself doing a lot of things a certain way for no better reason than that you saw somebody else do those things that way (cargo cult copypasta), and you don't find yourself asking why those things are done that way and is there a cleaner way to do them or an even cleaner approach still that makes them unnecessary, then I'm predicting that you'll lose interest fairly quickly.

I'm not saying you should lose interest, just that you probably will.

There's also a strong risk, for people who don't have that innate drive to dig deep and work out why, but persist anyway, of ending up with one year's experience repeated twenty times rather than twenty years' experience - pretty much a guaranteed one-way ride into Dunning-Kruger hell for them and all who have to work with them. It pays to stay humble, and it pays to stay curious.
posted by flabdablet at 9:43 PM on February 11, 2014 [1 favorite]


I'm not sure where you get this image of engineers, but engineering is a huge amount of work and engagement.(*)

Granted. It's the connotations of the word as understood by the general public that I find troublesome, not as understood by anybody directly involved in any actual discipline of engineering; I frequently encounter arguments along the lines that software should become strictly a branch of engineering in the sense of something that requires only rigorous application of codified best practice, where there's no longer a need for a sense of pride in or enjoyment of a craft requiring an ongoing personal desire to get better at it.

The reason that so many programs are buggy whereas buildings and airplanes rarely fall down is partly because software is a young field which doesn't even have - but partly because there are too many programmers and not enough real engineers in the field.

I hear that argument a lot too, and I'm a little dubious about it. Software behaviour is less constrained by physics than that of the products of any other branch of engineering, and the hardware on which it runs is becoming increasingly capable at a rate not matched by the substrate of any other branch of engineering even including materials science.

It's not that it's young in years so much as that it's permanently in a state of incredibly rapid innovative potential, and that the expectations placed on what it ought to be able to achieve are constantly rising at a rate unprecedented in any other sphere of human activity. Writing good programs is hard and getting harder every month, and the lifetime of a program is incredibly short compared to that of a building or airplane.

It seems to me that there simply isn't as much time for software best practice to become widespread as there is for best practice in any other branch of engineering. It also seems to me that best practice in software development is inherently more difficult to identify correctly than in other branches of engineering.

Which is not to say that best practice, even such as it is, is anywhere near often enough applied. And the main group to blame for that, it has long seemed to me, is Marketing. In all the years I was actively involved in software development, one effect that was always present on every project was the necessity to work to ridiculous deadlines made necessary only because of over-promising by sales and marketing folks without a shred of a clue about the effort required to make those promises come even close to true. If you're looking for reasons why corners get cut in software development, much of the time you'll find that this is not something the developers themselves can actually do much about.
posted by flabdablet at 10:02 PM on February 11, 2014 [3 favorites]


they simply refused to do things like "Put a lot of print statements in" or "Take out small chunks you don't understand and run them in the terminal", preferring to repeatedly perturb the code in the hope that it would suddenly start working.

That is exactly the lack of aptitude I'm talking about. If you care more that it works than why it works, you'll never get far as a programmer.
posted by flabdablet at 10:03 PM on February 11, 2014 [1 favorite]


That is exactly the lack of aptitude I'm talking about. If you care more that it works than why it works, you'll never get far as a programmer.

Sigh. Harsh but probably true.
posted by lupus_yonderboy at 10:14 PM on February 11, 2014 [1 favorite]


That said, one of the coolest ideas I ever encountered is basically shotgun debugging in its purest, rawest form.
posted by flabdablet at 10:36 PM on February 11, 2014 [2 favorites]


I think I might agree with your key points, flabdalet, but is it really aptitude that's the problem here? Unless we have different definitions of that word. Aptitude means a natural ability or tendency, but the examples mentioned aren't really about aptitude, they're more about "teachability" or maybe adaptability. I doubt anyone is naturally good at using a bandsaw but I'm sure loads of people are teachable enough to respect and use that tool properly. And maybe some people have a natural tendency for process and observation that doesn't have to be taught but again I'm not sure that lacking such natural patience would prevent one from acquiring it through more tedious means.

Likewise in programming, nobody is really naturally good at writing code. They might have some natural cognitive ability that makes writing code a little easier, but it still seems to me that the difference between mastery and klugeville is more about attitude than aptitude, no?

Maybe I'm being hippy-dippy about this but I have a really hard time with the idea that aptitude is essential or that it's anything more than a lucky springboard.
posted by Doleful Creature at 11:11 PM on February 11, 2014


still seems to me that the difference between mastery and klugeville is more about attitude than aptitude, no?

In this particular field, which I must admit is the one I've paid more attention to than any other because it's the one I've spent more time working in than any other, it seems to me that attitude is aptitude.

I don't think I've ever met somebody who started out with a fundamental lack of interest in how and why code works but subsequently went on to acquire that interest via deliberate intent and practice. Not saying no such person exists, just that I've never met one.

On the flip side, many of the best programmers I know started out with nothing in the way of coding knowledge beyond a strong desire to learn, and not so much to learn coding but to learn about coding.

Also more than willing to believe that a similar pattern holds true in other fields of human endeavour: it's those things that happen to engage our interest that we tend to pay the most attention to, and it's paying attention, it seems to me, that underpins all acquisition of skill.

If you've read Pirsig's "Zen and the Art of Motorcycle Maintenance" you'll recall he divides the world into "classicists" and "romantics", where the classicist is the one who considers a shim cut from a beer can as the perfect thing to prevent adjustment slip in a set of motorcycle handlebars purely on the basis of the properties of extruded aluminium sheet, while the romantic would rather continue to put up with the slip because he can't get past the dissonance between the provenance of the beer can and that of the BMW.

To a first approximation, coders are classicists and romantics do UX and marketing.
posted by flabdablet at 3:35 AM on February 12, 2014


Doleful Creature: "I don't know the guy who made the beatiful bench in that video you posted but I seriously doubt he'd be all "I'm tired of people trying to get everyone to learn woodworking! It's not for everybody. Seriously.""
Presumably he spends precious little of his time fixing other people's broken benches. I have zero problem with people trying to solve their everyday hobby problems with coding. I have problems trying to help people with the monstrous Excel macros they conjured forth one night in desperation.

Awesome video, by the way.
posted by brokkr at 6:56 AM on February 12, 2014


via
posted by flabdablet at 6:59 AM on February 12, 2014


I believe that to be the case for pretty much every specialist activity, and that's why "specialization is for insects" makes a much better throwaway line than a philosophy.

Heinlein's lead characters are entertaining, but there's a fairly consistent subtext of "this is how human beings should be, and if you're not like that, fuck you" and that does eventually grate a little.
posted by flabdablet at 7:33 AM on February 12, 2014 [1 favorite]


On the other hand, everybody who shows the slightest bit of interest in coding should certainly be encouraged to explore that interest and should certainly have the opportunity to spend time with experienced coders willing to share their knowledge. Especially girls. Because fuck knows programming is a total boyzone and could do with a bit more balance.
posted by flabdablet at 7:35 AM on February 12, 2014 [2 favorites]


The key to the airplane analogy is that airplanes are designed and refined for years, even decades. Software with a similar overall complexity doesn't get a separate design stage, and is built in months.
posted by idiopath at 7:41 AM on February 12, 2014 [3 favorites]


Humph, it only askes for Github names, what about those of us who vastly prefer Bitbucket (Due to unlimited private repositories for academics?)
posted by Canageek at 9:54 AM on February 12, 2014


The question of "programming aptitude" is something that has baffled me for quite some time.

If you put the question to me "Do you have the Right Stuff, programming wise", I'm inclined to say no because I find it hard to believe that I have a semi-magical talent that is different in kind rather than degree from other people. If you asked me, for instance, "do you get how you must understand everything you do, or do you just make it up as you go along", I'd say I make it up as I go along. I'd actually specifically describe myself as someone who beats technological things together until they work.

To take an example -- recently I had occasion to write kind of a quick dummy version of a system we interface with. Basically something that would take a list of IDs in URL parameters and return a thing in a specific format that said "here's a dummy response for ID 1, 2, 3, et cetera". So I happened to have been looking at node.js, and I saw a "hello world" app that created a web server that just responded "hello world" to everything. So I took that and changed it to be on the desired port and say "goat goat goat", and then to say "goat (the url path) goat", and then "ninjas leap through the window and then stab ID 1 and then stab ID 2 and then stab ID 3 (for all IDs given) and then leap out the window" and then swapped in the real message.

So I'd say of that thing that I don't even really know how to code in Javascript, and I don't really know how node.js works, or even how to spell it right, hence I do not understand everything I did. I'd call it beating things together until they work, because I basically went "I don't know but I bet that request object contains stuff like the URL parameters, and... how do you manipulate strings in this language and... er, look up for loop syntax..." et cetera. That to me is beating things together.

Yet when it gets into specific examples of the sort of people who lack The Right Stuff invariably I look at the problem and go "people HAVE that problem?" As in this case, that someone would write x = x + 1 and then not examine x later because of something other than an omission -- or not be able to write FizzBuzz, or not understanding pointers, or whatever. So I'm not sure if folks are just not giving good examples, or if I do in fact have this magical thing, or if there's actually something else going on, but that degree of doubt in my mind about whether I have the right stuff or not is probably a substantial reason why I'm not presently working as a developer.
posted by sparktinker at 10:53 AM on February 12, 2014 [1 favorite]


sparktinker: I think I already said upthread that one can go from your level of comprehension to being a skilled developer (it does take patience, humility, and curiosity to be sure)

just to be clear, what I meant was "x = x + 1", in other words mutation of a variable, is something pretty much every developer does, and once threads enter the question, almost none of them ever actually understand what it is doing (if more than one thread can access x). Point being the difference is not one of kind ("developer material" vs. "muggle" or whatever), but of experience.
posted by idiopath at 11:20 AM on February 12, 2014


The idea that "coding" or "programming" or whatever you want to call it is somehow different or better or more worthy of special gatekeeping* than LITERALLY EVERY SINGLE SKILL OR ART CONTRIVED BY HUMANKIND is laughably, deliciously small minded.

I dunno, Doleful Creature. I think if people were actually saying things like "everyone should learn creative writing now!" the way they do about programming, I would think that was dumb too.

I'm a professional software developer. I'm all about people learning to program if they have an interest in it. I'm all about autodidacticism. I think the project linked in the FPP is neat. But a lot of people lately have been ringing this bell that learning software development is Good For You and you should Just Try It, because writing code is the Way Of The Future. I think many of the negative reactions in this thread are actually responses to this attitude, not to the FPP per se.
posted by my favorite orange at 12:04 PM on February 12, 2014


Good to see elitism is alive and well on MeFi.

And yeah, at various points in a refactor, I'll often have a bunch of completely inoperative code waiting to be taken out. Because I changed my mind/learned a better way to do something/had the requirements changed on me/whatever. Sorry that offends your pure sensibilities, guys.

There is much programming in this world that is more akin to plumbing than serious engineering. There is much programming more akin to serious engineering than plumbing. Sometimes engineers do plumbing and sometimes plumbers can do a little engineering, at least in the software world.

But yes, if you define programming as serious software engineering, most people don't have the time, inclination, or aptitude for it. As our forebears used to recognize, however, not all programming must be that kind of programming. Most people need to learn how to hack out a short Python or Perl or Bash or whatever script, or even a damn Excel macro, to automate away tedium in their workflow, whatever that may be. You may disagree, but in my book that is just as much programming as the vast majority of any programming tasks people take on.

That's what I mean when I say everyone (or a large subset of everyone) should learn to program at least a little. Most people will never push a line of code to Github. Most people will never write an application others will use directly. That does not make them not a programmer, it just makes them not your programmer. Beyond that, we can argue about skill levels and degrees of aptitude or whatever, but sorry guys, beginners count, too. If I see some old man pizza'ing his way down the bunny slope at a ski resort, I don't get to say "that guy isn't really skiing." He's upright, on skis, and being pulled downhill by gravity, so it sounds an awful lot like skiing to me.
posted by wierdo at 12:17 PM on February 12, 2014 [2 favorites]


my favorite orange: if I recall highschool clearly, actually they already did say "everyone needs to learn creative writing" and they actually tried to carry that plan out. It's pretty much the status quo, no?
posted by idiopath at 12:52 PM on February 12, 2014


Sparktinker: given that you have demonstrated an ability to jump into a programming environment you'd not previously used, and make verifiably correct guesses about how to tweak something that exists in there into something that does what you want, you would already add substantially more value to a lot of dev teams than you give yourself credit for.

The process you followed - incremental modifications, verifying at each step that what happens is what you expected to happen, and looking stuff up (huzzah!) when you don't know the syntax for it - that's exactly the attitude that lupus_yonderboy despairs of finding in his shotgun debuggers.

It really, truly is the case that for most people, Python or Javascript might as well be Malbolge. Sad but undoubtedly true. And this is a view I've come to by watching people encounter computers, not something I cling to in order to prop up a self-image of belonging to some kind of elite. I just happen to be able to code. That doesn't make me better than anybody who can't, just differently skilled.

And honestly, it isn't just programming. Hell, not that long ago we had some guy in AskMe who appeared to be applying cargo cult carpentry to the task of fitting a door latch. And although I literally cannot imagine what it must feel like to be unable to look at a failing door latch and just know what I need to do to find out how to make it work, there are loads of things that I myself have neither interest in nor aptitude for, and it must be the case that people who have both would look at me and shake their heads and be every bit as unable to imagine being me.

Just as well we've all got each other to fall back on, hey.
posted by flabdablet at 7:30 PM on February 12, 2014


Heinlein's lead characters are entertaining, but there's a fairly consistent subtext of "this is how human beings should be, and if you're not like that, fuck you" and that does eventually grate a little.

His more self-indulgent stuff tries to seduce the reader into sympathizing with an enlightened in-group in a context of a cartoonish endarkened out-group that wants them to, I don't know, start paying taxes or something.

When I was younger I had more patience for him, but as an adult, I find his novels for juveniles more readable.
posted by sebastienbailard at 8:58 PM on February 12, 2014


With Emacs in production, of course.
posted by bastionofsanity at 9:38 AM on February 13, 2014 [1 favorite]


« Older The final frontier of intimacy   |   relentless.com Newer »


This thread has been archived and is closed to new comments