it-swarm-id.com

Saya seorang siswa CS, dan jujur, saya tidak mengerti buku-buku Knuth

Saya menemukan kutipan dari Bill Gates ini: "Anda harus mengirimi saya resume jika Anda bisa membaca semuanya." Dia berbicara tentang The Art of Programming buku. Jadi saya cukup penasaran dan ingin membaca semuanya. Tapi jujur, saya tidak mengerti.

Saya benar-benar tidak intelektual. Jadi ini seharusnya menjadi alasan mengapa saya tidak bisa memahaminya, tetapi saya ingin sekali mempelajarinya. Saya sedang membaca Volume 1 tentang algoritma mendasar. Apakah ada buku di luar sana yang ramah untuk pemula/orang lambat seperti saya, yang akan membantu membangun pengetahuan saya sehingga saya bisa membaca buku Knuth dengan mudah di masa depan?

52
Rho

Bahkan saya pikir buku Knuth agak maju dan sulit dimengerti. Buku-buku itu pasti untuk para ahli algoritma tingkat penelitian IMHO.

Jadi, apakah ada buku di luar sana yang ramah untuk pemula/orang lambat seperti saya?

Pengantar Algoritma oleh CLRS jauh lebih sederhana.

[~ # ~] sunting [~ # ~] :

Masih jika Anda inginkan untuk membaca buku Knuth, Anda harus terlebih dahulu melewati Matematika Beton . Knuth ingin murid-muridnya menyadari dasar matematika dari analisis algoritma.

39
Prasoon Saurav

Pastikan untuk membaca semua kutipan Gates termasuk ini:

"Butuh disiplin yang luar biasa, dan beberapa bulan, bagi saya untuk membacanya. Saya mempelajari 20 halaman, menyimpannya selama seminggu, dan kembali selama 20 halaman. Jika seseorang begitu kurang ajar sehingga mereka berpikir mereka tahu segalanya, Knuth akan bantu mereka memahami bahwa dunia ini dalam dan rumit. "

Itu bukan buku yang mudah dan tidak dimaksudkan untuk itu. Ingat bahwa salah satu tujuan Knuth adalah untuk membawa ketelitian matematika ke ilmu komputer . Itu bagus jika Anda ingin membuktikan sesuatu tentang suatu algoritma, tetapi tidak terlalu bagus jika Anda hanya ingin tahu cara kerjanya.

Michael Dorfman memiliki beberapa tips yang bagus untuk membaca buku-buku dalam jawabannya untuk pertanyaan (sekarang dihapus) di Stackoverflow tentang Apa yang Dapat Saya Dapatkan Dari Membaca Lot? . Jika Anda tidak memiliki perwakilan 10k, Anda masih dapat melihat pertanyaan dan jawabannya di mesin wayback .

Apa yang akan Anda dapatkan dari membaca lot? Dasar yang sangat baik dalam Ilmu Komputer. Anda akan mengerti bagaimana komputer beroperasi, dari gerbang logika naik melalui kompiler. Anda akan berpikir tentang masalah yang tidak pernah Anda ketahui adalah masalah (mis., Apa cara tercepat untuk memperbanyak?) Dan melihat koneksi algoritmik antara hal-hal yang tidak pernah Anda pikirkan terkait (dasar sungai, RNA, dan kurung bersarang, misalnya.)

Saya sepenuhnya tidak setuju dengan orang-orang yang mengatakan "membangun perangkat lunak alih-alih membaca tentang membangun perangkat lunak" - ada perbedaan antara disiplin ilmu Rekayasa Perangkat Lunak dan Ilmu Komputer. TAOCP adalah tentang yang terakhir.

Jika Anda belum memulai, saya punya beberapa rekomendasi.

Pertama, Anda mungkin ingin memulai dengan Volume 4. Ini adalah beberapa materi yang menarik, sangat terbaru, dan selera humor Knuth bersinar. Plus, ada video yang tersedia (di situs Stanford SPCD, atau Stanford iTunes) di mana Knuth membahas berbagai bagian. Video-video ini sangat dianjurkan. Fascicles 0, 1, 2, 3 dan 4 dari Volume 4 tersedia sebagai paperback terpisah. Bersama-sama, materi V4 yang diterbitkan lebih besar dari salah satu dari 3 volume pertama, tetapi diiris menjadi suguhan seukuran gigitan. (Saya ingin tahu apakah Volume 1-3 akan tampak kurang menakutkan bagi orang-orang jika setiap volume telah diterbitkan dalam bentuk paperback satu bab ...)

Bergantung pada latar belakang matematika Anda, saya sarankan Anda membaca Bab 1 pertama kali, dan kembali seperti yang diperlukan. Bahkan, Anda mungkin ingin membaca setiap bagian (setidaknya) dua kali - cepat pertama kali, hanya untuk mendapatkan intuisi dan inti dari argumen, dan kemudian perlahan, hati-hati, memahami setiap langkah.

Pastikan untuk membaca Volume 1, Fascicle 1 di MMIX, bukan bagian lama pada MIX. MMIX lebih baik dalam banyak hal, dan Anda akan lebih baik mengubah MIX dalam teks ke MMIX saat Anda mengikuti daripada mencoba mengangkangi kedua dunia.

Aturan umum: jangan lewati latihan. Ada banyak materi bagus dalam pertanyaan (dan jawaban). Lakukan sebanyak mungkin latihan; tetapi bacalah semuanya (dan bacalah jawabannya, begitu Anda sudah mencoba masalahnya, atau memutuskan untuk memberikannya jalan).

Akhirnya, jika Anda benar-benar menangkap bug: baca indeksnya. Banyak lelucon besar yang tersembunyi di sana.

Tentu saja, StackOverflow akan menjadi tempat yang baik untuk memposting pertanyaan spesifik pada teks, jika mereka muncul ....

Untuk sumber daya lain, saya telah menemukan bahwa menjelajah silabus dari sekolah sains komputer yang terkenal itu bermanfaat. Misalnya, buku teks untuk memulai kelas algoritma:

57
Corbin March

Knuth adalah penulis ilmu komputer yang paling dihormati, dikutip, dibicarakan, dan sangat dihormati dalam sejarah. Buku-bukunya menghiasi rak buku semua pengembang perangkat lunak yang serius, dan disebut dengan tingkat penghormatan yang sama seperti yang diberikan orang pada Alkitab dan Seni Perang.

Saya bahkan pernah mendengar bahwa beberapa orang telah benar-benar baca sebagian dari buku-buku Knuth.

Kebanyakan orang hanya bermaksud untuk.

Secara pribadi, saya menyimpannya untuk masa pensiun saya

29
Steven A. Lowe

Buku-buku Knuth mengubah bidang algoritma selamanya. Dia sendiri mengatakan bahwa '2 halaman di buku saya adalah seluruh pekerjaan karier seseorang' dan bahwa buku-bukunya sulit dibaca. Buku ini berisi bahan kental dari tahun kerja di bidang Ilmu Komputer.

Anda seharusnya tidak merasa buruk jika Anda tidak bisa memahaminya.

Seperti yang dikatakan Prasoon, CLRS adalah buku yang lebih sederhana untuk dibaca.

Anda juga memiliki Algoritma oleh Rajasekaran, Sahni et al yang mudah dimengerti.

20
Arjun J Rao

Ketika saya pertama kali lulus, saya mengambil tiga jilid pertama TAOCP sebagai hadiah kelulusan untuk diri saya dan berusaha membacanya langsung. Tidak pernah berhasil. Hari-hari ini saya telah berhasil melewati 1/3 dari tiga volume pertama (dipikirkan tanpa urutan tertentu). Bahannya pasti padat, tapi ada tiga tips yang saya pelajari yang banyak membantu.

Pertama, jangan mencoba membaca dari depan ke belakang. TAOCP benar-benar merupakan karya referensi seperti apa pun, dan saya telah menemukan yang terbaik untuk membaca bagian ketika itu relevan dengan masalah yang Anda coba selesaikan. Seperti banyak hal di dunia, memahami solusinya jauh lebih mudah setelah Anda menemukan masalah yang mereka coba selesaikan.

Selanjutnya, bagan alur di depan buku itu, itu bukan hanya sedikit humor tetapi sebenarnya tip yang cukup berguna. Bacalah bagian yang sedang Anda kerjakan secara iteratif, mulailah dengan hanya dengan konsep menyeluruh dan kemudian secara perlahan masuk lebih dalam ke matematika.

Akhirnya, simpan beberapa kertas kuno yang bagus dan sebuah pensil untuk bekerja melalui algoritme seperti yang dijelaskan, dan selesaikan beberapa masalah mudah. Ini sangat membantu untuk menegakkan kembali apa yang Anda baca.

12
Cercerilla

Jangan khawatir, kebanyakan orang tidak mengerti Seni Pemrograman Komputer (TAOCP). Jadi jangan anggap diri Anda lamban atau pemula karena tidak mengerti - Anda seperti 99,99% lainnya dari kita yang tidak mendapatkannya.

Anda sangat ambisius jika Anda ingin mencapai tingkat di mana Anda dapat membaca TAOCP dengan mudah. Saya sendiri hanya melihat-lihat buku sebelum menyimpannya. Mungkin hanya ada segelintir orang di planet ini yang memahami TAOCP.

Lihat posnya: Programmer Buku Tidak Benar-Benar Membaca oleh Bill the Lizard.

Ada banyak buku lain terdaftar di sana yang cukup dapat dibaca , dapat dimengerti , dan Anda dapat manfaat langsung.

Saya pribadi suka:

10
spong

Saya menemukan kutipan dari Bill Gates ini: "Anda harus mengirimi saya resume jika Anda bisa membaca semuanya." Dia berbicara tentang buku-buku Seni Pemrograman .. Jadi saya sangat ingin tahu dan ingin membaca semuanya tetapi jujur, saya tidak mengerti sama sekali .. I'm really not that highly intellectual being .. Jadi ini harus menjadi alasan mengapa saya tidak bisa memahaminya, tapi saya ingin belajar .. Saya saat ini membaca volume 1 tentang algo mendasar .. Jadi apakah ada buku di luar sana yang ramah untuk pemula Aku memperlambat orang sepertiku? Jadi saya bisa membangun diri sendiri dan mudah-mudahan di masa depan saya bisa membaca buku Knuth dengan mudah ..

jika Anda mendefinisikan diri Anda sebagai not a highly intellectual being maka Anda menetapkan diri Anda pada harapan yang rendah. Anda harus menghancurkan mentalitas itu jika Anda ingin melakukan sesuatu yang sepadan dengan masalahnya. Seharusnya tidak ada keraguan dalam pikiran Anda bahwa Anda dapat mencapai sesuatu. Juga, mencapainya tidak berarti bahwa Anda akan mencapainya dengan mudah.

Hal-hal yang layak dikejar adalah hal-hal yang sulit ... dan itu bukan klise. Dalam peranti lunak, teknik, kehidupan sehari-hari secara umum, jika Anda ingin mencapai sesuatu, Anda harus pergi untuk hal-hal yang sulit, hal-hal yang dihindari orang, dan tidak puas dengan hal-hal umum yang paling rendah.

Pertama, tidak jelas apa latar belakang CS Anda. Buku Knuth membutuhkan tingkat kedewasaan. Hanya sedikit orang dengan gelar CS yang bisa melewatinya dengan mudah. Saya tidak akan mengharapkan seorang siswa CS yang baru saja menyelesaikan kursus pertamanya dalam algoritma untuk benar-benar dapat melewati satu pun buku Knuth. Kedewasaan yang dibutuhkan untuk mendapatkannya tidak ada di sana, dan itu tidak ada hubungannya dengan kapasitas mental siswa.

Anda harus memiliki dasar algoritma yang dingin dan jelas, dan Anda harus memiliki jumlah pemrograman yang cukup (bekerja dan/atau skolastik) di bawah ikat pinggang Anda - saya katakan, setidaknya 40 kredit pada pemrograman. Anda juga perlu memiliki matematika CS Anda di tanah yang kokoh.

Anda tidak dapat melangkah jauh ke depan tanpa memiliki pemahaman yang baik tentang matematika diskrit (dan mungkin teori perhitungan.)

Bukannya Anda membutuhkan pengetahuan itu untuk mengatasi masalah Knuth, tetapi Anda membutuhkan kedewasaan untuk bisa melalui jenis materi itu.

Pertama-tama pilih satu buku dan satu buku saja (buku CLRS seperti yang disarankan sebelumnya), dan kerjakan dari awal hingga selesai. Jika memungkinkan, lakukan program yang mengimplementasikan algoritma. Jangan gunakan Java atau C #, bahkan tidak C++. Pergi ke tulang telanjang C dan dapatkan perasaan membangun sesuatu dari potongan-potongan logam tulang kosong.

Juga dapatkan buku Knuth tentang "Matematika Beton" jika Anda belum melakukan kursus matematika dan teori perhitungan diskrit. Akan baik bagi Anda untuk membaca buku itu juga.

Kemudian pegang ensiklopedia Knuth, satu buku tebal, satu bab sekaligus. Jangan pergi ke bab lain tanpa memiliki pemahaman yang baik tentang bab pertama.

Saya akan menyarankan Anda melalui volume I (algoritma dasar) terlebih dahulu, kemudian volume III (mencari dan menyortir). Itu harus menjadi tujuan langsung Anda. Kemudian, nanti (jauh kemudian), atasi volume IV (Algoritma Kombinatorial) dan kemudian Volume II (Algoritma Semi-Numerik.)

Jangan merasa buruk jika Anda tidak mendapatkannya pada awalnya. Saya sudah mencoba untuk melewati volume I dan III selama bertahun-tahun (10 tahun sekarang).

Dan Anda juga tidak perlu terlalu membebani. Jangan lakukan itu untuk membuktikan sesuatu kepada seseorang atau diri Anda sendiri. Lakukan karena Anda secara intelektual tertarik untuk melakukannya. Anda dapat menjadi mahir dalam algoritma hanya dengan menggunakan buku CLRS '(atau buku tingkat pas yang bagus di luar sana).

Jadilah pragmatis dan beri diri Anda istirahat. Perlakukan membaca buku Knuth sebagai ambisi pribadi jangka panjang, bukan sebagai bukti langsung bahwa Anda adalah materi CS;)

