Mezun / mühendislerden ne gibi standartlar beklenebilir? [kapalı]


38

Tampon taşması lisansüstü bir geliştiriciden kabul edilebilir mi? Çıtayı yüksek mi ayarlıyoruz? Mezun / junior mühendislerin beklenen yetenekleri nelerdir?

Bağlam:

Halen Linux üzerinde C ile çalışan bir Junior Developer pozisyonu için işe alıyoruz.

Sürecin bir parçası olarak, adayların C'deki boş zamanlarında bir kod testini tamamlamalarını istiyoruz.

Şimdiye kadar, iki adayı, okunabilir ve bir durumda oldukça idiomatik olmasına rağmen kodlarının sınırsız tampon yazması nedeniyle tampon taşması hataları yaşadığı temelinde reddettik.

[Düzenle]:

  • Açıkça hata kontrolünden geçmiş, üretim kalite kodunu istiyoruz.
  • Adaylar için test ve yapı çerçevesi sağlıyoruz

[Güncelleme]:

Bu konu ve diğer geliştiricilerle yaptığımız konuşmalar sonucunda bizzat kod testleri yapma şeklimizi ve işe alımlarımızla kimi hedeflediğimizi değiştiriyoruz.

Bir adayın arabellek taşması sorununu çözemediğini veya anlayamadığına karar verdik, özellikle yaptığımız iş için uygun olmayacağına, özellikle de rahat olduğumuzdan daha fazla rehberlik edeceğine karar verdik. Bu nedenle, sonunda sağlam bir kod örneği sunamayan adayları reddedeceğiz.

Bununla birlikte, işe alım sürecini hem biz hem de adaylar için daha verimli hale getirmek için bazı önlemler aldık.

Özellikle:

  • Üretim kalitemizle ne kastettiğimizi net bir şekilde açıklayan ve girdi ve hatalar için kodun sağlam olacağına dair bir uyarı ile beklentimizi daha belirgin hale getiriyoruz.
  • Artık adayları savunma programlaması kaynaklarına ve kod testi açıklamasında C standart kütüphanesine bağladık.
  • Hedef kitlemizi Junior geliştiricilerden ve mezunlardan değiştirdik ve ilgili tecrübeye sahip insanları hedef aldık.
  • Gönderilen kodun bir şekilde başarısız olması durumunda ancak başka türlü kabul edilmesi durumunda, şimdi hata durumuna neden olan ve adaylara hatalarını düzeltme şansı veren (başka bir nedenden dolayı reddedilmediği sürece) minimum bir test durumu sunuyoruz. Ayrıca eğer uygunsa sorunlu hatları / fonksiyonları da işaretleyeceğiz.
  • Testlerin amacı şimdi bir ön uç filtreden adayın daha iyi bir resmini oluşturma şansına biraz değişmiştir, özellikle de telefon görüşmemizi bilgilendirecektir. Bununla birlikte, yalnızca koda dayanarak reddetmeye hazırız.

[Güncelleme 2015-07-09]: Nujob'tan Andy Davis, adayın bakış açısından bir kod testinin kullanımı hakkında ilginç ve konuyla ilgili bir makale yazdı ve makaleye bakmaya değer. Burada bulun .


29
Olabilir...? Artık okulda birçok insanın Java'da C'de olduğundan çok daha fazla deneyime sahip olduğunu göz önünde bulundurarak, adaylar okuldan yeni çıkmış ve kodlama risklerinin 2 / 3'ü Java ise, C’leri geçecek kadar güçlü olmayabilir. Ölçek. AMA ... eğer açık ve öğrenmeye istekli olsaydı, ne söylerdin? Ne de olsa, bu Junior pozisyonu ...
SinirlenerekFormsDesigner'da

4
Ayrıca bir röportajda yazılı, belki de verilen zaman kısıtlamaları olan affedilebilir bir koddur. En azından kodlarının tampon taşmasından muzdarip olmaması gerektiğinden bahsettiğime eminim .
Mansfield

4
Ben @FrustratedWithFormsDesigner öğesinden ikinci. Ben küçük bir geliştiriciyim ve C ile uğraşmak zorunda olduğum tek zaman CPU mimarlığı dersindeki bir grup ödev içindi. Bu arada, C #, Java ve Ruby konusunda kendimi oldukça iyi görüyorum.
Kevin - Monica

4
Test çerçevesi tampon taşmasına neden olan bir test içeriyor mu?
SinirliWeFormsDesigner

