re: META: Recommendations for a 13 year old transhumanist

From: Jeffrey Fabijanic (jeff@primordialsoft.com)
Date: Mon May 10 1999 - 07:44:22 MDT


>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.



This archive was generated by hypermail 2.1.5 : Fri Nov 01 2002 - 15:03:42 MST