People are always asking me this question, "What programming language
should I learn?" Sometimes I hear this from computing professionals who
want to expand their skillset by learning a programming language. Other
times, I am being asked by a new computer science student who is wondering
what programming classes to enroll in. Of course, the answer really
depends on who is asking and how they want to use their programming
skills.
Different languages are good for different things, and there are several
factors that control this. Some languages are well suited to certain kinds
of tasks or ways thinking. Other languages produce programs that run fast.
Some languages can produce programs that run on a variety of platforms. Today
there are languages for a variety of applications on the World Wide Web.
Professional Programmers
Most serious programmers know at least a few languages. They should choose
languages for which there is high demand in the employment market. But for
their first language, it is critical that they learn the concepts of
programming. A language which has specific, difficult nuances can distract
a student from the more universally important things they must learn.
There was a language invented specifically for the purpose of teaching
programming: Pascal. It is a clean, vanilla language that lacks most
of the confusing idiosyncracies found in many other languages. An instructor
can teach all of the concepts of procedural languages and structured
programming. A student can learn the general concepts of programming without
stumbling over the difficult issues inherent in more specialized
languages.
Pacal's strength is also its weakness. By avoiding spectacular
capabilities, the language is not particularly strong for any given purpose
(other than learning). When presented with any problem, I have always found
that there is another language out there which is better suited to the
challenge than Pascal. This means that, if Pascal is the first of several
languages that you will learn, you will have spent time learning a language
you won't use.
On the other hand, there is nothing to stop you from using Pascal for
actual applications. During the eighties, it was quite common to come
across a program that had been written in Pascal. People wrote programs in
Pascal because they knew Pascal. That phenomenon has diminished since the
advent of Microsoft Windows, but Pascal compilers still exist for many
platforms, including Unix/Linux.
Standard Pascal is not object oriented. Object Oriented Programming (OOP)
is a method of programming as well as thinking about your program. OOP came
into its own during the nineties in large part due to the fact that it is
well suited to graphical windowing applications. It is possible to use the
concepts of OOP in a language that has no object oriented features, but it is
usually more tedious to do so. Borland did add object oriented features to
their Pascal compiler, but most implementations of Pascal still do not do
this.
This is a disadvantage to someone learning to program. Today, a programmer
is severely limited if he or she does not understand the concepts of object
oriented programming. Most modern languages involve object oriented concepts.
A programmer must learn OOP, but learning Pascal will not give them this
knowledge, and they must learn OOP afterwards.
System Administrators
It is my belief that the most effective system administrators are also
programmers (maybe that's because I'm a programmer). Many of the problems
facing an administrator would be easy to solve if a simple program existed
to perform some task. A programmer solves the problem by writing a program.
A non-programmer tries to find some other program that can be made (no matter
how difficult and ugly) to work around the problem.
For system administration, it is probably most productive to learn some
kind of scripting language. On Unix/Linux there are shell scripts. Perl is
predominantly for Unix/Linux, but it is also available for Microsoft Windows.
MS Windows can also make use of VBScript. These are often not thought of
as programming languages (Perl is downright nasty), but they fit a useful
role for system administrators and provide most of the control a real
programming language provides.
Administators of systems for which a lot of open source software exists
(namely Unix and Linux) often find themselves compiling programs from source
code. In many cases, there is a minor problem with the compilation process,
and the administrator needs to fix it. Being unfamiliar with the language
that the program is written in makes it very difficult to handle these little
problems. Most open source software for Unix/Linux is written in C.
Knowing C is also very helpful in understanding Unix. The C programming
language was invented so that Unix could be written in it. I was once told,
"If you know C, you know Unix." This is because they are so complementary.
C and Unix grew up at the same time, at the hands of the same developers. A
serious Unix or Linux system administrator should eventually learn C.
Web Developers
To paraphrase one of my favorite authors (Douglas Adams), the World Wide
Web has become the whole of the computer industry. Countless technologies
have sprung up around the Web, and many of those are programming languages.
Some of them run on web servers, others run on web browsers. In today's
computer industry, it is foolish to not be thinking about learning some of
these technologies.
On web servers, there is PHP, ASP (with JavaScript and VBScript), JSP
(Java Server Pages), Cold Fusion, and dozens of other things. These languages
can all be used to control the information available on web servers. My
personal favorite is PHP. It is simple, flexible, and powerful, and has a
syntax similar to C. PHP is also open source, and runs on Unix, Linux, and
MS Windows web servers.
On web browsers, there is JavaScript, Java, ActionScript (part of Shockwave
Flash), as well as several proprietary Microsoft solutions (such as C# and VB
.NET). These languages can be used to control the user's experience, how
information is presented and manipulated. Each of these languages play a
different role on the browser, and your choice really depends on what you are
trying to accomplish.
It is worth noting that Java has a wide variety of uses. Java first gained
acceptance on the browser in the form of Java Applets. Java can also be used
for full-fledged applications on the workstation. Java now enjoys quite a
bit of popularity on web servers, running JSP (Java Server Pages) or Java
Servlets. Because of Java's strengths, it is starting to become a popular
langauge for non-Internet applications as well. Java is a clean, formal,
object oriented language, derived from C++ and refined. Java programs can
be run on nearly every platform in existance, including MacOS and even
PalmOS.
I would also like to say that HTML is not a programming language. The 'L'
in HTML stands for "language", but you cannot use HTML to write programs.
Don't think you are learning to program if you learn HTML. On the other hand,
even the most novice web developer should learn HTML. It is simple to learn,
and is a necessary stepping stone when applying any web programming
language.
What is Popular?
A significant factor in choosing programming languages to learn is how
marketable a skill you will end up with. It might be fun to learn a language
like PL-1, but don't expect anyone to pay you to write programs with it. Open
up the employment section of the newspaper. Which languages are mentioned the
most? Which jobs pay the most?
C and C++ are always good solid choices. There is an incredible demand
for Java these days, but will that always be the case? Visual Basic is well
suited to many applications today, and as a result there are many job openings
for VB programmers. Costly, high-end solutions like Oracle often come with
high salaries for its programmers. Programmers of entrenched languages like
COBOL and RPG find that they are in high demand because new programmers are
not learning these older languages.
If you are using the want ads as your source of in-demand programming
languages, do a little research on them before you jump in. You don't want
to be limited to a special purpose language like Oracle. Sooner or later,
you will need to produce a solution that that language is a poor choice for.
A well rounded programmer knows some general purpose languages and some
special purpose languages. Find out if the language you are considering will
still be here in five years.
The Bottom Line
As I've said, ultimately your choice of a programming language depends on
who you are and how you want to use your programming skills. When evaluating
a language, look at where it is commonly used and what its advertised strengths
are -- and its weaknesses. Find out how this language will look on your
resume.
Talk to people. Talk to other programmers you know. If you are enrolling
in school, talk to your professors. Of course, if you ask me, I'll just
refer you to this web page.