Saya tidak tahu C. Dan mengapa saya harus mempelajarinya? [Tutup]


58

Bahasa pemrograman pertama saya adalah PHP ( terkesiap ). Setelah itu saya mulai bekerja dengan JavaScript. Saya baru saja menyelesaikan pekerjaan di C #.

Saya tidak pernah melihat bahasa tingkat rendah atau menengah seperti C.

Konsensus umum dalam komunitas pemrograman pada umumnya adalah bahwa "seorang programmer yang belum belajar sesuatu seperti C, terus terang, tidak bisa menangani konsep pemrograman seperti pointer, tipe data, melewati nilai dengan referensi, dll."

Saya tidak setuju. Saya berpendapat bahwa:

  1. Karena bahasa tingkat tinggi mudah diakses, lebih banyak "non-programer" masuk dan membuat kekacauan
  2. Untuk benar-benar menyelesaikan apa pun dalam bahasa tingkat tinggi, orang perlu memahami konsep serupa yang sama yang kebanyakan penganut Evangelisasi "pelajari-tingkat-rendah-pertama".

Beberapa orang perlu tahu C; orang-orang itu memiliki pekerjaan yang mengharuskan mereka menulis kode tingkat rendah hingga menengah. Saya yakin C luar biasa, dan saya yakin ada beberapa programmer yang buruk yang tahu C.

Kenapa bias? Sebagai programmer yang baik, jujur, dan lapar, jika saya harus belajar C (karena alasan yang tidak terduga), saya akan belajar C. Mengingat banyaknya bahasa di luar sana, bukankah programmer yang baik harus fokus mempelajari apa yang memajukan kami? Bukankah kita seharusnya belajar apa yang menarik minat kita? Haruskah kita tidak menggunakan waktu yang terbatas untuk bergerak maju ? Mengapa beberapa programmer tidak setuju dengan ini?

Saya percaya bahwa memperjuangkan keunggulan dalam apa yang Anda lakukan adalah sifat deterministik mendasar antara programmer yang baik dan yang buruk.

Adakah yang punya contoh dunia nyata tentang bagaimana sesuatu ditulis dalam bahasa tingkat tinggi — katakanlah Java, Pascal, PHP, atau JavaScript — benar-benar mendapat manfaat dari pengetahuan C sebelumnya? Contoh akan sangat dihargai.


@Stephen Oh, maaf ... saya salah paham. (tapi kamu mengerti mengapa kamu perlu belajar c / c ++ kan?)
ApprenticeHacker

1
@burningprodigy Ya, dalam hal saya perlu melakukan sesuatu di mana C / C ++ diperlukan, atau yang paling masuk akal, tentu saja saya akan belajar C. Daging sapi saya bersama orang-orang yang mengatakan Anda perlu belajar C untuk dapat secara efektif berkembang dalam bahasa tingkat tinggi. Dan itu tidak masuk akal.
Stephen

@burningprodigy, mari kita lanjutkan diskusi ini dalam obrolan
Stephen

dapatkah Anda memberi kami beberapa konteks (url) di mana "tidak dapat menangani konsep pemrograman seperti pointer ..." berasal?
k3b

Jika ada satu bahasa yang saya harap bisa saya pelajari, itu adalah Common Lisp, bukan C. Sebagai pengembang C #, saya agak yakin saya akan mendapat manfaat lebih dari itu. Kami sudah memiliki pointer di C #. Sebagian besar, saya lebih suka belajar lebih banyak cara untuk mendekati masalah daripada mencoba menerapkan solusi yang sama dengan cara yang lebih sulit. (Sama seperti catatan, saya setengah bohong. Saya telah melakukan beberapa C, dan saya tahu itu memiliki kelebihan. Hanya ingin memberi penghargaan pada bahasa yang sangat kuat dan ekspresif yang mendahului C selama satu dekade.)
Magus

Jawaban:


113

Keuntungan mengetahui C adalah Anda memiliki ide yang sangat bagus tentang cara kerja komputer. Bukan hanya bagaimana model pemrograman Anda bekerja, tetapi bagaimana memori diletakkan, dan sejenisnya.

