“Bilgisayar Bilimi! = Yazılım Mühendisliği” kötü programlama öğretmek için bir bahane midir?


23

Hepimiz duyduk; Ne zaman CS notları hakkında zayıf bir gelişme becerisine sahip biri hakkında bir tartışma olursa,

Bilgisayar bilimi yazılım mühendisliği değildir.

Görüyorum sorun programlama ve yazılım geliştirme olmasıdır edilir CS kurslarında öğretilen. Genelde kötü öğretilirler. Eğer öğretiliyorsa, neden ilk defa doğru öğretmiyorsunuz? *

Bu yüzden görüşlerin ne olduğunu 2 soruda görmek isterim:

  1. CS! = SE argümanı, programlama becerilerinin doğru öğretilmemesi için bir koparma veya mazeret midir?

  2. 1. soruya verdiğiniz cevap ne olursa olsun; Eğer böyle bir karar vermenin yüce konumunda olsaydınız: CS derslerinde programlamanın doğru bir şekilde öğretilmesine vurgu yapar mıydınız?

*. Eğitimim boyunca edindiğim fıkralara dayanan kanıtlara dayanarak, bu alandaki akademisyenlerin çoğunun bakım için kod yazmak zorunda olmadıkları ve kodların korunmadığı konusunda kuşku duyuyorum etkili bir şekilde öğretmek.


7
Yorumumu açıklığa kavuşturacağım; Aklımda, onlar farklı (CS! = SE). Öyleyse CS ve SE'yi A, B gibi diğer 2 alanla değiştirirsem, burada A! = B ise Bowling Dersleri gibi bir şey alabilirsiniz! = Japon Tarihi. Öyleyse argüman olur: BL! = JH, JH'yi düzgün bir şekilde öğretmemek için bir bahane mi? Bu şimdi saçma bir sorudur ve görevden alınmalıdır. Bağlantılı bir listede neden bir karma tablo kullandığınızı bilmeyen bir CS derecesi gördüyseniz, ona kötü bir şekilde öğretildi. Kötü bir işe giriş kodu uygulayan bir CS derecesi görürseniz, bu izin verilebilir.
Jeremiah Nunn

2
@Jeremiag Nunn: Analojinizi kullanmak için: Japon tarihi bowling ile tandem içerisinde öğretilmez. O argüman yapıyorum her CS programı, onlar iyi öğretim kendilerini mazur "CS! = GD" argümanı kullanmak gerçeği öğretme programlamada yapar ve.
Steven Evers

2
Başka bir düşünce: Belirli bir CS'de SE becerilerinin eksikliği okulun veya öğrencinin suçunu arttırıyor mu? Her sınıfta, yetenekli ve korkunç seviyelere kadar geniş bir beceriye sahip olacaktınız.
Adam Lear,

2
@SnOrfus Yazılım mühendisliği, bina yazılımı zanaattır. Bilgisayar bilimi yazılımın arkasındaki teoridir. Her ikisini de bilmek idealdir, ancak yine de ayrıdır. Jeremiah’tan daha iyi bir benzetme (IMO) yapmak, çalmak gibi araçlardan biriydi.
dash-tom-bang

5
Akademisyenler hakkındaki dipnotlar, korunabilir kod yazmak zorunda değil. CS'ın umrunda değil.
dash-tom-bang

Yanıtlar:


27

Bunun bir kopukluk olduğunu sanmıyorum, ancak bilgisayar biliminin yazılım mühendisliği olmadığı, programlama olmadığı iddiası - yani , formalize hesaplama bilimi. Temelde matematiktir (aslında, birçok CS programı uygulamalı matematik programları olarak başlamıştır).

Sanırım sorun endüstrilerde akademi'den daha fazla yatıyor. Endüstri, özgeçmişinde listelenen bir CS derecesini görür ve “Harika, bu adam bilgisayarlarla iyi” diye düşünür ve onu bir bilgisayarla ilgili bir şey yapması için işe alır : BT, programlama, yazılım geliştirme, her neyse. Bu şeyler mutlaka bir CS mezununun uzmanlık alanında yatmak zorunda değildir. Buna karşılık, bilgisayar yapmaktan veya video oyunu oynamaktan hoşlanan pek çok insan bu tür şeyleri yapmayı ve kaba bir sürprizle karşılaşmayı bekleyen bir CS programına giriyor; yani, CS’ye giren birçok öğrenci aslında oraya ait değildir ve daha hedeflenmiş bir derece programında daha iyi olur.

İkincisi, tipik bir lisans programında CS'ye - çok geniş bir konu - öğretmek için çok sınırlı bir zaman vardır . Lisans eğitim programımda 8 CS (BA için) veya 12 CS (BS için) dersin yanı sıra gerekli tüm matematik derslerini verdim. Bu, CS , matematik ve programlama ve yazılım mühendisliğini öğretmek için çok fazla bir zaman değildir , bu nedenle bir noktada neyin önemli olduğuna ve bir öğrencinin kendi başına ne alabileceğine karar vermelisiniz.

Bu son nokta çok önemlidir: Bence, herhangi bir alanda iyi bir öğrenci fikirleri kendi başlarına keşfedecektir. CS derecem var ama üniversiteden iyi bir geliştirici olarak çıktığımı düşünüyorum, çünkü kendi başıma yazılım okudum ve yazdım . Üniversite tamamen derslerle ilgili değildir; Aynı zamanda, öğrencilere becerilerini yarı özerk bir şekilde geliştirirken, yine de değerli rehberlik sunmaları için zaman vermekle ilgilidir.

