Neden C ++ genellikle üniversitede ilk dil olarak öğretilir? [kapalı]


12

Okulum bilgisayar bilimi müfredatına C ++ programlama dersleri ile başlıyor, yani bu öğrencilerin çoğunun öğrendiği ilk dil.

Birçok insanın C ++ 'dan hoşlanmadığını gördüm ve bunun çeşitli nedenlerini okudum. C ++ 'ın çok iyi bir dil olmadığı neredeyse popüler bir fikir gibi görünüyor. StackExchange'teki bazı soruların yanı sıra aşağıdaki gibi yayınlara da çok sevilmediğini düşünüyorum:
http://damienkatz.net/2004/08/why-c-sucks.html
http://blogs.kde.org/ düğüm / 2298
http://blogs.cio.com/esther_schindler/linus_torvalds_why_c_sucks
http://www.dacris.com/blog/2010/02/16/why-c-sucks-part-2/
vb.

(Not: Benim görüşüme göre C ++ kötü bir dil. Aslında benim kullandığım ana dil. Bununla birlikte, internet ve bazı profesörler bana çok sevilen bir dil olmadığı izlenimini verdi. , profesörümden biri sürekli olarak C ++ ile uğraşıyor, ancak yine de üniversitemdeki başlangıç ​​dili!)

Bunu akılda tutarak, neden birçok okulda ilk dil öğretiliyor? C ++ ile bir programlama müfredatı başlatmanın nedenleri nelerdir?

Not: Bu soru "C ++ ilk dil olarak uygun mu" sorusuna benzer, ancak uygun olup olmadığıyla ilgilenmiyorum, ancak neden seçildiğinden biraz farklı.


6
Hangi okullar ve nerede? Yakınımdaki herkes (şehirde 3, birkaç saat içinde birkaç kişi) Java'ya ilk dil olarak öğretiyor. C ++ geçen yıl ya da iki yıl içinde gelir (öğrencinin aldığı derslere bağlı olarak). En azından son 10 yıldır böyle oldu.
Hayal kırıklığına

7
Profesörler, yalnızca rasyonel beğenilere ve hoşlanmamaya sahip olan diğer programcılar gibidir. Aynı zamanda deneyimden mahrum bırakılmış öğrenciler gibidirler.
Mike Dunlavey

@Casey Muhtemelen burada diğer kullanıcılarla bir miktar sürtünme yaşayacaksınız, çünkü sadece C ++ 'ın beğenilmediğini iddia ettiniz, ancak bunun için herhangi bir gerekçe değil. Odak noktanız sadece üniversitede C ++ 'ın seçildiğini bulmaksa, asıl sorunuzla büyük ölçüde alakasız olduğu için sevdiği veya beğenmediği referansları düzenlemenizi şiddetle tavsiye ederim.
Adam Lear

4
İlk yıl, her şey buğdayı samandan ayırmakla ilgili.
Steven Evers

2
Bu olur kaç kolej hakkında bazı istatistiğe sahip ilginç olabilir / üniversiteler kendi tanıtım kursları için neler dillerini kullanırlar.
Jerry Coffin

Yanıtlar:


25

Her dilin sevgilileri ve nefretleri takip eden bir kült vardır; bu C ++, Java, C #, Haskell, Objective-C için geçerlidir.

Bir dili sevmek veya sevmemek için birçok geçerli neden vardır.

Sonunda, C ++ 'ın ağırlıklı olarak üniversitelerde öğretilmesinin birkaç nedeni vardır:

  • C üzerine inşa edilir; bu nedenle, C'den C ++ 'ya geçiş çok acı verici değildir. Oldukça az sayıda üniversite C ++ 'dan önce C öğretiyor (IMO çok mantıklı).

  • Endüstrideki en popüler dillerden biri (Java, mobil geliştirme, web geliştirme vb.Ile değişmeye başlıyor, ancak hala orada)

  • Bir akademik tarafından akademik (yani araştırma amaçlı) yazılmış bir dildir ; bu nedenle birçok profesör bunu günlük olarak kullanıyor ve çok tanıdık geliyor, bu da derslerinin içeriği için bariz bir seçim haline getiriyor.

