Başlangıç ​​seviyesindeyim. Doğrudan C ++ 11 öğrenmeye başlayabilir miyim? ya da eski C ++ 'ı öğrenmek zorunda mıyım? [kapalı]


36

Ben bir acemiyim ve programlama konusunda çok az bilgim var.

Doğrudan C ++ 'ı yeni C ++ 11'i kapsayan kitaplardan doğrudan öğrenebilir miyim, yoksa en iyi eski C ++ kitaplarını mı okumalıyım?

C ++ 11'i öğrenmeden önce C ++ hakkında az bilgim olmalı mı? ya da doğrudan oradan başlayabilirim?

Doğrudan C ++ 11 ile başlarsam sorun çıkarır mı? Eğer değilse, o zaman C ++ 11 ile ilgili bazı kitaplar önerin.


18
Neden bu olumsuz noktalar? Bu sorulara daha önce cevap verildi mi? Yeni başlayanların sorgulamasına izin verilmiyor mu? Çapalar biri bu konuda araştırma yapar mı? Bence en iyi yollardan biri daha fazla deneyime sahip olanlara sormak. +1, yeni
doğanlara

12
@ Simo bana yazılım geliştirme hakkında kavramsal bir soru olarak geliyor: Nereden başlarım? Ve profesyonel bir programcı olmadığını nereden biliyorsunuz? ;)
adosaigua,

4
@ MSalters Kitaplar hakkında konuşmak; Hızlandırılmış C ++ , biraz basitleştirilmiş olsa da harika bir kitap. Barbara E. Moo müthiş bir yazar ve kitap üzerindeki etkisi kolayca not ediliyor. Ama Söz konusu kitap gerçekten olduğu "eski". Ancak tüm umutlar kaybolmadı - Lippman , Lajoie ve Barbara E. Moo tarafından C ++ Primer adlı yüksek dereceli bir kitap var , beşinci baskı bu ay yayınlandı (Ağustos 2012) ve ilk birkaç bölümden okudum. Kopyala, bu C ++ 11'i kapsayan mükemmel bir kitap. Moo'nun etkisi yine var. Teknik yazıya gelince o bir tanrıça.
zxcdw

2
@Simon Programmers — Stack Exchange is a site for professional programmers...Bu durumda, yeni başlayanlar için beni siteye yönlendirir misiniz? Ayrıca kodlayan bir acemi
çocuğum ve

2
SSS nedeniyle bu sorunun açıkça konu dışı olduğunu düşünüyorum (belki de ilk o zaman istenmedi). Standart kapatma nedenlerinden üçü - "Hangi dili (sürüm) bir sonraki dilde seçmeliyim", eğitim danışmanlığı ile ilgilidir ve boyut dışı kaynaklar ister.
Doktor Brown

Yanıtlar:


38

C ++ 11'i özellikle yeni başlayanlar için daha anlaşılır kılan, özellikle de bu özelliklerle diğer dillerde deneyim sahibi olan bir çok kullanışlılık geliştirmesi var. C ++ 11'deki diğer değişiklikler sadece ileri seviyedeki kullanıcıların ilgisini çekmektedir, bu nedenle, çoğunlukla farkları öğretmek için tasarlanan bir kitabı alırsanız bunalmazsınız. Alacağınız tüm kitapların C ++ 'a yeni başlayanlar için tasarlandığından emin olun.

Olduğu söyleniyor, muhtemelen eskiden bir yolunu öğrenmek zorunda kalacaksınız, çünkü orada birçok kod var ve programcı seçerse yeni C ++ 11 kodu bile işlerin eski yöntemini içerecek. C ++ 'ı bir yaşam için yazıyorum ve şirketim hala C ++ 11 uyumlu derleyicileri değerlendirme aşamasında bile kullanmıyor, üretimde bir tane bile kullanıyor.


im c ++ dördüncü basımdan öğrenme. başlamak için iyi bir kitap ??
Dhananjay

1
İyi yorumlar alıyor ve doğru seviyede görünüyor, ancak uzun zamandır acemi C ++ kitaplara bakmadım , bu yüzden sorulacak en iyi kişi değilim. Yine de C ++ 11'in kapsanmasını istiyorsanız, 5. basıma ihtiyacınız olacak.
Karl Bielefeldt