Öğretmenlik teorisinin - CS, matematik vb. - işle ilgili belirli becerileri öğretmekten daha önemli olmasa da, önemli olduğunu savunuyorum . Bir öğrenciye niçin metodların ve tekniklerin arkasındaki nedenini öğretirseniz ve sadece neyi değil , onun bilgisini uygularken çok daha uyumlu birisiyle karşılaşırsınız. Örneğin, çok kötü huylu bir "Java okuluna" gittim ve bu yüzden Java'da ders aldım, ancak programlama dili teorisinde dersler aldım, bu da birçok dilin nedenini açıkladı ; Sonuç olarak, o altyapıya sahip olmadığımdan çok daha iyi bir yazılım yazmayı öğrendim. Tabii ki, benim günlük işimde Haskell'de yazılım yazmıyorum, ancak birçok programlama dili teorisi bilmek bana bu konuda bilgi kazandırdı.olan bir programcı olarak işimle uygulanabilir olmuştur.

Ayrıca sektörün üniversite öğrencilerinden çok fazla şey beklediğini düşünüyorum. Endüstri kendi maliyetlerini düşürmek istiyor, bu nedenle işleri için yeni işe alım eğitimi vermek yerine, kolejlerin ticaret / teknik okullar olmasını bekliyorlar; Aslında kolejlerin kendileri için eğitimlerini yapmalarını isterler. Üniversite mezunlarının üniversiteden yeni çıkan her şeyi bilmesi beklenemez . İyi bir geliştirici olmak, bilgi ile ilgili deneyim kadar önemlidir (özellikle yazılım geliştirme gibi nispeten genç bir alanda).


Bu tam olarak benim düşüncem, ama cevabımdan çok daha iyi açıkladı.
Jeremiah Nunn

+1: Burada çok iyi şeyler var, 1 şeyi seçmekten nefret ediyorum, ama CS'nin uygulamalı matematik olarak ortaya çıktığını düşünürsek, bu uygulamanın önemini göstermez - bu durumda, programlama?
Steven Evers

2
@SnOrfus: Programlamanın matematiksel olarak uygulandığı ölçüde, evet. Fakat tıpkı bilgisayar bilimi gibi! = Yazılım mühendisliği, programlama! = Yazılım mühendisliği de.
mipadi

1
@David Thornley: Öncelikle, kendim ve fizik alan kim olduğunu tanıdığım herkes dalgaları okurken bir osiloskop kullandı. Yine de, analoji tutmuyor. Öğrencilere zaten CS derecesinin bir parçası olarak programlama öğretiliyor . Sen, ben, bir hepimizde bir nezaketsizliğe katılmıştık. Bir kursun tek seferlik bölümü bile değildi. Her dönem en az 1-2 dersin ayrılmaz bir parçasıdır .
Steven Evers

2
Okulu (kolej, üniversite, her neyse) nasıl balık tutacağınızı ve size sadece balık vermeyi öğretmemesi gerektiğini açıklayan +1
Emiliano

25

Buradaki sorunun bir kısmı, cilalanmış bir yazılım mühendisi olmak için 4 yılın yeterli bir zaman olmaması. Lisans eğitiminin sadece matematik ve CS derslerinden çok daha fazla şeye maruz kalmasını istediğimiz ve çok sayıda saf mekaniğin (algoritmalar, veri yapıları, dil sözdizimi) öğrenmesi gerektiği göz önüne alındığında, yeşil bir CS majörünün olmasını bekleyemeyiz. bir yazılım mühendisi.

CS! = SE 'nin aynı fikirdeyim, okula gidip bir SE olabileceğinden emin değilim (yüksek lisansta bile)


+! 1: Amacını anlıyorum ama bu sadece 'cilalanmış' değil. Birçoğunun bazı temel becerileri yoktur.
Steven Evers

Sanırım, temel becerilere göre ne düşündüğünüze bağlı. Örneğin, SQL aklımdaki temel bir beceri ama CS derecelerimin aslında oldukça zayıf olduğunu ve bunun beklendiğini düşünüyorum. Dil sözdizimi veya temel modülerlik ya da OOP kavramlarında zayıf olduklarını söylüyorsanız, bu büyük bir sorun ve farklı okullardan
not almaya başlıyorum

14 yıldır profesyonel olarak programlama yapıyorum. SQL'e baktım ve hatta temel sorguları bile yazabiliyorum, ancak bu temel beceriler bile sadece geçen yıl geldi. SQL, CS değildir. SQL, CS olan veritabanı teorisinin bir uygulamasıdır.
dash-tom-bang

@ dash-tom-bang: Zorunlu dillerde kontrol akışı ifadelerinin temel olduğunu düşünür müsünüz? Çoğunluğunu bilmeyen taze CS derecelerinin derecesinin bulunduğunu onaylayabilirim.
Steven Evers

Akış kontrolünün herhangi bir dilde uygulanmasını "Bilgisayar Biliminin temelleri" arasında saymazdım. Ancak eğer biri akış kontrolünü bir kavram olarak anlamıyorsa, o zaman CS öğrenmemişlerdir.
dash-tom-bang

10

