Test the candidate at the abstraction-level that his work will be done
on. Actually this thread nicely points out what limited knowledge some
interviewers have of the .net Framework!

Ask yourelf: when you interview someone for a C job, would you ask him
questions related to assembly instructions, and how the CPU switches
thread context? I don't think so - a C programmer doesn't need to
know! All this is already nicely abstracted by the OS, compiler, etc.

Does a JUNIOR .net programmer need to know how to reverse a string in
place? I think knowing to call stringInstance.ToCharArray().Reverse()
is enough to make me happy ;o)

-Ernst Kuschke
C# MVP
http://dotnet.org.za/ernst

On 9/24/07, Mark Nicholls <[EMAIL PROTECTED]> wrote:
> On Fri, 21 Sep 2007 18:29:25 +0200, Frans Bouma <[EMAIL PROTECTED]> wrote:
>
> >> On Fri, 21 Sep 2007 16:31:04 +0200, Frans Bouma <[EMAIL PROTECTED]>
> wrote:
> >> >> On Fri, 21 Sep 2007 15:28:58 +0200, Frans Bouma <[EMAIL PROTECTED]>
> >> wrote:
> >> >        Often no experience and likely not really that much education
> >really.
> >> >Say you have a guy who's 18. Does that person have a lot of education
> in
> >class
> >> >design, knowledge about what makes software maintainable etc. ? no. But
> >that
> >> >person can likely be able to write for you a killer quaternion based 3D
> >object
> >> >rotator. The right person for the job? He'll likely pass all your low-
> >level
> >>
> >> If he can learn to write "quaternion based 3D object rotator"...then he
> >> can probably learn how to do lots of stuff useful to me....
> >
> >        But he lacks serious knowledge of software engineering, computer
> >science. Being able to write code doesn't mean you know much about the
> >fundamental elements of computer science. Like a thing called a parser.
> Not a
> >lot of people know how a parser, lexical analyzer, grammars etc. work.
> What
> >LR(n) means, what the difference with LL(n) is and why it's a fundamental
> part
> >of computer science.
>
> it may (or may not) be a fundamental part of computer science but I'm not
> employing academics for the sake of it.
>
> >
> >        You don't need to know how it works to write a loop and a sorter.
> >Though the knowledge is key for a succesful software engineer. Let me
> refer to
> >Yegge for a brilliant piece why this is so:
> >http://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html
>
> seems like ivory tower nonsense to me.
>
> >
> >        Look, if you're looking for a guy who can hammer in code, you're
> >probably not looking for a person who knows fundamental stuff. But then
> this
> >person won't evolve further towards a software engineer he could be, only
> the
> >lucky ones will.
>
> seems a rather elitist view.
>
> >
> >> >        And even then: would you want to hire a C# developer who
> doesn't
> >use
> >> >framework classes for this? Or one who DOES use framework classes for
> this?
> >>
> >> don't care...I'm interested in how it's done.
> >
> >        You don't care? So you don't mind hiring a NIH (Not Invented
> >Here)-syndrom person?
> >
> >> >> would it matter if it were a string or a set of delegates in a
> generic
> >> >> collection used for event handlers?...does that somehow make it more
> >> >> relevant?
> >> >
> >> >        If someone is faced with these problems, they'll likely look
> up the
> >> >algorithm and implement that. You say it's a junior position. So the
> person
> >> >hired has little knowledge about all the algorithms out there, only a
> few
> >of
> >> >them are known by the person. So it's likely the person will run into
> >problems
> >> >which ask for an algo which isn't known.
> >>
> >> you seem to have the notion that all algorithms come from web
> sites....do
> >> you google every time you wanted to write a loop?....surely not.
> >
> >        algo != loop.
>
> ? algorithms without mathematical recursion (i.e. in CS iteration), are
> pretty weak.
>
> >
> >        I also don't think algorithms just come from websites. I do know
> that
> >if you don't look for the algorithm, you'll likely re-invent it... poorly.
>
> to do the fizz buzz program, I need to loop through the numbers 1 to
> 100...do I really need to look this up.
>
> >
> >        Unless it's a deadbeat loop of course.
> >
> >> >> >        Remember: interviewing for a job is often totally difficult
> >compared
> >> >> >to the real job.
> >> >>
> >> >> difficult? or different?
> >> >
> >> >        different, my bad.
> >>
> >> yes....so?
> >
> >        so conclusions drawn from the PERFORMANCE of the person on the
> >interview are actually pretty flaky, IF the tests aren't that great,
> because
> >the pressure to do it right the first time and not to make a single
> mistake is
> >extremely high for the interviewee.
>
> Thats why you interview them after the test.....you go through it and
> guage why they did it the way they did it.
>
> >
> >> >> >        For example, most algorithms to use on a daily basis are
> already
> >> >> >discovered and documented in full on the internet and in books. Like
> >'sort
> >> >> >this DAG in the right order so all jobs represented by nodes are
> >enlisted
> >> >> in the right order for execution'. Sounds tough? No, it doesn't.
> >> >> ?
> >> >> I'm not asking them to invent an algorithm....just apply it.
> >> >
> >> >        Topology sort of a DAG is simple graph math, every CS student
> gets
> >it.
> >> >So if someone can't do a depth first search through a graph, s/he has
> no
> >> >knowledge of graphs. It's not inventing an algo, it's a well known
> algo.
> >> That is, if you have had that education.
> >>
> >> I would not expect a junior or senior programmer to understand what you
> >> are talking about....I have a masters in maths......and I don't
> understand
> >> what you're talking about......it's the demonstration of knowledge....I
> >> want a demonstration of ability.
> >
> >        You have a degree in math and you don't know what a Directed
> Acyclic
> >Graph is?
>
> I do know what an acyclic directed graph is.....not a topological sort.
>
> > Topology sort is a simple algo based on depth based first graph
> >traversal, a typical math-applied-to-data structures Computer science
> example.
>
> well done, so?
> >
> >
> >        It's not really important, what I wanted to illustrate is that IF
> a
> >person knows a given algorithm, the person can answer the questions in the
> >field of the algo, but that doesn't say anything, only that the person
> >understands the algo.
> >
> >        I.o.w.: it doesn't test wisdom, just knowledge.
>
> ? it's the intelligent application of knowledge.
>
> If I pick a random question which is the simple *application* of a loop
> and an if....unless someone happens to have studdied by complete chance my
> version of FizzBuzz then they will have to engage their brain....that
> application is what I am testing.
>
> >
> >> >        I mentioned it to illustrate that the algo YOU pick to test,
> might
> >be
> >> >well known or easy, but might be for others hard to do and vice versa.
> >> ?
> >>
> >> all algorithms are not created equally...
> >> I would expect all programmers to understand simple iteration...i.e. a
> >> loop.
> >
> >        duh. I expect them also to understand what control flow means, but
> >that doesn't mean anything w.r.t. algorithms.
>
> programs are instances of algoritms...they are almost synonymous!
>
> >
> >> I would expect less than 10% to know anything about acyclic graphs....or
> >> at least in those terms.
> >
> >        You do? Graphs are a fundamental part of computer science. I bet
> >almost all programs have one or more graph-like datastructure internally,
> e.g.
> >a tree. So if a person had a good CS education, s/he would know about
> them and
> >a test based on them is easy for these people.
> >
> >        A person who did something else, has a hard time. If that person
> then
> >has to do the same test, s/he'll likely fail. That's illustrating the
> lameness
> >of these tests.
>
> the lameness of your test about acyclic graphs......a test that happened
> to be about programming acyclic graphs would be more interesting.....a
> question about them (at least in those terms), just proves you probably
> read too many books.
>
> >
> >> >        If you tell the junior to navigate through the graph and find
> all
> >> the
> >> >paths, it's the same as string reversal: the algorithm sounds OK, it
> tests
> >> >basic simple first grade programming 101 skills no-one bothers about,
> and
> >it
> >> >tells you nothing about the true knowledge of the person.
> >>
> >> what if they fail!
> >
> >        then nothing, they might got too nervous to write something
> solid, or
> >didn't have enough time or got lost because they don't have any docs at
> hand.
>
> yes they might....but that is as true for someone who can do it, as
> someone who can't...the other difference is that people who can't do
> it...*can't*, by definition...so you would expect more of them to
> fail....whichs means probably have a better statistical correlation than
> just picking people called John....you will never find someone who can't
> program, write a sensible program...unless you gots lots of monkeys and
> lots of typewriters, and lots of time....they'll have about an hour to do
> something that would take you five minutes, and a monkey about 10,000
> years.
>
> >
> >> >        Did I pick the right person? Undefined: based on that algo
> test,
> >you
> >> >can't tell anything about the true skill of the person.
> >>
> >> no?
> >
> >        It's your interview, but I'd say: no.
>
> nothing?...absolutely nothing?...so you ask them to write a simple
> program...they write it, it works perfectly, and explain to you in
> intelligent detail why they did it that way....conversations about
> patterns, OO, design by contract, extensibility.
>
> but you cannot guage anything about this person compared to someone who
> writes a program that doesn't compile, who can't tell you why it doesn't
> compile, has never heard of a loop...let alone a class or UML.
>
> wierd....I'll employ the 1st one and you can have the 2nd.
>
> >
> >> >        EVERY programmer can write a simple loop. That's why these
> tests
> >are
> >> >so stupid!
> >>
> >> what if they fail!
> >
> >        the same thing as what if they succeed?
>
> no it's not....you need to look up hypothesis testing (which is
> effectively what we are doing).....
>
> P(good programmer/success) != P(good programmer/failure)
>
> you can use a monkey and a CS graduate as two test cases if you
> like....you would seem to claim they are as likely to pass as each
> other.....and give me reasons why in an interview afterwards.
>
>
> >
> >> the deduction that the information gleaned from a test that everyone (by
> >> premise) succeeds at is none, is trivial.
> >>
> >> YOU failed the test.....you didn't do it 'in place'.
> >
> >        hehehe, so you have made a conclusion, based on that? Yeah, I'm a
> >lousy programmer who can barely code his way out of a wet paper bag ;)
> >
> >        Of course I failed. You would too. Because it's impossible due to
> >technical limitations.
>
> well done you passed the interview!
>
> I would have failed.
>
> my mother would have failed.
>
> do you think the probability of you failing the test and passing the
> interview is the same as for my mother?
>
> >
> >> >        What's the point of testing procedural stuff in an OO
> environment?
> >Do
> >> >you want them to code procedural script-like OO code? Or do you want
> them
> >to
> >> >write OO code? Do you want them to write deep class hierarchies no-one
> will
> >> >understand? Or do you want them to do the right thing?
> >>
> >> OO is a generisation of procedural programming (at least in the context
> of
> >> imperative languages)....if they can't write procedural code....they
> can't
> >> write OO code.....I don't view (good) OOP as a basic skill.....I do view
> >> procedural programming as one.
> >
> >        fundamentally wrong, IMHO. A procedural oriented developer might
> be
> >able to write classes, and it looks 'ok', but the code inside the classes
> is
> >procedural, not OO. Code will likely ask data from objects to do stuff in
> a
> >method instead of telling an object to do things. Fundamentally different
> and
> >a procedural oriented person won't grasp that.
>
> IMHO this is not a good definition of OO, but the difference between event
> driven and flow driven programming. Yes OO is generally 'better' at
> implementing such solutions, but procedural types will argue that callback
> functions server the same purpose.
>
> >
> >> >        You can't determine that from isolated tests which test basic
> stuff
> >> >learned on page 1 of every language book.
> >>
> >> YOU failed the test.
> >> I assume you failed it, not because you can't do it, but because you
> >> didn't clarify the question....I would then make a note 'does not
> clarify
> >> requirements?'.
> >
> >        As a matter of fact I looked for the String.Reverse method, then I
> >remembered there was an array reverse method, so I went that route and
> mailed
> >it. Later on I realized the question itself was bogus because strings are
> >immutable.
> >
> >        One could argue that missing a requirement is bad. The in-place
> >requirement could have consequences for very large strings in-memory: not
> >doing it in-place isnt possible or very slow. (let's assume the strings
> are
> >mutable).
>
> (complete aside)...why would it be slow?
>
> >
> >        So yes, I've failed your test, in that light. Though my code was
> just
> >to illustrate that it's trivial which was your question.
>
> !
>
> which is why I asked the question originally.....
>
> there are tests for C programmers....I asked the question to glean
> sensible C#/VB.net questions.....
>
> >
> >> >        So I failed your test and you would not hire me. See how silly
> this
> >> >is? :)
> >>
> >> I didn't because I researched the questions on the internet before
> asking
> >> any real candidates!....
> >>
> >> and if you had done the question you would have done nicely in the
> >> interview by pointing out it was impossible.
> >
> >        though that would illustrate nothing, just that I know strings are
> >immutable.
>
> which demonstrates a knowledge of the dotnet framework......I'd rather
> have had a demonstration of programming competence, but the question, as
> you have demonstrated, doesn't do that...at least for the more
> knowledgable candidates.
>
> > The thing is: do you want a person who knows things about computer
> >science or do you want to hire a person who can hammer code?
>
> I want someone who can write code....if they know what a graph is then,
> probably thats even better.
>
> > because those
> >aren't the same things. As it's a junior job, you likely want the latter,
> but,
> >it's very very hard without proper uni education to get from junior to the
> >spot where you do know about fundamental computer science elements WITHOUT
> >selfstudy.
>
> I don't believe you need to get to the 'fundamental computer science
> elements' to be productive and successful.
>
> >That'll cost a lot of selfdicipline, which his often ignored,
> >because why would you want to learn about those dry crap if you know how
> to
> >write a loop? ;) :)
>
> >
> >> But thankyou.....reversing strings in place is not a sensble c#,
> question
> >> thats what the OP was about.
> >>
> >> Any thoughts about any other questions? :-)
> >
> >        Ask a complex algorithm, in line with the job, and not to let them
> >write it in code, but to let them explain how they will handle this.
>
> they get that, as well....
>
> >
> >        But I think it's best to let them do an assignment in line with
> the
> >job.
> >
> >                FB
> >
> >===================================
> >This list is hosted by DevelopMentor(r)  http://www.develop.com
> >
> >View archives and manage your subscription(s) at
> http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentor(r)  http://www.develop.com
>
> View archives and manage your subscription(s) at http://discuss.develop.com
>


--
Ernst Kuschke
MVP - C# (South Africa)
http://www.ernstkuschke.com

===================================
This list is hosted by DevelopMentor®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to