Tamam ve yah, 5. basımın c ++ 11'ini kapladığını biliyorum.
Dhananjay,

10

C ++ 11'i kullanmaya başlamak için eski C ++ kullanmanıza gerek yoktur, C ++ 11'de yeni özellikler vardır ancak kullanım isteğe bağlıdır. C ++ 11 özelliklerinin nasıl kullanılacağını bilmek bir avantaj olabilir, eski sürümlerin özdeşleştirmelerini öğrendikten sonra eski (11 öncesi) kod tabanlarıyla çalışırken kesinlikle bir dezavantaj olmaz.

C ++ öğrenmeye başlamak için iyi bir yer olacaktır ve Ek B size temelleri öğrendikten sonra C ++ 11 özelliklerini öğretecektir.

Bazı insanların neden Java / CSharp vb. Alternatif alternatifler olarak önerdiğini anlayabiliyorum ama CSharp'a geçmeden önce biraz C ++ öğrendim ve bu yüzden kötü bir programcı değilim, aksine programlama becerileri dilden daha derine iniyor sözdizimi / işlevsellik ve sağlam bir temel olan C ++ ile başka bir zorunlu OOP dilini kolayca öğrenebilirsiniz.


8

Söylemesi zor.

Eski C ++ daha çok mayın tarlası ve böyle bir canavarda nasıl gezinileceğini öğrenmek güzel. Ayrıca, işlerin neden yapıldığı ve farklı yapıların ne anlama geldiğini anlamanızı da sağlayacaktır.

Sonra tekrar, eski C ++ kod yazarken istediğin şey değil.

Fakat o zaman, yine de, eski C ++, 20 yıl daha birçok endüstrinin çalkalanacağı şey.

C ++ 11'i seviyorum, ancak şimdilik yalnızca başlangıçlarda kullanılabilir. Büyük eski kod tabanlarında değil. Ve doğrudan C ++ 11'e atlamak sizi kötü C ++ bölümlerinde gelişmemiş becerilere sahip bırakabilir. Bazı gelişmiş C ++ 11'ler bir kez daha geri tepecek, sızıntı yapar veya çöküyor, çünkü sözdizimsel olarak doğru, fakat mantıksal olarak yanlış bir şekilde kullanılıyor.


Nişin gömülü sistemler alanının yanı sıra neden endüstrinin ana bölümleri derleyicileri güncellemiyor? Risk (birim testlerinde bile)? Muhafazakarlık?
TheLQ,

1
@TheLQ: Sanırım ... Ama patron olsaydım ne yapardım diye düşündüğümde, aynı şeyi yapardım. Göç maliyetlerine karşı gözle görülür bir maliyet tasarrufu olmadığı sürece.
Kodlayıcı,

1
@TheLQ: Kod tabanlarının derleyicinin daha yeni bir sürümüne geçmesi çok kolay. Bir projenin nilly nilly yeni bir derleyici versiyonunu uyarlaması nadirdir. Yeni bir projenin yeni bir derleyici kullanma olasılığı daha yüksektir (eski kodla etkileşime girmediği sürece).
Martin York

1
@Coder: C ++ 11'i C ++ 03'ten farklı kılan öğrenmenin doğrudan C ++ 03'e çevirmeyeceğini. Yazmayı kolaylaştıran bir kaç yeni özellik var, ancak bu mayın tarlalarına adım atmanızı engelleyen hiçbir şey yok.
Martin York

1
@TheLQ: evet, bu temelde süreçlerdir, ancak entegrasyon testini unutmuşsunuzdur (en karmaşık kısım. Tüm başvurular bağımsız değildir (aslında bunun bunun azınlık olduğunu söyleyebilirim)). Tüm kodunuzun çalıştığını ve doğru çalıştığını doğrulamanız gerekir (yalnızca kodunuzla değil, müşteri kodunuzla). Bu, test etme ve onaylama kolaylığı değilse aylarca süren bir işlemdir. Müşterilerinizden bazıları C ++ 11'e geçmiyorsa, bazı sistemlerde her iki sürümü de korumanız gerekebilir (neyse ki gcc geriye dönük uyumlulukta çok iyidir, ancak tüm C ++ derleyici satıcıları değildir).
Martin York

