Neden bunları okulda öğretmiyorlar? [kapalı]


118

Yaz boyunca, Google Summer of Code'a girecek kadar şanslıydım. Çok şey öğrendim (muhtemelen tüm üniversite derslerimin toplamında öğrendiğimden daha fazla). Okulda daha önce öğrendiğim birkaç şeyi neden öğretmediklerini gerçekten merak ediyorum. Birkaç isim:

  • birim testi
  • sürüm kontrolü
  • çevik geliştirme

Bana öyle geliyor ki, veri yapıları ve algoritmalar gibi diğer şeyleri önceden öğretmek için önemli miktarda zaman harcıyorlar. Hala bunların erken öğrenmenin çok önemli olduğunu düşünürken, neden onlardan önce bu üçünü daha fazla öğretmiyorlar? Yoksa bu tür şeyleri pek öğretmeyen sadece benim okulum mu?

Beni yanlış anlamayın, üniversitelerin her zaman en moda programlama heveslerini öğretmesinin cazip olduğunu düşünmüyorum, ancak hocalarımın bana "kodlamaya başlamadan önce bir şema çiz" dışında bir şey öğretmesi gerekmez mi?


47
Çoğu öğretmenin, sürüm kontrolü ve birim testi gibi en son trendleri takip edemeyecek kadar uzun süredir gerçek dünyadan uzaklaştığını görüyorum.
Ryu

14
Sürüm kontrolüne "en son trend" demenin adil olduğundan emin değilim. SCCS 1972'de geliştirildi - en.wikipedia.org/wiki/Source_Code_Control_System
JeffH

2
Bunları RIT'de öğretiyorlar.
geowa4

6
Haklısın. Veri yapıları, algoritmalar, eşzamanlılık, ağ oluşturma ve veritabanları yerine bunları öğretmeleri gerekir. Şimdiye kadar öğrenmeye ihtiyacı olan ortalama olanlar .
Humphrey Bogart

1
Bunun büyük ölçüde kayıtlı olduğunuz üniversiteye bağlı olduğunu düşünüyorum. En azından ziyaret ettiğim üniversite için, Birim testinin, sürüm kontrolünün yanı sıra (en iyi uygulamaları takip etmeseler de bu bir başlangıç ​​olsalar bile) tüm bilgisayar bilimleri ödevlerimiz için en baştan bir gereklilik olduğunu söyleyebilirim. Bunun dışında üniversitenin size evrensel, soyut kavramlar öğretmesi gerektiği fikrine katılıyorum. Testleri doğru bir şekilde kavramak için, sürüm kontrolü ve çevik geliştirme, zaten sahip olduğunuz tüm müfredata sığamayacağınız çok sayıda ilk elden deneyim gerektirir.
Johannes Rudolph

Yanıtlar:


188

Sorunuzun en basit cevabı, bilgisayar bilimi ve yazılım geliştirme alanlarının hem çok yeni hem de çok iyi anlaşılmamış olmasıdır. Tüm bilim ve mühendislik disiplinleri modern zamanlarda daha hızlı ilerliyor olsa da, diğer alanların yararlanabileceği çok daha fazla deneyime sahip ve nasıl çalıştıklarına dair çok daha geniş bir ortak anlayış var.

Örneğin, malzeme bilimindeki son gelişmelere rağmen, inşaat mühendisleri yaklaşık 2000 yıldır devrilmeyecek bir kemerin nasıl inşa edileceğini biliyorlar ve bu, üniversitede nispeten az tartışma ile öğretilebilen ve öğrenilebilen bir şey. Yazılım geliştiricilerin öğrenmesi gereken teknikler konusunda sizinle tamamen aynı fikirde olsam da, bu anlaşma kişisel deneyime ve resmi olmayan muhakemeye dayanmaktadır. Sosyal olarak kabul gören bir "en iyi uygulama" olmak için, toplanması çok pahalı olabilecek nicel verilere ihtiyacımız var: sürüm kontrolü ne kadar yardımcı olur? Nasıl yardımcı olur? Birim testi? Çeşitli tekniklerin etkinliği hakkında akıl yürütebiliriz, ancak aslında etkililiğin kesin olarak kanıtlanması çok pahalı olacaktır. Baştan sona eksiksiz, gerçekçi bir yazılım projesi yürütmemiz gerekirdi. eşdeğer uzmanlığa sahip programcı gruplarıyla, farklı teknikler kullanarak defalarca. En azından, bu projelerin yayınlamak istemeyeceği mevcut projeler hakkında birçok veriye ihtiyacımız olacaktı.

