Thursday, January 10, 2008

How to learn new computer-related skills

I teach a lot of computer classes and deal mainly with people in IT departments, and I've found that a number of computer professionals actually have difficulty learning new computer concepts. I've thought about this quite a bit, and I have some pointers that may be able to help in these cases. There's definitely some hard work that's required, but it pays off as new concepts become easier and easier to acquire.

1. Learn some commands.

Windows and and all UNIX/Linux/BSD variants have a command line interface where you can type in commands to perform different operations. In Windows, you can run commands from the "command prompt" (aka "command.exe", "cmd.exe", "the DOS window", "command shell"). In UNIX variants this is called also called the "command prompt" (aka "the shell", "a terminal window", "a shell window", "console", "console window"). In Windows you can get information about a number of commands by typing "help" at the command prompt. On some flavors of Unix you can do the same thing, but mainly in Unix you use the 'man' command to get information on a particular command.

Your goal here is to learn how to read the help information well enough to be able to run any command. Some common commands you want to learn first are:

Windows

dir
cd
nslookup
move
copy
ping
telnet
ftp

UNIX

ls
cd
nslookup
mv
cp
ping
telnet
ftp

To find additional commands, you can look in the C:\Windows\system and C:\Windows\system32 folders on Windows, and in the /bin and /usr/bin directories on UNIX. Once you find a command, you can get more information on it in one or more of the following ways:

Windows

command /?
command -?
help command

UNIX

command -?
command --?
command -help
man command

2. Learn some programming language

This may sound weird to many of you, but there are quite a few people in the computer industry who don't know even one programming language. To have an idea about how computer programs work under the covers, you MUST know at least one programming language.

It doesn't matter which one you pick, but some are definitely easier than others for different reasons. Some languages need to be compiled, while others don't, and some languages can be run directly in a browser. So the language I would suggest that you learn first is ECMAScript, aka JavaScript (its previous/current name) or JScript (this is the MS-specific version understood by Internet Explorer). The reason I like it is that you don't have to compile it and you can run it directly in a browser. It doesn't natively have much eye candy, but that's not my fault. The goal is for you to figure out how to use the language.

3. Learn how to use an API in that programming language.

After you learn a programming language, you need to learn how to access other functionality from within your programs. Normally in ECMAScript an API is available as one or more objects, with one or more methods and attributes that can be used. For example, when you use ECMAScript in a browser, the browser makes the "document" object available to your program. This object supports methods and attributes that you can use to perform different functions. For example, you can use the following code to set the browser title of your ECMAScript document:

document.title = "foo";

See, easy as pie. That's the easiest case; you want to challenge yourself to find other APIs to use so that you're comfortable with the whole concept.

5. Learn another programming language.

Now that you know one way of doing things in a program, you need to learn how to do things another way. You may have some ways that you ALWAYS do things, but that's not a good attitude to have when you want to learn something new. You need to learn how different languages handle different things (like passing data, graphical components, event handling, etc.). A language that seems to be getting some traction these days is Jython, so that's one I might recommend. Jython is, to me, what you would actually expect "JavaScript" to be, as it allows you to access Java objects from a scripting language. I would also recommend Java itself as this second language.

6. Learn (AND IMPLEMENT) something new in any of the above.

I've seen many people who think they should be able to learn a new concept by simply reading about it. This is true in some cases, but not in nearly as many as most people think. You need to read about some new function and actually put it to use somewhere. For example, to learn the basic concepts of AJAX, I wrote a small ECMAScript that used the XMLHttpRequest object. I could basically understand the mechanics of it just by reading about it, but actually writing a small application to use it really taught me, with a very small amount of effort, a whole lot about AJAX.

7. Keep learning by reading and trying, and occasionally validating your previous knowledge.

Many people say things like "Oh, I did that a long time ago, but I'm sure I could pick it up again quickly". In my opinion, the time to pick that skill back up is now. It may just be that you research the topic again on Google to see what's changed, but you need to make sure your knowledge stays current (at least for the important stuff). For example, I don't really care if MS Word added a new menu option between versions. However, I definitely want to know if the structure of an "A" record in DNS has changed since I last configured a name server.

8. Define some point at which the details should be considered a "black box".

Some people may be interested in computers all the way down to how the electrons swim through the network card. However, I am proof positive that you don't need to know anything about the hardware to be an absolute expert on the software. So while you may think it's interesting to know exactly how a device driver works, that level of knowledge isn't absolutely necessary. Learn "enough" to help you solve the problem at hand and consider the rest just a black box.

OK, that's it for now. Happy learning!

No comments: