Oh, what’s in a name?

February 3, 2010 at 1:16 pm (Programming/Development)

As time goes by, I realize how many holes there were in my college education. Indeed, part of me is very proud of my alma mater and satisfied with the outcome of my undergraduate efforts – that is, I was able to use that degree and education to land a solid job at a great company. Unfortunately, another part of me is absolutely shocked that the school can label the degree, “Software Engineering”.

This brings to light the gross disservice that various colleges and universities are doing my using degree names interchangeably. Commonly, “Information Technology”, “Computer Programming”, “Computer Science”, “Software Engineering”, are all used to describe collegiate degrees involving the development of computer software. Sometimes a degree from one school called “Software Engineering” would be equivalent to another school’s “Computer Science” degree. Sometimes they are very different. Unfortunately, I don’t believe that the schools even know what to name the degrees.

For me, there is a big difference between computer programming and computer science. The former is more of a stereotypical “code-monkey” type of thing. A higher-level knowledge of programming, familiar with only the most common data structures, unconcerned with what is going on in memory and such. The latter is a lower-level study of programming and computer theory. Understanding how a language is built, how a compiler and linker work (and knowing that they exist in the first place!), how memory is managed, how and why certain data structures are implemented, etc.
There are certainly benefits to producing “programmers” and “computer scientists”, and I am not going to discredit anyone who would prefer learning one or the other discipline. But again, I think there is a difference and a very important one.

As I mentioned earlier, it can be a hindrance to students and employers alike when schools use curriculum names interchangeably. It is very hard to know what you are getting without detailed descriptions of the courses involved. Even then, it is hard as a new student with little or no knowledge of terms or theory. And employers are left wasting time and money sifting through various candidates for a position to find out who has the skills needed for their positions, despite having a vaguely named degree.

I feel slightly gypped after completing my degree. In hindsight, I believe there should have been more classes on lower level studies (memory management, data structures and algorithms in depth, compiler/linker design, etc). Again, I definitely learned a lot and that knowledge was invaluable as far as getting my job, BUT it could have been better.

Fortunately, all it not lost to those of us yearning for more understanding and seeking true mastery of particular topics. Our industry is one that is overflowing with great learning resources. From books, to web sites, to experienced coworkers – there is never a shortage of resources to learn from.
This is something that I embrace wholeheartedly. I am constantly taking in new and valuable information. Learning and growing from books and friends. I have determined not to limit myself to what was deemed sufficient by one school, but to constantly challenge myself with new material and projects.

For anyone else in my situation, here is a recommendation: set up for yourself a Personal Development Timeline and stick to it. Buy a few books, find some coursework, whatever will work for you, and write down what you will accomplish and by what time. I’ve done this myself and have found it incredibly useful. I have the next several months of my life planned out as far as personal development and education goes. It is encouraging to know that, just because I might have missed out on something, doesn’t mean that I have to accept it and move on.

As Mark Twain once said, “I have never let my schooling interfere with my education.”

I have the power and hunger to grow – and I will – and so does anyone else who wants to.

Permalink Leave a Comment

Continuing Engineering in a Nutshell

January 24, 2010 at 8:35 pm (Programming/Development)

If this doesn’t describe bug finding/fixing to a T, I don’t know what else can.

As we know,
There are known knowns.
There are things we know we know.
We also know
There are known unknowns.
That is to say
We know there are some things
We do not know.
But there are also unknown unknowns,
The ones we don’t know
We don’t know.

Former Secretary of Confusing Poetry – er…- Defense, Donald Rumsfeld
—Feb. 12, 2002, Department of Defense news briefing

Permalink Leave a Comment

Ref: Using C# For a Commercial Game

November 17, 2009 at 11:25 am (Gaming, Programming/Development)

Alistair Doulin has written a great article supporting something I’ve been behind for a while now – the viability of C# as a commercial game language.

Check it out here.