44
Yanlış bir şey yaptığınızı söyleyemem, ancak son birkaç yıl içinde onlarca büyük üniversite CS mezunu ile görüştükten sonra çoğunun, 'üretim kalite kodu' ile ne kastedildiğine dair hiçbir fikre sahip olmadığını gördüm. Çoğu CS eğitmeninin başkaları tarafından kullanılmak üzere kod yazmayı önemsemediğini düşünüyorum.
Jim In Texas

Yanıtlar:


109

Barı çok yükseğe ayarladığını sanmıyorum, bence farklı bir bar gerekebilir.

Kod testlerinin bir adayın yetkinliğini belirlemek için yararlı olduğunu düşünüyorum, ancak başarılı / başarısız olmamalıdır. Aday ile diyalog başlatmak için kod testi sonuçlarını kullanmalısınız.

Yaptıkları hataları görüyorsanız (özellikle küçük geliştiriciler olsalar), onlara dikkat çekin ve farklı şekilde neler yapacaklarını sorun veya neden bir sorun olduğunu anlarlarsa.


1
+1 bu doğru ve bu iyi bir öneri. Aslında, adaylardan hata kodlarını gözden geçirmelerini istedik ve onlara çok fazla zaman ayırdık, ancak bazı durumlarda taşmalara neden olan hataları düzelterek kodu daha da kötüleştirerek yanlış düzeltmelerle geri döndüler. ilk başta.
brice,

15
@brice Aslında genç geliştiriciler olduklarına dair sağlam bir gösteri. Görünüşe göre bariz hatalardan kaçınmak uygulama ve deneyim ile birlikte gelir.
Tombatron

34
@brice: Özel hataları onlarla tartışmayı söylüyordu; hatalar olduğunu söyleme ve onlardan size geri dönmelerini isteyin. Hataları gerçek zamanlı olarak tartışın - onlara bir ipucu verin (satır numarası veya belki bir açıklama ve işlev ve size satır numarasını vermelerini isteyin), sonra nasıl önlenebileceğini sorun. Amaç hatasız test kodu olmak değil, başvuru sahiplerinin güçlü ve zayıf yönlerini iyi anlamaktır.
jmoreno

6
Küçük geliştirici sorunu görebilseydi, sorunu çözerdi. Ben olsaydım, sizinle çalışabilme yeteneklerini test ederdim. Onlara sorunun ne olduğunu ve nerede bulunabileceğini söyleyin, onlara asıl iş arkadaşlarınıza verdiğiniz tedaviyi verin ve nasıl tepki verdiklerini görün. Onlarla çalışmak bir angarya ise, pozisyon için uygun değillerdir. Onlarla çalışmak bir zevk ise, işe alın.
zzzzBov

67

Bence genç elemeler, buradaki tüm farkı yaratan şey. Gençler yeterlilik için test edilmemeli, öğrenme yeteneği, merak, tutku, ahlak ve kesinlikle alçakgönüllülük açısından test edilmelidir. Bir küçük çocukla ilgili varsayım, yetkin olmadıkları olmalıdır , bunları yapmak için kıdemli olarak sizin işinizdir.

Açıkçası fizzbuzz gibi temel kodları yazabilmeli ve genel bir kavram bilgisine sahip olmalıdırlar; Onlara dikkat ettiyseniz ve bir arabellek taşmasının ne olduğunu bile bilmiyorlarsa, o zaman bir sorun olmadığını söyleyebilirim, ancak bir gencin 5 aydan daha fazla kod yazmadan bir hata beklemesini beklemiyorum.

Çocuğunuzun yetkinliğine güvendiğiniz gün, kendinizin sorgulanması gereken gündür, gençlere çok sayıda mentorluk ve sağlıklı bir dozda "güven ama doğrulama" yapılmalıdır. Bir zamanlar gençtim ve o sırada orada olan herkese: Üzgünüm. Küçükken yaptığınız korkunç şeyleri hatırlıyor musunuz? (Lütfen bana sadece ben olduğumu söyleme; bana bir kompleks vereceksin ..)


1
Resmen hala 2 yıllık bir deneyime sahip bir 'Junior Software Engineer' değilim! Arka planım ne CS ne de SW Engineering'de (Fizikte). İsteyerek, herhangi bir girişte, şimdi veya ne zaman işe girdiğimde, herhangi bir girişte meydana gelen kodları teslim etmem.
brice

31
düzeltme, bilerek herhangi bir giriş üzerinde segfaults kodunu teslim olmaz . Asla böcek yazmadığınızı iddia ettiyseniz, sizi rahatsız ettiğim için üzgünüm John Carmack.
Jimmy Hoffa

