Trying to help a wannabe programmer

An acquaintance of mine (call him Adam) really wants to learn to program. He’s facing a number of roadblocks. One of them is that he has very little money, so he doesn’t have a car. Our town has no adult ed courses or university extensions, so he’s going to have to do this on his own. The lack of money also means he can’t go out and buy a brand-new computer and a set of Micro$oft programming tools.

As if that wasn’t enough, he’s got some learning disabilities, so he needs something that can walk him through step-by-step. I’ve got a lot of programming experience, but I just don’t have the time to tutor him.

So I’ve agreed to select a programming language and a learn-to-program book for Adam, and I’m coming to you for recommendations. I need a book that:

[ul]
[li]is reasonably priced (he can probably do $40, but that’s about the limit)[/li][li]either includes the SDK & compiler or uses a language that has freely-downloadable ones[/li][li]runs on an older Microsoft Windows machine (98 or SE)[/li][li]is aimed strictly at beginners with no programming knowledge at all[/li][/ul]
When I learned to program, most folks started with BASIC (it was, after all, the Beginner’s Algorithmic Symbolic Instruction Code), and I know that Visual Basic is one of the most popular languages on the planet these days. Is BASIC still the best way to get started? I looked through some of my books on Java, Perl, C++ and so forth, and Adam wouldn’t be able to make it past page 2.

Thanks, dopers!

If he really wants to learn on the cheap, first install Linux, or at least a Linux partition. Sure, Linux can be daunting, but he’ll really learn a lot, and after a good starter book on his chosen language (I’d recommend Java, then C++), ALL the required tool are FREE!

I’d recommend either perl or Python.

Okay, now the “experts” are rolling their eyes because I’ve just picked two languages that are widely considered to be diametric opposites. :dubious:

But in truth, both have virtues that make them very easy to get started with, even for a neophyte, but have powerful capabilities that makes them very useful in complex programming. (I can’t say that about the Pascal I spent countless nights in a computer lab mastering.) Both are freely available to download, and there is a wealth of information and tutorials available on the Internet (assuming that your friend has 'net access.)

The problem with Java or C++ (which are also free) is that the syntax is often so tortured that they can be confusing for a newbie. Heck, they can be confusing for an experienced programmer who isn’t “into” OOP. perl and Python lend themselves more readily to the basic programming tasks, like parsing words or manipulating data, than the more “commercial” languages.

As for books, I’m partial to the O’Reilly series for just about any language or topic. Well written, concise, easy to reference, and reasonably priced.

Just IMHO, and I don’t write code for a living anymore, so maybe someone has better suggestions.

Stranger

I’m a Perl cultist, but even I would not reccomend it as a language for beginners. Perl, (well, good Perl, anyway) really takes dedication. Python is a great (and free) language for learning, although philosophically I am opposed to beginners starting with an OOP environment.

I first learned to program, at the age of 14, from these people. They have a free online textbook (aimed at non-programmers), and a set of ActiveX and COM interfaces, when he grows skilled enough to need them.

It teaches Scheme, which has a very unusual syntax by C/Java standards. Programs tend to look something like



(define all
   (lambda (pred alist)
       (cond ((null alist) t)
             ((pred (car alist)) (all pred (cdr alist)))
             (t #f))))


…rather than the syntax that you’d find more familiar.

If he’s never programmed before and has learning disabilities, Linux is probably too much right away. We don’t think about it much, but something about computer programming changes the way that our brains work

Yes, I’m a Linux fan, but that’s definitely not the way to go here. First of all, he wouldn’t stand a ghost of a chance of doing the installation by himself, and wouldn’t know what to do with it after he did. With Windows, at least he has a little background and can navigate. Besides, he has friends familiar with Windows. If I talked him into Linux, I’d be his tech support for life.

I like Perl, too, but I have a feeling he’d do better with something that has an IDE. He’s never used a command-line system, and as much as I like Perl, you’ve got to admit it’s very opaque to non-computer people. He has no idea what a regular expression is, and no background in boolean logic. He’s starting from scratch here.

I appreciate Stranger On A Train’s comments, but we’re not talking about what’s useful in very complex programming. Again, he’s a raw beginner, and he’d be happy building simple applications to support his role-playing games and collectible card games. If he could make a program with buttons for different combinations of dice and click the button to get a roll, he’d be happy. I could show someone how to do that in a visual environment in a few minutes, but it would take all day just to explain the basic concepts behind Perl.

Ah, crap. I’m not sure where I was going with that last sentence, either. Make up something insightful and insert it there. Thanks.

I don’t want to hijack the thread, but I think this is relatively germane to the topic, so: why do you think perl is not good for beginners?

I agree that writing complex programs in perl that are readable and well-organized is difficult, but it seems to me that for more basic tasks perl is ideal, as it insulates you from niggling distinctions in variable typing and has more of a natural flow in how it is written, which is expected as Larry Wall (the creator of perl) is a linguist by training.

Python is nice, though, in that it forces you to follow a readable syntax and whitespace, something that is very easy to snarf up in perl if you’re careless. I agree that OOP is a poor way to start out with programming, and people who force their programs to be object-oriented where it’s not useful make life much harder for everyone.

Stranger

I’ll second what Taran recommended. Let him get the hang of formal algorithmic thinking.

Ah, I see. You’re looking for more of a scripting/toolkit type application, not, um, development programming per se. Well, in that case I agree–perl is really going to suck for that. Sorry–I still think of learning to program from “back in the day” when we didn’t have graphical interfaces or GDE toolkits. We had to peek and poke every pixel by hand, and you only got to do that once you proved yourself by entering box after box of punchcards into the [ab]user interface. :wink:

Well, I’m told that AppleScript is quite nice, but since he’s on a PC that’s not an option. Visual Basic is, in my experience, a real cluster to manage, as the syntax isn’t terribly consistant between different commands. On the other hand, if he has Microsoft Office, VBA is bundled in there as the macro environment, and I’ve written some fairly elaborate forms and applications in VBA for Excel. (It still makes me shudder, though.)

In college, for a job I used to script in Asymetrix ToolBook, which was a really easy to use environment. It was kind of half-way between a very powerful presentation app and a mediocre development environment. But it disappeared along with 16 bit Windows.

I have to concur on Linux, too. Although some of the distros are becoming very friendly to install, there are still irritating hardware incompatibilites that pop up all the time and it’s a whole 'nother thing to adapt to. Don’t bite off more than you can chew.

Stranger

Sheesh, people. Perl? Linux? For a beginner who has a learning disability? Slow down, guys, programming is a hell of a lot harder for someone who is not computer savvy.

If I were you, I’d have your friend buy used copy of Visual Basic. One that’s a few versions old is fine, and usually inexpensive on eBay. You can do a LOT in VB simply using point & click, and it’s a great way to dip your feet into the harder stuff once you master the easy stuff.

Another idea would be MS Access. You can do program-y type stuff with it, but it also has a nice IDE. Hell, maybe even just get him writing macros for Word or Excel. Visual Basic for Applications is full on BASIC, and he probably already has those on his computer.

Check out the “For Dummies” books. Contrary to the advice given earlier, I’d stay away from the O’Reilly books. They’re not at all aimed at beginners.

      • I know of one good Java programming book for beginners: Java Programming the Easy Way by Douglas Downing, Amazon shows it for $18.95 right now. It is old (original printing was in 1999) but it only uses the Sun JDK (it came with a CD but the new one is free/downloadable, if the CD is outdated) and if you think a CLI program is too much here, he can download a free-version GUI front-end onto that such as JCreator or Netbeans.
  • The book teaches how to do one simple thing per chapter like open windows, use button and textbox controls, read from and write to files, draw pictures, display images, play sounds, etc. I recommend it every time someone asks, because it’s really the only “total-beginner” Java programming book I ever found. If someone knows nothing about programming, they can use this book–although it utilizes the Sun CLI program in its instructions. A GUI front-end on the JDK makes it even easier to use.

  • The only hangup I had with Java was trying to make the constraint-based layout managers look nice: I couldn’t ever figure out how to do it. So I always used the “literal” layout manager, it’s one that allows you to specify the X-Y coordintes of the upper-left and lower-right corners of all the GUI elements, and from then on putting buttons and stuff where you want them is a snap. It’s not quite as easy as VB drag&drop, but it isn’t much worse.
    ~

Borland Delphi is what you want. It’s Pascal based so it’s pretty easy to pick up, and it uses a GUI designer for making GUI apps in like VB. I’m pretty sure Borland have a free version on their website (Community Edition, or some such).

There’s also reams of tutorials on the net both for Delphi itself and Pascal.

I forget the name of it, But I have a book on Java programming that is very good. It teaches you not just what to do but why. I never use it, and it may even have a CD. If someone is willing to pay for shipping, it’s his (I’m in Houston).
I think it’s called “The Big Book of Java” or something equally simple sounding.

BASIC is the best way to go, I think. Perl people talk a lot about how it’s built around natural language, but that is bullshit from anything but a technical standpoint.

An SDK is unecessary. Get him a programmer editor and a one of the numerous free BASIC interpreters/compilers.

If you did go with Perl, just get the “Learning Perl” book from O’Reilly. It’s perfect for this.

Besides the above choices, DarkBasic might be another, slightly more expensive, option, especially if he’s interested in games.

Good point, Athena–maybe I need to start him off with a scripting language just to get his feet wet with the concept of giving structured commands to a computer. I’ll see if he has the Microsoft Office suite on his system, and maybe we can find him a book on scripting. You can actually do quite a bit with Word, and it would give him the fundamentals he’d need to go farther if it holds his interest.

I like Delphi, +MDI. I wrote a lot of code with it back in the mid-90s. Has it changed much since then? It seemed very natural to me, but maybe that’s because Pascal was one of the first languages I learned–the first that I actually got formal instruction in. I don’t know how natural it would feel for a rank beginner, though.

I’m not sure what you mean about an SDK, ninetypercent. Did you mean IDE? The reason I suggested an IDE (interactive development environment) was to allow him to actually build something quickly. Remember, he’s developmentally disabled. He’s 30 years old and works as a dishwasher because that’s the only job he’s qualified for. He doesn’t know the difference between the Internet and the Web, and I have to agree with you that teaching him Perl would just be hopeless.

I appreciate the offer, WhiteyFoo. Does the book have any development tools on the CD? My hesitation with Java is that every book I read on it (granted, I haven’t looked at one in five years) was written for people who already knew how to program, not for someone who was trying to learn fundamental concepts like “what’s a variable.”

Athena is on the money. Visual Basic is what you want. It doesn’t have to be the latest; you can pick up a copy cheap at a computer surplus store or on ebay.

Given the profile of our friend, what he really needs is to build basic guis and put assorted functionality behind them. Backend stuff and command line stuff isn’t for him today.

I’d recommend (in this order):

MS Access 97
Why 97? - it has a very straightforward interface and the linkage between the database and the VBA editing environment is very tight - MS moved towards a dual presentation of [DB] + [separate VB editor] from Office 2000 onwards. Why Access at all? - it’s a good way to learn about visual development tools, SQL (albeit non-standard), events, Objects, etc.

Delphi
Why? You can do quite a lot with it - and in some cases more easily than with VB; the integration of additional components and ActiveX objects (or whatever they call them now) is more seamless in Delphi than it is in its contemporary versions of VB. OK, it’s Pascal, not BASIC as a programming language, but to be honest, there isn’t a whole lot of difference, and getting used to the most significant differences (code blocks, strong types) is not a bad way to learn the coding disciplines necessary to master ‘grown up’ languages like C++ and Java.

Get him a book on x86 ASM. Then he’ll really know programming! :stuck_out_tongue:

I would highly suggest something similar in syntax/semantics to the “big” languages - C++/Java/etc. This way, it’s not too difficult to springboard off into another “big” language if he so decides.

I would also suggest something visual. It always gets me excited to see something happen on the screen, even if it’s just a circle moving around. I made that circle… !

Last, I would suggest something that’s not too strict to begin with, and that has a fairly “natural” feel to it. So, reluctant as I am to endorse it, I’ll have to go with Visual Basic as well. It’s not too far away from C++/Java. You may be able to find a few programming guides that come with an included “student edition” CD… I think…

If not, keep in mind that Java is free, and there are a glut of C/C++ compilers out there for most any platform.

And although I agree on a theoretical level, I’ll have to disagree with Taran … as illustrative, say, LISP would be, it hurts!