Salaries



  • @ammoQ said:

    In Austria, you start loosing many benefits (like free kindergarten, possibility to deduct some insurances from taxes etc.) once you earn too much; the limit is somewhere around 50K.


    Damn socialists! <only half joking>



  • CW,

    I read your blog. You wrote:

    <font color="#0000ff">"Often I'll get resumes from online sources and they'll include a skills
    inventory; where the applicant can list various skills or technologies,
    the level of skill, and years of experience. There's some great humor
    tucked away in there... Folks with 8 skills listed at 'Expert' with 2
    years experience, only 1 years out of school."
    </font>

    Ouch. I've claimed to be an "expert" before on my resumes. No wonder I got those looks in the interviews.

    <font color="#0000ff">"You aren't an expert in .NET if you can't tell me even a little about
    memory management. And please, you're not even 'intermediate' with
    object oriented programming if you've never used polymorphism; and if
    you have to look it up, you're not even a 'novice'."

    </font>Double ouch. I think I need to do some studying. I looked up polymorphism and read the definition. I still don't understand it. Have I used it in applications I've created? Uh...I'm not sure. Maybe?

    There's one thing I can say of myself...I'm honest. No, I don't know the definition of polymorphism. What will shock you is that I don't really care. I just do what it takes to get the job done. I'm a firm believer in the throw-enough-code-at-it-and-it-will-work technique. If you blast enough code into a windows/web app, it will eventually do what you want it to.

    CW, can you ask me some of the typical .NET questions you ask during your screenings? I promise to answer them as honestly as possible. I promise I will not Google the answers. This may be setting myself up for public humiliation, but I think it will be very enlightening to all of us in the forum. I want to get your feedback on my answers and see if you would consider me for a $100K position. You can throw in trick questions if you'd like. I consider myself "intermediate" to "advanced" in .NET design/implementation, so prepare to be astounded.



  • CW, this actually sounds like fun.  I'll participate, too, if that's ok, though I don't know a lot of .NET.  I'm competitive, and am very curious about what kinds of questions are asked/would be asked. 

    I would disagree about polymorphism being novice-level; I'd say that encapsulation and loose coupling are the primary tenets.  I don't tend to use polymorphism with loosely-typed languages.  In C++, I do use it a lot: [the STL containers themselves are a form of it, but I forget the technical term for it.  Generic programming, though], and the better GUI libs... but that's another topic.

    CPound, if you have ever written an overloaded function, you've used polymorphism at its basic level.  If you've ever inheireted from an object, you've used it in the more well-known form, and if you've ever had to cast the inheireted object back to the base class, you're right on top of things.  That's the basics, anyway.  Correct me if I'm wrong, of course, CW.

    The only things I really know about .NET's memory management is that it handles it for me, most of the time, unless I use the non-managed interface.  I don't know if it does there or not.  I mean, it's GC'ed, and I recall that it's not released immediately when the object is released [a sore point for us RAII folk], but the GC is called frequently.  I don't think that it's released back to the enviroment immediately, but I don't remember.



  • @CPound said:

    Double ouch.

    :)   Sorry.  Nothing personal.

    @CPound said:

    I looked up polymorphism and read the definition. I still don't understand it. [...] I don't know the definition of polymorphism. What will shock you is that I don't really care. I just do what it takes to get the job done. I'm a firm believer in the throw-enough-code-at-it-and-it-will-work technique.

    [...]

    I want to get your feedback on my answers and see if you would consider me for a $100K position

    I wouldn't.   Sorry, again, nothing personal, but you answered most of my questions. 

    It's not that you don't know the definition -- though generally I'd expect any serious developer in an OO language to know it.  But what you just said could be translated into "I don't care about good design, I'll just code until it's done" which isn't what we pay the sr. people to do.

    It's also how a lot of really, really crappy systems & packages get built.  Stuff like that costs companies millions of dollars (either in up front costs or in long term maintenance & growth pains), and eventually leads to people like me being hired to redesign things. 

    And I'm not joking about the millions part.  Many millions, at my current job right now, are being flushed down the drain every month because our systems were built using your mentality.  Many millions, at my previous job, were squandered for the same reasons.  And these are relatively mid-sized (less than 1000 people) companies, not like Microsoft where a few million gets lost in the seat cushions.   Public companies, at that, so our losses are actually the losses of our shareholders -- maybe you if you have a 401K or anything.

    That's why some people make $100K (or a good deal more), because if they do their job well, they save a hell of a lot more than they cost and can dramatically alter a company's ability to offer new services.  

    Don't get me wrong, I still need good people to put the pieces together, but those aren't the senior jobs.

    -cw



  • @CodeWhisperer said:

    I wouldn't.   Sorry, again, nothing personal, but you answered most of my questions.


    Well no is no, eh? I can't fault you for being honest.

    I'll just crawl back to my junior level position now.



  • @CPound said:

    I'll just crawl back to my junior level position now.

    >g<  Not trying to crush your spirit or anything.

    It's hard to just give a lot of questions because I don't just read my questions off a list, and some of them aren't really "what's the right answer" questions -- things like "How would you track down a bug that presented itself like this..." 

    I also tend to riff off of whatever the job is hiring for, how the candidate assessed themselves, and whatever I'm thinking that day, but I guess I do have a couple level-setting questions I come back to. 

    I might ask what the StringBuilder class is for, and why would you use it?   If I received a satisfactory answer I'd say, "ok, given that, I want you to pretend that there was no such class, and write one for me".  Not every method; the Length property, an Append() function, the ToString() function, and a constructor that takes an initial capacity is probably enough.  

    This is by no means my 'big question' (which usually doesn't involve any specific programming language), but it is a gating one.  Normally we'll go through this in 10-15 minutes, talking about the code and the way they structure the data along the way.   I've seen 3 or 4 variations of the answer, the variation tells me a lot about how well the candidate thought through the problem (and understood where the problems would be), and I can get a sense for their familiarity with .NET topics outside of specific API usage by how they implement the variation. 

    (I have other questions to ask if i want to know if you know anything about ASP.NET or ADO.NET, for instance)

    -cw 

     



  • @CodeWhisperer said:

    I might ask what the StringBuilder class is for, and why would you use it?   If I received a satisfactory answer I'd say, "ok, given that, I want you to pretend that there was no such class, and write one for me".  Not every method; the Length property, an Append() function, the ToString() function, and a constructor that takes an initial capacity is probably enough.


    Gulp. (hard swallow)

    @CodeWhisperer said:
    This is by no means my 'big question'


    Even bigger gulp.

    Don't take offense by this, but I would never want you to interview me.



  • I'll take a swing.  I'm not much of a C# programmer.  The first one is that strings are immutable in C#, and there's a performance penalty for assignment to a string.  It deletes the string, creates a new one, and copies the data from the old buffer if you're actually appending.  StringBuilder has a starting allocated buffer, and ONLY when you go over it, it allocates more, like one of the C++ generics.  I think it starts at something low, like 8 or 16 bytes and doubles as you grow, but you can override that with the capacity.  I used it when I was building a long string of chars by appending to the end.  I would make the assumption that, in the general case, it's better any time you'd otherwise be calling the string copy constructor.  I'd try to allocate enough buffer to hold my entire string.

    At that point, I'd ask what you were going to use the string buffer for; I don't assume your design decisions are the same as the .NET ones.  They needed a generic one, you might need a domain-specific one, and there are some optimizations and interface changes, for example, if you're doing lots of small inserts, or wanted to often insert into the middle. 

    Either way, though, here's where I bog down with not knowing the language syntax very well. I've written 2, maybe 3 things in C#... and all of those were about a year ago. Knowing about how .NET deals with reference objects should be enough, but I'm going to go over this algorithmically and not try to write code.  It would be on the front of this site tomorrow morning.

    My class itself would contain a char[] string_buffer, an int capacity and the accessors, and I think I need a private int for the actual buffer_length, so when I return the string, I don't have any buffers on the end.  I'd add an accessor for it, too, if I handle the copy myself, this allows me to truncate strings cheaply.  The default constructor would assign the char[] to a new char[16], the capacity to 16, and the length to 0.  The capacity constructor would take int length and assign to to the internal char[]. 

    The Append checks the length of the incoming string.  If (buffer_length + incoming_length) > capacity, the function calls increase_capacity, which takes a temp copy of the char[] reference (maybe as a string, or a char[] ref), then
    assigns a new char[] to string_buffer, then copies the data from the temp
    to the string_buffer [with .NET's memory management, there might be a way to avoid the copy.  Not sure.] then sets the capacity int and returns.  The Append function then copies the string to the end of string_buffer and increases length to length + incoming_length.

    ToString is pretty simple.  It returns the first length chars of the buffer as a string.  Again, syntax, I'd have to look at it to do it.

    Don't feel bad, CPound, [if that's even close to right].  He's actually asking about the one of perhaps 10 .NET classes I even know exist.  If he asked about any of the ASP webclasses other than the datagrid, I'd stare and look dumb.



  • @TheDauthi said:

    My class itself would contain a char[] string_buffer, an int capacity and the accessors, and I _think_ I need a private int for the actual buffer_length, so when I return the string, I don't have any buffers on the end. 

    This is the most common of the variations I see; it's fairly straight forward but suffers from a number of problems, including the fact that you don't really get rid of reallocations (resizing an array requires reallocation and there are solutions which don't require any reallocation), it just happens less often; but it's not hard to construct cases where you could end up with reallocations quite regularly -- or end up with a lot of wasted space.  

    If the candidate gets to this point, I'll start asking questions about how they might mitigate some of those weaknesses, I'll nudge them toward some things they might remember from college, or another class from .NET that might help with the problem.  At this point, I'm seeing if the person can learn on-the-fly, integrating new ideas into a concept...that's sort of hard to in this sort of forum, but you get the idea.

    -cw



  • @CodeWhisperer said:

    I might ask what the StringBuilder class is for, and why would you use it?   If I received a satisfactory answer I'd say, "ok, given that, I want you to pretend that there was no such class, and write one for me".  Not every method; the Length property, an Append() function, the ToString() function, and a constructor that takes an initial capacity is probably enough.  



    I'd start with a container (e.g. a linked list) for the pieces, and an integer to keep the length.
    Only when ToString() is called, I'd allocate a char[length], assemble the pieces there and return that.



  • @ammoQ said:

    I'd start with a container (e.g. a linked list) for the pieces, and an integer to keep the length.

    What are you choosing as your 'pieces'?

    -cw



  • @CodeWhisperer said:

    @ammoQ said:

    I'd start with a container (e.g. a linked list) for the pieces, and an integer to keep the length.

    What are you choosing as your 'pieces'?

    -cw



    Whatever is appended. In the case of Append(Object), of course I have to call ToString() on that Object, to get the length and make it immutable. A possible (memory usage) optimization might be to use buffers of say 1000 chars to collect single chars I get from Append(Char).


  • The main reason I didn't choose to go with a linked list of buffers instead is that I
    don't know if one is given by default in C#, and I was sticking to what
    I know I can write.  That's actually where I was going with my
    earlier statement about middle-inserts, though.  Then I went and
    described it algorithmically, instead of in code.  Oops.


    My initial thought was array of array of chars, but I don't know if
    you can resize that primary array in C# like you can a C++ vector or
    list, and if doing so avoids the copy.  (No, you're not guarenteed that about a vector in C++ either, but some implementations give it)

    If I were applying for a C# job, I'd need to... learn more C#.  Go figure.



  • @ammoQ said:


    Whatever is appended.  [...] A possible (memory usage) optimization might be to use buffers of say 1000 chars to collect single chars I get from Append(Char).

    Had to ask, one of the variations I get a fair bit is a linked list of chars, which incurs way too much overhead. 

    A linked list of strings (one per Append) isn't bad (and is getting to about to what I would like to see), but it can turn into the ll of chars depending on how it is used -- and doesn't have any allowance for preallocating the memory (though you could argue it isn't necessary any more).  A linked list of buffers (particuarly if you allow them to be variable length) can lead to a really good solution -- if I was going to build a core class of .NET, that's probably what I would have done.    It's hard to say, that question is not really looking for the perfect implementation as much as it is checking to see if the person I'm interviewing can understand the tradeoffs of the various choices open to them.

    One standard followup:  If you end up with a fairly long list, and then you call ToString() and it does the memory allocation and copies all the strings/buffers over and returns them.  Then you call ToString() again and it has to do all those tasks over again (including reallocating space to hold the same string you had already constructed).   How might you remedy this?

    -cw



  • TheDauthi, are you trying to tell us you don't know if you can write a linked list?



  • I can't believe he doesn't know how to write a linked list!!!

    C'mon, that's so grade school.
    <font size="1">
    What's a linked list?</font>



  • @CodeWhisperer said:

    One standard followup:  If you end up with a fairly long list, and then you call ToString() and it does the memory allocation and copies all the strings/buffers over and returns them.  Then you call ToString() again and it has to do all those tasks over again (including reallocating space to hold the same string you had already constructed).   How might you remedy this?



    ToString() checks if there is exactly one element in the list, and if this element is a string. If so, it simply returns the string. If not, it assembles the string, clears the list and puts the result as the only element into the new list, before returning it.



  • CW,

    When I start thinking about the questions you're asking, my head starts to swim. I can't really concentrate or focus.

    I bet you think this makes me less of a programmer, huh?



  • @ammoQ said:


    ToString() checks if there is exactly one element in the list, and if this element is a string. If so, it simply returns the string. If not, it assembles the string, clears the list and puts the result as the only element into the new list, before returning it.

    Yup, that's about what I'd expect to hear.  At that point we'd move on to something more challenging :)

    -cw

     



  • In C#, honestly, no.  I have almost no experience with the language.  I mean, I assume that if I created an object containing another object, and created another object with new, and assigned the next object to the new one, that would work, but I don't know if that is getting a reference of the object or not.  Basically, without explicit pointers or references, I don't know how to ensure I'm making a reference other than when I create it with new... and I'm not sure that does it, I simply know that it does in some cases.  I don't think that you can contain an instance of an object inside itself, so I need a ref, somehow.  I don't know how to force that, and though I think that simply creating it on the heap would do it, I don't know.

    Algorithmically, or in, say, C, Asm or any language I've written more than 1000 lines of code in, Mein Gott, yes.  I couldn't call myself a programmer without those basic data structures.  The problem is one of syntax.  I would have the same problem doing it in lisp, since I don't know the language.



  • @CPound said:

    I bet you think this makes me less of a programmer, huh?

    Well, no, not exactly.  It makes me think you need to do some reading about data structures and algorithms -- the same things that most people who are self-taught have to learn.  The same things I had to learn, for that matter.

    -cw   

     



  • @CPound said:

    I bet you think this makes me less of a programmer, huh?

    Now that I think about it, I think this makes you exactly a 'programmer'.   A programmer (in my opinion) can generate code that does what the person wants.  

    An 'engineer' is someone (again, in my opinion) who can explain why they chose that way of coding it specifically, can analyze the trade offs (and document the decision making process) and recognize when he is coming to the limits of his knowledge :). 

    -cw



  • @CPound said:

    Don't take offense by this, but I would never want you to interview me.

    Why?  Have you decided you'd rather be one of those people who talks themselves into roles they aren't qualified for while interviewing with fools? :)

    Actually, I am generally considered a very fair interviewer; if you don't know the answers I won't just sit there and stare at you as you fumble.  I won't just read questions off a list, I won't give 'trick questions', and I'll give you a chance to tell me about what you think makes you special. 

    If the candidate stumbled on that question, I would have stepped down to the more syntax-specific questions.   Here's one I use fairly often:

    US phone numbers, though fairly standard, can be input in all shapes and sizes:  "(206) 555-1212" & "206-555-1212" are two common standards (and you could have different bracket types, etc), and from another country, you'd see "+1 206 555 1212".   Now, imagine that this is being received through a web service or something where you can't just use a validating input control, but you want to standardize your phone number internally into just 10 chars, so, for each of my examples above, the output would be "2065551212"

    So, the task is to write the function     string StandardizePhone( string input ) {...}   that will take any of those inputs and return that output.  Also, it should allow for spaces in arbitrary places, it shouldn't require a specific type of bracket, etc.

    (I know, a lot of folks are snickering right now...but I had a candidate with a MSc in comp sci who just stared blankly and said "pass"...astonishing)

    -cw



  • @CodeWhisperer said:

    (I know, a lot of folks are snickering right now...but I had a candidate with a MSc in comp sci who just stared blankly and said "pass"...astonishing)

    This is a trick question! And you just said you don't ask trick questions...

    If I were to say something along the line of "trim", "left", or "replace", then I sound like a fool. If, however, I go the "regex" route, I sound like a complete idiot.

    What's the answer to this one?



  • @CPound said:

    This is a trick question! And you just said you don't ask trick questions...

    This is about as far from a trick question as you can get.  You're taking input and producing output, the only 'trick' is how you might tackle the problem.

    -cw



  • @CodeWhisperer said:

    This is about as far from a trick question as you can get.  You're taking input and producing output, the only 'trick' is how you might tackle the problem.

    Ok then, this is how I would do it.

    I would sub-contract a more experienced programmer to get the job done.

    Preferably, it would be someone who made it through at least 5 of the 9 circles of hell you typically put your applicants through.



  • @CPound said:

    Preferably, it would be someone who made it through at least 5 of the 9 circles of hell you typically put your applicants through.

    What is it you think constitutes programming, then? 

    -cw



  • @CodeWhisperer said:

    What is it you think constitutes programming, then?

    Touché!



  • @CPound said:

    @CodeWhisperer said:
    (I know, a lot of folks are snickering right now...but I had a candidate with a MSc in comp sci who just stared blankly and said "pass"...astonishing)

    This is a trick question! And you just said you don't ask trick questions...

    If I were to say something along the line of "trim", "left", or "replace", then I sound like a fool. If, however, I go the "regex" route, I sound like a complete idiot.

    What's the answer to this one?

    I'm curious why you wouldn't tackle this either with a set of regexes, or by tokenizing the string along non-numeric chars.  I mean you could just s/[^\d]//, then take the last 10 chars, though you'd have to look at the initial string again for a couple of cases.  That's not perfect, either...
    I don't know what a good programmer would do.  I doubt I'd build an EBNF for it, though.



  • @TheDauthi said:

    I don't know what a good programmer would do.

    Don't you mean "I don't know what CodeWhisperer would do"?

    Sorry, CW, I couldn't help it.



  • @CPound said:

    Touché!

    No.  Really.  

    How is asking someone to write me a 10-15 line function a 'trick question'?  Just because the answer isn't already in your head doesn't make it a trick.  Just because you have a couple choices to make along the way doesn't make it a trick.  Plenty of people work their way through the problem just fine.  Why didn't you even try?   That's what will get you cut from the list pretty much immediately, not even trying.

    What would you have considered a 'non-trick question'?

    And, honestly, how do you feel about your own salary/position now, after this conversation?  Do you think I'm full of shit and asking improper questions?   Do you think that the stuff I'm asking is unimportant compared to just "coding until it is done?"   Do you still think I have ranks of phoneys flooding into the company and filling the 100K+ jobs?  Would have considered you one of those phoneys?  Would you have agreed?  Or would you have thought that I was just to stupid to see your god-like potential?

    -cw



  • @CodeWhisperer said:

    Why didn't you even try?

    I thought I did? I provided some routes I would have taken. Apparently they were completely off base.

    @CodeWhisperer said:

    What would you have considered a 'non-trick question'?

    Something that would require a yes/no answer. Something concrete. Not a question where there are infinite pitfalls where the interviewer (you) can mock the interviewee.

    @CodeWhisperer said:

    And, honestly, how do you feel about your own salary/position now, after this conversation?

    Honestly? I'm completely happy where I am. I'm extremely thankful that I don't have to make it past interviewers (like you - no offense) which make it very difficult to hit the 100K mark. (That's the goal, after all.)

    @CodeWhisperer said:

    Do you think I'm full of shit and asking improper questions?

    I don't think that, however I will say that the usage of profanity is quite unbecoming.

    @CodeWhisperer said:

    Do you think that the stuff I'm asking is unimportant compared to just "coding until it is done?"

    I suppose it's important if you're shooting for an academic C# teaching position. Or maybe you're trying to get a job with Microsoft. Personally, I think most coders don't know all the fancy technical terms and catch-phrases. If they need to learn something, they just google it. (I bet that just ticks you off, huh? The fact that knowledge is so readily available. It ticks me off sometimes when I think about it. The average joe can attain "genius" status in a matter of seconds...)

    @CodeWhisperer said:

    Do you still think I have ranks of phoneys flooding into the company and filling the 100K+ jobs?

    Honestly, I think your company (and many others) have many unqualified people in their 100K positions. How they got there, I have no idea.

    @CodeWhisperer said:

    Would have considered you one of those phoneys?  Would you have agreed?  Or would you have thought that I was just to stupid to see your god-like potential?

    I'm not sure what you're asking here, but I am definitely not a phoney. If I don't know the answer to something I'll just say it. There's no use in wasting my time and the employer's. I would probably not make it past the first round of your interview, simply because the questions are designed to tear people to shreds and leave them whimpering in a corner. No, I can't define "polymorphism". Yes, I failed your telephone method quiz. So what? You would be surprised how creative I am. I have coded apps which "couldn't be coded" according to Microsoft docs. But you would never find things like this out, because I would be eliminated on a whim at the beginning of your interview process.



  • @TheDauthi said:


    I mean you could just s/[^\d]//, then take the last 10 chars, though you'd have to look at the initial string again for a couple of cases.  That's not perfect, either...

    No matter how you do it, better get rid of the +1.

    I don't know what a good programmer would do.  I doubt I'd build an EBNF for it, though.

    I'm not sure if I qualify as "good programmer", but that's what I would do: get at least 2 pages full of examples how the incoming numbers look like, to analyze them which special cases exist and how to recognize and handle them.



  • @CPound said:

    @CodeWhisperer said:

    What would you have considered a 'non-trick question'?

    Something that would require a yes/no answer. Something concrete. Not a question where there are infinite pitfalls where the interviewer (you) can mock the interviewee.

    You must be joking. Yes/No-questions are by far too easily guessable, except when they are, in fact, trick questions.

    @CodeWhisperer said:
    Do you think that the stuff I'm asking is unimportant compared to just "coding until it is done?"

    I suppose it's important if you're shooting for an academic C# teaching position. Or maybe you're trying to get a job with Microsoft. Personally, I think most coders don't know all the fancy technical terms and catch-phrases.

    I'm afraid you are right, that's why we have TheDailyWTF.


    If they need to learn something, they just google it. (I bet that just ticks you off, huh? The fact that knowledge is so readily available. It ticks me off sometimes when I think about it. The average joe can attain "genius" status in a matter of seconds...)

    Google cannot give you knowledge. At least, you have to know what you are looking for, so you need to know at least a part of the answer.



  • CW, please don't take offense by this, but so far this is the image I have of you based on what you have said so far. Let me know how accurate I am.

    I picture you as this fuddy-duddy analyst who proabably programmed in the early C/COBOL days. You are more than likely academic-minded versus business-minded. You miss the university days with a passion. At your present job, you typically pontificate and dispense high knowledge to the unlearned masses beneath you. You require daily confirmation and affirmation of your oh-so-knowledgeable status. Interviewing gives you this god-like power over others which you actually enjoy, because it's a constant I'm right-you're wrong scenario. That's more affirmation of your supreme intellect. One of your favorite television shows is The Weakest Link, for obvious reasons.

    Pretty accurate, huh?

    Feel free to do an assesment of me. I'll let you know how close you are.



  • @ammoQ said:

    @TheDauthi said:

    I mean you could just s/[^\d]//, then take the last 10 chars, though you'd have to look at the initial string again for a couple of cases.  That's not perfect, either...

    No matter how you do it, better get rid of the +1.


    That does. I'm quite sure there are other cases it doesn't handle, though.  You're right, I'd either want more examples, or [in writing] something that says, "This is the format we want you to handle."

    In fact, before I moved it to production, I'd want a very large sample to run a unit test over. 5000 records would not be unreasonable in my company.  Getting 95% of a parse like that is easy; the other 5% is the incrementally harder part.

    CW, I don't know if your questions were unreasonable or not.  I do thank you for giving a few examples.  I've only been through the interview process a few times, and none were very through as technical ability goes.  It was closer to, "What have you written, and do you know anything about this, this or this?  Thanks, goodbye." 

    I definitely agree with CPound in that I don't expect other programmers to know everything; I definitely don't.  Your approach, asking what polymorphism is, seems like it would punish those of us that have trouble remembering what our own names are, especially if there are key phrases that you look for in our speech.  Asking us to code a few things to see how we approach a problem seems far more reasonable, but it also seems very highly domain-specific, in a realm where a lot of people do go by ear, and there's always a new technology to learn.  And, futhermore, a lot of us are driven by the problem itself, and would not think the same when not confronted with it.  This is why we have to redesign things, sometimes.  I think there's a good example of that above, even.

    CPound: I use Google and help docs a lot.  Almost every programmer I know spends probably 1/4 of their time reading docs.  This even undershoots Brooks' findings, probably because of better search tools.  I read them sometimes in my spare time, when I'm working on a project at home.  I don't expect Google to replace my understanding of a problem, but I will definitely use it to augment my knowledge.  I think that is what CW is attempting to say.



  • @CPound said:

    I thought I did? I provided some routes I would have taken. Apparently they were completely off base.

    I asked for a function, not hand-waving.   Regexes are reasonable, though compared to some answers they are rather heavyweight.

    But, wait, you want me to make a decision about who to pay a large sum of money to by an extended version of 20 questions?  Sorry, your job will be to solve problems and write code, so your interview will involve solving problems and writing code.   If you want yes/no questions, apply at McDonalds, they might have some.

    @CPound said:

    I suppose it's important if you're shooting for an academic C# teaching position.

    Err...'academic'?  You cover linked lists in the first semester of a comp-sci program.  If I had asked you about lambda calculus, that would have been academic.  Being able to construct and work with one of the most basic data structures hardly qualifies as 'academic'. 

    Your particular brand of conceit ('I don't need no stinkin' theory') is extremely dangerous.  Remember me talking about people who don't know enough to know they don't know enough?  Who don't even recognize the value in knowing more?  Sorry man, take a look in the mirror.  

    Presented with one of the most basic concepts in computing, you chose not to learn from it, instead you dismissed it as unimportant.   Presented with a basic programming task, you called it a trick question because it actually required that you think your way through a problem.  Why would I pay you anything?

    Why would I go to a doctor who never learned basic microbiology?  Why would I pay an accountant who never learned how to maintain a spreadsheet?  Or a mechanic who has no idea how an internal combustion engine works?   You're doing the equivalent of brake jobs and saying you should be making as much as the guy who designed the car.  Worse, you think that you can go from "brake guy" to "automotive engineer" without actually learning any of that engineering.  "Hydraulics...phhht...that's for college professors".

    @CPound said:

    If they need to learn something, they just google it. (I bet that just ticks you off, huh? The fact that knowledge is so readily available. The average joe can attain "genius" status in a matter of seconds...)

    Then why didn't you do that?   I love that knowledge is readily available, I use it all the time.  My devs use it all the time.  Having a dictionary doesn't make you a spelling bee champion.

    @CPound said:

    I would probably not make it past the first round of your interview, simply because the questions are designed to tear people to shreds and leave them whimpering in a corner.

    My questions are designed to determine how much a person knows, what sorts of problems I can put them on.  The fact that you don't know as much as you think isn't the fault of my interview questions. 

    The StringBuilder problem is a real problem that I've had to solve (before .NET had it), the "standardize this phone number" is something I had one of my junior devs build for me.  These weren't tricky problems. 

    @CPound said:

    No, I can't define "polymorphism". Yes, I failed your telephone method quiz.

    Err...I said if I was going to ask for definitions, I'd go to something like that.  I don't ask a lot of definitions, I ask people to describe how they would solve a problem, and if that problem would be well served by polymorphism, then I hope to see it, even if the person doesn't know the term.  

    @CPound said:

    You would be surprised how creative I am.

    Throwing code at a problem isn't creative; in fact, it's the exact opposite of creative.

    Let me give you an example...I recently replaced a small system that was running weekly.  It's not really important what it did, it just woke up once a week, spent 48 hours pushing the dbs to 100% usage (killing other apps in the process), and went back to sleep.  It was creative as all get out. 

    I replaced it with about 500 lines of C# and it now runs in 5 minutes.   In part it was the fault of the DB developers for creating the normalized-dbs-from-hell, mostly it's because they didn't know how to recognize an n-squared algorithm when they saw one.   It worked fine when they were processing 1000 items, less good at 10,000 items, but by the time they were in the millions, this beast was killing them.  Does that sound academic? 

    I don't want 'creative', I want good, I want solid.  If you can do that while being creative, then fine...but you've as much admited that you don't know how to tell if one solution is better than another one, so how will you know if your creative solution is a good one? 

    @CPound said:

    But you would never find things like this out, because I would be eliminated on a whim at the beginning of your interview process.

    No...but insisting that the things I was looking for weren't important would. 

    -cw



  • Wouldn't it be nice if interviewers had standardized tests to give to their applicants? This wouldn't be easy, mind you. It's not like you could get a copy of the test beforehand and cheat.

    It would go something like this...

    10 true/false questions
    5 definitions
    15 multiple choice
    1 essay

    The essay would be along the lines of "Give me an example of a time where you had a problem and what you did to solve it".

    The applicants would complete this test, and based on their responses, he/she would be selected for the 100K prize position.

    Face-to-face interviews are highly overrated. After all, personality can be faked.



  • @CPound said:

    Pretty accurate, huh?

    If 10-20% qualifies, maybe.  I miss college, mostly for the beer and the girls. There were a lot of interesting problems, but academics have no idea how to write code for the real world.

    @CPound said:

    You are more than likely academic-minded versus business-minded

    That would explain why I get brought in so often to fix business systems.  No business sense whatsoever, clearly.   That's why I saved my present employer millions this year, and why one of Paul Allen's companies is trying to bring me in as a VP.  No business sense at all.

    @CPound said:

    At your present job, you typically pontificate and dispense high knowledge to the unlearned masses beneath you

    If by that you mean that I try to explain to my junior developers why that n-squared solution sucked, and how it cost the company a $1M+ because they did it that way, then I guess so. 

    My job is to guarantee the long term reliability, scalability & extensibility of the systems used by a $100M/year company.  A lot of those systems suck because they were built by people who didn't realize there was a betterway to do it.   Thats a big part of why we're not a $200M/year company yet.  The systems won't scale, we can't pursue new business opportunities, they're flaky and piss off customers who leave, or they take a huge amount of effort/manpower to manage.  That's what you're offering to contribute to, more of that.

    I don't honestly care what you think about me.  I'm extremely well respected in my field, and in other fields and by people who are a hell of a lot smarter than I.  I don't need your validation, thanks.   On the other hand, if you want the high paying jobs, you need the validation of people like me.

    Pucker up.  Or don't. I can't stand that.

    @CPound said:

    Feel free to do an assesment of me.

    You're the sort of person I'm hired to clean up after.

    -cw



  • @CodeWhisperer said:

    I miss college, mostly for the beer and the girls.

    No comment.

    @CodeWhisperer said:
    My job is to guarantee the long term reliability, scalability & extensibility of the systems used by a $100M/year company.

    I don't mean to burst your bubble, but $100M/year? Is that a lot in your book?

    @CodeWhisperer said:

    I don't need your validation, thanks.

    But it would be nice to have it, wouldn't it?

    @CodeWhisperer said:

    Pucker up.

    Eww. That's gross.



  • @CPound said:

    I don't mean to burst your bubble, but $100M/year? Is that a lot in your book?

    Now you're reaching.  It would be worth doing right if it was only $1/M a year.

    @CPound said:

    Eww. That's gross.

    Grow up. 

    So you're not the programming god you believed yourself to be.  Why would you have imagined that a self-taught 23-year-old SHOULD jump straight into the senior positions?  Because you brute-forced your way through a couple solutions?  Give me a break, I get a dozen candidates a month just like you.  I'm sorry, your skill set is not unique.  It's a good start, but you're about two steps down a very very long path, a path that a lot of people have moved further down than you have so far -- and you're still insisting that you're at the end of it.

    In 10 years you'll either look back on this conversation and feel very embarassed, or you'll be complaining about how unfair the industry is. Do yourself a favor and accept that you have a lot more to learn, then go learn it.  You'll get to do way more interesting things and get paid better for it.

    -cw



  • @CPound said:


    It would go something like this...

    10 true/false questions
    5 definitions
    15 multiple choice
    1 essay

    I don't even know what to say about that.   You started off saying that the interview process wasn't good because it allowed people who didn't know anything except definitions through...and your proposal is to ask them exactly that sort of thing? 

    Why don't you just say what you really mean, "Interviews should be set up so I always pass them".

    -cw



  • I'd like to go on record as saying that I'd really like CodeWhisperer to interview me.  Because from what's been said, he does the type of interviews I really enjoy.  None of the bullshit "straight from  a book / google" questions, but stuff that really makes you think about what you're doing, stuff that makes you solve problems on the fly.  Y'know, the stuff that you're expected to do day-to-day.  The stuff you got into development to do (presumably).

    CPound states that he thinks CW is an "academic" type; that may be in some respect true - in order to be a good interviewer, you also have to be a good teacher.  Certainly the people who have really made me sweat in interviews have been the people I've subsequently gone to with gnarly problems to headbang over possible solutions.

    One of the best interviews I ever did was completely language-agnostic once we got past the "basic questions" point, the guy had me derive a memory management system for a very specific problem domain from pretty much first principles.  Just a whiteboard and some markers, and the interviewer poking holes in everything I did.  It was a scream.  He took me down the pub afterwards and we got drunk together.  Which was also part of the interview.

    Simon


  • ♿ (Parody)

    @CodeWhisperer said:

    In 10 years you'll either look back on this conversation and feel very embarassed, or you'll be complaining about how unfair the industry is. Do yourself a favor and accept that you have a lot more to learn, then go learn it. 

    Ahhh, yes. I remember being on the "CPound" side of conversations like this back when I was younger and knew everything. Thank goodness I didn't use my real name on usenet back in those days. Now if only I could forget my old handle, I could rid myself of these embassing memories :-)



  • @Alex Papadimoulis said:

    Ahhh, yes. I remember being on the "CPound" side of conversations like this

    I know that I probably came across has horribly arrogant from CPound's point of view; but like you, I was in that mode myself when I was in my early 20s.  I had done some pretty damn impressive things (or so I thought) and wasn't going to take advice from any one. 

    It happens, especially for smart people.  Especially if you're self-taught.   It's so easy to get seemingly impressive results out of software, it's hard to imagine why you'd need to know all that academic stuff...untiil you know it.

    -cw 



  • @CodeWhisperer said:

    Grow up.

    Hey, you're the one who said "pucker up", not me.
    @CodeWhisperer said:
    Why would you have imagined that a self-taught 23-year-old SHOULD jump straight into the senior positions?

    Because it happens all the time? I personally know several people that received 100K+ positions right out of college.
    @CodeWhisperer said:
    Give me a break, I get a dozen candidates a month just like you.

    I'm thinking you don't. I am very vocal during my interviews. I have walked out of several. If you were to pontificate and act the way you have like you did in this conversation, I would have told you where to go. That probably would have shocked you, huh? That a candidate has a mind of their own and speaks up for themselves? Imagine that.
    @CodeWhisperer said:
    I'm sorry, your skill set is not unique.

    Ok, you have a point there. (I'm big enough to admit when someone's right.)
    @CodeWhisperer said:
    In 10 years you'll either look back on this conversation and feel very embarassed, or you'll be complaining about how unfair the industry is.

    In 10 years I plan to be making 200K minimum. The 100K thing is a temporary stepping stone to greater things. I never sit still.
    @CodeWhisperer said:
    Do yourself a favor and accept that you have a lot more to learn, then go learn it.

    I have had no use for concepts like polymorphism, and probably never will. Those are all academic concepts which have no basis in the real business world. Sorry, I'll spend my time doing something fun. Life is too short. I'm not going to spend my nights and weekends studying abstract ideas and theorems when there are parties to attend.
    @CodeWhisperer said:
    You'll get to do way more interesting things and get paid better for it.

    I'm going to get paid better regardless. I'll find a way, maybe not through your company, but through some other one where the interviews are easier. I'm going to make my 100K. You can't stop me. And when I hit that mark, I'm going to post to the DailyWTF and let you all know about it. It shouldn't take more than a couple months, tops. (I can hear you fuming now, but what'cha gonna do?)



  • @CPound said:


    In 10 years I plan to be making 200K minimum. The 100K thing is a temporary stepping stone to greater things. I never sit still.

    Please stop it. Saying such things make you look like an overweening teenager.

    I have had no use for concepts like polymorphism, and probably never will. Those are all academic concepts which have no basis in the real business world.

    And this statement makes you look extremely ignorant, too. Chances are you are already using polymorphism in your programs and do not even know it. Anyway, learn the basics if you want to do good work.

    Sorry, I'll spend my time doing something fun. Life is too short. I'm not going to spend my nights and weekends studying abstract ideas and theorems when there are parties to attend.

    Here's that teeny feeling again.

    I'm going to get paid better regardless. I'll find a way, maybe not through your company, but through some other one where the interviews are easier. I'm going to make my 100K. You can't stop me. And when I hit that mark, I'm going to post to the DailyWTF and let you all know about it. It shouldn't take more than a couple months, tops. (I can hear you fuming now, but what'cha gonna do?)

    I hope your father is the owner or CEO of a company which can cope with paying you 100K or more despite your apparent lack of basic knowledge and your appaling ignorance. Being the owner's son goes a long way, I've seen that before.



  • @ammoQ said:

    Please stop it. Saying such things make you look like an overweening teenager.

    The problem with most of the people in this forum is that they are intimidated by the younger generation. The new generation is moving much faster, and climbing the corporate ladder more quickly than any previous generation. It sucks for the old school to see all these guys in their early 20's making major $$$. I try to see it from the "fuddy-duddy" viewpoint, and hey, I would be pissed too.



  • @CPound said:

    Because it happens all the time? I personally know several people that received 100K+ positions right out of college.

    So maybe that college stuff is useful?


    @CPound said:

    @CodeWhisperer said:

    Give me a break, I get a dozen candidates a month just like you.

    I'm thinking you don't. I am very vocal during my interviews. I have walked out of several. If you were to pontificate and act the way you have like you did in this conversation, I would have told you where to go. That probably would have shocked you, huh? That a candidate has a mind of their own and speaks up for themselves? Imagine that.

    You really have to stop assuming that no one has ever met anyone like you. 

    @CodeWhisperer said:

    I have had no use for concepts like polymorphism, and probably never will.

    You just told a forum full of programmers that you have no interest in learning the basic tenets of object oriented design.   Care to rephrase?  

    @CPound said:

    @CodeWhisperer said:

    You'll get to do way more interesting things and get paid better for it.

    I'm going to get paid better regardless. I'll find a way, maybe not through your company, but through some other one where the interviews are easier. I'm going to make my 100K. You can't stop me.

    I thought you weren't one of those people who were all about the money and cheat to get into jobs they aren't qualified for?  I don't really care if you are, but you should at least be honest to yourself.

    @CodeWhisperer said:

    (I can hear you fuming now, but what'cha gonna do?)

    You have dramatically overestimated the extent to which I care.   You asked some questions about the industry and salaries and interviews.  As one of the people who actually does the hiring for those jobs -- I'm paid to spot people like you -- I thought I could share some insight.  If you want to plug your fingers in your ears and pretend that the guy who does this for a living is full of it, that's fine with me, but the fault doesn't lie on my end of the conversation. 

    Good luck hitting that $200K mark.  I'm almost there myself.    You won't make it as a standard dev, though.  The last 'dev' position at that level I saw near that level was doing virtual machine work...it actually required that you know how the processor works, how memory works, all that stuff that you never bothered to learn.   No doubt you'd claim that was all academic and unnecessary as well.

    Maybe you could start your own consulting company, you might get there then.  There are a phenomenal number of those out here who do crappy work which I get hired to clean up.  They get paid good money for poor quality work all the time.

    -cw



  • @CPound said:

    @ammoQ said:
    Please stop it. Saying such things make you look like an overweening teenager.

    The problem with most of the people in this forum is that they are intimidated by the younger generation. The new generation is moving much faster, and climbing the corporate ladder more quickly than any previous generation. It sucks for the old school to see all these guys in their early 20's making major $$$. I try to see it from the "fuddy-duddy" viewpoint, and hey, I would be pissed too.


    Sorry boy, but now you really make me laugh. When I was in my 20s, that was in the 90s. The internet boom, Y2K and the EUR conversion together had lead to a serious lack in IT talent that made it all too easy for us to make truckloads of money. For that reason no, I don't care about how fast you think you are climbing the corporate ladder, because I already know you've missed that golden opportunity. Anyway, I'm not at all against young people. It's just your complete ignorance that makes you look like a fool. You don't know basic concepts, you are unable to solve simple real-world problems but you still think you are a star. Good luck when you meet the real world.


Log in to reply