Algoritmanız doğruysa, yazmanız ne kadar sürdüğü önemli mi? [kapalı]


11

Son zamanlarda Facebook'un, doğru şekilde tamamlandığında otomatik olarak bir telefon görüşmesi alacağınız bir programlama zorluğu yaşadığını öğrendim.

Tower of Hanoi tipi problemi çözebilecek bir algoritma yazmanızı isteyen bir örnek zorluk var . Bir dizi mandal ve disk verildiğinde, ilk ve son yapılandırma; Algoritmanız, son yapılandırmaya ulaşmak ve adımların çıktısını almak için mümkün olan en az adımı belirlemelidir.

Bu örnek meydan okuma size 45 dakikalık bir zaman sınırı verir, ancak zaman sınırınızın süresi dolduğunda geçip geçmediğini görmek için kodunuzu test etmenize izin verir.

Çözebilecek herhangi bir sevimli matematik çözümü bilmiyordum ve hile olacağını düşündüğüm için bir tane aramak istemedim. Bu yüzden, kendi başıma en iyi sorunu çözmeye çalıştım.

Çalışan ve geçen bir algoritma yapabildim. Ancak, 45 dakikalık gereksinimden çok daha uzun süre yapmak 4 saatten fazla sürdü. Beni ayrılan zamandan çok daha uzun sürdüğü için, asıl zorluğu denemedim.

Bu beni meraklandırdı, gerçekte bu kadar uzun sürmemin gerçekten önemi var mı? Demek istediğim, bu böyle bir yerde (sadece Facebook değil, Google, Fog Creek, vb.) Bir iş bulamayacağım ve beklentilerimi düşürmem gerektiğinin veya gerçekten geçtiğim gerçeğinin bir işareti ilk denememde çok uzun sürmesine rağmen iyi olarak alınabilir mi?


12
Burada önemliydi - bu senin için yeterince gerçek mi?

2
Neden büyük bir .com adı için çalışmamanın isteklerinizi azalttığınızı ima ettiğine inanıyorsunuz?
mouviciel

@mouviciel Tam olarak büyük bir .com adıyla çalışma isteklerimi düşürmek istemedim ama daha çok programın birincil rol olduğu bir şirkette çalışmak gibi, kimsenin ne yaptığınızı anlamadığı perakende gibi başka bir şey yapan bir şirkette çalışmak gibi.
JD Isaacks

5
LOL at Fog Creek yazılımı Facebook ve Google ile birlikte geliyor.
georgiecasey

Yanıtlar:


42

Pratikte yapar sizi ne kadar uzun sürdüğünü olsun. Sorunu 45 dakika içinde çözebilecek olan - her şey eşit - 4 saat sürenden beş kat daha üretken ve dolayısıyla bir işveren için daha çekici.

Bununla birlikte, bu sorunu çözmek için neden dört saat sürdüğünüzü söylemiyorsunuz .

  • En iyi miydi (iyi beslenmiş, yorgun değil, tamamen konsantre)?
  • Sorun iyi belirlenmiş miydi veya kendi başınıza ek araştırma yapmanız mı gerekiyordu?
  • Bunu yapmak için yeni şeyler öğrenmek zorunda mıydınız?
  • Aletler tanıdık mı değil mi?
  • vb.

Bunların herhangi biri ve hepsi sizi geçirme zamanını etkileyebilir ve baskı altındayken, her şeyi söylemeden ve eldeki araçlarla bir sorunu çözebilmeniz daha önemlidir, çünkü bu kariyeriniz boyunca gerçekleşecektir. ve genellikle başarılı olup olmamanız birisinin çok önemli olduğu bir noktadır.


Cevabınız için teşekkürler. Beni neden uzun sürdüğünü cevaplamak için, bir kısım aslında ne yapmam gerektiğini anlamakta biraz zorlandığımdan, bu kısmı anladıktan sonra hala bir plan yapmak için biraz düşünmem gerekti. Örneğin, bir disk diski engelliyorsa taşımak istiyorum ve önce onu taşımam gerekiyor, nereye götürmeliyim. Aslında programlama kısmı en kısaydı, ama hepsi zamana eklendi.
JD Isaacks

@JohnIsaacks Yani sorun Hanoi Kulelerine aşina olmamanızdı. Biliyorum çoğu programcı özyineleme hakkında öğretilirken tanıtıldı (her disk hareketi aslında "üstümdeki diski, özyineleme ile güzel bir şekilde eşleştiren boş bir sabitleyiciye taşımaktır"). Örgün eğitim aldınız ve öyleyse hangi düzeyde?

@ ThorbjørnRavnAndersen, okulda herhangi bir programlama öğrenmedim. Kendi kendime öğretildim, işte öğrendim, kitaplarla, deney yaparak vs. Oyuna aşina değildim (maymunların gezegeninde benzer bir oyunun hatırlanması dışında), Google'ın bile olduğunu bilmem gerekiyordu. "Hanoi Kuleleri". Özyinelemeyi anlıyorum (en azından öyle olduğunu düşünüyorum) ve burada kullandım. Ancak bulmacayı çözmek benim için çok daha kolay olurdu, daha zor olan kısım "Hangi model her seferinde mümkün olan en az hamle sağlayacak."
JD Isaacks

