C bilmiyorum ama C ++ ile iyiyim tamam mı? [kapalı]


23

Burada en iyi cevaplanabileceğini düşündüğüm bir sorum var.

Oldukça iyiyim C++, dili iyi olduğum için iyiyim, Accelerated C++hemen hemen bütün alıştırmaları okudum ve yaptım.

Ancak büyük bir problemim var. Öğrenmeme gerek var Cmı Hayatımda hiç yapmadım C. C++Programlamaya başladığımda daha yeni başladım . Muhtemelen, neden herkesin dili bu kadar karmaşık olarak adlandırdığını bilmekle her zaman ilgilenmiştim. Şimdi bu sorunun cevabını bildiğim halde;)

Özellikle Cbugünün dünyasında bilmeden hayatta kalabileceğimi bilmekle ilgileniyorum . Mesela bir şirkette röportaj verirsem, onlara bilmediğimi söylersem C- tamam olarak alacaklar mı? İyi olduğum iki dil Python ve C ++. Bunu soruyorum çünkü şirketlerin röportajlarda veri yapıları istediğini duydum. Öyleyse uygulamamı isterlerse ve C ++ 'da yaparsam, kabul edilebilir mi?

Ve 'C ++ olduğunda C'yi nasıl bilemezsin' diyen insanlar, lütfen cevap vermeyin :) Alınma ama C öğrenmenin neden ön koşul olduğunu anlamıyorum.



1
DumbCoder tarafından alıntılanan makale, gömülü programlamada C'nin popülaritesi hakkındadır.
ChrisW

2
@ChrisW - Evet, ama yine de C'nin ustalaşması kolay değil, C ++ 'nın ustalaşması kolay değil.
DumbCoder

@DumbCoder: Oh noes, gömülü programlama. Masaüstüne kıyasla gömülü iş sayısı kaçtır?
DeadMG

@DeadMG - Bir dilin ustalaşılmasının o dil için kaç işin mevcut olduğuyla ilgisi yoktur. Ve C'nin yalnızca gömülü programlamada kullanıldığı fikrini nereden öğrendin?
DumbCoder

Yanıtlar:


36

C ++ 'ı tanıyorsanız, sadece onun uğruna C öğrenemem. İhtiyacınız olup olmadığını ve ne zaman ihtiyacınız olduğunu öğrenmek çok zor olmamalıdır.

C ++ bildiğini iddia eden biriyle tanışmayı tercih ederim, ancak C / C ++ bildiğini iddia eden biri yerine C'yi değil.


Oh evet. C ++ kentsel mitleri hakkında SO sorusunda ilk madde listesi: stackoverflow.com/questions/2245196/c-urban-myths

4
+1. C ++ 'ı biliyorsanız, bir başlangıç ​​için, C'yi öğrenmek çok zor bir iştir, ve ikincisi, bu gerçekten önemsizdir.
DeadMG

6
@DeadMG Sözdizimini öğrenmek kolay olabilir, çünkü bu sadece C ++ 'ın hangi kısımlarını dışarıda bırakacağını bilmek, ancak ortak deyimleri öğrenmek daha zor ve tartışmasız en önemli kısımdır. BU gerekmedikçe C öğrenmeyeceğim.
KeithB

6
@chubsdad demek istediğim özgeçmişime "Java / Javascript biliyorum" yazmamalı mıyım?
gizli

@ user257493: Java / Javascript diye bir şey yok
John Dibling 24:30

23

Çok parçalı bir cevap. Sadece görüşlerim.

  1. Tecrübelerim (okuldan 25 yıl sonra), C ++ 'nın giderek daha nadir görülmesine rağmen, öngörülebilir gelecek için ilginç sistemler için hayati önem taşımaya devam edeceği yönünde. Bu yüzden ana uzmanlık alanım olarak buna bağlı kalıyorum. İş zor, ilginç ve önemli.

  2. C ++ programcıları genellikle çok değerlidir çünkü yönetilen dillerde yetişmemişlerdir ve bu yüzden kapakların altında neler olup bittiğini anlama olasılıkları daha fazladır. C ++ 'dan C # / Java' ya geçiş yapmak tam tersiden daha kolaydır çünkü giriş için olan çubuk daha yüksektir.

  3. Bu yüzden, benim görüşüme göre, C ++ 'da yetkin bir şekilde programlamak için C'yi anlamak zorunlu değil, C ++' nın C bağlamında neden var olduğunu - bunun sınırlamaları, güçlü yönleri ve bunların C ++ 'da nasıl ele alınıp alınmadığının anlaşılması - zamanla sizin için paha biçilmez.