C# is becoming more and more powerful with each new version. The tools and libraries available to it are fantastic and would save tons of development time. And the fact that it includes – brace yourself, I’m about to go there! – garbage collection – gasp! – saves you from those pesky memory leaks that can plague C & C++.
I know that garbage collection is a sensitive subject with a lot of developers when performance is on the line, but like Alistair mentions, like any other language “bad code will run slow”.

Permalink Leave a Comment

Dirty Coding Tricks

October 9, 2009 at 12:05 pm (Gaming, Programming/Development)

I wanted to make a quick post referring to a great little article I just read on the superlative game design & development site, Gamasutra.
Really, if you haven’t visited Gamasutra before, you are missing out.

The article is called Dirty Coding Tricks. It has several first-hand accounts of the not-so-pretty things that desperate developers do when crunch-time comes knocking. We’ve all seen things like this before and, in a strange way, it makes you feel better that you’re not the only one who’s had to stand behind a product that has some nasty bits of code in it.

Be sure to check it out! It’s a great read…

Permalink Leave a Comment

Another helpful tip…

September 4, 2009 at 9:55 am (Uncategorized)

Here’s another quick tip that I found useful and I hope some of you will as well:

Is Firefox failing to save your cookies after you shut it down? In other words, do you have to continually log into certain sites despite saving your password and, normally, selecting an option to remain logged in?

Well, it seems that this is caused by an unclean shutdown of either your system or Firefox which results in a corrupted cookie file.

Here are the steps to correct the problem (on Windows):

1. Go to Application Data Folder. on Windows Vista or on Windows XP, type %AppData% and click enter. On XP, it will open the folder Application Data. From their, open Mozilla\firefox folder. Normally on XP, the path will be C:\Documents and Settings\%USERNAME%\Application Data and on Vista it is C:\Users\your name\AppData\Roaming\Mozilla\Firefox.

2. Once you read the Firefox folder, open Profiles folder. Most likely you will be only having one profile named xxxxxxxx.default where xxxxxxxxx is some 8 characters. If you have more then one folder, you can do the next step for both profiles, though start from .default one and see of it fixes the problem

3. After opening the folder, look for cookies.sqlite file and delete it (you can copy it first on some other folder as a backup). You won’t be able to delete it if Firefox is running so first you have to close firefox.

4. Restart Firefox, and now Firefox will be able to save all cookies and remember logins and passwords.

If this doesn’t work, you can also delete cookies.txt file (if it is available). If you have another profile, you can try this on that profile too though most likely you won’t be required to do it.


Permalink Leave a Comment

More on link-time backwards compatibility

May 4, 2009 at 1:00 pm (Programming/Development)

I want to address the problem with not understanding linker behavior as I mentioned a couple entries ago.

If one doesn’t understand linker behavior and link-time compatibility issues, seemingly harmless edits can lead to incompatibilities with existing libraries and dll’s. This is a particular concern with externally accessible public headers or functions existing in shared libraries, etc.

For example, take the following function:

int fooFunc(char* fooStr, int barNum)

Let’s say another parameter is needed in order to perform some new functionality, so you change the function definition to this:

int fooFunc(char* fooStr, int barNum, int newNum=0)

Cleverly, you add the new parameter with a default value so that calls to the previous format of the function will work! Excellent! Let’s commit this sucker and hit up YouTube!

Not so fast…

Sure, this code will compile just fine because it is compile time compatible with existing code, but if this function is part of a shared library, it will break compatibility with code deployed from that library. This is because the C++ mangled name for this function will change to match the new function profile.
Aside from having anyone using this shared library recompiling & linking against this change, there is a simple way to include this kind of change while maintaining backwards, link-time compatibility.

All you do is create a new function and implement the old function in terms of the new one.

Here’s what I mean:


int fooFunc(char* fooStr, int barNum);
int fooFunc(char* fooStr, int barNum, int newNum);

Note that there is no default value on the new parameter anymore. That is because you have to specify every value to use it anyway. Observe:


int fooFunc(char* fooStr, int barNum, int newNum)
int fooFunc(char* fooStr, int barNum)
   fooFunc(fooStr, barNum, 0);

Now, we have both the original definition which will avoid link-time errors with existing shared libraries while also including the change for anyone requiring it.

Permalink Leave a Comment

The Study of Sorting

April 13, 2009 at 11:23 am (Programming/Development)

I was directed to this page the other day (www.sorting-algorithms.com) and I’d recommend it to anyone who is interested in the design, various implementations and benefits/detrements of several major sorting algorithms.

There are excellent visual representations of the algorithms actively sorting data from various states (i.e. random data, reversed, etc.). Also, for each algorithm, you can view it’s pseudocode and efficiency properties – if that’s even a real term =).

If you have a couple minutes, check it out and learn about how we sort our data!

Permalink Leave a Comment

Back to the “Basics”

February 23, 2009 at 12:48 pm (Programming/Development)

I find that there are many programmers (myself included) who use certain tools daily without really knowing how they work. In this specific case, I’m referring to linkers. As someone use uses C/C++ and several different compilers & linkers almost every day, I was recently struck with an error that was related to the way linkers function. Initially, I had somewhat of a hard time fixing the problem because I was never taught in my college classes about the way a linker performed its functions. I mean, we were told about the linker and understood its part in the overall build process, but we were never taught how they play that part.

I don’t blame my school necessarily. From talking with several coworkers who have been in the industry for several years now, I’ve come to learn that this is a trend in computer science education recently. It’s unfortunate, too… these basic priciples help provide a much deeper understanding and comprehension of lower-level computer functionality which, in my opinion, make a better developer.

In an effort to understand linkers better, I did some Googling (sp?) and found a string of several excellent blog entries by Ian Lance Taylor – a developer who wrote at least three linkers.

The entries start here. And continue through his entry archives to mid September 2007. I highly reccommend giving at least the first few entries a quick read-through if you are like me, and want a better understanding of the development tools we use every day.

Permalink 1 Comment

Google Chrome

October 29, 2008 at 3:38 pm (Programming/Development, Uncategorized)

I’ve been using Google’s new browser, Chrome, for about a month now and I’m really enjoying it. From the way it handles tabs to the streamlined interface, it’s really been a joy to use.

Now, that’s not to say it is without its little quirks. One thing that drives me nuts is that Yahoo! mail always seems to kill Chrome’s web access on my system. Meaning, once I go to my Yahoo! mail account and attempt to browse away, my connection is essentially dead – but only in Chrome. All my other browsers work fine. I don’t know what would cause this, but hey, it is a beta. I know what you’re thinking: “What?! Google has a product in beta?! It can’t be!”… ok, I’m joking, but that is a valid reason for buggy software.

Anyway, I recently read a good article regarding Chrome and, more importantly, the use of a browser as hosts for applications. You can read it here.

Permalink 1 Comment

Another useful Windows Trick

August 28, 2008 at 11:49 am (Programming/Development, Technology)

Have you ever had an application that somehow corrupted during install, update or removal? Would you get that stupid “Windows Installer” dialog box popping up every time you booted up your machine or attempted to complete a certain task? What makes it worse is that it fails each time and there’s seemingly no way to stop it… until now (Well, more like, until I Googled it a bit ^_^ )

Anyway, the fine folks over at Microsoft made a utility specifically to remedy this problem. It’s called the “Windows Install Clean Up” utility. It will detect which applications were installed (or otherwise modified) with Windows Installer. Using the tool, you can choose the one that’s giving you a headache, click the magic “Remove” button, and all your pesky installer problems will disappear! Hooray!

Note though, that this does not remove the application or anything… the best thing to do after using the clean up utility is to reinstall the application in the same location you had before. This will create new copies of previous files and prevents duplicates.

You can read more about the utility and download it from Microsoft here.

Permalink Leave a Comment

« Previous page · Next page »