8

Birçok iyileşmelere rağmen C++11, C++yine de kolay bir dil değildir. Java, bazılarının düşündüğü kadar kolay olmasa da, hala çok iyi performansa sahip (genellikle hemen hemen aynı hızda C++) daha kolay bir dildir ve daha iyi IDE'ler (belki Visual C++de mevcut Java IDE'ler kadar iyidir ama burada Linux'ta şans yoktur). daha kapsamlı standart kütüphane (JDK), daha fazla kütüphane (örneğin, Hazırda Beklet , Bahar , JEE , Lucene , vb.) ve hiçbir bellek sızıntısı (yani, neredeyse hiçbiri - Java'da bir bellek sızıntısı oluşturabilirsiniz, ancak bunu yapmak daha zordur. içinde C++). Adil olmak gerekirse, modernle birlikte C++11, bellek pırasalarından kaçınmak çok daha kolaydır.

C ++ 11, lambda, auto anahtar kelimesi, semantiği taşı ve çok daha fazlası gibi birçok harika özelliğe sahiptir. Kesinlikle olduğundan daha iyi bir dil C++98. Yeni özelliklerle ilgili olarak Herb Sutter'ın bu genel bakışına bakınız C++11: Modern C++Tarzın Öğeleri .

Özetlemek gerekirse, herkesin en azından bazılarını öğrenmesi gerektiğini düşünüyorum C++. İçinde programlama edilmiş ise Java, Scala, Rubyveya Pythonson on yıldır ve asla dokunulmaz Cya C++şimdi ile, C++11bunu öğrenmesi zaman olduğunu düşünüyorum C++11ve bunu yaparken programlama becerilerini geliştirmek.

Muhtemelen C++önümüzdeki yıllarda işte çok fazla kullanmayacağım ve daha güçlü bir dile ihtiyacım olduğunda Java, muhtemelen Scala'ya gideceğim, ama C++11özellikle yeni özellikleri daha yakından inceleyeceğim ve yeni özellikleri öğrenmeye ve anlamaya çalışacağım. multithreading ve eşzamanlılık hakkında olanlar.

Unutmayın: Üretimde kullanmayı planlamıyor olsanız bile, yeni bir programlama dili öğrenmeye yardımcı olur.


1

Derin bir nefes alın ve bu makaleyi Peter Norvig tarafından okuyun .

Bunu okudun mu? Tamam, eğer bir acemi iseniz, küçük adımlarla başlamanız gerekir. -takın dil burada-, daha sonra gelecek kontrol edebilirsiniz Coursera veya Udacity bazı acemi bilgisayar bilimleri tanıtım kursları için.

Bunu tamamladıktan sonra, eğer bir 'C' diline ayarlanmışsanız, K & R'nin The C programlama dili boyunca yavaşça çalışmanızı öneririm .

Temelleri üzerinde çalışın, gerisi zamanında gelecek.


10
Bunun sorulan cevaba nasıl cevap verdiğini anlamıyorum. C, C ++ ile aynı dilde bile değil.
vartec

1
Ancak C ++, C'ye dayanmaktadır ve büyük ölçüde geriye uyumludur: Modern C sözdiziminin büyük çoğunluğu doğrudan C ++ 'a uygulanabilir. C, herhangi bir C ++ sürümünden daha basit olduğu için, ilk önce C öğrenme, size temel C ++ sözdizimi ve anlambiliminde güzel bir tutarlı eğitim verir - ve daha büyük bir dilde anlaşılmaz siğillerin bazılarının açıklanmasına yardımcı olur ...
Comingtorm

2
@comingstorm Bir C programcısının yapması gereken ilk şey, C hakkında bildiği hemen her şeyi öğrenip C ++ öğrenmeye başlamaktır. Seni ısıtabilen ince farklılıklar var.
BЈовић

1
Artı deyimsel modern C ++ kodu C'den çok sözdizimi dışında ödünç almaz. Artık hala C-string ve malloc / free kullanıyoruz. Dile tam bir acemi olarak daha iyi C ++, vb yerine C odaklanmak Hızlandırılmış C ++ Primer 5th edition gibi bir kitabı, toplayıp gidiyoruz
bstamour

1

