Mülakat sürecinde verilen mühendislik programlama ödevleri için endişelenmeli miyim? [kapalı]


27

Geçenlerde bir şirketle bir telefon görüşmesi yaptım. Bu telefon görüşmesinden sonra, kısa bir programlama görevini tamamlamam söylendi (küçük bir program; üç saatten fazla sürmemeliydi). Yalnızca ödevi tamamlayıp kodu girmem için doğrudan talimat verdim. Bana dilediğim herhangi bir dili kullanmam konusunda tam bir özgürlük verildi ve kodun nasıl girileceği tam olarak söylenmedi.

Hemen, onu Github'a atmayı, test paketi yazmayı, Travis-CI'yi (ortak Github depoları için ücretsiz sürekli entegrasyon) kullanarak test süitlerini çalıştırmak ve CMake'i Travis-CI için Linux marka oluşturmak için kullanmayı planladım. Bu şekilde, sadece Git, CMake, Travis-CI ve nasıl test yazılacağını anladığımı gösteremem, aynı zamanda testlerin çıktısını görebilmeleri için Travis-CI sayfasına bağlanabiliyorum. Bunun görüşmeci için daha uygun olacağını düşündüm.

Bu teknolojileri iyi tanıdığım için, bu ödeve esasen zaman kazandırmayacaktı.

Ancak, tüm bunları nispeten basit bir iş için yapmanın kötü olacağından endişeliyim. Benim için daha fazla zaman kazandırmasa da, basit olması gereken şeylere fazla zaman harcadığımı düşünmelerini istemiyorum.


5
Bazı şirketler problemlerini gizli tutmak istediklerinden, github ile ilgili röportaj problemlerine cevaplar verirken dikkatli olurdum.
Scroog1

7
Sorular bloglarında herkese açık olarak var (bana blog postasına bir link gönderdiler), bu yüzden bununla ilgilendiklerini sanmıyorum.
DormoTheNord

3
@DormoTheNord Aşırı mühendislik yapmadığınızı söyleyebilirim: iyi bir gelişim sürecine sahip olmak, aşırı mühendislikten tamamen farklı bir şey ve (IMO) iyi bir işaret.
K.Steff

3
Bu fazladan zamanın bir kısmını, sorun belirtimi, varsayımlar, sınırlamalar ve ... Sadece kodlamaya dalmadığınızı, sorunu ve içeriğini düşündüğünüzü gösterin.
HABO

4
@DormoTheNord Sorular genel olabilir, ancak cevaplarınız da olacaktır. Eğer bulabilirlerse, diğer görüşmecilere açık olacak. Bu , muhtemelen sevmeyecekler.
Izkata

Yanıtlar:


29

Bir görüşmeci olarak, bu yaklaşımla gösterilen yazılım geliştirme sürecinin bilgisini görmekten mutlu olurum; sadece kodun yazılmasının aksine.

Özellikle, çok basit problemler için bile bir test takımına sahip olmak iyi bir işaret olacaktır (hatta FizzBuzz seviyesi). Adayların sorunu çözmeyen çözümler sunduğunu gördüm ve basit bir testler dizisi bunu onlara gösterecekti. Ayrıca, kararlılık geçmişine sahip olmak, adayın çözüme ulaşmak için kullandığı düşünce süreci hakkında bir fikir edinmemi sağlıyor.

Öte yandan, insanları aşırı mühendislik sürecinin erken bir aşamasında bazı şirketler tarafından reddedileceklerini biliyorum. Bununla birlikte, çoğu durumda, bu, zorunlu olarak kullanılan süreçlerin değil, çözümün aşırı yapılandırılmasından kaynaklanmaktadır.


2
Bir şirket yapmayı planladığım şeyi yapmak için beni reddederse, şirketin yazılım geliştirme metodolojilerine saygı göstermediğine ve bu şirket için çalışmamayı istediğinin bir işareti olacağını söylemeye kadar gider miydiniz?
DormoTheNord

7
Mutlaka o kadar ileri gitmem, çünkü belli bir miktarda şans (maalesef). Bu yaklaşımı beğenmeyen bir görüşmeci bulabilirsin; veya o gün kötü bir ruh hali içinde olabilirler ve bu yaklaşım tarafından sağlanan ekstra verilere bakmak istemeyebilirler. Bu, genellikle istedikleri ayrıntı seviyesini netleştirmenin bir zararı olmadığını söyledi. Ayrıca, bir veya iki açıklayıcı soruyu sormak, görüşmeci için de iyi bir işaret olabilir (açık bir şekilde onları bilgilendirilmemiş sorularla sürekli bombalamamasına rağmen).
Scroog1