CS aslında SE değildir. Ve insanlar, itiraf etse bile, ikisini her zaman birbirine bağlamış gibi görünmektedir. Bilgisayar bilimi, gerçekten Computology veya bilgisayar bilimi gibi bir şey olarak yeniden adlandırılmalıdır. Aslında, bilgisayar biliminin bilgisayarlarla çok az ilgisi var. Grafik teorisi, algoritma analizi, veri yapıları vb.

İnsanlar yeni bir CS derecesinin aslında bir ITT derecesi olduğunu varsaymak istiyor; bir meslek eğitimi almış birini istiyorlar. Bilgisayar bilimi bilimdir, programlama bir sanattır. Bunlar aynı değil.

Bu, neden yeni bir Fizik derecesinin iyi bir araba mühendisi olmadığını sormak gibidir. Aptalca.


2
Programlama bir sanattır, bir sanattır.
dash-tom-bang

6
Programlama zanaat, mühendislik ve sanattır.
Maciej Piechotka

2
Yeniden adlandırmazdım. Bilgisayar Bilimi nedir, bilgisayar bilimi nedir? Başka bir deyişle, hesaplama çalışmalarını ima eden hesaplama makineleri çalışması.
Michael K

1
Yeniden adlandırılmalıdır, çünkü insanlar sizin gibi kafanızda karıştı. Edsger W. Dijastra'yı biliyor musunuz? Bir keresinde, "Bilgisayar bilimi, astronomi ile teleskoptan daha fazla bilgisayar hakkında değildir." dedi. :)
Boos

1
Sanat güzelliği yaratır; zanaat yarar yaratır. Sanat güzelliği için yaratılmıştır; zanaat onun yararına yaratılmıştır. Sanat faydalı olabilir; zanaat güzel olabilir. Yazılım Mühendisliği fayda yaratır; bu nedenle, Yazılım Mühendisliği bir zanaattır.
systemovich

8
  1. En azından ABD'de, bir bütün olarak eğitim karla ilgili hale geldi. Okullar, kayıt oranını arttırmak için yönetim kuruluna müfredat bırakıyor. Üniversitede oraya hiç olmadığı kadar ait olmayan insanlar var. Uygun teknikleri öğrenmek, kolay öğretemeyeceğiniz bir şey değildir, öyle değil.
  2. Şahsen, SE'ye tipik olarak olduğundan daha fazla önem verirdim ama bir program olarak CS'nin endüstriye girmek isteyen insanlar için daha az uygun olduğuna inanıyorum. Daha fazla kurumun pratik bir SE programı sunması gerektiğini düşünüyorum.

# 1 için +1. Okula giderken bunu farkettim. Kar amacı gütmeyen bir okuldu ve öğrencilerin birçoğunun orada olmaya yetkili olmadığını hissettim. Buna ek olarak, okul yalnızca kurs başına para aldı ve bir öğrencinin başarısız olması, onlardan artık para alamadıkları anlamına geliyordu, bu yüzden öğretmenler çoğu zaman öğrencileri geçmek için kendi yollarından gittiler. Derecesiyle mezun olan en az bir kişi vardı, kendi tercihlerine göre bir Hello World programı bile yazabileceğini sanmıyorum!
Rachel,

ABD Eğitim sistemine ve kârın rolüne dokunduğunuzdan beri, zorunlu bir Milton Friedman Korosu: youtube.com/watch?v=W3Seg0JE1PM
İş

7

CS! = SE argümanı, programlama becerilerinin doğru öğretilmemesi için bir koparma veya mazeret midir?

Hayır. CS SE değildir. Bu bir gerçek, bahane değil.

1. soruya verdiğiniz cevap ne olursa olsun; Eğer böyle bir karar vermenin yüce konumunda olsaydınız: CS derslerinde programlamanın doğru bir şekilde öğretilmesine vurgu yapar mıydınız?

Hayır. Gökbilimcileri bina teleskoplarının ayrıntılarını öğrenmeye zorlamak gibi olur. Veya programcıları bina bilgisayarlarının detaylarını öğrenmeye zorlamak. İlgili şeyler, ama bir adamın her şeyi bilmesine gerek yok.


6

Evet, bu bana bir kopuşma ve bir CS'nin akademik bir disiplin olarak olgunlaşmamışlığının bir işareti gibi geliyor.

Bir Amerikan Kimya Topluluğu onaylı BS programı, hem teoride (ders derslerinde) hem de pratikte (laboratuar derslerinde) özel yeterlilikler göstermek için özel dersler almış olmanızı gerektirir. Şu anda, CS bildiğim kadarıyla hiçbir şeye sahip değil.

Dereceli kar kürem profesörlerinden biri, Magic Rocks'lı bir akvaryumdan daha fiziksel olarak kimyasal olan herhangi bir şeyle hiç bir zaman kederli olmayan çok fildişi kule teorisyeniydi, fakat aynı zamanda birinci sınıf kimya uzmanı olduğumda, aynı zamanda oldukça yetenekli bir tezgah kimyacısı olduğunu kanıtladı. .

Endüstriyel bir boya kimyageriyken çalıştığımda, bir bekar olduğu ve laboratuarda beceriksiz olacağı düşüncesiyle kafasını güldüler. Elbette laboratuarda yaptığımın detayları okuldaki laboratuar derslerinden farklıydı, ama prensipler aynıydı - sadece bir beher ve manyetik karıştırıcı yerine bir boya karıştırıcı ve teneke kutu kullandık. .

