Learn To Code
January 1st, 2012If learning to program is even a minor goal for you, Code Year (via Brent Simmons) might be just the encouragement you need. They promise to email you on a weekly basis with coding lessons to help you achieve your goal.
I’m one of those computer programmers who downplays the difficulty of the profession, because “if I can do it, anybody can do it!” On the other hand, I have faced challenges that made me question whether I’m vaguely qualified for the job. What it boils down to is that programming is both incredibly simple and impossibly hard, like so many important things in life.
There was a time when nobody knew how to write literary prose. The geniuses who invented it shared their special tool with a few friends, and they relished in their private, elite communications. Eventually monks, politicians, and academics joined the club. Now, we judge a society’s overall level of intellectual advancement by the literacy rate: the percentage of people who have learned to read and write.
Literacy isn’t about becoming a Hemingway or a Chabon. It’s about learning the basic tools to get a job done. I think programming — coding — is much the same. You don’t have to be the world’s best programmer to develop a means of expressing yourself, of solving a problem, of making something happen. If you’re lucky, you’ll be a genius, but you start out with the basics.
Long ago, it would have been ridiculous to assume a whole society could be judged by its ability to read and write prose. It feels ridiculous now, to assume that we might use computer programming as a similar benchmark. Yet it may happen.
Did you always mean to learn another language, but never did? By all means, learn Spanish, French, or Chinese. But learn to code, too.
January 2nd, 2012 at 1:05 am
I know how to code too. At least I did a few years ago when I retired. Haven’t done much since except the odd script here and there. But truly coding experience has left me with an additional view on things that defies description. “The new literacy” may be pushing things a bit far, but coding certainly opens a new mental doorway.
January 2nd, 2012 at 8:38 am
My comment on this became a bit long so I posted it here instead http://mostrom.eu/blog/2012/01/02/should-everybody-learn-to-program/
January 2nd, 2012 at 8:45 am
> But learn to code, too.
I think this begs the question: what does “learning to code” mean? Are we talking Objective C, or are we talking BASIC and Hypercard?
I’m raising this question as someone who has never, and will never, have the skills that are required today to build a native app, but who got pretty deeply into very high level scripting platforms in my youth. And while I haven’t built anything in more than a decade, the experience of using accessible tools to build simple software changed me for life. I see the world differently because I had that experience.
Gruber recently lamented the fact that nothing like Hypercard exists today, and I think he’s onto something. I think coding changes a person, and allows you to see the world in a new way. And it’s a shame that in an era where computers are vastly more powerful than ever, the skills required to get a taste of what coding feels like have a higher barrier to entry than they once did.
By all rights, it should be easier today than ever to get started coding, not harder.
January 2nd, 2012 at 10:56 am
well, you’re never going to have anything like Hypercard as long as the language wars continue. If it’s not [syntax], it’s crap. If you don’t use [language], you’re not REALLY programming. On and on.
It’s really bad. in 1998, I was building actual enterprise systems and doing little more than labeling If steps. I could think about the program as a thing, build it that way, and not only not know what “language” it was built in, but not CARE. I was creating programs that did things, not fiddling around with language.
From the “outside” the problem is, programming isn’t taught as “what do you want to do”, but “here’s how to use [language]”, because that’s really how programmers seem to want it. I have a hard, EXTREMELY hard time using c-syntax or dot-syntax. I don’t know why, but i do. Every course, every class i’ve ever taken in anything resembling either, if I go a week without using it, it’s all gone. More “natural” language implementations, (yes, I know, you can’t REALLY use natural language to program with), or higher level languages, i do well with.
But if you can’t do C or dot, well, screw you, you don’t get to program. Yes, I know, lots of science experiments with regard to other kinds of syntaxes, call me when they’re supported on a platform, when I can get real help from the platform vendor on them.
That’s an issue too. If all you’re doing is *incredibly* simplistic stuff, you can use about any language. But, if you start moving beyond that, as you will, and you start needing support because there’s some oddity in the OS or frameworks that you can’t grok, and you’re not using some form of C or dot? Snerk. Sucks to be you, hope someone on a mailing list has figured it out, or that you eventually can. It’s all well and good to talk about “well, google it”. When that’s your ONLY option? You find there are a LOT of holes in that idea. Platform support is important, and we all know what those are limited to.
So yeah. Hypercard, even though I disliked a lot of the paradigm and the limitations, was an amazing tool to get people interested in programming, but nowadays? Not going to happen, the entrenched machismo of “I LEARNED C AND DOT, HOW DARE YOU NOT SHARE MY PAIN AND EXPERIANCE” won’t allow it.
January 2nd, 2012 at 11:03 am
I’ve played with the “learn to program” problem myself (see both my suggestion and alternate paths).
My thinking was that while the webs are wall-to-wall with tutorial and how-to information for a specific level of learning (html tutorial, python tutorial) we were shorter on road maps through it all. I suggested (for a certain kind of self-motivated student) a climb up the LAMP platform. That give pretty good A-Z, from basic UNIX skills to PHP programming.
I think the Code Year project sounds good too. Though, the path only unfolds a little a time, doesn’t it? ;-)
Ah well, I think we need lots of road maps for lots of students. Then hopefully they’ll find a path that matches both their learning style and their desired destination.
January 2nd, 2012 at 11:36 am
The last code I wrote (aside from numerous AppleScripts and some Bash scripts) was in C to run on a then new Mac SE/30. I dabbled with SuperCard and Flamethrower to write some CGIs for a pair of university course web sites, but what has always prevented my going further now that I’m retired and have the time is the rapidity with which the technology and APIs are changing, and of course, Objective C. Keeping up with all that seems an impossible task.
January 2nd, 2012 at 12:11 pm
@Adam Bell, I think there is some good news and some bad news. On the one hand, Objective C is pretty old (30 years?), and if one had the fortune to program the NeXT Computer path, modern Mac (and iStuff) wouldn’t be too different.
Most of us though were not NeXT programmers (memory prices kept me out, even after the OS went PC-compatible) and “‘recycle” our knowledge.
Recycling isn’t so bad. It gets easier. To the point where … well, I’ve actually answered a question about a programming language I’d never heard of on Stack Overflow, and got top points for my response! A personal best ;-)
Anyway, if you are looking for fun in retirement, I’d suggest you get yourself a little Arduino. There are lots of little self-contained project one can do, and they do build a foundation, should you want to go somewhere else, after.
January 2nd, 2012 at 12:29 pm
As an aside, I did a couple little play-apps for Android. I felt that code pulling from both my Java experience, but also my really old-time Mac OS (1980s Mac) experience. What goes around, comes around.
January 2nd, 2012 at 1:45 pm
@John Personna: Some time ago I bought a book “Arduino, A Quick Start Guide” so I was thinking of that route. Which of the many forms do you recommend?
January 2nd, 2012 at 2:32 pm
@Adam Bell, I think I might lean toward one of the current/official models. I bought one which I soldered up, for that experience, and which plugged into a breadboard (this Modern Device kit).
Maybe now I’d choose an Arduino Uno R3, possibly with some interfacing kit if you don’t have it. I like Adafruit for that. Have fun.
January 2nd, 2012 at 2:32 pm
(Good tutorials and forums at Adafruit as well.)
January 3rd, 2012 at 12:00 am
Anyone want to “code” Address Book Pro for me, or do I have to sign up for Code Year and do it myself?
January 3rd, 2012 at 3:56 pm
(@Adam, my recommendation for a “Arduino Uno R3” via the “adafruit” website is caught in moderation. The intefacing kits are good if you don’t have those parts handy.)
January 4th, 2012 at 12:14 pm
Its crazy to me that students in school will learn: math, English, physics, chemistry, biology, French, Spanish, geography, history, more math, extra math, and a final dose of math, but most will never, ever learn to use a computer–outside of using a web browser and typing an assignment.
Let alone learn to code.
January 5th, 2012 at 2:33 pm
Yeah, it really comes down to what learning to code actually means. I don’t see the world actually needing everyone to be able to sit down with a blank piece of paper and write Firefox, while at the same time the number of people whose lives are improved by being able to hack together a quick bash script is relatively limited. There’s a lot of utility in being able to make a computer dance to your tune but it’s hard to universalise.
I think if you had to point to something that people should learn it’s the systematic, finely detailed way of thinking through problems that programming gives you. You might never need to do something exotic with floating point numbers but you often need to think from A to B .