C ++ ilk dil olarak uygun mu? [kapalı]


26

Yerel bir kolej, daha önce programlama deneyimi olmayan birinci sınıf üniversite öğrencilerine (16 yaşında) C ++ öğretiyor.

İlk programlama dili olarak C ++ uygun mu?


56
Herhangi bir dil ilk dil olabilir. Gerçekten önemli değil.
Adam Lear


19
@ Anna Lear: Elbette, herhangi bir dil bir ilk dil olabilir, ancak bu C ++ 'ı iyi bir ilk dil olarak nitelendirmez. Cevabınız gerçek bir Cevap olsaydı, yararsız olarak aşağı oy verirdim.
Ed James,

6
@Doug: Ben C ++ 'ı geçim için programlıyorum ... amacın ne?
Matthieu M.

9
@Dough - Günümüzde bilgisayar projelerinin% 70'i gömülü sistemler ve mikro cihazlar için yazılım yazmayı içermektedir. Tahmin et bu projeler için hangi dilleri kullanıyorsunuz? Bil bakalım giriş seviyesi pozisyonları için en iyi kim kullanıyor? Kesinlikle Java veya .NET bir numara midilli değil. Kulağa sert geliyor, ancak okullar, yalnızca programlama iş piyasasının% 30'una eğitim vererek, tüm CS mezunlarına çok büyük zarar verdiler. Uygulama sektörü için fazla sayıda programcıya sahibiz (% 30) ve sistem sektöründe (% 70) bir sıkıntımız var. Bu numaralar hiçbir yere gitmiyor. Gelecekteki kariyer fırsatları? Evet, doğru.
luis.espinal

Yanıtlar:


61

Kesinlikle hayır .

Öğrenciler için düşündüğünüz herhangi bir amaç için, başka bir dil veya bir dil dizisi daha hızlı ve daha iyi olacaktır. Örnekler.

"Öğrencilerin düşük seviye kavramları anlamaları gerekir."

"Düşük seviyeli" kodlama, nesnelerin alınmasını new, geri beslenmesini deleteve bazen de olmaması gereken bir yere işaret eden bir işaretçiye sahip olmasından ibaret değildir. İşlevler, sınıflar ve şablonlar düşük seviye değildir. RAII, 12 yolları kullanmak const, std::ostream::operator<<, protectedve newdüşük seviye kavramlar değildir. Bu şeylerin düşük düzeyde çıkarımları var ve bunları aylarca veya gelecek bir sınıfa kadar atlıyorsunuz ve bunun yerine C ++ anlambiliminin dağlarını öğretiyorsunuz.

Ben montajcı iyi bir çevre ve MIPS veya MMIX gibi öğretim materyali ile öneririm. Aceleniz varsa, en azından assembler çıkışına bakmak için C ile şekillerini öğretin. Bu size C ++ 'ın yaptığı tüm düşük seviye anlayışını ve ardından bazılarını daha hızlı verecektir.

"Öğrencilerin nesne yönelimini anlaması gerekir."

C ++ 'a yerleşik nesne yönelimi, OO kavramlarını veya neredeyse tüm diğer üst seviye konseptlerini öğretmek için aşırı karmaşıktır. Bunun için olası nedenlerin güzel ve uzun bir listesi için C ++ SSS bölümüne bakın . Yeni programlayıcılarla çok, çok uzun zaman alacak olan tüm bu şeylere de çarpmanız gerekiyor; ya da yeni programlayıcıları karanlıkta bırakarak, C ++ 'ı tam olarak bilmeden, çok fazla atlamalısınız.

C ++ 'ı öğretmeniz gerekiyorsa, önce nesnelerle (Python, Ruby, Squeak, Common Lisp, Raket) daha basit ve üst düzeyde bir dil öğrenmenizi öneririm. Bunun ötesinde, işlevsel bir dili ziyaret ederek polimorfizmi OO'dan ayrı bir kavram olarak öğrenin.

"Öğrencilerin şablonları ve şablon metaprogramlamasını anlamaları gerekir."

Kimse gerçekten sormuyor, ama keşke isterlerse. C ++ 'nın hoş şablonları var ve STL harika, ancak ilk önce C ++' ı öğretecek kadar yüksek öncelikli olmamalılar. OCaml veya Haskell tipi sistemin öğretilmesi ve daha sonra bu kavramların güçlendirilmesi zaten daha hızlı olabilir.

"Öğrencilerin problem çözmeyi öğrenmesi gerekir."

Evet, bunu herhangi bir dilde elde edersiniz ve eğer C ++ 'dan başka bir dilde ise daha fazlasını elde edersiniz, çünkü daha az bagaj var. Yine, öğrencilerin problem çözme becerileri yerine öğrenecekleri şeylerin bir listesi için C ++ SSS bölümüne bakın .

"Yukarıdakilerin tümü ve sadece bir dil kullanmamız gerekiyor." veya "İşverenler istiyor." veya "C tarzı bir dile ihtiyacımız var." veya...

Birden fazla dil öğretin.