HArg! geri çark! Bu kesinlikle benim iddia ettiğim bir iddia değil. Buggy kodunu yayınladım, bazıları diğerlerinden daha kötü. Ancak hiçbiri "arabellek taşması" için google’da google ne zaman yapılmaması gerektiğini gösteren ilk örneğe benzemiyordu
brice

Taşmayı tetikleyen testler de dahil olmak üzere kod için bir test çerçevesi bile sunuyoruz!
brice,

@brice Test çerçevesi sağladığınızı söylerken, hafıza sorunlarını test etmek için valgrind gibi bir araç sağladınız mı?
BЈовић

15

Burada birkaç sorun görüyorum.

Birincisi, ortalama bir bilgisayar bilimi mezununun bir şey bildiği varsayılmaktadır. Yapmazlar. Açıkçası, Visual Studio'nun nasıl kurulacağını ve ayarlanacağını bilen bir bilgisayar bilimi mezunu gördüğümde çok şaşırdım . Heck, son zamanlarda Microsoft'un yığın yazı üzerine beş yıldan fazla deneyime sahip olduğunu iddia eden bir adam ile çalıştı NET anlamaya could kod TFS oldu ya nasıl bağlamak için.

İkincisi, çok sınırlı havuzunuz. Programlama testi yapan adaylarımız da var. Yazmaları gereken beş ayrı "program" var. Evde yapıyorlar ve kodu gönderiyorlar. Testler son derece basit (veritabanı yok, harici bağımlılık yok) ve Visual Studio'nun Express sürümü kullanılarak kolayca yapılabilir . Testlerin kendisi, kıdemli bir adam tarafından yaklaşık 30 dakikada kolayca tamamlanır. Bunları genel olarak yalnızca yeni mezunlar için üç yıla kadar doğrulanabilir iş deneyimi için yaptığımızı unutmayın.

Ölçtüğümüz şey, teste katılanların yaklaşık% 70'inin bize asla geri dönemeyeceğidir. Kabaca% 15'i, genellikle açık sözdizimi hataları nedeniyle (örneğin, eksik ;) derlenmeyecek eşyaları teslim eder . Başka bir% 10 derleme yapıyor ancak gerekli işlemleri yapmıyor.

Bu,% 5 oranında bir kuyruk bırakıyor Bu noktada, sayısal bir sayı gerektiğinde girdi olarak alfa karakteri girme gibi koşulları bile düşünmüyoruz. Tamamen uygulamanın uygun çıktıları yaptığı girdi olarak çok sınırlı bir X grubu verilir. Ayrıca, bu rakamlar son dört yılda yaklaşık 500 adaydan geliyor: İstatistikleri tuttuk çünkü bilmek istiyorduk.

Kod yapısına ve yönetilmeyen kaynakların doğru bir şekilde elden çıkarılması veya try .. catchifadelerin kullanılması gibi savunma kodlama tekniklerine daha fazla bakacak olsaydık, neredeyse hiç kimse geçemezdi.

Elbette soru, neden?

