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:
- Karena bahasa tingkat tinggi mudah diakses, lebih banyak "non-programer" masuk dan membuat kekacauan
- 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.
sumber
Jawaban:
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.)
sumber
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.
sumber
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.
sumber
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.
sumber
All abstractions are leaky
pernyataan yang salah .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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
C memiliki banyak keunggulan:
sumber