C ++ ile ilgili son tanıtım kitapları giderek artan bir şekilde C ++ 11'i de kapsıyor. Senaryo diliyle çalıştıktan sonra Sam'in Kendini Öğretme C ++ 'i okudum, ancak C / C ++' ı on yıl boyunca okudum ve gerçekten yararlı buldum. Çok hızlı bir şekilde C ++ 'ın (birçok STL de dahil olmak üzere) ana fikirleri hakkında konuştum ve C ++ 11' de farklı olan birçok detayın farkındayım.

Diğer bazı posterlerde de belirtildiği gibi, C ++ 11 auto, for(int &i : m_vector){}vb. Gibi komut dosyası stili eklemeleri ile eski standartlardan çok daha kolaydır . Yani "küçük bilginiz" Python veya Matlab gibi dillerden geliyorsa, C ++ 11'i bulacaksınız. önceki standartlardan biraz daha "doğal".

Ayrıca C ++ 11 için derleyici uyumluluğu ( neredeyse ) tamamlandı, bu nedenle "derlemek için çok güncel" olan bir kodun artık bir sorun olmadığını da belirtelim.

Kısacası, yap.


-1

Benim zamanım, özellikle C programlamaya yeni başlayanlar için C'nin, C ++ 'ın ön şartı olduğu kabul edildi. Çünkü bir dilin ne yaptığını ve neden böyle tasarlandığını bulmak zorundasınız. C, hiçbir zaman güncel olamayacak kadar büyük ve yeterli miktarda programlama dili fikri aldı. Böylece, bunun en iyi başlangıç ​​olduğuna inanıyorum.

Programlama öğeleriyle ilgili temel bir bakış açısına sahip olduktan sonra, bir sonraki hamle olarak ne yapılması gerektiğini seçmeniz gerekebilir, bu da mümkün olduğu kadar derin bir şekilde öğrenmek için bir dil seçin. Ne kadar derinde olursanız olun, genel olarak diğer diller için ne kadar derin olabileceğinize karar verebilirsiniz, bu da, ne kadar dil öğrenmiş olursanız olun, en derin olanı her zaman ilk bulduğunuz kişi olacaktır. Benim için, Java üzerinde araştırma yaptım ve çekirdek işlevselliğini daha iyi anlamak için bazı Java modellerini kendi başıma yaptım.

Ondan sonra ne istersen öğrenebilirsin, çünkü programlama dilinin teknolojisini tamamen biliyorsun. C #, Go, Python hatta Scala'yı öğrenmeye başladım ve eğlence / iş için birçok proje yaptım. Kişisel kayıt, bir dil öğrenmeye başlamasından gelişmekte olan bir projenin 1.0 başkanı olmaya 3 aydır.

Benim durumumda, ilk programımdan bu yana 15 yıl geçti ve ne olduğunu bile hatırlayamıyorum. Yeterince çalışırsanız, benden kesinlikle daha iyi ve daha hızlı olacağınıza inanıyorum.


bu sorulan soruyu cevaplamıyor
gnat

Tamamen özür dilerim. Sadece söylemek de istemiyorum. Sonunda ne öğrenmek istediğin önemli değil, sadece programlama dilinin temeli bu alanda ne kadar derine inebileceğine karar verebilir. Aynı zamanda, hızlı bir çekim yapmak yerine daha fazla zaman harcamak zorundasınız.
WinstonWu

-2

Yeni başlayanlar için öncelikle C ++ kavramlarını kullanmanız gerektiğini düşünüyorum çünkü C ++ 11 ve hepsi yeni bir sürüm gibi ama C ve C ++ her tür geliştirme için temel. C ++ 'ı öğrendikten sonra kavramların çoğu otomatik olarak silinir.


1
Programcılara Hoşgeldiniz! Cevabınızın bu soruya o kadar fazla katkı sağladığından emin değilim; ve dilbilgisel olarak biraz karışıklık konuşuyor. Söylemeye çalıştığın şeyi takip etmekte zorlanıyorum. Cevabınızı genişletebilir misiniz, belki C ++ 11'in neden C kadar öğrendiğine ve C ++ standardının daha önceki sürümlerine göre daha farklı olduğuna dair örnekler ekleyebilir misiniz?
Martijn Pieters,

