The empty computer science degree

Reading about this topic on reddit set my mind to thinking about the practicality of a computer science degree. As many have complained, the issue is that a fresh CS graduate may not be able to code up even a half-assed solution to some trivial real-world problem. Sure, knowing the difference between an AVL tree and a red-black tree is an interesting bit of trivia, but that knowledge is almost useless for parsing files or writing dynamic web applications. How important is the theory, how important is the real world, and what role should education play?

I take a very practical approach when it comes to work (as opposed to the tumbling-down-the-stairs approach I take toward women). I’m the kind of guy who reads articles on Lisp and thinks, Man, these people must be really bored with their jobs if they need to make things more challenging by coding in some esoteric puzzle language. I got my undergrad in Computer Engineering (!Science) because I wanted a challenge and exposure to real-world applications. To me, the fact that a person can successfully earn a comp sci degree, but be a floundering infant in a real job, is definite problem.

I have seen a least one person point out that a distinction needs to be made between computer science and software engineering. We expect CS grads to be software engineers, but they aren’t; even something fundamental like source control is a foreign concept to many of them. They are trained to memorize and regurgitate some abstract proof by induction using an incomprehensible jumble of ∀, ∃, ∧, and ∨ symbols, not create maintainable solutions that are of use to society.

At this point we could get into a philosophical debate about the purpose of college education. The historical mindset seems to be that we are taught theory that will create a solid foundation for the on-the-job vocational learning that occurs after graduation. We don’t attend college to learn Perl or how to grant privileges on a MySQL database; we attend to learn the tuple relational calculus. I’m certainly not going to make the ignorant argument that theory is unimportant (tuple relational calculus excepted, of course), but a CS degree becomes so much more useful when it is coupled with vocational aspects.

Some changes that would help the situation:

  • Group projects should either be eliminated or have more realism. What actually happens is that one or two members who care wind up doing all the work. Throwing together people of vastly different ability and priorities, with no command hierarchy, and telling them to sort out a project together, is one of the most absurd ideas in education.
  • Students should be given enough programming projects in a variety of languages so that they can easily solve trivial problems in a language they have never seen (given appropriate documentation). So if a student has enough exposure to C, Java, and Ruby, then that student should be able to pick up on PHP without much difficulty.
  • At least one database class should be required.
  • Students should develop/save/submit projects using version control.
  • A class on security should be required, including hands-on examples (e.g. hack this box running an old, unpatched version of phpBB)
  • Implementing a web-based project should be mandatory (at this stage in history anyway). Students should know how HTML, CSS, jscript, your favorite programming language, and a DBMS all fit together.

From things I have seen and heard, I think that CS educators are already starting to become more progressive along these lines. This field moves fast, and knowing how to type a Java merge sort algorithm into Notepad.exe isn’t going to cut it. Students need a healthy dose of current technology and trends along with the theoretical backing behind them. Computing is a vital field – a world-changing field – and it’s time to stop handing our graduates a blank sheet of paper when they walk across the stage.

Posted in Rants | 2 Comments

Final Fantasy XII

I set this game aside after becoming frustrated with what I later found out was the final level. I had moved through the game with few setbacks before running into all these high-powered mechanical units that were several levels above my party. Realizing that I would need retreat to spend some time leveling up, I basically called it quits.

FFXII is an impressive game, but it came nowhere close to the experience I had with FFX. Putting combat aside for the moment, I found the FFXII characters and storyline vastly inferior to those of FFX. Whereas FFX had an epic scale and made me feel a sort of beautiful melancholy, FXII felt more mundane and didn’t really draw me in.

Certainly FFXII is a more expansive and “non-linear” game. You have plenty of side quests, almost limitless freedom to travel, and an enormous world to explore. The environments are rich and immersive, and each area is a creative multimedia experience. The voice acting is good, and some of the characters are pretty cool. But without that emotional investment in the story and its participants, I guess the game fell short for me.

The combat system takes several large steps away from the traditional turn-based fighting that has been the RPG genre’s standard. Rather than random encounters where your party is abruptly transported to a turn-based battle view, monsters are just roaming around the world. Your party (3 active at once) will fight in real time, with no loading or screen changes, if you choose to attack or navigate too closely to a wandering beast.

You almost feel like you’re playing World of Warcraft, giving dangerous creatures a wide berth, cursing if you accidentally aggro another mob when already engaged in fighting.

Of course you need to control your party during all this fighting and this is were the “Gambit” system comes into play. Your “gambits” are basically lines of a very simple script that you assign to each character. The interface looks pretty cool, but what it boils down is something like this:

if (self.hp < 10%) drink potion; else if (ally.hp < 50%) cast heal; else if (leader.isTargeted) attack targeter; else if (!ally.isProtected) cast protect;

The conditions in the IF statements need to be acquired as you go through the game. You might pick up a gambit for "Foe HP < 30%", at which point you could incorporate that into the script. As a computer geek, I wish they had provided a little scripting language for people to use to control the behavior of their characters. Of course, then you might have the possibility of someone being able to crash the game, or even exploit a security hole. I felt really limited by the Gambit system because if it's simplicity. Being able to use logical operators like NOT, AND, and OR would have been useful, though maybe that would have added too much confusion. The system also had some implicit logic built in to some of the gambits. In my example, I had this: else if (!character.isProtected) cast protect;

You cannot really specify that because there is no NOT operator (and I don’t think there is a gambit for “Ally Status: Not Protected”). So what you do is make a simple rule that casts Protect on “Ally”. The game implicitly understands that you don’t want to cast that spell on an ally who is already protected. The system also appeared to have some intelligence to handle certain race conditions.

For example, let’s say your three active party members are all set to cast Protect on allies. If one member loses protection, then only one of the three will wind up casting Protect; you won’t see all three characters blinding firing a Protect spell at the same target.

On the other hand, if a character is set to Steal, then they will keep trying to steal from the same target even if they have already successfully stolen from that target. This is a problem because enemies will almost never have any items left after the first successful steal.

On the subject of stealing, I was a little annoyed that this was the primary means of funds in the game. If you wanted to have a bearable financial situation, you were almost forced to regularly steal from enemies in combat. Selling the stolen items would at least double your income compared to simply living off the spoils of fallen foes. This would not have been bad if one had more control over the stealing gambit. As it was, you either had to manually intervene or watch your one of your characters blinding snatching at an enemy’s pockets for an entire battle.

Returning to the Gambit system, it’s intriguing to analyze from a computer science point of view, but I’m not 100% sold on the idea. However, I did find Gabe’s positive thoughts on the subject to be interesting.

I agree that there can be a tedium to fighting through every random encounter of a traditional RPG. And yes, by constantly pausing the game you can effectively turn it into turn-based combat. If they add deeper control to the Gambit system, I’d certainly be willing to try it out again.

Still, I am somewhat enamored with the regular turn-based system. The cinematic experience, the potential for careful consideration, the feeling that each battle is a small puzzle, watching your characters execute intricate animations up close… I hate to lose these things to a more dungeon-crawler feel. Maybe I’m over-thinking, but perhaps the turn-based paradigm provides you with a deeper connection to your characters. You are explicitly assigning their actions and watching as they carry them out, seeing every blow they make and take.

FFXII is a magnificent game, and I played through nearly the whole thing, but I just didn’t have a vested interest in completing it. 8.5/10.

Posted in Video Games | Leave a comment

I am Legend by Richard Matheson

With the movie about to come out, my boss loaned me I am Legend by Richard Matheson. I read the synopsis on the back cover and concluded that the book might be good for a pulpy vampire-slaying romp:

Robert Neville is the last living man on Earth… but he is not alone. Every man, woman, and child on Earth has become a vampire, and they are all hungry for Neville’s blood.

But what I got was an intense, thoughtful, and well-written novel chronicling one man’s struggle against horror as he descends through the stages of loneliness. You understand the main character’s emotions and Matheson is able to convey them forcefully. As much as you are drawn in to the protagonist’s isolation, so too are you fascinated by the sci-fi/horror plot that gradually unfolds over a rich 160 pages.

I don’t mean to make the story sound like some high-minded allegory; after all, it is about a man struggling to survive in a world of vampires. The entertainment value is certainly there, but I just wasn’t expecting the book to contain the depth that it did. As I churned through the last few pages, wrapping my mind around the surprise ending, I realized what a special treat I’d given.