@JohnIsaacks programlama piyano çalmaya çok benzer - kendi başınıza iyi olabilirsiniz, ancak gerçekten iyi olmak için şeyleri deneyimli bir öğretmen tarafından nasıl yapacağınızı öğretmeniz gerekir. Bulmacayı nasıl çözeceğinizi ancak "bu optimum mu?" Bölümünü zor bulabileceğinizi açıklayabilir misiniz?

Bir parçayı yerine taşıyan, herhangi bir engelleme parçasını yoldan çıkaran, ardından bir sonraki parça ile başlayan tekrarlayan bir işlev yapabilirim. En büyük parçadan başlayıp en küçük parçaya kadar aşağıya doğru çalışma. Bir engelleme parçasını hareket ettirdiğinizde "en uygunudur" kısmı gelir. Nereye taşıdığınıza bağlı olarak, gereksiz ek adımlar oluşturabilir. Örneğin, 1'i 3'e taşımak daha sonra 3'ü bloke eder ve 3'ü taşıma zamanı geldiğinde tekrar yoldan çekilmesi gerekir, ancak mevcut yapılandırmaya bağlı olarak bu önlenemez.
JD Isaacks

13

Önemli nakit akışı olan genel geliştiriciler arayan bir şirket için önemlidir, çünkü daha hızlı daha fazla iş yapılabilir. Ancak, birçok diğer durumlarda, bu önemli değil (aslında, çoğu durumda iddia ediyorum) kadar sizin kadar sorunları çözmek için yeteneği , ve de bunları çözmek için yeteneği .

Beş farklı problem çözücü türü düşünebilirim:

Yapanlar ...

  1. ... sorunları çözebilir hızlı bir ile, temiz ve verimli çözümü.
  2. ... sorunları hızlı bir şekilde çözebilir , ancak kirli ve verimsiz bir çözümle.
  3. ... sorunları yavaşça çözebilir , ancak temiz ve verimli bir çözümle sonuçlanabilir .
  4. ... sorunları yavaşça çözebilir , ancak kirli ve verimsiz bir çözümle sonuçlanabilir .
  5. ... olamaz sorunları, ya hızla veya yavaşça çözmek.

Facebook tarzı bir test, # 3, # 4 ve # 5 adaylarını açıkça ayıklıyor, çünkü zaman kısıtlaması var, bu yüzden bu testin yalnızca # 1 veya muhtemelen # 2 adayı işe almaları gerektiğini belirleyen işverenler için olduğunu biliyoruz ( daha fazla taramaya bağlı olarak).

Bazı örnekler:

  • Facebook gibi bir işveren sadece 1 numaralı programcı arıyor olabilir , çünkü süper yıldızlı programcılar için büyük maaşlar alabiliyorlar.
  • Bir kerelik satışları yüksek olan bir işveren (bazı web tasarım mağazaları gibi) yalnızca eşit derecede etkili # 1 geliştiricilerden daha ucuz olan bir # 2 geliştirici isteyebilir .
  • Bir etmiş bir işveren ihtisas sorun alanını (örneğin kredi yaratım yazılım yazma gibi), bir kabul olabilir 3. aşkın geliştirici 1. Çift derecelik deha geliştirici süper pahalı olabilir, çünkü geliştirici veya onları bulmak zor olabilir.
  • Çeşitli nedenlerle umurunda olmayan veya bütçesi kısıtlı olan bir işveren # 4 geliştiricisinde sorun yaratabilir .
  • # 5 geliştiricileri, ne aradıklarını bilmeyen firmalar tarafından işe alınır ve bu başvuru sahiplerini elemekte başarısız olur.

5

