{"id":3385,"date":"2009-08-24T18:07:17","date_gmt":"2009-08-24T16:07:17","guid":{"rendered":"http:\/\/www.glorf.it\/blog\/?p=3385"},"modified":"2009-08-12T22:10:48","modified_gmt":"2009-08-12T20:10:48","slug":"bewerbern-auf-den-zahn-fuehlen","status":"publish","type":"post","link":"http:\/\/www.glorf.it\/blog\/2009\/08\/24\/sql-talk\/bewerbern-auf-den-zahn-fuehlen","title":{"rendered":"Bewerbern auf den Zahn f&#252;hlen"},"content":{"rendered":"<p>Mein Kollege Peter machte mich auf einen Tests f&#252;r Bewerber aufmerksam. Man solle Ihnen eine leichte Programmmieraufgabe geben, um die F&#228;higkeiten des Kandidaten zu erleben. Als Beispiel soll ein Programm die Zahlen von 1 bis 100 ausgeben. Ist die Zahl hingegen durch 3 teilbar, dann statt dessen &quot;Fizz&quot;. Ist sie durch 5 teilbar, dann &quot;Buzz&quot;. Ist sie aber durch 3 und 5 teilbar, dann &quot;FizzBuzz&quot;. Erstmals beschrieben wurde das offenbar im Artikel &quot;<a href=\"http:\/\/imranontech.com\/2007\/01\/24\/using-fizzbuzz-to-find-developers-who-grok-coding\/\">Using FizzBuzz to Find Developers who Grok Coding<\/a>&quot;.<\/p>\n<p>Das Ganze hat zwei Aspekte:<\/p>\n<ul>\n<li>Taugen solche Tests &#252;berhaupt, um im Bewerbergespr&#228;ch wertvolle Erkenntnisse zu sammeln? <\/li>\n<li>Und wie ist die TSQL-L&#246;sung dieser konkreten Aufgabe&#8230; \ud83d\ude09<\/li>\n<\/ul>\n<p>Ich bin unsicher wegen der Aussagekraft: Ich pers&#246;nlich w&#252;rde gut ausgearbeitete Tests zur Auswahl der Bewerber bef&#252;rworten, um einfach besser einsch&#228;tzen zu k&#246;nnen, ob sie die gew&#252;nschten Qualifikationen haben. Leider kann ich in Bewerbergespr&#228;chen nicht so gut einsch&#228;tzen, was die Leute nur sagen und was sie tats&#228;chlich k&#246;nnen. Leider erlebte ich schon, dass die Selbsteinsch&#228;tzung und dementsprechend die Darstellung der Bewerber stark von der Wirklichkeit abwich.<\/p>\n<p>Aber was sagt so ein Luschi-Test aus? Ich nehme mal an, dass er nur die totalen Blender ausfiltert, oder? Hat er sonst noch einen positiven Effekt? <\/p>\n<p>Jetzt zum spa&#223;igen Teil. In dem oben genannten Blog-Beitrag bringt jemand eine TSQL-L&#246;sung:<\/p>\n<p><code lang=\"sql\">declare @counter int<br \/>\ndeclare @output varchar(15)<br \/>\nset @counter = 1<br \/>\nwhile @counter < 101\nbegin\n\tset @output = ''\n\tif @counter % 3 = 0\n\t\tset @output = 'Fizz'\n\tif @counter % 5 = 0\n\t\tset @output = @output + 'Buzz'\n\tif @output = ''\n\t\tset @output = @counter\n\tprint @output\n\tset @counter = @counter + 1\nend<\/code><\/p>\n<p>Diese L&#246;sung gef&#228;llt mir besser:<\/p>\n<p><code lang=\"sql\">SELECT<br \/>\n\t\tCASE\tWHEN number%15=0 THEN &#x0027;FizzBuzz&#x0027;<br \/>\n\t\t\tWHEN number%3=0   THEN &#x0027;Fizz&#x0027;<br \/>\n\t\t\tWHEN number%5=0   THEN &#x0027;Fizz&#x0027;<br \/>\n\t\t\tELSE CAST (number AS Varchar(10)) END AS &quot;number&quot;<br \/>\n\tFROM master.dbo.spt_values<br \/>\n\tWHERE type=&#x0027;P&#x0027;<br \/>\n\tAND number BETWEEN 1 AND 100<\/code><\/p>\n<p>Wem das zu wenig tricky ist, hier eine komplexere L&#246;sung, die ohne Modulo auskommt:<\/p>\n<p><code lang=\"sql\">SELECT<br \/>\n\t\tISNULL(MAX(T.word),CAST (number AS Varchar(10))) AS &quot;number&quot;<br \/>\n\tFROM master.dbo.spt_values AS S<br \/>\n\tLEFT OUTER JOIN (\tSELECT 3,  &#x0027;Fizz&#x0027; UNION<br \/>\n\t\t\t\t\tSELECT 5,  &#x0027;Buzz&#x0027; UNION<br \/>\n\t\t\t\t\tSELECT 15, &#x0027;FizzBuzz&#x0027;) AS T(num,word)<br \/>\n\t\tON S.number%T.num=0<br \/>\n\tWHERE S.type=&#x0027;P&#x0027;<br \/>\n\tAND S.number BETWEEN 1 AND 100<br \/>\n\tGROUP BY S.number<\/code><\/p>\n<div class=\"small\">via Peter (er las es im JavaSPEKTRUM http:\/\/www.sigs.de\/blog\/js\/?p=28)<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Mein Kollege Peter machte mich auf einen Tests f&#252;r Bewerber aufmerksam. Man solle Ihnen eine leichte Programmmieraufgabe geben, um die F&#228;higkeiten des Kandidaten zu erleben. Als Beispiel soll ein Programm die Zahlen von 1 bis 100 ausgeben. Ist die Zahl hingegen durch 3 teilbar, dann statt dessen &quot;Fizz&quot;. Ist sie durch 5 teilbar, dann &quot;Buzz&quot;. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[569,218],"_links":{"self":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/3385"}],"collection":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/comments?post=3385"}],"version-history":[{"count":22,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/3385\/revisions"}],"predecessor-version":[{"id":3412,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/3385\/revisions\/3412"}],"wp:attachment":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/media?parent=3385"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/categories?post=3385"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/tags?post=3385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}