İnşaat mühendislerinin birçok bilgiyle birlikte bakmaları gereken binlerce yıllık köprüler var. Öte yandan, yazılım geliştiricileri, çoğu gizli tutulan yalnızca birkaç on yıllık bilgiye sahiptirler, çünkü kuruluşların geliştiricilerinin etkinliği hakkında bilgileri toplasalar bile derlemek ve yayınlamak için çok az motivasyonları vardır (çoğu 't).

Ayrıca bazı alanlar karışıklığı var. Yazılım geliştirme veya yazılım "mühendisliği", bilgisayar biliminden gerçekten farklı bir şeydir. Yazılım geliştiricilerin bilgisayar bilimi konusunda çalışma bilgisine ihtiyaçları vardır, ancak algoritmik karmaşıklığın sınırlarında çalışmak veya paralellik hakkında akıl yürütmek, çalışan bir programcının her gün yapacağı bir şey değildir; benzer şekilde, gerçek bir "bilgisayar bilimcisi", işe yaramayan veya ilginç bir şey yapmayan tonlarca çöpe atma kodu yazacak ve gerçek bir yazılım ürününün yapacağı türden bir titizlikten pek yararlanamayacaktır.

İnternetin ve açık kaynak topluluğunun ortaya çıkışı, bu soruları kesin olarak yanıtlamaya başlamak için yeterli veri sağlayabilir, ancak cevaplar yarın mevcut olsa bile, uluslararası topluma herkesin neyi kabul ettiği noktaya kadar nüfuz etmesi muhtemelen 100 yıl alacaktır. okullarda öğretilmelidir.

Son olarak bazı ekonomik düşünceler var. Yazılım geliştirmeye dahil olan hemen hemen herkesin, istedikleri geliştirme araçlarını çalıştırmak için özel makinelere ucuz ve kolay erişime sahip olmasından bu yana nispeten kısa bir süre oldu. Birkaç on yıl önce, bir makineyi tamamen testlerinizi yürütmeye adamak, hatta sonsuz bir kaynak kodu geçmişini barındırmak, birçok insan için anlamsız bir şekilde pahalı görünebilirdi.


44

Çünkü öğretmenlerimiz:

  1. Birim testini hiç denemedim,
  2. Sürüm kontrolünün nasıl kullanılacağını bilmiyorum ve
  3. "Çevik geliştirme" yi duymadım bile.

Öğrenciler meseleleri kendi ellerine almalıdır. Bunu yaptık ve gayet iyi çıktık, değil mi?


3
"Bunu yaptık ve gayet iyi çıktık, değil mi?" - BAZILARI ... bazıları yol boyunca kayboldu çünkü öğretmenler bunu yapamadı.
Andrei Rînea

12
Öğretmenler ne yaparsa yapsın, insanlar yine de şikayet edecek. Keskin olan her zaman bilgiye aç ve gayet iyi çıkacaktır .
Jeffrey Jose

Öğretmenlerimiz yazılım geliştiricisi değildi ve yazılım geliştirme alanında bir dereceye kadar gitmiyorduk; Biz - büyük ölçüde - farklı bir canavar olan bilgisayar bilimine gittik, pratikten çok teoriye odaklandık.
Dean J

1
@mislav: Öğretmenleriniz kimlerdi?
CesarGon

43

Leonardo da Vinci şöyle yazmıştır:

Bilim olmadan pratik yapmayı sevenler, dümen veya pusulasız bir gemiye giren ve nereye gideceğinden hiçbir zaman emin olmayan bir pilot gibidir. Uygulama her zaman sağlam bir teori bilgisine dayanmalıdır.

İyi okullar hem teoriyi (veri yapıları, algoritmalar vb.) Hem de uygulamayı (birim testi, sürüm kontrolü vb.) Öğretir. Bu, bu madalyonun her iki yüzünün de doğru bir şekilde öğretilebilmesi için uygun bir fakülte karışımı gerektirir. Gerçek deneyimi olmayan tamamen teorik türlerden oluşan bir fakülte işe yaramaz. Benzer şekilde, tamamen uygulayıcılardan oluşan bir fakülte bunu yapmayacaktır. Bir karışıma ihtiyacınız var ve iyi okullarda buna sahip.


1
Söylediklerinizin ana fikrine katılıyorum, ancak aynı anda birden çok sürümü yönetme sorununun anlaşılması gereken kilit bir teori unsuru olduğunu iddia ediyorum. Aksine, bu sorunu çözmek için CVS ve SVN gibi araçların kullanımının kesinlikle "uygulama" alanına ait olduğunu kabul ediyorum.
Andrew Swan

Ancak, genel bir "Yazılım Mühendisliğine Giriş" tipi sınıfta birkaç derste sürüm kontrolünü ele almak muhtemelen gerekli değildir. Ne yaptığını, temel kullanımı, belki biraz dallanma / birleştirme hakkında.
Adam Jaskiewicz

"Takım Yazılım Projesi" diye bir sınıfım vardı. Bu sürüm denetimi kapsayacak, ancak vermedi yaptım vs. kapak UML, yazılım geliştirme metodolojileri, toplama gereksinimleri, birim testi,
Adam Jaskiewicz

@Alan, hangi okullardan bahsediyorsun?
lifebalance

40

Bilgisayar bilimi her zaman biraz çelişkili olmuştur; Bilgisayarlarla ilgili olan kısım bir bilim değildir ve bilim olan kısım bilgisayarlarla ilgili değildir.

Üniversiteler, 'bilim' ucuna (algoritmalar, veri kayıtları, derleyiciler vb.) Daha fazla dayanma eğilimindedir çünkü bunlar, yıldan yıla evrim geçirme ve değişme eğiliminde olan mevcut sektörün en iyi uygulamalarından çok daha 'zamansızdır'. Örneğin, Sürüm Kontrolü, son 5 veya 10 yılda inanılmaz değişiklikler geçirdi, ancak büyük-O hala büyük-O ve hashing, btrees ve özyineleme hala 40 yıl önceki kadar yararlı. Fikirleri genellikle size git gibi araçları alabileceğiniz ve temel veri yapısının SHA-1 karmalarının döngüsel olmayan yönlendirilmiş bir grafiği olduğu ve geliştiricilerin çok çalıştığı söylendiğinde bunun ne anlama geldiğini anlayabilmeniz için yeterli temel sağlamaktır. io bağlantılı olacak şekilde sistem çağrılarının sayısını optimize etmek için.

Şimdi, bu son cümleyi anlamak için bilmeniz gereken her şeyi nerede öğrendiğinizi bir düşünün - eğer cevap 'üniversite' ise, iyi bir iş yapıyorlar.


13

Her şey geçici bir heves. Üniversiteden sonraki ilk yılınızda, üniversitedeki tüm yıllarınızdan daha fazlasını öğreneceksiniz. Bilgisayar biliminin bilgisayarlarla ilgisi yoktur.

Kolej size aletlerle dolu bir alet kutusu sağlar. Bu bir tornavida, yani hilal anahtarı. Her aracı üniversitede bir kez KULLANABİLİRSİNİZ. Gerçek dünyaya girdiğiniz zamandır, neye sahip olduğunuzu gerçekten öğrendiğiniz zamandır. Geriye kalanlardan işe yarar olanları, her ihtimale karşı evde tezgahta bırakmak istediklerinizi ve her gün cebinizde tuttuğunuz olanları ayırıyorsunuz.

Tqm, Iso, Cmm, Agile, vb. Bunların hepsi gelecekleri ve gidecekleri heveslerdir, başarılı olanların hiçbiri sağduyudan fazlası değildir. Tüm başarılı mühendisler ve şirketler biraz sağduyu kullanıyorlar, onları başarılı kılan da buydu, çok azı bunun için bir isme ihtiyaç duyuyordu. Sorun şu ki, sağduyu satamazsınız, bir yönetici akılda kalıcı bir isim olmadan sağduyu eğitimi alarak ve satın alarak şirkete değerini kanıtlayamaz. Üstlerinin bazı haber makalelerinde veya dergilerde okuduğu ve yöneticinin işini koruduğu ve sizinkini koruduğu üzerine bir isim koyun. Bu uygulamaları izlediğini iddia eden şirketlerin çok azı aslında bunu yapıyor. Çoğu, bir danışmana bir çek yazar ve yıllık ve / veya ömür boyu sertifikasını bazı kulübe alır, böylece web sitelerine bir grafik veya ürünlerinin geldiği kutuya bir etiket koyabilirler. Birçoğu bunun nadir olduğunu iddia edecek ... orada oldu, gördün, olur. Bunların hepsi işin bir parçası, bazen karlı kalmak ve kapıları açık ve ışıkları açık tutmak için köşeleri kesmeniz gerekiyor. Tüm bu uygulamaların sert takipçileri, sonuncusunun bir heves olduğunu ve bunun olmadığını, sonuncunun takip edilmesi gerçekten çok pahalı olduğunu, bunun olmadığını savundu. Sonuncusu sahteydi, az önce bir danışman tuttun, bu gerçek. Programlama dilleri gibi, bunlar da gelişecek. Sonuncusu sahteydi, az önce bir danışman tuttun, bu gerçek. Programlama dilleri gibi, bunlar da gelişecek. Sonuncusu sahteydi, az önce bir danışman tuttun, bu gerçek. Programlama dilleri gibi, bunlar da gelişecek.

İşin gerçeklerini, üniversite sistemini ve bu sistemdeki rolünüzü anlama beceriniz anahtardır. Hayattaki her şey gibi, savaşlarınızı seçin. İhtiyacınız olan veya bilmek istediğiniz size öğretmek için üniversite, işletme veya hükümet veya başka birinin işi değil. Bir numarayı kollamak sizin işiniz. Aynı şekilde, bunu yapmanız için size zaman verdiği için başka birini de suçlayamazsınız, bunu yapmak zorundasınız. Attan düşeceksin, kurban değilsin, kalkıp geri döneceksin, mazeret yok, hayat bununla adil değil. Broşürlerden yararlanın, bağımsız gibi davranmayın. Ve kesinlikle aidatlarınızı ödeyin, karşılığında onlara bir şey vermeden (o sırada elinizden gelenin en iyisini yapmadan) bir şirkete sadaka yutmayın.

İnsanlar neden cmm veya Agile ya da diğerlerinden herhangi birinin moda olduğunu düşünüyor? Neden olmadıklarını düşünüyorlar? Profesör neden size programı bu şekilde öğretti? Gotos'tan kaçınmak mı, sabitlerden kaçınmak için mi, yoksa bundan kaçınmak mı? Daha güvenilir kod ürettiği için mi? Daha iyi performans gösteren kod mu? İnsan hatasını azaltır mı? Yoksa ödevlere / programlara not vermenin daha kolay olması, onlara araştırma yapmaları için daha fazla zaman vermesi mi? Programlamayı bilmedikleri ve konuyla ilgili başka birinin kitabını takip ettikleri için mi? Size bakımı yapılabilir, güvenilir, yüksek performanslı kodlara sahip olamayacağınızı öğrettiler mi? Hem güvenilir hem de yüksek performansla bakımı yapılabilen "herhangi ikisini" seçemiyor musunuz? Bazen performans için güvenilirliği feda edersiniz. Bazen güvenilirlik veya performansla ilgilenmezsiniz, sadece 117.34 sürümünden almak istersiniz. 118.0.0 sürümüne bir başka muhasebe yazılımı programının 2'si. İş modeliniz, sürüm yükseltmeleri ve teknik destek satmaktan ve yazılım geliştiricilerine göre, aynı kodu aynı şekilde yazabilen herhangi bir eski robot yapacaktır. Yanmış olanı üniversiteden yeni çıkmış olanla değiştirin ve yükseltmeleri satmaya devam edin.

Bu soruların evrensel cevapları yok, fikrinizin ne olduğunu bulmalı, onunla yaşamalı ve savunmalısınız. Fikrinizi değiştirin, onunla yaşayın ve onu savunun.

Her şeyi sorgulayın ... Ocaktaki güveçe dokunursam gerçekten yanar mıyım? Korkmanın psikolojik etkileri yanmaktan daha fazla zarara neden olur mu? Cevabı incinmeden test etmenin güvenli bir yolu var mı?

Parayı karşılayabildiğimde, yatakhane odamdaki transistörleri, kapakları, dirençleri vb. Satın alıp sonunda eritiyordum, hepsinin kendine özgü bir kötü kokusu var. İlk transistör sınıfınızdan bir gün sonra stereo oluşturmaya çalışmaktan çok daha ucuz ve sadece bir amplifikatör satın almak daha kolaydır. Linus bir istisna olmakla birlikte, bir işletim sistemi satın almak, yazmaktan daha kolaydır ... O zaman öğrendikleriniz Linus'un öğrendiklerinden farklı olsa da daha fazlasını yapabilirsiniz.

Üniversitenin içindeki ve dışındaki dünya, problemleri çözmek için bu formülleri (cmm, çevik, vb.) Benimseyecek ve bir sonraki çıktığında onları aynı hızla bırakacaktır. Başarılı olmak için sürüm kontrolünü kullanmak zorunda değilsiniz, aynı derecede çok sayıda başarı var (aslında sektörün yaşı nedeniyle, şimdiye kadar sürüm kontrolü olmayan daha birçok başarı var). Aynı şekilde, minimal testlerle başarılı olabilirsiniz (örnek olarak bilgisayar endüstrisindeki gerçekten büyük isimlere bakın). Kendi kodunuzu test ederek başarılı olabileceğiniz gibi, kendi kodunuzu asla test etmemeniz kuralına uyarak da başarılı olabilirsiniz. Emacs kullanarak başarılı olabilir ve vi kullanarak başarılı olabilirsiniz. Hangi karışımın sizin için işe yarayacağına karar vermelisiniz ve eğer şanslıysanız, sizinle aynı fikirde çalışacak bir yer bulun.

Üniversiteden çıkıp gerçek dünyaya geldiğinizde, "eski zamanlayıcıları" dinleyin ve onlarla çalışın ve onlarla tartışın. Onlarca yıldan yüzyıllara uzanan birleşik deneyime sahipler, içine düştükleri tuzaklardan kaçınabileceğiniz veya kendi başınıza test edebileceğiniz (belki de sizi yakacağını bulmak için güveçe dokunmanız gerekmediğini fark etmişsinizdir). Çoğu, bu heveslerin en az bir veya ikisinin gelip gittiğini ve özellikle ne kadar kötü yandıklarını ve ondan kurtulmak için ne yaptıklarını görmüş olacak. Bir şeyleri test etmenin birçok farklı yolunu ve gelip giden test stillerinin adlarını biliyorlar. Ne işe yarıyor, ne çalışmıyor. Riskin nerede olduğu ve teğet üzerinde zaman kaybetmekten nasıl kaçınılacağı. Olgunlaştıkça ve eski zamanlayıcı haline geldikçe, onu ileri götürün. Sizi takip edenlere öğretmeye çalışarak öğrendiklerinizi ödeyin. Onlara NASIL balık tutacaklarını öğretmeyi unutmayın, onlara sadece balık verme. Ve bazen başarılı olmadan önce başarısız olmalarına izin vermelisiniz, çok fazla yanmalarını önleyin.

Burada gerçekten söylemek istediğim şey şu anda paralel bir evrenin evrimine şahit olabileceğimiz (ve belki de onu etkileyebileceğimiz) ender bir durumdayız. Evet, bilgisayar bilimi, fiziğe kıyasla genç bir bilimdir. Ama aynı zamanda birçok kez gelişti. Nerede çalıştığınıza ve kiminle çalıştığınıza bağlı olarak, donanım mühendislerini gözlemleyebilirsiniz. Donanım dünyasında programlama dilleri kesinlikle yeni değil, ancak yazılım dünyası kadar hızlı gelişmedi. Yazılımın birkaç on yıllık bir başlangıcı vardı. Donanım her zaman yazılım mühendislerini ikinci sınıf vatandaş olarak düşünmüştür. İşimiz kolay, işleri zor. (Not, ben aslında hem donanım hem de yazılım mühendisiyim). İlginç olan şu ki, onlar şu anda hala bizim temel ya da çocuksu problemlerle ilgileniyorlar. Neden sürüm kontrolünü kullanmalıyım ki, bu çip üzerinde çalışan tek kişi benim. Gcc veya diğer ucuz derleyiciler veya ücretsiz IDE'lerle olan deneyiminiz, muhtemelen kullandığım pahalı araçlarla karşılaştırılamaz, eğer şirket onu kullanmaya layık olduğunuzu düşünürse veya hatta onu nasıl kullanacağını bilirse, size bir kopya alırlardı. Ve diğer bahanelerin uzun bir listesi. Hem vhdl hem de verilog öğrenmenin ve her ikisinde de böyle bir donanım mühendisinin neredeyse cüret ettiği bir hafta içinde üretken olmanın zevkini yaşadım (diplomama elektrik mühendisi yazmasına rağmen iş unvanım yazılım mühendisi). Bu dilleri öğrenmek istedim, araçlar bana geldiğinde geceye kadar ofiste kalıp kendi kendime öğrettim. Bu noktadan sonra, özellikle mühendis, söylediğim şeyin doğru olduğunu fark etti, diller sadece sözdizimidir, programlama temelleri aynıdır, araçların hepsi aynı şeyi yapar. Elmaları ve elmaları elma ve portakal değil.

Genel olarak, bu iki paralel endüstriden birinin diğerine göre diller, programlama alışkanlıkları, kaynak kontrolü, test etme, araçlar, programlama ortamları vb. Konularında çok daha fazla deneyime sahip olduğu mesajını vermek hala zordur. Çözmeye çalıştığım sorun, donanım tasarımlarını geliştirilirken almak, işlemcinin bir simülasyonu (sanal makine) ile bağlayabileceğimiz uygun fiyatlı işlevsel simülatörler oluşturmak, böylece donanımı test etmeye ve testi geliştirmeye başlayabiliriz ve silikona gitmeden çok önce teslim edilebilir yazılım. Hayır, bunun "yeni" bir yanı yok, ancak en son kodu almak, zamanımızı nereye odaklamamız gerektiğini görmek için koddaki değişiklikleri izlemek için bir mekanizmamız yok. Donanıma kullanıcı (programlama) arayüzünü tanımlayan dokümantasyonu izlemek için bir mekanizma yok. Bir altın kopya, birinin e-posta gelen kutusunda ikili biçimde bulunur ve yalnızca, neler olup bittiğini öğrenmek için verilog'u okumanız gerekmediğinde değişir. Bekle, bu verilog kaç yaşında? Bütün hafta boyunca sana harcadığım o hata üç hafta önce çözüldü ve düzeldi mi? Öyleyse sadece bir tatil noktasına uçup altı ay boyunca donanım elemanlarının görevlerini bitirmesini ve bizi duvarın arkasına atmasını mı bekleyeceğiz yoksa bu fırsatı sabırlı ve iyimser olmaya çalışmak ve onlara bunu öğretmek için mi kullanıyoruz? hem işlerini yapmalarına, hem işlerini yedeklemelerine hem de akran incelemesi için eşyalarını paylaşmalarına izin veren müdahaleci olmayan sağduyu yöntemleri var ... bu verilog kaç yaşında? Bütün hafta boyunca sana harcadığım o hata üç hafta önce çözüldü ve düzeldi mi? Öyleyse sadece bir tatil noktasına uçup altı ay boyunca donanım elemanlarının görevlerini bitirmesini ve bizi duvarın arkasına atmasını mı bekleyeceğiz yoksa bu fırsatı sabırlı ve iyimser olmaya çalışmak ve onlara bunu öğretmek için mi kullanıyoruz? hem işlerini yapmalarına, hem işlerini yedeklemelerine hem de akran incelemesi için eşyalarını paylaşmalarına izin veren müdahaleci olmayan sağduyu yöntemleri var ... bu verilog kaç yaşında? Bütün hafta boyunca sana harcadığım o hata üç hafta önce çözüldü ve düzeldi mi? Öyleyse sadece bir tatil noktasına uçup altı ay boyunca donanım elemanlarının görevlerini bitirmesini ve bizi duvarın arkasına atmasını mı bekleyeceğiz yoksa bu fırsatı sabırlı ve iyimser olmaya çalışmak ve onlara bunu öğretmek için mi kullanıyoruz? hem işlerini yapmalarına, hem işlerini yedeklemelerine hem de akran incelemesi için eşyalarını paylaşmalarına izin veren müdahaleci olmayan sağduyu yöntemleri var ...

Donanım mühendislerinin tıpkı sizin yaptığınız gibi bir kutu parlak yeni araçla üniversiteyi terk ettiğini unutmayın. Yalnızca birini kullanabileceğiniz 17 farklı programlama dili öğrendiniz, kariyerinizdeki geri kalan diller üniversiteden ayrıldıktan sonra icat edilecek. Üniversiteden ayrıldıklarında, size matematik ve görelilik teorisi hakkında bildiklerini söyleyebilirler ve her bir elementte kaç elektron olduğunu ve bir Gauss yüzeyi etrafındaki yükü hesaplayabilirler. Ancak kariyerlerinin büyük bir kısmı bir, sıfır ve ya da değil (hey, ortak noktalarımız var, bilgisayarlar hakkında bilmeniz gereken tek şey, bir, sıfır ve ya da donanım ya da yazılım mühendisi değil). Temel fizik yasaları, matematik, elektronlar programlama dilleri kadar hızlı değişmeyecek. Ancak programlamanın temelleri tüm dillerde aynıdır ve gelecekte de olmaya devam edecektir. Bunu bilerek mi üniversiteden ayrıldın yoksa java'nın C ++ 'dan farklı ve daha iyi olduğunu düşünerek ayrıldın mı çünkü şu, bu ve diğeri?

Diğer tüm işletmeler gibi, üniversitelerin işi de karlı kalmaktır. Üniversiteyi karlı hale getirmek için hem doğru öğrencileri hem de doğru araştırma dolarlarını ve doğru araştırma türlerini getirmek için doğru akademisyenleri işe almaları gerekiyor. Doğru öğrencileri getirmek ve doğru mezunları yetiştirmek için doğru sınıfları sunmaları gerekiyor, böylece on yıllar boyunca işverenler hem üniversitenin yakınında hem de çok uzakta bu üniversitenin üretken ve karlı çalışanlar ürettiğini fark edecekler. (evet ve bazen doğru miktarda TV zamanı ve doğru miktarda isim tanıma ve spor geliri elde etmek için doğru spordaki doğru sporcuları çekmeniz gerekir). Bazı üniversiteler C ++ ve Java öğretecek, bazıları asla öğretmeyecek. Bazıları CMM'yi icat edecek ve bazıları Agile'ı öğretecek, bazıları ikisini de yapmayacak. Üniversitenin herhangi bir değeri varsa orada öğrenmen gereken bir şey var. Size öğrenmeniz gereken her şeyi öğretmeyecekler, ancak yararlı bir şeyleri olacak. Oradayken bir şeyler öğrenin, alet kutunuzda makul sayıda çeşitli araçlar toplayın. Üniversiteden ayrıl ve bir iş bul. Alet çantanız berbatsa, belki başka bir üniversite bulun ve ilkinden asla bahsetmeyin. Uygun bir araç kutusu ise, bu araçları kullanın ve kendi zamanınızda yenilerini oluşturun. Oldukça iyi bir alet kutusu ise, o üniversite ve bunu öğrendiğiniz iyi akademisyenler hakkında güzel şeyler söyleyin ve size verdiklerini okula geri ödeyin. Evrensel üniversite araçları kataloğundaki olası her aracı almamış olsanız bile, belirli bir alt kümeyle ayrılacaksınız. Mezun olmasan bile ...


12

Oregon Teknoloji Enstitüsünde Yardımcı olduğumda bunları öğrettim. Sadece seyrek olarak öğretilirler.


Sınıfın başlığı neydi?
Dean J

11

En basit cevap, bilgisayar bilimi üzerinde çalıştığınız ve listelediğiniz şeylerin bilgisayar bilimlerinin akademik alanıyla gerçekten ilgili olmadığıdır. Yazılım geliştirme o şey olabilir yapmak bilgisayar bilimleri, öğrendiklerinizi blokları üzerine inşa şeyle ... ama Bilgisayar Bilimleri ve yazılım geliştirme aynı şey değildir.

Size sürüm kontrolünü veya etkili birim testlerinin nasıl yazılacağını öğreten sınıflar ... size bir zanaat , yani (iyi) yazılım geliştirmeyi öğretecek .


10

aman tanrım beni başlatma

Bir zamanlar saygın bir üniversitede cs dekanı bana nesne yönelimli programlamanın sadece bir 'moda' olduğunu söylemişti, bu yüzden C ++ gibi geçip giden fantezilerde herhangi bir ders vermediler

Bunları neden öğretmediklerine gelince, kolej size disiplinin temellerini öğretmek için orada, endüstrinin en iyi uygulamalarını değil


2
Ya da başka bir deyişle, üniversiteler rollerini (doğru veya yanlış) mesleki eğitimden çok akademik eğitim sağlamak olarak görürler. Bu yüzden birçok yeni mezun, gerçek dünya programlama zanaatı hakkında çok az şey biliyor (örneğin, sürdürülebilir kod yazma).
Andrew Swan

Ve şimdi birçok üniversitede öğrettikleri tek şey (en azından ilk birkaç yıl içinde) Java. Ah, ironi.
Matthew Schinckel

OOP'nin moda olduğunu ne zaman söyledi? Java'nın ortaya çıkmasına kadar, OOP gerekli bilgiden çok bir hevese yakındı.
Andrew Prock

@ [Drewster]: 1994, Java'ya çok fazla itibar ettiğini düşünüyorum. OOP, programlama dili evriminde mantıksal bir ilerlemedir; tarihinin herhangi bir aşamasında (1994'te çok daha az) bir "moda" olarak adlandırmak, bir CS dekanı için soluk olmanın ötesinde bir cehalet düzeyini gösterir.
Steven

