Görüşme sırasında sözdizimsel olarak doğru olmak ne kadar önemlidir? [kapalı]


40

Mülakat adayından beyaz tahtaya bir program yazmasını rica ederken, adaydan sözdizimsel olarak doğru kod yazmasını bekler misiniz?

Biri sözdizimsel olarak doğru bir program yazan iki adayım vardı ancak mantık işarete kadar değildi, diğeri mantık daha iyi yazılmış ancak sözdizimi saçma sapandı.

İlk adayı tercih ediyorum.


75
Seçiminiz, onları Not Defteri'nde kodlamalarını bekliyorsanız mantıklı sanırım.
Benjol

20
Bir sözde kod sözdizimi nasıl yanlış olabilir? Yoksa onlardan gerçek bir dilde yazmalarını mı istiyorsun?
SK-mantığı

6
İş tanımına bağlı olarak… kopya editörü?
Konrad Rudolph

9
Sözdizimi önemsiz bir iştir, öğrenildikten birkaç hafta sonra öğrenilebilir. Bir problemi daha iyi bir mantıkla çözebilmek, programcının beceri seviyesine bağlı olarak imkansız olmasa da öğrenmesi zordur. Yanlış Synax, çalışmalarınızı bir tarayıcıda derlemeye ya da görüntülemeye gittiğinizde kendini çözüyor (yani doğru değil).
Ramhound

26
İkinci adayın daha iyi olduğunu söyleyen cevaplarla hemfikir olsam da, bunun aynı zamanda sözdiziminin ne kadar "saçma" olduğuna da bağlı olduğunu düşünüyorum. programlama diline benzeyen ve başvuru sahibi bu dil ile ilgili çok fazla deneyime sahip olduklarını belirtti, o zaman yanlış bir şey var
Thomas Bonini

Yanıtlar:


125

Sorunu çözebilecek, iyi bir çözüm bulabilecek ve çözümlerini bana açıklayabilecek kişiyi tercih ederim. Mantıkları% 100 olmasa bile, doğru yoldalarsa ve problemi muhakkuk ediyorlarsa, doğru soruları soruyorlar ve doğru yolda ilerliyorlarsa, bu benim kazancım olur.

İşle ilgili kod geliştirirken, sözdizimi ve mantıktaki hataları bulmak için birçok araç - IDE'ler, derleyiciler, statik analiz, birim testleri, entegrasyon testi ve kabul testi prosedürleri vardır. Bir beyaz tahtaya yazıyorsanız, bu araçlara sahip değilsiniz ve sentaksta hata yapmak zorundasınız (bir yöntem adı, bir noktalı virgül, bir ayraç), ve bunu affedebilirim.

Size tek sorum: Neden algoritmalara, tasarım stratejilerine ve mantıksal düşünceye odaklanmak yerine adaylarınıza beyaz tahta üzerinde gerçek kod yazmalarını sağlıyorsunuz? Programlama dilleri değişir, problem çözme değişmez.


6
+1, ancak bazen birinin belirli bir dilde ne kadar rahat olduğu konusunda iyi bir ölçü. Şahsen, hiçbir zaman fazla kilo almadım (algoritmanın önemli olanın olduğu konusunda kesinlikle hemfikir), ama acı vermiyor.
Demian Brecht

2
Benim için ağırlık önce düşünce sürecinde, ikinci olarak algoritmada ve mantıkta ve son olarak da dilde (bonus puanları sözde kodla olacak - soyut olarak düşünebileceğinizi gösteriyor). Belirli bir dilden önce bir dilden önce dil öğrenebilen ve adapte olabilen iyi bir problem çözücüyü işe alırdım (o dil benim organizasyonumun şu anki seçim dili olsa bile).
Thomas Owens

1
Kendi kodlamamla ilgili fark ettiğim bir şey - eğer birden çok dilde çalışıyorsam, derleyici sadece bir tane ile çalışmakta olduğumdan çok daha fazla sözdizimi hatası alıyor.
Loren Pechtel