+1 - Çözümden vazgeçmediğiniz sürece, birim testlerini ve sormadan ne yaparsanız yapın görmek isterim.
Telastyn

1
Riskin üstesinden gelmek için çok fazla, hem temel bir github bağlantısı hem de doğrudan tembel / meşgul için testin kaynak koduna bir bağlantı göndererek hafifletilebilir.
Dan Neely

15

Mülakatçı olarak versiyon kontrolü, CI, birim testi ve benzeri şeyleri anlayan biriyle görüşmek, genellikle gördüğümde bir adım olacaktır.

Her ne kadar benim için en önemli şey, sorunun çözülüp iyi bir şekilde çözülmesine rağmen, adayın teslim edilebilirlerinin kalitesini artırmanın yollarını anladığını bilmek kesinlikle dikkatimi çekecektir.

Genel olarak gördüğüm şey, sorunu yalnızca anlamayan değil, aynı zamanda sorunu nasıl çözeceklerini de anlamayan insanlar - ve süreçte kullandıkları fazladan araç ne olursa olsun görmezden gelinir.


6

Bunun üzerinde bir zaman sınırı olduğunu unutmayın. Görüşme yapan kişi bunu bilir, bu nedenle (görüşmeci olsaydım), yalnızca belirtilen süre içinde sorunu çözmediğinizi görecek, ancak çok hızlı bir şekilde altın kaplama için vaktinizin kaldığını göreceksiniz, ki bu sizin için iyi bir işarettir. titizlik ve çalışkanlığı takdir ettiğiniz gibi problem çözme yetenekleri.

Aşırı mühendislik, sadece FizzBuzz'ı çözmek için BuzzManager ve FizzManager dağıtmak üzere takılan AbstractFactoryManagerAdaptors'ı oluştururken kötü bir kelimedir.

Yaptığınız şey aşırı titizliktir, ki bu bir şey bile değildir (titizlikle titiz olsa da).

Bununla birlikte, zamanla ya da yarı-kesilmiş bir çözümle bitiyorsanız, zamanınızı “hiç zaman ekleme” iddiasında bulunduğunuz ekstralar üzerinde kullandığınız için, görünüşte ne kadar küçük göründüğü konusunda çok zayıf bir anlayışa sahip olduğunuz anlaşılıyor. görevler olabilir. Bu, mühendislerde tehlikeli bir özellik olabilir ve gençler arasında çok yaygındır. Uygun şekilde öncelik verin ve sadece gerekli çözümü tamamladıktan sonra ekstra kredi işlemlerini yapın .


Zor bir zaman sınırı yoktur, ancak ödevin iyi bir programcıyı üç saatten fazla sürmemesi gerektiğini söyleyen bir not vardır. 1 numaralı işlemden son işlemine kadar sadece üç saatimi harcadığımdan emin olmak için git günlüğümü gerçekten kontrol ederler mi?
DormoTheNord

2
@DormoTheNord zaman sınırı yoksa, talep edilen çözüm için harcanmayan zaman zayıf öncelik olarak görülebilir. Ne yazık ki mühendislerin tümü bağımsız düşünürlerdir ve bu nedenle bu konular hakkında birinden diğerine kendi fikirleri vardır, bunun gibi durumlarda, yaptığınız şeyi gözden geçiren kişinin onu bu şekilde görmenin ya da böyle bir şey olup olmadığına dair bir şans olabilir. Büyük bir nimet olarak görmek için sıralama. İki kıvrımın harika mühendislerini tanıdım. Bu durumlarda, değer verdiğiniz şeye, onu ve değer verdiğiniz kişiye değer vereceğinize, birlikte çalışmak istediğiniz kişi ortaya çıkar.
Jimmy Hoffa

İş görüşmelerinde nefret ettiğim şey bu ... görüşmenin kişisel tercihlerini tatmin etmedeki şans. Belki standartlaştırılmış olmalı :)
DormoTheNord

Endişelenme, şans kariyerin boyunca bile kendini gösterecek. Sadece iyi şanslar aldığınızda ve kötülükler aldığınızda şanslı olmanız gerekir :)
Scroog1

1
Bunu 'altın kaplama' olarak tanımlarken dikkatli olurdum çünkü bu terimin genellikle kötü bir şey olduğu varsayılıyor: en.wikipedia.org/wiki/Gold_plating_%28analogy%29
whatsisname 15

6

Dikkate alınması gereken bir başka görüş, yaklaşımınızın ne iyi ne de kötü olduğudur. Bunu çok fazla düşünecek görüşmeci hayal edebiliyorum ve daha da fazla mühendislik isteyen görüşmeci hayal edebiliyorum.

