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

52

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 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?

Rho
sumber
Humm katakanlah saya akan memahaminya (dan Anda juga saya kira), tetapi itu akan memakan banyak waktu dan ada buku yang lebih mudah saat ini ..
Nils
22
Buku-buku itu mungkin sulit dibaca, dan mungkin ada buku-buku yang lebih mudah, tetapi Anda harus tetap membacanya. Sejauh ini saya baru membaca buku pertama, dan saya tidak mengerti semuanya! tapi itu sangat berharga. Ilmu Komputer itu sulit . Semakin cepat Anda menyadari bahwa Anda tidak cukup pintar untuk memahaminya, semakin cepat Anda bisa mulai belajar cara mempelajarinya.
Michael K
2
Mereka cenderung matematika untuk programmer matematika. CS telah berevolusi dalam beberapa tahun terakhir, dan ada banyak bidang bermanfaat yang tidak bersifat matematika. Arah mana yang ingin Anda kembangkan lebih lanjut? Jika algoritme dan semacamnya, mereka mungkin baik dibaca, jika itu bidang lain, mereka akan memperluas cakrawala Anda, tetapi sama halnya dengan membaca buku tentang beberapa topik biologi. Jadi, tergantung pada area Anda, mereka dapat berada di mana saja, dari misi kritis hingga hampir tidak berguna.
Coder
1
Sejak kapan programmer menganggap Bill Gates berwibawa?
Giorgio
2
Coursera memiliki 6 kursus gratis tentang Algoritma (Algoritma Bagian 1 dan 2, Algoritma Desain dan Analisis Bagian 1 dan 2, dan Analytic Combinatorics Parts 1 dan 2).
Anthony

Jawaban:

39

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.

EDIT :

Namun jika Anda ingin membaca buku Knuth, Anda harus membaca Matematika Beton terlebih dahulu . Knuth ingin murid-muridnya menyadari bagian matematika dasar dari analisis algoritma.

Prasoon Saurav
sumber
5
Manual desain algoritma bahkan lebih mudah / lebih mudah diakses - hampir menyenangkan untuk dibaca
Martin Beckett
Pengantar algoritma adalah buku yang bagus. Kami menggunakan ini untuk kursus algoritma CSE pertama kami dan saya menyukainya. Meskipun saya harus mengatakan saya menghabiskan banyak iterasi melalui contoh yang sama untuk benar-benar mengatakan saya mengerti mereka.
Chris
4
@SidCool: Ada edisi CLRS ke-3 dengan selusin bagian baru.
Bill the Lizard
10
Buku-buku Knuth adalah War & Peace of programming. Mereka bagus, tetapi sebagian besar digunakan untuk membuat rak buku terlihat mengesankan.
Gaurav
6
"Bahkan kurasa buku Knuth agak maju"? kesederhanaan eh :)
occulus
57

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 pikir mereka tahu segalanya, Knuth akan bantu mereka memahami bahwa dunia ini dalam dan rumit. "

Itu bukan buku yang mudah dan tidak dimaksudkan untuk itu. Ingatlah bahwa salah satu tujuan Knuth adalah membawa ketelitian matematika pada 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 bagus untuk membaca buku-buku dalam jawabannya atas 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 Anda tidak pernah benar-benar tahu adalah masalah (yaitu, 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 terkini, dan selera humor Knuth bersinar. Selain itu, 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 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 ...)

Tergantung pada latar belakang matematika Anda, saya sarankan Anda membaca Bab 1 pertama kali, dan kembali ke sana sesuai kebutuhan. 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 putuskan untuk memberikan izin).

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:

Corbin March
sumber
Tautan ke SO rusak, tetapi saya menemukan pos yang saya bayangkan serupa: stackoverflow.com/questions/1022167/…
asjohnson
+1 untuk pos asli di Way Back Machine dan daftar buku dari universitas-universitas tersebut
Anthony
+1 untuk merekomendasikan memulai dengan Volume 4, Fascicles 0, 1, 2, 3 dan 4, dan juga untuk membaca tentang MMIX bukan MIX. Sebagai hasilnya, saya akan mulai dengan Volumn 1, Fascicle 1, karena mencakup MMIX.
Shaun Luttin
Sebagai programmer Java / c, saya merasa <Struktur Data dan Analisis Algoritma di Jawa> sangat mudah dimengerti & cukup praktik.
Eric Wang
29

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 dirujuk dengan tingkat penghormatan yang sama dengan yang diberikan orang kepada Alkitab dan Seni Perang.