12
Her zaman insanların beyaz tahtaya kod yazmasını sağlarım. Uygun şeyleri bilen ancak gerektiğinde kod üretemeyen birçok insanla karşılaştım.
dietbuddha

5
@dietbuddha Bu puanlar, üçünün tamamı - sorunuzu, uygulama dilini veya sözde kodunu nasıl sorduğunuza bakılmaksızın uygulanır. Tek bir görüşme sorusu, bir geliştiricinin sahip olabileceği herhangi bir kötü alışkanlığı da tanımlayamaz, çünkü kötü alışkanlıklarınızı kısa bir süre için gizlemek oldukça kolaydır. Bir yazılım mühendisi için tek ve en önemli becerilerin, geliştiriciyi standart araçları kullanarak gerçek dünyaya yerleştirerek en iyi şekilde ele alınan problem çözme ve iletişim olduğu gerçeğinden başka bir şey söylemeye zorlayıcı bir kanıt görmüyorum. sözde kodu kullanarak.
Thomas Owens

46

İkinci adayı tercih ederim. Mantık tam olarak doğru olması zor ( bazen çok zor) olabilir . Söz dizimi olabilir çok IDE ve derleyici ve diğer çeşitli araçlar yardım ne zaman doğru almak kolay.

İlk aday hiçbir zaman bir derleyici hatasını tetiklemeyebilir, ancak kodu her zaman garip (ve daha az garip) sınır durumlarında başarısız olursa, bir noktalı virgül koyacağı yeri bilmek o kadar da önemli değildir.


1
Kesinlikle. Sözdizimini öğretebilirsiniz (eğer zaten başka bir sözdizimi biliyorlarsa, özellikle de). Ses mantığını neredeyse bu kadar kolay öğretemezsiniz.
Tridus

19

Gerçek sözdizimsel hatalara bağlı olarak, ikinci adayı tercih ederim , çünkü sözdizimini kontrol etmek genellikle makinelere bırakılıyor .

Noktalı virgül eksik, köşeli parantezlerin unutulması, argüman listelerinde virgüllerin unutulması, vb. Gibi hatalar, hatta bir işlevi çağırırken argüman sırasının değiştirilmesi gibi sözdizimsel olmayan hatalar bile genellikle sözdizimi vurgulayıcı, derleyici veya kod ilk çalıştırıldığında yakalanır genellikle bir kişinin kullandığı, ancak beyaz tahtada bulunmayan her şey.

Bununla birlikte, teknik olarak sadece sözdizimi hataları olsa da, daha derin bir yanlış anlama gösteren bazı hatalar vardır.

Üstesinden gelmek için biraz yapay bir örnek olarak: Tüm değişkenlerini $ ile ön ekleyen veya for-loop olarak yazan bir python programcısı düşünün for list as item. Teknik olarak, her ikisi de sözdizimi hatalarıdır, ancak python'a yalnızca sınırlı maruz kalsalar bile, biri yasal karakterleri ve for döngüsünü bilmelidir. Adayın php (veya perl?) Bildiği ve piton becerileri hakkında blöf yapmaya çalıştığı iyi bir tahmin olurdu.


15

İkinci adayı, bir beyaz tahtanın sözdizimi üzerinde mantıktan daha fazla etkiye sahip olduğu ve sözdizimi hatalarının düzeltilmesinin daha kolay olduğu teorisi üzerine tercih ederim - IDE veya derleyici genellikle bunu yapabilir.


15

Neredeyse 13 yıldır SQL ve CSS (bildiğim en basit ve en basit diller) yazıyorum ve sözdizimini her zaman hatırlayamıyorum.

Arkadaşım (ayrıca bir geliştirici) bir riskten korunma fonu için çalışıyor, insert deyiminin sözdizimini asla hatırlayamıyor.

İkimiz de W3CSchools'a son veriyoruz , sanırım utanmamalıyız (derecesi ve doktora derecem var).