Satu-satunya level di bawah C adalah rakitan yang diucapkan oleh CPU tertentu.

(Saya akan menambahkan bahwa mengetahui C juga memungkinkan Anda menghargai betapa lebih sedikit pekerjaan yang harus Anda lakukan dalam bahasa tingkat yang lebih tinggi. Dan semoga penghargaan atas biaya yang diperlukan untuk bekerja dalam bahasa tingkat yang lebih tinggi itu.)


12
Frank: Anda memukul paku di kepala. Memahami bagaimana komputer bekerja, manajemen memori dan alokasi bersama dengan gagasan bahwa Anda dapat lebih menghargai bahasa tingkat yang lebih tinggi adalah alasan untuk belajar C. Saya beruntung kita harus belajar C untuk mengimplementasikan proyek kelas seperti menerapkan lapisan TCP dasar di atas UDP .
Chris

12
Saya setuju dengan ini, meskipun: C membawa Anda hanya beberapa langkah lebih dekat ke akar rumput, tidak semua jalan ke tanah. Ok, ada yang namanya tata letak memori. Tetapi apa artinya secara fisik? Apakah Anda mengerti cara kerja komputer jika Anda tidak mengerti elektronik? Mekanika kuantum? Dan seterusnya. Saya tidak yakin apakah ada satu pikiran di dunia ini yang sangat memahami seluruh rantai makanan dari bahasa tingkat tinggi, melalui C, hingga mekanika kuantum.
Joonas Pulakka

14
Pertanyaan saya adalah bagaimana Anda bisa mendapat manfaat dari mengetahui bagaimana komputer bekerja secara internal? Apa yang kamu dapat? Penghargaan atas apa yang Anda miliki sekarang bukan alasan yang sangat baik untuk belajar bahasa tingkat sangat rendah seperti C. Seperti mengatakan saya harus belajar Fortran untuk menghargai apa yang saya miliki sekarang
TheLQ

18
@TheLQ Saya tidak bisa berkata-kata. Bagaimana Anda bisa mendapat manfaat dari mengetahui bagaimana komputer bekerja secara internal? Anda mendapatkan pemahaman yang lebih jelas tentang apa yang Anda lakukan, itulah yang Anda peroleh. Alih-alih: Anda mempelajari apa yang sebenarnya Anda lakukan pada mesin itu.
Frank Shearar

15
Saya akan menandai ini sebagai benar, karena sepertinya itu menjadi jawaban favorit. Yang mengatakan, saya tidak terlalu peduli "bagaimana komputer bekerja" pada tingkat dasar, karena itu benar-benar tidak membantu saya mengembangkan fitur keren berikutnya dari aplikasi saya. Ini seperti mengendarai mobil: Saya sangat ahli dalam hal itu, tetapi tidak peduli bagaimana tekanan fluida bekerja. Itu hanya berhenti ketika saya menekan rem. Juga, saya yakin saya akan lebih menghargai mengendarai mobil jika saya harus pertama kali mengendarai kuda dan kereta selama lima tahun. Tidak berarti saya tidak mampu mendalilkan betapa jauh lebih baik hal-hal dengan mobil daripada kereta.
Stephen

72

Saya tidak berpikir salah satu jawaban di sini benar-benar apa yang dicari OP, jadi saya akan melemparkan pendapat saya sendiri.

Dengar, aku sombong C yang menyesal. Sikap saya adalah jika Anda tidak tahu C, maka sampai batas tertentu Anda tidak benar - benar tahu apa yang Anda lakukan sebagai seorang programmer. Jadi, saya pikir saya adalah tipe orang "bias" yang Anda bicarakan di sini.

Namun, dalam praktiknya, apakah Anda benar - benar tahu apa yang Anda lakukan sebagai programmer tidak serta merta mencegah Anda mengembangkan perangkat lunak yang benar-benar mengagumkan dan bermanfaat menggunakan alat tingkat tinggi. Maksudku, pencipta Stack Overflow, Jeff Atwood, tampaknya bahkan tidak tahu C, namun saya akan mengatakan Stack Overflow adalah aplikasi web yang sangat bagus.

