Revision Control

Anyone who codes programs without revision control is stupid. Seriously.

The trade-offs are so high that there’s almost no reason not to use a version control systems (VCS) when programming.

“So what is revision control?”, you might ask.

At its very core, revision control deals with tracking down changes to your work. That definition, however, is a bit misleading. For software development, it’s better to think of revision control as similar to the computer gaming concept of multiple saves.

I used up all of the save slots in Persona 4

As gamers will know, one save slot is not enough for larger games like epic RPGs or RTS games. It is not uncommon to encounter a scenario where a player realizes that he has made a terrible mistake 3-4 saves ago. If the game has only one save slot, that player is pretty much screwed as the save has already been overwritten. On the other hand, this won’t be a problem if he has saved on different save slots.

A similar problem pops up often when developing programs. A developer might realize that he made a terrible mistake in the code he wrote some time ago. Without a VCS, the developer only has one “save”: the one currently saved on his computer. He will have to search his files manually in order to pinpoint the location of the problematic code and fix or revert it.

With a VCS, however, the developer is given the ability “save” the current state of his code. As long as he commits (“commit” is “save” in revision terms) often, the above scenario is not going to be a big problem. Instead of manually searching each file for the change, he can look at the revision history which will tell him which files were changed. He can then use the various tools in the VCS to inspect and fix the problem. What would have taken the developer minutes or even hours to fix might only require a few seconds if there was a VCS in place.

Continue reading “Revision Control”

Continuous Learning

trepanation

Out of the many articles and blog posts I’ve read in 2008, none have been more moving as Jurgen Appelo’s (the SE list guy) Professionalism = Knowledge First, Experience Last.

Do you trust a doctor with diagnosing your mental problems if the doctor tells you he’s got 20 years of experience? Do you still trust that doctor when he picks up a knife and ice picks, and asks you to prepare for a lobotomy?

The article is quite direct when bringing its points forward. I would suggest you read not only the article, but also the rebuttals targeting the weaknesses of his arguments.

Short summary below the cut…

Continue reading “Continuous Learning”

Quick Review of the Best SE Books

Code Complete 2

The most annoying part about passing by the Computer section of bookstores is when you realize that all of the books in the bookshelves will be obsolete in 5-10 years. This is why serious software engineers prioritize books on processes and methodologies over books on tools.

One guy (Jurgen Appelo) compiled a list of the best of SE books based on “1) number of Amazon reviews, 2) average Amazon rating, 3) number of Google hits and 4) Jolt awards”. Think SE version of Personal MBA.

Below the cut is the top ten. I’ve included my own mini-reviews for the books that I’ve already read.

Continue reading “Quick Review of the Best SE Books”

The Knowledge Worker

Probably the most important contribution of Peter Drucker to modern management is his study on knowledge workers.

For most of us, the term “knowledge worker” may just be a fancy term for “white collar professional”, people with specialized training tasked to use information for different goals. For example, an engineer uses a client’s requirements to design structures, and a doctor interprets the symptoms of a patient to find the best way to treat the disease. But as Drucker would point out in his writings, most companies do not understand that knowledge workers are fundamentally different from their blue collar counterparts.

Here is a small (and by no means exhaustive) list of things about knowledge workers:
Continue reading “The Knowledge Worker”

More Necessary CS Skills

Body feels like heck today as a result of breaking demolishing a personal fitness record yesterday. The heat isn’t helping.

I’m not in the mood to conduct research so here’s a follow up to a previous cheat post.

Learning basic web development and photo editing is not enough to be competitive in the IT industry. Here are other necessary skills for a fresh grad to learn.

Google-fu

Practice your Google-fu.

I don’t really need to explain why you should learn how to efficiently use Google to find the information you need. Between finding answers to software problems up to stealing code, Google is an indispensable tool for a software developer.

Unfortunately, not a lot of people know how to choose the proper keywords or determine which keywords should be enclosed with quotation marks (I’ve even lost count of how many times I’ve seen this happen in my previous company). With a bit of practice, though, you could overcome this problem and eventually learn to stalk people find solutions in Google in no time.

Get enough Linux/SysAd/programming experience to install a LAMP server from scratch.

This might sound impractical to people working with .NET, Java, or any development tool whose primary audience does not use the LAMP platform, but the sheer amount of useful free/open source software built for LAMP makes it hard to ignore.

When you build a LAMP server, from installation of OS up to setting up some basic apps like WordPress and MediaWiki, you will learn a lot of basic skills in the process. Installing the OS is a no-brainer, but the other stuff aren’t so trivial especially to people used to working in Windows: using a shell (and optionally installing SSH to allow remote terminal access), using vi, emacs, nano, or any console based text editor; learning the Linux user security model e.g. setting file permissions, etc. The learning doesn’t stop once you get to the AMP part, as configuring Apache, MySQL, PHP, Perl, and Python for basic usage still requires a bit of research (and trial and error).

In line with learning LAMP, you might also want to learn how to create virtual machines via VirtualBox or VMWare Server to remove the need for dual booting or getting a dedicated machine. LAMP servers are lightweight compared to modern OSs so the host machine’s performance will probably not be affected by hosting a virtualized server.

Understand how the Internet works.

This one’s essential for web developers. No, I’m not saying you need to do crazy impractical stuff like memorize the OSI Model. What I’m saying is that as a person creating dynamic websites, you should at least know the basics of networking, especially HTTP.

People who know these stuff might find it funny that there are web developers who aren’t familiar with how browsers and servers interact via HTTP, but in reality, a lot of people don’t know these basics. I myself didn’t know the difference between POST and GET requests until my second year in the business.

Learning how to use common network related tools like packet sniffers and port scanners is also useful in web development. Having Wireshark in my machine actually gave me “unfair” advantage in my projects, allowing me to isolate and fix difficult bugs that other devs couldn’t handle.