Dört yıllık bir üniversiteden bu alanda derecesi olan bir çocuk neden basit programlama görevlerini yerine getiremiyor? Cevap, kolejlerin işletme ihtiyaçları ile tamamen temastan kopmadıkları ve sanat harikası olarak düşündüklerimizin gerisinde yıllarca geride kaldıklarıdır. 10 yıl önce kodlama standartları, güvenlik aslında sizin yaptığınız bir şeydi; ve birim testleri henüz moda değildi. Oysa bugün güvenlik her özellik ya da geliştirme ile aklınızda en ön sırada olmak. Unutma, çoğu profesör ya bu alanda hiç çalışmamış ya da uzun zamandır çalışmamış. Bunu öğrendikten sonra, neden bu kadar geride olduklarını anlamaya başlarsınız. Daha da kötüsü, bu profesörlerin bazıları belirli bir teknolojiye çok zaman harcıyor ( Java , PHP(herneyse) ve kod yapısı veya kabul edilebilir yaklaşımlar gibi ciddi temel sorunları tartışmakta başarısız olun (ve NEDEN!).

Sadece bir yan örnek. Yeni mezun, sınıflarından biri için bir mobil işletim sistemi yazma konusundaki deneyimlerinden bazılarını anlatıyordu, ancak bir web sunucusunun nasıl çalıştığını, temel terimlerle bile açıklayamıyordu. O sadece bilmiyordu. 15 veya 20 yıl önce muhtemelen bir işletim sisteminin nasıl yapıldığını anlamak için doğru zamandı. Bugün ... çok değil. Oysa bu, savunma programlarına yönelik bir sınıfın kendileri ve dış dünya için çok daha faydalı olacağı durumlarda gerekli bir sınıftır .

Peki ne yapıyoruz?

Bu% 5'in dışında, kişilikleri ve formları hakkında bir fikir edinmek için biraz daha röportaj yapacağız. Sonra, profesörlerin doldurduğu pislikten kurtulmak için yaklaşık altı ay harcayacağımızı bilerek "en iyi" olanları seçiyoruz.


2
Buraya tamamen katılıyorum, sektörde 2 1/2 yılımdan sonra daha çok şey öğrendim, sonra da hiç Kolejde öğrendim. Okulda iken bir web geliştiricisi olarak ilk stajyerim olduktan sonra bunu acı verici bir şekilde öğrendim.
Ryan

5
Şimdi programlama testinizi denemek istiyorum ..
Akash

1
Gerçekten mi? Belirli yazılım parçalarını yükleme deneyimini ve bir web sunucusunun aradığı şeyin basitleştirilmiş bir versiyonunu verme yeteneğini mi arıyorsunuz? Birisi mobil bir işletim sistemi yazmakla ilgilenebilirse, web sunucularının nasıl çalıştığını öğrenebilir.
Michael Shaw,

@MichaelShaw: Birisi bir işletim sistemi yazıyorsa, ancak en yaygın sunucu türünün temel işlemlerini henüz öğretmediyse, okulunun eğitiminin büyük (ve oldukça alakalı) alanlarını atladığını gösteriyor. O zaman soru, başka ne atlandı?
NotMe

2
@ChrisLively: Bu şeylerin ikisinin de büyük bir problem olduğunu anlamıyorum. Yavaş hareket eden küçük bir alanımız yok. İşle ilgili öğrenme gerçekleşecek. Burada esasen iyi bir noktaya sahip olabileceğinizi düşünüyorum ama örnekler ikna edici değil. CS müfredatında bir sorun varsa, "Visual Studio 101 nasıl kurulur" ve "Web Sunucuları 101'in Temelleri" eklenmesi sorunu çözmez. (“Defansif Programlama” sınıfı fikrini seviyorum.)
Michael Shaw

5

Bence soruna yanlış yoldan bakıyorsun. Kendinize sormanız gereken şey şudur: Bir adaydan işlerini yapabilmeleri için ne istiyoruz? Konumu ve içerdiği şeyi uygun şekilde değerlendirmelisiniz. Aşağıda küçük bir geliştiriciyi ne zaman işe alacağınız ve ne zaman kullanmayacağınızla ilgili bazı öneriler bulunmaktadır.

Bir küçük geliştiriciyi ne zaman işe alacaksınız: - Daha üst düzey bir geliştirici için zaman kaybı olacak, yapılacak kolay iş taşması varsa. - Bu kişiyi önümüzdeki birkaç yıl boyunca mentor etmeye ve eğitmeye istekli iseniz. - Şirketi büyütmeye çalışıyor ve uzun süre kalacak birini istiyorsanız. Sadece bir yıl boyunca kalacak küçük bir geliştirici, şirket kaynaklarının israfı olacak, bir şey üretmek için çok az çaba harcayacak ve sonuçların çoğu kendi kişisel gelişiminde olacaktır. - Birisinin büyümesi için para harcamak istediğinizde. Yine de, faydaların çoğu öğrendikleri şey olacak.

Ne zaman küçük bir geliştirici kiralamak için değil. - İş çok karmaşık olduğunda. Bu durumda ligleri dışında. - Ne zaman tasarruf etmek istersen. Üst düzey bir geliştirici aynı işleri zamanın bir kısmını daha iyi kalitede sonuçlarla tamamlamalı ve her zaman daha ucuz olmalıdır. - İş dış kaynak kullanılabildiğinde veya bir çalışanı meşgul tutmak için yeterli olmadığında. Bu gibi durumlarda, işin bir kısmını özel bir yükleniciye boşaltmak daha iyi olacaktır.

Son bir önemli nokta. Küçük bir geliştiriciyi işe almayın, çünkü “bu kadarını karşılayabileceğimiz tek şey” ya da “işe yaramayacağımız şey budur”. Sonunda tek yapman gereken, tuvalete para atmak. Ayrıca, bu becerileri kazandıklarında yine de büyük paralar isteyeceklerdir.

Benim hakkımda:

  • Neredeyse resmi bir eğitim almayan fizik derecesi.
  • İki yıllık iş tecrübesi. Bu yüzden öğrenme sürecinin ne hakkında olduğunu biliyorum.
  • Yazılım geliştiriciyi başlatın. Çok zorlu işler yaptım ve farklı yeteneklerden farklı yetenek seviyelerini gördüm. Birçoğu yaptığım işlerin çoğunu idare edemiyor.

4

Diğerlerinin de belirttiği gibi, gençlik pozisyonları C konusunda çok az deneyime sahip olabilir. Şahsen, C'de tampon taşmaları hakkında kısaca öğretildim ve onlara dikkat etsem bile, yine de bazılarını tanıtacağım (özellikle ödünç veren bir ödev verildiyse). arabellek taşmaları oluşturmak için). Muhtemelen, birçok küçük geliştirici, arabellek taşmalarını bildikleri benzer bir durum olacaktır, ancak onları kapsamlı bir şekilde tanımlamaya ve ele almaya hazır değillerdir.

Buna bakıldığında, uygun cevabın bir sonraki olası etkileşimde konunun ortaya çıkması ve genel bilgilerini test etmek için tampon taşması hakkında ne bildiklerini sormaları gerektiğini düşünüyorum. Bundan sonra, üretime hazır kodlarında bir tane bulduğunuzu söyleyin. Bu, size düzeltme ve öğretime nasıl tepki vereceklerini yargılamak için iyi bir pencere verecektir.

Ortak bir düşünce, daha az bilen, ancak öğrenmeye istekli ve öğrenmeye istekli olan ve geliştiren bir genç geliştiricinin, daha fazlasını bilen fakat geliştiremeyen veya geliştirmeyecek bir genç geliştiriciden daha değerli olduğu düşüncesi değil midir?

Olduğu söyleniyor, bahsettiğiniz yorumlarınızdan birinde, kullanmışlarsa kodlarındaki tampon taşmalarını gösteren testler yaptınız. Öyleyse belki de en büyük soru neden testleri yapmadılar (eğer yaptılarsa, neden buggy kodunu çevirdiler)?


3

Bir tampon taşması mutlak bir hareketsizliktir. Karşılık gelen bir kod sorunuz olabilir. Bu kod parçasında her şeyin yanlış olduğu (yanlış gidebilecek) bir durumda, adayın sorunu tam olarak belirleyebilmesi gerekir. Asıl soru, konunun önemsiz olup olmadığına bakmaktır, çünkü yine de clint çalıştırıyorsunuz.

Bununla birlikte yapay serbest kod testinde sprintf gibi bir ihlale karşı daha yumuşak olurdum. Çok az zaman (varsayılan), zihinsel hiperaktif, çalışan bir şey sunmak için çok büyük bir dürtü.


10
Neredeyse aynı cevabı yazdım, “bir genç” e atıfta bulunduğunu fark edene kadar, şunu aklınızda tutun. Keskin gençler görmüştüm, ama yine de farkında olmadan aptalca şeyler yapıyorlar, yazılım mühendisliğinin sadece öğretilebilir deneyime göre
Jimmy Hoffa

@JimmyHoffa evet sadece ilk satırını oku, benim "mutlak no-go" düzeltildi. Amacınız dikkate değer. Şimdiye kadar her programcıyı kullanabiliyor ve tahmin edebiliyordum, ancak bir psişik vaka ve bir "yalancı".
Joop Eggen,

@JoopEggen: "Psişik" in aradığın kelime olmadığından eminim. Aksi halde aklını okuyabilmeliydiler ...;)
NotMe

