Saya sedang mempertimbangkan untuk belajar C
Tidak ada alasan khusus untuk tidak belajar C tetapi saya akan menyarankan C ++. Ia menawarkan banyak hal yang dilakukan oleh C (karena C ++ adalah kumpulan super C), dengan sejumlah besar "ekstra". Belajar C sebelum C ++ tidak perlu - mereka adalah bahasa yang terpisah secara efektif.
Dengan kata lain, jika C adalah seperangkat alat-alat pertukangan, kemungkinan akan menjadi:
- Palu
- kuku
- gergaji tangan
- bor tangan
- block sander
- pahat (mungkin)
Anda dapat membangun apa saja dengan alat-alat ini - tetapi segala sesuatu yang bagus berpotensi membutuhkan banyak waktu dan keterampilan.
C ++ adalah kumpulan alat-alat listrik di toko perangkat keras lokal Anda.
Jika Anda tetap menggunakan fitur bahasa dasar untuk memulai, C ++ memiliki kurva belajar tambahan yang relatif sedikit.
Tetapi mengapa orang menggunakan C (atau C ++) jika itu dapat digunakan 'berbahaya'?
Karena beberapa orang tidak menginginkan furnitur dari IKEA. =)
Serius meskipun, sementara banyak bahasa yang "lebih tinggi" dari C atau C ++ mungkin memiliki hal-hal yang membuat mereka (berpotensi) "lebih mudah" untuk digunakan dalam aspek-aspek tertentu, ini tidak selalu merupakan hal yang baik. Jika Anda tidak menyukai cara sesuatu dilakukan atau fitur tidak disediakan, kemungkinan tidak banyak yang dapat Anda lakukan. Di sisi lain, C dan C ++ menyediakan fitur bahasa "tingkat rendah" yang cukup (termasuk pointer) sehingga Anda dapat mengakses banyak hal secara langsung (terutama perangkat keras atau sistem operasi) atau membangunnya sendiri, yang mungkin tidak dapat dilakukan di negara lain. bahasa sebagaimana diterapkan.
Lebih khusus, C memiliki serangkaian fitur berikut yang membuatnya diinginkan untuk banyak programmer:
- Kecepatan - Karena kesederhanaan relatif dan optimisasi kompiler selama bertahun-tahun, ini secara alami sangat cepat. Selain itu, banyak orang telah menemukan banyak pintasan untuk sasaran tertentu saat menggunakan bahasa tersebut, yang membuatnya berpotensi lebih cepat.
- Ukuran - Untuk alasan yang sama seperti yang terdaftar untuk kecepatan, program C dapat dibuat sangat kecil (baik dalam hal ukuran yang dapat dieksekusi dan penggunaan memori), yang diinginkan untuk lingkungan dengan memori terbatas (yaitu tertanam atau seluler).
Kompatibilitas - C telah ada sejak lama dan semua orang memiliki alat dan pustaka untuk itu. Bahasa itu sendiri juga tidak pilih-pilih - ia mengharapkan prosesor untuk menjalankan instruksi dan memori untuk menyimpan barang-barang dan itu saja.
Selain itu, ada sesuatu yang dikenal sebagai Application Binary Interface (ABI) . Singkatnya, ini adalah cara bagi program untuk berkomunikasi pada tingkat kode mesin, yang dapat memiliki keunggulan dibandingkan Antarmuka Pemrograman Aplikasi (API) . Sementara bahasa lain seperti C ++ dapat memiliki ABI, biasanya ini kurang seragam (disepakati) dari C, jadi C membuat bahasa dasar yang baik ketika Anda ingin menggunakan ABI untuk berkomunikasi dengan program lain karena suatu alasan.
Mengapa programmer tidak hanya menggunakan Java atau Python atau bahasa kompilasi lain seperti Visual Basic?
Efisiensi (dan terkadang skema manajemen memori yang tidak dapat diimplementasikan tanpa akses langsung ke memori).
Langsung mengakses memori dengan pointer memperkenalkan banyak trik rapi (biasanya cepat) ketika Anda dapat menempatkan cakar kotor Anda pada anak-anak kecil dan nol di memori Anda lubang cubby langsung dan tidak harus menunggu itu berarti guru untuk membagikan mainan hanya saat bermain kemudian ambil lagi.
Singkatnya, menambahkan hal-hal yang berpotensi menciptakan kelambatan atau memperkenalkan kompleksitas yang tidak diinginkan.
Mengenai bahasa skrip dan sejenisnya, Anda harus bekerja keras untuk mendapatkan bahasa yang membutuhkan program sekunder untuk berjalan seefisien C (atau bahasa yang dikompilasi) secara asli. Menambahkan penerjemah saat terbang secara inheren memperkenalkan kemungkinan penurunan kecepatan eksekusi dan peningkatan penggunaan memori karena Anda menambahkan program lain ke dalam campuran. Efisiensi program Anda sangat bergantung pada efisiensi program sekunder ini sebaik seberapa baik (buruk =)) Anda menulis kode program asli Anda. Belum lagi program Anda sering benar-benar bergantung pada program kedua untuk dieksekusi. Program kedua itu tidak ada karena suatu alasan pada sistem tertentu? Kode tidak jalan.
Bahkan, memperkenalkan sesuatu yang "ekstra" berpotensi memperlambat atau mempersulit kode Anda. Dalam bahasa "tanpa penunjuk menakutkan", Anda selalu menunggu bit kode lain untuk dibersihkan di belakang Anda atau mencari cara "aman" untuk melakukan sesuatu - karena program Anda masih melakukan operasi akses memori yang sama seperti yang mungkin dilakukan dengan pointer. Anda bukan orang yang menanganinya (jadi Anda tidak dapat melakukannya, genius = P).
Berbahaya, maksud saya dengan pointer dan hal-hal serupa lainnya. [...] Seperti pertanyaan Stack Overflow. Mengapa fungsi get jadi berbahaya sehingga tidak boleh digunakan?
Per jawaban yang diterima:
"Itu tetap merupakan bagian resmi dari bahasa hingga standar ISO C 1999, tetapi secara resmi dihapus oleh standar 2011. Sebagian besar implementasi C masih mendukungnya, tetapi setidaknya gcc mengeluarkan peringatan untuk kode apa pun yang menggunakannya."
Gagasan bahwa karena sesuatu dapat dilakukan dalam bahasa, itu harus dilakukan adalah konyol. Bahasa memiliki kekurangan yang diperbaiki. Untuk alasan kompatibilitas dengan kode lama, konstruk ini masih dapat digunakan. Tapi tidak ada (kemungkinan) memaksa programmer untuk menggunakan get () dan, pada kenyataannya, perintah ini pada dasarnya diganti dengan alternatif yang lebih aman.
Lebih tepatnya, masalah dengan mendapat () bukan masalah pointer per se. Ini masalah dengan perintah yang tidak perlu tahu cara menggunakan memori dengan aman. Dalam arti abstrak, ini semua masalah pointer - membaca dan menulis hal-hal yang tidak seharusnya. Itu bukan masalah dengan pointer; itu masalah dengan implementasi pointer.
Untuk memperjelas, pointer tidak berbahaya sampai Anda secara tidak sengaja mengakses lokasi memori yang tidak Anda inginkan. Itupun tidak menjamin komputer Anda akan meleleh atau meledak. Dalam kebanyakan kasus, program Anda akan berhenti berfungsi (dengan benar).
Yang mengatakan, karena pointer memberikan akses ke lokasi memori dan karena data dan kode yang dapat dieksekusi ada dalam memori bersama, ada cukup bahaya nyata dari korupsi tidak disengaja yang Anda ingin mengelola memori dengan benar.
Untuk itu, karena operasi akses memori yang benar-benar langsung sering kali memberikan manfaat yang kurang secara umum daripada yang mungkin terjadi bertahun-tahun yang lalu, bahkan bahasa yang dikumpulkan non- sampah seperti C ++ telah memperkenalkan hal-hal seperti pointer pintar untuk membantu menjembatani kesenjangan antara efisiensi dan keamanan memori.
Singkatnya, ada sangat sedikit alasan untuk takut pada pointer selama itu digunakan dengan aman. Ambil saja petunjuk dari Steve Park "The Crocodile Hunter" versi South Park, Irwin - jangan terus menempel ibu jari Anda di lubang buaya .