Ada hal lain yang lebih penting (karir-bijaksana) untuk bunuh diri;)

8
luis.espinal

Sebelum mulai dengan Knuth, saya harus menelusuri empat buku yang berbeda. Dua yang pertama adalah buku Sedgewick di Algoritma. Gambaran umum ini sebagian besar algoritme dan struktur data dalam bentuk aktual yang diimplementasikan, sehingga Anda dapat melihat apa itu dan bagaimana kerjanya. Buku-buku ini datang dalam versi bahasa yang berbeda - saya membaca yang di C, tetapi iirc mereka awalnya ditulis dalam Pascal, dan ada versi C++ dan Java di luar sana.

Setelah itu saya mengerjakan bagian yang baik dari buku Cormen tentang Algoritma dan menggunakan Sedgewick dan Flajolet's Pengantar Analisis Algoritma sebagai teks tambahan, karena lebih sesuai dengan kekakuan matematis Knuth dari buku Cormen. Saya masih harus menyelesaikan salah satu dari ini, sebagian besar memetik ceri bagian yang saya rasa saya butuhkan.

Setelah membaca itu, dan mendapatkan gelar dalam bidang Matematika saya dapat membaca beberapa TAOCP, tetapi sulit dibaca. Itu tidak berarti itu tidak berguna. TAOCP adalah beberapa manual referensi algoritma terbaik yang ada, tetapi berpikir Anda dapat menggunakannya untuk "sepenuhnya" memahami segala sesuatu yang agak bermasalah.

4
Justin Hamilton