Bunu "kötü" bir dil olarak reddetmekte çok acele etmeyin; İçine dalmanızı, gerçekten öğrenmenizi, onu kullanarak orta ve büyük ölçekli projeler inşa etmenizi öneririm. Sonra aynısını diğer dillerle yapın; bu noktada "Bence C ++ kötü çünkü X, Y, Z" ya da "Bence C ++ iyi çünkü Java'nın sahip olmadığı A, B, C" demek için yeterli deneyime ve kavrayışa sahip olacaksınız.

Hala öğrenecek çok şeyin var, genç çekirge.


2
"Kötü özneldir" felsefesine yükselirseniz "kötü" bir dil olmayabilir, ancak teknik kaygıların neredeyse her birleşimi için daha üretken, daha güvenli bir dil vardır. Benim düşünceme göre, C ++ 'nın öğretilmesinin nedeni insanların kullandığı şeydir ve insanların kullandığı şeydir çünkü insanların bildiği şeydir ve insanların bildiği şeydir, çünkü üniversiteler öğretir. Popülerliğin yanı sıra, C ++ 'ın görebildiğim önemli bir değeri yoktur ve onunla profesyonel olarak programlıyorum.
weberc2

13

Basitçe söylemek gerekirse, çok iyi bir öğretim dili çünkü elinizi tutmuyor. Manuel şanzımanda sürüş yapmayı öğrenen insanlar otomatik olarak ilk kez neredeyse hiç sorun yaşamazlar, ancak bunun tersi doğru değildir. Öğrenmek daha uzun sürer, ancak üniversitede faydalı bir şey yapmadan önce pratik yapmak için 4 yıllık oyuncak programlarınız vardır.


9
Bu sahte benzetmenin bu kadar çok oy aldığından endişeliyim. Öğrenme böyle olmaz. Didaktikle ilgili birçok yanlış anlamadan biri.
Konrad Rudolph

12
C++ isn't that bad. 

Okulda öğretilenler genellikle profesörlerin bildikleri, endüstride kullanılan ve o zamanlar popüler olan şeyler tarafından yönlendirilir.

Okulları geçmişe yönelik bir zaman kapsülü olarak düşünün. :)

Keşke bunun tam tersi olsaydı.


çok mantıklı bir nokta! Akıllı işaretçiler veya üniversitede RTTI veya RAII ile ilgili herhangi bir egzersiz yapmadım. O NE LAN !
Chani

12

İngilizce de gerçekten kötü, birlikte hacklenmiş, tutarsız bir dil olarak tanımlandı, ancak buradaki birçok insan bunu bildiğinden, ailem ve öğretmenlerim bana öğretmenin iyi bir fikir olduğuna karar verdi.

Bence C ++ ile aynı. Birçok insanın bildiği bir dil, bu yüzden temel bir akıcılık kazanmaya değer.

Ayrıca, donanım seviyesinde neler olup bittiğine dair bir fikir vermek için yeterince düşük olma avantajına da sahiptir.

Son olarak, diğer bazı dillerin (Java-Oracle veya .NET-MS gibi) sahip olduğu "ticari" sorunlar yoktur. Pek çok üniversitenin belirli bir şirketin ürününü başka bir şirkete öğretmekle suçlanmak istemeyeceğini biliyorum.


1
C ++ 'ın ticari dil olmaması için +1. Politika ve iş taktikleri hakkında endişelenmeden bir dil öğrenmek iyidir. <Java7'yi Linux'a yükleme>
Chani

5

C ++ çok kötü ise, günlük yaşamınızda kullandığınız çoğu yazılım ürününün C ++ ile nasıl yazıldığını nasıl açıklarsınız?