Ancak dürüst olmak gerekirse, önceliklerimizin doğru olduğunu düşünüyorum. Sözdizimi önemli bir beceri değildir.


13

Sözdizimi hataları hakkında birkaç düşünce ... Bu sözdiziminin doğru olması gerekip gerekmediğini açıkça anlatıp anlamadığınızı merak ediyordum. Bazen insanlar sözde kodun tamam olduğunu varsayar.

Ayrıca, birisi bir dilde yılların deneyimini talep ediyorsa ve temel sözdizimini doğru yapamıyorsa, hak talebinden şüphe etmeniz gerekir.

Sözdizimi hataları değişebilir, bu nedenle birisi bir yöntem adını unutursa tamamdır (benim için) ancak birisi bir sınıftaki bir yönteme nasıl başvurulacağını bilmiyorsa (nokta gösterimi) veya bir sözdizimi gibi temel bir düşünceyi bilmiyorsa basit sınıf, o zaman şansı bu kişi uzun süredir dili kullanmadı.

Sözdizimini doğru anlamayan biri için, hatalarının uygun dil editörüyle kolayca düzeltilebileceğini düşünüyor musunuz? öyleyse, ona oy veririm.

Sanırım burada düşündüğüm şey, sözdizimi hatalarının sınırlar içinde kabul edilebilir olmasıdır.


5

Bir yardımcı programcı ve hatta bir yazılım aracı, mantık iyiyse, kötü sözdizimi bulabilir ve düzeltebilir. Kötü mantık ... herhangi bir düzeltme çok daha az güvence altına alınmıştır. Tüm programcılar batırır. Kesilmesinin tespit edilmesi ve düzeltilmesi daha kolay olanı seçerdim.


5

Sorun ince olmadığı ve görüşme sorularının çoğu olmadığı sürece, ilk aday diskalifiye edilir. Dil sözdizimini öğrenmek algoritma tasarımından çok daha kolaydır. Mevcut teknolojimde hiç tecrübesi olmasa bile, birçok dilde başarılı bir çalışma geçmişi olan bir programcı işe alacağım. Bugün yapılması gereken bir şeye ihtiyacım olursa, bu en iyi strateji değil, ancak önümüzdeki on iki ay boyunca yapılacak birçok şeye ihtiyacım olursa, o zaman her zaman belirli deneyimler üzerine genel yetenekler seçeceğim.


5

Sözdizimi denetimi, derleyicinin ne işe yaradığıdır. Bir derleyici mantığınızı daha iyi hale getiremez, ancak sözdiziminizi nasıl düzelteceğinizi söyleyebilir. Bu, bir derleyici kullanarak kod yazdığınız herhangi bir işin mantığının, sözdizimsel olarak doğru olmaktan çok doğal olarak daha değerli olduğu anlamına gelir.


5

Röportajlar her zaman garip durumlardır - bunu söyleyebilirsiniz çünkü dışarı çıktığınızda hemen söylemeniz gereken her şeyi ya da sormak istediğiniz soruları ve sormak istediklerinizi ancak unutmayı düşünürsünüz. Bu nedenle, söz konusu olduğunda, mükemmel bir şekilde yazılmış bir kodun sözdizimi hatası olmadan bekleniyor olması gerçekçi değildir.

Ek olarak, mükemmel kod beklentileriniz (bir beyaz tahtada!) Görüşmeci ile eşleşmeyebilir - örneğin, katıldığım bir görüşmede yalnızca görüşmecinin beni zorlamaması için benim yaptığım bir sınıf yazmam istendi bir kopya kurucusunda. Bu yüzden bir tane yazdım, hiçbir şey yapmadım ama a = b ayarladı, ama bu onu tatmin etmek için yeterliydi. Sorunla ilgili beklentilerim bir kopya tüccarı gerektirmiyordu, bu yüzden sorunu çözülmekte olan sorunun dışına çıkardım - tamamen uyumlu, derleyici kod yazmayı beklemiyordum (gizli kodlama standartlarına göre), sadece göster çözüm anlayışıma. (aynı görüşmeci benim çözümümden de hoşlanmadı, nasıl yapacağı çok da açık değildi, yanlış anladım.)