Apakah Anda memutuskan untuk belajar C (atau C ++, atau perakitan) tergantung pada jenis programmer yang Anda inginkan. Jika Anda hanya ingin mengembangkan aplikasi web atau aplikasi bisnis yang keren, itu bagus - tidak perlu belajar C. Tetapi jika Anda ingin benar-benar unggul dalam apa yang Anda lakukan - jika Anda ingin bekerja pada proyek yang sangat keren yang mendorong keadaan seni, maka Anda benar-benar perlu menganggap diri Anda cukup serius sebagai seorang programmer untuk benar-benar memahami cara kerja komputer. Karena C pada dasarnya adalah OS lingua franca, serta bahasa yang menggerakkan hampir semua hal lain (dari kernel Linux ke sebagian besar VM Java, ke penterjemah Python dan Ruby, database SQL, server web, dan hampir semua driver perangkat) , pemahaman yang mendalam tentang bahasa berjalan jauh.

Belum lagi bahwa mengetahui C (atau C ++) membuka peluang besar untuk berkontribusi pada proyek sumber terbuka besar yang berdampak pada jutaan (atau ratusan juta) orang. Ingin bekerja untuk meningkatkan juru bahasa Python, atau browser web Chromium? Nah, Anda perlu tahu C untuk yang pertama dan C ++ untuk yang terakhir.

Itu sebabnya membandingkan C dengan bahasa alami yang mati seperti Latin atau teknologi yang sudah ketinggalan zaman seperti kuda dan kereta benar-benar salah. Sebagian besar infrastruktur perangkat lunak abad ke-21 kami ditenagai oleh kode C, itulah sebabnya C tetap sama relevannya dengan hari ini.

Jadi, apakah Anda harus belajar C atau tidak sangat tergantung pada apa yang Anda inginkan dari karier Anda sebagai seorang programmer.


5
Anda tidak terdengar bahwa sombong. Oke, mungkin sedikit. :)
Stephen

7
Jawaban yang sangat bagus. Saya berhasil memprogram selama sepuluh tahun tanpa belajar C dan C ++, dan bisa saja melanjutkan sisa karir saya tanpa pernah mempelajarinya. Tetapi sejak saya mempelajarinya tahun lalu, saya telah menulis perangkat lunak yang lebih baik , tidak hanya di C ++, tetapi juga dalam bahasa saya yang lain.
John M Gant


3
Mengapa "sepenuhnya salah" untuk membandingkan C dengan Latin? Saya pikir ini analogi yang bagus. Bahasa Latin ada di mana-mana di sekitar kita. 58% dari kosakata bahasa Inggris dipengaruhi oleh Latin (langsung atau melalui bahasa Roman lainnya). Latin juga memegang kunci untuk memahami budaya kita. Hukum, demokrasi, agama, infrastruktur, perencanaan kota, dan berbagai bidang lainnya dapat ditelusuri kembali ke Kekaisaran Romawi. Anda dapat memilih untuk mengabaikan C dengan cara yang sama seperti Anda dapat mengabaikan bahasa Latin, tetapi Anda tidak pernah bisa menghindarinya. "Latin dan Yunani bukan bahasa mati. Mereka hanya berhenti menjadi fana." (JW McKail)
Anders Sjöqvist

2
@ AndersSjöqvist, itu akan salah karena tidak ada yang berbicara bahasa Latin lagi, meskipun telah sangat mempengaruhi perkembangan bahasa modern. Sedangkan C secara aktif digunakan dan digunakan di mana - mana - di hampir setiap OS, VM, basis data atau juru bahasa. Bahasa Latin lebih seperti, katakanlah ... Simula - bahasa yang sebagian besar sudah mati yang telah sangat mempengaruhi bahasa hidup, namun tidak digunakan di luar akademia.
Charles Salvia