2
Akademik ve gerçek dünya / pratik arasındaki yanlış ikilemde ne var? "Gerçek dünya" çalışmanızda kullandığınız hemen hemen her fikir akademik çevreden geldi veya onun tarafından geliştirildi. GOTO eksikliğinin nereden geldiğini düşünüyorsunuz? Nesneler, 1967'de bilgisayar bilimcilerinden geldi. Pek çok bilgisayar bilimcisi OOP'nin avantajları konusunda net değildi ve bu hala kararsız bir şey. Endüstri yardımcı olduğunu düşünüyor, ancak aksini kanıtlayan birçok başarısız proje var.

9

Üniversitelerle ilgili olan şey, gerçekten evrensel olan şeyleri öğretmeleri gerektiğidir. Çevik geliştirme gibi bir şey hala oldukça yenidir ve İnternette ne kadar çok konuşulsa da, her yerde kullanılmamaktadır, bu nedenle bunu bütün bir sınıfa öğretmek, potansiyel olarak Agile mağazalarına giren birkaç kişiye fayda sağlayacaktır.

Ancak sürüm kontrolü, bu günlerde affedilemez bir şey. Neredeyse bir derleyici kadar faydalı bir araç olduğunu ve CVS'nin yaklaşık 20 yıldan beri var olduğunu herkesin anlaması gereken bir şey. Kavramların en azından üniversiteden ayrılan herhangi bir programcı tarafından anlaşılması gerekir. Neyse ki, üniversitede herhangi bir grup çalışması yaparsanız, sürüm kontrolü hakkında zaten bilgi sahibi olan ve grubunuzu bunu kullanmaya ikna eden biriyle çalışacak kadar şanslı olabilirsiniz. O kişinin benim grubumda olduğu için mutlu olduğumu biliyorum.

Birim testi de hemen hemen affedilemez. Söyleyebileceğim tek şey, kitabın hala test odaklı geliştirmede olduğu ve% 100 kod kapsamına gitmenin bazen değerinden daha fazla sorun olabileceği. Ancak birim testi son derece değerlidir ve bir yazılım mühendisliği dersinde ele alınmalıdır. Bunlardan bazılarının bazı üniversitelere girdiğini, ancak henüz hepsine ulaşmadığını hayal ediyorum.


Bir üniversite kursunda sürüm kontrolü gerekli değildir. "Görsel stüdyonun nasıl kullanılacağını" da öğretebilirler. Bir iş bulduğunda bunu bırakmak en iyisi. Teste gelince - birim testi mutlaka en iyisi değildir, ancak tüm test uygulamalarının en azından birazını öğretmeleri gerekir.
gbjbaanb

@gbj kabul etti, bir iş bulana kadar sürüm kontrolünün ne olduğu hakkında hiçbir fikrim yoktu ve faydalarını hemen gördüm ve bir gün gibi öğrendim. Okul IMO'sunda öğretilecek çok daha önemli şeyler var.
temp2290

7

Neden olmasın gerçekten? CS derecemi alma deneyimim hemen hemen aynıydı. Bunun nedeni, benim anlatabildiğim kadarıyla programlama öğreten insanların program yapmamasıdır. Akreditasyon için bu şeyleri öğretmek gerekmez, öğretmenler buna aşina değildir ve öğrenciler asla derslerinin bir parçası olarak önemli projeler geliştirmezler. Bilgisayar bilimleri teorisi veya Java sözdizimini öğretmenin aksine, programlamayı öğretmek için hiçbir motivasyon yoktur.


6

Bilgisayar bilimcileri, kendilerini mühendis değil matematikçi sanıyorlar ve bu nedenle matematik bölümlerini mühendislik bölümlerinden öğretmeyi tercih ediyorlar. Test, sürüm kontrolü ve dokümantasyon, diğer mühendislik disiplinlerindekinden daha fazla geçici hevesli değildir.


Öyleyse, bilgisayar bilimcilerini değil, yalnızca yazılım mühendislerini tutmalı mıyız? ;-)
Andrew Swan

Bunlardan herhangi birinin 'mühendislik' tanımına uyduğunu düşünüyorsanız, endişeleniyorum. Mühendislik değil, skillets tanımına uygundurlar.
Benjamin R

6

Üniversiteye bağlıdır. 2003 yılında Avustralya'daki bir yaşanmazlıktan mezun oldum. O zaman, UML, Unit Testing, XP (ve diğer Agile Metodolojileri) ile birlikte Z, Algoritmalar ve Veri Yapıları, İşletim Sistemleri vb. Gibi tüm resmi şeyleri öğrendik.

Yine de ünite testini çok ayrıntılı olarak ele almadılar, daha fazlası sadece bir ders için hizmet geçme ödedi. "Birim testi nedir" yerine, etkili birim testlerinin nasıl yazılacağını öğrenmek harika olurdu.

Versiyon kontrolü söz konusu olduğunda, onu (CVS) 2. yıldan itibaren programlama projelerimizde kullanıyorduk.

Glyph'in söylediklerine de kesinlikle katılıyorum. CS o kadar olgunlaşmamış bir alan ki, gerçekten sadece son 50 yılda, neyi öğrenmemiz gerektiğini ve neyin geçici bir heves olduğunu bilmiyoruz. 150 yıl verin, o zaman işler daha da düzelebilir. Başarısız gerçek dünya projelerinin sayısı, bunun olgunlaşmamış bir endüstri olduğunu açıkça ortaya koyuyor. Bina projelerinin% 80'inin başarısız olduğunu hayal edin!


5

Bunların tümü, yazılım geliştirme uygulamalarıyla ilgili tek bir sınıfta kolayca (sığ olarak) ele alınabilir. Çoğu bilgisayar bilimi müfredatının bir parçası değil, çünkü bilgisayar bilimleri bununla ilgili değil, ancak bu tür şeylerin bazı kapsamlarının yararlı olduğunu düşünüyorum. Okulumun böyle bir sınıfı vardı; sürüm kontrolünü kapsamıyordu, ancak UML, gereksinim toplama, geliştirme metodolojileri (çeşitli çevik ve şelale), birim testi, entegrasyon testi vb. kapsıyordu ve bir proje geliştirmek için 4-5 kişilik ekipler halinde çalışmamızı gerektiriyordu. (Java'da oldukça basit bir İpucu soygunu). Daha fazla Yazılım Mühendisliği dersine ihtiyaç duyduysanız, bunlar seçmeli ders olarak mevcuttu.

Aldığım hiçbir sınıfta sürüm kontrolünden hiç bahsedilmemesine rağmen, arkadaşlarımın çoğu onu kişisel projeler, sınıf ödevleri vb. İçin kullanıyordu, bu yüzden biz ona maruz kalmamışız gibi değil. Kendi başına almayan insanlar, bir takım ödevi sırasında bir sınıf arkadaşı tarafından kullanmaya zorlandı.

Üniversite kavramları ve teorileri öğretmek içindir, çünkü bunlar kendi başınıza anlaması zor olan şeylerdir. Sürüm kontrolü bir araçtır ve alınması oldukça kolaydır. Biraz kullanın, web'deki bazı öğreticileri okuyun ve artık hazırsınız. SVN'den bir şeyi nasıl kontrol edeceğinizi anlamak için derslere ve ev ödevlerine ihtiyacınız varsa, aslında zor olan şeylerle çok fazla sorun yaşarsınız.

Üniversitede dersler dışında bir şeyler öğrenmenin birçok yolu olduğunu unutmayın; bundan yararlanın. Derslere katılmak ve tesisleri kullanmak için çok para ödüyorsunuz, bu yüzden tüm değeri için sağın ve LKG ve ACM toplantılarına gidin, proje ekiplerine katılın (her zaman bir programcıya ihtiyaç duyan bir robot yapan bazı ME'ler vardır) veya Beşeri Bilimler departmanının sunucusunu yöneten bir iş. Malzeme Mühendisliği binasının yükleme alanından bir bilgisayarı çöp kutusuna atın, hızlı yurt internet bağlantınızla bir Linux iso indirin ve oynayın.


3

Bence asıl mesele, üniversitelerin size profesyonel olmayı öğretmeleri gerektiğini düşünmemeleri, bunun yerine programlamanın akademik yönüne odaklanmalarıdır. En azından endüstride kullanılan en son yöntem ve tekniklere atıfta bulunulması gerektiğini düşünürdüm, çünkü bunlar akademik açıdan da ilgi çekicidir.

Kursumuzda, projelere harcanan zamanı kaydetme, iyi yorum yapma gibi konuları kapsayan ancak sürüm kontrolü gibi profesyonel temellerden söz edilmeyen Kişisel Yazılım Süreci öğretildi.


3

3 adını verdiniz, bunlardan bazılarının bilgisayar sistemlerini anlamak için neredeyse önemli olduğunu düşünmüyorum (örneğin, sürüm kontrolü). Bunlar bir işin parçasıdır ve bilmenize gerek kalmadan iyi bir programcı / bilgisayar bilimcisi olabilirsiniz.

benzer şekilde birim testi için - neden birim testi seçilmeli? Elbette kullanılabilirlik testi, sistem testi, kullanıcı kabul testi ve fabrika kabul testi daha önemlidir? Kod bakım departmanına gönderildikten sonra işinizin tamamlandığını düşünmediğiniz sürece, onlar öyle :)

Her gün kullandığım, yazılım ve bilgisayar sistemlerinin temellerini anlamaya gelen bir öğrenciye pek faydası olmayacak diğer kavramları düşünün:

  • iyi yorum uygulamaları
  • standartlara uygunluk (yalnızca uluslararası olanlar değil, ekip kodlama standartları)
  • belgeleme
  • değişiklik kontrolü (farklılıkları depolamakla ilgili olan sürüm kontrolü ile aynı olmak zorunda değildir, bu daha çok neyi ve neden bir şeyi değiştirdiğinizle ilgilidir)
  • kullanılabilirlik geliştirme

Yukarıdaki olmayan tüm "yumuşak beceriler" dir ihtiyaç iyi kod yazmak için.

Bununla birlikte, veri yapıları ve algoritmalar gibi "zor" becerilere sahip değilseniz, iyi kod yazma şansınız neredeyse imkansızdır.


2

Bunların hepsini üniversitede öğrendim. Belki de seçtiğiniz kurslara bağlıdır? Kurslarım çok çeşitliydi (Yazılım Tasarımı, UI Tasarımı, e-Ticaret, AI, Fonksiyonel programlama vb.). Yazılım Tasarımı, tasarım kalıplarına ve birim testine maruz kaldı (çeşitli şeyleri içeren büyük bir proje). UI Design ... Bir proje üzerinde çalışan üç kişilik bir gruptuk. Sürüm kontrolü olmadan hiçbir şey yapamazdık, bu yüzden anladık. Ve çevik gelişim, profesörlerimizin bize sürekli olarak bahsettiği bir şeydi, ama onu kullanmayı her gruba bıraktılar.

Pek çok üniversite öğrencisinin yüksek not ortalaması verecek "kolay" kurslar veya kurslar aldığını gördüm. Diğerleri öğrenmek istediklerine odaklanır ve büyük ölçüde hangi alanın ilgilerini çekeceğini bulmak için araştırır. Ve sonra tam olarak neyle ilgilendiklerini bilenler var ... bu iyi, ancak kurslarını çeşitlendirme eğiliminde değiller.


Mesele şu ki, bu sınıflar en azından benim okulumdaki üst düzey sınıflardır. Bunların öğretilen ilk şeyler arasında olması gerektiğini veya en azından orta düzeyde öğretilmesi gerektiğini düşünüyorum.
Jason Baker

2

Bunların neden ilk öğretilen şeyler olmadığını cevaplamak için: Lisans programları genellikle sizi bir Master öğrencisi olmaya eğitir. Yalnızca kendi derslerinizi seçmeye başladığınızda (ki bu genellikle sonraki yıllarda gerçekleşir), akademi dışında kullanılan şeyler hakkında bilgi edinmeyi seçebilirsiniz. Bu yüzden algoritmalara, veri yapılarına odaklanırlar, size çözülmemiş problemler sunarlar.

Şahsen bunu yapmalarının iyi olduğunu düşünüyorum. Programlama, çoğumuzun göründüğü kadar kolay değildir; birçok insan onunla mücadele ediyor. Bu insanların Perforce'un canavarı bulmadan önce bir for döngüsünün nasıl çalıştığını anlamasını tercih ederim.


2

Bu tür konuları öğretmezler çünkü çoğu okul akademiktir, ticaret değildir. Yani, fikir ve teorileri öğretmek için tasarlandılar, sizi bir kariyer için eğitmek için değiller. QA kavramının matematiksel bir kanıtı iletmenin ötesinde bilgisayar bilimi ile hiçbir ilgisi yoktur. Ayrıca, kalite güvence uygulamaları ve geliştirme iş akışları bir geliştirme evinden diğerine çılgınca farklılık gösterir, bu nedenle bunları okulda öğretmek zaman ve para kaybıdır.


2

Agile geliştirme haricinde tüm bunları birinci yıl öğrendim.

Her şey doğru okulu seçmekle ilgili, IMHO. İlk 10'a girerseniz, tüm bunları çabucak öğreneceksiniz.

Genel olarak CS Eğitimi ile ilgili olarak, temelde profesörlerden çok şey öğretmelerini istiyoruz (her türden dil, veri yapısı, çalışma zamanı verimliliği, bit seviyesinde işlerin gerçekte nasıl çalıştığı). Şu soruyu gündeme getirmek istiyorum: Neden çocuklar Yazılım Mühendisliği hakkında daha fazla şey öğrenmek için kendi başlarına uğraşmıyorlar?


2

Tıpkı öğrenciler gibi, her kolej farklıdır. Bazı kolejler veya daha doğrusu, bazı profesörler değişime dirençlidir veya tembeldir. Neyse ki çoğu değil. Teoriler, kavramlar, tarih vb. Her bilgisayar bilimi müfredatı için önemlidir ve yaşamsaldır. Ancak öğrenciyi çalışma ortamına hazırlamak da öyle. Şaşırtıcı olmayan bir şekilde, bölgemdeki topluluk kolejleri çok güncel ve uygulanabilir bilgisayar bilimleri kursları sunuyor. Büyük, köklü ve prestijli üniversite ile pek bir şey değil.


2

Bunun nedeni, veri yapılarının ve algoritmaların bilgi işlemin temelini oluşturması ve bu nedenle çok daha önemli olmasıdır. Birim testi, sürüm kontrolü ve çevik metodoloji ticaretin araçlarından başka bir şey değildir (ve gerekirse, birinin bunları iş başında alması beklenir).


1

Bence iyi bilgisayar bilimleri programları, gelecekteki tüm programlama eğitimleri için temel oluşturacak temelleri öğretmelidir. Agile gibi geliştirme metodolojileri ve sürüm kontrol araçları heves gibidir; gelir ve giderler. Ayrıca, akademik ortamlarda değil endüstri ortamlarında kullanılma eğilimindedirler, bu yüzden üniversitelerin muhtemelen işte öğreneceğiniz türden şeyleri kapsamasının nadir olduğunu düşünüyorum. Doğru demiyorum ama muhtemelen akademik zihniyet budur.


Üzgünüm, ama çevik ve sürüm kontrollerini montaj hattından daha fazla geçici olarak görmüyorum veya kalkülüsün icadı bir modaydı. Gerçek dünyada, programlamayı temelden değiştiren şeyler tasarlıyoruz, ancak üniversiteler küçük konferans standlarında gerçeklikle o kadar çok temasta değiller ki, ileriye gittiğimizin farkında değiller.
Austin

1

Söylediklerine katılıyorum. Kısa bir süre önce yazılım geliştirme dünyasında çalışmaya başladım ve çevik geliştirme hakkında öğrenmeye başladım, üniversitede hiç öğretilmediğim bir şey.

Gerçek şu ki, üniversite profesörleri yeni geliştirme tekniklerine gerektiği kadar ayak uydurmuyor. Ayrıca müfredatlarında başka, daha önemli şeyler olduğunu hissedebilirler.


1

Üniversite öğretim görevlileri yazılımın nasıl yazılacağını bilmiyorlar, sadece araştırıyorlar, öğretiyorlar ve ara sıra sadece makale yayınlanana kadar çalışması gereken bazı kodlar üzerinde çalışıyorlar.

Sadece Titus gibi insanlar yüzünden programlamayı gerçekten ziyan eden akademisyenler alıyoruz - Bu konuyla ilgili yorumlarını buradan okuyun

Ben öğrenciyken kütüphanede Ekstrem Programlama ile ilgili kitaplar okudum ve bunu sınıflarda kısaca tartıştık - yazılım geliştirmenin "Şelale Modeli" ne uymamızı talep eden aynı sınıflar, burada "derleme" onun bir adımıdır. kendi.

Kariyerinle en iyisi, umarım dereceni bitirirsin, isminden sonra harflerin olması güzel. :)


