Genç programcıların eksikliklerini aşmasına yardımcı oluyor musunuz? [kapalı]


15

Ekibinize katılan veya birlikte çalışmak zorunda olduğunuz küçük geliştiricilerle ilgili ortak tutuşlarınız nelerdir? Açıkçası onlar deneyimsizdir, bu yüzden her şeyi bilmelerini bekleyemezsiniz, ancak hangi beceriler genellikle açıklanamaz bir şekilde eksiktir - ve özellikle, bu eksik becerileri geliştirmelerine nasıl yardımcı olabiliriz?

'Tavsiye dinlemek' gibi kişisel becerilerden bahsetmiyorum, (varsa) teknik konulardan bahsediyorum:

  • 'Hiç SQL yapmadınız mı?'

  • 'Hiç birim testi yazmadın mı?'

  • 'Unix komut satırını nasıl kullanacağınızı bilmiyor musunuz?'

Eğer Şeyler do bekliyoruz - Bunları belirli eksiklikleri geçmiş olsun yeni programcıları öğretimi için gözlemlerinizi ve teknikleri duymak istiyorum.


13
Tek en rahatsız edici şey: sürekli olarak rahatsız edici olanı sormak. :-)
Jerry Coffin

12
İnsanlar bilmelerini beklediğiniz şeyleri bilmediklerinde rahatsız olmanız gerektiğini düşünmüyorum. Önemli olan öğrenmeye istekli olmaları =)
koenmetsu

Dinlemeyi öğrenmek için istekliyseniz evet @KoMet ile aynı fikirde olun Bence bu çok önemli :)
MalsR

8
Bu soruyu sevmiyorum, bir geliştirici için yanlış zihniyete sahip. TÜM BİR ŞİMDİ YAŞIYORUZ ve her gün bir şeye yeniyiz. Asla bir şey bilmeyen biri için rahatsız olmaz. Bu çok fazla kibir olduğunu hissettiriyor ....
Darknight

3
Oh, kapalı, BRAVO. Altı yönergeyi konstrüktif öznel sorular okudum ve bu hepsini yerine getiriyor. Açıkçası yapıcı olmayan kısım meşgul, 13 kişinin zaten cevapladığı bir konuyu kapatarak, soruyu yanlış anladıkları için. Üst düzey geliştiricilerin bazen genç geliştiricilerin yeteneklerinde hayal kırıklığına uğrayacağı bir gerçektir, bu soru sadece bu hayal kırıklığında herhangi bir model bulmaya çalışır, böylece zorluklardan daha iyi kaçınabiliriz. Meşru şikayetleri ve eleştirileri göz ardı etmek kimseye fayda sağlamaz ve kibirle hiçbir ilgisi yoktur.
Andrew M

Yanıtlar:


25

Sürüm kontrolünün ne olduğunu veya nasıl düzgün kullanılacağını bilmemek .

Kısa bir süre önce şirketimde olan genç geliştiricilerden biri, Subversion'un temel bilgilerini öğretmek zorunda kaldı. Bu beni gerçekten kandırdı ... tüm zamanlar canlı projeler için kodları kontrol ediyordu ... ve ne yaptığını bilmiyordu ...?


4
Yaltaklanmak? Hala bir işi olduğu için şanslı.
Rein Henrichs

2
Bu daha çok “bilmediğini bilmemek” ya da “bilmediğini kabul etmemek” meselesi gibi görünüyor. En başından itibaren yardım istemiş olsaydı, bu büyük bir sorun olur muydu?
Michael McGowan

1
ah, kulağa benziyordu haha, son zamanlara kadar sürüm kontrolü uygulamıyorduk ve şirkete yeni aşama olarak katıldım, üniversitede biraz sürüm kontrolü ve yıkım türünü öğrendim, ama daha önce hiç uygulamadım.
Sufendy

1
"Bu yedekleme aracı değil mi? Her akşam kodunuzu kaydetmek için mi kullanıyorsunuz?"
David

2
Sana okulda neredeyse hiç öğretmedikleri büyük bir şey
Elijah Saounkine