12

Aturan praktis praktisnya adalah Anda harus memahami setidaknya satu tingkat abstraksi di bawah yang biasanya Anda gunakan. Pertimbangkan bahwa penerjemah PHP atau JavaScript Anda sebenarnya dapat diimplementasikan dalam C atau C ++. Akhirnya Anda akan menemukan bug di interpreter atau bahkan kesalahan runtime C. Jika Anda tidak mengerti C, Anda akan terbatas mengirim laporan bug ke pengelola, berharap mereka dapat mereproduksi dan peduli tentang hal itu, dan kemudian memutar-mutar ibu jari Anda. Jika Anda tahu C, Anda dapat memberi tahu mereka persis di mana masalahnya dan apa masalahnya.

Ini juga berarti bahwa jika Anda bekerja di C / C ++, Anda setidaknya harus dapat membaca perakitan di platform Anda.

Adapun untuk belajar C saat Anda membutuhkannya: pengamatan saya adalah bahwa sebagian besar programmer dapat mempelajari Perl / Python / Javascript sesuai permintaan, tetapi assembler / C / Lisp tampaknya membutuhkan lebih banyak waktu, jadi ada baiknya belajar setidaknya beberapa dasar sebelum kebutuhan muncul.


9
Oke, "C / C ++" Saya bisa hidup dengan (pengacara bahasa dikutuk). Dan "Perl / Python / Javascript" sangat masuk akal. Tetapi untuk cinta Tuhan, mengapa "assembler / C / Lisp"? Itu seperti mengatakan "apel / jeruk / Barrack Obama". Ketiga bahasa itu tidak ada hubungannya satu sama lain.
Jason Baker

@Jason, satu-satunya kesamaan yang saya sarankan adalah bahwa kebanyakan orang menemukan bahwa trio bahasa lebih sulit untuk dipahami, dan jadi mungkin bernilai OP saat menghabiskan waktu bersama mereka sebelum kebutuhan mendesak untuk menggunakannya muncul. Pointer aritmatika dan pemrograman fungsional tidak memiliki banyak kesamaan kecuali bahwa orang tampaknya harus menatap mereka lebih lama sebelum mereka masuk akal.
Charles E. Grant

Saya sangat setuju. Sebaliknya, untuk tingkat abstraksi yang lebih tinggi, “office IT guy / gal” yang dapat melakukan setidaknya beberapa pemrograman biasanya akan lebih baik daripada yang tidak bisa.
Emmet

7

Saya tidak setuju bahwa Anda perlu belajar C terlebih dahulu , tetapi saya yakin Anda harus belajar C pada akhirnya . Semua abstraksi bocor dan memahami C memudahkan untuk memahami apa yang sebenarnya terjadi ketika Anda menggunakan abstraksi tingkat tinggi yang bagus. Yang mengatakan, saya juga berpikir semua programmer yang serius akhirnya harus belajar membaca assembler setidaknya, untuk alasan yang sama.

Mempelajari konsep-konsep tingkat rendah ini memberikan kemampuan mengejutkan tentang hal-hal tingkat tinggi. Misalnya, dalam C ++ dan D, argumen default ke fungsi virtual ditentukan oleh tipe statis (waktu kompilasi) objek, bukan tipe dinamis (runtime). Ini tidak masuk akal kecuali Anda memahami bagaimana vtables dan konvensi pemanggilan bekerja dan mengapa akan sangat sulit untuk mengimplementasikan fungsi virtual dengan cara yang berlawanan.


2
Belajar membaca bahasa Majelis AN mungkin. Masalahnya adalah saya memiliki lebih dari 10 keluarga prosesor berbeda yang saya gunakan dan mempelajari semua varian yang sangat berbeda adalah resep untuk kebingungan dan kekacauan. Coba bandingkan AMD SHARC dengan Atmel AVR32 dan TI MSP430.
uɐɪ

@Ian: Benar. Idealnya Anda harus mempelajari bahasa rakitan dari lengkungan apa pun yang paling Anda kembangkan. Bagi kebanyakan orang, saya kira ini akan menjadi x86 atau ARM.
dsimcha

3
"semua programmer yang serius akhirnya harus belajar untuk setidaknya membaca assembler" Ini komentar seperti ini yang membuat saya mulai dengan pertanyaan ini. Saya pikir Anda hanya bias, Pak. Meskipun, saya suka apa yang Anda katakan tentang abstraksi bocor. Itu masuk akal. Di sisi lain, hal-hal ini tidak membuat banyak perbedaan "dunia nyata" di arena saya. Saya masih menggunakan abstraksi tingkat tinggi, bocor atau tidak.
Stephen

1
@Stephen, Anda harus mencoba menulis bahasa assembler. CPU 8-bit tidak sulit dan mencoba untuk mengimplementasikan hal kecil yang sama di kedua 6502 (seperti C64) dan Z80 (seperti mesin bisnis CP / M) sebenarnya sangat mendidik pengalaman karena beberapa perbedaan desain yang sangat mendasar (halaman indeks versus register).

+1 meskipun ada All abstractions are leakypernyataan yang salah .
Thomas Eding

7

Biasnya adalah salah satu dari status quo. Di masa lalu (1980-an dan sebelumnya), C / C ++ cukup banyak persyaratan untuk aplikasi kinerja. Itu berubah tetapi pengembang senior umumnya berasal dari latar belakang skool-lama dan melihat hal-hal dalam konteks itu.

Untuk pengembangan yang sebenarnya bahasa lain yang digunakan - C # adalah salah satu yang populer, seperti Jawa, sedangkan PHP dan Python populer untuk proyek-proyek internal dan itu selalu berguna untuk memiliki seseorang di tangan dengan setidaknya pengetahuan dasar di daerah itu jika anda memilih terbuka sumber proyek PHP untuk, katakanlah, sistem pelacakan bug Anda. Namun, spesifikasi pekerjaan tampaknya masih berasal dari template standar yang ditulis 25 tahun yang lalu.


6
"spesifikasi pekerjaan tampaknya masih berasal dari templat standar yang ditulis 25 tahun yang lalu." Anda tidak bisa lebih benar.
Stephen

Selamat, John!
Mark C

6

Meskipun saya benci memposting posting blog Joel yang wajib, saya setuju dengannya di sini . C adalah lingua franca pemrograman. Saya tidak bisa memikirkan bahasa tingkat tinggi yang entah bagaimana tidak bisa berinteraksi dengannya. Karena itu, C masih menjadi pilihan populer untuk hal-hal jenis pemrograman sistem. Anda tidak dapat berinteraksi dengan beberapa hal di level OS tanpa C.

Selain itu, apa yang Anda rencanakan untuk dilakukan ketika bahasa tingkat tinggi Anda tidak cukup cepat? Mengetahui cara menulis C sangat penting saat Anda menggunakan bahasa tingkat tinggi yang diketik secara dinamis seperti Ruby, Python, atau PHP. Tetapi bahkan programmer Java dan C # perlu drop down ke C dari waktu ke waktu.


lol. Joels memberi nasihat di kolom yang ditautkan: "Sebaiknya Anda mengabaikan apa yang saya katakan di sini dan bukannya membangun semacam perangkat lunak online yang memungkinkan siswa lain menemukan orang untuk berkencan dengannya."
Stephen

3
@Stephen: Jika Anda ingin orang benar-benar memperhatikan Anda, minta mereka membayar atau membayar.
Fred Nurk

@ Fred Saran bagus, lol.
Stephen

6

Sungguh siput yang hebat! (Seperti yang mereka katakan: Apakah ini pertarungan pribadi, atau adakah yang bisa bergabung?)

Saya adalah seorang profesor, dan apa yang saya temukan (setelah beberapa percobaan dan kesalahan) adalah bahwa lebih mudah untuk membimbing siswa melalui konsep pemrograman yang rumit jika mereka mengerti, pada tingkat dasar, apa yang dilakukan komputer. Tidak dalam semua rincian seluk beluk, tetapi prinsip dasar, seperti apa memori itu, apa instruksi, dll. Apa yang saya sukai tentang C adalah dekat dengan mesin.

