Fog Creek Software
Discussion Board

A Place for Non-C developers?

I am smart and I get things done, but I don't know C so I would fail the Fog Creek in-interview coding challenge.  Since I'm not trying to get a job there that's not a problem for me, but it got me to wondering: is there a place at a world class ISV for developers whose sharpest tools are higher level?  Say one who makes his bread and butter with VB(.Net) or maybe is a great php coder (i.e. properly uses abstraction in PHP)?  What about at someplace of the Microsoft caliber?

I've read the Back to Basics essay ( ) and the reading list justification for H&K (and already started on it), but I remain curious as to how developers from "real" shops view guys like me.

Thursday, February 26, 2004

Actually when we do interviews we let the candidate pick the implementation language of their choice. A lot of kids these days pick Java. We're still going to look for good "pointer aptitude" although we may have to ask them to do a linked-list problem if they don't know C at all.

But as people know by now, I really do divide the world into "people who can understand pointers" and "people who can't" and I want to hire from the first group. I'm pretty sure Microsoft does, too.

The reason is that at a software company, software is the GOAL, so we feel justified in looking for the highest skilled craftspeople.

In other industries, and this is where I actually answer your question, where software is a means to a goal, not an end in itself, one might actually prefer someone with good higher-level language skills if they also knew how to pragmatically make things work.

So, for example, while I would rather have a kid who knew C and nothing else (they can learn everything else), an IT department at an airline, for example, might be better off hiring someone who knows VB, SQL, Access, Windows Administration, Crystal Reports, and how to pull it all together, but who doesn't quite get pointers.

Joel Spolsky
Fog Creek Software
Thursday, February 26, 2004

Ah, your concluding paragraph explains it perfectly--thank you.  In a small way, I now have a better understanding of my place in the world and know why I got hired for my current job while PhDs and engineers were passed over.

I did however, skip right to the chapter on pointers (in this text--still waiting on my own copy of H&K: )  to see what I was missing.


Thursday, February 26, 2004

er... K&R.  H&K is a guitar amplifier manufacturer.

Thursday, February 26, 2004

...and don't forget Heckler and Koch, the famous gunsmiths.

Name withheld for fear of looking like a gun nut
Thursday, February 26, 2004

I'm in the same situation, haven't programmed in C before so I thought I would work through the online book linked to above. And to my surprise, it's pretty simply stuff. I'm half way through the pointers chapter and am finding it quite easy to follow, so it looks like i'm in the group of people who can understand pointers.

Ben R
Thursday, February 26, 2004


You don't *really* know if you're good with pointers until you're forced to work with them.  The concept is pretty simple (at least to me), but the uses can get slippery at times.

Still though, you just have to know them well enough to be able to answer any interview questions that may come up which shouldn't be too hard. :)

Thursday, February 26, 2004

I've found that once you dive into assembly, pointers suddenly made sense.

Thursday, February 26, 2004

>is a great php coder (i.e. properly uses abstraction in PHP)


Thursday, February 26, 2004

>>is a great php coder (i.e. properly uses abstraction in PHP)


I'm surprised that went un-touched as long as it did.


Friday, February 27, 2004

I understand pointers, but don't have a college degree.  Will you hire people like me?

Friday, February 27, 2004

A variable that holds the address of another variable.

That's a pointer.

How hard can it be?

>> once you dive into assembly, pointers suddenly made sense.

Amen. That's why *I* know pointers :D
Friday, February 27, 2004

>> A variable that holds the address of another variable.

A car is a decive for getting people from one place to another.

Holy crap!  I'm a mechanic! ;)

Richard Platel
Friday, February 27, 2004

Understanding what a pointer *is* is easy.

Understanding how to use pointers (especially with dynamically allocated memory) so that you don't shoot yourself in the foot is much, much harder.  It quite literally takes years of experience--or an apprenticeship with someone who can teach you the correct patterns and habits.

Will Duquette
Friday, February 27, 2004

Straight pointers are easy.

It is the figuring out how to ensure that a pointer to a dynamically allocated 3d array would be capable of being updatable within a function that throws A LOT OF PEOPLE.  I have to sit there and think very hard on which pointer to reference, and why it is the right way.

I understand it, but I would MOST RATHER not deal with it anymore, and I found "CODE" by Charles Petzold to be very easy compared to pointers.

Joel is right -- Pointers are the make-n-break kind of thing that divides gurus with the masses.

Friday, February 27, 2004

One place I used to work for was a 99% Perl / Mason / SQL house. Not really useful to you unless you live in MA...