-3

C ++ Gerçekten harika ve güçlü bir dil. Ancak programcının sorumluluğu büyüktür.

Programlamada tamamen yeniyseniz, hayatı kendiniz için kolaylaştırın ve C # ile başlayın. Sözdizimi C ++ 'a dayanıyor, ancak hata işleme, işler ters gittiğinde size yardımcı olmak konusunda çok daha yeni bir başlangıç ​​sağlıyor.

Metotlar, sınıflar, kalıtım konusunda rahatsanız ve bellek ve sistem kaynaklarını yönetmenin üretkenlikten daha önemli olduğu bir ortamda geliştirmek istiyorsanız, C ++ iyi bir seçimdir ve mevcut standardı öğrenerek başlayacağım. C ++ 'ın hafızayı anlamanızı ve aktif olarak yönetmenizi gerektirdiğini unutmayın. Burada hatalar yapın; aldığınız tek şey ya atılan bir çekirdektir ya da verileriniz mantıklı olmayan baytlar içerir. Ve çoğu zaman problemi bulduğunuz nokta, sebebin gerçekte olduğu ile ilgili değildir.


1
Eğer biri C # ile başlarsa, "sahnenin arkasında" ne olduğunu gerçekten bilmeden yüksek seviyede programlamaya alışacak (OOP, otomatik bellek yönetimi). Bu kişi daha sonra C ++ 'a taşınırsa, C / C ++ ile ilgili önemli bir bilgisine sahip olmayacaktır (çoğunlukla hafıza yönetimini düşünüyorum, ama daha fazlası var). C ++ ve C # 'nın çok benzer bir sözdizimini paylaşması, ancak gerçekte kodun ne yaptığıyla tamamen farklı olması nedeniyle daha da yanıltıcı olabilir. OP'nin C ++ ile ilgilendiğini açıkça belirttiğini unutmayın.
Eti

OP ayrıca programlama konusunda çok az bilgisi olduğunu belirtti. ilk dilinizi C ++ olarak öğrenmek çok zor. Savaşlarınızı seçmek ve bir dizi küçük olanı seçmek çok daha iyi, çünkü başarılı olma ihtimaliniz çok daha yüksek.
Michael Shaw,

-6

Neden C ++ ile başlamak istiyorsun?

Şahsen C ++ a karşı ilk dil olarak tavsiye ederim. Zor, karmaşık, zor ... diğer programlama dillerinden çok daha düşük seviye ve daha "güvensiz".

C #, java, python veya javascript ... ve yol boyunca iyi bir kitap seçmenizi öneririm. Bunlarla çok daha keyifli zaman geçireceksiniz.


3
Genelleme olarak buna katılmıyorum. Java / C # / python vb. Kullanım ömründen C ve C ++ 'ın daha karmaşık dünyasına gitmek o kadar kolay değil. Bir programlama dili öğrenmeye gerçekten hazırsanız, C ve C ++ öğrenmek zordur, ancak çok geri verecektir. Daha sonra java programlamak istiyorsanız, C #, python vb. Bu değişiklik onlardan C veya C ++ 'a gitmekten çok daha kolaydır. Özet: C / C ++ ile başlamak daha zor, ancak diğer OO diline geçişi kolaylaştıracak.
martiert

2
C ++ başlamak için en iyi temeldir. Programlama karmaşıktır ve sonunda bir donanımla çalışmak zorundasınız. C ++, sahte güvenlik duygusu olmadan bunu öğrenmeye başlamanın harika bir yoludur.
Kodlayıcı

Operasyonun sorusu tamamen gelişim konusundaki amacına dayanıyor.
Bağımsız

1
Buna katılmıyorum. C ++ 'ı öğrenmek bir çok avantaja sahiptir ve Java ve C # gibi diğer dilleri öğrenmeyi kolaylaştırır.
Anthony,

2
@Dhananjay: C ++, java'dan çok daha zor ... Java, bir bebek bisikleti gibi, C ++ 'ın son derece basitleştirilmiş bir sürümü. İkincisi, frensiz bir fırfırsız bisiklet olacaktır. Java'yı zaten zor buluyorsanız, C ++ bir acı olacaktır. 2 sentim.
dagnelies,
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.