Hanoi kulesi? Bu üniversitedeki birinci sınıf dersimdeki ilk programlama ödevlerinden biriydi (Fibonacci'den hemen sonra - evet, bu fonksiyonel programlama düşkünlerinden biriyle dersler aldım :). Ve bilgisayar bilimi bile değil, bilgisayar mühendisliği yapıyorum.

Yine de, çoğu 'programcı' bu tür bir algoritmayı doğru yazamaz, çünkü çoğu programcı korkunçtur. (daha fazla eğlence için fizzbuzz'ı arayın)

Her neyse, belli bir eşiği geçtikten sonra, programlama becerilerinizin projeleri bitirme yeteneğiniz, zorluklara karşı dayanıklılığınız, vb. Kadar önemli olmadığını düşünüyorum.

Facebook en iyi geliştiricileri işe almak istiyor, elbette, ancak bu tür oyunlarla ne kadar almayı umduklarını bilmiyorum. Bence çok kötü programcılar ile zaman kaybetmek istemiyorlar.

Her zaman duyduğum bir ipucu, havalı bir teknoloji şirketi tarafından işe alınmak istiyorsanız, açık kaynak projelerine katılmaya çalışın. Ayrıca, staj almaya çalışın.


3

Çok fazla arz (birçoğu programcı olabilir) ve az talep (az sayıda programlama işi) olduğunda, işverenler istedikleri kadar talepkar olabilirler. Aslına bakılırsa, talep etmeleri gerekir, aksi takdirde herhangi bir iş yapmak yerine insanlarla röportaj yapmak için çok fazla zaman harcarlardı. Bu nedenle, adaylara olabildiğince çabuk kısa bir liste almak ve sadece iyi olmayan, hatta çok iyi değil, aslında karizmatik olan insanlarla röportaj yapacakları için son derece zor testler yapıyorlar .

Dolayısıyla, tahsis edilen zaman dilimi içinde testi tamamlamamanız kötü bir programcı olduğunuz anlamına gelmez; sadece facebook'un karizmatik olarak gördüğü şeyin tanımına uymazsınız. Benim düşünceme göre, sorun değil.


0

Zaman önemlidir, ancak sizi daha uzun sürerse aptal olduğunuz fikrine kapılmayın. Birçok insan "ezberlenmiş" şeylere sahiptir. Özyineleme gibi teknikleri uygulamada o kadar çok çalışırlar ki, 2cd doğası haline gelir. Bu onların akıllı değil, sadece 2cd doğa noktasına pratik yaptık ve siz de yapabilirsiniz!

Aşağıdaki matematik problemini düşünün: 2 + 2 =?

Eğer cevabın 4 olduğunu hemen bilseydiniz, zeki olduğunuz için değil, 2cd doğası olduğu için. Eklemeyi öğrenen bir çocuk, cevabı almak için saymanın en temel işlemlerinden geçmek zorunda kalabilir. Ancak bu çocuk yetişkinleri aşma potansiyeline sahip olabilir.


-1

İnsanlar gerçekten bir şey yapmak için ne kadar zaman harcadığınız umurumda değil; sadece son teslim tarihlerine uy ve her şey yolunda.


7
Son başvuru tarihi "şu andan itibaren 45 dakika" olduğunda ve dört saat sonra bitirdiğinizde insanlar ilgilenir.

1
Mehrdad ne anlama geliyor son teslim tarihlerini karşılamak için fazla mesai çalışabilirsiniz: D
quant_dev

1
Hiç var kaka gerçekten fan ... çarptığında çekmeyi bıraktı durdurur - diğer Devs için mesai gerek olmazdı şeyler yapmak iş mesai gerekiyorsa
occulus

-1

Oldukça gergin, Hanoi kulesinin ne olduğunu okumamı gerektiriyor -15dk, IDE'yi başlat, -5dk boş bir çözüm oluştur, bu yüzden sorunu çözmek için sadece 25 dakika. Sadece iyi arayüz tasarımı ile güvenli sınıflar gibi tüm sıhhi tesisat ile kod yazmak da biraz zaman gerektirecektir, bu yüzden gerçek fikir için 15 dakika kaldı. Hanoi'deki kulenin ne olduğuna bağlı olarak, yeterli olabilir, biraz da olmayabilir. Ve bazen, diğer problemler üzerinde çalışırken problemin kendisini çözmesine izin vermem gerekiyor, çünkü çözümü tam yerinde görmüyorum. Bu yüzden paralel bir iş parçacığında ücretsiz olarak çözülür, ancak bir anda olmaz.

Her neyse, en büyük şirketlerden biri, bu yüzden istediklerini yapabilirler. Ama zaman sınırı röportajlardaki en kötü faktörlerden biri IMHO, her zaman preslenmiş, acele ediyor, her şeyi temizleyemiyorum ve gerçekten çalışırken çok önemli olan tüm detaylara konsantre olamıyorum. :) Tabii ki çözümleri hızlı bir şekilde çözebilirsin, yönetici erişimini ayarlayın, böylece her şey + çalışır 'SELECT * FROM pass WHERE usr == ' + user_input, ancak gurur duyacağım güvenli ve iyi yazılmış herhangi bir görev için biraz zamana ihtiyacım olacak ve 45 dakika gerçekten çok yoğun.


1
Bence sadece Hanoi Kulesi sorununun ne olduğunu hatırlayan insanlar istiyorlar (bu bir klasik).
quant_dev

IDE'nizi başlatmak ve boş bir proje oluşturmak beş dakika sürer? Hanoi Towers Of'ı henüz bilmiyorsanız, en azından onları ters sırada yapın, böylece araştırma yaparken IDE yükleniyor (görünüşte internet üzerinden bir VM'den)!
Bryan Boettcher

Böyle bir testte, mutlaka "iyi arayüz tasarımı" ve "sıhhi tesisat" aramıyorlar - Ben sorunu anlamak ve çözmek için bir algoritma oluşturma yeteneğini görmek istiyoruz. Dil bir kısıtlama olmasaydı, Java ve Eclipse gibi bir şey kullanmak en son yaptığım şeydi. Python ve minimal bir metin editörü / kompakt IDE kullanıyordum. (Java'yı kendiniz kullanacağınızı söylemeyin; sadece söylüyorsunuz ...)
12'de
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.