Bir anketörden çalışma kodu istiyorsanız, onlara bir derleyici verin. Sonra sizi faturalandırırken şikayet etmeyin :)

Öyleyse ne yaptığını bilen, kelimeleri papağan fakat anlamını anlamayan bir kişi için gidin.


3

Görüşme sırasında görüşme yapan kişi görüşmenizi

  1. Probleme Yaklaşım
  2. Beceri ve problemi çözmek için kullanılan beceri
  3. Etkili bir çözüm bulmak için harcanan zaman

Sözdizimi çok önemli olmasa da, bir problemi çözerken önemli bir yer tutuyor, sözdizimindeki büyük hatalarla görüşmecinin etkilenmesini beklemiyorsunuz.

Birlikte uygun bir mantık ve sözdizimi bir röportajda sizin için hile yapabilirsiniz.

Mantık yeterince iyi olursa, küçük veya küçük bir hata size asla pahalıya mal olmaz.

Dahası, herhangi bir formda bile herhangi bir sözdizimini kolayca yapabilen IDE mevcut olabilir. Ancak, hangi yöntemi ve niçin ve en önemlisi, NEDEN , sadece gerçek konuyla ilgili mantık ve bilgiye sahip bir kişi tarafından bilinecektir.

Umarım ve kod yazmak için bir beyaz tahta veya not defteri daha fazla bir şey sağlamanızı tavsiye ederim.

İkinci adayla giderdim . ..


2

Bazı insanlar harika Java Geliştiricileri, harika C # geliştiricileri, harika C ++ geliştiricileri vb. İstiyorlar. Durum buysa, A ve size daha fazla güç verin. Endişelendiğim tek sorun, sorunu çözmek için bir neden oluşturamıyorlarsa, onların kendi iş sorunlarınızı nasıl akıllarını ve çözmelerini bekleyebilirsiniz?

Diğer insanlar sadece, hangi dilde olursa olsun çalışabilecek harika geliştiriciler isterler. Sorunu düşünüyor / modelliyor ve sonra hangi dilde kullanıyorlar. Eğer aniden .NET'in berbat olduğuna karar verirseniz ve Java ya da tam tersi duruma geçerseniz, bunlar gemi atlamayan ya da öğrenmeyi reddetmeyen geliştiricilerdir. Ayrıca, özel bir dile sahip bir tür otomasyon paketi / hesaplama paketi alırsanız ve otomatikleştirilmiş bazı görevlere ihtiyacınız varsa, bunlar bunu yapabilecek geliştirici türleridir. Gerçek hayattan bir örnek ... Eski bir işveren için özel çizilmiş bölgeler için posta kodları çıkarmak amacıyla bir haritalama yazılım paketi için özel bir komut dosyası dili bulmam gerekiyordu. Başka bir örnek .... mevcut işverenim, rapor yazmak için özel bir dil içeren özel bir mülk yönetim sistemine sahip ... Her durumda,

Ayrıca beyaz tahtada ekstra baskı / gerginlik var, bu yüzden kimse elinden gelenin en iyisini yapmıyor. Ayrıca kodlama yaparken her zaman mükemmel olacağından şüpheliyim. Derlediğinizden veya kaçtığınızdan ve bazı hatalar bulduğunuzdan şüpheleniyorum. Ek olarak dile bağlıdır. C, muhtemelen dil / çekirdek kütüphanelerinin çoğunu ezberleyebileceğiniz kadar küçüktür (buna ihtiyacım olmasa da). Java / C # kütüphanesini ezberleyen söz konusu olmayan büyük kütüphanelere (sık sık yapılan değişikliklere sahip) sahiptir.

