Saya adalah pengembang front-end yang bahkan nyaris tidak melihat file dengan .h
atau .c
ekstensi. Saya tahu sintaks C dasar, saya sudah mempelajarinya di Unreality tetapi tidak pernah tertarik pada pemrograman tingkat rendah karena itu terlalu banyak pengaturan untuk hal-hal sederhana.
Saya sangat tertarik mempelajari semua aspek Ilmu Komputer tetapi saya ingin percaya bahwa saya tidak benar-benar harus tahu bahasa tertentu untuk memahami sebagian besar konsep dalam Ilmu Komputer. Namun ketika saya mulai membaca buku dan artikel tentang konsep-konsep dasar Ilmu Komputer seperti Struktur Data dan Desain Algoritma, saya harus belajar C, karena semua contoh dan bahkan pelajaran ada di C (dan kadang-kadang Java).
Pertanyaan saya adalah, apakah C sebagai bahasa pemrograman penting untuk Ilmu Komputer atau kami kebetulan memiliki semua sumber daya kami di CS yang ditulis dalam C? Bisakah seseorang belajar Ilmu Komputer tanpa belajar C?
sumber
Jawaban:
Saya akan menentang arus di sini dan mengatakan ya, Anda harus belajar C. Saya sebenarnya setuju dengan poin-poin dalam banyak jawaban lain, tetapi Anda membuat pernyataan yang sangat kuat bahwa
(penekanan milikku)
Nah, sistem operasi dan tumpukan jaringan adalah dua aspek besar Ilmu Komputer, dan semua sistem operasi dan tumpukan jaringan yang dominan ditulis sebagian besar dalam C. Jika Anda ingin memahami itu, Anda harus belajar C. Ya, beberapa sekolah memang berhasil mengajar kelas OS mereka di Jawa, tapi itu seperti membaca Homer dalam bahasa Inggris.
Selain itu, bahasa C tidak terlalu besar. Jika Anda benar-benar ingin mempelajari semua aspek ilmu komputer, Anda harus mengangkat bahu dan berkata 'meh', 'apa bahasa lagi?'
sumber
Untuk waktu yang sangat lama, selama puncak ilmu komputer sebagai ilmu daripada panggilan, ada beberapa pilihan terbatas untuk bahasa yang berjalan pada semua sistem yang digunakan oleh semua universitas yang berbeda.
Sejauh ini, universitas cenderung menggunakan sistem Unix. Mudahnya, ini diprogram dalam C. Seseorang dapat mulai dengan belajar C pada mesin apa pun, dan akhirnya masuk ke kode sumber unix dalam C. Di rumah, siswa dapat menggunakan kompiler C seperti Borland Turbo C pada Windows, atau MPW pada Mac - itu bekerja di mana-mana.
Pascal adalah pilihan lain, tetapi itu cenderung memiliki masalah bahwa pada titik tertentu dalam pemrograman, itu tidak cukup dari bahasa untuk melakukan apa yang benar-benar perlu Anda lakukan (pemrograman OS dalam pascal akan menyakitkan).
Beberapa sekolah yang lebih tua mempelajari Fortran, tetapi sekali lagi, itu bukan bahasa yang cukup kuat dalam banyak kasus untuk dapat mengajar kelas CS tingkat yang lebih tinggi (teori AI di fortran? Dapat dilakukan tetapi menyakitkan).
Jadi, untuk waktu yang lama C adalah pilihan.
Itu bukan satu-satunya pilihan dan ada banyak perguruan tinggi sekarang yang mengajar dalam bahasa lain untuk menutupi beberapa internal dan mempelajari konsep tingkat yang lebih tinggi tanpa harus berurusan dengan keburukan manajemen memori dan sejenisnya. Beberapa orang berpikir ini bagus, beberapa berpikir ini buruk .
Jadi tidak, belajar C tidak penting untuk belajar ilmu komputer. Anda dapat menemukan banyak buku lain di luar sana yang mengajarkan ilmu komputer dari Java atau Python. Hanya saja untuk waktu yang lama, C adalah pilihan dan buku-buku akademik bergerak lambat.
sumber
Saya akui bahwa seseorang bisa mendapatkan pekerjaan bergaji tinggi dan menjadi produktif tanpa pernah menyentuh C, tetapi saya sangat merekomendasikan belajar C untuk siapa saja yang serius memiliki pemahaman yang kuat tentang ilmu komputer.
Meskipun ilmu komputer adalah tentang konsep, yang bisa dipelajari terlepas dari bahasa pemrograman tertentu, ada bidang yang mungkin lebih baik dipahami dengan mempelajari C atau dengan mempelajari bidang itu menggunakan C.
Algoritma dan Struktur Data. Standar C hampir tidak memiliki ini - memiliki ini sudah diimplementasikan dalam bahasa atau di perpustakaan standarnya cenderung demotivasi untuk siswa: " Mengapa saya harus repot-repot menerapkan sesuatu yang tersedia?"Melihat sepotong kode C, Anda langsung melihat biaya algoritmiknya, karena semua yang ada di C hanya mengkompilasi beberapa instruksi mesin. Bahasa tingkat tinggi (misalnya Perl atau Python) sering menggunakan struktur data lanjutan di bawah kap sintaksis ringan. Kode terasa ringan, tetapi tidak. Anda sudah membutuhkan banyak pengetahuan untuk alasan yang benar tentang kompleksitas algoritme dari potongan kode tersebut. Oleh karena itu bahasa tersebut tidak cocok untuk mempelajari algoritma dan struktur data, dan banyak programmer yang selalu hidup pada bahasa tingkat tinggi, cenderung tidak mampu menangani masalah kinerja, ketika mereka mengalami masalah.
Sistem operasi. Sebagian besar sistem operasi ditulis dalam C. Bagaimana Anda ingin memahami proses pembuatan tanpa pernah memanggil
fork
? Lapisan abstraksi dari Java VM tidak membantu di sini. Dan hanya membicarakannya tanpa pernah membuat proses bahkan lebih buruk ... Bagaimana Anda bisa menulis perangkat lunak seperti Eclipse yang dapat mengarahkan output standar ke salah satu jendelanya? Anda perlu memahami konsep tingkat OS untuk itu, dan Anda dapat menyentuh mereka secara langsung dalam C saja.Tipuan. Anda tidak dapat melakukan C tanpa berurusan dengan pointer. Pointer memaksa Anda untuk berpikir pada dua tingkat, dan itu memperluas keterampilan abstraksi Anda.
Ada juga beberapa keunggulan teknis dari pengetahuan C:
Interoperabilitas lintas bahasa. Anda ingin mengintegrasikan modul Ruby yang hebat ke dalam proyek Python Anda (gantikan dua bahasa yang sewenang-wenang di sini). Kemungkinannya adalah bahwa satu-satunya cara untuk melakukan itu, adalah melalui C, karena kedua bahasa memiliki antarmuka asing ke C.
Menulis perangkat lunak penting kinerja. Seseorang tidak dapat menghilangkan tingkat rendah untuk melakukan ini.
Saya tidak mengatakan, bahwa setiap program harus ditulis dalam C. Tapi C dapat membantu Anda untuk pengetahuan, yang berguna bahasa apa pun yang Anda program.
sumber
Saya juga akan menentang butir di sini dan mencoba membuat kasus estetika (sedikit lucu) untuk C. Sementara beberapa orang mungkin menyebutnya "jelek" untuk alasan yang berbeda, seperti kurangnya konstruksi tingkat tinggi seperti kelas atau dengan mengandalkan pointer, saya menemukan bahwa itu tidak terjadi pada saya .
TL; DR : Menurut saya, C itu sederhana, C bagus bisa dibaca dan ada kegembiraan tertentu yang bisa ditemukan dalam memukul-mukul bit.
C itu sederhana
Standar C hanya mendefinisikan beberapa tipe dan mekanisme dasar untuk membuat fungsi, pointer dan array darinya. Selain itu, ada sejumlah kecil konstruksi komposisi untuk membuat tipe yang lebih kompleks dari primitif (seperti struct dan serikat pekerja). Perhatikan bagaimana saya menggambarkan sebagian besar bahasa dalam dua kalimat. Ini berarti Anda tidak harus menyimpan terlalu banyak aturan dan formulir sintaksis di kepala Anda saat melakukan pengodean.
Sederhana itu indah .
C tidak misterius
Tidak seperti banyak bahasa tingkat tinggi, Anda akan kesulitan menemukan banyak simbol aneh dan tidak dapat dipahami di C. Di dunia C, fasilitas utama untuk abstraksi dan "kompresi sintaksis" adalah fungsi - semantik yang sangat sederhana dan konstruk penjelasan sendiri. Gaya C yang baik mendorong kecantikan yang hampir puitis dan mudah dibaca. Untuk mengilustrasikannya, mari kita coba membaca cuplikan berikut dari kernel Linux. Bahkan tanpa memahami struktur data yang mendasari dan detail implementasi, kami dapat memahami banyak hal berikut ini:
Bagian tengah fungsinya bertuliskan "jika tidak mungkin arus membeku, tanyakan pada kulkas apakah pembekuan benar-benar terjadi". Seuss tidak bisa menulisnya dengan lebih baik.
Dapat dibaca itu indah .
C transparan
Kecuali pernyataan C menyertakan pemanggilan fungsi, Anda biasanya bisa mendapatkan ide yang sangat bagus tentang biaya run-time dan efek sampingnya. C memberikan kontrol programmer dan akhirnya percaya padanya untuk melakukan hal yang benar. Kita bisa mendapatkan gambaran tentang apa yang terjadi ketika potongan ini (sedikit diformat ulang untuk SE) keluar dari implementasi
strlen()
dalam pustaka GNU C berjalan, karena setiap operator memiliki semantik yang didefinisikan dengan baik. Tidak ada overloading di C.Untuk tujuan "optimisabilitas", properti ini sangat bagus. Boleh dibilang, beberapa bahasa tingkat tinggi membuat ekspresi ringkas dari algoritma tingkat tinggi lebih mudah (seperti C ++ dengan kelas dan overloading), tetapi untuk tujuan C dirancang untuk - bertindak sebagai assembler portabel - C sangat ideal. Kadang-kadang, setelah eksekusi kode tingkat rendah yang berhasil, seorang programmer mungkin merasakan satu dengan mesin, dalam arti (atau nol - ini adalah detail implementasi). Ini bukan untuk mengatakan bahasa lain itu buruk, tidak "zen" cukup atau sesuatu yang konyol seperti itu, hanya saja IMO C dapat menarik dengan cara yang banyak bahasa lain telah memilih untuk tidak menjadi, karena banyak alasan yang valid.
Menurut pendapat saya, tiga poin yang disajikan di atas membuat pengelolaan sistem yang kompleks - namun efisien - dapat dikelola, yang terkandung dalam pikiran saya oleh Linux. Saya menemukan bahwa dunia ini menarik bagi kepekaan estetika saya dan saya akan menyarankan siapa pun mempertimbangkan C sebagai target berikutnya untuk mempertimbangkan poin-poin ini. Saya merasa bahwa argumen tentang sistem operasi dan yang lainnya lebih baik didukung dengan secara eksplisit menyatakannya karena orang tentu tidak perlu memahami kernel untuk menjadi programmer yang sukses, tetapi orang mungkin menemukan bidang ini menarik secara subyektif.
sumber
Bahasa pemrograman yang Anda gunakan untuk membahas ilmu komputasi sebagian besar tidak relevan dengan tugas mempelajari cara dan ilmu komputasi.
Karya (yang bisa dibilang) mani pada Ilmu Komputer, Seni Pemrograman Komputer , tidak menggunakan bahasa yang ada untuk menginformasikan subjek. Sebagai gantinya, Donald Knuth memilih untuk mendefinisikan komputer fiksi dan bahasa mesin fiksi (dan bahasa rakitan yang terkait) dalam hal yang ia membahas semua topik.
Karya lain yang sangat dihargai pada subjek, Struktur dan Interpretasi Program Komputer , mengambil pendekatan serupa, merancang dialek yang disederhanakan dari bahasa pemrograman LISP untuk bertindak sebagai konteksnya sendiri. Bahasa ini adalah apa yang kita kenal sekarang sebagai Skema.
Namun karya lain yang sangat bagus dalam Ilmu Komputer, Unsur-unsur Sistem Komputasi (yang sebenarnya merupakan bagian yang sama dengan Teknik Komputer dan Ilmu Komputer, dan sangat singkat), mengambil pendekatan yang lebih mendasar dalam mengajarkan logika digital, dari mana ia membangun mesin, alat-alat , dan bahasa, sebelum mengajar Ilmu Komputer dasar.
Jadi, tidak, C tidak perlu untuk memahami Ilmu Komputer. Yang penting adalah pemahaman Anda tentang konsep inti algoritma dan aplikasinya.
sumber
Saya memulai karir dalam pemrograman dengan mempelajari vb3 dari manual yang dikirimkan bersama dengan floppy disk. Saya belajar beberapa java dan mampu menghasilkan beberapa program terhormat tetapi tidak sampai saya belajar C di universitas saya merasa bahwa saya benar-benar mengerti apa yang terjadi "di bawah tenda". Saya sekarang bekerja hanya dengan .net dan tidak pernah benar-benar khawatir tentang pointer, alamat tidak valid atau meluap - tapi saya mengerti mereka, ini menginformasikan keputusan yang saya buat setiap hari dan beberapa barang sekolah lama masih ada dalam bahasa yang ditafsirkan modern, bendera , operasi sedikit bijak, logika Boolean, semua alat yang kuat dan sangat efisien.
Learn C. Ini akan membantu Anda. Saya menyimpan salinan buku pegangan programmer selama bertahun-tahun dan membaca Kernighan dan Ritchie dari depan ke belakang. Tidak masalah bahasa apa yang akhirnya Anda gunakan dengan Memahami C pasti akan membantu.
sumber
Jawabannya iya. Saya memiliki gelar saya di CS dan tidak diharuskan untuk belajar C, melainkan Jawa. Setidaknya di sekolah saya, penekanannya adalah pada pembelajaran Pemrograman Berorientasi Objek, dengan beberapa ajaran tentang Bahasa Perakitan, Struktur Data dan Desain Basis Data.
sumber
Itu benar-benar tergantung pada apa yang ingin Anda lakukan dengan apa yang Anda pelajari. Memang benar bahwa banyak algoritma diberikan dalam C, atau turunannya. Namun, selama bertahun-tahun saya telah melihat lebih banyak contoh C ++, C #, dan Java. Apa yang dimaksudkan CS untuk diajarkan adalah pemahaman umum tentang komputasi, dan oleh karena itu bagaimana cara mengambil atau membuat bahasa yang sesuai untuk tugas yang dihadapi.
Namun, masih ada banyak orang yang bahasa pertamanya dan terakhir adalah beberapa variasi C atau Java, dan tidak semua dari mereka akan memiliki pelatihan untuk memahami bahasa apa pun yang diberikan oleh gelar CS. Bahkan beberapa lulusan CS memiliki masalah dengan pemrograman. Jadi, Anda mungkin perlu memiliki pemahaman yang cukup baik tentang bahasa-bahasa yang dapat Anda komunikasikan dengan mereka, tergantung pada jalur karier Anda. Jika Anda berencana untuk tetap berpegang pada akademisi, maka Anda akan memiliki lebih banyak hambatan bahasa untuk konten, terutama di bidang interdisipliner (di mana orang menggunakan prolog, lisp, haskell, Mathematica, dll.)
sumber
Jika Anda benar-benar akan mempelajari "semua aspek Ilmu Komputer" (rencana ambisius!), Anda harus berurusan dengan beberapa bahasa assembly yang berbeda, dan setidaknya satu HDL (dan berlatih koding pada level netlist di dalamnya).
Dan sebagai langkah level yang lebih tinggi untuk mendekati hal-hal yang benar-benar mendasar ini Anda harus mengambil sesuatu seperti C atau Pascal, itu tidak dapat dihindari. Melewati langkah-langkah di tangga abstraksi adalah kontraproduktif.
Pokoknya, saya meragukan pertanyaan ini bahkan layak ditanyakan. Lagipula, C hanyalah bahasa kecil. Anda bisa mempelajari dasar-dasarnya dalam waktu yang lebih singkat daripada yang Anda buang untuk merenungkan apakah Anda harus belajar C atau tidak.
sumber