Sadece bir dili öğreterek veya öğrenerek zamandan veya enerjiden tasarruf etmeniz fikri saçmadır. Herhangi bir dili öğrenmenin , X'in her bir dilde bir veya bir sayı olduğu tam olarak X adam ayını ( İPUCU! İPUCU! ) Alır . Bu, tüm bu 'gereklilikleri' ve 'çöp' testini atlayarak zamandan ve paradan tasarruf edebileceğiniz fikrine neredeyse aynı.

Birden fazla sözdizimine gelince, diğer dillere karşı çılgınca önyargılı hale getirerek her dilde C sözdizimini beklemelerini öğretirseniz, öğrencilere tehlikeli bir şekilde sakat kalırsınız.

Hemen hemen her yol C ++ ile başlamaktan daha hızlı ve daha iyidir. Basit bir üst seviye dil ve ardından C ++ öğrenmek daha hızlı olacaktır. Assembler ve ardından C ++ öğrenme daha hızlı olurdu. C ++ 'dan başka bir şey öğrencileri oraya daha hızlı götürecek ve önyüklemenin daha fazlasını bileceklerdir Sadece önce C ++ 'ı öğretme.


4
Mükemmel cevap! Gerçekten de, birçok C ++ özelliği düşük seviye programlama ile ilgili değildir.
Marco Mustapic

7
+1, mükemmel cevap. Bazen C ++ 'nın kaprislerinin yanlışlıkla "düşük seviye" ile eşdeğer olduğu doğrudur. C ++ SSS’ine bağlantı verdiniz, ancak aynı zamanda insanların C ++ FQA’ya (veya “Sıkça Sorulan Cevaplar”: - P)
Andres F.

2
Vay. Bu bana Java IAQ'yu hatırlatıyor ...
Jesse Millikan

Kesinlikle katılmak. Malbolge bile yeni başlayanlar için C ++ 'dan daha iyi olurdu.
sağa

2
Tek rezervasyonum - çoğunlukla kütüphaneleri geliştiren insanlarla ilgili olan detaylara girmeden çok şey öğretebilirsiniz. Sadece C ++ 'ı temel yaptığınızı açıkça belirttiğiniz sürece ... ama sonra yine, yine de kimseye ne öğrettiniz?
Steve314

54

Hayır, C ++ deneyimli C ++ geliştiricileri için bile zor bir dildir. En basit algoritmalar için bile, birçok dil inceliklerini açıklamanız gerekir. Bir Hello World örneği düşünün:

#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
}

Bu #includekomut ne ? Ne var std::cout. Neden ::? Nedir <<? Ohhh, aşırı yüklenmiş bir operatör! Aşırı yüklenmiş bir operatör nedir? Sooo, çünkü intsbiraz değişiyor, ama her ne std::coutise, konsola bir şeyler çıkarıyor. Ohhh, std::coutbir akarsu ve akarsuların <<ve >>operatörleri aşırı yüklenmiş.

Python'da da aynı örneği görelim:

print("Hello World!")

İşte bu, hadi bazı algoritmaları kodlayalım.


15
Python yedinci sınıf öğrencisi için uygun olacaktır. Bir üniversite öğrencisi daha fazlasını kavrayabilir.
Gulshan

13
Tabii ama biz ilk dilden bahsediyoruz. C ++ 'ın diğer dillere kıyasla öğrenmesi ve uzmanlaşması zor olduğu biliniyor. Neden programlamayı öğretmek için kullanıyorsun? Bir öğrenci, programlama temellerini bildiği zaman C ++ 'ı öğrenebilir.
Marco Mustapic

8
<< :) 'nin argümanına bağımlı araştırmasından bile bahsetmediniz
MetricSystem

6
Bir dile başlamak için kesinlikle her şeyi bilmenize gerek yok. koç << her neyse; "sadece işe yarar", daha sonra operatörün aşırı yüklenmesini vb. örtünceye kadar nitrit kumlu detaylarına girmenize gerek yoktur.
Colen

6
Python'u C ++ 'dan haftanın herhangi bir günü tanıtım dili olarak alırdım.
jprete

21

Muhtemelen iyi bir ilk dil değildir: karmaşık sözdizimi, çok sayıda kural, eski dil, hataya açık bellek yönetimi. Öğrencilerinize Smalltalk gibi daha fazla bir OO veya Python gibi programlamak için daha güzel bir şey veya Haskell gibi işlevsel bir şey öğretmek daha iyidir.

Daha iyi dilleri öğrendikten sonra, C ++ 'ı daha sonraki yaşamlarında öğrenebilirler (eğer yardım edemezlerse).


5
İlk dil olarak Haskell ilginç bir deney olurdu.
Larry Coleman

@Larry, Cambridge University'nin CS kursu SML'yi ilk dil olarak öğretiyor.
Peter Taylor

1
İşlevsel programlama beyninizi çeviriyor - MIT'nin daha erken Scheme ile başladığını biliyorum, ancak okulda iki yıl süren hibrit bir süreç / OO stiline kadar işlevsel programlama üzerine başlamadığım için memnunum.
sadece

11
@justkt: Tüm diller beynini çeviriyor. Sadece nasıl bükülmesini istediğinle ilgili bir konu.
David Thornley

+1, ancak C ++ dışındaki dilleri mutlaka "daha iyi" olarak etiketlemem.
greyfade

18

Kısa cevap: Evet!