Eğer biri aynı yaklaşımı CS'ye uygulasaydı, bir CS / SE müfredatı için pratik yazılım geliştirme becerileri olarak öğretebileceklerinin detayları okuldan okula ve zaman içinde değişebilir. Ama bu sadece bana birisinin bu alanda bir derece kazanması ve yazma, hata ayıklama ve bir tür kod saklama konusunda yetkin olmamanın kabul edilebilir olması bana çılgınca geliyor . (Tabii ki, aslında birçok CS programında işler böyle, ama yine de çılgınca.)


Bu delilik değil, bu bir salgın. Meslektaşlarım tarafından yazdığım kodun yaklaşık% 90'ı, Pisa kulesi kadar bakımlı.
Marcel Valdez Orozco

5

Onlara büyümenin iyi bir temelini vermek için 4 yılın yeterli bir zaman olduğunu kabul ediyorum. Ancak, gerçekten yardımcı olan şey, sektörden insanların müfredatın geliştirilmesinde ve hatta sınıfta öğretimde yer almalarıdır. Geçen sene yerel bir üniversitede Yazılım Geliştirme dersinde Endüstri Üyesiyim. Bu benim için çok göz kamaştıran bir deneyimdi. Profesör ve ben kurs içeriği üzerinde birlikte çalıştık ve daha önce yaptıkları gelişim süreci, endüstrinin en iyi uygulamaları ve "gerçek dünya" durumları hakkında daha fazla bilgi verdik. Keşfettiğimiz şey şuydu, çünkü eğitmenlerin çoğu yaygın olarak kullanılan ve korunan kodlar geliştirmediler, endüstriden birisini getirerek bunun için gereken becerileri belirlemeye ve öğretmeye yardımcı oldular.


Böyle bir şeyi denemeyi çok isterim.
ChaosPandion,

Yerel üniversitenize başvurmalı ve böyle bir şeyleri olup olmadıklarına bakın. Bulunduğun yer neresi?
Beth Whitezel

3
  1. Evet bu% 100 oranında bir koparma, onlar kariyerimiz boyunca yararlı olacak uzun vadeli becerileri öğretiyor olmalılar. Niyetiniz akademiye veya sektöre girmek olsun veya olmasın, sadece kendiniz bile olsa, korunabilecek bir şekilde programlayabilmeniz gerekir.

  2. Evet, ancak uygun kurslarda vurgulanmasına rağmen. Şahsen, bir algoritmayı nasıl uygulamaya çalıştığınızı daha iyi anlamak için sizinle konuşmam gerekirse, notunuzu not alırdım.

Saf bir CS araştırması yapsanız bile, muhtemelen fikirlerinizi göstermek için kod oluşturmanız gerekecektir. Doğru programlama becerileri sizin için bir noktada faydalı olacaktır, bu yüzden neden üniversiteye başlamıyorsunuz?


Uzun vadeli beceriler CS'dir. "Java" uzun vadeli bir beceri değildir ve .NET, SQL, Pascal veya COBOL değildir. "Uzun vadeli" demediğiniz sürece "bu eski sistemleri sürdürmek için birilerine ihtiyaç duyduklarında bir işiniz olduğu için mutlu olursunuz".
dash-tom-bang

Temel becerilerin (CS) gerekli olduğu konusunda hemfikir olsam da, yazıldığı programlama diline bakılmaksızın okunması kolay ve bakımı kolay bir kod yazmayı kastediyorum. Kullanılan teknolojilerin ötesine geçen uzun vadeli anlam becerileri.
JustJohn,

1
Daha karmaşık bir soruna yaklaşabilmek için IMHO CS'ye ihtiyaç var, buradaki birçok insan, kod yazmak için bir CS derecesine ihtiyaç duymuyor, ancak 10x10 Milyon veri matrisini kullanmanız gerekiyorsa ve yönetiyorsanız, Bir SE, CS derecesi olmadan idare edebilir.
boos

3

Sanırım sorunumuz, doktorlar gibi kabul etmeye istekli olduğumuzdan çok daha fazla olduğumuzu ... Dört yıllık bir lisansın öğrencileri yazılım yazmaya hazırlaması gerektiği fikrine sahibiz. Yakın bile değil.

Mesleğimiz, diğer disiplinlere kıyasla, daha çok bebeklik dönemindedir. Belki de soru şu şekilde olmalıdır: CS'yi nasıl geliştirebiliriz ki, bu dereceyle mezun olan öğrenciler çok daha kısa bir sürede gerçek dünyadaki bir yazılım geliştirme ekibinin üretken üyeleri olmak için daha uygun olurlar mı?

Belki daha çok ilaç gibi olmalıyız. Dört yıllık temel çalışma (CS derecesi) ve ardından ikamet - daha deneyimli bir yazılım mühendisinin denetiminde zanaatın uygulanması. Belki zaten sahip olduğumuz şey buydu, ama daha az resmi ... Yani, bir asistan gibi, ilk işlerimizde işyerinde en değerli becerilerimizi öğreniyoruz .

Belki de disiplin olarak bunu daha iyi biçimlendirmeliyiz.


Ya da bir Usta Zanaatkar / Çıraklık programı
Austin Salonen

1
MD programı bir bilim programı değildir. Bilimi incelemek istiyorsan, biyoloji alıyorsun. Eğer tıbbi bir probleminiz varsa, bunu bir biyoloğa götürmezsiniz.
David Thornley

Bu çok iyi bir fikir: Yazılım Mühendisliğinin de bir deneyim meselesi olduğu gerçeğini resmileştirmek. Aynısı avukatlar ve doktorlar için de geçerlidir
Emiliano

Ama David hakkında ne konuşuyoruz? Kaçımız CS dereceyle mezun olduktan sonra kariyerimizi gerçekten "Computer Science" yaparak geçiriyoruz? Çoğumuzun gerçekten yaptığı, dünyaya gidip Yazılım Geliştirme zanaatini uygulamak. Bir MD ile aynıdır: Onlar ilacı “uygular”. Uygulama inşası yapıyoruz.
Chris Holmes

@Chris Holmes: Bir CSci derecesinin sizi en son sıcak dili kullanarak işe girmeye hazır bir programcıya dönüştürmesi gerektiği düşüncesi beni gerçekten sinirlendiriyor. Bu tür bir derece veya sertifika için, muhtemelen gerçek CSci'den çok daha fazla yer var. Yazılım geliştirmenin burada tıp uygulamalarına benzer olduğunu düşünüyorum, ancak MD'nizi biyoloji veya psikoloji bölümlerinden alamazsınız, tıp fakültesinden alırsınız. Çok saygın bir derece ama doktora değil.
David Thornley

3

CS derecem var ve programımın tamamı boyunca programlama, sadece teori yoktu. Programlama alanında değil Bilgisayar Bilimi alanında derece kazandığımız söylendi. Programcı olmak istiyorsanız, topluluk kolejine gidin.

Algoritmalar, tasarım kalıpları ve boşluksuz bir dil olmadan problem çözme teorisinin pek çoğunu öğrendik. Programlama dilleri gelir ve gider, ancak altta yatan teori aynı kalır.

Yani, ilk sorunuza göre, hayır CS! = SE'nin bir koparma olduğunu hissetmiyorum. Bu bir gerçek.

İkinci sorunuza göre, yapacağımı sanmıyorum. Programlamayı nasıl öğretirsiniz? Döngülerin, if'ler, yöntemler, sınıflar ve OOP'un ötesinde, 'uygun programlama' ne olurdu ve onu herhangi bir programlama diliyle nasıl alakalı hale getirecektiniz? 4 yıllık bir lisans derecesinin sizi hazırlayamayacağı bir şey yazmanız gerekiyor.

Gerçi yapacağım tek şey, Gerçek Dünyadaki Gelişim dersi vermek. Kaynak kontrolü, bilet / hata izleme, kod izleme ve tüm bu caz, yeni işlerinde karşılaşacakları şeyler için en yakın zamanda hazırlanmak için iyi bir başlangıç ​​olacaktır.

Sanırım ödüllü bir kod yazmayacaklarını anlamak için yeni bir değerlendirme yapmamızın bizde olduğunu düşünüyorum. Yönlendirme ve yönlendirme ihtiyaçları var.


