Saturday, August 13, 2005

My Hate Affair


Every few weeks
or so I tinker with programming.

Right now I've got Bloodshed Dev-C++ and Visual C++ Express Edition Beta 2 on my computer.

Plus a few different SDKs -- the one for Java 2, Microsoft Speech, HL2 -- and the Cg Toolkit.

But - I hate admitting this - I just don't get it. I never have. I've been metaphorically glued to a computer monitor (and the internet) for at least ten years now, three-fifths of my life easily, and I've never been able to program more than some text output and a loop or two.

I've tried analyzing exactly where the blockage sits - where that hurdle squats, preventing me from understanding more than the individual components.

Slogging back through the same tutorials I encounter every time I get it in my head that programming isn't impossible, I think I spot some of my difficulty.

There is a noticeable gap
between the general concepts and mixing them together in an application.

Almost every one of the "Learn How to Program Now, Stupid!" books I've bought follows a certain format:

1. Install IDE. Teach basic IDE concepts.

2. Basics of programming. Variables, loops, functions, that sort of thing.

3. Beginning program.

4. Adding to program until it becomes impossibly complex.

This doesn't seem bad, in theory. Work from general principles, apply to specific examples, extend those examples.

Except that's not quite what I need.

I need the core concepts to be constantly re-iterated, re-applied and altered. I need to see eighty different implementations of a WHILE loop. I need to be reminded over and over again what kind of information the different variables can hold. I need to have everything beaten into my brain until I can spot all the separate pieces of a function at a glance.

I've never seen a good explanation of namespace. Or what it means to have a program return different values.

The expectation seems to be that a person will learn the basics and store them in a mental toolbox. But my mind demands that I see how those tools are used for different jobs before they become useful to me.

My problem with programming books is the steep pricing. Fifty bucks seems to be standard, more if there's a disk or if it's particularly thick or an official reference. The beginner's books, then, are a gamble - will you actually learn anything? Then you have the books that use outdated software examples or are filled with shoddy, non-working code.

Some of the books I've browsed seem to be getting better. I think a lot of current programmers are more aware that their audience is no longer overwhelmingly composed of people that already program.

An idea which just flashed into my head: You have a perforated card in the front of your book which lists all the programming basics and assigns them a color-coded symbol. Then, all throughout the book, every example of code is marked with those symbols, to show dumbasses like me exactly where the basics occur. This might actually be a good project to do myself with some of the books I already own; Assuming I can sort out exactly what every particular stretch of code is doing.

Anyway, just thought I'd share the insight into my own frustrations.

Now to see if it will help me jump over that hurdle.

1 comment:

Anonymous said...

Once you've learned looping and if statements, by far the best way to learn a language is to drop the book and start a project. Don't pay too much attention to wondering why a feature exists. You'll find out soon enough why a language needs namespaces once you start writing lots of functions and start using functions other people have written (answer: name clashes). Be realistic, you're not going to write a MMORPG first time around. A tetris clone or a text adventure game is more than enough challenge for a beginning programmer. Setting up an impossible goal is only going to demotivate you. Better to finish 3 small throwaway projects than to abandon one ambitious project.

On another note, I reccommend dropping Java and C++. Both these languages just throw too many things at you at once, things you normally won't care about (objects, memory management, static typing). If you just want to get shit done, pick up a scripting language like Python or Ruby. Both of these can be interfaced with SDL or OpenGL so you can branch into game programming if you want.