Help answer threads with 0 replies.
Go Back > Blogs > raconteur's rotunda
User Name


There's no place like ~
Rate this Entry

Sailing The Unforgiving C

Posted 02-25-2009 at 05:20 PM by raconteur

I have a long-held belief that universities are short-changing their programming students by glossing over many of the fundamentals of C.

I hire interns regularly, and occasionally keep them for longer periods.
This is a college town, and my company has developed a reputation as a springboard, so I usually don't keep developers for very long because they go on to bigger and better things.
I certainly don't resent that, I encourage all of them to do best for themselves, whether that is here in a fairly rural community or elsewhere in the big wide world.

This company is a great venue for interns. We have a brick-and-mortar store, various Internet storefronts, and we sell various hardware and software packages (created here) as well as subscription services for a variety of products (also produced and served from here). That depth and variety means that we employ a wide range of technologies, platforms, and environments so I can, for the most part, offer interns their choice of projects.

I spend much of my time teaching these folks the basics. They are graduates or impending graduates, but they're missing pieces of the puzzle that I need them to know before attempting to create or maintain mission-critical code.

I've developed a keen sense for where potential employees are strong and weak, mostly from conversation during interviews and during project design and implementation discussions.
Occasionally I will get a type A personality who thinks their education is complete and that my probing is somehow insulting.

For those folks I usually just ask one or two simple questions:

1: In a C++ class, what is the purpose of a virtual function?

2: In the following code, there are two data type definitions. What is the difference between the two?
typedef struct
    char *pszBar;
} Foo;

typedef struct tagFoo
    char *pszBar;
} Foo;
The answers, as all of you know, are:
1: To facilitate class polymorphism.
2: The second form allows the type to be referred to within the type definition.

Not one of those folks has ever answered either of the questions correctly.

The most common answer I get for the first question is that it allows the function to be overridden. Oof.
There is a tie for the most common answer I get to the second question: "there is no difference", or "the second one won't compile". Ouch.

These aren't esoteric questions, I need people to understand these basic concepts or I can't trust them to be able to create a double-linked list or a generic reusable class.

I've given up trying to get the local University to teach the basics of C. My pleas fall on deaf ears.
My interns can make a cool Java image animation but can't explain how to use a multidimensional array in C (or C++, for that matter -- they usually know what a vector is but can't describe it in detail).

So, I spend time teaching people the fundamentals. I enjoy that process, and I have tangible evidence that I'm making a difference.
Alongside my dog-eared copies of the K&R bible and rows of O'Reilly books I have a binder with letters of appreciation from former interns.
The common thread in those letters is that the relatively short time they spent here was worth more to them in their current careers than any course for which they paid dear money.
I love hearing that, as you might imagine.

Do you think recent graduates have received a full dose of the fundamentals?
Is a deep grasp of the basics really necessary in today's environments?
Posted in Uncategorized
Views 1079 Comments 0
« Prev     Main     Next »
Total Comments 0




All times are GMT -5. The time now is 06:08 PM.

Main Menu
Write for LQ is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration