Belajar memprogram dalam C (berasal dari Python) [ditutup]

22

Jika ini adalah tempat yang salah untuk mengajukan pertanyaan ini, beri tahu saya.

Saya seorang programmer Python berdasarkan pekerjaan. Saya ingin sekali belajar C. Memang, saya telah mencoba berkali-kali, tetapi saya selalu berkecil hati. Dengan Python, Anda menulis beberapa baris dan program ini menghasilkan keajaiban. Di C, saya sepertinya tidak bisa melakukan sesuatu yang bermanfaat.

Tampaknya sangat rumit bahkan untuk terhubung ke Internet.

Apakah Anda memiliki saran tentang apa yang dapat saya lakukan untuk belajar C? Apakah ada situs web yang bagus? Ada proyek keren?

Terima kasih

Honza Pokorny
sumber
4
Sangat menyenangkan untuk bisa berdiri di atas bahu genius bukan. Penerjemah Python ditulis dalam C. Sekarang Anda benar-benar menghargai apa yang sebenarnya dilakukan oleh perancang. Ini jari yang luar biasa.
Pemdas
@EMdas C biasanya digunakan untuk membuat program sistem.
Searock
Bisakah saya merekomendasikan memulai dengan membaca konten file, dan mungkin melakukan beberapa transformasi dasar ke file lain? Contoh: Ambil CSV dan parsing ke dalam file yang dibatasi-tab. Sebagai alternatif, Anda dapat mempelajari cara membaca informasi header dari BMP file gambar JPEG.
Joshua Burns
Saya terlambat menambahkan jawaban, tetapi ada buklet C untuk Python Program online ini . Juga, pembuat "Belajar pemrograman dengan cara yang sulit" membuat sebuah buku berjudul " Belajar C dengan Cara yang Keras ", yang ditujukan untuk orang-orang yang sudah tahu sedikit python atau sejenisnya.
naught101

Jawaban:

31

Jangan berkecil hati.

Python adalah bahasa pemrograman tingkat tinggi. Dibandingkan dengan C, itu dapat menghasilkan keajaiban dalam sejumlah kecil kode. Jangan mulai dengan mencoba meniru hasil Python di C - Anda akan segera berkecil hati. Pemrograman dalam huruf C membutuhkan gaya berpikir dan pemahaman yang berbeda karena saat Anda berinteraksi dengan komputer pada tingkat yang lebih intim. Inilah titik awal yang baik untuk belajar C:

Buku

Materi Daring

JK
sumber
1
Bisakah Anda menyarankan latihan pemrograman? Sesuatu yang bermanfaat lebih disukai. Terima kasih.
Honza Pokorny
12

Jika Anda ingin belajar C, jangan mulai dengan menghubungkan ke Internet. Anda dapat melakukannya dalam bahasa lain. Bukan itu yang paling penting dalam C.

Sebagai gantinya, lihatlah pointer, array, referensi, struct dalam C Tutorial ini . Ini akan membantu Anda memahami manajemen memori dan banyak fitur yang "membawa Anda lebih dekat ke mesin."

Jika Anda dapat mempelajari dan memahami materi ini, maka lihatlah ekspansi ke proyek yang mungkin. Konsep-konsep ini mendasar untuk pemrograman C profesional nyata.

Ini Pointer Tutorial terlihat membantu juga.

jmort253
sumber
yang C_Tutoriallink rusak ...
user3768495
11

Saya t ini sangat rumit untuk terhubung ke internet! Pikirkan tentang itu:

  • Komputer Anda mungkin memiliki beberapa cara menghubungkan - WLAN, Bluetooth, Ethernet, dll. Masing-masing memiliki pengaturan sendiri, yang perlu Anda atur. Anda beruntung sudah ada standar dan driver untuk ini ... menggunakan ini bisa menjadi jauh lebih sulit daripada yang sudah ada sekarang.

  • Alamat IP dapat berupa IPv4 atau IPv6, dan Anda harus dapat menangani keduanya.

  • Mungkin ada atau tidak ada proxy yang dikonfigurasi untuk sistem.

  • Anda harus mendukung FTP, HTTP, atau protokol lain.

  • Anda mungkin perlu menggunakan dial-up, jadi Anda harus menentukan buku telepon dengan kata sandi dan nomor telepon, jika Anda belum terhubung. Ditto dengan nama pengguna / kata sandi WLAN.

  • Anda mungkin perlu bekerja dengan cookie.

  • Sistem mungkin men-cache beberapa data, jadi apakah Anda ingin menggunakan cache atau tidak?

dan daftarnya terus berlanjut.