Endişelenme. Bunun yerine, sorunu en iyi düşündüğünüz şekilde çözün ve muhtemelen sizinle aynı fikirde olan kişilerden iş teklifi alacaksınız. Verimli bir çalışma ortamına doğru atılmış ilk adım. Unutmayın, görüşmeler iki yönlüdür. Mülakatçının çözümünüze vereceği cevap size onlar hakkında da çok şey söyleyecektir. Gelişim içgüdülerinizin ve felsefenizin yanlış olduğuna inanan insanlarla çalışmak ister misiniz?


3

Gerçekte, hiç kimse adayın bir git repo hazırlayabilmesi veya aceleyle makefiles oluşturabilmesi için umurunda değil, çünkü bu sadece ezberlemeyle öğrendiklerini hatırlıyor. Bunlar, görüşme sorusunun asıl problem çözme ve tasarım yönüne yönelik ikincil becerilerdir.

Öyleyse evet, sezginiz potansiyel olarak kötü göründüğüne dikkat çekiyor, çünkü aday sanki bir proje iskeletini oluşturmak için ezberlenmiş birkaç komut ve kalıptan güç alabilecek birinin etkileyici yazılım becerilerine sahip olduğuna inanıyor gibi görünebilir.

Çözümün test paketi yönü olsa iyi. Bir regresyon test paketi ile cevap vermek muhtemelen puanınızı kazanacaktır. Dahası, eğer test takımınız koddaki göze çarpan vakaları kullanıyorsa. Test paketi çok fazla resmi tuzağa sahip olmak zorunda değildir ve araçlara dayanır; Sadece bir şekilde içinde bir tane olması gerçeği, röportaj için yeterince iyi. Bazı özel ünite testlerini bir röportaj testinde bir araya getirebilirseniz, bunu gerçek bir projedeki araçlarla yapabileceğiniz açıktır.


1

Geçenlerde bir şirketle bir telefon görüşmesi yaptım. Bu telefon görüşmesinden sonra, kısa bir programlama görevini tamamlamam söylendi (küçük bir program; üç saatten fazla sürmemeliydi).

Dikkatli ilerlerdim. İşe girme zorunluluğunun uygunluğunu değerlendirin ve işverenden gelecekteki geri ödemelerin zamanınızın 3 saatini değerli yapacağından emin olun.

Bu tür testlerdeki değeri sorguluyorum ve geçmiş başarılarından birini değerlendirmeyi tercih ediyorum. Önceden tanımlanmış kısa bir görev, işverene ne yapabileceğiniz hakkında hiçbir şey söyleyemez. Sadece ne yapamayacağınızı ve telefonla birkaç soru ile hızlı bir şekilde tespit edilebilir.

Test yeri var. Testle ilgili aşağıdaki soruları kendinize sorun ve buna göre yanıtlayın.

  1. Test fuarı mevcut kariyer seviyene uygun mu?
  2. Testin net bir şekilde tanımlanmış doğru cevabı var mı?
  3. Görüşme yapan kişi, potansiyel olarak bir kişi olarak sizin menfaatinize sahip midir veya test sonuçlarına daha fazla ilgi gösteriyorlar mı (yani işe alım ajansları bunun için çok kötüdür).
  4. Test yapmaktan hoşlanacağınız bir işi mi temsil ediyor yoksa belirsiz bir beceri doğrulaması mı (yani, Java sözdizimini biliyorsanız test edin).

Yalnızca ödevi tamamlayıp kodu girmem için doğrudan talimat verdim.

Sadece kendi soruna cevap verdin.

Hemen, onu Github'a atmayı, test paketi yazmayı, Travis-CI'yi (ortak Github depoları için ücretsiz sürekli entegrasyon) kullanarak test süitlerini çalıştırmak ve CMake'i Travis-CI için Linux marka oluşturmak için kullanmayı planladım.

Hayır, yapmanı istedikleri şey bu değildi.

Bu şekilde, sadece Git, CMake, Travis-CI ve nasıl test yazılacağını anladığımı gösteremem, aynı zamanda testlerin çıktısını görebilmeleri için Travis-CI sayfasına bağlanabiliyorum. Bunun görüşmeci için daha uygun olacağını düşündüm.

Mülakat sürecinde çok erken veya geç becerileri göstermeye dikkat ederdim. Röportajda başarılı olmadığınızı düşünüyorsanız ve şimdi telafi etmeye çalışıyorsanız, o zaman işe yaramayacak. Öte yandan, çok fazla sorulmadığı zaman da çok fazla istekli olmak istekli olduğunuzu gösterir. Bu, işverenin beklediğinizden daha düşük bir ücret teklifi ile karşı karşıya kalmasına neden olabilir.