Having seen previews for the movie, I don’t have a lot of hope that it will capture the motifs of the book. Still, I may give Will Smith a chance.

Another thing to mention is that my copy of I am Legend contained a collection of very eclectic sci-fi/classic horror short stories by the same author. These ranged from poetic, to silly, to hot (From Shadowed Places), to dark. I had seen many of the themes/ideas before, but then I looked at the copyrights and saw that Matheson had written most of them in the early 1950s. Apparently the World Horror Convention gave him a title of Grand Master, and he’s written episodes for the original Star Trek and The Twilight Zone. Impressive, most impressive.

Posted in Books | Leave a comment

Manflesh!

My brother wrote about a great web app called AutoMotivator that allows you to easily create your own inspirational posters. This gave me an opportunity to capture a sentiment very dear to my heart:

Manflesh: It’s what’s for dinner.

One of my favorite scenes from LOTR is when one of the Uruk-hai sniffs the air and snarls, “Manflesh!” I imagine this poster would have been often seen pinned up around Uruk-hai encampments.

Posted in Fun | Leave a comment

Forever Peace by Joe Haldeman

Forever Peace by Joe Haldeman won both the Nebula and Hugo awards in 1998. After reading The Forever War by the same author, I had to wonder about the connection between the two. Fortunately, Haldeman clues you in at the beginning of the book:

Caveat lector: This book is not a continuation of my 1975 novel The Forever War. From the author’s point of view it is a kind of sequel, though, examining some of that novel’s problems from an angle that didn’t exist twenty years ago.

*** SPOILER ALERT ***

The angle that didn’t exist has to be the Silicon Age and the Internet. The main sci-fi constructs in Forever Peace are:

  • Nanoforges – “warm fusion” devices that can create anything given the appropriate raw materials.
  • Soliderboys – similar to the mechanized suits in The Forever War, soldierboys are remote-controlled robots that “mechanics” operate via a sort of virtual reality interface.
  • “Jacking” – hard not to smirk at the masturbation euphemism, but this is the term the book uses to describe a person’s ability to link to another person, effectively merging personalties, experiences, and sensations. People with this ability have a jack implanted in the back of their heads which they use to plug in to other people and devices.

I think even Haldeman had to have some fun with the word “jacking”. This is on the second-to-last page of the book when a Hispanic woman is thanking the protagonist:

“All the time I was changing, these past two weeks, I was hoping you would still be alive so that we could, as you say, jack together.” She smiled. “Your funny language.”

Forever Peace has basically the same themes as The Forever War:

  • Horrors of war
  • Humanity on a path to self-destruction
  • Humanity’s most promising future as a unified hive mind

The first half of the book was very engaging. The descriptions and actions of the soliderboys, the “jacking” technology and how it feels to be unified with another person, and the suicidal main character and his intense personal relationships.

But then Haldeman unveils the antagonist, a military higher-up whose religion dictates that he should destroy the world to bring about some sort of “rebirth”. Among this guy’s resources are insane zealots who are also super-spies.

The good guys, who have found that people can be “humanized” (read: pacified) by jacking together (heh) for an extended period of time, are on a quest to humanize the entire world. They capture one of these super-spies and place her in a room that “no one has escaped from before”. I could have skipped the next chapter or so, where the spy obviously escapes and wreaks havoc.

I guess the problem I had was that the enemy was a little too convenient – psychopaths bent on killing and world-ending, blindly following some crazy religion. I don’t mind the digs at religion, of course, but I found the antagonists to be overly trite.

The idea of humanity becoming a single mind, and this act being beneficial, is certainly not new. Asimov explored the idea in his Foundation series, and Haldeman himself touched on the idea in The Forever War. Still, Haldeman provides an interesting look at what such a situation would be like, and even how it might feel.

Posted in Books | 1 Comment

*Opera is dying

Just as *BSD is dying, so is the Opera web browser.

I’ve been using Opera ever since my AI professor in college mentioned the browser in class – that was at least seven years ago. Opera has consistently produced an excellent browser, implementing brilliant innovations that the more dominant competitors eventually steal for themselves.