C ++ 'ı ilk yıldan itibaren öğrenmek için çeşitli nedenler olabilir:

  • Büyük ölçüde kullanılır. Mevcut kod tabanı çok büyük ve Ruby, Python veya C # gibi diller olduğu için bile, web siteleri de dahil olmak üzere sıfırdan uygulama oluştururken bile C ++ çok kullanılıyor. Bu durumda, C ++ öğrenmek iyi bir seçimdir. Ada'yı öğrenmek için en az iki yıl harcamaktan daha iyi bir şey, yani uzay aracı için uygulamalar geliştirmedikçe hayatınızda asla kullanmayacağınız bir şey.

  • Çok soyut değil. Örneğin, öğrencilere yalnızca C # veya Java öğrendiklerinde işaretçilerin neler olduğunu nasıl açıklayabilirsiniz?

  • PHP ile karşılaştırıldığında yeterince zor. Bu, programlama için yapılmayan öğrencilerin yakında çıkacakları anlamına gelir, bu çok kötü değildir ve bir öğrencinin yazılım geliştirmenin kendisi için olmadığını anlamadan iki veya üç yıl kaybetmesini önler.

Bu, C ++ uygulamasını Ada, Java veya PHP'den daha uygun hale getirir.


1
C'nin ikinci iki puanınız için daha iyi olacağı anlaşılıyor. Ada'yı öğreten okullar var mı? Kesinlikle bunu C ++ üzerinden alacaktı ama sonra tekrar garipim!
Jetti

C ++ ticari ürünler için seçilmiştir çünkü teknik kaygılarından ötürü daha fazla insanın bildiği şey budur. C ++, birçok modern dile kıyasla güvenli olmayan, kullanımı zor bir dildir. Diller esaslarına göre seçilmez, çünkü popülerdirler.
weberc2

Ayrıca, Ada C ++ daha kötü yaptığı pek çok şey düşünemiyorum ve ben çok C ++ (benim kod zaten daha basit ve daha güvenli olurdu) kullanmak istiyorum ve C ++ profesyonelce program! Ve öğrencilere işaretçiler hakkında bilgi vermek için her zaman Ada, Go veya herhangi bir aklı dili vardır. Ve son noktanızla ilgili olarak, C ++ gereksiz yere zor. C ++ programcılarının karşılaştığı sorunların çoğunun programlama ile ilgisi yoktur, ancak C ++ 'ın üstesinden gelmekle ilgisi yoktur. Herhangi bir düzeyde programlama aklı başında bir dilde oldukça basittir.
weberc2

5

Genel olarak konuşursak, C ++ öğrenebilir ve ustalaşabilirseniz, hemen hemen başka herhangi bir dili öğrenebilir ve ustalaşabilirsiniz. Sevilmemesinin nedeni, bu konuda yetkin olmak ve hızlı bir yayın süresine sahip olmak için, dili ve standart kütüphanesini çok iyi tanımanız gerektiğidir.

Bununla birlikte, Java gibi bir dilde, yalnızca dil / standart kitaplığın giriş ve çıkışları hakkında bazı ileri düzey bilgilerle hızlı bir dağıtım süresine sahip olabilirsiniz. Cehennem, Java standart kütüphanesinden sadece beş şey biliyorum (elbette koleksiyonlar gibi temel şeylerin yanı sıra).

Bununla birlikte, C ++, hız ve nesne yönelimli yöntemlerin mükemmel birleşimi nedeniyle hala yaygın olarak kullanılan bir dildir. Birçok kişi tam OOP olmadığına inanıyor olsa da, size tam bir fanatik olmaya zorlamadan OOP'nin esnekliğinin çoğunu verdiğine inanıyorum. Çoğu derleyici saf C yazmanıza bile izin verir.

