it-swarm-id.com

Saya tidak tahu C. Dan mengapa saya harus mempelajarinya?

Bahasa pemrograman pertama saya adalah PHP ( terkesiap ). Setelah itu saya mulai bekerja dengan JavaScript. Baru-baru ini saya melakukan 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 harus belajar apa yang menarik minat kita? Haruskah kita tidak menggunakan waktu terbatas kita 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.

58
Stephen

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 Assembly yang digunakan 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 terhadap biaya yang terlibat dalam bekerja dalam bahasa tingkat yang lebih tinggi itu.)

113
Frank Shearar

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 tidak menyesal. Sikap saya adalah jika Anda tidak tahu C, maka sampai batas tertentu Anda tidak sungguh tahu apa yang Anda lakukan sebagai seorang programmer. Jadi, saya pikir saya adalah tipe orang "bias" yang Anda bicarakan di sini.

Namun, dalam praktiknya, terlepas dari apakah Anda sungguh tahu apa yang Anda lakukan sebagai programmer tidak selalu 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 Assembly) 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. Tapi jika Anda ingin benar-benar Excel pada apa yang Anda lakukan - jika Anda ingin benar-benar bekerja - keren proyek yang Push state of the art, maka Anda benar-benar perlu menganggap diri Anda cukup serius sebagai seorang programmer untuk benar-benar mengerti bagaimana komputer bekerja. Karena C pada dasarnya adalah OS lingua franca, serta bahasa yang mendukung hampir semua hal lain (dari kernel Linux hingga sebagian besar Java VMs, hingga Python = dan Ruby interpreter, database SQL, server web, dan hampir semua driver perangkat), pemahaman mendalam tentang bahasa berjalan jauh.

Belum lagi bahwa mengetahui C (atau C++) membuka peluang besar untuk berkontribusi pada proyek-proyek sumber terbuka besar yang berdampak pada jutaan (atau ratusan juta) orang. Ingin bekerja meningkatkan penerjemah 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 dari infrastruktur perangkat lunak abad ke-21 kami ditenagai oleh kode C, itulah sebabnya C tetap relevan saat ini seperti sebelumnya.

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

72
Charles Salvia

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 dibatasi untuk mengirim laporan bug ke pengelola, berharap mereka dapat mereproduksi dan peduli tentang itu, dan kemudian memutar-mutar ibu jari Anda. Jika Anda tahu C, Anda dapat memberi tahu mereka dengan tepat di mana masalahnya dan apa masalahnya.

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

Adapun untuk belajar C ketika 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.

12
Charles E. Grant

Saya tidak setuju bahwa Anda perlu belajar C pertama, tapi saya yakin Anda harus belajar C akhirnya. Semua abstraksi bocor dan memahami C membuatnya lebih mudah untuk memahami apa yang sebenarnya terjadi ketika Anda menggunakan abstraksi tingkat tinggi yang bagus. Yang mengatakan, saya juga berpikir semua programmer yang serius pada akhirnya harus belajar untuk setidaknya membaca assembler, 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 untuk 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 sangat sulit untuk mengimplementasikan fungsi virtual dengan cara yang berlawanan.

7
dsimcha

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 aktual, bahasa lain adalah digunakan - C # adalah yang populer, seperti halnya Java, sementara PHP dan Python populer untuk proyek internal dan selalu berguna untuk memiliki seseorang yang memiliki setidaknya pengetahuan dasar di bidang itu jika Anda memilih open source PHP proyek untuk, katakanlah, sistem pelacakan bug Anda. Namun, pekerjaan spesifikasi tampaknya masih berasal dari template standar yang ditulis 25 tahun yang lalu.

7
JohnL

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 suka tentang C adalah dekat dengan mesin.

Itu tidak berarti guru lain datang ke tempat yang sama. Mereka memulai dalam bahasa tingkat tinggi (DASAR :-) 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.

6
Mike Dunlavey

Sebanyak saya benci untuk mengirim posting blog Joel wajib, saya setuju dengannya di sini . C adalah bahasa 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 jika 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 turun ke C dari waktu ke waktu.

6
Jason Baker

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 seberapa bermanfaat itu ternyata setelah lulus).

Ada takhayul bahwa karena C agak sulit dipelajari dan menyediakan hampir tidak abstraksi (pointer dan byte stream cukup banyak), mempelajarinya entah bagaimana akan menjadikan Anda seorang programmer yang lebih baik atau memberi Anda wawasan yang lebih besar bagaimana hal-hal bekerja pada tingkat perangkat keras.

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

Pada akhirnya, semuanya tergantung pada opcode dan mode pengalamatan, jadi jika Anda sungguh 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. Ini pasti akan memberi Anda penghargaan untuk jenis string aktual dan perpustakaan kontainer standar.

4
John Bode

Ditanyakan secara progresif: Apakah Anda meminta konfirmasi bahwa Anda tidak harus belajar C? Jika Anda belajar murni C (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 programmer PHP programmernya kurang transparan bagaimana kode dieksekusi pada mesin yang diberikan. Mungkin tidak masalah bagi programmer PHP karena transfer jaringan adalah leher botolnya) 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 benar-benar dapat 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. Itu pasti membayar untuk melihat C, tetapi juga untuk lihat 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" 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
wirrbel

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 menyeluruh tentang hal ini (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 baik 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 sebaiknya dilayani 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 mempelajari C sambil menulis kode dalam PHP sama sekali tidak sebanding dengan biaya kesempatan. Ada banyak hal yang dapat dipelajari. C benar-benar hanyalah bahasa lain yang dapat Anda pelajari dengan baik hanya sambil belajar dan gunakan, tetapi dapat mengambil saat Anda perlu.

Keringat dengan hal-hal yang sulit.

2
naftalimich

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 hanya tidak berfungsi.

2
uɐɪ

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. The VB coders bahkan lebih buruk VB.Net coders. Situasi menjadi lebih buruk ketika semua pengembangan pergi ke ASP.NET. Tiba-tiba siapa pun yang bisa drag and drop 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
dave

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
Mert Akcakaya

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 bagaimana mesin 4-tak bekerja atau bahkan tanpa dapat 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
Bill Michell

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.
1
Edward Shen