Söyleyebilirm herhangi bir dil, uygun bir başlangıç ama özellikle C ++ (veya equivivalent) 'dir. Bu günlerde C # ve Java, kullanımda ve programlamada ana dillerdir, bunlarla hızlı bir şekilde API ve IDE'lere dayanmayı öğrenirsiniz, ancak C ++ ile baştan sona programlama, performans optimizasyonu, vb.

Programlama, döngü ve sıralamanın temellerini öğrenmek, sadece gizli bir dil kullanmadan önce .Sort ();


11
Döngü ve sıralama, evet. Bunu herhangi bir dilde yapabilirsiniz. Fakat neden onlardan kaçınabileceğiniz zaman işaretçilerle ve tuhaf sözdizimiyle çalışmaya başlıyorsunuz? Tüm bunları daha sonra, daha fazla programlama deneyiminiz olduğunda öğrenebilirsiniz.
Marco Mustapic

4
@Marco: Stroustrup'un "Programlama: C ++ Kullanarak Prensipler ve Uygulama" adlı tanıtım kitabı kitabın ortasındaki göstergeleri tanıtmaktadır. İşaretçiyi tanıtmadan C ++ ile birçok şey yapabilirsiniz.
David Thornley

4
“Temelleri öğrenmek… daha önce hiç kötü bir fikir………” bu iddiayı destekleyecek herhangi bir araştırmanız var mı? Birçok akıllı insanın “aşağıdan yukarıya” öğretmenin tek doğru yol olduğunu ve ortak bir bilgi olduğunu bildiğini biliyorum; ancak bu çok tartışmalı bir nokta ve bildiğim tek (kuşkusuz çok sınırlı) didaktik araştırma.
Konrad Rudolph

1
@David: Sorun şu ki, işaretçiler olmadan "C ++ 'da çok fazla şey yapmak" daha da kötü. İşaretçiler olmadan, tüm nesneleriniz, şimdiye kadarki en kötü programlama fikirlerinden biri olan yığında ilan edilir. Değer türleri ve kalıtım / polimorfizm sadece karışmaz ve bunları karıştırmaya çalışmak, daha iyi tasarlanmış dillerde bulunmayan tüm hata kategorilerine yol açar.
Mason Wheeler

9
Oh tanrım hayır! Neden C ++ 'ın gereksiz deyimleri üzerine sınırlı miktarda beyin çevrimi sağlasın? Amaç programlamadaki temel kavramları öğrenmek olduğunda neden bellek yönetimi gibi alakasız düşük seviyeli konulara odaklanmalı? Neden derin uca atlıyorsun?
Maglob

14

Aslında çok pratik bir sebepten dolayı ilk dil olarak iyi bir seçim olduğuna inanıyorum: C ++ 'ı öğrendikten sonra karşılaştığınız diğer diller öğrenmek bir esinti gibi görünecek.


10
Dijkstra'ya verilen tüm kredilerde, önceden C ++ 'a maruz kalan öğrencilere iyi programlama öğretmek pratik olarak imkansızdır; Potansiyel programcılar olarak, yenilenme umudunun ötesinde zihinsel olarak sakatlanırlar. ;)
Mason Wheeler

3
C ++ 'dan birçok kötü alışkanlığı öğrenmeleri gerekirdi. Başka bir örnek kullanmak için, assembler'ı bilmek sizi daha iyi bir Java programcısı yapar mı? Öyle olmadığını söyleyebilirim.
Andres F.

16
@ Andrés F .: Buna katılmıyorum. Assembler'ı bilmek, ne yazdığınıza bakılmaksızın sizi daha iyi bir programcı yapar, çünkü o zaman gerçekten neler olduğunu anlayabilirsiniz.
Mason Wheeler

2
@Andres: Çok fazla Java / C # programcısının başka dillere geldiğini ve her şeyi nesnelere sıkıştırdığını gördüm ... geniş deneyime sahip değiller.
Matthieu M.

3
@Andres F. - 12 yıldır Java'mı yaparken, gc-dostu uygulamaların nasıl programlanacağını bilmediğimden, kaynak tahsisi, RAII gibi konulara hiçbir şekilde maruz kalmadığı için emen Java programcıları payımla karşılaştım. Otomatik derleme desteği olmayan derlenmiş dilleri bilmek ve bilmek ve OO dışındaki paradigmalar (C, C ++, Ada veya Algol ailesindeki derlenmiş herhangi bir dil) ile ilgili bilmek Java'da verimli ve büyük sistemler yazmayı öğretir , C #, Python, siz adlandırın. Ayrıca, C ++ 'daki nesne modeli Java'ya hiç de benzemiyor.
luis.espinal,

10

15-16 yaşlarında kendime C ++ öğrettim.

Sihri başkalarına bırakmak ve kendi iç işleyişini kendiniz öğrenmek daha iyidir.


Açıkça söylemek gerekirse, giriş seviyesi C ++ sözdizimi ve anlambilimi anlayamazsanız, bilgisayarlarda bu kadar iyi olmazsınız. O kadar zor değil. "Sınıflı C" den kaçınmak için iyi bir neden yoktur.

Öğrencilerin şablon metaprogramlaması, polimorfik çağrıları çıkarmak ve çoklu kalıtım hiyerarşilerini çözmek için çalışmaya başlamalarını beklerseniz, bu ne tür bir dil için olursa olsun giriş seviyesi sınıfı için saçma olur.

Programlamanın karmaşıklığını öğrenciler için gizlemek isteme konusunda çok kötü bir eğilim var. Bu iyi bitmiyor (bkz. Spolsky'nin Java Okulları makalesi). Bu insanlar, kafasını dümdüz etmezlerse DailyWTF'ye çıkarlar. Soyutlamalar sızıntı yapar ve soyutlama kaçarsa (bu olmazsa), bununla başa çıkmaktan daha kötüdür. Ben ettik çalıştı giriş seviyesi C ++ öğrenciler için TA gibi. Her şey ya tamamen gizlenmeli ya da incelenmek üzere ışığa getirilmelidir. Büyü, öğrencinin düşmanıdır.

Makine kodunu derleyen bir başlangıç ​​dili önermek zorunda olsaydım, muhtemelen bir Pascal değişkeni en iyi yaklaşım olurdu. Hatırladığım kadarıyla C ailesinden daha düzenli ve yapılandırılmış bir yaklaşıma sahip.


1
@Ed: Pek değil. QBASIC'te If ve Goto'da ustalaşmıştım ve bununla ilgiliydi. İşaretçiler, diziler, fonksiyonlar, sınıflar vb. Hepsi C ++ geleceğimde. Özyineleme de anlaşılmazdı.
Paul Nathan

5
Bekle, kimse C ++ 'ı ilk önce C ++' ı anlamadan bir proje üzerinde C ++ kullanarak çalışmasını beklemiyor ! Bu gerçekten TheDailyWTF'e layık bir kod olacaktır. Ancak iddianın aksine, C ++ 'ı öğrenmek önemsiz değildir (ya da "sınıfları olan C" de değil). C ++, devasa, kıvrımlı ve bazen de duyusal olmayan sözdizimi ve gramer ile anahtar kelimelerin ve kuralların sonsuzluğuna sahiptir. Başlamak için korkunç bir dil. Bir öğretim dili olarak korkunç çünkü öğrencileri C ++ 'ın eksikliklerinin programlama dünyasında doğal ve kaçınılmaz olduğunu düşünmeye zorluyor.
Andres F. 19

1
Andr: Sahte bir ikilik üzerinde ısrar ediyorsun: "~ C ++ veya All C ++". Bu yanlış.
Paul Nathan

1
@ Paul: yeterince adil. Ancak şunu göz önünde bulundurun: basitleştirilmiş bir C ++ 'nın sözdizimi ve dilbilgisi bile tüm dilin tüm özelliklerini desteklemesi gerektiğinden anlaşılır. Bu yüzden, daha basit haliyle öğretseniz bile, çirkin bir dili kullanmaktan zaten ödün verdiniz. Sanırım sadece C ile bazı sözdizimsel şeker kodlamadığınızdan (diğer bir deyişle "C sınıfı"), çünkü bu durumda sade C!
Andres F.

2
@Andr: Pek değil. C ++, C89 üzerinden önemli sözdizimsel basitleştirme sunar. Dahası, giriş seviyesi amaçları için, düşünebildiğim bütün davalar için işler çok basit ...
Paul Nathan

8

'Hayır' derdim. Programlama öğrenmek istekliyim ve istekliyim, ve üniversitedeki intro yılıma girdim. C ++ 'ı başka bir dilmiş gibi öğreten bir öğretmenle (kendileri için anlam ifade eden kavramlar, dilin veya gerçek dünya uygulamasının kavramlarını gerektirmez) ve her hafta bize hemen atılan projelerle düştüm ve birlikte yaktım. sınıfın yarısı. Öğretildiğimi bile sindirebilir, deneyimleyebilir ve uygulayabilirsem, test olarak ikiye katlanan proje ödevleriyle mücadele ettim. 100'den daha 200 seviyeli bir kurs olduğunu iddia ediyorum.

Gerçekten elimden geleni yaptım. Sempati istemedim, bunun zor olacağını biliyordum ama öğretmen bana yardım etmedi. Sadece gitmiş olduğum gibi ders kitabını okumamı söyledi.

Ruby veya Python'un birisini programlama dünyasına sokmak için çok daha iyi bir dil olduğunu savunuyorum (ve bazıları katılmıyorum). Temiz, özlü, okunabilir, daha net sözdizimi.


8
Herhangi bir dil kötü öğretilirse kötü bir ilk dildir.
David Thornley

3
@David Thornley: doğru bir şekilde öğretildiği halde, bazı diller ilk dil olarak kötü bir seçimdir. Örneğin, Cobol.
Andres F.

Aynı fikirdeyim, daha iyi bir öğretmenle, başkalarının ilgisini çekmeye ve sadece ders malzemesini yıldırım hızıyla elde etmemeye özen gösteren birinin sonucunun farklı olabileceğini düşünüyorum. Sadece benim için çok hızlı yuvarlandı.
Kevin

@ Andrés F .: Buna katılmıyorum. Bununla birlikte, Kevin'in hesabı kötü bir öğretmenle ilgiliydi ve kötü bir öğretmen Python veya Scheme'i birinci dil olarak mahvedebilir (iki iyi adayım için iyi bir ikinci dil adayım).
David Thornley

2
@Chris: Cobol'da programladım ve sana acıyorum :)
Andres F.

8

Yok hayır.

Bir öğretim dili olarak, C ++ yalnızca en kötü öğretim dillerinden biri olan C'den marjinal olarak daha iyidir. Çok fazla karmaşıklık ortaya koymaktadır, dilin bazı kısımları sezgisel değildir ve genel olarak programlamadan ziyade C ++ hakkında daha fazla şey öğreniyorsunuz.

Bu, C ++ 'ın (veya C) kötü dil olduğunu veya öğrenmeye değer olmadığını söylemez; Python gibi daha iyi öğretim dilleri var.


1
C öğretmek için zor bir dil ama kesinlikle en kötüler arasında. COBOL ve Java pastayı C'den daha kötü, C'den çok daha kötü biri olarak alır. C ile ilgili iyi olan şey, öndeki metalle (montajcıya dalmadan) uğraşmanız gerektiğidir. İnsanlara C ile ana dil olarak başarılı bir şekilde öğretiliyor. Elbette Python veya Ruby (ya da çoklu paradigma olan ve en basit görevler için bile OO'yu ön plana çıkarmayan herhangi bir dil) gibi başka, daha zarif seçenekler var. C en kötü öğretilerden biri değil. seçimler, uzun süre değil.
luis.espinal

1
Marjinal olarak daha iyi? Nasıl anladın? C ++, C ile ilgili kötü olan her şeyi alır ve üzerine kurulur !
Mason Wheeler

1
@MasonWheeler: C ++ bir dürüst Tanrı sağladığı için Ağırlıklı olarak stringaşırı yükler operatörleri gibi o veri türünü +, =ve ==şeyler yapmak için bu öğrenciler daha fazla veya daha az beklemek, dize işleme ihtiyaçları C. yapılması gereken acıya kıyasla Dolayısıyla "marjinal" . Ben de bir öğretim dili olarak tavsiye etmem.
John Bode

7

İki temel ortaöğretim sonrası eğitim türü vardır: üniversite ve ticaret okulu. Aradaki fark, mezuniyetten sonra hazırlanmak istediklerinizdir. Otomotiv alanında, mekanik mi yoksa makine mühendisi mi olacağınızdır.

Bir mühendis olmak istiyorsanız C ++ ve bir tamircinin programlama eşdeğeri olmak istiyorsanız, kötü bir dil olduğu söylenen C ++ çok iyi bir ilk dildir.

C ++ 'daki bir intro sınıfı veri türleri, tanımlar, bildirimler, işaretçiler, bellek tahsisi ve benzeri konular hakkında çok fazla zaman harcayacak. Bunlar, faydalı bir şeyler yapabilmek için birkaç dönem inşa etmek istiyorsanız, ancak oraya vardığınızda, herhangi bir karmaşıklık derecesini idare etmek için bir temele sahip olduğunuzu bilmek istiyorsanız, bu harika bir temeldir.

Öte yandan, daha hızlı bir şekilde daha yararlı bir şey yapabilmek istiyorsanız, ancak etki alanı ve karmaşıklığın sınırlı olup olmadığını dikkate almıyorsanız, o zaman bütün bu zamanları önünüzdeki düşük seviyeli konseptlere harcamak israf olacaktır. Harika bir html form validator yazabilen, ancak bir aygıt sürücüsü tasarlamanın nasıl yapılacağına dair hiçbir ipucu olmayan çok sayıda programcı vardır.


5

Emin. Benim ilk dilim C idi, ama bu sadece sınıfımızı C ++ 'da rahatlatmak içindi. Üniversiteye girdiğimde Java kullanımı kolaylaştı. C ++ biraz daha dik bir öğrenme eğrisine sahip olabilir, ancak düzgün bir şekilde öğretilirse iyi olmalıdır.


4

Hayır, C ++ ilk dil olarak uygun değildir. Burada gösterildiği gibi, birçok profesyonel programcı bu görüşü paylaşmaktadır, ancak bu aynı zamanda profesyonel öğretmenlerin sahip olduğu bir görüşdür.

Carnegie Mellon Üniversitesi dekanından bir raporun , yeni başlayanlar için programlama dersine giriş dersi için C ++ kullanımı hakkında söylediklerinin:

C veya C ++ gibi standart diller bu kurs için uygun değildir çünkü karmaşıklıkları ve eksiklikleri hem gayri resmi hem de mekanize muhakeme tekniklerini engellemektedir.

CMU, zorunlu ve işlevsel olmak üzere iki giriş dersi sunmaktadır. Fonksiyonel programlama için SML seçildi. Zorunlu ders için neyin seçildiğini bilmiyorum, ancak rapor C alt kümesini kullanıyor.


2

Emin. Birinci sınıf öğrencilerinin kavraması daha kolay olabilecek başka diller de var. Bununla birlikte, bir öğretmenin yavaş yavaş C ++ 'da kavramları tanıtması için yollar vardır.


2

Kesinlikle C ++ ilk dil olabilir. Ama bunun ne kadar iyi öğretildiği hakkında.

Herkes, ilk dilin kavraması çok kolay olduğunu söylüyor. Ancak, demek istediğim, insanların çoğu lisans düzeyinde programlamaya başlar. Böylece, kavrayabilecekleri bir şeyleri öğretebilirsiniz. Ve C ++ ile daha düşük seviyeden daha yüksek seviyelere kadar programlama yapabilirsiniz.


Fakat neden daha yüksek bir programlama seviyesinde başlamıyorsunuz ? Sorunların çoğunu çözdüğümüz seviye budur (elbette belirli alana özgü sorunlar hariç). Sonra, metale yaklaşmaları gerekiyorsa, C ++, assembler vb
Andres F.

Katılıyorum, bunun ne kadar iyi öğretildiği hakkında!
Gary Willoughby

2

Kesinlikle değil.

Yolum olsaydı, akademik bir ortamda neredeyse tamamen kullanılmasına izin vermem. Zaten yapılmış olanlara aykırı olan nedenlerden dolayı değil, ancak çok fazla sayıda C ++ (veya varyasyon) olduğunu düşündüğünüz için hemen hemen her sorunun cevabıdır çünkü onu hemen hemen her durumda kullanabilirsiniz. Programlamanın tornavidasıdır.

Bazı insanlar iş için mükemmel bir araç olan vidaları sıkmak için kullanırlar. Diğerleri onu bir prybar gibi kullanırlar, ancak çoğu zaman etkilidirler, gerçekten ideal değildirler, çünkü babanızın size söyleyebilecekleri ne olursa olsun bir tornavida bir prybar değildir ve kötüye kullanım nedeniyle feci bir şekilde başarısız olabilir; Bir güç çubuğunun karşılaşabileceği tür güçler için Yine de diğerleri onu zımba ya da keski olarak kullanmaya çalışabilir ve tornavida tutamağı, zımba ya da keski dayanacak şekilde tasarlanan çarpıcı bir suistimal türü için tasarlanmadığından hemen hemen her zaman sorunla karşılaşırlar.

Kanımca, bir programcının işi genel olarak gerçek sorunları bir dereceye kadar gelişmiş verimlilik (kaynakların bir göreve bağlılığını azaltma), hız (bir görevi yerine getirme süresini azaltma), öngörülebilirliği (tekrarlanabilirliği arttırma) sağlayan otomasyona çevirmektir. Bir görevin) veya organizasyon (görevler arasındaki ilişkinin bilincini arttırmak).

Program yapan herkesin bilgisayarların düşük seviyeli işlemleri ve özellikle de cihaz IO ve bellek tahsisi hakkında bazı bilgilere sahip olması gerektiği anlaşılabilir olmakla birlikte, bu bilgiyi gerçekten önemli ölçüde kullanmak zorunda kalmamak, kesinlikle bunun için kaldırabiliriz. görevlerin büyük çoğunluğu. Sorunun daha geniş kapsamını anlamadan bunu yapmaya çalışmak, çabaya istenmeyen bir risk getirir.

İlk programlama dilinin C / C ++ veya yakın değişkenler olması saçmadır, çünkü C ve türevlerinin çözdüğü sorunların sınıfı, mevcut ve gelecekteki sorunların keyfi olarak büyük bir yüzdesi için kesinlikle uygun değildir (birinin kurtarması gereken yerler hariç) daha önce, bir tornavida programı) ve aslında daha küçük bir sorun kümesidir. Çoğu programcı, küçük mobil, birbirine bağlı cihazların prevelansını artırmasına rağmen, temel işletim sistemi özellikleri veya doğrudan cihaz arayüzleri geliştirmeye asla yaklaşmaz. Çoğu bizim gibi çalışacak ve yaşayacak. İki nesilden daha eski kodları düzeltmek ve iptal etmek, zaten yaş gösteren teknolojiyi uygulamak ya da katil (x + 1) uygulamasında teknoloji alanında çalışmak.

