Tuesday, November 21, 2006

Learning to Write Software

I was first exposed to personal computers when I was in the 2nd grade (sometime around 1986). I still remember the computer lab vividly -- a room lit subtly by the monochrome glow of tiny, low resolution monitors. The machines were Apple IIe's running Terrapin Logo. As I reflect now, I realize there must be something deep within me that draws me to this technology, because I instantly "got it" and fell in love. I begged my parents to get me a computer for my birthday, and I can still picture my father bringing home the Apple IIc on September 22nd, 1987.



One of the great things about these Apples was that they had a built-in BASIC interpreter. (BASIC, or the Beginner's All-purpose Symbolic Instruction Code, is a simple, high-level programming language.) What this means is that an 8 year old with neither software nor documentation can program a computer (wow, right?). A friend of mine from school had some experience with BASIC and taught me a few commands, and the rest I literally learned by hours and hours of experimentation in front of that screen... a true labor of love, I suppose, and probably the reason I don't tan well today. By the way, my one regret is that I never thought to ask for a BASIC manual, which I think would have accelerated my learning on the order of years. Whatever... I was just a runt.

As time went on, personal computers became faster and more capable, and the software they ran became more layered and complex. Today there are so many development environments to choose from, and documentation is widely available on the web, but how is a novice to begin to unravel the complexities of APIs, DLLs, SDKs, IDEs, the wealth of programming languages available and the learning curves that each brings? I've heard this problem referred to as "The Little Coder's Predicament", and I first came across a good discussion of it here.

I know a lot of people who've expressed curiosity in writing software, but -- needless to say -- they're intimidated by the process. (As a sidenote, this means that people who consider themselves tech-savvy but don't write code regard us with a certain awe, which is neat.) I wish I could show them that it's really not that difficult, and that it can be extraordinarily rewarding to do. Imagine -- you have virtually unlimited resources at your disposal (most computers today have greater than 1 billion bytes of RAM and more than 100 billion bytes of hard disk storage -- and even saying that will probably date this post immediately). You can create almost any piece of software that you can dream up. It's like having infinite clean slates.

So, what would help a beginning programmer (at any age) be productive and have fun? I'll take a stab at it:
  1. Free development tools that allow you to be productive without requiring tedious effort or excessive learning beforehand
  2. Guidance -- lessons, examples, and practice problems
  3. Personal support -- real-time or otherwise
  4. (later) Good references and/or manuals

Microsoft recently released so called "express" (that is, feature-reduced and no-cost) versions of their excellent development environments. They position Visual Basic 2005, Express Edition as "Productivity that is ideal for first time or casual Windows programming." In my opinion, it easily fulfills the first requirement above; the language is easy to learn, the environment is relatively easy to use, and you can be productive quickly (drag-and-drop to create graphical applications, for example).

It appears they've done a great job in helping users get started, too. They have 16 lessons in the "Absolute Beginner’s Video Series" alone! Then there are the forums, and webcasts, and endless other resources that you'll find with a Google search.

Microsoft's motivation in softening the learning curve for new developers is likely to ensure the continued tightening of its hold on the personal computer market; more people developing for Windows means more Windows software, which in turn means more of a reason for end-users to stick with Windows. Regardless, I am impressed and excited to see such a great opportunity for people to discover programming. And besides, the lessons a new developer will learn from Microsoft's tools and training will set the groundwork for creating software on any platform. I want to have a hand in this business of making programming more accessible. If you read this and have questions, or doubts, or resistance, please write a chat client and send me a message (or just send me an email).

1 comment:

Anthony Gold said...

Have you ever tried to teach someone how to do “recursive thinking”? My first (and probably last) experience at such a futile effort was teaching my at-the-time girlfriend how to write a BASIC program for a $1 cash register. The task was to write a program that computed the change for any item that cost one dollar or less and was paid for with $1. And, the change had to be delivered to the “customer” using the fewest number of coins. That may have been my first lesson in attempting to debate with someone who is not strong in deductive reasoning. Thanks for evoking such fond memories :-).