++ - mükemmel puanlar. CS müfredatlarının bu "gerçek dünya" konusunda bir ya da iki ders vermesi iyi olurdu, katılıyorum. Üniversitemde (1993'te) bunun hakkında konuştuk ama hiçbir zaman bir yere gitmedi.
dash-tom-bang

Sadece programlama teorisi olmayan yılı oluşturan sınıflardaki yeterliliğinizi nasıl göstermeniz beklenir? Tamamen yazılı sınavlar?
Carson63000

@ Carson630000 - yazılı ödevler, bazen durum diyagramları yazıyor, bazen bir soruna nasıl yaklaşacağımızı ve çözeceğimizi ya da çeşitli CS kavramlarını nasıl uygulayacağımızı gösteren yazılar yazıyor. Belirli bir programlama dilini değil, teoriyi anlamamızı sağladı.
Tyanna,

2

Üniversitenin teorik bilgi ile pratik beceriler arasında iyi bir denge kurması önemlidir. Farklı kurslara katılırken ikisini de öğrendim. İlk yıllarda çok fazla matematik ve algoritma / veri yapısı vardı. Ardından bir seçim yapıldı: ya bilgisayar bilimi öğrenmeye devam edebilir (örneğin karmaşık dize eşleme algoritmaları olan kurslara katılabileceğiniz bir tür sanatsal yol) ya da yazılım mühendisliğine odaklanabilirsiniz. Bu süre zarfında hala sağlam bir programlama geçmişiniz olması gerekiyordu.

Yazılım mühendisliğini seçtim çünkü soyut problemlerle hiç ilgilenmedim. Ancak saf bilgisayar bilimlerini sevenler bile:

  • kullanıcı uzayda küçük bir dosya sistemi programlamak bir oluşturmak linuxçekirdek modülü ve çekirdek kendisi değiştirebilir, bir saf nesne yönelimli bir oyun yazmak SmallTalk,
  • öğretmen tarafından seçilen kendi iletişim protokolünü yazıp uygulayın (daha önce işbirliği yapmamış olsalar da, iki öğrencinin programlarının kolayca iletişim kurabilmesi gerçekten güzeldi),
  • Javadört kişilik bir ekip halinde daha büyük bir proje yaratmak ,
  • bazı fonksiyonel programlama projeleri inşa etmek,
  • CParalel programlama için birkaç sağlam program yazın (fikirler soyuttu, ancak değerlendirmeler oldukça zordu; uygun çıktı sağlamayan puanlar kaybetmek gibi, program başarısız olduğunda, iyi bir unix'in programyapması gerektiği gibi),
  • bazı web çerçevelerini kullanarak bir web portalı oluşturmak ( djangobeni seçti , bu çerçeveyi sevmemi sağladı),
  • kullanarak oldukça büyük bir program oluşturmak LAMP(hala kabuslarım var phpama postgresqlbunun yerine kullanılmış MySQLve bunu DBMSşimdi bildiğim için çok mutluyum ),
  • ve eğer biri seçerse, yüksek lisans tezi için bir program yazabilir - pythonkullanarak 10k satırlık bir masaüstü programı yazdım PyQt.

Belki başka projeler vardı, ama ben şimdi onları unuttum.

Demek istediğim: her şey okula bağlı. JavaAna dil olan saf yazılım mühendisliği yaklaşımından hoşlanmam . Bir zamanlar bir arkadaşıma yardım etmek zorunda kaldım, böyle bir okula gider ve paralel programlama için bir program yazmak zorunda kaldım. Onun da, çünkü temelde onun için yazmak zorunda sizeof(some_string)içinde Cdize uzunluğunu verir.

Dürüst olacağım: Matematikten nefret ettim, acı çekiyordum, soyut görevlere hazırlanmak zorunda kaldığımda algoritmalar / veri yapıları sınavlarına girecektim. Ama bana kesin bir avantaj sağlıyor: Çok soyut bir şekilde düşünebiliyorum. Dövüş sanatlarını öğrenirken ve korumanızda saklanmadığınız zaman (en azından yapmanız gereken yerlerde). Koç, ellerinizi indirdiğinizde kafadan vurup sizi vurmaya devam ediyor, çünkü unutmuşsunuz veya onları ayakta tutmaktan yorulduğunuz için. Ama bir süre sonra, onları ayakta tutuyorsun. Ve yüzüne vurmak gerçekten zorlaşıyor. Soyut algoritmik problemlerle aynı. Algoritmalara Giriş'in içeriğini anlayın ve işinizde çok az şey şaşırtacaktır.


İyi bir programa benziyor. Bazı teoriler. Çok fazla pratik.
Mike Dunlavey,

1

Bence cevabım evet (bir şekilde).

Mesele şu ki, çocuklara kısa bir süre içinde programlama yapmak öğretilemiyor. Programcılara, programcının problemlerini nasıl çözeceklerini (daha küçük ölçekte) mantıksal düşünmeleri öğretilmelidir.

Okul programlarının gözden geçirilmesi gerektiğinden eminim, ben çok küçük "üçüncü dünya" ülkem, neyse ki bunun gerçekleşmesi için çaba sarf ediliyor. OLPC programını uygulayan ilk ülke biziz; http://laptop.org/en/


1

Kendi tecrübelerime göre (şu an öğrenciyim), evet demeliyim, bu bir bahane. Herkes CS'yi bize tüm bilgisayarların temellerini öğreten bir bilim ve SE'de CS'de açıkça programlama öğreten özel bir dal olarak adlandırıyor. CS’de BS olan herkes, iyi ve optimize edilmiş kod yazmayı bilmelidir (programlama kendi uzmanlık alanı olmasa bile). Yani evet, böyle bir karar verme konusunda çok güçlü bir pozisyonum olsaydı, öğrencileri iyi programlama becerileri kazanmaya zorlardım.


Derecem Bilgisayar Bilimi ve Yazılım mühendisliği olarak adlandırılmıştır ve size her iki dünyanın en iyisini sunacak şekilde tasarlanmıştır, yani yetkili bir programcı olun ve okula ya da araştırmaya devam edebilmek için yeterli teoriyi öğrenin. Bence bu iyi bir yaklaşımdı.
Michael K

1

Amaç, iyi yazılım mühendislerini (programcıları) eğitmek olduğunu varsaymak, çünkü dünya onlara ihtiyaç duyuyor, ne öğretilmesi gerektiğini düşündüğümü söyleyerek cevap vermek sorun değil mi?

Birincisi, bu önemlidir, çünkü şu anda bilgi aktarımı çok verimsizdir. Potansiyel programcılar sınıftayken, zihinleri açık ve öğretileni emer. Aynı zamanda, profesörler (ben biriydim) çoğu zaman yüksek lisans hattını ezoterik konularda çalışabilecek öğrencilerle doldurmakla daha fazla ilgileniyorlar. Öğrencilerin gerçek dünya sorunlarına hazırlıklı olmadığına itiraz edildiğinde, profesörlerin işlerinin bu olmadığını iddia ettiklerini gördüm . Gerçek dünyanın işi bu.

Öyleyse, öğrenciler gerçek dünyada programcı olduklarında, yeni meslektaşlarından öğrenmeye istekli olurlar mı? Benim tecrübeme göre değil. Aksine, okulda edindikleri müjde'yi yaymaya hevesliler. Oradaki yaşlı ahbap dostlar arasında yeni fikirler geliştirmenin ne kadar zor olduğunu düşünen bir öğrenci ve genç uygulayıcı olarak hatırlıyorum. Artık yaşlı bir huysuz olduğum için teoriyle pratik arasındaki farka yeni programcıların gözlerini açmanın ne kadar zor olduğunu anlıyorum.

Makine mühendisliği ve daha sonra elektrik mühendisliği bölümünde mühendislik öğrencisiydim. Bunun temel bir kısmı a) matematiksel temeller ve b) pratik problem çözme idi. Yazılım mühendisliği bu şekilde olmalı, sadece programlama değil.