İyi şanslar.


C ++ 'un giderek daha yaygın olduğunu söyleyen nedir? Deneyiminize göre, yerini değiştiren nedir?
Praxeolitic


13

İşte Bjarne'ın söylediği:

C bilmek, C ++ öğrenmek için bir önkoşuldur, değil mi?

Yanlış. C ve C ++ 'nın ortak alt kümesini C' den öğrenmesi daha kolaydır. Elle yakalamak için daha az tip hatası olacaktır (C ++ tip sistemi daha katı ve daha etkileyicidir), daha az öğrenmek için daha az püf noktası olacaktır (C ++, çevrelemeden daha fazla şey ifade etmenizi sağlar) ve daha iyi kütüphaneler mevcut. Öğrenilecek en iyi C ++ alt kümesi "C'nin tümü" değil.


4

Sadece benim kişisel görüşüm: C ++ 'ı biliyorsanız, C' de yazabilirsiniz. Bunun tersi doğru değil: C bilgisi C ++ ile ek öğrenmeye gerek kalmadan yazamaz. Asla C öğrenmedim ve gerektiğinde, sorunsuz olarak kullanıyorum.


3
@Alex Farber - "Eğer C ++ 'ı biliyorsanız, C' de yazabilirsiniz". Şüpheliyim ki :)
DumbCoder

4
Katılmıyorum. IME, ilk önce C ++ 'ı öğrenen programcılar, C ++' nın C özelliklerine sahip olmadığını anlama eğilimindedir. İlk önce C öğrenen programcılar kolayca C ++ dilinde yazabilir, ancak deyimsiz olarak başlayabilir.
dan04

1
Bu benim kişisel deneyimime dayanıyor. C ++ 'ı öğrendim ve çalışmalarımın çoğunu C ++' da yaptım. Ama gerektiğinde C'yi problemsiz kullanıyorum.

Özellikle tüm sevimli sınıf lib'lerin C'de bulunmadığı göz önüne alındığında, C ++ ve Java gibi dillerin kazanılması, doğal dil özellikleri değil, lib'lerdir.

8
C ++ programcıları C yolunu kırmaya çalışıyor C ++ 'un kötü kod yazmasına neden aynı nedenlerden dolayı C programcıları C ++ yollarını kırmaya çalışıyor. C adamları C ++ 'ı "sınıfları olan C" olarak kullanırken C ++ adamları C'yi "sınıfsız" C ++ olarak kullanırlar.
John Dibling

4

Tamam, ilk önce ilk - hayır, C'yi bilmek, C ++ öğrenmenin bir önkoşulu değildir. Gerçekten de bir engel olabilir.

İkincisi, bu tamamen durumsaldır. C'yi bilmeniz gerekip gerekmediği tamamen işin gerektirip gerektirmediğine bağlıdır. Gömülü sistemler adam olmak istiyorsanız, evet, C öğrenme yardımcı olacaktır. Aksi halde, çoğu iş gerektirmez. Eğer bir iş C'ye ihtiyaç duyuyorsa bunu söylemeli. Söylemezse, muhtemelen buna ihtiyacı yoktur. Veri yapılarıyla ilgili olarak yine şirkete geliyor. Genellikle bir şirket "Biz bu dillerde programlıyoruz, bize bu veri yapısını yazın. İstediğiniz dili yukarıdaki listeden kullanın" der. Sizden C'ye yazmanızı isterlerse, basitçe "C bilmiyorum - özgeçmişime C bildiğimi söylemez, bu iş benim için değil" diyorsunuz.


C'yi bilmek neden C ++ öğrenmeye engel teşkil ediyor? Mutlaka katılmıyorum demiyorum, ama bu cesur bir ifade.
Casey Patton

3

Mesela bir şirkette röportaj verirsem, onlara bilmediğimi söylersem - tamam olarak alacaklar mı?

C'ye ihtiyaç duyup duymadıklarını sorun (ve öğrenip istemediklerini isteyin).

Öyleyse uygulamamı isterlerse ve C ++ 'da yaparsam kabul edilebilir mi?

C ++ ile çalışmak için sizinle röportaj yapıyorlar / işe alıyorlarsa, bunu beklerdim.

Eğer bu bir "veri yapıları" sorusuysa, onlara STL kaplarını kullanarak göstermenizi isteyip istemediklerini veya veri yapılarını sıfırdan uygulamanızı isteyip istemediklerini sorabilirsiniz.