Ayrıca birden fazla dil bilmek size karşı çalışabilir. C # ve Java birbirlerine benimle müdahale ediyor. Ancak birden fazla dil bilmek, özellikle C # / Java'ya ek olarak bir komut dosyası dili ve işlevsel bir dil biliyorsanız, bakış açınızı genişletebilir.

Yine de her iki aday da sorunu doğru mantıkla çözerse, doğru sözdizimi olan adamın muhtemelen bir avantajı vardır. Eğer biri sorunu çözerse ve çözmezse, şahsen ben sorunu çözebilecek olan adamla giderdim.

Yine de birisi Java konusunda uzman olduğunu iddia ediyor ve bir kullanım ifadesini if ​​if ifadesi veya döngü sırasında açıklayamıyorsa yalan söylüyor olabilir. Ama birisinin Java konusunda uzman olup olmadığını ama son zamanlarda çok C # yaşadığınızı ve Harita ya da başka bir şey yapmaya çalıştığını anlayabilirim. .Length veya string.length () / string.Length / string.length string.length () yerine ... Küçük şeyler affederim. Veya bazı kütüphane çağrısının argüman sırasını unuturlarsa. Ya da burada ya da orada bir yazım hatası / yarı kolon ....


1

Hiçbirini almayacağım.

Programcı problem çözmede iyi değilse, iyi bir sözdizimi işe yaramaz. Ve belirli bir dil için kötü bir sözdizimi, adayın belirli bir dilde kendini rahat hissetmediği, belki de doğrudan bir deneyim eksikliği olduğu anlamına gelir.

Her neyse, mantık sözdiziminden çok daha önemlidir.


3
Kendimi tasarladığım dillerin bile sentaksı hakkında hiçbir ayrıntı hatırlamıyorum Ve onlarca yıldır kullandığım dillerin sözdizimini hatırlamıyorum. Hiç sorun değil, her zaman araştırabilirim, kullandığım tüm diller için BNF yazdırdım. Sözdizimi herhangi bir dilin en az önemli kısmıdır, anlambilim çok daha önemlidir.
SK-mantığı

@ SK-mantık: Tamamen aynı fikirdeyim, ancak xxx dilinde program yapabildiklerini söyleyen birçok erkek buraya geldi, daha sonra noktalı virgüllerin gerekli olup olmadığını bile hatırlayamadılar. Yeni bir dilin sözdizimini öğrenmek kolaydır, ancak belirli bir dilde akıcı birini arıyorsanız, bu şekilde olmalı. Ayrıca, mantığın sözdiziminden çok daha önemli olduğunu da çoktan belirttim.
Jose Faeti

1

Her zaman olduğu gibi değişir. Sözdizimi hataları nispeten küçükse, onları yoksayırım. Eğer dünyayı titreten büyüklerse, onlara dikkat eder ve neden orada olduklarını çıkarmaya çalışırdım.

Mantık hatalarının sözdizimi hatalarından daha kötü olduğunu düşünüyorum, ikincisi hemen hemen her zaman mekanik olarak yakalanabilir, eskisi kadar az (bir dereceye kadar, hangi dili yazdığınıza bağlı olarak, bazı mantık hataları sınıfları yeterince gelişmiş tip tarafından yakalanır) çıkarım ve kontrol).


1

Bu kesinlikle görüşmenin yapıldığı konuma ve muhtemelen dile de bağlı olacaktır.

C ++ 'da çalışmak, sentaksta kekemelik yapan birisinin olması korkutucu. C ++ karanlık köşelerle doludur, tuzaklar her yerde temelde uzanır. Sözdiziminde kekeme, dilin kötü şekilde anlaşılması anlamına gelir ve C ++ yeni başlayanlar çok fazla hata yapar (zaman zaman başkalarının yapmadığını söylememek).

