it-swarm.asia

Her bilgisayar bilimi öğrencisine hangi programlama dilleri öğretilmelidir?

Her bilgisayar bilimi öğrencisi size göre üniversitede hangi dilleri (veya programlama dillerinin sınıflarını (paradigmalarda olduğu gibi) ve bu sınıfın tavsiye edilen dilini) öğretmelidir? Cevaplarınızı motive edin; neden bu dil? Bundan ne faydası olacak? Hangi kavramları öğretiyor (X dilinden daha iyi)?

Not/açıklama: Bu soru, saf bilgisayar bilimi değil, yazılım mühendisliğine yoğun bir şekilde odaklanan bilgisayar bilimi ile ilgilidir. Odak noktası olan yazılım mühendisliği eğitimi değil, hala bilgisayar bilimleri eğitimi.

13
Anto

Bir liste vereceğim:

  • Meclis (nispeten basit bir lehçe): Temel ilkelerin en azından bir az olduğunu anlamak önemlidir
  • C: Prosedürel dil, birçok yerde kullanılır. Yeni öğrencilere aynı anda OOD gibi yepyeni konseptlerle yük bindirmez.
  • Java/C #/Eiffel/C++: Nesneye Yönelik Bir Şey İyi, Bunlardan herhangi biri öğrencilere OOD öğretme amacına ulaşacak ve bu dillerden birini anladıklarında, diğerlerini de öğrenebilmeleri gerekir. iyi diller, Eiffel'i listeledim çünkü tasarım-sözleşme ile de var.
  • LISP ve Prolog: Öğrencilere, "gerçek dünyada" bunlardan hiçbirini kullanmasalar bile, önemsiz olan yeni bir düşünme yöntemi öğretir.
  • SQL ve XML: Veriler ve verilerin nasıl alınacağı ve yönetileceği hakkında düşünmenin yeni yollarını sunar.

Öğrenciler en azından tümü bunlara paradigmalar maruz bırakılmalıdır. Sadece bir ya da iki değil.

Sanırım birçok kişi Python yöntemsel stili, OOP stilini ve belki de diğerlerini kapsamayı önerecektir, ancak Python ile yeterli kişisel deneyimim yok güvenle tavsiye edebilmek.

Kişisel olarak fonksiyonel dillerin eskiden olduğu gibi öğretilmemeleri üzücü. En azından comp sci öğrencilerinin tüm önemli paradigmalardan bir dile maruz kalmaları gerektiğini düşünüyorum: prosedürel, nesne yönelimli, fonksiyonel ve dinamik.

45
Michael Brown

İyi dengelenmiş bir CS öğrencisine 4 programlama dili türünün her birinde bir dil öğretilmesi gerektiğini düşünüyorum:

İşlevsel - LISP/Haskell/PostScript. Haskell ile pek tecrübem yok, ama bu konuda öfkeli olan diğer programcıları duydum. İşlevsel programlamanın yapılarını ve neden birçok durumda yararlı olduklarını anlamak, bir programcının diğer dillerdeki algoritmaları düzenlemede daha iyi olmasına yardımcı olacaktır.

Nesneye Dayalı - Seçiminizi yapın. C #/Java/Python/Ruby/yadda yadda yadda. Bu tipin öğretilmesi gerekir, çünkü modern işletmelerin istediği budur.

Zorunl - C/Fortran/Pascal. Bunlar bugünlerde daha az yaygındır, ancak yine de pratik/tarihsel bir bakış açısıyla öğrenilmelidir. Kullandıkları yöntemler hala pratikliğe sahiptir, çünkü her dilde, hepsi bir talimata dayanır. Ve zorunlu diller, talimatları listeleme ve takip etme konusunda çok iyidir.

Mantıksal - ProLog. Bu dillerden hiçbiri için iyi bir pratik kullanım bulamadım, ancak mantıksal dillerin arkasındaki bazı kavramları daha nesne odaklı dillerde nasıl yazacağımı anlamaya çalışırken kullanışlı buldum. Üniversite yıllarım boyunca mantıklı dillere uzun süre odaklanamadım ve sanırım o zaman daha güçlü bir odaklanma bana iyi gelebilirdi.

33
Joel Etherton

Mezun olan her CS mezununun bilmesi gereken 1 numaralı dil, harika bir işe girme potansiyellerini en üst düzeye çıkaran dildir. Bu zamanla değişecek, bireyin harika iş tanımına bağlı olarak değişecek ve coğrafi bölgeye göre değişecektir.

Şu an için söyleyeceğim İngilizce her CS majörünün bilmesi gereken # 1 dil (bu, tabii ki) , bölgeye göre değişir.)

6
oosterwal