23

Yeterli soru sormamak

Gençler olduklarını biliyorum, hata yapacaklarını ve sadece bir şeyler bilmediklerini umuyorum. Pek çok royal f ** k up bir şey varsaymak yerine sadece bir soru sorarak önlenebilirdi. Dürüst olmak gerekirse, yeterince rahatsız edilemem.

Başladığımda TONNES sorularım vardı - onlara birkaç kez kıçımı kurtarmasını istemek. Cehennem, hala çok fazla sorum var ... Sadece şimdi daha iyi sorular olduklarını düşünüyorum.


Vay be ... hemen hemen aynı cevabı verdim, yaklaşık 5 saniye önce sen git.
quickly_now

2
"Can sıkıcısın! Burada meşgulüm, kendi kendine düşünemez misin?" şanssız iseniz !! haha
Sufendy

4
+1 - Bunun bir alt yazısı bir açıklamadan sonra sormuyor. Bir çocuğa bir görev açıkladığımda beni gerçekten sinirlendirdi, başını salladı, başardığını ve işe gireceğini düşündüm, sonra iki hafta sonra geri geldi, aynı soruları tekrar soruyor, tekrar başını sallıyor, sonra başka bir iki haftalar sonra ... Yeterince adil değil, bu önemsiz bir görev değildi, ama Tanrı aşkına bilmiyorsan bunu anlamıyormuş gibi davranma. Eğer bir şeyi anladığınızı düşünüyorsanız, iki hafta sonra hatırlamanız için notlar alın.
Péter Török