Sorunuzu cevaplamak için:

  • basit bir geliştirici pozisyonu doldurmam gerekiyorsa, adamı C ++ sözdizimini iyi anlayacağım. Parlamayacak ama çok fazla felakete neden olmamalı.
  • Bir lider geliştirici pozisyonunu doldurmam gerekirse, ben de almayacağım. Bir lider geliştiricinin hem deneyime hem de mantığa sahip olması gerekiyordu.

Sadece bir uyarı var: deneyim eksikliğini kabul eden insanlar. İdeal olarak, insanlar kendi seçtikleri dilde kodlamalı veya tercih ettikleri takdirde sahte kod yazmalıdır (örneğin öğrenciler).


1

Gerçek hikaye, onları elle yazmak zorunda kaldığımda C # olaylarının sözdizimini hala unutuyorum. Bazen röportajlarda olur. Klavyede kod yazarken sorunum yok.

Kodlayabilen kişiyi seçin, yapamayan birini değil sözdizimini hatırlayın.


0

Kâğıt / beyaz tahtaya kod yazarken, bir iş görüşmesi için bile, temel olarak sözdiziminin çok büyük bir bölümünü atlıyorum. Yarı virgül kullanmıyorum, yöntem çağrıları yapmakta zorlanıyorum, vb. Kodun kendisinden 4 satırlık gerçekten temel kod açıklayan bir cümle yazmak daha muhtemel. Gerçekten, php benzeri bir sözde kod kullanıyorum ve yaptığım süre boyunca yaptığım şey hakkında konuşuyorum ve parlattığım şeyleri açıklamak için hızlı yorumları not ediyorum (ki bu teoride aslında önemli olan hiçbir şey değil) programı)

Bir röportajda kodlama yaparken hedefim sorunu nasıl çözdüğümü göstermek, bir daktilo'nun Not Defteri'ne girip kaçabileceği bir şeyi dikte etmemek.

Uzun lafın kısası: İlk programcının neden kötü sözdizimine sahip olduğunu düşünmelisin . Bunu çok iyi biliyordu, ancak röportaj için ilgisiz olduğunu düşündü ve bu işin zor olan kısımlarına odaklanmayı tercih etti (mantık ve problem çözme).


0

Mantıklı bir şekilde cevabı tatmin edemeyen kişi niteliksizdir. Endüstrimizde çöp kodu üreten ancak gerçekte yapması gereken ya da hataları ya da son halleriyle başa çıkması gerekenleri yapmayan birçok insan var.

İkinci kişi, hataların türüne ve sayısına ve yazmayı beklediğiniz şeyin zorluğuna bağlı olarak niteliksiz olabilir veya olmayabilir. SQL terimlerinde (yazdığım dil), açık bir birleşim sözdizimini hatırlayamayan bir kişi, bir veritabanını sorgulamanızı gerektiren bir iş için niteliksizdir; Alıcı bir CTE'nin nasıl yapılacağını hatırlayamayan (fakat var olduklarını bilen ve kullanmayı deneyen) değildir. Başka bir deyişle, her zaman yazdığınız temel kod için sözdiziminin daha doğru olmasını beklerdim, ancak zaman zaman yapılan işler için değil, karmaşık sözdizimi için değil.

İlgili bir alanda mükemmel niteliklere sahip olduğunu bildiğim bir kişiyi düşünürsem, ancak kendi dilimi çok az biliyor olsaydım, muhtemelen sözdizimi hatalarını da daha çok affederdim. Bir SQL Server işi için vasat bir SQl Sunucu geliştiricisinden daha büyük bir Oracle geliştiricisi kiralamayı tercih ederim (Tabii ki mükemmel bir SQL Server çalışanı en iyisidir) ve o kişinin bana nasıl yapılacağını gösterselerdi SQL Server sözdizimini bilmesini beklemem Oracle'da yapın. Java ve C # insanlarla aynı şey, mükemmel problem çözme becerisine sahip kişi mükemmel dil becerilerine sahip olanı yener, ancak her ikisinde de kazananlar her zaman kazanır (bazen bulmak zordur).

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.