Itu tidak berarti guru lain datang ke tempat yang sama. Mereka memulai dalam bahasa tingkat tinggi (BASIC :-) dan maju dari sana, tanpa efek buruk yang jelas.

Jadi intinya, Stephen, Anda mungkin benar. Saya tidak akan berpikir begitu, tetapi saya pernah salah sebelumnya.


4

Saya kira ini adalah kemajuan.

Dua puluh tahun yang lalu, kebijaksanaan konvensional adalah bahwa Anda harus belajar assembler untuk memahami apa yang Anda peroleh dari bahasa tingkat tinggi seperti C (itulah sebabnya saya harus mengambil kelas assembler di perguruan tinggi menggunakan VAX Macro; tebak betapa bergunanya itu ternyata setelah lulus).

Ada sebuah takhayul bahwa karena C agak sulit untuk dipelajari dan hampir tidak ada abstraksi (pointer dan byte stream cukup banyak), mempelajarinya entah bagaimana akan membuat Anda menjadi programmer yang lebih baik atau memberi Anda wawasan yang lebih luas tentang cara kerja perangkat keras. tingkat.

Ini tidak (tentu) benar. Standar C tidak membuat Anda lebih dekat dengan logam daripada 3GL lainnya (Pascal, Fortran, dll.). Beberapa implementasi C mungkin menyediakan kait yang memberi Anda akses lebih besar ke beberapa area, tetapi secara umum pointer telanjang hampir sedekat yang Anda dapatkan, yang sama sekali tidak dekat. Anda tidak dapat langsung mengakses register atau kata-kata status, misalnya.

Pada akhirnya, semuanya tergantung pada opcode dan mode pengalamatan, jadi jika Anda benar - benar tertarik pada bagaimana hal-hal bekerja pada level yang lebih rendah, Anda sebaiknya dilayani belajar assembler di atas C.

Dengan sendirinya, belajar C tidak akan (selalu) membuat Anda seorang programmer yang lebih baik. Itu pasti akan memberi Anda penghargaan untuk jenis string aktual dan perpustakaan kontainer standar.


Saya kira "penghargaan" adalah salah satu cara untuk menggambarkannya. Di kelas pemrograman sekolah menengah saya, sebagian besar hanya pertanyaan "Saya perlu menggunakan fungsi ini. Bagaimana cara mengubah LOLOMGCHAR * menjadi WTFBBQCHAR *?"
Katana314

Saya pikir C mudah dipelajari. setidaknya bagiku hanya dengan membaca Kernighan & Ritchie.
robert bristow-johnson

2

Bahasa adalah alat. Jika Anda hanya perlu menulis halaman web dan sejenisnya maka saya yakin Anda dapat pergi tanpa harus belajar C, dengan cara yang sama bahwa jika Anda hanya pernah membuat model kit plastik Anda hanya perlu pisau dan lem yang tajam, sebuah spanner biasanya tidak diperlukan.

Saya menulis kode untuk sistem tertanam dengan sumber daya memori sangat terbatas (yang terbesar saya lakukan baru-baru ini adalah 16kbyte dan itu BESAR) Di pasar ini maka C atau assembler adalah satu-satunya pilihan dan salah satu bahasa tingkat tinggi yang halus tidak berfungsi.


1
Itu hebat ... Tapi tidak semua orang melakukan itu. Implikasinya adalah bahwa orang-orang yang tidak menulis untuk embedded system hanya bermain dan tidak melakukan pengembangan serius - setidaknya, mengambil analogi model Anda dalam konteks titik embedded system Anda. Jelas bukan itu masalahnya dan mungkin untuk menulis aplikasi produksi skala besar tanpa pernah menyentuh C.
JohnL

