cara praktis untuk belajar C? [Tutup]


10

Saya ingin menggali ke dalam C dan biasanya ketika saya ingin belajar bahasa baru, saya memikirkan tujuan proyek sederhana / dapat dicapai yang memiliki beberapa tujuan praktis (memanfaatkan api, mengotomatiskan tugas, dll ...)

Saya mengalami kesulitan untuk membuat satu untuk C terutama karena semua yang saya baca menunjukkan fakta bahwa penggunaan utama C saat ini adalah dalam sistem embedded dan proyek perangkat lunak yang lebih kompleks seperti sistem operasi.

Apakah ini mengarahkan saya pada fakta bahwa saya tidak perlu mempelajarinya atau bahwa saya hanya perlu sedikit lebih berbelit-belit dalam strategi belajar saya?

Referensi ke sumber belajar praktis? (tutorial / bagaimana itu menghasilkan hasil akhir yang memiliki beberapa tujuan / manfaat)


3
Anda akan mendapatkan jawaban yang lebih masuk akal jika Anda bisa memberi tahu kami MENGAPA Anda ingin belajar C?
zvrba

2
Saya setuju dengan zvrba. C bagus untuk level rendah, hal-hal cepat dan untuk kode driver. Jika Anda menulis kode untuk permainan, itu juga bagus (walaupun, Anda mungkin akan bekerja dengan coders C ++ yang akan mengeluh kepada Anda karena menulis kode "tidak standar"). Saya merasa, meskipun, bahwa Majelis dan C mirip dengan bahasa Latin (dalam bahasa lisan), mereka bukan yang pertama, tetapi kebanyakan yang datang setelah mereka menggunakan ide dan membangun dari mereka untuk membuat bahasa mereka sendiri. Dengan demikian, mempelajari C MUNGKIN memberi Anda pemahaman yang lebih baik tentang bahasa tingkat yang lebih tinggi
Jamie Taylor

Sudahkah Anda memeriksa Zed Shaw's Learn C The Hard Way . Tentang sepraktis yang bisa didapat, dan juga cukup gratis.
Wyatt Barnett

Python the Hard Way orang sekarang memiliki buku untuk bahasa lain termasuk versi alfa untuk C, saya akan mulai di sana. C adalah tingkat tinggi perbedaan besar untuk asm, saya benci perbandingan dengan asm karena itu salah. Relatif yakin itu memungkinkan Anda melakukan apa yang bahasa lain tidak mau. Tidak masalah apa pun yang Anda inginkan untuk membuat aplikasi apa pun yang dapat Anda tulis dalam C, tidak ada alasan untuk menargetkan aplikasi ke bahasa.
old_timer

Jawaban:


27

Saya hanya akan merekomendasikan mengambil salinan Kernighan dan The C Programming Language (Edisi ke-2) Ritchie . Ini memiliki sejumlah latihan di akhir setiap bab yang dapat Anda lakukan, bersama dengan memberikan pengantar yang sangat baik untuk bahasa C. Itu tidak akan membuat Anda menguasai bahasa, tetapi Anda harus memiliki pemahaman yang cukup baik di akhir buku dan latihan untuk mungkin menemukan proyek sumber terbuka yang ditulis dalam C yang dapat Anda baca sumbernya dan mungkin berkontribusi untuk.

Jika Anda ingin melihat proyek dunia nyata aktual dengan kode C di dalamnya. Semakin sulit - banyak proyek menggunakan bahasa "tingkat yang lebih tinggi", tetapi C masih hidup dan menendang. Jika Anda ingin belajar C, jangan takut untuk menemukan kembali roda untuk mencapai pembelajaran. Itu bukan ide yang baik untuk menemukan kembali solusi pada jam, tapi itu baik-baik saja untuk melakukannya sebagai latihan akademis.


1
Tambahkan FAQ dari comp.lang.c ke sana. c-faq.com
Mike Sherrill 'Cat Recall'

3
+1 untuk tidak keberatan menemukan solusi untuk belajar.
CVn

4
K&R mengerikan untuk mempelajari gaya pemrograman yang baik secara umum, dan mengerikan dalam mengajarkan praktik pemrograman C yang aman / waras pada khususnya. Semua cuplikan kode di dalamnya dikaburkan, sebagian besar waktu mereka mengajarkan kebiasaan berbahaya. Ini adalah buku yang sudah ketinggalan zaman, saya tidak akan merekomendasikannya untuk apa pun selain nostalgia. Ini terutama tidak cocok untuk programmer pemula.

2
@ Thomas Ya edisi ke-2. Anda dapat mengutip cukup banyak cuplikan kode apa pun darinya dan saya mungkin dapat menunjukkan 2-3 kasus praktik yang berbahaya / buruk di dalamnya. Saya akan membuka buku itu sekarang dan mengambil beberapa contoh acak. Oke begini, p119: penugasan dalam kondisi, penggunaan tipe data primitif asli, penggunaan int implisit (tidak ditandatangani), mengetikkan hasil malloc (sangat buruk!), Mengetikkan parameter untuk bebas membatalkan * (mengapa ??? ), beberapa pengembalian (alias spageti), menggunakan NULL tanpa #include yang tepat, jika tanpa {}.

2
+1 untuk KnR C. Ini adalah pengantar terbaik (dan paling ringkas) untuk pemrograman dalam bahasa tertentu yang pernah saya baca. Seperti yang telah ditunjukkan oleh orang lain, ini bisa sedikit meragukan di mana-mana - satu saran yang saya berikan adalah ini: jika ada manual pemrograman yang mengharuskan Anda membaca uraian di sekitarnya, ini dia. Lain-lain, Anda biasanya dapat mengetahui dari blok kode, tetapi buku ini mengharuskan Anda membacanya dari depan ke belakang, setidaknya sekali.
Jamie Taylor