İlk dil için, LabView'ın hafif ama zengin özelliklere sahip zengin bir çeşidi olan Lego NXT'ye bakardım. Lego NXT, ticari girişimlerde yaygın olarak kullanılmamakla birlikte, programlamasının temel doğasını "sensör açısından zengin" bir şekilde sunacaktır. Javascript veya TCL / TK gibi biraz platform tarafsız bir komut dosyası dili ile eşleştirmek olabilir. Her ikisi de, çok temel fakat etkili işler yapmak için keşfetmeniz gerekenler açısından göreceli olarak düşük etki olacaktır, geri besleme döngüsü ve değişken derecelerde problem karmaşıklığı ortaya koyma ve çözme esnekliği açısından yüksek getiri. Ayrıca, öğrencilere, konserve ortamda sağlananları aşma olasılığını keşfetmeleri için iyi bir fırsat sağlar: karanlıkta, nemli ortamda çalışmayı denemek için bir şans,

Dört silindiri otomatik olarak kullanmayı öğrendikten sonra, gerçekten ilgileniyorlar ve motive olmuşlarsa, onları büyük v8 manuel hotrod'a yükseltin. Joel rock yıldızı programcılarını ayaklarının altındaki herhangi bir taşın altında bulamazsa, başka bir yere bakmaya devam etmek zorunda kalabilir ya da alet kutusunda neden bir sürü tornavidaya ihtiyaç duyduğunu yeniden düşünmesi gerekebilir.


