Saya lulusan non-CS dan bidang studi saya tidak terkait dengan CS. Namun, sebagai bagian dari rencana yang lebih besar untuk menjadi ilmuwan komputer, saya ingin mendapatkan latar belakang yang kuat dalam ilmu komputer teoretis dan matematika yang berkaitan dengan CS. Saya melakukan banyak penelitian dan memilih buku-buku terbaik / sangat baik berikut tentang topik CS dan matematika dan ingin meminta pendapat Anda tentang:
- Kelengkapan topik yang dibahas (harap rekomendasikan apa pun yang saya lewatkan)
- Tumpang tindih bidang material yang tertutupi / berlebihan
- Memesan untuk mempelajari buku-buku (saya cantumkan dalam urutan yang menurut saya harus dipelajari)
Daftar ini terasa sangat panjang, jadi saya sangat menghargai rekomendasi untuk menghapus beberapa buku, tanpa kehilangan pengetahuan inti yang diperlukan untuk CS.
Jadi, buku-bukunya adalah:
- Delight matematikawan oleh WW Sawyer
- Cara Membuktikannya: Pendekatan Terstruktur oleh Daniel J. Velleman
- Cara Mengatasinya: Suatu Aspek Baru Metode Matematika oleh G. Polya
- Pengantar Pemrograman Fungsional Melalui Lambda Calculus oleh Greg Michaelson
- Yayasan Ilmu Komputer oleh Al Aho dan Jeff Ullman (http://i.stanford.edu/~ullman/focs.html)
- Matematika Beton: Yayasan Ilmu Komputer oleh Graham, Knuth, dan Patashnik
- Pengantar Teori Komputasi oleh Michael Sipser
- Pengantar Teori, Bahasa, dan Perhitungan Automata oleh John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman
- Kompleksitas Komputasi: Perspektif Konseptual oleh Oded Goldreich
- Kompleksitas Komputasi: Suatu Pendekatan Modern oleh Sanjeev Arora, Boaz Barak
- A Course in Combinatorics oleh JH van Lint, RM Wilson
- Komputasi: Pengantar Teori Fungsi Rekursif oleh Nigel Cutland
- Komputer dan Daya Tarik: Panduan untuk Teori Kelengkapan NP oleh MR Garey, DS Johnson
- Teori Fungsi Rekursif dan Kompabilitas yang Efektif oleh Hartley Rogers
- Ketimpangan oleh GH Hardy, JE Littlewood, G. Polya
- Logika Matematika: Kursus Dengan Latihan (Bagian I): Propusitional Calculus, Bookean Algebras, Predicate Calculus oleh René Cori, Daniel Lascar
- Logika Matematika: Kursus Dengan Latihan (Bagian II): Teori Rekursi, Teorema Godel, Teori Set, Teori Model oleh René Cori, Daniel Lascar
Jawaban:
Daftar Anda sangat bermasalah.
Sebagai permulaan, saya akan langsung melewatkan buku 6,11,12,14,15,16,17: Buku 6, 11 dan 15 adalah matematika umum yang tidak benar-benar diperlukan kecuali jika Anda menjadi peneliti teoretis . Buku 12 dan 14 membahas teori rekursi yang bukan ilmu komputer (meskipun berkaitan dengan kemampuan komputasi!). Buku 16 dan 17 membahas topik-topik lanjutan dalam logika, sedangkan Anda hanya perlu tahu logika yang sangat mendasar.
Dari buku 1,2,3, saya akan memilih hanya satu yang berfungsi sebagai pengantar umum untuk matematika dan bukti.
Buku 5,7,8,9,10,13 mencakup beberapa mata pelajaran: teori automata, algoritma, dan teori kompleksitas. Izinkan saya menyarankan Anda mengikuti Sipser (Buku 7) untuk teori automata dan teori kompleksitas, dan Pengantar Algoritma oleh Cormen, Leiserson, Rivest dan Stein ("CLRS") untuk algoritma.
Buku 4 berkaitan dengan pemrograman fungsional. Walaupun pendidikan ilmu komputer saya tidak pernah memasukkan kursus tentang hal ini, wajar untuk mengatakan bahwa banyak peneliti dalam ilmu komputer teoritis menghitung pemrograman fungsional sebagai bagian dari fondasi penting.
Meringkas: apa yang tersisa dengan Anda
sumber
Anda juga dapat mempertimbangkan untuk mengambil keuntungan dari beberapa kursus online yang tersedia. Sebagai contoh, baik Stanford dan MIT menawarkan kursus online (gratis) dalam ilmu komputer, dan saya pikir ada banyak lainnya juga tersedia.
Sejauh buku, saya kedua rekomendasi Yuval, kecuali bahwa CLRS adalah referensi yang bagus, tetapi sedikit berlebihan sebagai buku pengantar untuk duduk dan membaca. Untuk lulus pertama di bagian algoritma, saya mungkin merekomendasikan Algoritma oleh Dasgupta et al. . Tautan sebelumnya adalah untuk pra-cetak online gratis, tetapi juga cukup murah untuk membeli di paperback.
sumber
Referensi yang Anda sarankan akan menjadi ilmuwan komputer teoretis "sangat". tapi saya jujur tidak menemukan keuntungan membaca semua buku-buku ini jika Anda dari gelar non-CS. Ini tentu saja semua tergantung pada apa yang Anda butuhkan.
Saya menemukan beberapa buku seperti Buku 14, 15, 16, 17 tidak ditujukan untuk para ilmuwan komputer. Buku 3 adalah verbose. Itu hanya umum untuk setiap siswa. Karena itu saya menganggap buku 1 dan 2 adalah sama.
Bagi saya - berada dalam situasi yang sama dengan Anda bukan awalnya seorang ilmuwan komputer (tetapi seorang insinyur listrik / komputer) - Saya mengusulkan dua arahan awal:
--- pastikan untuk menguasai bahasa pemrograman untuk MELAKSANAKAN algoritma dan struktur data yang Anda pelajari - karena itu, saya menyarankan rangkaian Algoritma, dari Sedgewick (luar biasa!)
--- TAMBAH: Saya juga menyarankan buku ini: Algoritma Combinatorial: Generasi, Enumerasi, dan Cari oleh D. Kreher. Ini buku yang sangat bagus. Akan memberi Anda perspektif berbeda untuk banyak masalah dalam algoritma.
kombinatorik (terutama teori grafik), A Course in Combinatorics oleh JH van Lint, RM Wilson , bagus. Ada banyak referensi lain. Biasanya setiap buku kombinatorik terkenal sudah cukup - semua yang Anda dapatkan dari referensi tambahan dari internet. Saya pribadi suka: peter j cameron combinatorics, dan Bondy and Murty Graph Theory.
taruhan probabilitas (selalu diperlukan). Sangat mengejutkan bahwa banyak bidang dalam sains tidak menggunakan probabilitas. Tapi percayalah, yang harus Anda ketahui hanyalah dasar-dasarnya.
Kemudian: Banyak peneliti yang menyebut diri mereka sendiri sebagai ilmuwan komputer teoritik yang berfokus pada teori perhitungan (automota dan lainnya). Ada beberapa buku bagus untuk ini (Lihat posting Yuvul Filmus),
Aho dan Ullman baik (sebenarnya semua buku Ullman baik). Buat diri Anda nyaman dengan desain kompiler (lihat http://infolab.stanford.edu/~ullman/ullman-books.html ).
Setelah itu: semuanya tergantung pada apa yang ingin Anda lakukan. Berbagai arah yang dapat Anda ambil: 1) database, 2) pengenalan pola dan penambangan data, 3) algoritma terdistribusi, 4) dasar bahasa pemrograman, 4) algoritma acak, dan banyak lainnya. [masing-masing membutuhkan posting lain] tetapi cobalah untuk memiliki ide tentang semua!
* Gagasan umum: jika Anda baru di CS, buat diri Anda nyaman dengan sebanyak mungkin sub-domain CS. Membatasi diri Anda untuk "teori" akan membuat Anda kehilangan banyak kreativitas CS! * (pendapat saya)
sumber