Eğer seçimim olsaydı, her gün Java üzerinden C ++ alırdım, ama bu sadece bir fanboyum. Genel olarak konuşursak, Java yararlıdır, çünkü Java yorumlayıcısı içeren hemen hemen her mimaride çalışır. Bu nedenle, birden fazla platformda desteklenmesi gereken istemci uygulamaları için, iş için en iyi araç olarak kabul edilir ve yazılan çoğu yeni uygulama yine de web tabanlıdır.


Nesne kodu için doğru olmayabilir, ancak C ++ da dahil olmak üzere C dillerinin gün içinde vaat ettiği hemen hemen her platform için derleyiciler olmasıydı, böylece aynı kaynak kodu çok çeşitli platformlar için uygulamaları derlemek için kullanılabilirdi.
JohnFx

Aslında bu doğrudur. Çoğu * NIX platformu derleyiciler oluşturmuştur ve bu çoğu insan üzerinde "Tabii ki, THAT derleyicisini indirebilirim, ancak bu işletim sistemimle birlikte geldi, bu yüzden kesinlikle en iyisi olmalı" şeklinde.

Java dışında diğer dilleri denemelisiniz - her iki dünyanın en iyisini oluşturan alternatifler var. Go, örneğin hız, taşınabilirlik ve basitlik sunar ve eşzamanlılığı bir esinti haline getirir.
weberc2

4

Bazı profesörlerimin söylediği gibi, alttan başlamak ya da düşük bir seviyeden başlamak ve daha sonra yukarı çıkmak daha kolaydır. C ++ gibi bir dil, bir bilgisayar bilimcisi olmanın gerçekten neyle ilgili olduğuna dair harika bir giriş sağlar. Java, Python, Ruby, vb.Gibi çekici bir dil olmayabilir ... ancak işaretçiler ve bellek yönetimi gibi önemli program özellikleri hakkında temel bir anlayış kazanmanızı sağlar. Planladığınız veya hayatınızın geri kalanında kullanmak istediğiniz bir dil olmasa bile, istediğiniz programlama yolunu bulmaya başladığınızda yıllar içinde takdir edeceksiniz.


Bu Ada için bir argüman gibi geliyor, C ++ değil ...
weberc2

3

C ++ başlangıç ​​seviyesi konsol programları için en basit dillerden biri olabilir. Dilin karmaşık olduğundan emin olun, ancak yordamsal bir alt kümeye odaklanabilirsiniz. İşaretçilerin varlığını bir süre göz ardı edebilirsiniz. Basit başlayabilir, sonra inşa edebilirsiniz.

İlk "merhaba dünya" programını java veya C # ile karşılaştırıldığında çalıştırmak ve çalıştırmak için daha az "kabartmak" sözdizimi vardır. Yeni başlayan bir merhaba dünya uygulaması için "statik" kelimesini görmek zorunda mı? Java / C # 'da yaparlar.


3

Bilgisayar bilimi okuduğumda, önce Java öğretildi, ancak üniversitem şu anda bize bilgisayarlı dilbilimcilere iki dil öğretiyor: önce Prolog ve sonra C ++.

