Soru C ++ ilk dil olarak [kapalı]


Ben yaklaşık 4 ay boyunca kendi kendime C ++ öğreniyorum. Bundan zevk alıyorum ve bence gayet iyiyim. Ancak, bir cevap benim bir sorum Beni düşmek için ayarlayabilirim diye düşündüm.

Peki, insanlar burada öğrenmek için ilk dil olarak C ++ hakkında ne düşünüyor? Ve şimdi sadece iyi bir başlangıç ​​yaptığımı sürdürmeye değer mi?


31


Menşei




Cevaplar:


İnsanların neden "dil" ile "kütüphane" karıştırdığını anlamıyorum. (Bağlantılı cevaba bakarak.) Peki ya C ++ 'yerli' bir ses kavramına sahip değilse? Orada C ++ ile kolayca kullanabileceğiniz ve muhtemelen herhangi bir "tüm yakalama" "standart kütüphane" ses işleme API'sinden daha özel ihtiyaçlarınız için daha uygun olan birçok kütüphane var.

</ Rant>

C ++ zor bir dildir. Öğrenmesi daha kolay olan diğerleri var. Bunu asla tartışmam.

Ama C ++ kolayca en çok güçlü etrafında diller. Son derece verimli ve son derece zarif olabilir. bir kerede. Tabii ki, hiçbir şey, her şeyden iyi bir karmaşa çıkarmanızı engeller.

C ++ 'yı ilk programlama dili olarak öneririm? Aslında daha iyisini bilmiyorum. Diğerleri sizi hata yapmaktan koruyabilir ve ilk başarıyı (örneğin ilk GUI uygulamanızı) kolaylaştırır. Fakat eğer C ++ temelini inşa ederseniz, her zaman güvenli bir zeminde olacaksınız. Aslında hiç bir zaman başka bir dil seçmemeliydin. Ama eğer istersen, gülünç derecede kolay bulabilirsin.

Deneyimli bir C ++ kodlayıcısı, örn. Java, birkaç hafta içinde tam hızda. Tam tersi? Çok, çok daha zor.


Yıllar sonra, bu cevabı değiştirmem gerektiğini düşündüm. Çocuklarım bana programlamayı öğretmemi istediğinden beri yapmaya başladım. Kendimi buldum aslında değil C ++ ile başlayarak ... onlara gösterdim BF ilk. Kesinlikle hiçbir zaman, bellek ve işaretçiler hakkında anladılar. Sonra C ++ ile devam ettim ve kendimizi şu ana kadar çok fazla zevk alıyoruz.


Yine de birkaç yıl sonra CppCon 2015'ten Kate Gregory'nin bu mükemmel konferansı bu cevaba eklemem gerektiğini hissettim:

Öğretmeyi Durdur.


72



Çok katılıyorum. C ++ 'yı öğrendikten sonra, diğer tüm diller karşılaştırılarak kolaydır. En azından Lisp, Haskell veya Prolog gibi diğer paradigmalara girene kadar. - Kibbee
+1. En iyi ilk programlama dili olduğunu söylediğin yerden başka noktalara katılıyorum. Hızlı ilerleme (örneğin, ilk GUI uygulaması) yapmak öğrenciler için önemlidir ve dil detaylarına göre aşırı programlanmadan programlama yapmayı tercih edebilirler. - CiscoIPPhone
Şahsen, hiç kimse, bir eylemci eylemleri kavramını anlamadan bir GUI uygulamasını kodlamalıdır. Ve bu, güvenli bir OOP bilgisi olmadan yapmak zor ve yapmak imkansız iyi deneyimsiz çok. İnsanları yüzmeden önce neden derin suya atıyorlar? - DevSolar
“Güç” dediğimde ne yapabileceğini düşünüyorum ve C # içinde yapılabilecek bir şey olarak görmek C ++ 'da yapılabilir, fakat başka bir şekilde değil, C ++ daha güçlü bir dil olduğunu söyleyebilirim. Bu hala C # 'nin tadını çıkardığımı söyledi. - GManNickG
Dil ve kütüphane arasındaki ayrım önemli olmakla birlikte, kolay erişilebilir 3. parti kütüphaneleri (Perl / CPAN, Python / PyPI) veya büyük standart kütüphane (Java, C #) içeren bir dilin faydaları vardır ve C ++, üçüncü parti kütüphanelerinde tutarlılıktan yoksundur. Hemen hemen hepsi birbirleriyle senkronize edilmişlerdir. Bu nedenle, C ++ gibi dillerde büyük tekerlek icat eden çerçeveler görüyorsunuz. (Ve bu, C ++ 'yu diğer birçok dile tercih eden birinden geliyor ama ben de Python'u seviyorum.)


Bu şekilde söyleyeyim:

Sun Java Sertifikasyonunu% 94 ile aldım ve geçtim Java’yı hiç çizmeden (bu dokuz yıl önceydi). Bunu yapabildim, çünkü C ++ yi çok iyi biliyordum.

İlk profesyonel işimde, bir testçi olarak işe alındım. İkinci günümde, iki haftada bir işe yaramaya yetecek kadar PowerBuilder öğrendiysem test yerine program yapabileceğimi söylediler. C ++'yi çok iyi bildiğim için PowerBuilder kolaydı.

C ++ zorama eğer iyi öğrenirseniz, Stroustrup'un C ++ Programlama Dili, egzersizleri de yap, oku C ++ Tasarım ve EvrimiC ++ Faq ve Meyers kitaplarını ve Herb Sutter'in kitaplarını okuyun, comp.lang.c ++ dosyasını okuyun, Coplien's okuyun Gelişmiş C ++ Programlama Stilleri ve Deyimler Kodlamak istediğiniz OO dili ne olursa olsun - iyi öğrenirseniz, diğer tüm OO dili kolaydır.

Öğrenme C ++ kod öğrenmek için mükemmel bir hazırlıktır. (Ve ayrıca adil bir C programcısı olacaksın, ama iyi bir C programcısı olmak için K & R okuyacaksın.)

Ah. Ve C ++ programlamak gerçekten eğlenceli. çok Java'dan daha az ayrıntılı ve çok daha esnek. Sen gerçekten sorumlusun, IDE ya da dil değil. Kendi ayağını çekebilirsin, ama bunu yapmaktan sorumlu olacaksın. Ve Alexandrescu'nın kitabını bildiğin zaman oku. Şablonlar, hayret ve dumbfound ve sizi memnun edecek.

C ++ eğlence. "Merakla Yinelenen Şablon Kalıbı" nı okuyun: şuna benziyor

template< class  T> struct base {};

struct derived: base< derived > {};

Evet, haklısın: Bu, türetilmiş sınıfta templated edilmiş bir tabandan türeyen bir sınıf. Şimdi bu sadece belirsiz ve aptalca geliyor, ama bunun için birçok iyi kullanım var, ve sadece diğer gün kafamı yendim bunu Java'da yapamazsın (Java, jenerikler için tip silme, şablonlar kullanmadığı için), fakat eğer kullanabilseydim, çok fazla sayıda derste tekrarlanan birçok kod kaydedebilirdim.

C ++ 'da çok daha fazlası var ve kendinizi Java ya da .Net ile sınırlandırırsanız, onu asla keşfedemezsiniz.


37



Muhteşem gush için +1 :) Ben C ++ öğrenme sevdi ve 5 yıl ya da öylesine onunla çalışırken onun yönlerini ustalık için yeterince şanslıydı. Artık daha fazla kullanmama rağmen hala benim "favori" dilim. - Binary Worrier
"Eğer iyi öğrenirseniz, diğer her OO dili kolaydır." Naçizane size katılmıyorum. Demek istediğin "her C ++ tarzı OO dili kolay" dır. - Svante
Eğlence ve şablonlar için +1! - ilya n.
There's so much more in C++, and if you limit yourself to Java or .Net, you'll never discover it. kesinlikle. Sadece bu ifade için +1. - v.oddou


C ++, herkes tarafından belirtildiği gibi öğrenmek için kolay bir dil değildir, ancak başlamak için iyi bir yer yapmasının birkaç nedeni vardır:

  • Bu, belirli bir programlama paradigmasına (örneğin Java ve OOP) bağlanmaz, böylece farklı teknikleri kolayca deneyebilirsiniz
  • C ++ çanlar ve ıslıklara sahip değildir, böylece nasıl inşa edildiğini bilmek istiyorsanız yapı taşlarını yapmaya konsantre olabilirsiniz.
  • Bir dil olmadığı ve bir platform olmadığı için, eldeki göreve ya da seçtiğiniz programlama stiline en uygun kütüphaneyi ya da kütüphaneleri seçebilirsiniz (ör. Poco Javaesk hissi için ACE cesur erken tarzı OO, vb.)
  • Genel amaçlı bir programlama dili, bir platform değil (bunu iki kere söylemek zorundaydım)

Hile ilk defa dikkatli ve doğru bir şekilde öğreniyor. Biliyorum ki, diğer birçokları gibi, onu gerçekten anlamadan önce "C + nesneleri" olarak öğrenerek onunla mücadele ettim. Öğrenmesi zor bir dildir. C ++ yazmak için nasıl ve nasıl yazılmayacağınız konusunda "çok tavsiye edilen" kitapların çoğunu okumanın yanı sıra kendinize bir de C ++ akıl hocası bulmanızı tavsiye ederim. Ön taraftaki kötü alışkanlıkları öğrenmekten kaçının.

Belirli bir sırayla bir başlangıç ​​okuma listesi için:

  • Koenig ve Moo tarafından "Hızlandırılmış C ++"
  • Scott Meyers tarafından "Etkin C ++ / STL"
  • Bertrand Meyer tarafından "Nesneye Yönelik Yazılım Yapımı"
  • Peter van der Linden tarafından "Uzman C Programlama"
  • Musser, Derge ve Saini'nin "STL Eğitimi ve Referans Rehberi"
  • Josuttis tarafından "C ++ Standart Kütüphane"

14



Stroustrup'un "Programlama: C ++ kullanarak Prensipler ve Uygulama" da iyidir. Ben van der Linden kitabını sorguluyorum: programlama C'ye sahip olmak için mükemmel bir kitap olsa da, C ++ için yararlı olduğunu sanmıyorum. - David Thornley
Aslında van der Linden'in kitabının C ++ programcıları için çok yararlı olduğunu düşünüyorum. İşaretçilerin ve bellek yönetiminin gerçekten nasıl çalıştığıyla ilgili en iyi açıklamaları içerir. Temel olarak, C + + 'nın gizlenmesi gereken ama asla yapamayacağınız tüm cesur şeyleri içerir;) - D.Shawley


C ++ "C artı bazı yeni şeyler" yerine "modern C ++" öğrenirseniz daha fazla ulaşılabilir olacaktır. Örneğin, kullanın std::string, std::vector<>, ve unique_ptr<> / shared_ptr<> bunun yerine C stili dizeleri, diziler ve işaretçiler.

Zaten belirtilen Hızlandırılmış C ++ tarafından Koenig ve Moo tam olarak bunu yapan bir kitap.


11





Burada c ++ için bir sürü destek var, ama katılmam gerek. Her dilin artıları ve eksileri vardır (bazıları elbette diğerlerinden daha iyi bir dengeye sahiptir).

İlk dil için söylendiğine göre, çoğu insanın öğreneceğine inanıyorum program nasıl daha etkili bir şekilde a) bir düzenleme-derleme-çalışma döngüsüne sahip değildir (ki programcı b olarak sizin için doğal olarak daha yavaştır) çöp toplamaya sahiptir c) iyi çalışma zamanı içgözlemine sahiptir. En iyi, etkileşimli bir değerlendirici varsa, bununla uğraşmak.

Geliştirme (çalışma zamanı olmasa bile) bu tür dillerde neredeyse değişmez bir şekilde daha hızlıdır, sizi daha fazla hareket ettirecek daha az şey vardır ve ne zaman yanlış gittiğini anlamak için daha iyi araçlar vardır.

Demek ki, c ++ gibi bir dilde bellek yönetiminin vagalılarını öğrenmek demek, yapmaya değecek bir şey değil, vb., Sadece gerçekten başlamak istediğiniz yer değil.

C ++ ile ilgili bir diğer konu, tüm pratikliği açısından, başlangıç ​​seviyesi olarak en çok kaçınılan sorunlara yol açabilecek uyumsuz parçalara sahip olması gerçeğinin eklenmesidir.

Düzenlenen: John D, bir GC'd dilinde ilk öğrenen bazı kişilerin (hiç bir şekilde "betikleme" dilleriyle sınırlı değildir) bir sonraki ifadeyi daha sonra asla öğrenemeyeceği yönündeki bir yorumu ortaya koyar. Bu olsa kırmızı bir ringa balığı. Bazı insanlar her türlü nedenden ötürü her türlü şeyi öğrenemez. Temelleri öğrendiğinizde, işaretçiler için endişelenmenin dikkati dağıttığını düşünüyorum. Bir noktada, manuel bellek yönetimi hakkında bilgi edinmeniz gerekebilir, ancak önce bunu yapmak temel olarak önemli değildir. Ya da daha doğru olarak, bundan kaçınarak kazanılan kazançlar, maliyetlerden daha önemlidir.

Açıklığa kavuşmama izin verin, c ++ 'nun bir çöplükten yoksun olduğu için ilk dil için daha düşük bir seçim olduğunu söylemiyorum. Bu, programlamanın temellerini öğrenmenin yolu olan birçok konudan sadece bir tanesi. Asıl sorun, büyük bir karmaşık dil olmasıdır, her yerde gariplik ve hatta iç tutarsızlıklar (örneğin, işaretçiler ve istisnalar birlikte iyi oynamamaktadır). Tabi ki tüm bunlar doğru bir şekilde yönetilebilir ve başımın belaya girmesini önlemek için iyi uygulamaları öğrenebilirsiniz.