2

C neredeyse uygun bir C ++ alt kümesidir. C'yi tanımıyorsanız, C ++ 'ın büyük ve önemli bir alt kümesini bilmiyorsunuzdur. Eğer Do sahip bu alt kümesini öğrenmek? Hayır. C ++ gülünç derecede büyük bir dildir ve çoğu insan bununla bir altküme seçer ve programlar. C alt kümesini bilmeniz gerekmez. Özellikle, C standart kütüphanesini bilmek o kadar önemli değildir. Ancak, işaretçiler, diziler ve ufak tefek gibi temel C kavramlarını anlamayan kimseye çok şüpheli bir göz atardım.


2

C öğrenmeye ihtiyacım var mı?

Hayır, gerek yok. Dönemi.

Ancak, herhangi bir yeni programlama dilini öğrenmek uzun vadede faydalıdır. Dilleri farklı programlama paradigmalarına göre öğrenmek daha da faydalıdır. Bir OOP dili (Smalltalk veya C ++), dinamik bir dil (Lisp, Clojure, Python), fonksiyonel (Lisp, Haskell, Erlang), eşzamanlı (Erlang, Go, Algol 68, Smalltalk) veya her neyse (Fortran 03, Perl, Forth) diğer yeni fangled paradigması fantazinize düşüyor ; farklı dilleri öğrenmek, her biri kendi elinizdeki görevle başa çıkmak için kendi güçlü ve zayıf yönlerine sahip olan birden fazla düşünceye maruz kalmanıza yardımcı olur.

Fortran hala sayısal hesaplamada hâkim durumda, COBOL hala büyük sigorta şirketlerinde temel bir dayanak noktası, Unix, BSD ve Linux hala temelde C'ye dayanıyor. zamanla değiştirilmesi gereken mekanik cihazlar gibi. Bu nedenle, eski dil, yeni dilin serin faktörüne karşı istihdam edilebilirlik açısından değerli olabilir .

Doğal (insan) dillerde çok dilli olmak için çalışmak, kendinizi ifade etme yeteneğinizi tartışmaya açık bir şekilde arttırırken , aynı şey bilgisayar dilleri için de aynı bonusu taşır.

Bu yüzden sadece zaman içerisinde akıcı olmayı öğrenmenin, zaman içinde sadece çok dilde değil de akıcı olmanın daha önemli olduğunu düşünüyorum.

C ++ ile oldukça iyiyim, dil ile rahat olduğum için iyi, Accelerated C ++ okudum ve neredeyse tüm alıştırmaları yaptım

Yedekleyeceğim ve C ++ 'nın zengin ve karmaşık bir dil olduğunu söyleyeceğim, tüm zengin (veya çirkin) inceliklerinde gerçekten akıcı olması uzun yıllar sürecek bir pozlama ve sürekli pratik gerektirecektir.

Zaman ayırın ve öğrenmeye devam etmek size verebileceğim en önemli tavsiyedir. Başkası tarafından üstlenilmesi için , on yıl içinde Peter Norvig'in Kendini Öğretme Programını okumanı tavsiye ediyorum .


1

Sorunuza çok kısa bir cevap: İhtiyaçlarınıza büyük ölçüde bağlı. Bazı şirketler bazen C'ye, bazen de bir kalıntı olarak güveniyorlar (eğer C yıllarca orada kullanılmışsa). Diğer şirketlerin C ile hiçbir ilgisi yoktur. C, Python veya Java'dan daha düşük seviyeli bir dildir ve pek çok uygulama programlaması C bilgisi gerektirmeyebilir. OOP dillerinin aksine, C farklı bir zihin çerçevesi gerektirir. Programların farklı şekilde yapılandırıldığı ve organize edildiği ve bazı daha farklı yönlerin dikkate alınması gerektiği anlamına geliyor. Bu deyimi öğrenmek, hatta fikrinizi genişletmek, hatta konuşmak için genellikle yararlıdır. Fakat yine de, şirketlerin umursayacağı olup olmadığına bağlı. Bazıları size dil seçimi yapabilir, bazıları Java, bazıları C ++, diğer hala C vb. Gerektirebilir. Evet bugün' dünyasında o kadar çok farklı programlama alanı vardır ki, C kodunu asla geçemezsiniz. C öğrenmelisin? Diyelim ki - evet, daha sonra kullanmaya bakmaksızın.


1