Saya bahkan pernah mendengar bahwa beberapa orang sebenarnya telah membaca sebagian dari buku-buku Knuth.

Kebanyakan orang hanya berniat melakukannya.

Secara pribadi, saya menyimpannya untuk masa pensiun saya

Steven A. Lowe
sumber
22
Itu sebabnya salinan bekas yang dipakai lebih berharga daripada yang baru!
Martin Beckett
13
Jika Anda memahami Seni Perang, Anda akan menyadari bahwa Anda hanya perlu membuat orang berpikir Anda memahami Knuth ketika Anda tidak, dan sebaliknya Anda tidak memahami Knuth ketika Anda melakukannya. Jika tidak, Anda tidak perlu. Dan jika Anda memahami buku 5 dari Buku Lima Lingkaran, Anda bahkan tidak perlu berbicara tentang Knuth. Dan jika Anda telah membaca Pemrograman Seni Unix ESR dan memahami koan, Anda bahkan tidak akan membutuhkan Knuth, karena Anda akan telah melampaui hambatan kompleksitas.
Christopher Mahan
20

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 bekerja di 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.

Arjun J Rao
sumber
itu luar biasa untuk didengar .. saya pikir saya satu-satunya yang mengalami kesulitan membaca buku ini .. terima kasih banyak
Rho
7
@Raymond Ho: Saya pikir tidak ada orang yang suka membaca buku-buku Knuth. Saya tahu setidaknya satu orang yang memilikinya di rak buku hanya demi membuat rak itu terlihat mengesankan.
FrustratedWithFormsDesigner
12

Ketika saya pertama kali lulus, saya mengambil tiga jilid pertama TAOCP sebagai hadiah kelulusan untuk diri saya sendiri 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 sebanyak 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 ini, memahami solusinya jauh lebih mudah setelah Anda menemui 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.

Cercerilla
sumber
10

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

Anda cukup ambisius jika 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.

Lihatlah posnya: Pemrogram Buku yang Tidak Benar-Benar Membaca oleh Bill the Lizard.

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

Saya pribadi suka:

sepon
sumber
8

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 cukup penasaran 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 sedang membaca volume 1 tentang algo mendasar .. Jadi apakah ada buku di luar sana yang ramah untuk pemula / orang lambat seperti saya? Jadi saya bisa membangun diri sendiri dan mudah-mudahan di masa depan saya bisa membaca buku Knuth dengan mudah ..

jika Anda mendefinisikan diri not a highly intellectual beingAnda maka Anda menetapkan harapan 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 diperlukan 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 perlu memiliki jumlah pemrograman yang cukup (bekerja dan / atau skolastik) di bawah ikat pinggang Anda - saya akan mengatakan, setidaknya 40 kredit pada pemrograman. Anda juga perlu memiliki matematika CS 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 algoritme. Jangan gunakan Java atau C #, bahkan C ++. Pergi ke tulang telanjang C dan rasakan membangun sesuatu dari sisa logam tulang kosong.

Juga dapatkan buku Knuth tentang "Matematika Beton" jika Anda belum menyelesaikan 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 tertarik secara intelektual untuk melakukannya. Anda dapat menjadi mahir dalam algoritma dengan hanya menggunakan buku CLRS '(atau buku-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;)

luis.espinal
sumber
2
Catatan: Anda merujuk Volume III dua kali dan tidak pernah Volume II, menamakan Volume III dua nama yang berbeda.
alternatif
Terima kasih telah memberi tahu saya (+1). Urutan yang saya maksudkan adalah sebagai berikut: volume pertama I (algoritma dasar), lalu volume III (pencarian dan penyortiran), kemudian volume IV (algoritma kombinatorial) dan kemudian volume II (algoritma semi-numerik.)
luis.espinal
6
+1 Bukan karena hal-hal sulit yang kita tidak berani; itu karena kita tidak berani mereka susah. - Seneca
mouviciel
4

Bahkan sebelum mulai dengan Knuth, saya harus menelusuri empat buku yang berbeda. Dua yang pertama adalah buku Sedgewick tentang 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 Pengantar Sedgewick dan Flajolet untuk Analisis Algoritma sebagai teks pelengkap , karena lebih sesuai dengan kekakuan matematika Knuth daripada 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.

Justin Hamilton
sumber