C bilmiyorum. Neden öğreneyim? [kapalı]


58

İlk programlama dilim PHP ( gasp ) idi. Ondan sonra JavaScript ile çalışmaya başladım. Son zamanlarda C # 'da çalıştım.

Hiç bir zaman C gibi düşük ya da orta seviye dillere bakmadım

Programlama topluluğundaki genel fikir birliği, "C gibi bir şey öğrenmemiş bir programcının açıkçası, işaretçiler, veri türleri, değerleri değerlere göre gönderme vb."

Katılmıyorum. Ben iddia ediyorum:

  1. Yüksek seviyeli dillere kolayca erişilebildiği için, daha “programcı olmayan” kullanıcılar dalarak karışıklık yaratıyor
  2. Gerçekten yüksek seviyeli bir dilde bir şey yapılabilmesi için, "ilk önce düşük seviyeli-ilk önce öğren" in savunucusu olduğu aynı benzer kavramları anlamak gerekir.

Bazı insanların C bilmesi gerekir; Bu insanlar, düşük ve orta seviye kod yazmayı gerektiren işlere sahiptir. C'nin harika olduğuna eminim, ve C'yi bilen birkaç kötü programcının olduğundan eminim.

Neden önyargı? İyi, dürüst ve aç bir programcı olarak, eğer C'yi (öngörülemeyen bir nedenden ötürü) öğrenmek zorunda olsaydım, C'yi öğrenirdim. Dışarıdaki dillerin çokluğu göz önüne alındığında, iyi programcılar bizi neyin ilerlettiğini öğrenmeye odaklanmamalı mıydı? Bizi ilgilendiren şeyleri öğrenmemeli miyiz? Sonlu zamanı ilerletmek için faydalanmamalı mıyız ? Bazı programcılar neden buna katılmıyor?

Yaptığınız işte mükemmellik için çabalamanın, iyi programcılar ve kötü olanlar arasındaki temel belirleyici özellik olduğuna inanıyorum.

Herhangi birinin gerçek bir dünya örneği var mı, yüksek düzeyde bir dilde yazılmış bir şeyin (Java, Pascal, PHP veya JavaScript gibi) önceki bir C bilgisinden nasıl faydalandığını gösteren herhangi bir örneği var mı? Örnekler en çok takdir edilecektir.