Grmbrand Johnson
Friday, February 27, 2004

I am interviewing a lot of youngsters for my project and I am getting frustrated by the minute. The kids all have a favourite language and are completely focussed on using it in every problem given to them. Not only do they not know anything about other languages, they also never think of spending even a sec understanding the problem and alaysing it. Thminute the question has left my lips they start scrawling code!!!
VB guys do not know which situation suits the use of VB. On being asked what is the pluspoint of Java, a VC guy could only answer that it makes coding web pages very easy. No mention of JVM, no idea that it is useful because the code is platform-independant.
Another one was asked what he considered the most important reason to use OO. I understand there could be many possible perceptions to this question but I expect that in one way or the other a person would allude to the fact that itis easy to map real life problems. However the only thing he foud useful was that reuse made coding very easy!
Now how much experience doyou think these kids had - freshers, 6 months, one year. Hold your breath, we are speaking of 3-4 years of experience!?!
What to do???
I did find a good developer but hen that is another tale.

Brijesh Kartha
Friday, February 27, 2004

Grmbrand: Try Perl/Mason/SQL/C...ahhh...You haven't lived until you've written some Perl XS bindings for a C library :)

Friday, February 27, 2004

Understanding C pointers and understanding indirection aren't necessarily the same.  If you ask someone to explain pointers, they may have no clue.  But if you ask about how the index system at the library works, or a table of contents, or some such, it's largely the same thing.

Understanding what pointers do really isn't that hard, though geeks try to make it hard.  Every kid learns the library reference system (either with cards or a computer).

Anyone who goes through any kind of formal education should have gone through trees, lists, etc, all of which use mathematical equivalents of pointers.

Not sure what my point is other than if someone is capable of understanding pointers, I'm not sure how they manage to write any code, much less good code.  Hell, every variable is a pointer to the real data.  Now, training them to understand how to use pointers in more complicated designs, that's another issue.  Perhaps the question is more "How well does person A deal with the mental gymnastics of multiple indirection?"

Chris Kessel
Friday, February 27, 2004

Damned uneditable message.  Should have been "If someone is *not* capable of understanding pointers, I'm not sure how they..."

Chris Kessel
Friday, February 27, 2004

Perhaps it is just pointers as they are in C that makes it hard. I do remember having a lot of trouble with pointers and arrays when learning C, even though I'd done plenty of assembly language programming before that with 6502 and 68000. (And, yes, I'd used the indirect addressing modes -- the 6502 doesn't go far without them.)

I think the problem is the weird syntax; something is definitely wrong when it's easier to compute the offsets yourself than work out how to actually use an int *** in day-to-day programming.

Insert half smiley here.
Friday, February 27, 2004

Peter van der Linden's excellent "Expert C Programming" spends an entire chapter on "Unscrambling Declarations in C"... which is, of course, mostly concerned with pointers. Go figure.

Chris Nahr
Saturday, February 28, 2004

I've known VB programmers that didn't know the difference between call by reference and call by value. You have to know a little about pointers to properly use VB.

Monday, March 1, 2004

I think the thing about VB and not knowing about ByRef or ByVal is simply because ByRef is default.
In most cases, when creating local desktop apps, you can just use the default and simply not change that particular value i a function or class that uses it.
It's not until you create stuff that has to be ACID et.c. people realize (not to say ByVal should not be used otherwise) that they have to bother about those weird ByVal/ByRef they may see in some examples they've found somewhere on the web.

Uh... did that make sense?
Anyway... ByRef/ByVal is explained surprisingly late -- if at all -- in most VB-litterature.

Sam Persson
Tuesday, March 2, 2004

In this world, I think it's not as simple as pointer/non-pointer, but okay. Anyway, here's some other stuff to help figure out what a developer has learned in his/her past:

* Textual maniputation: Regex, text sushi with split/left/right/mid/instr/upper/lower/array_list.

* SQL Joins, inner, outer, cross, sub, substitutes for

* Buzzword compliance: have to show some care for the various programming techniques or problems he is expected to solve he will have to suffer from 9 to 5.

* Social skills: most small companies that can't afford but to hire the best will probably need someone who can take care of business without having to hire secretaries, support, sales, and hr.

All of these can be learned just like pointers (pointers is more or less a no brainer--yes it isn't just 2 pages on K&R 2E, but it really can't expand to 2 chapters if you have read a computer architecture book or two or taken a basic assembly programming class) but the ramp up time will eventually waste a few month.

Li-fan Chen
Friday, March 5, 2004

*  Recent Topics

*  Fog Creek Home