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: >> > I've spend over 12 years in something called 'the demoscene' >> >(www.scene.org ), it's basicly nerd heaven for lowlevel programming. I can >> >tell you, a lot of people there beat anyone in these simple algo tests, >> >however they're unable to do a big class design, simply because they have >> no >> >education in that area. >> >> no education? or no experience? > > 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.... >tests. But will fail miserably on the job. That's why you should test the >person with work they have to do on the job. Diplomas then additionaly show >the person has the drive and skill to complete a uni-course. Will he fail miserably on the job.....he may do....there are no guarentees...but if he's clever enough to do as you say, and has drive, then I see no reason to reject him....the tests in this context would seem to be valuable. > >> >> if someone can't reverse a string >> >> in place or work out the longest run in a string then they probably wont >> >> be able to thing of sensible ways to create invoices associated to a >> >> supplier relating to a specific product.... >> > >> > I see 0.0 overlap between the two. Reversing a string is a low- >> level >> >algo and if you don't know how to do in-place buffer copying or reversing >> or >> >whatever you want them to do (in place reversing of ints without >> variables, >> >that's also a nice one, but only for people who think fiddling bits is >> what it >> >takes to be a software engineer), >> >> I completely disagree...the swapping of numerics without variables is >> a 'trick' used by assembly programmers....you either know it or you >> don't....the ability to write simple procedural algorithms is a critical >> programming skill, used every hour of every day, are you really claiming >> that a competent C# programmer wouldn't be able to reverse a string with a >> loop? > > I bet a lot of C# programmers will write a routine which fails with a >string of uneven length. ;) lots would....would a good one be more likely to get it right than a bad one? yes....it's a no brainer. > > 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. >> 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. > What will the person do then? Look it up? Ask? Try for hours? Do you >think you can find that out with tests which have well known algo's? the test will be in situ.....they're not going to have hours to look it up.....I can write a string reverser in about 5 minutes.....and thats with a cup of coffee and a sleep. > >> > Remember: interviewing for a job is often totally difficult >> compared >> >to the real job. >> >> difficult? or different? > > different, my bad. yes....so? > >> either way....they are not completely unrelated...I am trying to assertain >> the ability to do the job....long term. > > IMHO impossible to determine from a junior with little experience: you >then want the hire to have the ability to learn and find things out for >themselves quickly. You then need to hire them for a week or so to test them >through. I agree..but this is not how the job market works...you don't get people giving up a full time job to be hired for a week or two....they do have a probationary period, but I think you want to be as sure as you can before you start ruining peoples careers by laying them off after probationary. > >> > Also, if I was given the tests you proposed, I'd have left right >there >> >on the spot, simply because the tests would show that you don't know what >to >> >ask from me, as I don't expect to write atoi routines or string reversers. >> >> maybe that's part of the test...if you can't be bothered to sit a simple >> test, I probably wouldn't want to employ you....asking you to do voluntary >> overtime, or fix a bug would seem to be a nightmare in comparison. > > Though do you make the right decision then? Perhaps the person walking >away makes the decision that the company who wants to hire him is not capable >of putting up a decent interview, so what else is flaky? Perhaps.....perhaps tells me nothing.....perhaps is an observation that all in life is not deterministic. I don't expect guarentees, I'm just trying to get something useful out of a thirty minute test. > >> >> if they can't think in a >> >> coherent and organised algorithmic manner then they wont be able to >> >> design a new auto pilot....who gives a 'hoot' if they know how to do the >> >> specific task I'm going to ask them to do next week, and outperform >> >> other more able candidates who aren't up to speed on the latest version >> >> of ASP.net, if they are basically not as good as I can get over the >> >> longer term. >> > >> > That's something you'll never know, but definitely won't get >> >determined with tests which take a few lines of code. >> >> Again you seem to claim that you would not expect C# programmers can't >> reverse strings in place, any more than a random person off the >> street....a claim I find bizarre. > > If that C# developer writes websites all day, why would I expect that >person to be able to reverse strings in place? S/he probably will come up with >an algo but a random person of the street has the same chance. And what if the >person is able to do that? Is that person then a good developer and thinks >with the right mindset? I see 0.0 reason to find that true. OK....then we fundamentally disagree...and we may as well leave it at that....I find it a bizarre belief. > >> > 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. > > 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. I would expect less than 10% to know anything about acyclic graphs....or at least in those terms. > > 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! > > You apparently haven't heard of topology sort. SO if I was the >interviewer and you were the interviewee, you would likely fail. Another >person, who would have heard about it, would likely succeed. fine....you can go and employ all the people who know about 'topology sorts'....and I'll have the ones that can apply simple algorithmic techniques. > > 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? > >> > If someone tries to re-do that topology sort algo by re-doing >> years of >> >graph math science in that interview, what does that tell you? Isn't it >> more >> >wise to hire someone who will tell you "THe algorithm is on the internet >> and >> >in Sedgewick, I don't have it with me but it will take 2 minutes to write >> it, >> >tops". What would you answer then? "You're lazy" ? It's the correct >> answer! >> >> programming is about the application of that knowledge. >> I don't know what you're getting at. >> If a programmer can't do a simple loop then I'm not interested. > > EVERY programmer can write a simple loop. That's why these tests are >so stupid! what if they fail! 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'. > > What I was getting at was: if the dayjob requires a complex algo, the >person can: >1) spend all day fiddling with inferiour crapcode s/he cooked up themselves, >simply because the scientific research leading to the solution isn't known by >them > >or >2) ask a collegue (like you want that 10 times aday) > >or >3) go on the internet, do research about what others have found out, learns >stuff along the way, reads some articles and after a couple of hours perhaps >has found what to do and writes the code. > > I'd pick the person who does 3 and the rest can go home. depends how long it took.....if I want them to reverse a string and they spend a couple of hours on the internet....then they can go home. > >> > An assignment to do might take an hour for example but has to be >> >reflecting what they have to do on the day they're starting, right? Or >> >something you want them to grow into perhaps. If you want them to pass a >test >> >which is suitable for them in 2-3 years time, you've invited the wrong >people >> >and have placed the wrong ad. :) >> >> ? >> interviewing is a crude way of trying to use crude correlations between >> measurable (possibly qualitively) metrics and how productive they will be >> as an employee....I don't think it's unreasonable to expect a programmer >> to be able to apply simple procedural algorithms.....if you don't think >> there is a correlation, fine....you can get all the people who can't do >> loops working for you on the cheap.....good luck. > > 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. And I would much rather have 'procedural script-like OO code' than 'deep class hierarchies no-one will understand'?....the people with all the buzzwards, patterns, Agile techniques who cannot write simple algorithsm will *probably* give me the latter. > > 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?'. =================================== This list is hosted by DevelopMentorĀ® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com
