İyi (mükemmel) bir programcı olmak için C (veya C ++) 'un nasıl kullanılacağını öğrenmek bir gereksinim midir? [kapalı]


25

Programlamayı ilk öğrenmeye başladığımda, gerçek programcılar uykularında montaj yazabiliyorlardı. Bilgisayar bilimlerinde ciddi bir okul eğitimi, derleme kullanarak programlamada ağır bir bit eğitim ve uygulama içerir. Bu, o zamandan beri, Bilgisayar Bilimi derecelerinin derleme ile bir dereceye kadar toplandığını gördüğüm noktaya kadar, 4 yıllık eğitimin toplam iki haftalık çalışması için bir ödev ve bir bölüme devredildi.

C / C ++ programlama benzer bir yol izlemiş gibi görünüyor. İki haftadan fazla bir süre C ++ 'da programlama yapmamış, yalnızca bir yerde C'yi okuyan üniversite mezunları ile görüşmeye şaşırmıyorum. En ciddi CS dereceleri hala önemli bir zaman öğrenme ve dillerden birini veya her ikisini de kullanma gibi görünmekle birlikte, eğilim açıkça okulda daha az zorlanan C / C ++ 'ya doğru.

Tek bir C veya C ++ kodu satırı okumadan veya yazmadan iyi iş çıkaran bir kariyer yapmak açıkça mümkün.

Tüm bunlar göz önüne alındığında, çabaya değer iki dil öğrenmek mi? Mükemmel olmaları şart mı? ("iyi bir dil seçimi, kapsamlı bir eğitim için muhtemelen önemlidir" ve "programcıların kariyeri boyunca yeni diller öğrenmeye ve denemeye devam etmek iyi bir fikirdir") gri hücreleri germek için ")


8
C bugünün yazılım altyapısında her yerde bulunur. Bunu öğrenmek kesinlikle yazdığınız yazılımda neler olup bittiğini daha derinden anlamanızı sağlayacaktır. (Bkz. Programmers.stackexchange.com/questions/14744/… ).
Charles Salvia

Ayrıca cevapları burada ilgili buldum: programmers.stackexchange.com/questions/29109/…
blueberryfields

Teğetsel: İyi bir programcı çeşitli programlama paradigmalarında rahattır, bu da birkaç dil öğrenmiş (ve kullanılmış) demektir.
Matthieu M.

Daha fazla dil öğrenmek zarar veremez.
00-17

4
C / C ++ yok. Sadece C ve C ++ var. Onlar çok farklı diller ve hangisinin konuştuğunuza bağlı olarak cevabı oldukça farklı olabilir.
Caleb

Yanıtlar:


63

Joel Spolsky (evet, o Joel) bir süre geri savundu gerçek sert programcılar ve (işaretçiler ve fonksiyonel özellikleri gibi) bunların yapılara (C, C ++ ve Lisp gibi) sert dilleri nasıl kullanılacağını biliyoruz ve üst düzey diller genellikle olmadıklarını Yetkinliğini göstermek için yeterince zor.