Tentu saja mungkin untuk menulis aplikasi produksi skala besar tanpa mendekati C. Saya menulis kode selama 10 tahun sebelum saya menggunakan C. Saya menggunakan PL / M, Pascal, ADA dan assembler. Ini dengan mudah seperti C untuk mempelajari mekanika yang mendasari mesin, dan seringkali lebih baik untuk menghasilkan kode bebas kesalahan.
u

Hebat - meskipun jawaban Anda di atas tidak memberi saya kesan bahwa Anda berpikiran seperti itu, maka balasan saya ...
JohnL

Apakah Anda memiliki pengalaman dengan mesin Java yang menargetkan penggunaan tertanam?

2

Dalam pengalaman saya, untuk sementara waktu C / C ++ adalah buffer yang baik yang memisahkan programmer yang baik dari coders VB6. Setelah melakukan lima tahun aneh C / C ++, saya mendapat pekerjaan di VB6. Saya kagum dengan kualitas (atau ketiadaan) dari coders. Mereka memiliki sedikit minat pada nyali bahasa, dalam desain atau tentang kinerja. Sayangnya, ketika perusahaan pindah ke. Net, C / C ++ coders dan .Net coders menggunakan alat yang sama. Para VB coders bahkan lebih buruk lagi VB.Net coders. Situasi bertambah buruk ketika semua pengembangan pergi ke ASP.NET. Tiba-tiba siapa pun yang bisa menarik dan melepas kontrol adalah seorang programmer.

Namun, di pasar kerja, tidak banyak yang membedakan coders hard-core (ex C / C ++) dan para wisatawan.

Dengan demikian, memiliki C atau C ++ di resume Anda dapat membantu membedakan Anda dari riff-raff.


2

Ditanyakan secara proaktif: Apakah Anda meminta konfirmasi bahwa Anda tidak harus belajar C? Jika Anda mempelajari C murni (bukan C ++ tentu saja) Anda akan mendapatkan pemahaman menyeluruh tentang model eksekusi komputer. Terutama soal memori dan alokasi. Hal ini juga penting bagi orang yang memprogram dalam bahasa tingkat yang lebih tinggi.

Untuk seorang programmer PHP, hanya kurang transparan bagaimana kode dieksekusi pada mesin yang diberikan. Mungkin tidak masalah bagi programmer PHP karena transfer Jaringan adalah leher botol dalam aplikasi, dll.

PHP / Python / C # biasa memiliki banyak lapisan abstraksi antara bahasa dan CPU. lapisan-lapisan ini sangat tebal sehingga tidak memungkinkan Anda untuk melihatnya. Ketika Anda belajar C, ada selembar tipis antara Anda dan CPU dan sistem operasi. Itu tidak membuat pemrograman lebih mudah (dan bahkan mungkin tidak lebih baik). Tetapi Anda sebenarnya bisa mempelajari cara kerja CPU. Setelah Anda tahu "menengah" C, Anda dapat benar-benar mulai menghubungkan pengetahuan itu ke bahasa tingkat yang lebih tinggi. Ini adalah manfaat langsung yang akan Anda dapatkan.

Menurut pendapat saya seorang programmer harus selalu menghabiskan waktu mempelajari konsep pemrograman yang berbeda. Ini pasti bermanfaat untuk melihat C, tetapi juga untuk melihat bahkan bahasa pemrograman tingkat yang lebih tinggi seperti Clojure, Haskell, Prolog.

Anda tidak harus menjadi ahli dalam hal ini, mereka hanya akan mengajarkan Anda pelajaran bahwa "level" dari bahasa pemrograman tidak biner tetapi ada banyak level. Kenali mereka, dari atas ke bawah (Assembler). Itu akan membuat Anda seorang programmer yang lebih baik.


2

