Advocacy

  Myths
  Press

Dojo (HowTo)

  General
  Hack
  Hardware
  Interface
  Software

Reference

  Standards
  People
  Forensics

Markets

  Web

Museum

  CodeNames
  Easter Eggs
  History
  Innovation
  Sightings

News

  Opinion

Other

  Martial Arts
  ITIL
  Thought


Starting Programming
Where do you start?

By:David K. Every
©Copyright 1999


Many people are asking me how to begin programming (where do they start). Well, I started 20 years ago, when computers (and languages) were simpler than they are today, so I'm a little out of touch on how to start over (today).

The Books I read are not "Intro" books,. I have a lot of knowledge that makes it hard for me to look at a computer book and see it through the eyes of a novice, and there are hundreds of books out there for beginners. So I'm not even going to try to recommend which books, but I do recommend that you read. Pick books that are not only relevant, but as easy to read as possible (fun) -- that'll help (you can hit the heavier books later).

I can give some general directions though, about how to learn if you want to do programming. These are all assuming no experience, and no hurry. You can skip steps, or jump into what will interest you most. Just have fun, and do what you enjoy. If one type (area) is frustrating you, don't be afraid to try a different type of programming and see if it hold more interest to you. School, trainings and classes work for some -- but this is assuming that you don't have time or access (or the personality).

Scripting

Scripting is a whole set of languages, and can be done for many different things. Scripting can also be one of the easiest types of programming. It is also a quick way to get productive doing some basic programming. (I believe that people get the most out of something when they are able to see the results of their work). Many of the concepts learned doing scripting can later be applied to other computer languages, so it is not like scripting is wasted effort (knowledge). This is a great way to start, and introduce yourself to programming and many of its concepts.

Shell Scripting

Some environments like DOS or Unix have programming/scripting shells built in. These can allow users to automate file management functions, like searching, moving, copying or deleting files, and do some simple applications as well.

Mac users are not completely out in the cold -- they can add DOS emulators to emulate an entire IBM Compatible PC's (and DOS's built in scripting), or just use scripting emulators (that do only the scripting part of DOS on a Mac). Mac users can also put a Unix on their machine (and play with the whole OS) or emulate one of the Unix scripting environments (like CShell, or Perl). There is also MPW (Mac Programming Workshop) which has a really rich, but rather unique, scripting environment built in.

Any of these are OK, but they can get as hairy and complicated as other computer languages. Shell scripting is getting a little off course in that it is often pretty specialized, but there are a lot of possibilities for those that have interest.

AppleScript is a funky hybrid, but really powerful. It is shell scripting and Application Scripting in one, and can be extended with 3rd party utilities. This is probably a good way to start, and there are many books to start from (that are tailored towards beginners).

System Scripting is a good start using AppleScript, Frontier, or one of the Macro Package. Any of these will allow users to script an individual application (to automate a function), or you can even write scripts that run across multiple apps (and work with many Apps together to automate functions). Either way you can really increase productivity by automating a few things -- and learn programming concepts along the way. Plus, AppleScipt is free with the OS. Scripting can be really nifty for power users, and many offices have saved a fortune by automating things with AppleScript.

There are also many Application specific scripting systems. Microsoft Office Apps have their own proprietary scripting environment, as do other Applications. This gives you the ability to automate many Application functions, and can be a real boost to productivity. If you run a small business, or work in a large one, either of these can be a great way to learn and get something of value. These are a little more proprietary -- but again, you can learn some programming concepts while getting more productivity out of your machine.

MacroMedia Directors' Lingo Scripting is great for doing Multimedia like demonstrations, as is HyperCard (or SuperCard). You can make some pretty neat Applications using these environments . These environments are most tailored towards graphics and multimedia, but they can be extended to do more. Many have done adventure games, Database front ends, simple utilities and some small Applications or even serious product prototyping with these products. If you have interest in multimedia or games (though stick towards thinking games, or move oriented games, and not arcade type shoot-em-ups), then these are a perfect start.

But careful not to go too far with any scripting environment -- if you try to create the next killer App with these environments, you run into their limitations, and can spend more time trying to get around those limitations than if you just chose a better tool for the job.

So scripting is a great intro into programming concepts. Consider it as a way to get your feet wet. In many ways these environments are easier to learn, but in some ways they are as complex (and not as feature rich) as other development environments. After a couple of months (to a year or two) of scripting, people are often very familiar with scripting, and many get hungry to go on. Others are quite happy just automating the heck out of everything they have with scripting -- that is fine too. There are people that can become configuration guru's, and really help companies as consultants, just setting up scripts and automating things. But if you are hungry to go on, there is still a long way to go.