According to these stats, Opera seems to top out around 2% market share. Here is the problem:

  • The average person is going to fall victim to Microsoft’s monopoly. They will blindly use the browser (Internet Explorer) that comes glued to the operating system (Windows) that they were forced to buy with their computer. Fortunately, times are changing.
  • The more computer literate person (and there are more of these every day) is going to experiment with the most popular alternative: Firefox.
  • The IT community has rallied around the Open Source standard: again, Firefox.

In this climate, it is very difficult for Opera to acquire new users. Anyone who gives Opera a try will find it to be a very stable, responsive, feature-rich, highly customizable, and polished software application. People can drive this Aston Martin of browsers for free, but they’ll never see it over the bloated hulks of the other browsers.

But that is not the reason Opera is dying.

Opera is going to take a long dirt nap because it does not have inline spell-checking.

The lack of this feature in the year 2007 is unacceptable. I’ve been using both Opera and Firefox simultaneously for some time, but I made an attempt to use Firefox exclusively because of this issue. Yes, I am aware of the attempts to hack inline spellcheck into Opera, but this is not the slick, integrated solution I am looking for.

The frustration, aside from trying to remember to switch to Firefox whenever I plan to type text into a form, is that this is really the first time that Opera has seriously let me down. Some of the improvements in the 9.5 Alpha look exciting, but I don’t see anything about inline spellcheck.

I searched around a little bit, but could not find any statement from Opera addressing this horrible oversight. And so, I am left to give a brief eulogy:

Here lies Opera,
A mighty fine browser in its day.
I’d write more for ya,
But can’t spel the wrods I want to say.

Posted in Opera, Rants | 4 Comments

Kubuntu 7.04 Fiesty Fawn and the Treo 650

In a previous post I described my experience with getting the Treo 650 talking to SuSE 10.0 OSS. Now that I’ve switched to Kubuntu I need to mention a few things.

This Ubuntu page was a major help for me. Starting with the config from my SuSE install, the first thing I had to do was:

LOAD THE visor MODULE

You aren’t going to get very far without this. You can load it manually with:

sudo modprobe visor

Adding visor to /etc/modules should cause the module to automatically load next time you boot.

CREATE A udev RULE

I finally dove into udev for the first time and found it to be pretty straightforward. I created a file /etc/udev/rules.d/50-treo650.rules with the following line:

BUS=="usb", SYSFS{product}=="Palm Handheld*", KERNEL=="ttyUSB*", SYMLINK+="treo650", MODE="666"

This will create /dev/treo650 as a symlink that points to whichever /dev/ttyUSB device that the kernel assigns the Treo. Note that the 666 MODE is very permissive, allowing any user on your system to access the Treo.

FIRE UP KPilot

The only setting I had to change from before was to set the device to /dev/treo650.

DEBUGGING

Open up a shell and run: sudo tail -f /var/log/messages

After you hit the hotsync button, run lsusb -v in a different shell. Scroll through the output and you should be able to find the Treo in there – just look for the word “Palm”.

These tools should provide you with plenty of information to figure out what’s going on.

YES, LINUX IS READY FOR THE DESKTOP

Every grandmother knows how to spoil their grandchildren, how to bake an apple pie, how to load a kernel module, and how to create a udev rule.

Posted in HOW-TOs, Linux, Smartphone | Leave a comment

A Norton Anti-Virus Haiku

Norton AV App
Crashes, hangs, burns resources
Worse than a virus

Posted in Micro$oft, Poetry | Leave a comment

Kubuntu 7.04 versus the KONICA MINOLTA magicolor 2530DL

Konica Minolta supplies Linux drivers for the magicolor 2530DL on their website. I thought maybe I would be able to install these drivers on a Linux system, connect to the printer over the network, and have everything Just WorkTM.

I was wrong.

I installed Konica Minolta’s RPM on SuSE 10.1 OSS and did manage to print, but my system would never respect my paper size setting of “Letter”. The little LCD on the magicolor would saying something like ERROR: SIZE MISMATCH, then print out an oddly-formatted rendition of my document. When this has happened with other printers, changing the default paper size from A4 to Letter fixes the problem. In this case, every method of enforcing paper size that I could find did not work.