Anda perlu cukup tahu C untuk membaca kode yang ditulis dalam C, karena banyaknya kode yang sangat penting yang ditulis dalam bahasa tersebut. Hanya itu yang akan Anda pertahankan agar tidak berjalan baik melalui manual yang menyeluruh tentang subjek (saya menggunakan "pemrograman dalam bahasa C" Kochan) tanpa benar-benar harus kode dalam bahasa itu. Jika Anda berakhir dalam situasi yang mengharuskan Anda menggunakan bahasa secara luas, Anda akan memiliki dasar yang bagus untuk membangunnya. Anda mungkin ingin mempelajari sesuatu seperti buku Majelis Duntemanns jika mesin itu kotak hitam abstacted untuk Anda. Saya juga merekomendasikan "Kode" Petzold.

Di luar itu - keaksaraan dasar dalam C dan keakraban dasar dengan mesin yang mendasarinya - Anda akan lebih baik dihabiskan menghabiskan waktu belajar Anda pada hal-hal nyata, seperti SICP, TCP / IP Illustrated atau buku tentang Matematika Beton, algoritma atau struktur data . Hal yang nyata.

Menghabiskan banyak waktu untuk belajar C sambil menulis kode dalam PHP tidak sebanding dengan biaya peluang. Ada banyak hal yang lebih bermanfaat untuk dipelajari. C benar-benar hanyalah bahasa lain yang dapat Anda pelajari dengan baik hanya dengan belajar dan menggunakan, tetapi dapat mengambilnya saat Anda perlu.

Keringat dengan hal-hal yang sulit.


1

C adalah bahasa yang digunakan untuk menulis bahasa lain. Ini memungkinkan Anda untuk mendapatkan intim dengan CPU dan perangkat keras lainnya sesuka Anda.

Jika Anda tidak tahu C, Anda tidak tahu bagaimana bahasa lain mencapai hasil yang mereka lakukan.

Abstraksi adalah konsep penting, tentu saja, dan tidak semua orang perlu tahu bagaimana kerangka pilihan mereka mencapai hasil yang dijanjikan. Anda tidak perlu menghabiskan 20 tahun menulis C, atau memang memikirkan apa yang terjadi pada vtables Anda ketika Anda menggunakan banyak pewarisan, untuk menulis kode yang baik.

Sekarang, Anda dapat mengendarai mobil tanpa memahami cara kerja mesin 4-tak atau memang tanpa menggunakan tongkat persneling (kotak persneling manual).

Namun, jika Anda memahami apa yang sedang terjadi di bawah tenda Anda akan, dari waktu ke waktu, dapat mencapai hasil luar biasa yang seseorang tanpa pengetahuan akan berjuang untuk meniru.


1

C (dan mungkin C ++) adalah laut tempat Anda berenang. OS yang akan menjalankan kode Anda mungkin dikodekan dalam C (dan C ++). Jadi API asli Anda untuk mengakses layanan OS akan berada di C.

Jika Anda dapat melakukannya tanpa mengetahui apa yang ada di bawah ini, tidak perlu tahu C. Namun sebagian besar programmer perlu menyelam ke tingkat yang lebih rendah di suatu waktu dalam kehidupan mereka.

Ini juga didasarkan pada spesialisasi Anda dalam bidang pengembangan. Misalnya pengembang web yang menulis HTML, Javascript, dan beberapa skrip sisi server mungkin tidak perlu tahu apa pun tentang C, tetapi pengembang sistem atau game yang terdistribusi akan melakukannya.

Tidak ada salahnya menghabiskan beberapa minggu mempelajari sesuatu yang begitu mendasar bagi profesi Anda.


1

C memiliki banyak keunggulan:

  1. C adalah bahasa tingkat rendah. Anda dapat menggunakan c untuk mengembangkan kernel dan driver.
  2. C adalah bahasa tercepat. Banyak perangkat lunak yang dikembangkan oleh c. Misalnya: memcached, redis, nginx, apache, mysql dll.
  3. C adalah bahasa lintas platform. Program yang dikembangkan oleh c dapat dijalankan di setiap platform. Bahasa lintas platform lainnya tidak dapat melakukan ini. Java, python, php dll tidak dapat berjalan di platform iOS.
  4. C ++ tidak dapat berjalan di banyak sistem embedded.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.