@Stephen Oh, özür dilerim ... Yanlış anladım. (ama neden c / c ++ 'ı öğrenmeye ihtiyacın olduğunu görüyor musun?)
ApprenticeHacker

1
@ Burning Prodigy Evet, tabii ki C / C ++ 'ın gerektiği yerde bir şeyler yapmam gerekiyorsa, ya da en anlamlı olanı elbette C öğrenirim. Etim, etkili bir şekilde yapabilmek için C öğrenmeniz gerektiğini söyleyen insanlarla. yüksek seviyeli dillerde gelişir. Ve bu çok saçma.
Stephen


"işaretçi ... gibi programlama kavramlarını kaldıramayan" ifadesinin geldiği bir bağlam (url) verebilir misiniz?
k3b

Öğrenmek istediğim bir dil olsaydı, C değil de Common Lisp olurdu. Öncelikle bir C # geliştiricisi olarak, bundan daha fazla faydalanacağımdan eminim. C # ile işaretçilerimiz zaten var. Çoğunlukla, aynı çözümü daha zor bir şekilde uygulamaya çalışmak yerine, bir soruna yaklaşmanın daha fazla yolunu öğrenmeyi tercih ederim. (Tıpkı bir not olarak, yarı yalan söylüyorum. Bazı C'leri yaptım ve bunun avantajları olduğunu biliyorum. Sadece C'yi on yıl öncesine dayanan inanılmaz derecede güçlü ve etkileyici bir dile kredi vermek istedim.)
Magus

Yanıtlar:


113

C'yi bilmenin avantajı, bilgisayarın nasıl çalıştığı hakkında çok iyi bir fikre sahip olmanızdır. Programlama modeliniz sadece nasıl çalıştığını değil aynı zamanda hafızanın nasıl yerleştirildiğini de gösterir.

C'nin altındaki tek seviye, belirli bir CPU tarafından konuşulan montajdır.

(C'yi bilmenin, daha yüksek düzeyde bir dilde ne kadar az iş yapmanız gerektiğini takdir etmenizi de sağladığını da eklerdim. Umarım bu daha yüksek dilde çalışmanın maliyetini takdir edersiniz .)


12
Frank: Kafasındaki tırnağa çarptın. Bir bilgisayarın nasıl çalıştığını anlamak, bellek yönetimi ve tahsisi ile birlikte daha yüksek seviyedeki dilleri daha iyi anlayabileceğiniz fikrini öğrenmenizin nedeni, C'nin öğrenmesinin nedenidir. UDP üzerinden temel bir TCP katmanı uygulamak gibi sınıf projelerini uygulamak için C'yi öğrenmemiz gerektiğine şanslıyım. .
Chris

12
Bununla birlikte, buna katılıyorum: C, çim zeminlere sadece birkaç adım daha yaklaştırıyor, zemine değil. Tamam, hafıza düzeni denilen bir şey var. Ama fiziksel olarak ne anlama geliyor? Elektronik anlamıyorsanız bilgisayarın nasıl çalıştığını anlıyor musunuz? Kuantum mekaniği? Ve bunun gibi. Dünyada, tüm besin zincirini, üst düzey bir dilden, C aracılığıyla kuantum mekaniğine kadar derinden anlayan tek bir zihin olup olmadığından emin değilim.
Joonas Pulakka

14
Sorum şu ki, bir bilgisayarın dahili olarak nasıl çalıştığını bilmek nasıl faydalanabilir? Ne kazanıyorsun? Şu an sahip olduğunuzun takdir edilmesi, C gibi çok düşük seviyeli bir dil öğrenmek için çok iyi bir neden değildir. Bu, şu an sahip olduğum şeyleri takdir etmek için Fortran'ı öğrenmem gerektiğini söylüyor
TheLQ,

18
@TheLQ Ben suskunum. Bir bilgisayarın dahili olarak nasıl çalıştığını bilmek nasıl yararlanabilir? Ne yaptığınızla ilgili daha net bir anlayış kazanıyorsunuz, kazandığınız şey. Aksine: ilk başta makineye gerçekte ne yaptığınızı öğreniyorsunuz.
Frank Shearar

15
Bunu en doğru cevap olarak göründüğü gibi doğru olarak işaretleyeceğim. Bu, uygulamanın bir sonraki harika özelliğini geliştirmeme gerçekten yardımcı olmadığından, temel olarak "bir bilgisayarın nasıl çalıştığını" gerçekten umursamıyorum. Araba kullanmak gibi: Ben çok iyiyim, ancak ara sıvı basıncının nasıl çalıştığını daha az önemseyebilirim. Sadece frene bastığımda duruyor. Ayrıca, beş yıl boyunca bir at arabasıyla gezmek zorunda olsaydım, araba kullanmayı daha çok takdir edeceğime eminim. Bu, arabadan ziyade arabada ne kadar iyi şeyler olduğunu tahmin edemediğim anlamına gelmez.
Stephen

72

Buradaki cevapların hiçbirinin OP'nin aradığı şey olduğunu sanmıyorum, bu yüzden kendi fikrimi atacağım.

Bak, ben unapologetic C snob değilim. Benim düşüncem, eğer C'yi tanımıyorsanız, o zaman bir dereceye kadar, bir programcı olarak ne yaptığınızı gerçekten bilmiyorsunuzdur. Bu yüzden, burada bahsettiğin türden "önyargılı" bir insan olduğumu düşünüyorum.

Ancak, uygulamada, bir programcı olarak ne yaptığınızı gerçekten biliyor olsanız da bilmeseniz de, üst düzey araçlar kullanarak gerçekten harika, kullanışlı bir yazılım geliştirmenizi önleyemezsiniz. Demek istediğim, Stack Overflow'un yaratıcısı Jeff Atwood, görünüşe göre C'yi bile tanımıyor ve henüz Stack Overflow'un oldukça iyi bir web uygulaması olduğunu söyleyebilirim.

C (ya da C ++ veya montaj) öğrenmeye karar verip vermemeniz, ne tür bir programcı olmak istediğinize bağlıdır. Hiçbir gerçek ihtiyaç C öğrenmek Ama istersen gerçekten - sadece web uygulamaları veya iş uygulamaları serin geliştirmek istiyorsanız, bu iyi excel yaptığın işte - Eğer gerçekten üzerinde çalışmak istiyorsanız serin durumunu itmek projeleri sanat, o zaman bilgisayarların nasıl çalıştığını gerçekten anlamak için bir programcı olarak kendinizi yeterince ciddiye almanız gerekir . C aslında OS lingua franca olduğu gibi, hemen hemen her şey için güç sağlayan dil (Linux çekirdeğinden çoğu Java VM'sine, Python ve Ruby tercümanlarına, SQL veritabanlarına, web sunucularına ve hemen hemen her aygıt sürücüsüne) , dilin yakından anlaşılması çok yol kat ediyor.

C (veya C ++) bilmek, milyonlarca (veya yüz milyonlarca) insanı etkileyen büyük, açık kaynaklı projelere katkıda bulunmak için büyük bir fırsat yaratıyor. Python yorumlayıcısını veya Chromium web tarayıcısını geliştirmek için çalışmak ister misiniz? İlk önce C'yi, ikincisi için C ++ 'ı bilmelisin.

Bu nedenle C'yi Latin gibi ölü doğal dillerle veya at ve at arabası gibi eski teknolojilerle karşılaştırmak tamamen yanlıştır. 21. yüzyıl yazılım altyapımızın büyük bir kısmı C koduyla desteklenmektedir, bu nedenle C bugün her zaman olduğu gibi alakalı kalmaktadır.

Bu nedenle, C'yi öğrenmeniz gerekip gerekmediği, gerçekten bir programcı olarak kariyerinizden ne istediğinizi temel alır.


5
Sen gelmiyor o züppe. Tamam belki birazcık. :)
Stephen

7
Mükemmel cevap On yıl boyunca C ve C ++ öğrenmeden başarılı bir şekilde programlandım ve kariyerimin geri kalanını hiç öğrenmeden başarabilirdim. Ama geçen sene öğrendiğimden beri , sadece C ++ dilinde değil, diğer dillerde de daha iyi yazılımlar yazdım .
John M Gant,


3
C ile Latin'i karşılaştırmak neden "tamamen yanlış" olsun? Bence bu mükemmel bir benzetme. Latin, etrafımızdaki her yer. İngilizce kelime dağarcığının% 58'i Latince'den etkilenir (doğrudan veya diğer Romantik dillerden). Latince aynı zamanda kültürümüzü anlamanın anahtarıdır. Hukuk, demokrasi, din, altyapı, şehir planlama ve bir dizi başka alan Roma İmparatorluğu'na kadar uzanıyor. Latin'i görmezden geldiğin gibi C'yi görmezden gelmeyi seçebilirsin, ama onlardan asla kaçınamazsın. "Latince ve Yunanca ölü dil değil. Sadece ölümlü olmaktan vazgeçtiler." (JW McKail)
Anders Sjöqvist

2
@ AndersSjöqvist, yanlış olurdu çünkü modern dillerin gelişimini derinden etkilemesine rağmen artık kimse Latince konuşmuyor. Oysa C aktif olarak kullanılıyor ve her yerde kullanılıyor - hemen hemen her işletim sisteminde, VM'de, veritabanında veya tercümanda. Latince daha çok, diyelim ki ... Simula - yaşayan dilleri derinden etkileyen, ancak akademi dışında kullanılmayan, çoğunlukla ölü bir dil.
Charles Salvia

12

Pratik bir kural, genellikle çalıştığınızın altındaki en az bir soyutlama seviyesini anlamanız gerektiğidir. PHP veya JavaScript tercümanınızın gerçekten C veya C ++ dilinde uygulanabileceğini düşünün. Sonunda tercümanda bir hataya çarpacaksınız, hatta bir C çalışma zamanı hatası bile. Eğer C'yi anlamıyorsanız, bakıcıya bir hata raporu göndererek, onları yeniden üretebileceklerini ve umursayabileceklerini umarak ve daha sonra başparmağınızı titreyenlerle sınırlı olacaksınız. C'yi biliyorsanız, onlara sorunun nerede olduğunu ve ne olduğunu tam olarak anlayabilirsiniz.

Bu ayrıca, eğer C / C ++ 'da çalışıyorsanız, en azından platformunuzdaki montajı okuyabilmeniz gerektiği anlamına gelir.

İhtiyacınız olduğunda C öğrenmeye gelince: benim gözlemime göre çoğu programcı talep üzerine Perl / Python / Javascript öğrenebilir, ancak assembler / C / Lisp çok daha fazla zamana ihtiyaç duyar gibi görünüyor, bu yüzden ihtiyaçtan önce en azından bazı temel bilgileri öğrenmeye değer doğar.


9
Tamam, "C / C ++" ile yaşayabilirim (dil avukatları lanetlenir). Ve "Perl / Python / Javascript" tamamen mantıklı. Ama Tanrı aşkına, neden "assembler / C / Lisp"? Bu "elma / portakal / Barrack Obama" demek gibi. Bu üç dilin birbiriyle ilgisi yok.
Jason Baker

@Jason, önerdiğim tek yaygınlık, çoğu insanın dillerin üçlüsünün anında yakalanmasını zor bulduğu ve bu yüzden hemen kullanmadan önce ihtiyaç duymadan önce onlarla biraz zaman geçirmenin OP'ye değeceği anlamına geliyor. İşaretçi aritmetik ve işlevsel programlama, insanların bir anlam ifade etmeden önce onlara daha uzun süre bakmak zorunda olmaları dışında pek ortak noktalara sahip değildir.
Charles E. Grant

Daha fazla katılamadım. Diğer yoldan, daha yüksek soyutlama seviyelerine gitmek, en azından bazı programları yapabilen “ofis BT adamı / gali” genellikle yapamayanlardan daha iyi olacaktır.
Emmet

7

Önce C öğrenmeniz gerektiğine katılıyorum , ama sonunda C öğrenmeniz gerektiğine inanıyorum . Tüm soyutlamalar sızıntı yapıyor ve C'yi anlamak, bazı lüks üst düzey soyutlamaları kullandığınızda gerçekte ne olduğunu anlamayı kolaylaştırıyor. Bu, aynı zamanda tüm ciddi programcıların en azından assembler okumayı da öğrenmeleri gerektiğini düşünüyorum.

Bu düşük seviyeli kavramları öğrenmek, yüksek seviyeli şeyler hakkında mantıklı bir sonuç verir. Örneğin, C ++ ve D'de, sanal işlevlerin varsayılan argümanları, dinamik (çalışma zamanı) türünden değil, nesnenin statik (derleme süresi) türünden belirlenir. Bu, vtables ve çağıran sözleşmelerin nasıl çalıştığını ve sanal işlevleri ters şekilde uygulamanın neden çok zor olacağını anlamadığınız sürece bir anlam ifade etmiyor.


2
Belki bir AN derlemesini okumayı öğrenin. Sorun şu ki, kullandığım 10 farklı işlemci ailesinin olması ve çok farklı değişkenlerin hepsini öğrenmem, karışıklık ve kaos için bir reçetedir. AMD SHARC'ı Atmel AVR32 ve TI MSP430 ile karşılaştırmayı deneyin.
Ekim'de

@Ian: Doğru. İdeal olarak, en çok geliştirdiğiniz kemerin montaj dilini öğrenmelisiniz. Çoğu insan için bu ya x86 ya da ARM olacağını tahmin ediyorum.
dsimcha

3
“tüm ciddi programcılar sonunda en azından assembler okumayı öğrenmeli” Bu tür yorumlar beni bu soruyu başlatmaya zorladı. Bence sadece önyargılısınız efendim. Yine de, sızan soyutlamalar hakkında söylediklerinizi beğendim. Bu mantıklı. Öte yandan, bunlar benim arenada pek çok "gerçek dünya" farkı yaratmıyor. Hala yüksek seviye soyutlamayı kullanıyorum, sızdıran ya da olmayan.
Stephen

1
@Stephen, assembler dili yazmayı denemelisin. 8-bit CPU'lar zor değil ve aynı küçük şeyi hem 6502'de (C64 gibi) hem de Z80'de (CP / M iş makineleri gibi) uygulamaya çalışıyorlar aslında çok eğitici. Bazı çok temel tasarım farklılıkları nedeniyle deneyim (kayıtlara karşı indeks sayfası).

Açıkça yanlış All abstractions are leakyifadeye rağmen +1 .
Thomas Eding

7

Önyargı, statükonun bir tanesi. Eski günlerde (1980'lerde ve daha önceki), C / C ++ performans uygulamaları için neredeyse bir gereklilikti. Bu değişti, ancak üst düzey geliştiriciler genellikle bu eski skool geçmişinden geliyor ve bu bağlamdaki şeyleri görüyorlar.

Gerçek gelişimi için diğer diller olan kullanılmış - PHP ve Python iç projeler için popülerdir ve açık bir seçim durumunda o bölgede en azından temel bilgiye sahip taraftan birinin olması her zaman yararlıdır ederken, Java gibi C #, popüler biridir kaynak PHP projesi için kaynak izleme sisteminiz diyelim. Ancak, iş özellikleri hala 25 yıl önce yazılmış olan bu standart şablondan geliyor gibi görünmektedir.


6
“iş özellikleri hala 25 yıl önce yazılmış olan bu standart şablondan geliyor gibi görünüyor.” Daha doğru olamazdın.
Stephen

Tebrikler John!
Mark C,

6

Zorunlu Joel blog yazısı göndermekten nefret ettiğimden, burada onunla aynı fikirdeyim . C, programlama dilinin franca dilidir. Bir şekilde onunla etkileşime girmeyen yüksek seviyeli bir dil düşünemiyorum. Bu nedenle, C hala sistem programlama tipi şeyler için popüler bir seçimdir. C işletim sistemi düzeyinde bazı şeylerle C olmadan arabirim oluşturamazsınız

Bunun yanında, üst düzey diliniz yeterince hızlı olmadığında ne yapmayı düşünüyorsunuz? C'nin nasıl yazılacağını bilmek özellikle Ruby, Python veya PHP gibi yüksek düzeyde, dinamik olarak yazılmış bir dil kullanıyorsanız önemlidir. Ancak Java ve C # programcılarının bile zaman zaman C'ye düşmesi gerekir.


lol. Bağlantılı sütunda Joels tavsiyesi: "Burada söylediklerimi göz ardı etmek yerine, diğer öğrencilerin buluşacakları insanları bulmalarını sağlayan bir tür çevrimiçi yazılım geliştirmeyi daha iyi edersiniz."
Stephen,

3
@Stephen: İnsanların seni gerçekten fark etmelerini istiyorsan, onları yatır ya da öde.
Fred Nurk

@Fred Harika bir tavsiye, lol.
Stephen

6

Ne harika bir sümüklüböcek! (Söyledikleri gibi: Bu özel bir dövüş mü, herhangi biri katılabilir mi?)

Profesördüm ve bulduğum şey (bazı deneme-yanılma sonrasında), temel düzeyde bir bilgisayarın ne yaptığını anladılarsa öğrencilere karmaşık programlama kavramlarını yönlendirmenin çok daha kolay olmasıydı. Tüm nitty detaylarında değil, fakat temel prensip, hafızanın ne olduğu, hangi talimatların olduğu gibi, vs. C ile ilgili sevdiğim şey makineye yakın olmasıdır.

Bu, diğer öğretmenlerin aynı yere geldiğini söylemek değildir. Üst düzey bir dille başladılar (BASIC :-) ve oradan hiçbir şekilde kötü bir etki yapmadan ileri gitti.

Sonuç olarak, Stephen, haklı olabilirsin. Sanmıyorum ama daha önce yanılmışım.


4

Sanırım bu ilerleme.

Yirmi yıl önce, geleneksel bilgelik sen ben VAX Macro kullanarak üniversitede bir montajcı sınıfını almak zorunda neden olan (C gibi yüksek seviyeli dillerden kazanıyor ne anlamak için assembler öğrenmek zorunda olmasıydı; tahmin olduğunu ne kadar yararlı mezun olduktan sonra ortaya çıktı).

C'nin öğrenmesi biraz zor olduğu ve neredeyse hiç soyutlama yapmadığı (göstericiler ve bayt akışları hemen hemen) olduğu için, bir şekilde daha iyi bir programcı olacağı ya da donanımda işlerin nasıl yürüdüğü hakkında daha fazla fikir sahibi olacağına dair bir varsayım var. seviyesi.

Bu (mutlaka) doğru değil. Standart C sizi metale bir diğer 3GL'den (Pascal, Fortran vb.) Daha fazla yaklaştırmaz. Bazı C uygulamaları , bazı alanlara daha fazla erişim sağlayan kancalar sağlayabilir, ancak genel olarak çıplak işaretçiler aldığınız kadar yakındır; Örneğin, kayıt defterlerine veya durum kelimelerine doğrudan erişemezsiniz.

Sonunda, her şey opkodlar ve adresleme modları ile ilgilidir, bu yüzden eğer işlerin daha düşük seviyede nasıl işlediğiyle gerçekten ilgileniyorsanız, C üzerinde öğrenme uzmanı olarak daha iyi hizmet görürsünüz.

Tek başına, C öğrenmek (mutlaka) sizi daha iyi bir programcı yapmaz. Yine de, gerçek string tipleri ve standartlaştırılmış konteyner kütüphaneleri için kesinlikle bir takdir sağlayacaktır.


Sanırım "takdir", onu koymanın bir yoludur. Lise programlama dersimde çoğunlukla sadece "Bu işlevi kullanmam gerekiyor. LOLOMGCHAR * 'ı WTFBBQCHAR *' a nasıl dönüştürebilirim?"
Katana314

Bence C öğrenmesi kolaydı. en azından benim için sadece Kernighan & Ritchie'yi okudum.
robert bristow-johnson

2

Dil bir araçtır. Sadece web sayfaları ve benzeri şeyler yazmanız gerekiyorsa, o zaman C'yi öğrenmek zorunda kalmadan kurtulabileceğinizden eminim, aynı şekilde, sadece plastik model kitler yaparsanız, sadece keskin bir bıçak ve tutkal, anahtar normalde gerekli değildir.

Sınırlandırılmış bellek kaynaklarına sahip gömülü sistemler için kod yazıyorum (yakın zamanda yaptığım en büyüğü 16kbayt ve BÜYÜK'tür) Bu pazarda C veya assembler tek seçenek ve kabarık üst düzey dillerden herhangi biri işe yaramıyor.


1
Bu harika ... Ama herkes bunu yapmaz. Çıkarım insanlar gibi görünüyor değil , en azından, sizin gömülü sistemler noktasında bağlamında modeliniz benzetme alarak - gömülü sistemler için yazma sadece oynamak değil, ciddi gelişmeyi yapıyoruz. Açıkçası durum böyle değil ve C'ye dokunmadan büyük ölçekli üretim uygulamaları yazmak mümkün.
JohnL

Tabii ki C'ye yaklaşmadan büyük ölçekli üretim uygulamaları yazmak mümkündür. C kullanmadan önce 10 yıl boyunca kod yazdım. PL / M, Pascal, ADA ve montajcı kullandım. Bunlar, makinenin altında yatan mekaniği öğrenmek için C kadar kolaydı ve hatasız kod üretmek için genellikle daha iyi.
Ekim’de 13

Harika - yukarıdaki cevabınız bana bu şekilde düşündüğünüz izlenimini
vermediyse

Java motorlarında yerleşik kullanımı hedefleyen herhangi bir deneyiminiz var mı?

2

Benim tecrübeme göre, bir süredir C / C ++, iyi programcıları VB6 kodlayıcılarından ayıran iyi bir tampondu. Beş yıllık C / C ++ yılını yaptıktan sonra VB6'da çalışan bir iş buldum. Kodlayıcıların kalitesine (ya da eksikliğine) şaşırdım. Dilin bağırsaklarına, tasarıma ya da performansa ilgileri çok azdı. Ne yazık ki, şirket .Net'e taşındığında, C / C ++ kodlayıcıları ve .Net kodlayıcıları aynı araçları kullanıyordu. VB kodlayıcıları daha da kötü VB.Net kodlayıcılarıydı. Tüm gelişme ASP.NET'e gittiğinde durum daha da kötüye gitti. Aniden bir kontrolü sürükleyip bırakabilen herkes bir programcıydı.

Ancak iş piyasasında, sert kodlayıcıları (örneğin, C / C ++) ve turistleri ayırt edecek pek bir şey yoktu.

Bu nedenle, özgeçmişinizde C veya C ++ olması sizi riff raff'dan ayırmanıza yardımcı olabilir.


2

Önceden sorulan sorular: C öğrenmek zorunda olmadığınızı teyit mi istiyorsunuz? Eğer saf C (mutlaka C ++ değil) öğrenirseniz , bilgisayarın yürütme modelini tam olarak anlayacaksınız. Özellikle hafıza ve tahsisat hakkında. Bu şey aynı zamanda daha yüksek seviyedeki dilleri programlayan insanlar için de önemlidir.

Bir PHP programcısı için kodun verilen makinede nasıl yürütüldüğü daha az şeffaftır. Ağ aktarımı uygulamadaki şişe boynudur, çünkü PHP programcısı için önemli olmayabilir.

Düz PHP / Python / C #, dil ve CPU arasında bir çok soyutlama katmanına sahiptir. bu katmanlar o kadar kalındır ki, içinden bakmanıza izin vermezler. C öğrendiğinizde, siz ve CPU ile işletim sistemi arasında ince bir tabaka var. Bu programlamayı kolaylaştırmaz (ve daha iyi olmayabilir). Fakat aslında CPU'nun nasıl çalıştığını öğrenebilirsiniz. “Orta” C'yi öğrendikten sonra, aslında bu bilgiyi daha yüksek seviyedeki diline bağlamaya başlayabilirsiniz. Bu, kazanacağınız ani faydadır.

Bence bir programcı her zaman farklı programlama kavramları öğrenmek için biraz zaman harcamalıdır. Kesinlikle C'ye bakmanın yanı sıra Clojure, Haskell, Prolog gibi daha yüksek seviye programlama dillerine de bir göz atmanın karşılığını veriyor.

Bunlarda bir usta olmak zorunda değilsiniz, size sadece programlama dillerinin "seviyelerinin" ikili olmadığı, ancak birçok seviyenin olduğu dersini öğretecekler. Onları yukarıdan aşağıya doğru (Assembler) tanıyın. Seni daha iyi bir programcı yapacak.


2

Dilde yazılmış çok önemli kodun büyük miktarda olması nedeniyle C dilinde yazılmış kodu okumak için yeterince C bilmeniz gerekir. Konu hakkında kapsamlı bir kılavuzdan geçerek elde edeceğiniz her şey budur (Koçhan'ın "C programlamasını" kullandım), zaten, herhangi bir dilde kod yazmadan. Dilinizi kapsamlı bir şekilde kullanmanızı gerektiren bir durumda ortaya çıkarsanız, inşa etmek için iyi bir temeliniz olacaktır. Makine size kesilmiş bir kara kutu ise muhtemelen Duntemanns Assembly kitabı gibi bir şey incelemek istersiniz. Ayrıca Petzold'un "Kod" unu da tavsiye ederim.

Bunun dışında - C'deki temel okuryazarlık ve altta yatan makineye temel aşinalık - çalışma zamanınızı SICP, TCP / IP Illustrated ya da Beton Matematiği, algoritmalar veya veri yapısı üzerine kitaplar gibi gerçek şeyler için harcayabileceksiniz. . Gerçek şeyler

PHP'yi kodlarken C'yi okumak için çok zaman harcamak, sadece fırsat maliyetine değmez. Öğrenilecek daha yararlı şeyler var. C gerçekten sadece ders çalışırken ve kullanırken iyi öğrenebileceğiniz, ancak ihtiyaç duyduğunuzda alabileceğiniz başka bir dildir.

Sert şeyleri terle.


1

C, diğer dilleri yazmak için kullanılan dildir. CPU ve istediğiniz gibi diğer donanım ile samimi almanızı sağlar.

C'yi bilmiyorsanız, diğer dillerin yaptıkları sonuçlara nasıl ulaştığını bilmiyorsunuz.

Soyutlama elbette önemli bir kavramdır ve herkes kendi seçim çerçevesinin vaat ettiği sonuçları nasıl elde ettiğini bilmek zorunda değildir. İyi bir kod yazmak için, 20 yılını C yazmak için harcamanıza veya çok sayıda miras kullandığınızda kararsızlıklarınıza ne olacağını düşünmeniz gerekmez.

Artık, 4 zamanlı bir motorun nasıl çalıştığını anlamadan veya gerçekten bir vites değiştirme kullanmadan (manuel vites kutusu) bir araba sürebilirsiniz.

Bununla birlikte, kaputun altında neler olup bittiğini anlarsanız, zaman zaman, bu bilgiye sahip olmayan bir kişinin çoğaltmak için mücadele edeceği olağanüstü sonuçlar elde edebilirsiniz.


1

C (ve muhtemelen C ++) yüzdüğünüz denizdir. Kodunuzu çalıştıracak işletim sistemi muhtemelen C (ve C ++) kodludur. Böylece, işletim sistemi hizmetlerine erişmek için yerel API'niz C’de olacaktır.

Aşağıda ne olduğunu bilmeden yapabilirseniz, C'yi bilmeye gerek yoktur. Ancak, çoğu programcının yaşamlarında bir zamanlar daha düşük seviyelere dalması gerekir.

Aynı zamanda gelişim alanlarındaki uzmanlığınıza da dayanmaktadır. Örneğin, HTML, Javascript ve bazı sunucu tarafı komut dosyaları yazan bir web geliştiricisi asla C hakkında bir şey bilmesi gerekmeyebilir, ancak dağıtılmış bir sistem veya oyun geliştiricisi olacaktır.

Mesleğiniz için çok temel bir şeyi öğrenerek birkaç haftayı harcamak asla acı vermez.


1

C birçok avantaja sahiptir:

  1. C düşük seviyeli bir dildir. Çekirdek ve sürücü geliştirmek için c'yi kullanabilirsiniz.
  2. C en hızlı dildir. Birçok güç yazılımı c tarafından geliştirilebilir. Örneğin: memcached, redis, nginx, apache, mysql vs.
  3. C bir çapraz platform dilidir. C tarafından geliştirilen program her platformda çalışabilir. Diğer çapraz platform dilleri bunu yapamaz. Java, python, php vb iOS platformunda çalışamaz.
  4. C ++ birçok gömülü sistemde çalışamaz.
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.