Database Programming

Another way to start programming (and familiarize yourself with the concepts) is Database programming -- if you have any interest in Databases. Databases often have their own scripting environments or languages that are pretty powerful. Whole solutions can be created in them. If you can think of things you need your database to do, there is a good chance that there is a database environment that will allow you to program it. On the low-end there are products like Claris FileMaker -- which is a really nice tool. And on the high-end there are products like ACIUS 4th Dimension. (Of course there are many other good products that I am not mentioning). From these you can really get good at making powerful solutions using their environments.

Database Programming is not a requirement to becoming a programmer, and is somewhat of a specialty. But many of the concepts you learn making and managing a database program will be great experience for later on. But if it doesn't interest you, then skip it. If it does interest you, there are careers in it. Many people are happy being Database Programmers, and they can be very productive (relative to other programmers).

Visual Programming and 4GL

PowerBuilder, ProGraph, VisualBasic (1), and some other "Visual" programming environments all fit in this category. Many of these environments advertise themselves as "4GL" or 4th Generation Languages, as compared to other languages which are considered "3rd Generation" -- but this is a little bit a misnomer, they are just a different path to a solution, that is sometimes better, and sometimes worse. So bigger does not mean better, but certainly better for some things. Some 4GL's are very complex (and powerful), all requiring very little code creation as compared to IDE's (2).

(1) I am being really generous to VisualBasic by putting it in this category -- it is really half way between a full Visual Environment and scripting, and HyperCard is almost as powerful as VisualBasic. So VB is more the worst of this category, and HyperCard is one of the best in it's category -- but you get the point. Both can be great learning tools and create solutions.

(2) Beware: some environments call themselves "Visual" like Visual C++, Visual Cafe and others -- but they are not really the same thing. The real "Visual" environments are where you can do graphical programming linking objects (and sometimes commands) using very little code. Visual C++ and Visual Cafe both require far more understanding of programming than the Visual Programming I am discussing (but they sometimes better than older programming environments which are even less was visual).

These Visual Programming Environments can be very powerful for businesses, and there are even a few commercial Applications shipped using them. Don't count them out -- they can be a great step to get more familiarity with concepts without having to dive in fully. They often require you to write no code, or little code -- and you can often extend them with traditional code Plug-Ins. They can be very expensive though, because they are real environments that can save companies lots of money. Smalltalk Objects is a whole language, development System and environment all in one (really powerful stuff). So there are many options. Unfortunately there are so many options, and they are changing all the time, and the requirements vary so much, that I can't recommend one over the other -- it really matters what you are doing. Companies now days often have trial versions, or money back guarantees, and I recommend you go to news groups that are talking about varying products to see what users of each environment think (and are complaining about).

The catch with these environments is that you learn some programming concepts -- but you can often avoid direct programming (or do very little), while achieving the same results. So in some ways, these environments are a way to avoid programming (or programming as little as possible). If the ends is to create Applications and Functionality, then you will be happy. If your ends is to really learn the in's and out's of programming, then these environments are going to shelter you a little. They are a nice way to get into the water slowly -- but they are not exactly full immersion (depending on the environment).

IDE's

IDE means Integrated Development Environment -- and they are the tool that most commercial Application developers write programs. Most commercial developers snub the easier to use tools (Visual and 4GL tools), but this is more out of arrogance than anything else -- I say use the easiest tool possible (for the job at hand), don't try to show off just because you can. Well, back to the point -- if you are becoming a professional programmer, it is usually required experience to know an IDE. Furthermore, language choice will also be important (and influences the IDE).

C / C++ / Pascal / Assembler

CodeWarrior is a great IDE (on Mac or Windows) that allows you to work in many languages (Pascal, C, C++, Java, and even dabble in Assembler). If you want to do anything other than Java development, then this is the choice. For Java development, it is okay, and a good way to learn some basics -- but there are better environments.

If you want to learn C++, the trick is not just learning the language, but often a Framework as well. PowerPlant and MacApp are both great Frameworks that work under CodeWarrior. Both can be a little daunting, and have quite a frustration factor before you get over the hump. Just find as many tutorials and tear apart as much sample code as you can -- after a while a light goes on and you "get it". There are lighter Frameworks out there for just doing the basics. If you go for MacApp, you have a heavier framework and can hide yourself from the Mac toolbox a bit more. If you go for PowerPlant then you are going to have to learn the toolbox and more Mac'isms along the way.