Moving to my Kubuntu 7.04 system, I found that CUPS already had a 2530DL driver in stock. This driver did not work.

So it was time to roll up my sleeves, download the driver source code from Konica Minolta, and get to work. In the end, I feel like I’ve sort of stapled the driver onto my system, but at least it works.

First, you should install some packages:

libcupsys2-dev
liblcms1-dev
liblcms-utils

I may be leaving some off; at one point I was madly installing any CUPS-related development packages I could find in the Adept Manager.

Now you need the jbig library which is apparently obscure enough to not be in many package repositories (I stumbled upon a link it on this page. Here is how I downloaded and installed the library:

wget http://www.cl.cam.ac.uk/~mgk25/download/jbigkit-1.5.tar.gz
tar zxf jbigkit-1.5.tar.gz
cd jbigkit
make
sudo cp -r libjbig /usr/local/lib/
sudo cp libjbig/libjbig.a /usr/local/lib/

At last we can install the driver. You need to grab the source from Konica Minolta, unpack it, then jump into the source directory:

cd magicolor2530DL-2.1.0/
./configure \
LDFLAGS=-L/usr/local/lib/libjbig \
CPPFLAGS=-I/usr/local/lib/libjbig
sudo make install
# I don't know why it put in in lib64
sudo cp -a /usr/lib64/cups/filter/rastertokm2530dl /usr/lib/cups/filter
sudo /etc/init.d/cupsys restart

Now go to your printer administration page and add the printer. I’m not going to walk through the steps, but there are two important things to keep in mind:

  • I had to use a socket URI (example: socket://192.168.1.69:9100)
  • I had to manually specify the location of the PPD: /usr/share/cups/model/KONICA_MINOLTA/km2530dl.ppd.gz

Now print! Print like you’ve never printed before!

Posted in HOW-TOs, Linux | 3 Comments

Nintendo Wii: First Impressions

My brother happened to be standing under the Nintendo Wii faucet when its slow drip-drip leaked out a console while he was at Wal-Mart. Knowing that I had been on the hunt, he made the $250 purchase and Wii’ed me.

The Wii is surprisingly small with a slick, Apple-esque form factor. The “power brick” is separate from the device and you are only given a composite A/V cable. I am tempted to buy a component cable, but I don’t think we’ll be seeing much in the way of HD from the Wii.

In addition to power and A/V, you also need to connect the Wiimote sensor: a slim bar that you stick above or below your TV. Nintendo provides you with little sticky squares to afix the sensor, and a very long cable that provides plenty of reach. Once the sensor is set up with a clear line of sight to your Wiimotes, you are ready to go.

Wii Sports, the game packaged with the Wii, was disappointing to me. Whereas Super Mario Bros., packaged with the original NES, was a flagship title and instant classic, Wii Sports feels more like a demo. Although the sports (tennis, baseball, bowling, golf, boxing) lack depth, they have you use the Wiimote in different ways, doing an effective job of showcasing the technology.

And the technology is pretty good. Not great, but pretty good. I find baseball to be the most engaging; there is something very satisfying about taking a monster swing, hearing the Wiimote sound a crack of the bat, and watching your shot land in the upper deck. Tennis and bowling are okay, though the Wiimote motions are only a vague approximation of the real-life movements. Golf seemed decent, seeming to require a good deal of patience and control. I have yet to put on the gloves and try out the boxing game.

Speaking of boxing, I wound up dropping $5.00 to download Punch-Out off the online Wii store. The old NES game runs flawlessly on the Wii’s “virtual console”, though apparently they have removed all association with Mike Tyson. I desperately want Super Tecmo Bowl, but I don’t know if Nintendo will be restricted by licensing issues with the NFL. Even back when the game came out, the names of certain players could not be used (e.g. “QB Eages” instead of Randall Cunningham).

One of the cool things about the virtual console is that the Wii saves the game state, meaning that you can pause the game, play Wii Sports or whatever, and come back right where you left off.

Overall, this looks to be a fun, well-put-together console on which I look forward to logging some quality gaming hours.

Posted in Video Games | Leave a comment