Yazılım mühendisliğine (programlama), çalışan bir bilgi - temel otomat teorisi ve bilgi teorisi olmak için yeterince bilgisayar bilimi ile öğretilmesi gerektiğini düşünüyorum . Bunların derinlemesine yapılması gerekmez. Temel programlama becerileri öğretildikten sonra, önemsiz büyüklükte ortak projeler bulunmalıdır. Bunların önemli bir kısmı, yalnızca en son din veya "bir sonraki büyük şey" veya tek bedene uyan herkese uygun olmayan, artıların ve eksilerin analiziyle, spesifik sorunların alternatif çözümlerinin önerilmesi ve değerlendirilmesi olmalıdır. Son olarak, sanayi ve akademi arasında işbirliği ve ortaklık olmalıdır, böylece fikir ve gelişmeler her iki şekilde de iletilebilir ve kalite kontrolünü büyük ölçüde arttırır.


0

Yapabilecekler; öğretemeyenler.

Üniversitemde öğretmenlerin bilgi tabanı nezaketle eksiktir. Öğretmenlerin Veri Tabanı Tasarımı alanında doktora tutarken XML'de yarı yapılandırılmış tabloların nasıl temsil edileceğini anlamakta zorlandıklarını gördüm. Meclis öğretmenimin kopyalayıp yapıştırdığım kod pasajı olduğunda kodumun ne yaptığını sorduğunu gördüm. Yazılım tasarım öğretmenimin bize Agile yönteminin şelale yöntemiyle aynı olduğunu, ancak daha hızlı olduğunu, yinelemeli gelişim süreci modelinin sahip olduğunu ve sadece 3 yinelemeye sahip olduğunu gördüm, çünkü kitabın örnek olarak gösterdiği resim budur. Öğretmenlerimden biri elseif ifadesinin ne olduğunu bile bilmiyordu.

'Başa çıktıklarına' ya da mazeretlere inandıklarına inanmıyorum, deneyimleriyle ellerinden gelenin en iyisini yaptıklarına ve kıymetli azınlığa sahip olduklarına gerçekten inanıyorum.

Burada görev yapan diğer insanlara 4 yıl deneyimli bir programcı olmak için yeterli olmadığını, ancak öğretmenlerimin yaşadıklarını tecrübe etmek için yeterli olmadığını kabul ediyorum. Bean, savaş okulunda öğretmenler tarafından kullanılan metriklerin yetersiz kaldığına dikkat çeken Ender'in Gölgesinde olduğu gibi, çünkü kılavuz kural olan son savaş gerçekte neyin gerekli olduğunu gösteremeyecek kadar kısaydı. Başka bir deyişle, öğretmenler ellerinden gelenin en iyisini yapıyorlardı, ancak iyi bir komutan (ya da bu durumda iyi bir programcı) yapmak için gerçekte neyin gerekli olduğunu bilme deneyimine sahip olamadılar.


3
Bence örneklerinizin çoğu, sadece öğretmeninizin işleri kendi çıkarlarınız için basitleştirmeye çalıştığı durumlar. Those that can, do; those that cannot, teach.Ayrıca buna kesinlikle katılmıyorum: akademik ve endüstriyel kariyer tamamen farklı yaşam biçimlerine yol açıyor. Dünyadaki araştırmaların çoğu akademisyenlerden geliyor. Ve orjinal soruyu cevaplamanın hiçbir yolunu görmüyorum.
Kimse

2
XML'in veritabanı tasarımı ile ne ilgisi var ki, eğer biri performansa bu kadar ilgisiz olsaydı, XML'i bir veritabanı için destek deposu olarak kullanabilir mi? Bazı öğretmenlerin bu noktayı kaçıramayacağını söylememeliyim (o noktaya yönelik müfredat "rüzgâr gibi yorum" öğrettiğinde "aşırı yorum" nedeniyle kaldırılan noktaların üzerine bir eğitmenle tartıştığımı hatırlıyorum) ama bu fazla sayılır. Birisi Java öğrenmek isterse, bunu yapmanın CS müfredatından geçmekten daha ucuz yolları vardır.
dash-tom-bang

1
Bazı üniversitelerin diğerlerinden daha kötü olduğu ve sizin de özellikle kötü bir CS departmanına sahip olabileceği gerçeği de var. Geleneksel olarak, yüksek lisans derecesine sahip CS çalışanları, endüstride akademik dünyadan çok daha fazla para kazanabildiler; bu nedenle, akademik alanda olanlar gerçekten orada olmak isteyenler ve gerçek dünyada iş bulamamış kişilerdi. İkisini de gördüm ve oranın üniversitelere göre değiştiğinden şüpheleniyorum.
David Thornley

@ dash-tom-bang, XML yarı yapılandırılmış veritabanlarının neredeyse mükemmel bir örneğidir. en.wikipedia.org/wiki/Semi-structured_model
Malfist

1
Bu şekilde kullanılan XML hala bir veritabanı teorisinin bir uygulamasıdır . Teori kendisi değil.
dash-tom-bang

0

Bilgisayar Bilimcileri ve Yazılım Mühendisleri farklıdır. Bilim adamı çılgın deneyleri yapan ve Yazılım Mühendislerinin daha iyi olmak için kullandığımız algoritmalarla ortaya çıkan adamlar.