1

Anda harus benar-benar memahami alokasi memori. Anda terdengar seperti Anda telah menggunakan bahasa lain sebelumnya, tetapi kemungkinan besar bahasa-bahasa lain menyembunyikan detail manajemen memori yang mengerikan dari Anda. Dalam C, manajemen memori selalu eksplisit. Ada beberapa keuntungan untuk ini, tetapi itu berarti bahwa Anda harus berhati-hati untuk memperbaikinya atau semua Neraka akan terlepas.

Gunakan fasilitas debugging memori apa pun yang tersedia untuk platform yang Anda gunakan. Untuk Linux ada Pagar Listrik, di Mac OS X ada Guard Malloc. Juga ada Valgrind yang mendukung sejumlah sistem operasi.

Jika Anda gagal membebaskan memori yang harus dibebaskan, Anda akan mengalami kebocoran memori. Terus lakukan itu dan Anda akan kehabisan memori. Bahkan dengan backing store (apa yang oleh sebagian besar orang disebut memori virtual), Anda dapat menyebabkan sistem halaman berlebihan atau bahkan kehabisan ruang swap.

Jika Anda mengosongkan memori yang sudah dibebaskan, Anda akan merusak tumpukan dan kerusakan, tetapi mungkin tidak segera. Anda juga akan merusak tumpukan jika Anda menyerbu buffer. Alat debugging memori akan membantu semua ini.

Pengujian unit juga membantu.


0

Saya setuju dengan sebagian besar orang di sini bahwa bahasa saat ini ditentukan oleh tugas yang dihadapi. Ada saat ketika Anda memiliki pilihan terbatas dalam hal ini. Hari ini C terutama digunakan dalam domain pemrograman Embedded / System di mana ada kebutuhan untuk optimasi kode. Anda perlu menulis kode yang tepat untuk mendapatkan yang maksimal karena jika Anda mulai menggunakan abstraksi itu, maka hal-hal yang mendasarinya harus sangat kuat. Saya akan mengatakan Anda mencoba untuk berkeliling beberapa proyek GNU open source seperti Linux itu sendiri atau sesuatu yang membutuhkan pengembang C. Cobalah tangan Anda dalam proyek-proyek itu alih-alih menulis sesuatu dari awal di C. Ini mungkin cara yang lebih baik untuk menulis kode dan belajar bahasa.


Sebenarnya, saya ragu melompat lebih dulu ke proyek yang sudah mapan, meskipun kecil, adalah cara yang baik untuk memulai belajar bahasa dari awal. Anda mungkin akan menghalang- halangi kepala Anda, dan juga akan memiliki beban tambahan hanya dengan mencoba menavigasi kode, bahkan jika semua yang Anda lakukan adalah memahami cara kerja kode. Kernel sistem operasi khususnya adalah perangkat lunak yang sangat kompleks.
CVn

Ya, tetapi saya berasumsi si penanya benar-benar telah membaca buku K&R atau semacamnya. Saya merekomendasikan pendekatan ini ketika saya bertanya dalam saluran Python. Apakah akan berbeda di C?
Nishant

Sebenarnya saya tidak tahu apakah itu akan jauh berbeda, tetapi dalam C, Anda perlu lebih memperhatikan detail seluk beluk daripada dalam bahasa tingkat tinggi seperti Python. Manajemen memori, untuk menyebutkan hanya satu hal. Melompat ke proyek yang mapan dan berpotensi besar ketika Anda baru memulai dengan suatu bahasa mungkin bukan cara terbaik untuk melakukannya.
CVn

0

Anda akan ingin melakukan sesuatu yang dapat bekerja dari baris perintah. Pemrograman GUI di C adalah rasa sakit utama di pantat, bahkan dengan kerangka kerja GUI yang baik .

Saran saya yang biasa untuk pengalaman belajar C yang praktis adalah daftar kontak atau aplikasi manajemen data sederhana lainnya. Itu akan mencakup sebagian besar bit penting (I / O, manajemen memori, pemrosesan teks, dll.), Dan Anda tidak perlu menggunakan apa pun di luar pustaka C standar untuk mencapainya. C tidak memiliki dukungan bawaan untuk grafik, jaringan, suara, atau yang lainnya 1 , jadi untuk terjun pertama Anda ke pemrograman C, yang terbaik adalah menghindari apa pun yang bergantung pada hal-hal semacam itu.

C dapat digunakan untuk pemrograman tujuan umum; Anda hanya perlu menurunkan ekspektasi Anda (bayangkan ini tahun 1983 dan Anda duduk di depan VT52 yang terpasang pada VAX 11/750, dan Anda akan berada dalam pola pikir yang benar).

Ingat saja, C tidak memiliki penjaga pisau, dan tidak akan mencegah Anda melakukan sesuatu yang bodoh. Definisi bahasa agak longgar di beberapa tempat, dan ada beberapa operasi yang tidak ilegal , tetapi tidak didefinisikan dengan baik.


1 - Revisi standar bahasa terbaru (2011) telah menambahkan dukungan threading bawaan


0

Saya merekomendasikan Project Euler . Saya menggunakannya untuk meningkatkan C ++ saya dan itu mengagumkan. Ini bagus karena setiap masalah adalah tugas kecil yang mungkin membutuhkan waktu kurang dari satu jam untuk diselesaikan (setidaknya yang pertama).

Anda memerlukan profiler dan buku tentang mengoptimalkan kode untuk kecepatan. Pastikan untuk tetap berpegang pada aturan 1 menit: Anda harus mendapatkan jawabannya dalam 1 menit.


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.