1

Bahsettiğiniz üç şey de (birim testi, sürüm kontrolü, çevik geliştirme) Groningen Üniversitesi Bilgisayar Bilimi programında bir dereceye kadar öğretilir. Bunun iyi bir şey olup olmadığını açık bir soru olarak bırakacağım; ancak hiçbir üniversitenin size "pratik şeyler" öğretmediği doğru değildir.


1

Bunlar, bölüm değiştirmeden önce bir bilgisayar bilimleri programındaki sınırlı deneyimlerime ve büyük bir yazılım şirketinde stajyer olarak deneyimime dayanıyor. Birim testi öğretilmez çünkü oluşturmanız gereken programların çoğu otomatik teste ihtiyaç duyacak kadar büyük değildir, her şeyi manuel olarak test edebilmek için belirli bir girdi setini garanti edersiniz. Testin nasıl otomatikleştirileceğini size öğretmek, projenizin derecelendirilmesine de müdahale edebilir çünkü çoğu proje, int foo1'e sahip olmadığınızdan emin olmak için koda hızlı bir bakışla otomatik testler çalıştıran komut dosyalarıyla derecelendirilir; int foo2; ve uygun girintiyi kullanırsınız.

Sürüm kontrolünün neden öğretilmediğini bilmiyorum ama bunun bir kısmı muhtemelen projelerin boyutu. Hiç sürüm kontrolü için yeterince büyük bir projem olmadı ve genel olarak 1000 satırdan fazla kod yazdım ve yazmak için bütün bir dönem sürdü. Sanırım, ihtiyacın olursa kendi kendine öğreteceğini düşünüyorlar. Sahip olduğum herhangi bir grup projesi çift programlama projesi olmalıydı ve her ikiniz de aynı bilgisayardaysa neden sürüm kontrolünü kullanayım?

Çevik geliştirmenin neden öğretilmediğini bilmiyorum ama muhtemelen program boyutuyla aynı şeye geri dönüyor. Adgile geliştirme, kişisel bilgisayarlarda ve küçük sunucularda çalışan yeni yazılımlarda yaygın olmakla birlikte, genellikle IBM ana bilgisayarları gibi sistemlerde veya belgelerin kral olduğu bankacılık veya tıp gibi sorunlu alanlarda kullanılmaz. Muhtemelen bu, adgile geliştirmenin yaklaşık 20 yıl önce pek çok profesör eğitildiği zaman olmadığı gerçeğiyle de ilgilidir.