1

C ++ 'da yeni başlayanların kolayca hata yapabileceği noktalardan bazıları şunlardır:

Test etmek istediğiniz yere ödev verme = vs ==

Eksik ;

Kıvrımlı braketlerin okunabilirliği - örneğin paskal başlangıç ​​sonu

Ve sonra karıştırmak için tüm dahil dosyaları, makrolar, hafıza yönetimi vs.

Bu nedenle, C ++ 'ın başlayacak en iyi dil olmadığını söyleyebilirim - ancak öğrendiğinizde çok yararlı olabileceğinden şüphe yok.

- Başkalarının da önerdiği gibi - hatalardan daha kolay kurtulmak için C #, Java veya hatta VB - ve sözdizimi vurgulaması, hata ayıklayıcı vb. İle iyi bir IDE kullanırdım.


1

Üniversitedeyken C ++ üniversitenin ilk yılında öğretilen temel dildi. Teori, bazı karmaşık programlama kavramlarını içermesiydi, dolayısıyla eğer ustalaşabiliyorsanız, diğer dilleri de seçebiliyordunuz. Bana iyi bir temel olarak hizmet etti.

Bunu söyledikten sonra, son senem boyunca, ana dili Java'ya çevirip değiştirmeyeceğinin belirlenmesi için bir komitede görev yaptım. Birkaç önde gelen işveren ve bölümün bazı mezunları ile konuştuktan sonra, Java'ya geçiş yapmanın öğrencilerin ilgisini çektiği tespit edildi. Konuştuğumuz işverenler, insanları işe almak için kullandıkları bir dilde deneyime sahip olmalarını istedi. Şimdi, 10 yıl sonra hala Java'yı ana dilleri olarak kullandıklarına inanıyorum.