Bir CS öğrencisi için, tartışılan CS kavramlarıyla yakından eşleşen programlama dillerini arayın. Şunu öneririm:

  • Şema, lambda hesabını daha iyi anlamak için
  • Erlang, oyuncu modelini anlamak
  • Yüklem mantığı ve ispat sistemleri için Prolog
  • Haskell, tip/kategori teorisi için ve tembel değerlendirme dilde tam olarak ifade edildiğinden
  • en az bir Montaj dili - bu başlık altında saymak isterseniz, Java veya CLR bayt kodları ve LLVM gibi) bir bayt kodu dili de atarım. İR
  • muhtemelen Verilog veya VHDL gibi bir donanım tanımlama dili
  • Derleyici-inşaat sınıfı için bizon
  • dinamik tip sistemli bir şey (Ruby akla geliyor) ...

Liste bu şekilde devam edebilir, ancak temel fikir oldukça basittir: Öğrencilere, kavramları öğretmek istediğiniz şekilde en uygun programlama dilini öğretin.

4
Aidan Cully

Zamanla değiştiğini düşünüyorum, ama ideal olarak - 3 farklı perspektiften 3 dil. Benim günümde prosedürel, OO ve işlevseldi - Pascal, C++ ve LISP. Özellikle bu üçte çok satılmadım. Ama röportaj yaptığımda şunu ararım:

  • Bellek yönetimine dikkat etmeniz gereken bir dille ilgili bir miktar deneyim (C/C++ ve diğerleri)
  • API kullanımına ilişkin beklentiler ve mevcut çeşitli soyutlamalarla (C++/Java) nesne yönelimli bir dilde deneyim
  • Bir "streç" dil - garip, zor ve zorlayıcı bir şey. Birisi LISP, Assembly veya başka bir zorlu dil biliyor çünkü işe almayacağım, ama mühendisin ciddi problem çözme ve bir sürü "bu da ne böyle?" anlar.

Başka bir ticaret olarak - CS programlarının öğrencileri pazarda öne çıkan diller konusunda eğitmeleri gerektiğini düşünüyorum. Herhangi bir zamanda, 2-3 dilin işlerin çoğunluğu için ciddi bir öneme sahip olduğunu düşünüyorum. Bence bir okul öğrencilere borçludur ve bu dilden 3'ünden 2'sini en az birinde eğitim derinliği ile öğrenme fırsatı sunmaktadır.

4
bethlakshmi

yacc

hangi programlama dilini kullanırsanız kullanın, perde arkasında neler olup bittiğine dair bir fikir edinmek için. ölü kod gibi temel kavramları ve (iyi) bir derleyicinin sizin için yapabileceği çeşitli optimizasyon türlerini kavramaya yardımcı olur.

3
mariotomo

Bence dil insanların inandığı kadar önemli değil.

Evet, vb.'nin nasıl programlanacağını bilmeniz gerekir, ancak birçok büyük programcı, gelişirken onlara yardımcı olan gerçek dünya deneyimlerini kendi kendine öğrenir.

Öğrenciler sadece kitap yöntemlerini değil, gerçek dünyada nasıl programlama yapılacağına dair bazı derslerle yapabilirler, bu onları daha "yuvarlak" hale getirir ve benim tercihimde daha iyi geliştiriciler/mezunlar olur.

Üniversiteden ayrılıp çalışmaya başladıktan sonra programlama ve yazılım geliştirme hakkında daha fazla şey öğrendim!

2
user18041

LISP (OOP için CLOS ile) ve Haskell. Bu soru öğrencilerle sınırlı değildir. Yeni süslü programlama dilleri, bu ikisinden birçok özellik ödünç aldı (kopyalandı, çalındı ​​mı? ... hayır, fena değil). Kendinizi geleceğe hazırlayabilirsiniz. Fonksiyonel programlama (stil) bugün daha önemlidir ve C # (LINQ) veya C++ (lambda) gibi zorunlu programlama dillerinde tanıtılmaktadır. Bazı öğrencilerin Java) öğrenmesi çok kötü.

2
knivil

GERÇEKTEN ÖNEMLİ Mİ?

Genellikle bu sorunun ardındaki kaşıntı, "Bana en kazançlı/ilginç/zorlayıcı/kolay işleri sağlayacak olan özgeçmişimi koyabilir miyim?" Her ne kadar sorunun en özgeçmişi olsa da, ilk önce aradıklarını anlamayan İK insanlar tarafından taranıyor. ama çok sığ, kapıları geçtikten sonra malları teslim etmeniz gerekiyor.

