Dr. Dobb's Journal Spring 1998
Programmers who want to update their skills generally fall into one of four categories. Those who:
There is a good chance that many of us are in the first category -- programmers who keep our skills updated on a regular basis. Why? Well, for one thing, we like the challenge of a new technology, to see how it builds on the things of the past, and to make it do things we used to do with earlier technologies. There's a sense of excitement as we explore the latest in software development.
If you fall in the second category, you may find yourself needing to learn a language such as C++ or Java in a week of intensive preparation for an upcoming project. Depending on your background and how quickly you learn, such mastery could be difficult and have serious consequences on your current position.
Clearly, we all want to avoid falling into the third or fourth category -- watching our fellow workers get laid off, or worse, losing our own positions. If you do find yourself in one of the latter two categories, it's not too late to update your skills, but it is more difficult, due to the stresses that result from getting laid off.
If you do get laid off, are you likely to have difficulty finding a new job? I can hear you thinking right now, "But times are good. There is a shortage of programmers!" And I would answer, "Yes, that is true -- this quarter." The truth, is our field is a volatile one.
Back in the days when people spent entire careers at one large company, you would not have had to worry about reeducation, because the company would take care of it for you. Now, more and more people work for smaller companies and hold several jobs over the span of their careers. I suspect that one reason for this shift is simply to keep pace with the rapid evolution of technology. Some people resent this shift away from lifetime positions and having to learn new skills.
Along with increased competition from global markets, this shift places a greater importance on taking charge of your own education, regardless of your personal situation. Your greatest assets are your skill set and your network of contacts.
Taking company-sponsored courses can be advantageous, since they cover the latest versions of the technology. These courses are usually week-long intensives, which is good if you are already familiar with some of the material and need to fill in the holes in your knowledge. The disadvantage is that you may have great difficulty absorbing the material if you've had no previous exposure to the field. In addition, the courses are expensive, usually somewhere between $1500 and $2000 per week. You might also have to travel for these courses, adding more expenses. However, I find that professionals who take these courses are usually reimbursed by their employers.
Many colleges and universities also offer continuing education courses. Students appreciate that these courses are taught in a weekly lecture by experienced teachers, with plenty of time between classes for students to absorb the material through homework and study. These courses usually cost less than company-sponsored courses, since the universities are nonprofit. As a result, extension or continuing education courses are a better option if you are trying to learn some fundamentally new concepts, and may not need to use them in your work right away. The disadvantage is that continuing education courses may require 10 to 12 hours per week of programming outside of class in addition to your work and family responsibilities.
Employers often will pay for courses from extension schools, generally requiring a grade of B or better for reimbursement. In my experience, about 75 percent of the students in these courses get reimbursed. One concern I have with these courses is that not all college instructors keep up to date. Because schools have limited funds, professors don't have the latest versions of software and may be forced to teach with older versions. And sometimes, the professor simply doesn't keep up. Some students report that the courses they took taught K&R C instead of ANSI C.
Special interest groups (SIGs) may also be a good place for you to continue your professional education. For example, the Object Developers Group in New York City (http://www.objdev.org/) offers seminars and study groups in C++, Java, and CORBA. The seminars are often taught by leaders in the field, and the topics are timely. These SIG meetings are usually free or very inexpensive, and they are also a good way to make contacts in the industry. I know people who have gotten job offers through contacts made from the SIGs. Seminars are helpful for a short introduction to a subject, but they are not a substitute for a full-fledged course.
Usenet groups are a good place to turn to if you are learning something and run across a problem. Many people have frequently asked questions (FAQs) that provide answers to some of the more esoteric aspects of a technology. If you are not comfortable asking a question on the group, you might consider writing to someone who posts to the group who has a similar interest to yours. If you do post a question to a newsgroup, make sure you check the FAQ first to see if the question has already been answered.
How can an instructor create a course covering the latest topics, when technology is changing so quickly? This question is important for those of us teaching courses, as well as for the professional software engineer, because the techniques of keeping your skills up to date are the same. Furthermore, I believe that the students should be deeply involved in course development.
At the Center for Advanced Technology (http://www.centeradv.com/), students -- all of whom are software specialists -- have as much to say about what goes into the course as the instructors. For instance, I recently had to develop a course in Advanced Java Programming. What belongs in such a course? I worked with students and came up with several topics, including those in Table 1.
As a general rule, professionals prefer courses that introduce them to a number of topics. Once they know the basics, they can learn a topic in more depth when they use it. If you are studying on your own and want to know what is important, ask around -- colleagues, friends, even on Usenet. In the list of topics for my Advanced Java course in Table 1, much of the material is new. This presents the problem of finding information, as most of it has probably not reached books yet, or if you do find something in a book, it is most likely already out of date.
Today, I find it impossible to develop courses without the help of the World Wide Web, and you, as a professional pursuing continuing education, will also find the Web invaluable. For example, for updated material on Java, the JavaSoft site (http://www.javasoft.com/) is an invaluable source.
Much of the software and tutorial material for our Advanced Java course came from the "Products and APIs" section of the JavaSoft site. Sun has done outstanding work in making software available with good explanations of the concepts involved and "how to" material. For example, if you download software for Java and CORBA (under Java Interface Definition language) you will automatically get a folder called docs containing documentation, examples, and so on. This is true for each of the APIs. Going through this for all of the topics in such a course is time consuming, so instructors who do this for their students add a lot of value to the course and saves time for the students.
Some organizations are using innovative approaches to help software professionals keep their skills up-to-date. For example, while visiting a training professional in a company in Arizona, I was shown a room with many VCRs. The trainer had arranged for courses from all over the world to be taped so that members of the staff could study subjects not locally available. Members of his staff, especially those with families, could watch the tapes on their own time, rather than during rigid course times. As a learning tool, tapes have some advantages over live courses, since students can replay or pause the tape if there is something they don't understand.
I find that 90 percent of the students who take courses from the Center for Advanced Technology are not reimbursed by their companies. This concerns me, as the percentage of students who must now "pay their own way" is increasing. I am concerned because I fear that as that trend continues, professionals will simply be unable to keep up. This could have serious ramifications not only for the region where I work (Silicon Valley), but nationwide as well.
Only two percent of the population has the ability to program. That makes us a special group, contributing in a unique way to the advancement of mankind with our gift. There are only 25,000 computer-science graduates per year. Silicon Valley alone has a shortage of 250,000 programmers. In response to such demand, many without degrees in the field move into software development. What we are calling "continuing" education is really "primary" education for many people.
-- M.C.
DDJ