C ve C ++ 'ı tanıyan ve aslında iyi olan insanların, başlık altında neler olup bittiğini, Ruby'de (ve sadece Ruby'de) program yapan insanlardan çok daha fazla şey bildiklerini anlıyorum . Bunun böyle olacağını söylerdim: "zor" bir dil biliyorsanız, ciddi kısıtlamalara saygı duyurken programlayabileceğiniz veya karmaşık düşünme biçimlerinde ustalaşabileceğinizin iyi bir kanıtı. Yüksek seviyede bir dilde iyiyseniz, ciddi kısıtlamalara saygı duyarak program yapabilirsiniz. Ancak bunun kanıtı yoktur.

C veya C ++ öğrenmenin beyninize zarar vereceğini sanmıyorum (bazı insanlar buna inanıyor gibi görünüyor). Aslında, sadece daha yüksek seviyeli dilleri takdir etmeyi öğrenmek iyi bir fikir olabilir.


34

Evet, (şu anki zamanımızda) mükemmel bir programcı olmak için C (veya C ++) bilmek gereklidir.

Dil değil, çevre.

Programlar vakumda çalışmıyor. Mükemmel programcı çevresini bilir, büyük heykeltraş gibi malzemesini bilir. Mevcut programlama ortamımız (işletim sistemleri, derleyiciler, ağ, vb.) C / C ++ üzerine kuruludur.

Mükemmel programcı, verimli programlar yazar ve bunları gerçek yaşam durumlarında hata ayıklar. Çevreyi bilmeli - ve bugünlerde C / C ++ bilmeyi gerektiriyor.

Düzenleme: Matrix referansı eklenmeye dayanamıyor. Morpheus sorabilir: Java makinesini alıp sanal makinenin sağladığı konforlu dünyada yaşamaya devam etmek ister misiniz? Yoksa C hapını alıp tavşan deliğinin ne kadar derine gittiğini görüyor musun?


9
Matrix referansı için +1, gelecekte kullanmak üzere
saklayacağım

20

Başka bir Joel makalesine bakmalıyım. In Çatlak soyutlamalar Hukuku , C, Lisp C ++ gibi diller ve bellek yönetimi gerektiren dilleri öğrenme da düşünme yolunu öğrenme içerdiğini de kariyerini geri kalanı için tanımlar bizi.

Veri Yapıları ve Algoritmalar dersimdeki profesörüm William Spears, bir bilgisayar dolusu şüpheci Bilgisayar Bilimi öğrencisine neden en son araçları öğrenemediğimizi söyledi. Öğrenciler Java'yı öğrenemediğimiz için “gerçek dünyaya” hazırlıklı olmadıklarını düşündüklerinden şikayet ettiler. JavaScript öğrenmiyorduk. HTML'de sınıf yoktu. Öğrenmiyorduk [[BURAYA INSERT TEKNOLOJİSİ]].

Neden en son araçları öğrenmiyorduk? Profesörümüze göre, teknoloji o kadar hızlı değişiyor ki, 4 yıl içerisinde öğrendiğimiz araçlar çok eski olabilir. Sektördeki birkaç yıldan sonra, değerlendirmesine katılıyorum diyebilirim.

Bir Bilgisayar Bilimleri eğitiminin amacı, nasıl öğrenileceğini öğrenmektir. Çoğu zamanların geliştirilmesindeki birçok soruna çözüm bulmak, yalnızca temel, temel, başlık altında, C, C ++ ve Lisp ile çalışmaktan gelen ham Bilgisayar Bilimleri öğreniminden gelebilecek olan kutunun dışında düşünmeyi gerektirir.

Gerçek dünyadaki bu soyutlamalar sızdığında ve yapacaklarında, temelleri anlamak, ortalamayı en iyiden ayıran şeydir.


3
Bir şeyleri özlüyorum. Lisp’in öğrenme temelleriyle ne alakası var? Şimdiye kadar icat edilen en büyük soyutlama inversiyonu. Özgün, temel tasarım hedeflerinden biri “gerçekten bir Turing makinesinde olmadığımızı farzedelim ve bunu yaparak işleri ne kadar basitleştirebileceğimizi görelim”.
Mason Wheeler

6
@Mason: Lisp'i öğrenmek size gerçek dünyadaki bilgisayarlar hakkında hiçbir şey öğretmeyecek. Size hesaplama teorisi hakkında çok şey öğretecektir. Ham bilgisayar bilimi, ham bilgisayarlardan daha fazlasıdır.
David Thornley

2
@Mason Wheeler Learning lisp, aşağıdakiler de dahil olmak üzere çeşitli gelişmiş kavramlar sunar: veri / kod değiştirilebilir, yansıma / kendi kendini değiştiren kod ve derleyicinizi / vm'nizi son ürününüzün bir parçası olarak değerlendirmenin önemi
yaban mersini

@blueberryfields: ... hepsi daha deneyimli kodlayıcılar tarafından bir dereceye kadar zararlı veya güvenlik açığı olarak kabul edilir. Yenilere öğretmek için çok kötü şeyler.
Mason Wheeler

2
@Mason Yorumunuzun içeriğini anlamıyorum - buradaki mükemmel programcılardan bahsediyoruz, yeniliklerden değil. Bu kavramları tam olarak anlamayan bir programcıyı çalışmalarına uygun şekilde (ve düzenli olarak) uygulayan bir uzman olarak düşünmezdim.
blueberryfields,

18

Bana bu şekilde koyalım. Diyelim ki bazı C ++ işlerini yapacak birisini işe almanız gerektiğini ve üniversitede bir C ++ projesini yapan ancak mezun olduktan sonra yalnızca Java'da programlanan birini uygular. Tersine, bir Java çalışması için birisini işe almanız gerektiğini ve kolejde bir Java projesi yapan ancak mezun olduktan sonra yalnızca C ++ 'da programlanmış birini uyguladığınızı söyleyin.

Kim daha rahat işe alacaksın? C ++ 'ı tartışıyordum, çünkü çöp toplama dilini kullanmaya geçmek birinden uzaklaşmaktan çok daha kolay. Aynı şekilde, diğer kavramlar ve diğer diller için, derlenmiştan yorumlanmış veya statikten dinamik yazmaya geçmek gibi. Diller arasında yapabileceğiniz özellik karşılaştırması ile hemen hemen her özellikte, C ++ zor ucunda ortaya çıkar, bu da programlamayı zorlaştıran bir programdır, aynı zamanda bir programcıyı değerlendirmek için mükemmel bir temeldir.

C veya C ++ kodlarına dokunmadan bir kariyerde başarılı olabilir misiniz? Tabii, ama hala yapamayan veya yapmaktan korkan birini işe almak istemem.


3
Etkileyici olmayan argüman. Java çalışması yapmam gerekirse, Java deneyimi olan birini işe alırdım. C ++ çalışmam gerekiyorsa, C ++ tecrübesi olan birini işe alırdım. Ben ise vardı bir C ++ pozisyon için bir Java adamı işe sonra işaretçiler ve bellek yönetimi ve de ray onu quizzing bazı ekstra görüşme vakit geçirmek olabilir; Benzer şekilde, eğer bir Java pozisyonu için bir C ++ adamı işe almak zorunda kalsaydım, röportajda jitters, tasarım desenleri, yansıma vb. hakkında sormak için daha fazla zaman geçirirdim. Öğrenme eğrisinin çoğu zaten kütüphanelerdedir.
Aaron 21

13

Hayır, C veya C ++ 'ı iyi bir programcı olarak öğrenmeye gerek yoktur, ancak bunun anlaşılması Hafıza Yönetimi gibi bazı temel kavramları temizlemeye yardımcı olacaktır.


7

çabaya değer olan iki dili öğrenmek mi?

Tek bir C veya C ++ kodu satırı okumadan veya yazmadan iyi iş çıkaran bir kariyer yapmak açıkça mümkün.


6

Kısacası, hayır değiller. Öğrenmesi yararlı dillerdir, ancak C veya C ++ çizgisine dokunmadan kolayca mükemmel bir programcı olabilirsiniz. En mükemmel programcılar muhtemelen onlara dokunacaklardı, ama konunun yanı sıra - bugünlerde birçok uygulamada, neredeyse .NET ve Java kadar kullanılmıyorlar ve bu nedenle gereklilikleri biraz azaldı.

Öğrenmeye değmeyeceklerini söylemediğime dikkat edin, bence öğrenilecek her ikisinin de önemli dilleri olduğunu, özellikle de programlama dışında bir kariyer yapmayı planlıyorsanız. Ancak, hiç dokunmadan da iyi bir programcı olabilir misiniz? Emin.


5

İlgi alanınıza bağlı.
Eğer sistem programında olmak istiyorsanız, evet, varsayılan CS dilleri olan C / C ++ 'ı öğrenmeniz gerekecektir . İşletim sistemi kavramlarını, Derleyicileri, veri Yapıları, Hafıza yönetimini vb. Tanımak için C / C ++ bilmeniz gerekir. Ayrıca C / C ++ ile programlama becerilerinizi geliştirecek iyi metinler, kitaplar ve makaleler de mevcuttur. Birkaç gün önce / * Programcılar * / i ' Neden C - Çünkü Metal'e Yakın' için mükemmel bir cevap okudum .
Diğer taraftan, kendinizi uygulama programlamasıyla sınırlandırmak istiyorsanız, C / C ++ uygulamasına gitmenize gerek yok, Doğrudan C # (.Net) / Java ile başlayın ve iyi bir geliştiricinin işine sahip olacaksınız. Ancak hardcore programlamayı gerçekten seviyorsanız, bir gün C / C ++ öğrenmeye başlayacağınızdan eminim.


Metale yakın! Bu yorumu seviyorum.
Wajih

3

Tamamen hangi uygulama alanında çalışmak istediğinize bağlıdır. Gömülü manzarada oynamak istiyorsanız, hemen hemen C veya C ++ bilmeniz gerekir. C ++ ayrıca muhtemelen oyun geliştirmede en yaygın kullanılan dildir. Web uygulamaları üzerinde çalışmak istiyorsanız, o zaman C veya C ++ kadar önemli olmayabilir. İyi bir yazılım mühendisini tanımlamak için bir öncelik olarak bilmenin gerekli olma prestijini taşıyan bir dil yoktur.


3

C, “doğru montaj” olarak adlandırıldı ve bu çok doğru. Unix'i işlemciler arasında taşınabilir hale getirmek ve altta yatan işlemcinin komut setine çok yakın kodu tanımlamak için tasarlanmıştır.

Eğer sen gömülü yazılım veya aygıt sürücüleri vb olmak, fiili donanıma çalışma sona istiyoruz bulmak daha ana akım iş istiyorsanız, C civarında bir yolu yoktur, üst düzey diller daha iyi bir fikir beri olduğu C'yi güçlü kılan özelliklerin birçoğu C'yi de tehlikeli kılıyor, böylece azaltılmış veya basitçe kaldırılmışlar.

Şahsen, çoğu tasarım kararı buna bağlı olduğundan, programlarınızı çalıştırmak için neyin gerekli olduğunu anlamayı çok önemli olarak düşünürdüm, bu nedenle en azından montaj talimat setinde kodun nasıl haritalandırılacağına ve fiili olarak nasıl çalıştığına aşina olmalısınız. donanım. Aldığın şeylerin aslında yapması zaman alıyor ve neden.

Bu nedenle en azından C'ye ve bazı gelişmiş işaretçi aritmetik koduna bir göz atmanızı öneririm, böylece günlük olarak neyle uğraşmak zorunda kalmayacağınızı biliyorsunuzdur .


1

C, silikonun yakınında olduğu için öğrenmesi yararlıdır. C veya assembly dili, bilgisayarların neler yapabileceği ve nasıl yaptıkları konusunda size iyi bir fikir verecektir ve bunun neyin mümkün olup neyin pratik olduğunu anlamada faydalı olması muhtemeldir. Dahası, ilginizi çekebilecek çok sayıda C kodu var ve çok daha modern bir dil, sözdizimi ve anlambiliminin çoğunu kullanıyor.

C ++, bazı çok ilginç özelliklere sahip olan üst seviye bir dildir. Birçok yararı var ve güçlü bir dil. Öte yandan, orada birçok güçlü ve yararlı dil var.

Bu yüzden, daha düşük seviyelerde olanlarla ilgili öğrenmeyi şiddetle tavsiye ederim ve C onları öğrenmenin mükemmel bir yoludur, C'yi öğrenmeyi şiddetle tavsiye ederim. C ++ isteğe bağlıdır; bunu öğrenmek size bir şeyler öğretir, ancak çoğunu öğrenmenin başka yolları da vardır ve zaten bir ana dilde çalışıyorsanız, yeni kavramları öğrenmeyi öğrenecek daha iyi diller vardır.


0

Yapacağınızı düşündüğünüz yazılımın türüne bağlı. Oyunlar genellikle C / C ++ dilinde yazılır, çünkü çalıştırılabilir kod söz konusu olduğunda klasik olarak daha iyi bir dildir. Kodladığınız şey, bir şekilde tam olarak ne aldığınızla ilgili.

Olduğu söyleniyor, C # aynı zamanda oyun programlamak için de kullanılıyor. C # muhtemelen en azından Windows platformunda, masaüstü uygulama geliştirme için en iyi dillerden biridir .

Visual Studio ile birlikte, C # sanırım kanlı fantastik tüm amaç ve amaçlar için kullandığım (SQL ve PHP gibi diller hariç) kullandığım tek yazılım geliştirme dili haline geldi .

Windows üzerinde geliştirirseniz, C # .NET'i başka bir şeyle öğrenmenizi şiddetle tavsiye ederim.

C ++ 'ın başlı başına bir şart olduğuna inanmıyorum, ancak işaretçiler, bellek yönetimi ve diğer kavramlar hakkında daha düşük düzeyde bilgi sahibi olmak güzel.


1
@ Nick: Bilgisayar dünyası pencerelerin dışında ve C #.
Ranger

2
Bu yüzden neden "Windows'ta geliştirirseniz" dedim .
Nick Bedford

0

@Nick Bedford, çalıştığınız alan hakkında haklıdır. Yazılım meslektaşlarım aygıt sürücüleri ve gömülü yazılımlar yazıyor. C oraya gitmenin yolu. Ve C ++ 'ı ikinci bir dil olarak düşünmeyin, üst üste binmeleri çok büyük.


3
C ++ 'ı C'den farklı bir dil olarak düşünmüyorsanız, gerçekten C ++' ı iyi tanımıyorsunuzdur. Yalnızca çakışmada çalışmak mümkündür, ancak tavsiye edilmez.
David Thornley

Belki de benzerliği abartıyorum. Fakat bunlar daha çok aynıdır, örneğin C ve Perl.
Brian Carlton

0

Birçok kişi, C'nin bellek yönetimi için öğrenmenin iyi olduğunu söyledi ve katılıyorum. C öğrenme hakkında görüşüme göre, bir programın nasıl hata ayıklanacağını öğrenmek uğruna öğrenmenin çok iyi olduğu. Programlarınızda nasıl hata ayıklamanız gerektiği hakkında düşünmenizi gerektiren C için yazarken birçok şey yanlış gidebilir. Programlamamın herhangi birinde (C veya diğer dillerde) hata ayıklama aracını nadiren kullanırım, çünkü C bana programlarda hata ayıklama yardımcı programlarını nasıl ekleyeceğimi öğretti.

C / C ++ öğrenmek bir kariyer için gerekli midir? Hayır, ama aynı zamanda pek çok Java programlama geliştiricisi de görmedim, çünkü yalnızca Java öğreniyorlardı. Perl programcıları ile aynı. Birden fazla dil öğrenmek, C / C ++ 'in bu dillerden biri olup olmadığı bir kariyer için bir zorunluluk olmalıdır.


+1 - Farklı kavramları farklı dillerde sunulan benzer konseptleri görmek, bu kavramları daha iyi anlamama ve onları tamamen yeni bir ışık altında görmeme yardımcı oldu.
jmort253

0

Başlangıçta, üniversitemin Java, Visual Basic ve benzeri gibi çok sayıda yeni dil varken 2 dönem boyunca C'yi dahil etmek için Dennis M. Ritchie'nin neslinde olduğunu düşünürdüm . Fakat gerçek şu ki ya da en azından şimdi inanıyorum ki, C, temel programlama kavramlarını anlamanıza yardımcı olacak en iyi dillerden biri.

Ve C (veya C ++) öğrenmeden kariyer hakkında - Evet, bu mümkün, ancak C öğrenme programlama bilginizi gösterir.


0

Benim için cevap evet oldu. CS derece programımda hem C hem de C ++ dersleri gerekliydi ve CS derecesine veya ilgili dereceye sahip olmanın "iyi bir programcı" olmak için minimum bir gereklilik olduğuna inanıyor. Ayrıca, "iyi bir programcı" olmak, ortaya çıkan sorunları rasyonelleştirmek ve bir şeyin neden beklendiği gibi çalışmadığını anlamak anlamına gelir. Kariyerimde çok fazla kez bireylerin sorunlara boğulduğuna ve kendilerine karşı çalışan doğaüstü güçlerin olduğunu düşünmeye şahit oldum ... saçma.

IMO, C bilmek, zorunlu dillerden herhangi birini anlama ve insanlığın icat ettiği en güçlü araçlardan birini kullanarak problem çözme yeteneğini gösterir.


0

İyi yuvarlaklaştırılmış bir programcının kılıfında birkaç püf noktası vardır ve bunlar:

1) Düşük seviyeli programlama ... en az C. Bazı montajlar zarar vermez.