Jadi fakta bahwa itu mudah dilakukan dengan Python berarti bahwa banyak dari ini tersembunyi dari Anda (atau sulit diatur), sehingga Anda menukar kesederhanaan untuk mendapatkan kekuasaan. Pustaka C adalah sebaliknya: ia memiliki semua kekuatan yang Anda butuhkan (Anda dapat dengan mudah melakukan panggilan sistem), tetapi tidak memiliki default apa pun (atau, pada kenyataannya, fitur apa pun untuk menghubungkan ke internet).

Alih-alih menganggap C sebagai sesuatu yang membosankan, anggap itu sebagai yang kuat. Tetapi bagaimanapun juga, jangan mencoba untuk terhubung ke internet dengan itu - itu adalah hal yang sangat sulit untuk dilakukan. Alih-alih, mulailah belajar bagaimana menggunakan perpustakaan untuk tugas-tugas yang lebih mendasar (mis. File I / O), pelajari tentang bagaimana pointer dan array bekerja, dan ketika Anda mempelajari semua itu, maka cobalah menangani proyek-proyek besar. Anda juga akan lebih menghargai Python. :)


Edit :

Saya pribadi menyarankan bahwa, jika Anda memiliki waktu luang, pelajari C # terlebih dahulu. Segera setelah Anda merasa nyaman dengan itu, mulailah belajar tentang unsafekata kunci dan cara menggunakan pointer dan melakukan marshaling di C #. Anda masih akan memiliki perpustakaan yang sangat besar untuk dikerjakan, seperti dengan Python, tetapi Anda akan dapat melakukan banyak hal yang dapat Anda lakukan dalam C. Kemudian transisi ke sistem panggilan API secara manual (seperti InternetOpen ), dan pelajari cara membuat mereka bekerja. Anda masih akan memiliki banyak fleksibilitas tetapi Anda akan mendapatkan pengantar konsep tingkat bawah yang bagus. Setelah Anda selesai melakukannya, maka mulai belajar C - maka Anda akan menemukan itu sebagai sepotong kue, dan Anda akan melihat (C? mengerti?) kelebihan dan kekurangan bahasa tingkat tinggi dan tingkat rendah, dan Anda akan dapat untuk menemukan yang sesuai dengan kebutuhan Anda.

Yang mengatakan, saya pikir A Crash Course di C mungkin berguna sebagai titik awal untuk melompat ke laut C.

Mehrdad
sumber
8

Jangan membaca kode kernel ketika Anda sedang belajar C. Penuh dengan trik untuk memeras setiap bit kinerja terakhir darinya. Beberapa di antaranya sangat tidak standar. Itu akan membuatmu gila.

Sebagai gantinya, lihatlah beberapa proyek bertubuh kecil, berkualitas tinggi:

  • Lua - Jika Anda tidak tertarik pada bahasa pemrograman, Anda mungkin ingin melewati yang satu ini. Kalau tidak, itu kode yang benar-benar indah dan luar biasa untuk melihat seberapa banyak yang mereka capai dengan sedikit (sesuatu yang Anda tampaknya frustrasi karena Anda berasal dari Python).
  • ZeroMQ - Saya suka proyek ini. Ini adalah antrian pesan yang sangat ringan dan sangat cepat. Sekali lagi, barang berkualitas tinggi.
  • DarkHttpd - Server web 2700 baris dalam C. Meliputi beberapa topik menyenangkan seperti pemrograman soket, penguraian, dan bekerja dengan protokol.
Hanya sedikit Roger
sumber
0

Salah satu tujuan dari bahasa tingkat tinggi yang lebih tinggi adalah untuk menyembunyikan hal-hal rumit. Jika Anda ingin belajar bahasa tingkat "rendah", dan tidak ingin memulai dengan hal-hal yang sangat rumit (yang sebelumnya sebagian besar tersembunyi dari Anda); coba mulai dengan beberapa proyek pembelajaran yang lebih sederhana, mengurutkan array angka, atau membalikkan serangkaian karakter, atau ...

Lebih mudah naik bukit yang curam dengan mengambil langkah-langkah kecil.

hotpaw2
sumber
-3

Sejauh proyek keren untuk dilihat: kernel Unix ditulis dalam C.

Edward Strange
sumber
Apakah Anda bermaksud menambahkan tautan?
jmort253
-3

Pelajari tata bahasa C terlebih dahulu, lalu gunakan untuk menulis struktur data dan algoritma. Tentu saja Anda dapat membaca kernel Linux sebagai Anda ahli bahasa c.

Hai 福气 鱼
sumber