Ancak, tüm bunları nispeten basit bir iş için yapmanın kötü olacağından endişeliyim.

Evet kötü görünüyor. Meydan okumalarını tek bir kod satırı ile çözmek, tamamen temizlenmiş bir projeden çok daha etkileyici olacaktır.

Tecrübelerime göre bu iş görüşmesini nasıl kazandığın değil, işi kaybetmenin bir yolu. Kod testi, kalite kontrol konusudur. İnsanları işe alırken kod testleri kullanan her şirket bunu yapıyor çünkü daha önce kod testleri kullanmıyorlardı. Görmemesi gereken röportaj sürecinin çatlaklarından kaymış birinin kötü bir tecrübesi vardı.

Kaynak kodunu alıp ofise iletecekler. İnsanlar bu konuda yorum yapacak ve söylemelerini istemediğiniz şey "Bu hatayı yaptı mı? Ama Git, CMake ve Travis-CI'yi kullanarak zaman harcıyordu. Bu hatayı kaçırmak için ne kadar aptal".

Bu kadar. Kaybettin.

Kodlayabileceğini bilmek istiyorlar, çünkü sana bunu öğretemezler. Git, CMake ve Travis-CI kolayca öğretilebilir.


2
@JimmyHoffa, cevabımın tümüne mi, yoksa test hakkındaki yorumlarıma mı katılıyorsunuz? Belki de bakış açımı doğru ifade etmedim, belki de değil? Benim için daha çok insan bileşenine ve yazılı bir teste değer veriyorum. FizzBuzz'ı geçmeyen bir aday benim için hiçbir şey kanıtlamaz. Nedenini anlamak için o kişiyle konuşmalıyım. ama yetenekli çalışanları işe almak istiyorum (her zaman). Sadece eve gidip bu testi yazıp geri döneceğini sanmıyorum. Bunu yapmak için etkili bir yoldur. FizzBuzz sorusunu sormayı ve çalışmalarını izlemeyi tercih ederim. Anlıyor musun?
Reactgular

1
@JimmyHoffa Bence bu bir işveren için işverenlerin beklentilerine bağlı. Bununla birlikte, FizzBuzz testi hakkında okuduğumdan daha çok senin tarafına sallanıyorum. Herhangi bir kariyer seviyesinde başarılı olamayan bir programcının sorunları var. Bu testin OP ile aynı olup olmadığından emin değilim. Bu soruya bakın: stackoverflow.com/questions/117812/…
Reactgular

Basitçe söylemek gerekirse, yorucu görüşme süreçlerinin ve yukarıda ve öteye gitmeye çalışan adayların hayranıyım (temel taleplerden ödün vermeden; aksi halde zamanlarını zayıf şekilde önceliyorlar). Cevabınız, her ikisine de karşı çıkıyor gibi görünüyor.
Jimmy Hoffa


@JimmyHoffa Bence tavrım, müşterilerin genellikle bir satıcıdan yaratıcı çalışmaları tamamlamaları veya çalışma öncesi teklif verme sürecinin bir parçası olarak test etmelerini istemek için yaratıcı alanda serbest çalışmaktan kaynaklandığını düşünüyorum. Böyle bir iş yapmıyorum, çünkü her fırsatta saatler geçirirsem faturalandırılabilir işler yapmazdım. OP'ye dikkatle devam etmesini söylediğimde, onu zamanını boşa harcamayı umuyordu. OP çok fazladan iş yapmak için zaman ayırmak istedi. Bu bir günaha dönüş ama maaş buna değer mi? Belki, ancak OP bunu netleştirmedi. Kısa vadeli sözleşmeli iş olabilir.
Reactgular

0

Bence senin yaklaşımın ne iyi ne de kötü değil . Mülakatçıya Github ve diğer araçları kullanmanın uygun olup olmadığını soracağım. @ İzkata yorumlarda da belirtildiği gibi, çözümünüzü herkese açık hale getiriyorsunuz.

Bir görüşmeci olarak, genellikle adayın birkaç şeyi açıklığa kavuşturmaya çalışmasının zararı olmadığını biliyorum. Ayrıca, bir veya iki soru sormak, anlamadığınız şeyleri yapmak için acele etmediğinizden iyi bir işaret olabilir.

Yine de, en önemli şeyin, sorunun çözülmüş ve iyi çözülmüş olduğunu unutmayın. Bu bakımdan, herkes bir test odasının yardımcı olduğunu kabul eder. Ancak bunun için belki de projeniz / çözümünüz ile birlikte birkaç test sınıfı göndermeniz gerekir.

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.