Benzer bir kayda göre, birkaç yeni üniversite mezunu için gerçekten iyi C ++ becerilerine sahip olmak istiyoruz. Hiçbir şey bulamadık.


1

Evet derim. Ancak, herhangi bir dil gerçekten ilk dil olabilir. C ++ 'ın iyi olduğunu düşünüyorum çünkü karmaşık ve bazen zor olsa da, gerçekte neler yapabileceğinizi gösterir (daha az sınırlama). Ayrıca, diğer dillerde almaya hazır olmanıza yardımcı olacak bazı nesne yönelimli bir tasarıma sahiptir.

C ++ benim ilk dilimdi ve öyleydi. OOP düşüncesinde erkenden düşünmemi sağladı ve bunun için minnettarım. Ama sonunda, gerçekten yapmak istediklerinize geliyor. Dil o kadar önemli değil, çünkü bir dili iyi öğrenirseniz, başka bir dil seçmede sorun yaşamayacaksınız. Ne yapmak istiyorsun? Oyun yapmak? Cep telefonları için program? Her birinin kendine daha uygun araçları ve dilleri olacak.


1

C ++ uzman bir dildir, acemi değil ... önce C, Java ya da C # ya da Python değil ... neden? Çünkü C size hafızanıza ve tüm diller tarafından "gizlenmiş" işaretçiler gibi zor kavramlara rağmen her yerde bulunmadığını öğretir. Neden hafızanın bazen serbest bırakılacağını bile anlamayan ve çöp toplayıcısının tüm kodlama metinlerini temizleyen küçük bir cüce olmadığını düşünen pek çok genç geliştirici gördüm: XXXXGb olsa bile patlattı RAM ... Ama çöp toplayıcısının neden her şeyi sihirli bir şekilde temizlemediğini anlamıyorlar! Ve bu tür geliştiricilerin C ++ 'da (ve hatta Corba'da daha çılgınca) kodlandığını gördüm ve bu bir katliamdı !!!!!!!!!! Bu yüzden C kodlama öğrenmek ve sonra nesne kavramları ve çevresindeki tüm şeker için Python / Java / C # gidin. Sonra bunların hepsini anladığınızda, C ++ 'a gidersiniz ve C ++' ın gücünü hissedersiniz ancak tüm tehlikelerini ve neden kimse tarafından kullanılmaması gerektiğini keşfedersiniz;)


1

YOK HAYIR. C ++ 'nın sahip olduğu o kadar çok şey var ki bu bir aceminin anlamasını zorlaştırıyor. “Tüm programlama dilleri eşit” yanlışına girmeyin.

Basic veya Pascal ile başlayın ("onlar" kullanımdan kaldırıldı "dır.) Ve daha sonra C / C ++ / Java / C # / Perl ile. Ya da bir şansınız varsa, önce Logo ve Karel, sonra da Temel veya Pascal ile.

PD Bazı üniversitelerin ve kolejlerin bir Programlama Dili kullanım ve karşılaştırma sınıfı var, ve o sınıfa öğrettim ;-)


0

Programlamanın temellerini öğrenmek için herhangi bir dili seçebilirsiniz. C / C ++ dilinde öğrendim. ancak 7 yıl sonra, okulumda araçlar / diller değişti ve java / C # tercih edildi. diller sadece araçlardır. Daha iyi olmanız için gereken esaslar. MIT'de insanlar python kullanarak algoritmanın temellerini öğrenir. örneğin, Java web programlaması için iyi olabilir. ancak C / C ++, hizmetler ve yüksek performanslı uygulamalar için iyidir. Demek durumlarına bağlı.


