re: META: Recommendations for a 13 year old transhumanist

Jeffrey Fabijanic (jeff@primordialsoft.com)
Mon, 10 May 1999 09:44:22 -0400

>Hi list. My name is Chandra Patel
...
>I'm also interested in sharpening my programming skills which have been
>isolated mainly to BASIC and QBASIC at this point. What computer languages
>are best for beginning my trek toward Coding Deity status? There seem to be
>lots of options and my teachers and friends have no ideas about where to
>start.

Chandra, you have *no* idea what a hornet's nest you probably just stirred up! Nothing gets the juices (and blood) flowing like asking a bunch of nerds their opinions about computers! It's our own little version of religious wars.

Of course, having said that, I will now proceed to blather on and on about my own (admittedly biased) views on the subject...

BASIC's wasn't a bad place to start since it will start to teach you about logic and some of the core concepts of programming. If you wanted to get work programming *today*, you'd be best off learning C or C++. And there are a lot of good introductory primers out there for these languages. Unfortunately, I feel like advising you to concentrate on C/C++ is somewhat akin to giving someone advice in the early 70s to study COBOL as preparation for a future coding career in the 90s. Believe me, there's not too many people out there writing new programs in *that* language. C/C++ are showing their age now, and I doubt that there will be many new apps being coded with those languages by the time you graduate from college.

If you want to learn about the kind of coding that will be important when you reach adulthood, you probably want to spend some time learning about *object-oriented programming* (sometimes called "OOP"), and spend less time on *procedural programming* languages, like the ones mentioned above.

[Just by way of a very quick explanation of the difference between procedural and OOP languages -> When you write a program in a procedural language like BASIC, it is a lot like writing a recipe - "First do this bit, then do this, then add this and see if you need that and then stick it in the oven for this long." Object-oriented programs are a bit more like building something with Legos or Tinkertoys - you describe the basic pieces ("Here's a cog, here's a shaft"), how they can be modified ("Shafts can be long or short, and have sqaure or round ends"), and how they fit together ("Cogs can fit on the ends of a shaft this way or that way"). Just like Legos, once you have the pieces of an OOP program, you can reuse them to build bigger/better versions of your program or even entirely different programs. Once you're good, and have a nice "library" of objects, you save a *lot* of time, and write really powerful applications.]

Check out a couple books on Scheme or ObjectiveC ("ObjC") (the MIT Press is a good place to check). These are both highly regarded object-oriented programming languages - Scheme is based somewhat on the classic Lisp language and is used primarily as a teaching language (at MIT and elsewhere) to demonstrate basic concepts and techniques; ObjC is based on C (which, admittedly, is probably still the most commonly used computer language today). ObjC is also used in many real-world systems and applications today. (Btw, some people will try to convince you that C++ is object-oriented too - don't believe them. It has some OO concepts hacked into it, but it's not clean or consistent - a bit of a Frankenstien's monster of a programming language - arguably powerful, but hard to control and understand completely). You'll probably have to learn how to at least read C++ code, since it's so popular today, but I wouldn't waste any more time with it than necessary.

A couple people mentioned Java. Anyone who thinks Java is well-written has bought the hype. You can certainly have a lot of fun with it, but there's precious little technical evidence that it's going to be a major programming language ten years from now. That'll grease a lot of people on this list, I'm sure, but it's the truth as I see it from here.

XML isn't a programming language at all, but is rather a method of formatting infomation so that it can be interpreted easily by viewing applications. Similar to the way we have standard ways of formating bibliographical info, for instance, regardless of what language is being used (eg quotes around the titles of magazine articles, bold book titles, and having the author, pub date etc in a standard order). XML is a standarized way of saying "OK, this is the type of info here in this document, and this is how it'll be laid out". Not a bad thing to learn (just like learning to read a bibliography is useful if you want to do deeper research), but not really "coding".

As for platforms, someone mentioned BeOS. It certainly is well-designed and fun to write for (and here at Primordial, we're *big* fans of Jean-Louis Gassée, - the head honcho at Be (we met him several times when he was at Apple)). But it's a *really* niche platform right now, and mostly suited to multimedia applications. Wait a little while to see if they can make a go of it in the marketplace before committing too much time to it.

Ironically, we've found that the Mac platform is the most versatile right now, in terms of how many languages and how many *other* platforms you can write code for. There is a product called CodeWarrior (made by Metrowerks) that allows you to develop applications using a number of programming languages and for Macs, PCs, Unix/Linux boxes, Game machines, Pilots and other handhelds. It's our development environment of choice here at Primordial Software. Students (like yourself) can the basic version (which is available for Macs or Windows) either free/cheap.

Oh yeah - my background. I'm a founding partner and the lead designer for Primordial Software in Boston. We're a software development house specializing in mobile and ubiquitous computing solutions for industry and retail. Mobile = handhelds like the Palm Pilot, Ubiquitous = "everywhere", like intelligent houses, cars, and factories that can understand commands which are spoken or gestured. We have lots of ties to the folks at the Media Lab at MIT.

Between everyone here we're probably fluent in about 3 or 4 dozen programming langauages. The operating systems we use include BeOS, Unix (of various sorts), Linux, Open/NeXTStep (an oldie but a goodie), Windows (again, of various sorts - 95/98/NT), Macs (both the regular MacOS and the new MacOSX, which is really a combination of Unix,NeXT, and Mac - the next big thing, I suspect) and *lots* of various mobile/handheld device OSes like PalmOS, WinCE, EPOC32 and a dozen others no ones ever heard of ;P

We're also designing our own new handheld platform. We got tired of waiting for someone to do it right, and we want our tricorders *NOW*!

Whew! Anyway, I'm sure you'll get as many different answers to your question as there are people here on the list who will answer it. Don't let it overwhelm you and remember that the specific choices you make about what programming languages to learn will matter *MUCH LESS* than the energy and excitement you bring to any project. That's not just grownup blather - I've really found that to be the case.

Also, at 13, keep your eyes open for what really jazzes you - computers are pretty key (says the guys who makes his living programming ;) but there's a huge world out there. Keep your options open.

|    Jeffrey Fabijanic, Designer         The Future exists,
|        Primordial Software               first in Imagination,
|   "Software of the First Order"            then in Will,
|    Boston, MA  * (617) 983-1369              and finally in Reality.