Bazı insanlar, C ++ 'ı bilerek C ile programlama konusunda rahat hissetmeyebilir.

C ++ etrafında yalnızca yapıya değil aynı zamanda programın algoritmalarına da katkıda bulunan "koruyucu" bir yapı vardır. Mesela STL yapısının ve algoritmaların yardımı, bariz nesne yönelimli programlama yaklaşımı, yapı / yıkıcı, şablonlardan gelen ek soyut katman ...

C basitçe söylenirken, programcıyı bir yapı ve algoritmaları kendi başına problem modellemesine enjekte etmeye zorlar. Bu, programlama özgürlüğünün yoğun bir şekilde artmasıdır.
Ancak bazı insanların daha fazla empoze edilmiş bir yapıya ihtiyaç duydukları ve daha da büyüdükçe sürdürülmesi zorlaşan bir program oluşturmaları nedeniyle bir maliyeti var. Sık sık sorunun dil (C) değil, onunla ne yaptığını söylüyorum.

Bunun bir acemi olarak, güçlü bir C ++ becerisine sahip biriyle röportaj yapmaktan memnuniyet duyuyorum, ancak bir C projesini geliştirmek için yeterli dil özerkliği varsa daha da hevesli olacağını söyledi.

Ayrıca, iyi bir C programı, dilin verimli bir şekilde çalıştırılabilir hale getirilmesi için sistem bileşenlerinin adil bir şekilde anlaşılmasını gerektirdiğinden, iyi bir geliştirici sistem becerileri gerektirir.


Programcının özgürlüğünü arttırdığını söyleyemem - kendi yapınızı ve algoritmalarınızı her zaman C ++ ile yazabilirsiniz.
DeadMG

0

C ++ 'da rahat ederseniz, C öğrenme konusunda endişelenmezim. C ++' ın C konusunda birçok iyileştirmesi vardır (RAII'yi yapıcılar / yıkıcılar, taban kapları, akışlar ve sicimlerle destekleme yeteneği büyüktür).

Bununla birlikte , işlevlerin printfve scanfserilerin öğrenilmesini öneririm, böylece onları kullanan kodları OKUYUN. C ++ 'da oldukça popülerler, bu yüzden nasıl kullanıldıklarını bilmek yardımcı oluyor. Onları çok özel bir sebep olmadan kendi kodunuzda kullanmanızı önermiyorum.


0

C'yi bilmeniz gereken tek zaman , C kodu üretmenizin beklendiği zamandır . Olmazsa, o zaman sorun yok.

Son 6 yılda profesyonel olarak C yazmadım; Java veya C # veya Python gibi diğer diller (en azından performans değil, verimlilik açısından) tarafından daha iyi sunulan birçok uygulama alanı vardır. Kesinlikle kesinlikle C'ye dokunmadan hayatta kalabilir ve hatta bir yazılım geliştiricisi olarak gelişebilirsiniz.

Kendi eğlenceniz için C öğrenmek istiyorsanız, sorun değil. C ++ 'ı nasıl öğrendiğinize ve C ++' ya özgü özelliklere (şablonlar, referans tipleri, STL, aşırı yükleme) ne kadar güvendiğinize bağlı olarak, programlamayı tolere edilebilecek araçların% 90'ının artık mevcut olmadığını fark ettiğinizde biraz kaybedebilirsiniz. C'deki bellek yönetimi gibi şeyler, C ++ veya Java'ya kıyasla çok emek yoğun ve sıkıcı. Ayrıca, C ve C ++ ile bazı yeni dil sürümlerinde boşlukların genişleyeceği bazı uyumsuzluklar da var.

C'nin iş için doğru araç olduğu uygulama alanları var: kaputun altında küçük, hızlı, fazla sihir yok ve montaj değil. Ancak genel uygulama geliştirme için (özellikle GUI odaklı masaüstü uygulamaları), çok daha iyi araçlar mevcut.


-1

Bence C ++ ile rahat edersen, sen de C ile olacaksın.

İkisi arasındaki temel fark C ++ 'un temiz olmasıdır - nesne yönelimli - C değil :)


1
Ben büyük bir C ++ hayranıyım ama temiz demem. Ve C ++, çok paradigma anlamına gelir, bu iyi C ++ kodunun mutlaka nesne yönelimli olmadığı anlamına gelir.
KeithB

-1

C'yi bilmek size bellek yönetimi vb. İle ilgili daha fazla bilgi verecektir. Her şey ne kadar düşük seviyede olmak istediğiniz ve daha düşük bir koldaki şeyleri anlamanızın size yardım edip etmemesi ile ilgilidir. Bunu bir adım öteye götürebilir ve ayrıca montaj dilini de öğrenebilirsiniz, ancak bunların hepsi sizin için ne kadar değerli olduğuna bağlıdır.

Aynı zamanda C de programlamak isteyip istemediğinize bağlıdır. :)


