"Görüşme testi" soruları söz konusu olduğunda, FizzBuzz'ın konusu sıklıkla gündeme gelir. Ayrıca bu konuda Kodlama Korkus yazısı var.
Şimdi, bunun gibi siteleri okuma zahmetine girerseniz, muhtemelen FizzBuzz'ı önemsiz bir şey bulan programcıların demografik özelliklerinde olma olasılığınız düşüktür.
Fakat programcıların% 99'unun bununla mücadele edeceği gerçekten doğru mu?
Gerçekten mi?
Bunu destekleyen kanıtlar nelerdir?
Bazı gerçek hayattan örnekler bu soruyu cevaplamakta çok yardımcı olacaktır.
% 99? Hayır. Önemli bir yüzde mi? Evet. İnsanlarla röportaj yapma konusundaki kendi doğrudan deneyimimden buna tanıklık edebilirim. Sizin için önemsiz görünebilir, ancak programlama alanında yıllarca az ya da çok sahte olan ve giriş seviyesi olmayan pozisyonlara başvuran ve bunu başarısız olan birçok insan var.
Kolayca çözebiliyor olsanız bile, bana böyle bir görev yapmanız konusunda büyük bir statik veriyorsunuz, size karşı sayar. Takımda olmak bazen hoşunuza gitmeyebilecek, ancak gerekli olabilecek şeyleri yapmak anlamına gelir. Yarasadan hemen önce, birlikte çalışmaya başlamadan önce, sizden istediğim bir şeyi yapmanın üstünde olmak için özel durumunuzu denemenin ve iddia etmenin en iyi olacağını düşünüyorsunuz, o zaman size karşı bir işaret olarak hareket edecektir.
Her ne kadar çözümünüzün ne kadar zarif olduğu umurumda değil (güzel olsa da) ama beyaz tahtada bir bıçak attığınızı görmek ve yolunuzla konuşmak bana en azından bir bıçak almaya istekli olduğunuzu gösteriyor . Eğer öfkelenir ve "Ben bir kod maymunu değil, bir problem çözücüyüm!" o zaman bir dübel çalınacak.
Mülakat yapanlar denemeye bile başlamayı reddettiler. Sadece reddet. Hayır. Yapmayacağım. Bir ya da iki kibar soru soruyorum, zamanları için teşekkür ediyorum ve röportajı kapatıyorum.
Bunu yönetici ve geliştirici olarak söylüyorum.
Bir işe başvuran (ve bunu alamayan) programcıların% 99'unun bu konuda mücadele edebileceğini düşünüyorum. Ancak üretken bir iş sahibi olan programcıların% 99'u değil.
Modern iş arama sürecimizin doğası budur. Başvuran birçok kişi kalifiye değildir.
Bu Kodlama Korku yazısı, günümüzde Bilgisayar Bilimi'ni öğretme şeklimize de değiniyor. Geçmişte (özellikle MIT'de), özyineleme gibi kavramları kavramanızı gerektiren LISP gibi şeyleri öğrenmeniz gerekiyordu.
Günümüzde insanlara öğretilmektedir Java çünkü endüstride yaygın olarak kullanılmaktadır ve odak, derin programlama düşüncesinden ziyade sözdizimine kaymıştır.Java'yı sevmiyorum; Aslında, bunun ideal olduğunu düşünüyorum ama benim eğitmenlerimin onunla derin programlama prensipleri öğrettiğini görmedim.
Bunu söylemekten nefret ediyorum ama
Programlama sorularının cevaplanamamasının ana nedeni, cevaplayandan ziyade askerin hatasıdır.
Ben açıkça sabit zaman içinde çalışacak belirli bir koleksiyon arama algoritması oluşturmak istendi nerede bir röportaj hatırlıyorum (koleksiyonda kaç öğe ne olursa olsun aynı sayıda up). Vazgeçmeden önce 20 dakika boyunca tökezledim. O zaman röportajı yapan bu deha, cevabı neredeyse sabit ama hala sabit olmayan bir zamanda işleyen bir şey olarak göstermeye devam etti. Biraz "Bana sıfır cevap ver" demek ve sonra 0.1 kabul etmek gibi.
Kısaca, görüşme yapan bir kişinin aşağıdaki kriterleri karşılamayan bir soru sorduğu çok fazla vaka gördüm:
Cidden (1), bence insanlardan bir röportajın sözlü kısmına kod yazmalarını istemek aptalca.
Cidden (2), bence insanlara kod yazmalarını istemeden röportaj yapmak da aptalca.
Cidden (3), Onlara "ödev" vermeli, kod örnekleri getirmelerini istemeli ya da onlara çalışmak için bir dizüstü bilgisayar ve birkaç soru ve sessiz bir ofis vermelisiniz. Sonra onlar üzerinde çalışırken onları yalnız bırakın. Genellikle dış yardım (hile) alma yeteneklerini sınırladığı için ben ikinci yaklaşım ile gitmek ve zaman kutu olabilir.
Bahsettiğiniz Kodlama Korkusu makalesini okudum ve bence Jeff haklı ... ama en son ne zaman röportaj yaptı?
Görüştüğünüzde, genellikle yüksek stres altındasınız ve genellikle teorik sorulara cevap vermelisiniz (zeka yok, google yok, yeniden paylaşıcı yok, ... sadece stresin sıkıntısı olan hafızanız). Testlerde de aynı şey geçerli. Stres size yardımcı olmaz.
Birisinin bir pozisyon için uygun olup olmadığını bilmenin tek yolunun onunla bir süre çalışmak olduğunu fark ettim ... Sadece 100 kişiden (belki daha fazla) kiraladığınız son 10 kişiyi alın, gerçekten ne kadar iyiydi kiralama???
Bir işveren, modlosları bilen bir kod maymunu değil, bir problem çözücü tutmalıdır.
"Bir süre tüm adaylar" ı test edemezsiniz, bu yüzden onlarla görüşmek gerekir. Bu yüzden sorularımı buna (problem çözme) odakladım ve geçmiş referans kontrolü yapıyorum.
Bence FizzBuzz, geliştiricilerin büyümesini sürdürmesi için arayan şirket için tehlikeli.
Tek yapmanız gereken FizzBuzz'da arama yapmak. Üzerinde büyük bir blog yazısı dalgası vardı. Genel olarak konuşursak, blog yazarı "İnsanlara [bir dilde] yazmasını söyledim ve işte yaptıkları hatalar şunlardır:" dedi ve sonra bazı tuzaklar listeledi. Eğlence, insanların "başka bir dilde [bu kadar önemsiz olduğunu söyleyecekleri yorumlarda başlıyor, yazmanız gereken tek şey şu:" ve ardından kod. Bir sonraki yorum her zaman bu ilk yorumdaki hataları bulur. Bazı çok iyi geliştiriciler, herhangi bir dilde ilk kez doğru yapmıyor gibi görünüyor. Hatalardan bazıları:
İşe aldığımda, insanlardan beyaz tahtaya benim için kodlamalarını rica ediyorum, bu karmaşık olanın yakınında hiçbir şey yok (biliyorum, karmaşık olduğunu düşünmüyorsun) ve birçok aday tamamen başarısız oluyor. Yani vb tarzı yazma If, Then, End If ama parantez de (sadece sanırım güvenli tarafında olmak için) koyarak veya C # yazma (ve önce, C #? Soran) ama her yerde bir yarım kolon olması gibi. Beni mantık hatalarında başlatma!
Son zamanlarda çoğunlukla PHP ile çalışacakları üst düzey bir pozisyon için 50'den fazla programcıyla röportaj yapmakla görevlendirildim.
Tarama sınavındaki fizzbuzz problemini, çoğunlukla kendimi eğlendirmek için fırlattım ve on iyi soru istediğim için sadece dokuz tane vardı. Amacım, o zaman insanlara röportaj sorularında bile eğlenebileceğimizi göstermekti.
Başvuru sahiplerinin% 80'i sorunu çözmüş ancak modül operatörünü kullanmamıştır.
Başvuranların% 15'i sorunu çözememiştir.
Başvuru sahiplerinin% 5'i sorunu modül operatörü kullanarak çözmüştür.
Örneklemim oldukça sınırlı olsa da (bir ülkeden 50 başvuran) şunu söyleyebilirim:
% 95'inin bir CS müfredatında BS veya daha yüksek bir derecesi vardı (buradaki üniversiteler CS'yi daha muhteşem hale getirmeye çalışarak rekabet eder).
Gerçekten şaşırdım. Korktum .. ama hayret ettim. Sorun çok popüler hale geldiğinden sonuçları çoğaltmaya yaklaşacağımı düşünmedim. Bu bana başvuranların% 5'inin süper programcı olmayabileceğini gösteriyor, ama en azından programlama ile ilgili blogları okuyorlar.
Son işe alım turumda 0 olan 3 inşaat işçisi vardı, sıfır tekrar ediyorum, programlama eğitimi veya tecrübesi yazılım geliştirici pozisyonuna başvuruyor.* Yani namlunun tabanı. Normal bir beceri dağılımını varsayarsanız, o zaman ortalama beceri seviyesinin nasıl oldukça düşük olacağını ve hatta 'ortalamanın üzerinde' (başvuru sahipleri arasında) hala nispeten kötü olacağını görebilirsiniz.
Şimdi, yalnızca bazı programlama yetenekleri gibi görünen başvuru sahiplerini fışırtıyorsanız, şu anda sahip olduğunuzu göreceksiniz:
Ayrıca, gördüğüm bazı 'fizzbuzz' soruları alana özgüdür. Birkaç yıl boyunca bir dil/çerçeve x ile aşamalı olarak geliştirebilirsiniz (bu nedenle x ile z yıllık deneyim) ve bunun belirli bölümlerine rastlamamış olursunuz (kütüphane geliştiricileri, örneğin UI bileşen geliştirme hakkında çok fazla şey bilmiyorlar).
Aynı şekilde, birçok geliştirici bugünlerde bakım geliştirme yapmaktadır, bu nedenle bazı alanlarda mimari/tasarım becerileri zayıf olabilir.
Şimdi,% 99'un doğru olup olmadığından emin değilim, ancak IME hala oldukça yüksek. En az% 80 aralığında.
* Hayır, bu uygulamalara telefon etmedik, hatta ikinci kez bakmadık.
Evet gerçekten. Muhtemelen% 99 değil ama yine de oldukça yüksek. Stajyerlik ve tam zamanlı işe alımlar için bilgisayar bilimi öğrencileriyle röportaj yapardım. Bir kolejde yaklaşık 25 öğrenci ile röportaj yapardım. Bize aynı soruları sormamaları söylendi, çünkü öğrenciler konuştu. Hızlı bir şekilde bunun önemli olmadığını öğrendim, çünkü ilk sorumu cevaplayabilecek 25 öğrenciden sadece 3 veya 4 öğrencisi alırdım. "Strcmp yaz"
Onlardan iki dizeyi karşılaştırmak için bir işlev yazmalarını istedim. Belki bir sözlüğün sözcüklerini sıralamak için bu işlevi kullanmaktır. İki kelimeyi nasıl karşılaştıracağını anlamayan öğrenci sayısına şaşıracaksınız, sadece işlevi nasıl yazacağınızı bildirin. Ve bu öğrencilerin bazıları A'nın tümünü CSc'ye aldıklarını iddia etti.
Olay programlama ÇOK ZOR. Birçok insan nasıl programlanacağını bildiklerini düşünmeyi sever, ama bilmezler.
Bazı düşünceler:
Onların program bazı hatalar vardı ama açıkça doğru fikir vardı birine karşı tutmak olmaz. Hata ayıklama, programlamanın bir parçasıdır.
Pek çok insanın yapamayacaklarını bilmedikleri işlere başvurması üzücü. Bana ekonomiyle ilgili bir sorun gibi geliyor.
İnsanlara kötü sorular sormak gerçekten kolaydır, tek "doğru" cevabın görüşmecinin vereceği cevaptır.
Bu test, işe alabileceğim bir programcı hakkında bilmek istediğim birkaç şeyi çok güzel bir şekilde kapsıyor:
Son noktayı ele almak için fizz-buzz'a sayısız çözüm var. Okunabilirlik için mi gidiyorsunuz? Hız? Kısalık? Programı hızlı bir şekilde yazmayı bitirmeye çalışıyor musunuz? Bir programcının bu basit probleme nasıl saldırdığı çok anlatır. Bir programcı bir çözüm seçip sonuna kadar göremezse, bu size bu kişinin gerçek bir görevde nasıl performans göstereceği hakkında ne söyler?
Ne yazık ki, etkileyici görünümlü özgeçmişleri olan birçok insanın temel programlama becerilerinden yoksun olduğu görülüyor. Özgeçmişlerinde C ve C++ listeleyen kişilerin işaretçiler hakkında temel soruları cevaplayamadığı birçok durum gördüm.
Bu kadar popüler bir sorunun nedeninin bir parçası olduğunu düşünüyorum, çünkü cevaplamanın daha fazla bir yolu var ve adayın hangi yoldan gitmeyi seçtiğine bağlı olarak size nasıl kodladıkları hakkında bir fikir verebilir. Stack Overflow'da 10 bin rep varsa bazı harika örnekler burada görülebilir.
% 99 istatistiğine gelince, bu numaranın nereden geldiğini kontrol edin. Muhtemelen önyargılıdır. İlk iş için mülakat yapan giriş seviyesi programcılara dayanıyorsa, evet, özellikle adaylarının çoğunluğu doğrudan üniversiteden geliyorsa, bunun mümkün olduğunu görebiliyorum. Aslında bir 100 koşul if ifadesini bu soruna bir çözüm olarak yazacak birini düşünebilirim.
FizzBuzz'ın kaçınmamda bana yardımcı olacağını umduğum iki tür insan var.
Her iki durumda da, mükemmel bir uygulama umrumda değil. Geliştirici işlerine başvuran kişilerle yapmanız gereken test, hiç programlayabilecekleri testtir.
Bununla birlikte, muhtemelen birkaç nedenden dolayı bu testle uğraşmayacağım dedi. İlk olarak çok iyi bilinir ve yukarıdaki gruplardan herhangi biri denemek için hızlı olur. İkincisi, programcı olmayanları onları getirmeye başlamadan önce taramak için Steve Yegge'nin telefon ekranı soruları kullanmayı tercih ederim. bana mesleğini ciddiye alan ve kesinlikle bir röportaj gerektiren geliştiricilerin ilk% 1'inde olduklarını öne sürüyorlar. Aynı şekilde burada ya da SO) iyi bir temsilcisi olsaydı ben de onlarla röportaj yapmaya meyilli olurdum.
Geliştiricilerin, çalışmalarını bir araya getiren ve yapıştıran ve aynı zamanda kod yazmamaya çalışan "dokuzdan beşe kadar" ifadesini görene kadar FizzBuzz'ı kodlayamayacağına inanmak zor. Ben bir C # geliştirici, 3 yıllık "deneyim" ile Sözlük kullanmayı öğreten kıdemli geliştiriciler birini duyduğumda inanamadım. Arabirimler? Tasarım desenleri? stdout'u? YAGNI? Liderim YAGNI'yı hiç duymamıştı! Bu insanların bilmediği şaşırtıcı.
Şimdi inanıyorum. Ben de sadece yeterince yapan çok fazla geliştirici olduğunu düşünüyorum.
Programcıların% 99'unun çok abartılı basit bir kodlama testini programlayamadığını veya çözemediğini ifade ediyorum. FizzBuzz testi durumunda, ya daha önce bu problemle karşılaştınız ve modulo operatörü ile kolayca çözebilir veya daha önce karşılaşmadınız ve bununla mücadele edeceksiniz. Görüşmeciye programlama becerileriniz hakkında hiçbir şey söylemez.
Sanırım birçok programcının bir röportajda kötü bir izlenim bırakması, teknik görüşme yöntemlerinin doğasında yatıyor. Görüşmeciler, başvuru sahiplerinin dil sözdizimini, ayrıntıları ve veri yapılarının, donanım mimarilerinin, tasarım modellerinin vb. Hesaplama karmaşıklığını ezberlemesini ve anında yeniden üretmesini bekler. Her şeyi ezberlemeye çalışmak imkansız ve duyarsız.
Gerçek dünyada, anahtar size atanan programlama/tasarım problemini anlayabilmek ve probleminizi nasıl çözeceğinizi (IDE'niz, man sayfalarınız, kitaplarınız, google vb.) Nerede bulacağınızı bilmektir. Ancak bu, görüşmecilerin asla test etmediği bir şeydir.
Hala nispeten genç bir programcıyım (~ 2 yıldır para için kodlama yapıyorum ve bundan önce yaklaşık 2 kişilik bir yan sorumluluk olarak bazı profesyonel kapasitede kodlama yapıyorum) bu yüzden yeterli tuz taneleri kullanın.
Bir Büyük İşletme Projesi için kodlayıcılar için ilk ekranı yapma konusunda biraz deneyimim var (projenin mahkum olduğunu biliyorduk, ama hey, yine de ödemek istediler). Firmada işe alım yapan tek programcı olarak, özgeçmişleri inceleme ve başvuru sahiplerini tarama görevi verildi.
Bu bir hükümet projesi içindi
belki muhtemelen en yetenekli adayları çekmedi, ama aslında kodu gösteren bir github hesabı olan birinden veya bir portföyü olan herhangi birinden bir uygulama almadım, bu yüzden ilk geçiş olarak fizzbuzz (kelimenin tam anlamıyla tam sorun) kullandım programlayabilecek gibi görünen herkese.
Aptal olduğunu bildiğimi ancak herhangi bir çalışma kodunu görmek istediğimi ve istedikleri takdirde eşit veya daha fazla değer veya gerçekten herhangi bir şey gönderebileceklerini belirten sahte bir özürle hazırladım, ancak bu fizzbuzz yeterli olurdu.
Sonuç: İnternette cevapların hacmi göz önüne alındığında gerçekten doğru olan bir yanıt almadım. Kimse intihal için bile uğraşmadı. Daha önce projenin başarısız önceki tekrarları üzerinde çalışan insanları işe almak zorunda kaldık.
Egzersizin ilk şoku ve devlet yazılımlarının/sözleşmelerinin ne kadar berbat olduğuna dair hayal kırıklığından sonra, kendi becerilerim hakkında çok daha iyi hissettim, bu yüzden küçük zaferler?
Düzenleme: Doğru değil, bir off-by-one hata (yani 100 ile 99 değil istedi) veya kolay bir düzeltme başka bir masum hata anlamına gelmez. İşlevsel değil, ya çalışmaz/derleme/vb ya da sorunun sadece okunup anlaşılmadığını açıkça gösterdi, ayrıca önemli bir kısmı uygulamayı geri çekti ve biri yerine başka bir kod gönderdi.