C ++ (en azından) aşağıdaki nedenlerle öğretilir:

  • Bu genel amaçlı bir dildir, onunla herhangi bir işletim sistemi için yazılım yazabilirsiniz (çünkü birçok derleyici vardır). İyi bir üretim dili olacak şekilde tasarlanmıştır, program parçalarını yeniden kullanmayı, gerçek dünyadaki donanım ve yazılımlarla birlikte çalışmayı kolaylaştırır.

  • Gerçekten hızlı. Bu zamanlarda yaygın olan büyük veri kümelerini işlemek için Python veya Scheme veya Prolog'u kullanamazsınız . Milyonlarca düğüm içeren grafik algoritmalarını düşünün. (Bu yüzden bilgisayar oyunları genellikle C ++ ile yazılır.)

  • Öğrenciler derleyicinin ne yaptığını öğrenebilir. Aslında, sadece Java'yı (liseden başlayarak) öğrendiğim sürece, derleyicinin işi her zaman benim için sihir gibi görünüyordu. Java yeni başlayan olarak yığın ve yığın, tüm statik ve dinamik bağlantı şey vb hakkında bilgi sahibi değilsiniz. C ++ tüm bilgisayarın gizemini kaldırır.

  • Yapabileceği şey için, öğrenme süresinde sorun değil (gerçekten içine girerseniz muhtemelen en karmaşık dillerden biri olsa da). Düzgün bir öğrenme eğrisine yardımcı olan güzel bir kütüphane sunar. (Bununla ilgili farklı yaklaşımlar var. Üniversitemde, kütüphaneyi kullanmamıza izin verilmeden önce kendi dize sınıflarımızı ve akıllı işaretçilerimizi nasıl yazacağımız öğretildi; C ++ mucidi Bjarne Stroustrup, zıt sırayı teşvik ediyor.)


Bu, Ada'nın neden ilk dil olarak öğretilmediğini açıklamıyor.
weberc2

2

C / C ++ aslında diğerlerinden daha iyi bir dildir, çünkü öncelikle yanlış bir güvenlik duygusu eklemez. İkincisi, ne yaptığınızı bildiğiniz için.

Aslında dili seviyorum ve çoğu alternatiften daha üstün olduğunu düşünüyorum.

Ayrıca diğer birçok dil kadar üretkendir ve ne yaptığınızı biliyorsanız "makarna" değil, makarnaları rastgele kodlamadan önce düşünün.

Ayrıca iyi bir okuma - http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

Bununla birlikte, C ++ 'da bazı şeyler aslında kötüdür, örneğin istisnalar ve bazı durumlarda kasıtsız yük. Sanırım, Linus'un alıntıladığınız yayında bu kadar olumsuz olmasının nedeni budur.

İlgili konulardan birine dokunmak için iyi bir okuma - http://blogs.msdn.com/b/oldnewthing/archive/2004/04/22/118161.aspx


3
Bu cevap tamamen yanlış. Her şeyden önce “C / C ++” diye bir dil olmadığı için.
Konrad Rudolph

1
  1. Profesörler yeni bir kurs hazırlamaktan hoşlanmazlar ve ne kadar teklif verebileceğiniz konusunda sınırlamalar vardır.
  2. Diller gelir ve gider, bu yüzden en ileri seviyede kalmaya çalışırken vazgeçtiler (Bkz. # 1)
  3. Bu bir üniversite, teknik bir okul değil. İş eğitiminden daha çok bir temel sağlamaya odaklanın.
  4. Yeterince geniş bir programlama aralığını kapsar: sunucu, masaüstü, gömülü, UNIX, Windows.
  5. Bunu bir otlak kursu olarak kullanırlar. Her ana çalışma alanında en az bir çalışma alanı vardır.

1

Daha önce Pascal vardı, daha önce Pascal Basic'te benzer bir şey vardı. İlginç kısım - sırada ne var? Belki hiçbir şey. "Neden c ++" hakkında bir fikrim var. Çünkü bu zor ama aynı derecede lisp için değil. Hayır, C ++ 'ın sistem programlaması için iyi bir dil olduğunu gerçekten anlıyorum, C ++' da kodlanmış çok sayıda proje alanı olduğunu ve öğrencilerin onunla her şeyi yaratabilmesi için tonlarca kütüphane olduğunu biliyorum. Ancak öğrencilerden ve mantık oluşturma ve sistemi anlama olasılıklarından bahsediyoruz. Basit mantıklar oluşturamazsanız ve sistemin nasıl çalıştığını anlayamazsanız iyi bir C ++ kodlayıcısı olamazsınız ve bence bu ana neden. Ve evet, başka bir basit neden istikrarlı bir kariyer başlangıcı.

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.