Bir eczane şirketi için deneyler yapan kimyagerleri düşünün. Kütleleri kimyasal olarak nasıl üreteceklerini umursamıyorlar. Ayrıca pazarlama, paketleme, dağıtım ya da keşfettikten sonra ilaca olan şeyleri umursamazlar. Cehennem sertifikalandırma sürecini bile umursamıyorlar bile. Tek umursadıkları şey deneklere verildiğinde etkisi olan bir kimyasal bulmak. Şirket bunun ötesine geçmekle sorumludur.

Bilgisayar Bilim Adamları bu kimyagerler gibidir. Tek yaptıkları teorileri kodlarla denemek. Kodun ne kadar sürdürülebilir olduğunu umursamıyorlar. Bir teori kanıtlıyorlar ve bir sonrakine geçiyorlar. Başka biri, kitle için algoritma yapan ve kullanışlı hale getiren paketleri paketler ve Kinect veya iPhone'unuzdaki video akışı ile MP3 veya bilgisayar görüşümüz vardır. Öyleyse CS! = SE geçerli bir argümandır.

WRT sorunuzun ikinci kısmı. Müzik Teorisi alanında bir derece önerdiysem, şarkı yazarken ya da böyle bir şey için zorunlu bir kurs olabilir, ancak kimsenin bir enstrüman çalışmasını gerektirmezdi. İstedikleri bilgiyi aramak öğrencinin görevidir. Bilgisayar Bilimi Yazılım Mühendisliği değildir ... SE öğrenmek istiyorsanız, çift anadal almak.


0

Edsger Wybe Dijkstra, Hollandalı bir bilgisayar bilimcisiydi.

Programlama dillerinin geliştirilmesine temel katkılardan dolayı 1972 Turing Ödülü'nü aldı. , demiş:

"BİLGİSAYAR BİLİMİ ASTROMİ TELESKOP HAKKINDA BİLGİSAYAR HAKKINDA DAHA FAZLA DEĞİL."

CS, SE'DEN GERÇEKTEN FARKLI. (CS! = SE).

Bir CS, BİLGİSAYAR BİLİMİ bilgisini edinmiş bir bilim adamıdır.

BİLGİSAYAR BİLİMİ veya bilgisayar bilimi (bazen CS kısaltılmış CS) bilgisayar sistemlerinde uygulanması ve uygulanması için bilgi ve hesaplama ve pratik tekniklerin teorik temellerinin incelenmesidir. ve bilgileri dönüştürmek.

Bilgisayar bilimi, örneğin birçok alt alana sahiptir:

  • Teorik bilgisayar bilimi
  • Hesaplama teorisi
  • Algoritmalar ve veri yapıları
  • Bilgisayar elemanları ve mimarisi
  • Çoklu İşlem
  • Hesaplamalı bilim
  • Yapay zeka
  • Yazılım Sistemleri

Birçoğumuz günlük işlerinizde veya en azından bir kısmında bu yeteneğin hiçbirine ihtiyacımız yok.

YAZILIM MÜHENDİSİ (SE), yazılımı daha yüksek kalitede, daha uygun maliyetli, daha sürdürülebilir ve daha hızlı kurulacak şekilde tasarlamaya, uygulamaya ve değiştirmeye adanmış bir meslektir. "Yazılımın mühendisliğini uygulayarak bir yazılımın analiz, tasarım, değerlendirme, uygulama, test, bakım ve yeniden mühendislik işlemlerine sistematik bir yaklaşımdır"

Bir CS bilgisi olarak, gerçekten iyi bir programlama dili bilmeden gerçek karmaşık problemi yönetme bilgisine sahip olduğunu düşünmektedir. IMHO burada benim için bir derece sadece bir başlangıç ​​noktası değil, bir son hedef olduğu başka bir konu açabiliriz.

SE bilgisi olarak, bu gerçek karmaşık problemin üretimini yönetme ve bu alanla ilgili bir ekibin veya projenin gelişimini yönetme bilgisine sahip olması gerekir.

Birlikte bir CS yardımı ile uygulamalı Bilim bir CS tarafından yapılan bilim araştırma yapmak.

CS'nin SE'den daha iyi olduğunu kastetmiyorum, yani CS! = SE.

Bu tür bir soru, programcı olarak neden J, M, işletim sistemindeki X, Y, Z programlarının problemini telefonla çözemediğinizi sorduğunda, bilgisayar dışındaki kişilerin kendilerine sordukları aynı sorudur. N. ;)

Aslında , güvenlik alanında 10 yıllık unix sistem geliştirmeden sonra kodlama yapmaktan gerçekten sıkıldım ve bu soruyu okuduktan sonra daha fazla bilgisayar bilimi ve daha az bilgisayar dili ve bilgisayar sistemi veya protokolü çalışmam gerekiyor!

İş yerimdeki hiç kimse SE ve CS hakkındaki farkı kaldıramaz! bu gerçekten kötü bir şey.

Bir CS'nin kötü programlama becerisinin bahanesi olabileceğini düşünüyorsanız, bir CS ve SE'nin ne olduğu konusundaki noktayı gözden kaçırıyorsunuz.

Sanırım bir SE'siniz, örneğin tüm dillerin, tüm paradigmaların ve bilgisayar dili ile ilgili tüm şeylerin bir dizi kısmi özyinelemeli fonksiyonla matematiksel olarak ifade edilebildiğini ve yeni bir dil öğrendiğiniz her ne olursa olsun, YENİ BİR DİL, sadece SAME özyinelemeli kısmi işlev üzerinde yeni bir soyutlama öğrenme?

iyi eğlenceler :)

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.