1
Öte yandan, bazı insanlar çok fazla soru soruyor (Stack Overflow'da).
BoltClock

1
@SnOrfus: Bu niteliksiz olanlar bahsettiğim kişiler: P
BoltClock

14

Temel bilgileri anlamaya çalışmak yerine kopyala yapıştır ve deneme yanılma

Birçok genç geliştirici, yakın görünen kodu kopyalar, daha sonra çalışan bir tanesine çarpana kadar neredeyse rastgele değişikliklerin kaba kuvvetle farklı permütasyonlarını dener. Neden işe yaradığını bilmiyorsanız , sınır durumlarında, onu anlayan birinin daha sonra temizlemek zorunda kalacağı hataları ortaya koyma olasılığınız vardır.

Kodun ilk taslağını tutma

Deneyimli bir geliştirici, belirli bir karmaşıklığın yeni bir işlevini yazdığında, derlemekten başka bir şey yapmayan bir saplama ile başlar, daha sonra genel algoritma için yüksek düzeyli sahte kod yorumları eklemek için yeniden yazar ve ardından bu yorumları birer birer yeniden yazar. gerçek kod, test için gerektiği gibi kukla kod ekleme ve kaldırma, ardından uygulama sırasında ortaya çıkan artıklığı kaldırmak için yeniden yazın ve bir dizi ardışık ve artımlı iyileştirmede.

Küçük geliştiriciler büyük bir yığın halinde yazma eğilimindedir, daha sonra büyük kaba kuvvet hata ayıklama yaparlar. Düzenleyiciye yazıldıktan sonra bir kod satırını silmek istemezler ve sonunda işe yaradıklarından o kadar mutlu olurlar ki, fonksiyonel olmayan iyileştirmeler için yeniden yazmaktan nefret ederler, ancak yapmaları gerekenler en çok.


1
Elbette bu yeni programcılara özgü, sadece kötü programlara özgü bir sorun olmasa da, "anlamaya çalışmak yerine kopyala ve yapıştır" için +1. Yeni programcıların en azından büyüme şansı var - on yıllardır programcı olan ve hala bunu yapmayan adamlarla çalışıyorum.
Tom Anderson

Bunun bir kısmı da yönetim tarzının bir sonucu olabilir. Görev zaten beklenenden daha uzun konuşuyor ve yönetici yarın özelliklerinizi istiyor. Çalıştırmak ve hızlı bir şekilde bir sonraki göreve geçmek için acele ediyorsunuz. Her şey mikro boyutlu görev kartlarına ayrılmıştır, bu yüzden yeniden düzenleme veya geri adım atmak ve daha büyük soruna bir bütün olarak bakmak için zaman yoktur
Jamie McGuigan

14

Bir durumla ilk karşılaşan olduğuna inanıyorum.

Karşılaştığınız her programlama problemi başkaları tarafından bir şekilde genel olarak karşılanmıştır. Deneyimli programcılardan öğrenecek çok şey var. Google'dan önce programlamayı hatırlayacak kadar yaşlıyım ve emdi . Arama motorlarımız varken daha da kötüydü, ancak henüz web'de o kadar iyi bilgi yoktu. Şimdi programlama çok daha verimli çünkü küresel bilgiye saniyeler içinde erişebiliyorsunuz. Bunu kullanmayan insanlar tehlikede yok sayıyorlar.

Düzenle :

Daha açıkçası, ben değilim değil kopyayı savunan / programlama yapıştırın. Ancak, kendiniz iyi kararlar verebilmeniz için mevcut bilgileri gözden geçirmeniz gerektiğinden eminim.


1
Ayrıca, geliştiricinin Web'den şüpheli kaynaklardan gelen tüm kodu kopyalayıp yapıştırmasını istemezsiniz. Arama yapmak bazı fikirler edinmek, belki bazı temel anlayış sorunlarını çözmek, ama asla hazır çözümler elde etmemek iyidir. Ayrıca geliştirici dumber yapar; belki de onu iyi bir koleksiyoncu yapar ama mucit değildir.
Elijah Saounkine

Bir noktada, ne yaptığını öğrenmek için zaman harcamadan kopya yapıştırma kodu olan programlama becerilerinizi hızlandırmayacak olan Elijah ile hemfikirim. En kötüsü, görevi devralacak ve kötü bir alışkanlık haline gelecektir.
setzamora

1
Elbette, ancak @Scott, kod kopyalama ve yapıştırma hakkında hiçbir şey söylemedi, sadece bir durumla ilk karşılaştığınızı varsaymadığını söyledi, yani faydalanabileceğiniz bazı bilgiler ve deneyimler olabileceğini anlayın. Örnek: İki dizenin benzer olup olmadığını bilmek istiyorum. Bu sorunu çözmek için zaten bilinen bir algoritma var mı? Bir geliştiricinin , yanıtların zaten var olduğunun farkında bile olmadan, kendi başlarına gitmeye karar verdiğini düşünün .
David Conrad

@David Conrad doğru, nokta alındı, burada aynı sayfadayız.
Elijah Saounkine

10

Her şeyi bildiğini düşünerek.

Bir jr aldım. javascript ile her şeyi çözmeye çalışan stajyer. Birkaç kavramı açıklamaya çalıştı, ama her zaman daha iyisini yapabileceğini düşündü. Şimdi PDF gibi bir baskıya hazır teknoloji yerine HTML kullanarak baskı çıktısı için oluşturduğu büyük bir programdan çıkıp yeniden çalışıyorum. Diğer önemli sorunlardan bahsetmiyorum bile.

Ders, yaşlılardan bir projenin başlarında büyük kapsamlı rehberlik istemek, yardım almadan mimarlıktan vazgeçmektir. Kodu ve ayrıntıları tek başına yazabilirsiniz, ancak en azından doğru teknolojiyi kullandığınızdan emin olun.


5

Gençler temelleri bilmediğinde nadiren rahatsız oluyorum, Üniversitede SCC gibi endüstri becerileri öğretilmiyor. Onlara öğretmek kıdemli geliştirici bir iştir. Sadece kişilik çatışmalarından rahatsız oluyorum. Ama en temel şeyleri bilmeyen kıdemli geliştiriciler beni rahatsız ediyor


1
@Graig, tecrübeli geliştiricilerin gençler ile ilgili bizi rahatsız eden birçok şeyi hak ediyor, bir üniversitede değil, ticari bir ortamda öğrenmek zorunda olduğumuz şeyler.
Nickz

5

Bilgilerini ilerletmek istememek - bunun yerine en az direniş yolunu kullanmak.

Geçen gün bir stajyer grafik tasarımcı (şaşırtıcı bir şekilde programlama konusunda yetenekli) ile birlikte yardım istedi çünkü jQuery'de bir şey uygulamakta zorluk çekiyorlardı - eğer geleceğini göremiyorsanız kapanma acı verici olabilir.

Stajyerle oturdum ve neyin yanlış gittiğini tam olarak açıkladım. Hatayı düzelttik, sonra yapılabilecek birkaç ek iyileştirmeye dikkat çektim ("burada olduğumdan beri") ve suçlu işlevini 20 yerine 10 satırda ve hatalar olmadan yeniden yazdık. Herhangi bir soruyu cevapladıktan sonra, dünyada bir kez daha her şeyin yolunda gittiğinden memnun kaldım.

Ertesi gün stajyer, "um, bazı değişiklikler yapmak istediğini ve fonksiyonu benim yolumdan yeniden yazmak istediğini ortaya çıkaran bir soru ile geldi.

Bunun yerine daha fazla deneyebilirdi (ek sorular sormak, bahsettiğim kavramları okumak) - kısa kod anlamak hiç bu kadar zor olamaz - ya da kolay çıkış yolu olabilir. Birinin ikincisini yaptığını her gördüğümde beni üzüyor.


İlginçtir, muhtemelen okumayı zorlaştırırsanız merak ediyorum. İlk proje yöneticimin bunu birkaç kez yaptığımı hatırlıyorum (ve ben de geri değiştirmekten suçluyum) Geriye baktığımda yaklaşımının daha iyi olduğundan emin olduğum zaman, neden ve nasıl çalıştığını anlamak için yeterince gelişmiş değildim .
Maxim Gershkovich

3

OOP anlamıyor. Ne yazık ki bu muhtemelen çoğumuzun fark ettiğinden çok daha yaygın.

Bir sınıfın, soyut sınıfın, arayüzün nasıl yaratılacağını bilmek, hatta polimorfizmi bilmek bir şeydir; bunları programınızın yararına nasıl kullanacağınızı anlamak başka bir şeydir .


Bundan kaçınmak istiyorsanız, bu soruları ve cevaplarını aydınlatıcı buldum:


Temel düzeyde olduğu gibi, nesneler, sınıflar ve miras yaratarak ne demek istediğinizi bilmiyorlar mı? Veya tasarım desenlerini kullanmak gibi daha gelişmiş şeyler (itiraf etmelisiniz, elbette başka kitaplar / kılavuzlar olmasına rağmen GoF kitabı oldukça abartılıdır)
Andrew M

@Andrew Cevabı biraz genişlettim.
Nicole

1
Ve ben bunun tersini görüyorum: sadece OOP öğretildiği için C'ye eski usul usul kodunun nasıl yazılacağını bilmiyorum. Sonra tekrar, daha fazla ayrıştırıcı yazmayı öğretmeyen insanlar hakkında gitmeme izin vermeyin çünkü tüm bu sorunların lex ve yacc kullanılarak çözülebileceği söyleniyor.
quickly_now

1
@quickly_now Yine de bu iyi bir nokta writing code other ways than OOPve writing bad OOPtamamen farklı iki şey. İlk olarak, bir sorunum yok.
Nicole

Çoğu üniversite nesne yönelimli tasarım öğretmez. Ayrıca pek çok işyeri, küçük geliştiricilerle bile silolar gibi çalışır ... veya nesne yönelimli programlama bilmeyen "kıdemli" geliştiricilere sahiptir. X yıl çalışarak unvanı almış "kıdemli" geliştiriciler ve eşyalarını bilen kıdemli geliştiriciler vardır ....
Cervo

3

Ne bilmediğini bilmemek ve cehalet düşüncesinde her şeyi biliyorsun.

(Ve yakın kuzeni, sormak istemiyor.)

Kısmen bu örgütsel bir şeydir - uygun bir gelen indüksiyon, bu şeylerin bazılarının sorun haline gelmesini önlemek için uzun bir yol kat edecektir. Ancak çok az şirket, gelen bir indüksiyon için zamana veya insanlara sahiptir - birkaç günden birkaç haftaya kadar herhangi bir yere götürmesi gereken ve geliştiricileri işlerinden uzaklaştıran bir şey. Onun yerine yangınları söndürmek zorundayız.


2

Bir CS programından nispeten taze olan kaç genç programcının algoritmalarla zayıf olduğuna şaşırıyorum. Kötü algoritma seçimi gerçekten iş uygulamaları doğrultusunda göze çarpmayabilir, ancak günde milyarlarca web hizmeti isteği işlenirken gerçekten önemli.

İşte kullandığım neredeyse tüm Junior programcıların sorunu vurgulayan bir röportaj sorusu:

N'inci Fibonacci numarasını hesaplayan kod yazın .

Neredeyse her zaman en bariz ama verimsiz yazmak için gidiyorlar

int Fib(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fib(n-2) + Fib(n-1);
}

Algoritmik karmaşıklık hakkında yorum yapmam istendiğinde genellikle "O (N) ... uhm ... O (N logN) 'den daha kötü" olur. Aslında bundan çok daha kötü ...


1
tamamlayıcılık hakkındaki sorunuza cevap vermek için, bu formülü, ilk etapta özyineleme yerine kullanacağı, özyineleme olmadan fibonacci sayılarını hesaplamak için bilmelidir.
P

1
@Pavel: Bir O (n) ve O (1) çözümü var ... aslında Like every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution. en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression
Eric J.

1
Gönderdiğiniz çözümün mükemmel olduğunu söylemiyorum. Sadece takip eden sorunuzun böyle bir çözüme, karmaşıklığa ilişkin soruya olan ilgisini sorguluyorum. Bunu sorarak neyi başarmak istiyorsunuz ve en önemlisi , bir önceki sorunun cevabı göz önüne alındığında neden istediğiniz şeye ulaşılmasını bekliyorsunuz ? (Ben noktayı mü?)
P Shved

benim açımı daha açık hale getirmek için, karmaşıklığı tahmin etmek yerine kodun nasıl geliştirilebileceğini sormanızı öneririm. Bazı CS mezunlarının not önereceğini veya formülü bildiklerini ancak bir kerede göstermek istemediklerini söyleyeceklerinden eminim çünkü zeki olduklarını düşünüyorsunuz.
P

Pratik olarak, böyle bir işlev bir profil oluşturucu kullanılarak keşfedilebilir ve bir not önbelleğine eklenerek optimize edilebilir. Verimsizlik sadece büyük N değerleri için bir problemdir. Bir çocuğa böyle bir kodu öğretmenin en iyi yolu onları bir hata ayıklayıcı kullanarak tüm kod yürütme adımlarını atmaya zorlamaktır. N'nin gerçekten büyük değerleri için, maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/…
Jamie McGuigan

1

Kod girintisini geriye doğru yapmak!

Tabii ki çok "tipik" değil. Bunun mümkün olduğuna asla inanamadım, ama normal bir geliştiricinin nasıl yazacağı

try {
    switch(action){
        case case1:
            ...
            break;
        case case2:
            ...
            break;
        default:
            break;
    }
}
catch(Exception e) {
    e.printStackTrace();
}

(Tanrı, benim için hala imkansız görünüyor!)

            try {
        switch(action){
    case case1:
...
break;
    case case2:
...
break;
    default:
break;
        }
            }

Sinir bozucu değil mi?


Adında ne var ...
Mike Speed

1
Çok şaşırtıcı !!!
javanna

Neredeyse onlar Arapça, İbranice veya Çince nerede soldan sağa batı kongre yerine, sağdan sola okuduğunuz gibi. Kodunuzu girintilendirmenin mükemmel bir şekilde geçerli bir yoludur, ancak en derin iç içe yerleştirme düzeyinize dayanarak tüm dosyanızı yeniden girintilemeniz gerektiği anlamına gelir ve kodunuzu, ters kuralını paylaşan herkesle uyumlu hale getirir.
Jamie McGuigan
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.