Sizi iyi veya kötü bir programcı yapan hangi dilleri bildiğiniz değil, onu nasıl kullanabileceğinizdir. Bunun için temel olarak iki programcı kategorisi vardır:

  1. Özünde bir dil öğrenmeye odaklananlar. En önemlisi dil ve nasıl kullanılacağıdır. Aşırı uçlarda, her küçük kod parçasını süper optimize etme eğilimindedirler ve genellikle yapabildikleri için genellikle belirsiz özellikler kullanırlar.

  2. Sonra teknikler ve paradigmalar hakkında bilgi edinmek isteyenler var. Kullandıkları dil, zihinsel resimlerini zarifçe ifade edebildiği sürece gerçekten önemli değil. Aşırı uçlarda, bunlar UML veya başkalarının bunu kodlama işini yapacaklarını ummak gibi diğer sistemleri kullanma eğiliminde olacaktır.

Bence ikisine de ihtiyacınız var. # 1 kısa vadeli beceriler sağlayacaktır ve akıllıca seçildiğinde İK kapıları boyunca sizi kolaylaştıracaktır, ancak # 2 sizinle tüm kariyerinizde kalacaktır ve sizi programcı olarak tanımlayacaktır.

# 2 rehberlik sağlayacak ve elinizdeki soruna çalışan bir çözüme yönelik düşünce treninizi düzenleyecektir, ancak 1 olmadan bu fikir bir fikir olmaya devam edecektir, sonsuza dek buharlı cennetin limbolarında yüzen (veya nereden baktığınıza bağlı olarak cehennem).

# 1, size gerçek çalışma sistemlerine fikir uygulama araçları verecektir, ancak 2 olmadan sistemleriniz kanserli şekilsiz canavarlara yönelecektir.

2
Newtopian

Montaj dili ve mikrokod. Bir CS öğrencisi, boolean durum makineleri ile en son üst düzey fonksiyonel/OOP/vb. Arasındaki tüm soyutlama katmanlarını anlamalıdır. programlama dili paradigması.

Temel veya Logo veya Gıcırtı (et.al.), eğer küçük çocuklara bilgisayar okuryazarlığını nasıl öğreteceklerini anlayabilmek istiyorlarsa.

Fortran, Cobol ve LISP, programlama dillerinin tarihini ve modern uygulamaların düzelttiği asıl sorunların ne olduğunu anlamak istiyorlarsa.

1
hotpaw2

Farklı paradigmalardan 3 veya daha fazla dil seçmek o kadar da zor değil, birçok iyi cevap verildi. Ama sadece bir dil seçmek zorunda olsaydım, Scala'ya giderdim, çünkü hem işlevsel hem de nesne odaklı. Aynı dilde farklı yaklaşımları açıklayabilir ve karşılaştırabilirsiniz.

1
Sean Patrick Floyd

Yığın yönelimli/birleştirici dilleri unutmayın! Gerçek zihin bükücüler olabilirler. Küçük, anlaşılması kolay ilkelleri kullanarak karmaşıklık oluşturmayı vurgularlar. Onları çok temiz hisseden pointfree (veya tacit) kodu yazmak için kullanabilirsiniz.

Klasik dil Forth , ama bu günlere gittiğim Faktör . Ayrıca kontrol etmeye değer Joy ve Cat . bitiştirici dil wiki 'ı kaçırmayın. Çekiç dolu bir çantadan daha eğlenceli!

1
Scant Roger

Sorunuzu kısmen kendiniz cevapladığınıza inanıyorum.

Asıl önemli olan, öğrencilere birkaç paradigma ile temas kurma fırsatı vermektir, gerçek diller önemli olmamalıdır.

Tabii ki, en çok iş fırsatı veren paradigmaları öğretmek önemlidir (muhtemelen OOP) Bu nedenle, bu paradigma için yaygın olarak kullanılan bir dili öğretmek daha iyidir, çünkü asla kullanamayacağınız bir şey öğrenmekten daha yararlıdır, bu yüzden sınavlarıma da sahte kod yazmaktan nefret ettim.'Pseudocode 'sabit' sözdizimi olmadığı sürece gayet iyi. karşısında.

Somut olarak:

OOP: .NET veya Java

Öğrencinin diğer yaklaşımlardan haberdar olmasını sağlamak için en az 1 ek programlama paradigması.

Fonksiyonel: Lisp?

1
Steven Jeuris

Ana akım olmamasına rağmen, D'nin, özellikle sürüm 2'nin, başka bir yerde kolayca öğrenilemeyen bazı ilginç dersler verdiğini görüyorum. Birbiriyle Nice oynaması ve çok düşük bir seviyede (işaretçiler, manuel bellek yönetimi, satır içi) programlamaya izin vermek için zorunlu/prosedürel, nesne yönelimli ve fonksiyonel programlama almayı düşündüğüm diğer dillerden daha ciddi bir girişimde bulunur. Montaj dili) ve aynı dilde çok yüksek düzeyde (genel ve üretken programlama).