> ikiniz de aynı bilgisayardaysa neden sürüm kontrolünü kullanasınız? Bilgisayardaki tek kişi ben olsam bile sürüm kontrolünü kullanıyorum! Aksi takdirde, dalları ve yama sürümlerini nasıl yönetirsiniz, hatta bir dosyanın önceki bir sürümünü (son değişikliğiniz bozulmadan önce) nasıl görüntülerdiniz?
Andrew Swan

Andrew'dan aynen. Tüm işlerim dizüstü bilgisayarımda ve çoğu tek başına yapılsa da, SCM araçlarını yoğun bir şekilde kullanıyorum. Yedekleme, Revizyon Denetimi, Dallanma ve Birleştirme, Eski kodu yamalama. Bunların hepsi sadece kaynak kodu için değil, üretilen herhangi bir içerik için kullanmanın nedenleridir.
Matthew Schinckel

Kodunuzun birim / kabul testlerini geçip geçmediğine göre derecelendirilmemeniz için hiçbir neden yok.

1

Bunun ana nedeni, birçok (çoğu?) Üniversitenin kendilerini bir ticaret okulundan farklı bir hedefe sahip olarak görmesidir. Bu nedenle, öğrencilere nasıl öğreneceklerini ve disiplinin temel ilkelerini öğretmek isterler . Ek olarak, algoritmalar ve veri yapıları herhangi bir programlama dili için geçerli olacaktır ve belirli araçlara bağlı değildir (mezuniyet sırasında hala kullanımda olabilir veya olmayabilir).

Bilgisayar Bilimi'nde bu, algoritmalar, veri yapıları, bilgisayar teorisi, derleyici teorisi vb. Anlamına gelir. Listelediğiniz şeyler daha az, nasıl programlanacağını, problemlerin nasıl çözüleceğini vb. tesadüfen, bir programcı olarak çalışma niyetiyle üniversitedeki herkes için harika bir kitap). Şimdi, bunların çoğu giriş seviyesi kodu maymun pozisyonunda kullanılmayacak ve bazı insanları bunun yararlı olmadığını düşünmeye sevk edecek. Katılmıyorum. Son derece yararlı olabileceğini düşünüyorum. Ancak, CS derecenizi aldıktan sonra, bir programcı olarak çalışmak için ihtiyacınız olan her şeyi bildiğiniz anlamına gelmez.

Bu, bahsettiğiniz şeylerin yararlı olmadığı anlamına da gelmez. Onlar. Bunları öğrenmezseniz programcı olarak çalışmakta zorlanacaksınız ve en azından belli bir dereceye kadar üniversitede öğretilmeleri gerektiğini düşünüyorum. Sanatta bir lisans programına baktığım gibi sürüm kontrolü, birim testi vb. Öğretmeye ve çeşitli durumlarda boya fırçalarının ne olduğunu ve hangilerinin kullanılması gerektiğini öğretmeye bakardım.


1

Bence bu ne tür bir Bilgisayar Bilimleri programı içinde olduğunuza bağlı. Araştırma ve Bilim tarafını hedefleyenler var ve Uygulama tarafına yönelik olanlar var. Sadece akademik dünyada kalan profesörleri olan bazı okulları özellikle reddettim. Öğrettikleri şeyi "kullanmayan" profesörleriniz yoksa, kelimenin tam anlamıyla hepsi kafalarında.

Plug: DePaul Üniversitesi'nde Comp Sci'de BS ve Soft Eng'de MS aldım, çoğunlukla yarı zamanlı öğretmenlik yapan eğitmenler / profesörler tarafından eğitildim, bu benim için iyi bir şeydi çünkü onların önceki günden bir anekdotla gelmesini tercih ederim ve bunu sınıfla ilişkilendirin. Ayrıca bu çoğunlukla banliyö / yarı zamanlı bir okul olduğundan, öğrencilerin çoğunun öğrendiklerini kullanarak işleri vardır.

Öğrenme süreci hala tüm teori ile başlar, ancak daha sonra genellikle "kaçınız bunu işinizde gerçekten kullanıyorsunuz?" ve tipik cevap, "onu basit veya basit bir şekilde kullanıyoruz" ve sonra pratik gerçek dünya senaryolarına geçiyoruz.

Okul birimim sırasında sınav her zaman mevcuttu. Sizi Java ile başlatsalar bile, tüm projelerde ANT ve JUnit kullanmamızı sağladılar. Bu, derleme yapılandırması ve birim testi için iyi bir başlangıçtı.

Ve Extreme Programing, aldığım derslerin yaklaşık 3 veya 4'üne dahil edildi. Eşli programlamadan birim testine kadar hepsinin 12 farklı yönle başladığını hatırlıyorum (yukarıya bakın). Ve şimdi odak Agile üzerinde gibi görünüyor.

Yani hızlı cevap evet, dışarıda diğerlerinden daha pragmatik bir yaklaşımı olan okullar var.


1

Üniversiteye gittiğim 2. yıl Bilgisayar Bilimleri derslerinde hem birim testi hem de sürüm kontrolü öğretildi. Birim testi, beyaz ve kara kutu arasındaki farklılıkları da içeren testin altına düştü ve 3. yıl programlama ödevlerinde iyi bir not yığını, ünite testinden kolayca gelebilecek iyi bir hata işleme için gitti.

Çevik geliştirmeyi akademik bir ortamda öğretmek oldukça zor olabilir. Şelale yöntemini teorik olarak öğrenmiş olsam da, mezun olup akademik dünyadan oldukça farklı olabilecek gerçek dünyaya taşınana kadar sahada göremedim, örneğin 3. yılda tüm garip hataları yapıyorum ve neredeyse Semaforlar hakkında bana öğretmeye çalıştığı görevin kalbine hiç dokunmadığım bir ödevi geçtim.

Ayrıca, Agile ne zamandır etrafta ve hangi Agile biçimini kastettiniz? Gördüğümden çok farklı uygulamaları var.


1

Çevik programlamanın bir moda olduğunu düşünmüyorum, ancak aynı zamanda bir öğretmenin size öğrenmenize izin verecek projeler verebileceği bir yol düşünmek bana zor geliyor. Size A projesi vermedikleri sürece, B projesi a. Sorun, zaman ve kapsamdır. 4 aylık bir kursta zor olurdu.

Sürüm kontrolü ve birim test yöntemleri sürekli değişiyor ve dile veya bunları tanımlayan kişiye bağlı.

Veri yapıları ve algolar, bir sınıf ortamında üzerinde çalışılabilecek bir şeydir. Dürüst olmak gerekirse, birim testi ve sürümlemeden sonra anlamak için biraz daha fazla çaba harcarlar. Unutmayın, üniversitenin bir parçası size kendi kendinize öğretmeyi öğretmektir. Kolaj aynı yetkiye sahip değil. Ya da en azından aynı ölçüde değil. BENİM NACİZANE FİKRİME GÖRE.


Hmm kolej ve üniversitenin aynı anlama geldiğini düşünmüştüm .. ama anadili değil.

ABD'de nerede olduğunuza bağlı olarak (ülke bazında) bunlar aynı, Kanada'da farklılar. Eyaletlerde kolaj dediğim şeyin aslında Junior kolaj olduğunu düşünüyorum. Avustralya'da adı Taff (imla affet) .. Ana dili İngilizce olmamak, bu tür şeyleri çok "eğlenceli"
kılıyor
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.