If you have a PC, then VisualC++ is not that bad. I prefer CodeWarrior (which is also available on PC's), but VC++ is usable. Unfortunately on the PC, the Framework you must use is MFC -- which is a kind of stinky Framework. It works, but it is quirky (the messaging scheme is ugly).

The way to get CodeWarrior, especially if you are just starting out, is to buy a good tutorial book on learning the language that interest you -- and many COME with a CodeWarrior lite version (if they are for the Mac). Metrowerks also has educational discounts, and I think some other deals. You probably don't need to jump into a "Pro" version, until you are getting ready to ship a commercial product. So visit the Metrowerks site, and see what they have, and don't be afraid to ask questions -- they are a pretty cool company.

Java

Go Java! It takes years to get really good at programming.

  • C is dying out (for all but low-level driver stuff).
  • C++ is the successor, but is an ugly language. It is confusing, cryptic, but it is what is hot today. Application programmers will probably continue using C++ for the next 5 years or so, but I think we are seeing the beginning of the end of C++.
  • Java is going to slowly start replacing C++, and in two or so years will probably be pretty hot. So predicting the market, and learning Java now, is probably a good bet (Java is nibbling into some markets already).
  • Java has a better Syntax (but uses most of the same basics) and a richer library (Framework) than C++, and is cross platform.
  • Java also allows people to start out easy, with some simple Applet development, and slowly migrate into full Application development.

For all those reasons, I tell new programmers to learn Java (instead of C or C++).

Which Java environment to buy?

Some books will come with a Java environment. So if you find an interesting book, and it comes with an IDE, then go for it. It is a nice inexpensive way to get going. In a year the entire playing field will be different, so don't bet too hard on one solution.

CodeWarrior is great for an IDE, but there are more people designing "visual" like tools for Java. Symantec's Visual Cafe is not bad (and in many ways is superior to CodeWarrior) -- but some of the results may be a bit more "proprietary" (they will run on any platform, but may take work to port to another IDE). The product I am really impressed with is IBM's Visual Age for Java. VA-Java, is a very rich Smalltalk like dynamic environment (for those that know what that is like) that uses Java, and allows you to do a lot of "visual" programming. The bad news is that it doesn't run on a Mac (nor is it likely to in the future). It is also a pig-dog (big, and slow).

YellowBox / Rhapsody

One solution that is coming down the pike, and may give IBM's Visual Age a serious run for its money in the Java arena, is Apple's YellowBox (Rhapsody). In many ways Visual Age is ahead (RAD -- Rapid-Application Development), but YellowBox still has a richer, native Framework, that makes it very powerful and superior solution in many other ways.

YellowBox is going to be tailored to work with Java, and will probably be one of the best-of-category tools. But you still have a few months to wait (at least), and probably more before everything gets "polished". So I'd start with another Java tool for now (like CodeWarrior), and learn the syntax, and know that YellowBox is coming.

If you really want to do Application Development, NOW, that is cross platform, and you think that you'll be ready to release something in less than a year, then YellowBox is probably a better way to go than Java. But you are going to have to become a registered Apple Developer (call Developer Relations) and get on the seed list, and get into Rhapsody Developers Release or Premier and start going for it. It is a great environment, a powerful framework(s) and ObjectiveC is cleaner than C++ in many ways -- but this is more a path I'd recommend if you already have some programming experience (rather than a newbie).

Conclusion

Start hitting the books, and learning.There is no substitute for doing. Tutorial books are great for beginners (they take you through all the steps of writing a program, and why you do things the way you do). Then give yourself very simple projects for yourself at the start -- and just start doing. Start sniffing out the developer sites that have lots of source code, samples and snippets (small pieces of code), and start looking at how things are done -- and use the time honored tradition of borrowing code to add functionality to your programs (but figure out why things are being done the way they are). When you run into road blocks, hit the news groups on programming in that language / environment and ask questions -- programmers are usually pretty helpful (they all want to show how much they know). But have fun. Pick tasks that you want to do, and a language that interest you. You can jump straight to C++ and a Framework, it just a little harder that taking the other steps first. Programming is enjoyable, and can be very rewarding -- so stop thinking about it, and waiting -- get out there and start doing.

.


Created: 01/19/97
Updated: 11/09/02


Top of page

Top of Section

Home