Ancak, bunların hiçbiri ilk başta gerçek bir neofile çok anlam ifade etmeyecek. Öyleyse, öğrenmenin bir kısmı "bu şekilde değil, bu şekilde yap" olacak. "niye ya?" “çünkü ben öyle dedim --- detayları anlayamayacaksın”. Pek hayırlı bir başlangıç.

Büyüklükler, bir ilk dili öğrenmek için kazanımlar sağlar, ancak muhtemelen bir düzenleme-derleme-çalışma döngüsünden (herhangi bir türden) kaçınmaktan ve iyi bir gözleme sahip olmaktan kaynaklanır.


10



Katılmıyorum. Örneğin, bir GC-ed dilinde programlamayı öğrendiğini bilen birçok programcı C ++ 'ya gelir ve hiçbir zaman gerçekten "almaz" işaretçilerine ve bu göstergelerin programlamanın gerçekten bir parçası olmadığına ve onları asla bir şey olarak görmezden geldiğine inanmaya başlar anlamaya çalışmak. Script kiddies sonsuza kadar. - John Dibling
Katılmaya başladım, ama çöp toplama hakkında beni kaybettin. Yeni başlayanlar için, ilk önce yığın tahsisi asla gelmemelidir. Eğer yaparsa, olabildiğince açık olmak isterdim, bu yüzden bunu yaptıklarında düşünmek zorundalar. - T.E.D.
Ted, sanırım aynı sayfadayız. İlk başta düşünmek zorunda değilsin. - simon
Peki, benim elde ettiğim şey, C ++ 'nın probleminin tüm yığın tahsisleri için GC eksikliğinden ibaret olmamasıdır, ilk etapta bunlardan birçoğunu yapmak zorunda olmanızdır. Örneğin, neden bir işlev çağrısının sonuçlarıyla bildirdiğim bir diziyi boyutlandıramıyorsunuz? İşaretçiler neden bu kadar yaygın geçiyor? - T.E.D.
@ted. Doğru, bu benim için bir noktaydı, bir çok sorundan sadece bir tanesi engelleyici bir engel değil. Belki de seni yanlış anladım ve gerçekten de yeni doğanlar için GC'yi sevmediğini söylüyorsun, ama aynı zamanda elden çevirmeyi sevmediğini de söylüyorsun. Bu durumda katılmıyorum ama hafifçe. - simon


İyi bir öğretmeniniz varsa, C ++ ilk dil olarak tamam olabilir. Ama ilk defa ölçeklenecek oldukça yüksek bir duvar. Ama bu duvarı bir kez ölçekledikten sonra, diğer benzer diller çok kolay geliyor.

Evet, devam et.


5





herhangi bir dil iyi bir ilk dildir (sebep olarak, lolcode gibi bir şey değil)

Nasıl çalıştığının askıya alınca, diğer dillere dalmak daha kolay hale gelir.


5



Bir parça ile aynı fikirde olmasam bile +1. lolcode kayalar! - Robin Day
evet kayalar, ama iyi bir ilk dil değil;) - z -
CAN, #include'den çok daha mantıklı! - Skilldrick
Evet, ama aritmetik operatörler garip. - David Thornley


Bence C ++, ilk zamanlayıcı için geliştirilecek en kullanıcı dostu bir dil olmayabilir, ama aynı zamanda elinizi tutmayacak ve sizi çok fazla kötü alışkanlığa götürmeyecek (Ben de öyle demedim) çok fazla).

C ++, üniversitemizin programlama kurslarının temel aldığı giriş diliydi ve bizim seçtiğimiz dillere ayrılmadan önce tüm temelleri ve veri yapıları ve algoritmalarını öğrendiğimiz yer.


4





Benim için C ++ öğrenmeyi öğrenmek çoğunlukla DEĞİL kendini ayağından vurmak için. C ++ ile olduğu gibi ağrılı bir egzersiz olabilir, her zaman toynakta işaret eden silahı çıkaracak bir başka kenar durumu vardır.

Yukarı atış, egzersizi bitirmeyi başarırsanız, bunun için daha iyi bir geliştirici olacaksınız ve gelecekteki ayak vurma fırsatlarını gerçekleşmeden önce, hangi dilde kullandığınıza göre belirtebileceksiniz.

Ayrıca, bazı üçüncü bölüm kütüphanesi ayağa kalktığında, aylar boyunca tekrar tekrar ayak basmadıkları için neyin ters gittiğini anlamak için daha iyi konumlandırılacaksınız.

C ++ ile sopa söylerdim, asla bir üretim israfı yazmasanız bile, zaman kaybı olmaz.

Bu yardımcı olur umarım :)

BW


4



Her seviyede C ++ geliştiricileri için Scott Myers "Etkili C ++" kitaplarını tavsiye ederim - Binary Worrier