-1

Evet tamam...

IMHO, iyi C++olduğunuz için gerçekten yeterli.

İddiaya girerim C ++ programcıları arayan endüstriler var ... Ama bir kez içine girdiğinizde, tüm bunlar proje gereksinimlerinize bağlıdır. Ne gerekiyorsa öğrenmeniz gerekebilir .. Java, .Net veya hatta C olabilir. .. Şirket size ödeme yapmaya hazırsa, öğrenin ...

Kariyerinizin daha erken aşamalarındaysanız, IME görüşmecileri tutumunuzu ve rahat olduğunuz dilin anlayışını inceleme eğilimindedir.

Kendi Ciyiliğini öğrenmek yerine, C ++ 'ı biraz iyice öğren .. İyi olduğun şeyi geliştir. Ben öğrenmen gerekebileceğinden eminim ... Benim için, her zaman C ++' da öğrenecek bir şeyler vardır.: )


-1

C ile ilgili bilmeniz gereken en önemli şeyin C ve C ++ arasındaki farklar olduğunu düşünüyorum. Gibi şeyler gördüğünüzde muhtemelen bir noktada bunu bazı C tarzı vardır bazı kodlar göreceksiniz ve karıştırılmamalıdır malloc, free, printf, fopen, veya fclose. Bunların ne kadar benzer olduğunu ve C ++ meslektaşlarından nasıl farklı olduklarını da bilmelisiniz.

Bunu da bilmelisiniz <<ve >>sol ve sağ vardiya operatörleri, ekleme operatörleri değilsiniz. Operatörleri aşırı yükleyebileceğiniz C ++ 'da bunlar akış ekleme ve benzeri şeyleri yapmak için aşırı yüklenmiştir, ancak yine de tamsayıları kaydırmak için kullanılmaktadır.

C ++ 'nın C'de bulunmayan tüm temel özelliklerini anladığınızdan emin olun. Eğer yeterince fakir okursanız, dillerdeki ve insanların yanlış anlamalarındaki farklılıkları içeren birçok soru göreceksiniz.

Ayrıca C ++ önişlemcisiyle hemen hemen aynı olan (ve genellikle aynı programla olan) C önişlemcisine de aşina olmalısınız. Nasıl kullanılacağını bilmek C ++ 'da size yardımcı olacaktır, ancak C' de çok daha fazlası

C ++ 'da ele alınması zor olan büyük bir şey, C ++' nın yıkıcılarıdır. Kaynakların serbest bırakılması için bu yerlerin her yerine çağrılabilir, ancak C'de bunların hepsini daha açık bir şekilde yapmanız gerekir. Bu C ++ programcılarının yapmayı unutması kolaydır.

Görüşmelere gelince, birisi sizden C'deki bazı genel algoritmalar için kod yazmanızı ister ve şöyle bir şey yaparsanız:

struct foo {
       int a;
       void * b;
};
foo x;  // in C++ this would work, but in C it would fail because struct names aren't in the
        // type name table unless you put them there with typedef

Ne yaptığınızı bilmediğinize karar vereceklerini sanmıyorum çünkü yapmadınız:

struct foo x;

coutSizi vitrine çıkarmaya çalıştıkları şey, giriş ve çıkışla başa çıkma kabiliyetiniz olmadığı sürece, C ++ 'nın ortak durumlar için kolaylaştırdığı durumlarda gerçekten kullanmamanız umrunda olmamalıdır .

Kendinizi C gerektiren bir iş için görüşme pozisyonunda bulursanız, C ++ ile çakışması dışında C bilginiz olmadığı konusunda açık olmalısınız. Muhtemelen iyi bir programcının C ++ 'dan C ++' a geçişi oldukça hızlı bir şekilde yapabilmesi gerektiğini anlayacaklardır.

Bunların hepsi söyleniyor, C bir dil kadar büyük değil. Standart kütüphane C ++ 'dan çok daha küçüktür ve en yaygın parçalarını tanımak o kadar da büyük bir iş değildir, bu yüzden onu öğrenmek gerçekten zarar veremez.

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.