0

"Uygun", "mümkün" anlamına gelirse, evet. Eğer "iyi" ise, kesinlikle hayır.

C ++ 'ı sevmek bile mümkün, ama bunun için birkaç dil öğrenip, on yıl boyunca deniz mavisi çürük kod tabanları ile çalışsanız, "gerçekten işe yaramaz, önemsiz yazılımlar üretme" konusunda deneyim kazanacaksınız - o zaman C ++ çekiciliğe sahip olacak.

Bakire olduğunuzda başlangıçta değil, küçük, basit (ama sözde ilginç ve eğlenceli) problemlerle uğraşın.

Python, ardından SICP (şema) veya benzeri bir şeyle başlardım. Belki ters veya interleaved. Onlarla gidip problemi çözebilirsin. Sistemle savaşmak yerine derin çamurda yürümek ve her türlü mantıksız tuhaflığı ve tarihsel nedenlerini öğrenmek.

Daha sonra, bir kağıt poşetten çıkma yolunuzu zaten programlayabildiğiniz zaman, çıplak metale geçin: montaj yollarını ve çeşitli mimarileri, ayrıca belki de Knuth's Mix'i öğrenin. Sadece hafızayı, kayıtları, ALU'yu, önbellekleri, kesintileri anlamak ve okuma seviyesine ulaşmak için kodları ezberlemek ya da çok gerçek şeyler yapmak istemiyorum.

Daha sonra bu temel ile C ++ dahil diğer dillere maruz kalabilirsiniz. Belki arada bir "dillerin tarihi ve evrimi" eklemek için iyi bir fikir.


0

Ortaokulda C ++ ile başladım. Bu kitabın bir kopyasını aldım: C ++ Deitel ve Deitel tarafından nasıl programlanır . Bu kitap oldukça iyi.

Açıkçası burada doğru ya da yanlış cevap yok, şahsen C ++ 'in kavranabileceğini gördüm. Her şeyi OOP'a kadar öğrendim (şimdi "nasıl" anlamamıştım ama şimdi nasıl elde edemediğimi anlamıyorum). Dene, cesaretini kırma. Sıkışırsanız, diğer dilleri inceleyin ve yenilerini öğrenmeye devam edin. Fikir aynı şeyi 2-3 farklı biçimde gördüğünüzde onları daha iyi anlayacağınızdır. Dediğim gibi, “bu” işaretçi kavramı kafamı karıştırdı ama Python'da (bunun yerine kendi adıyla) aynı şeyi gördüğümde hemen bana mantıklı geldi çünkü C ++ 'da anladım. Java'yı birçok kolej öğretebilirseniz öğrenirsiniz. Python veya yakut dilini öğrendiğinizden emin olun ve Clojure (ve diğer tüm lisplar), Haskell, Scala ... gibi daha fazla niş / yeni şey keşfedebilirsiniz.


-1

Hayır. Java veya C # ile başlıyorum. C ++ öğrenmek istiyorsanız, sınıf nedir, döngüler ve çatallar (eğer öyleyse ifadeler) vb. Temelleri öğrendikten sonra muhtemelen daha kolay olur. Nasıl bakacağınızı öğrenmek çok daha önemlidir. Bir problem veya matematiksel bir denklem ile programlayın ve tüm hafızanızı ya da her neyse serbest bıraktığınızı çözmekten daha fazlasını programlayın.


2
Python daha basitken neden Java veya C #?
David Thornley

-3

Bu sorunun arkasındaki varsayım "C ++ çok karmaşık görünüyor, 16 yaşındaki ilk (bilgisayar programlama) dili olarak seçebilecek mi?" Şeklinde görünüyor.

4 ya da 5 yaşımıza gelince, anadildeki yapıların çoğunu seçiyoruz, sadece başkalarının konuşmasını dinleyerek maruz kaldıkça. Harika cümleler oluşturmak bir yaşam süresi alır, orada soru yok.

C ++, çoğu insan dilden çok daha az karmaşık / karmaşık olduğundan emindir. 16 yaşındakiler onu alabildiğinden emin olmalı. Onunla harika kod yazacaklar mı? Beklemeli ve izlemeliyim.


4
İnsan dilleri karmaşık bir sözdizimine sahip olabilir, çünkü dilbilgisi ya da heceleme rotasını alırsanız, insanlar sizi hala anlayabilir. Bilgisayar dillerinde öyle değil.
dan04,

-3

Yeni başlayanlar önce 'programlama'yı takdir etmelidir. Bir başlangıç ​​sınıfını eğitmedeki deneyimimde ilk önce en çok anladıklarını takdir ettiler. Python ve C # gibi Python'u takdir ediyorlar çünkü Python çok yüksek seviyeli ve C # gibi semboller kullanmıyor, yani insan diline çok yakın bir anlam ifade ediyor. Bu yüzden yüksek seviyeden düşük seviyeye kadar programlama öğrenmenizi tavsiye ederim.

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.