Bu değerlidir, çünkü paradigmaları farklı evrenlerde varmış gibi tek başına görmek yerine, ormanı ağaçların arasından görürsünüz. Her paradigmanın güçlü ve zayıf yanlarını programlarınıza harmanlarken ince taneli bir düzeyde görürsünüz. Paradigmaların önemli yönlerinin alt düzey kod açısından kütüphanelerde nasıl uygulanabileceğini göreceksiniz. Standart kütüphane modülü std.algorithm önemli fonksiyonel programlama ilkellerini uygular, ancak sihir olmadan düz, basit D kodudur. Benzer şekilde, std.range tembel değerlendirme uygular, ancak yine oldukça basit bir D kodudur. Her paradigmanın ilkellerinde yer alan maliyetleri anlayacaksınız, çünkü D'nin metale yakın özellikleri, kaputun altında gerçekten olup bitenleri nispeten şeffaf hale getiriyor. Hatta C'ye benzeyen düşük seviyeli bir şey yazabilir ve daha sonra, aynı dilde, sihirli tutkal katmanları engellemeden güzel, yüksek seviyeli bir arayüz oluşturabilirsiniz.

0
dsimcha

Pseudocode.

Alandaki insanlar fikirlerini, çerçeveye veya sözdizimine özgü jargon olmadan tutarlı, yapılandırılmış bir şekilde açıklayabilmelidir. Algoritmanızı anlamak için köşeli parantezleriniz ve parantezleriniz arasındaki farkı bilmek zorunda olmamalıyım. ?? 'Un ne anlama geldiğini veya grep anahtarlarının ne olduğunu bilmeme gerek yok.

Düz dilde yazın, ancak kod gibi yapılandırın ve biçimlendirin. Daha sonra herkes istediği dilde uygulayabilir.

edit: Bu cevap kısmen bazı programcıların sözde kod yazma yetersizliği tarafından motive edilir.

"Algoritmayı sahte kodda yaz"

"Bu da ne?"

Sahte kodun faydaları, programlama dışı paydaşların anlayabilmesidir. BA'ların ve kullanıcıların kodunuzu prova etmesini istediğinizi önermiyorum, ancak bir programcı olmayan gerekli algoritmayı anladığında yardımcı olabilir. Psuedocode for (int i = 0; i < j; i++) açıklamasını ve esas olarak kazan plakası jargonunu açıklama ihtiyacını ortadan kaldırır.

0
Kirk Broadhurst

Genel problem çözme becerilerini kazanmak için uygulanan programlama dillerinden bazıları ve programlama kavramları Logo ve Karel'dir, C/C++/Java/LISP/Perl/Assembly/herhangi bir programlama paradigması öncesinde öğretilmelidir.

Öğrenciler programlamaya çok pratik bir giriş yaparlar.

0
umlcat

C.

  • Her şeyden önce, sadece çekirdekler için değil, hala yaygın olarak kullanılmaktadır! Şu anda C ile kodlanmış bir iş uygulamasını sürdürüyorum. Böylece, saf ve basit C ile bile, hala bir iş bulabilirsin. Büyük şirketlerde, endüstride, hemen hemen her yerde (ancak web geliştirmede).
  • Unix/Linux ortamında çalışacaksanız, en azından biraz C'yi bilmemek, alışverişe çıkmak ve etiketlerdeki fiyatları okuyamamak gibidir.
  • İşaretçiler! Herkes işaretçileri anlamalıdır (çapraz başvuru Joel Spolsky ). Ayrıca, malloc konseptini yakaladıktan sonra, dikkatsizce bir OOP dil alanına) “yeni” yazdığınızda tam olarak ne tür şeyler olduğunu bilirsiniz.
  • Çoğu "popüler dil" sözdizimi C'den türetilir.
  • Evet, her zaman net değil. Evet, öğrenmesi zor. Evet, teller yeni başlayanlar için bir kabus. Ancak programlama her zaman net değildir ve öğrenmesi zordur ve OOP, C'yi okuduktan sonra C++ 'ı denediğinizde ve std :: string'i keşfettiğinizde gerçekten neyin harika olduğunu anlayacaksınız.

Tabii ki, sadece eski bir prosedür dili değil, birden fazla dil bilmelidir. Ama tek bir derleyici ile ıssız bir adaya gitmek zorunda olsaydım, eski iyi gcc'imle giderdim. Düşük seviyeli programlamayı biliyorsanız yüksek seviyeli programlamayı anlayabilirsiniz. Bence tam tersi doğru değil.

0
Raveline

İşlevsel bir şey, Haskell veya LISP benim ilk tercihim olurdu, ama belki Erlang. İşlevsel diller gerçekten nasıl soyutlamalar yapılacağını çok güçlü bir şekilde öğretir.

0
Zachary K