Okullarda yaygın olarak öğretilmeyen profesyonel programlama için hangi beceriler gereklidir? [kapalı]


14

Ben birinci yıl bilgisayar bilimleri bölümüyüm. Bir iş fuarına gittim, özgeçmişlerimi dağıttım, sürprizime çok bir röportaj ve sonunda bir geliştirici olarak staj aldım.

Görüşmeciye (kim benim patronum olacak) sadece bir ilk yıl olduğumu ve çok fazla deneyim programlamam olmadığını açıkladım. Bana matematikte güçlü bir arka plana sahip olduğum için (matematikte BA'mla neredeyse bitti, artı kemerin altında bazı grad derslerim var) çünkü iyi yapacağımdan emin.

Tüm programlama derslerinde başarılıyım ama hala dezavantajlı olduğumu hissediyorum. Şu anda, bu iş başladığında gerçekten iyi yapmak istiyorum. İş çoğunlukla C # kullanıyor olacak, ancak belli ki C # öğrenmenin yanı sıra, gerçek bir programcı olmadan önce öğrenebilmenizi istediğiniz tek beceri nedir?

Herhangi bir tavsiye büyük beğeni topluyor, ancak aklınızda herhangi bir kitap varsa lütfen söyleyin. Teşekkürler!


8
bu soru bu sitede farklı şekillerde birçok kez sorulmuştur. lütfen önce arayın ve sonra sorun. SSS'ye göz atın; programmers.stackexchange.com/questions/149970/… ; programmers.stackexchange.com/questions/46716/…
tgkprog

3
Arama yaptım ve her iki soruyu da gördüm. Ancak öğrenme tasarımı veya web geliştirme ile ilgilenmiyorum. Birçok programcının okulda gerçekten öğrenmesi gerektiğini düşündüğü şeyleri öğrenmekle ilgileniyorum. Bu soruların bazı harika tavsiyeleri var, ama aradığım şey değil. Teşekkür ederim
Eric

+1 Tam zamanlı bir programcıya başlamadan önce ustalaşabileceğim bir beceri güçlü Matematik becerileri çünkü Matematik becerileri sahip olunması gereken en önemli beceridir çünkü sorunları çözmek ve yeni kavramlar öğrenmek ve bir programcı olarak zihni eğitmek, çoğunlukla her gün yapacağım şey.
Anthony

3
İş Akışı. Ve bu kodun farkına varmak, tek boynuzlu at benzeri olmayan bir kar tanesi değildir. Tasarım yaparken en az Şaşkınlık İlkesini uygulayın. Bunu yapmadan önce düşün. Karmaşıklığı yönetmek çok önemli bir konu haline gelir.
sleeplessnerd

1
Aslında güçlü matematik becerilerine sahip insanlarla çalışmayı pek sevmiyorum. Yazılım mühendisliği prensiplerini uygulamak yerine her şeyi matematiksel bir formüle dönüştürürler. Yazılım matematik DEĞİLDİR. Anlaşılması kolay olması için kodunuzu yazmanız önemlidir.
Rob K

Yanıtlar:


21

Okulda kod yazmayı öğreniyorsunuz. Hakkında bilgi sahibi olmadığınız şey, yazılım geliştirmenin geri kalanıdır. Okulda hiçbir şey öğrenmediğim en önemli şeyler:

  • geliştirme ekibinin bir parçası olarak çalışmak
  • sürüm kontrolü kullanma
  • hata izleyici kullanma

Bunlar herhangi bir geliştirici için çok önemli becerilerdir ve maalesef bir sınıfa girme olasılığınız yoktur.


4
Bir geliştirme ekibinin parçası olarak çalışmak kesin ve karmaşık bir sanattır. Sürüm kontrolü ve hata izlemenin neden her zaman yeni geliştiriciler için büyük bir engel olarak çerçevelendiğini anlamıyorum. Kesinlikle önemli araçlardır, ancak yeni kişiyi adam sayfalarına, bir O'Reilly kitabına veya çevrimiçi bir eğiticiye yönlendirirsiniz ve ekmek ve tereyağı kullanımını birkaç saat içinde alabilirler. Neden böyle bir şey için sınıfta zaman harcıyorsun?
Charles E. Grant

1
@ CharlesE.Grant Version kontrolü, göreceli olarak kısa sürede temel bilgileri alabilmeniz için programlamaya benzer, ancak etkili bir şekilde kullanma deneyimi gerekir. Git ve Mercurial gibi DVCS'lerin anlaşılması svn gibi CVCS'den daha fazlasını gerektirir.
Izkata

8
Hiçbir zaman (bir geliştirme ekibinin bir parçası olarak çalışmanın önemli bir parçası olan) yerleşik kodu korumakla ilgili derslerim yoktu ve kodun nasıl test edileceğine dair sınıf deneyimim çok azdı.
Velociraptors

1
@ CharlesE.Grant: Birkaç yıl boyunca programlama ve ilgili konularda lisansüstü dersler verdim. Mezun öğrenciler bile neden herhangi bir revizyon kontrol sistemini kullanmaları gerektiğini anlamakta zorlanırlar. Ve isteksizce kullanmaya başladıklarında, çok çabuk karışıyor gibi görünüyorlar. Önemli bir öğrenilmemiş konu olarak Mason'a + 1'leyin.
Peter

1
+1 +1 +1, her nokta için bir tane. O kadar aptalca ki sana bu şeyleri öğretmiyorlar ... ya da en azından sana öğretmek için TRY.
Radu Murzea

20

Bir geliştirici olarak, ben çok önemli bir role sahip olduğunu benim daha önceki kariyerinde bilseydim . Ben sadece kod maymunu değilim.

Bir geliştirici olarak, üzerinde çalıştığınız yazılımla ilgili iş bölümlerinde önemli bir ele sahip olursunuz.

Şirketiniz kodları için test yazmazsa, şimdi testleri yazmaya başlayın.

Eğer hataları izlemiyorlarsa, şimdi uygun bir hata izleyici bulun.

Patronunuz hemen e-tablo uygulamanızın açılış ekranı için süslü bir animasyon üzerinde çalışmaya başlamanızı istiyorsa - ancak bir sonraki müşteri son teslim tarihinden önce düzeltmek için düzinelerce hata ve birkaç kritik tamamlanmamış özellik var - doğru önceliklendirme hakkında bir konuşma yapın .

Sadece "normal bir çalışan" olsanız bile, bir danışman gibi davranmak, kendinizi sadece kod yazan ve işletmeye ilgi duymuş gibi davranmayan diğer geliştiricilerden ayırmanın harika bir yoludur.


9

Okulum bana asla problemleri nasıl çözeceğimi öğretmedi. Bana kodlama mekaniğini öğrettiler, ama bir problemi çalışabilmek, anlayabilmek ve bir çözüm bulmak öğretmedikleri bir şey. Bir programlama dilinin anlaşılmasına ek olarak sabır, titizlik ve sezgi gerektirir.

Ayrıca ekip çalışması, sürüm kontrolü ve bakımı kolay kod yazmanın önemi hakkında da bilgi vermediler. Ayrıca yazılımın nasıl test edileceği hakkında pek bir şey öğretmediler. Ünite testine değinmiş olabilirler, ancak kabul testi, regresyon testi vb. Kavramlarına çok fazla girmediler.

Feragatname: 80'lerde üniversiteye gittim. Bununla birlikte, bugün işe aldığım insanlarla bunun kanıtlarını görüyorum - gerçek programlama dünyası hakkında çok az bilgiye sahip taze mezunlar: sürüm kontrolü, test, temiz kodlama, hata ayıklama becerileri, vb.


Test bölümü için +1. Üniversitemde de öğretmiyorlar. Öğretmenin ünite testinden bahsettiği 1 sınıf (evet: bir) vardı ... yaklaşık 3 dakika. Bu kadar.
Radu Murzea

Bunun geç bir yanıt olduğunu biliyorum ama matematik derecemi işverenlerime çekici kılan şeylerden biriydi. Bu görüş kesinlikle işverenler arasında da paylaşılmaktadır.
Eric

Pek çok okulda algoritmalar ("problem çözme" olarak da bilinir) uygun şekilde öğretilmez veya hiç öğretilmez veya iy "agnostik" olsa bile bir programlama diliyle nasıl uygulanacağını öğretmezler.
umlcat

Hmmmm .... Cevabınız, yaşadıklarımın daha zıttı olamazdı. Okulun tüm amacı, bir problemi etkili bir şekilde inceleyebilmeniz, anlayabilmeniz ve çözüm üretebilmeniz için bir arka plan vermektir. Yeni bir mezun, okuldan yeni çıkınca "iyi" olmayabilir, ancak kesinlikle eğitilmeli ve bunu yapabilmelidir. Okulumda hiç programlama öğretmediler. Kursun size öğretmeye çalıştığı bilgileri öğrenirken (kendi başınıza) nasıl programlayacağınızı öğrenmeniz bekleniyordu. Bu yüzden sadece "kodlama mekaniği" ni öğrettiğim yerde benden öte ...
Dunk

... İyi okullarda, sadece kod yazmayı öğrenmek için kredi alamazsınız. Sürüm kontrolünü kullanmakta zorlanıyorsanız, hiçbir eğitimin yardımcı olamayacağı çok daha ciddi sorunlarınız var. Korunması kolay bir kod yazmanın kesin yolunu bulduğunuzda bir kitap yazın ve zengin olun. Henüz kimse bu sorunu çözmedi. Okulda test edilmek üzere programlarınızı açmak zorunda olduğunuz bölümleri kaçırmış olmanız gerekir. Kabul / regresyon testleri sektöre özeldir ve işi okulda yapmak yerine şirket yolunda daha iyi öğretilir.
Dunk

7

Bence okulda öğrenilmeyen (veya düzgün öğrenilen) en önemli şeylerden bazıları:

  • Doğru şekilde nasıl kullanılır ve IDE; modern bir IDE'nin tam gücünü kullanmak üretkenlikte büyük bir artış sağlar: otomatik yeniden düzenleme, kod navigasyonu, VCS entegrasyonu, kod analizi, kod tamamlama vb.
  • Hata ayıklayıcı nasıl düzgün kullanılır: uzaktan hata ayıklama, çok iş parçacıklı uygulama hata ayıklama, hızlı değerlendirme vb.
  • Hata düzeltme ve bakım; Üniversitede size bununla ilgili neredeyse hiçbir şey öğretmiyorlar, ancak endüstride hataları düzeltmek oldukça yaygın.
  • Büyük bir ekipte ve büyük bir projede nasıl çalışılır; temelde üniversitede, büyük endüstriyel projelere kıyasla projeler biraz küçüktür.
  • İyi kod nasıl yazılır ve okunabilirliğe nasıl vurgu yapılır; bu deneyim ile gelir, ancak size temel bilgileri öğreten bazı kitaplar vardır (Kod Tamamlandı, Temiz Kod vb.).
  • Özelleştirmeyi kullanarak bir çerçeveyi tam gücüyle kullanma; üniversitede belki de bazı temel senaryolarda bazı çerçevelerin nasıl kullanılacağını öğrendiniz; endüstride köşe kasalarına ulaşacaksınız.
  • Şartname sonrası kod nasıl anlaşılır ve yazılır; muhtemelen spesifikasyonun nasıl yazılacağını öğreneceksiniz, ancak şimdi onu nasıl okuyacağınızı ve nasıl yorumlayacağınızı öğreneceksiniz

VCS, hata izleme sistemleri, oluşturma araçları vb. Bir ekiple çalışabilmek için öğrenmek zorunda olduğunuz araçlardır; temel düzeyde öğrenilmesi için fazla zamana ihtiyaç duymazlar ve bundan sonra oldukça açıktırlar (en azından başlangıçta); Yukarıdaki liste, biliniyorsa üretkenliğinizi artıran incelikler içermektedir.


aka "Programlama" sadece bir programlama dili bilmekle kalmaz, aynı zamanda bir "çevre", "ekosistem", "çerçeve" vardır ...
umlcat

4

Yeni mezunlardan kayıp gördüğüm en büyük şey sürüm kontrolünü iyi anlamak.

Kaynak kodu depolarını ( GitHub gibi ) kullanarak açık kaynak yazılım geliştirme konusunda deneyiminiz varsa most, diğer sınıf arkadaşlarınızdan bir adım öndesiniz demektir.

İkinci şey karmaşıklık anlayışıdır ( big O). Üniversiteden çoğu insan bunu duymuş, ancak henüz devreye girdiği yerde gerçek yazılım geliştirmemiştir ve bu nedenle gerçek önemini anlamamaktadır.

Veri kümeleriniz o kadar büyük olduğunda, kaba kuvvet asla onu kesmeyecek ve diğer tekniklerin anlaşılması yararlı olacaktır ve kaba kuvvetin durum için ne zaman iyi olacağını tahmin edebilmek, deneyim ve hatalar yaparak geliştirdiğiniz bir şeydir.


1
Bence sürüm kontrolü eğitiminin eksikliği değişmeye başlıyor. Sürüm kontrolü okulumda yoğun bir şekilde vurgulandı.
Southpaw Hare

@SouthpawHare: Ben bunun varolmadığını söylemiyorum, hatta günümde bile öğrettiler. Sadece bu deneyimle üniversiteden çıkan insanlar hala azınlıktadır. Ve böyle insanlar daha değerli. Son 20 yılda çok değiştiğini kabul etmiyorum.
Martin York

3

İyi hata ayıklama, özellikle bir hata ayıklayıcı kullanma ve bir hata ile başa çıkmak için uygun bir yaklaşım benimseme, yani neyin neden olduğunu bulma, nedene neden olduğunu bulma ve çözümün neden sadece denemek ve ummak yerine onu düzelttiğini anlamak.

Çoğu bilgisayar bilimi mezunu hata ayıklama konusunda oldukça fakirdir ve sonuç olarak işleri düzeltmek gerekenden daha uzun sürer ve bunu yaparken daha fazla hata oluşturur.

Sürüm kontrolü, hata izleme ve benzeri gibi diğer şeylerden bahsetmeye değer, ancak bence hata ayıklamaya mantıklı yaklaşımların eksikliği çok daha büyük ve daha fazla öğrenme gerektiren bir konudur.


2

gerçek bir programcı olmadan önce öğrenebilmeyi dilediğin yetenek nedir?

Deneyimlerime göre, okulum bana problemleri nasıl çözeceğimi hiç öğretmedi.

Deneyimlerime göre programlama tamamen problemleri çözmekle ilgilidir. Okulumda sadece sözdizimi hatası olmadan program yazıp yazamayacağınızı kontrol ediyorlardı. Aslında gerekli olan girdi olarak verilmez. Sözdizimi, gerekirse herhangi bir kitaptan arayabileceğiniz bir şeydir. Ancak bir problemi çözme yeteneği, iyi bir şekilde çalışmanız ve kendinizi bunun için eğitmeniz dışında hiçbir yerden elde edilemez.

Her türden olsun, kendinize güven duymanız için mümkün olduğunca çok soru tamamlamayı deneyin. Bunu zihninizde bir tutku ile yapmayı deneyin ve mutlaka geçeceksiniz.


2

Bazı ortak tasarım modellerini öğrenmek için biraz zaman ayırın: fabrika, singleton, adaptör, komut ve gözlemci (üniversitem onlara öğretmedi).

Eğer şirket yazılım geliştirme için Agile metodolojisini kullanıyorsa, bunu anlamak biraz değerli olacaktır.


2

Profesyonel bir programcı olarak ihtiyaç duyacağınız becerilerin çoğu, bir üniversite / akademik ortamda her biri için neredeyse imkansızdır.

Sadece doğrudan sahada çalışma deneyiminden gelebilirler.

  • Grafik tasarımcıları, ürün tasarımcıları, yöneticiler vb. Gibi "mesleğiniz" dışındaki kişilerle nasıl işbirliği yapılacağını ve iletişim kuracağını öğrenme.

  • İşinizin kod yazmak değil, bir ürünü hayata geçirmek olduğunu anlamak. Söylemesi yapmaktan kolay.

  • İyi kodlama uygulamalarının pratik hususlarla nasıl dengeleneceğini bilmek. Kodun "yeterince iyi", "fazla mühendislik" veya "yeniden düzenleme ihtiyacı" olduğunda karar verme yeteneğini edinmek.

  • Kendi zayıflıklarınızı ve güvensizliklerinizi aşmayı öğrenmek. Eleştiriye dayanma becerisi kazanmak. Nefsinden vazgeç. Kişisel sorumluluk almanın ve sonra almanın ne anlama geldiğini öğrenmek.

Bütün bunları okumak kolay. Bunu uygulamaya koymak tamamen farklı bir şey. Tek yol bunu yapmaktır. Birçok kez ısırılırsınız ve muhtemelen acıtacaktır, ancak bundan daha güçlü ve daha iyi çıkacaksınız.

İlgili okumalar: Çıraklık Desenleri


1

Her şey okula bağlı. Üniversitemde birçok pratik projemiz var. Oldukça sık takımlarda ve çeşitli kaynak kontrollerini kullanarak. Bence bazı okullar bunlara odaklanıyor.

Ama okulun öğretmediği bir şey var: ayrıntılar. Okul genellikle bir teknoloji veya uygulama öğrettiğinde (web geliştirme, JAVA UI geliştirme, gelişmiş veritabanları gibi), sadece yüzeyi çizecek ve bu teknolojiyi veya gerçek dünya işinde pratik yapmak için gerekli olacak hiçbir zaman ayrıntılara girmeyeceklerdir. Sorunlarınızı nasıl çözeceğinize ilişkin genel yollara genel bir bakış elde edeceksiniz, ancak kendinize gerekli ayrıntıları öğrenmeniz gerekecek.

Okulun bir şeyi ayrıntılara öğrettiği zaman, bir şeyin arkasında güçlü matematiksel veya teorik bir arka planın olduğu zamandır. Biçimsel diller veya SQL veritabanları gibi şeyler genellikle okul müfredatının temel parçasıdır, çünkü bunlar matematiksel temeller üzerine inşa edilmiştir ve bilgisayar bilimi veya mühendisliğinde çok kullanılmaktadır.


1
  • gereksinimleri - onları yanlış ve dinlenme çoğunlukla bir israf
  • öncelikler (hangi sürümde serbest bırakılır)
  • kutudan çıkar veya kullan (satın al / ücretsiz)
  • takım çalışması
  • proje yönetimi - gereksinimler, kalite (ürün veri örnekleri, test senaryoları, nasıl test edilir, kodlamadan önce kapsama alanı, maliyete daha çok benzer, ancak ilgili değil.
  • iletişim araçları (posta, toplantılar: takvim planlayıcısı)
  • kaynak kodu yönetimi

0

Keşke genel bir programcı olmak, çok farklı şeyler, diller, veritabanları ve platformlar öğrenmek ve nihayetinde bir web geliştiricisi olmak isteyip istemediğime oyunda daha önce karar vermiş olsaydım, ya da sadece bir CMS'de uzmanlaşsam mı, hatta bir uzman olarak Photoshop'ta uzmanlaşmak, becerileriniz gerçek bir programcının bilmesi gereken şeyleri bilmek kadar değerli ve karlı olacaktır. Başka bir deyişle, sadece iyi para kazanmanız gerekiyorsa, BİR ŞEY konusunda uzmanlaşın. Bilgisayarı ve sorunları çözmeyi seviyorsanız, programcı olun.

[JQuery gerçekten güçlü bir şekilde ortaya çıkmadan önce 4 veya 5 farklı javascript 'çerçevesi' gibi öğrendikten sonra ve sonra yansıtan, JAVA sertifikası almak ve asla java pozisyonu almak ve birden fazla platformda çalıştıktan sonra; AS400- rpg,> .NET - c # ve PHP, dilemeden önce photoshop konusunda uzmanlaştım ve hataları düzeltmek veya yazılım yazmak zorunda kalmadan eşit para kazanmak. ]

Demek istediğim, geniş bir konu yelpazesini bilmede belirli bir memnuniyet var, ancak photoshop'u nakit olarak bilen birinin aynı maaş ödemesini gördüğünüzde memnuniyet azalıyor.


2
Evet, ama bu tür bir uzman asla kendi dükkanlarını açmayacak. Hayaliniz ileride kendi başlangıcınızın CEO'su olmaksa, BÜYÜK bir dizi beceriye ihtiyacınız olacak.
Davor Ždralo
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.