2

Bence yanlış soruyu soruyorsun. Profesyonel bir programcı olmak için hiçbir nesnel bar yoktur. Olsaydı, standart bir programlama sınavı olurdu, ama olmadı. Bireysel çubuğunuzun ne kadar seçici olacağınıza, ne kadar ödeyebileceğinize, yazılımınızın ne kadar parasız kabul edebileceğine ve ne kadar zaman harcayabileceğinize bağlı olarak ayarlanması gerekir.

Bu durumda, bir arabellek taşması ihtimalinin muhtemelen, adayın örnek bir çalışma örneği olarak sunulan bu kodun, sorduğunuz şeyi yapmak yerine bir segmentasyon hatasıyla çakıştığı anlamına geldiğini tahmin ediyorum. Öyleyse, istediğini yapmak yerine, bir bölümleme hatasıyla kilitlenen kodu yazan bir kodlayıcıyı kabul etmelisin? Sor:

  • Kurumunuz kimseyi çekme yeteneğine sahip midir edebilirsiniz çalışan kod yazmak?

  • Geliştirme süreciniz , akran incelemesi ve test desteği ile neredeyse kod yazabilen birinin çalışma kodu yazabileceği kadar sağlam mı?

  • Bir çeşit programcıya nasıl programcı olacağınızı öğretebilecek misiniz ve bu çabayı harcayarak belki birkaç yıl bekleyip, adayın iç yeteneğinin meyveye ulaşacağını umuyor musunuz?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.