2) İşlevsel programlama ... Tamamen işlevsel bir dil, melez değil - Şema burada çalışıyor.

3) OOP ... Normalde küçük konuşma derdim, ama sanırım şimdi Java ile gidebiliriz.


0

C, tüm programlama dilinin annesidir.

C ++ tamamen farklı bir top oyunudur ve hepsinde en karmaşık olanıdır.


0

İyi bir (mükemmel) programcı olmak için C veya C ++ öğrenmek gerekli değildir, ancak iyi (mükemmel) bir programcı olmak için Meclis'i öğrenmek gerekir. Mükemmel programlama, bellek, Mhz, bant genişliği, güç kısıtlamaları arasında optimizasyon yapmak ve ardından eldeki görevi gerçekleştirmek için en iyi tasarım ve / veya uygulamayı seçmek anlamına gelir. Bilgisayar bilimcileri arasında, temel zayıflık, onlarca yıldır gelişen teknolojilerin ardından, verileri en iyi şekilde yönetmedir. Bu, derleme yazarak öğretilen bir beceri setidir (herhangi bir derleme; ARM veya MIPS, veya x86 veya bir mikrodenetleyici veya bir DSP olabilir, verilog / VHDL yoluyla daha düşük olabilir).


0

C, c ++, assembly ve Lisp dillerini iyi kullanmış olsaydım, iyi bir programcı olmak için herhangi bir dili öğrenmenin bir anlamı olmadığını söyleyebilirim. İyi bir programcı kılan deneyimlerim, problemleri çözecek şekilde düşünebilmektir. Diller sadece problem çözme becerilerini ifade etmeni sağlar. Örneğin, C'nin sadeliği, algoritmaları kolayca ifade etmenize izin verirken Lisp, özyinelemeli sorunları çözmenize olanak sağlar. Yani bir dil sizi programcı yapmaz. İyi bir programcı olmadan önce ilk önce problem çözücü olmak zorundasın. Diller sadece sorunları çözmek için kullandığınız araçlardır.


-1

Basit bir bellek yönetimi anlayışı kazanmak için C öğrenmeye değer. Veri yapılarını öğrenme amacı dışında C ++ için aynı şey.


Veri yapılarını öğrenmek için hangi dili kullandığı önemli değildir.
kirk.burleson

Öyle olduğuna inanıyorum, çünkü birçok dilde veri yapıları bellekte nasıl işlendiklerini bilmeden kullanılıyor. C ++ (STL kullanılmadan) programcıyı veri yapılarının düşük seviyede nasıl ele alındığını öğrenmeye zorlar.
aqua

-1

Hayır. C / C ++ kodu yazan birçok kötü programcı vardır. Sizi iyi bir programcı yapan şey, ne zaman ve neden C / C ++ ile bir şeyler yazmanız gerektiğini anlamaktır.

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.