└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Belajar Sendiri Ilmu Komputer 2 | 3 | > Dokumen ini adalah terjemahan dari [TeachYourselfCS](https://teachyourselfcs.com/). Untuk versi aslinya, [lihat di sini](https://teachyourselfcs.com/). 4 | 5 | > Catatan: panduan ini telah diperbarui pada Mei 2020. Untuk versi sebelumnya, [lihat di sini](https://teachyourselfcs.com/2016/). 6 | 7 | Jika Anda adalah seorang _engineer_ autodidak atau lulusan _bootcamp_, Anda berutang pada diri Anda untuk mendalami ilmu komputer. Untungnya, Anda bisa mendapat pendidikan ilmu komputer kelas dunia tanpa harus menghabiskan waktu dan uang untuk program sarjana 💸. 8 | 9 | Ada banyak sumber belajar di luar sana, tapi beberapa lebih baik dari yang lain. Anda tidak perlu lagi artikel "200+ Kursus Online Gratis". Anda perlu jawaban dari pertanyaan ini: 10 | 11 | - **Mata pelajaran** apa yang harus dipelajari, dan mengapa? 12 | - Apa **buku atau seri video pembelajaran terbaik** untuk setiap mata pelajaran? 13 | 14 | Panduan ini adalah upaya kami untuk menjawab pertanyaan tersebut. 15 | 16 | ## TL;DR: 17 | 18 | Pelajari kesembilan mata pelajaran di bawah, dalam urutan yang disajikan, baik menggunakan buku teks atau seri video pembelajaran yang disarankan, tapi lebih ideal menggunakan keduanya. Targetkan 100-200 jam belajar untuk setiap topik, lalu ulas kembali topik favorit sepanjang karir Anda 🚀. 19 | 20 | | Mata pelajaran | Mengapa dipelajari? | Buku | Video | 21 | | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ------------------------------------ | 22 | | **[Pemrograman](#pemrograman)** | Jangan menjadi orang yang "tidak mengerti" sesuatu seperti rekursi. | _Structure and Interpretation of Computer Programs_ | Berkeley CS 61A oleh Brian Harvey | 23 | | **[Arsitektur Komputer](#arsitektur-komputer)** | Jika Anda tidak memiliki pemahaman yang kuat tentang cara kerja komputer, semua abstraksi tingkat tinggi Anda akan rapuh. | _Computer Systems: A Programmer's Perspective_ | Berkeley CS 61C | 24 | | **[Algoritma dan Struktur Data](#algoritma-dan-struktur-data)** | Jika Anda tidak tahu cara menggunakan struktur data yang sering digunakan seperti tumpukan, antrian, pohon, dan grafik, Anda tidak akan dapat memecahkan masalah yang menantang. | _The Algorithm Design Manual_ | Video perkuliahan oleh Steven Skiena | 25 | | **[Matematika untuk Ilmu Komputer ](#math-for-cs)** | Ilmu komputer pada dasarnya adalah cabang matematika terapan, jadi mempelajari matematika akan memberi Anda keunggulan kompetitif. | _Mathematics for Computer Science_ | MIT 6.042J oleh Tom Leighton | 26 | | **[Sistem Operasi](#sistem-operasi)** | Sebagian besar kode yang Anda tulis dijalankan oleh sistem operasi, jadi Anda harus tahu bagaimana mereka berinteraksi. | _Operating Systems: Three Easy Pieces_ | Berkeley CS 162 | 27 | | **[Jaringan Komputer](#jaringan-komputer)** | Internet telah menjadi suatu hal yang penting: pahami cara kerjanya untuk membuka potensi penuhnya. | _Computer Networking: A Top-Down Approach_ | Stanford CS 144 | 28 | | **[Basis Data](#basis-data)** | Data adalah bagian terpenting inti dari sebuah program, tetapi hanya sedikit yang memahami bagaimana sistem basis data bekerja. | _Readings in Database Systems_ | Berkeley CS 186 oleh Joe Hellerstein | 29 | | **[Bahasa Pemrograman dan Kompiler](#bahasa-pemrograman-dan-kompiler)** | Jika Anda memahami cara kerja bahasa pemrograman dan kompiler, Anda dapat menulis kode dengan lebih baik dan mempelajari bahasa pemrograman baru dengan lebih mudah | _Crafting Interpreters_ | Kursus online oleh Alex Aiken di edX | 30 | | **[Sistem Terdistribusi](#sistem-terdistribusi)** | Saat ini, sebagian besar sistem adalah sistem terdistribusi. | _Designing Data-Intensive Applications_ | MIT 6.824 | 31 | 32 | ## Masih terlalu banyak? 33 | 34 | Jika mempelajari 9 topik selama beberapa tahun terasa berlebihan, kami sarankan Anda fokus hanya pada dua buku: _Computer Systems: A Programmer's Perspective_ dan _Designing Data-Intensive Applications_. Berdasarkan pengalaman kami, kedua buku ini memberikan manfaat yang sangat besar atas waktu yang diinvestasikan, terutama untuk _engineer_ autodidak dan lulusan _bootcamp_ yang bekerja pada aplikasi yang terhubung dengan jaringan. Kedua buku tersebut juga berfungsi sebagai pengantar untuk topik dan sumber belajar lain yang tercantum di atas. 35 | 36 | ## Mengapa mempelajari ilmu komputer? 37 | 38 | 39 | 40 | Ada 2 jenis _software engineer_: mereka yang memahami ilmu komputer dengan baik sehingga dapat melakukan pekerjaan yang menantang dan inovatif, dan mereka yang dapat bertahan hanya karena mereka terbiasa menggunakan _framework_, _library_ dan alat-alat lain. 41 | 42 | Keduanya disebut _software engineer_, dan keduanya cenderung mendapat gaji yang sama di awal karir mereka. Tetapi _engineer_ jenis pertama punya perkembangan menuju pekerjaan yang lebih memuaskan dengan bayaran yang meningkat seiring waktu, baik itu dari pekerjaan biasa atau proyek _open source_ yang memberi terobosan baru, menjadi pemimpin dalam hal teknis, atau dari kontribusi sebagai individu berkualitas tinggi. 43 | 44 | _Engineer_ jenis pertama menemukan cara mempelajari ilmu komputer secara mendalam, baik melalui cara konvensional atau dengan belajar tanpa henti sepanjang karir mereka. _Engineer_ jenis kedua biasanya hanya berada di atas, mempelajari alat dan teknologi tertentu daripada mempelajari fondasi yang mendasarinya, hanya menambah keterampilan baru ketika tren berubah. 45 | 46 | Saat ini, jumlah orang yang memasuki industri ini meningkat pesat, sementara jumlah lulusan ilmu komputer relatif tetap. Kelebihan pasokan _engineer_ jenis kedua ini dapat mengurangi kesempatan kerja dan menjauhkan mereka dari pekerjaan yang lebih memuaskan pada industri ini. Apakah karena Anda ingin menjadi _engineer_ jenis pertama atau sekadar mencari keamanan kerja yang lebih tinggi, mempelajari ilmu komputer adalah satu-satunya jalan yang dapat diandalkan. 47 | 48 | ## Panduan mata pelajaran 49 | 50 | ### Pemrograman 51 | 52 | 53 | 54 | Sebagian besar program sarjana ilmu komputer dimulai dengan "pengantar" pemrograman komputer. Versi terbaik dari kursus ini tidak hanya diperuntukkan bagi pemula, tetapi juga bagi mereka yang melewatkan konsep dan model pemrograman yang penting ketika pertama kali belajar. 55 | 56 | Rekomendasi kami untuk topik ini adalah buku klasik _Structure and Interpretation of Computer Programs_, yang tersedia secara daring dan gratis baik sebagai [buku](https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html), maupun sebagai seri [video perkuliahan dari MIT](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/). Meskipun seri video tersebut bagus, kami lebih menyarankan video kuliah SICP oleh Brian Harvey (untuk kursus 61A di Berkeley). Video kuliah ini lebih baik dan lebih pantas ditargetkan pada mahasiswa baru daripada video kuliah dari MIT. 57 | 58 | Kami merekomendasikan untuk setidaknya menyelesaikan tiga bab pertama SICP beserta latihannya. Untuk latihan tambahan, Anda bisa mengerjakan masalah pemrograman seperti yang ada pada [exercism](https://exercism.org/). 59 | 60 | Sejak panduan ini pertama kali diterbitkan pada tahun 2016, salah satu pertanyaan yang paling sering diajukan adalah apakah kami akan merekomendasikan rekaman terbaru kuliah 61A yang diajarkan oleh John DeNero, dan/atau buku panduannya [_Composing Programs_](https://composingprograms.com/), yang "sesuai dengan tradisi SICP" tetapi menggunakan Python. Menurut kami sumber belajar dari DeNero juga bagus, dan beberapa siswa mungkin akhirnya lebih menyukainya, tetapi kami tetap menyarankan SICP, Scheme, dan video kuliah oleh Brian Harvey sebagai rangkaian sumber belajar pertama untuk dicoba. 61 | 62 | Mengapa? Karena SICP sangat unik dalam kemampuannya—setidaknya secara potensial—untuk mengubah pemahaman dasar Anda tentang komputer dan pemrograman. Tidak semua orang akan merasakannya. Beberapa akan membenci buku itu, bahkan ada yang tidak akan melewati beberapa halaman pertama. Tetapi potensi manfaatnya membuatnya layak untuk dicoba. 63 | 64 | Jika Anda tidak dapat menikmati SICP, cobalah _Composing Programs_. Jika masih tidak sesuai, maka cobalah [_How to Design Programs_](https://htdp.org/). Jika tidak ada satu pun dari buku-buku ini yang memberi manfaat bagi Anda, mungkin itu pertanda bahwa Anda harus fokus pada topik lain untuk sementara waktu, dan meninjau kembali disiplin ilmu pemrograman dalam satu atau dua tahun ke depan. 65 | 66 | Dan terakhir, satu poin klarifikasi: panduan ini TIDAK dirancang untuk mereka yang baru memulai pemrograman. Kami berasumsi bahwa Anda adalah seorang _programmer_ yang kompeten tanpa latar belakang ilmu komputer, yang ingin mengisi kesenjangan pengetahuan. Alasan kami menyertakan bagian tentang "pemrograman" hanyalah pengingat bahwa mungkin masih ada banyak hal untuk dipelajari. Bagi mereka yang belum pernah menulis kode sebelumnya, dan ingin memulai, Anda mungkin lebih suka panduan seperti ini. 67 | 68 | ### Arsitektur Komputer 69 | 70 | 71 | 72 | > Perangkat keras adalah platformnya 73 | 74 | – _Mike Acton, Engine Director Insomniac Games_ 75 | 76 | Arsitektur Komputer—kadang disebut "sistem komputer" atau "organisasi komputer"—adalah hal pertama yang patut dilihat pada komputasi di balik perangkat lunak. Dari pengalaman kami, inilah bagian yang paling sering diabaikan para _software engineer_ autodidak. 77 | 78 | Buku pengantar favorit kami adalah [_Computer Systems: A Programmer's Perspective_](https://csapp.cs.cmu.edu/3e/home.html), dan kuliah pengantar arsitektur komputer yang menggunakan buku ini biasanya [akan mencakup](https://csapp.cs.cmu.edu/3e/courses.html) sebagian besar bab 1 sampai 6. 79 | 80 | Kami menyukai buku _CS:APP_ karena pendekatannya yang praktis dan berorientasi pada pemrogram. Meskipun masih ada banyak hal tentang arsitektur komputer yang tidak terdapat dalam buku ini, _CS:APP_ sangat cocok sebagai pengantar bagi mereka yang ingin memahami sistem komputer terutama untuk membuat perangkat lunak yang lebih cepat, lebih efisien, dan lebih andal. 81 | 82 | Bagi mereka yang lebih suka pengenalan topik arsitektur komputer yang lebih ringan dan seimbang antara perangkat keras dan perangkat lunak, kami menyarankan _The Elements of Computing Systems_, juga dikenal sebagai _Nand2Tetris_. Buku ini mencoba memberi Anda pemahaman yang padu tentang cara kerja segala sesuatu yang terdapat pada komputer. Setiap bab membangun bagian kecil dari keseluruhan sistem, mulai dari menulis _logic gate_ dasar dalam HDL, melalui CPU dan _assembler_, hingga aplikasi seukuran permainan Tetris. 83 | 84 | Kami menyarankan Anda untuk membaca enam bab pertama buku ini dan menyelesaikan proyek latihannya. Hal ini dapat mengembangkan pemahaman Anda tentang hubungan antara arsitektur sebuah mesin dan perangkat lunak yang berjalan di atasnya. 85 | 86 | Separuh pertama buku ini (dan semua proyek latihannya) tersedia secara gratis melalui [situs web _Nand2Tetris_](https://www.nand2tetris.org/). Materi buku ini juga tersedia dalam bentuk video melalui [kursus daring dari Coursera](https://www.coursera.org/learn/build-a-computer). 87 | 88 | _Nand2Tetris_ menukar pembahasan yang mendalam dengan kesederhanaan dan keterpaduan. Khususnya dua konsep yang sangat penting dalam arsitektur komputer modern, yaitu _pipelining_ dan _memory hierarchy_, tetapi keduanya hampir tidak ada dalam buku ini. 89 | 90 | Setelah Anda merasa nyaman dengan _Nand2Tetris_, kami sarankan untuk mencoba kembali buku _CS:APP_, atau mempertimbangkan [_Computer Organization and Design_](https://smile.amazon.com/Computer-Organization-Design-Fifth-Architecture/dp/0124077269) oleh Patterson dan Hennessy, sebuah buku teks klasik yang sangat bagus. Anda tidak harus membaca setiap bagian dari buku ini; kami menyarankan Anda untuk mengikuti kuliah [CS61C](https://inst.eecs.berkeley.edu/~cs61c/sp15/) _Great Ideas in Computer Architecture_ dari Berkeley untuk bacaan tertentu dalam buku ini. Catatan kuliahnya tersedia secara daring, dan kuliah sebelumnya [terdapat di Internet Archive](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_). 91 | 92 | ### Sistem Operasi 93 | 94 | 95 | 96 | [_Operating System Concepts_](https://www.amazon.com/dp/1118063333/) ("_Dinosaur book_") dan [_Modern Operating Systems_](https://www.amazon.com/dp/1118063333/) adalah dua buku "klasik" tentang sistem operasi. Keduanya menuai kritik karena kurang jelas dan tidak ramah bagi siswa pada umumnya. 97 | 98 | _Operating Systems: Three Easy Pieces_ adalah alternatif yang [tersedia gratis secara daring](https://pages.cs.wisc.edu/~remzi/OSTEP/). Kami sangat menyukai struktur dan keterbacaan buku ini, dan merasa bahwa latihan yang terdapat pada buku ini sangat bermanfaat. 99 | 100 | Setelah OSTEP, kami ingin Anda mengeksplorasi beberapa keputusan pada rancangan sistem operasi tertentu, melalui beberapa buku "{nama sistem operasi} Internals" seperti [_Lions' commentary on Unix_](https://www.amazon.com/Lions-Commentary-Unix-John/dp/1573980137/), [_The Design and Implementation of the FreeBSD Operating System_](https://www.amazon.com/Design-Implementation-FreeBSD-Operating-System/dp/0321968972/), dan [_Mac OS X Internals_](https://www.amazon.com/Mac-OS-Internals-Systems-Approach/dp/0321278542/). Untuk Linux, kami menyarankan buku Robert Love yang luar biasa, yaitu [_Linux Kernel Development_](https://www.amazon.com/Linux-Kernel-Development-Robert-Love/dp/0672329468). 101 | 102 | Cara yang bagus untuk memperkuat pemahaman Anda tentang sistem operasi adalah dengan membaca _source code_ dari kernel sistem operasi kecil dan mencoba menambahkan fitur baru. Salah satu pilihan adalah [xv6](https://pdos.csail.mit.edu/6.828/2016/xv6.html), sebuah _port_ sistem operasi Unix V6 ke bahasa ANSI C dan arsitektur x86, yang dikembangkan untuk pembelajaran di MIT. Pada buku OSTEP terdapat lampiran [xv6 labs](https://pages.cs.wisc.edu/~remzi/OSTEP/lab-projects-xv6.pdf) yang penuh dengan ide-ide hebat untuk proyek-proyek potensial. 103 | 104 | ### Jaringan Komputer 105 | 106 | 107 | 108 | > Anda tidak bisa menatap bola kristal dan melihat masa depan. Apa yang akan menjadi Internet di masa depan adalah apa yang dibuat oleh masyarakat. 109 | 110 | — _Bob Kahn_ 111 | 112 | Mengingat begitu banyak rekayasa perangkat lunak ada di server dan klien web, salah satu bidang ilmu komputer yang paling penting adalah jaringan komputer. Siswa kami yang mempelajari jaringan secara autodidak menemukan bahwa mereka akhirnya memahami istilah, konsep, dan protokol yang telah berada di sekitar mereka selama bertahun-tahun. 113 | 114 | Buku favorit kami tentang topik ini adalah [_Computer Networking: A Top-Down Approach_](https://smile.amazon.com/Computer-Networking-Top-Down-Approach-7th/dp/0133594149/). Proyek-proyek kecil dan latihan dalam buku ini sangat layak untuk dikerjakan, dan kami sangat menyukai _Wireshark labs_ yang telah mereka [sediakan gratis secara daring](http://www-net.cs.umass.edu/wireshark-labs/). 115 | 116 | Bagi mereka yang lebih menyukai materi dalam bentuk video, kami menyarankan video kuliah [_Introduction to Computer Networking_](https://www.youtube.com/playlist?list=PLoCMsyE1cvdWKsLVyf6cPwCLDIZnOj0NS) dari Stanford yang sebelumnya ada pada platform belajar online mereka, tapi sayangnya sekarang hanya tersedia sebagai playlist tidak resmi di YouTube. 117 | 118 | ## Pertanyaan yang sering diajukan 119 | 120 | #### Untuk siapa panduan ini dibuat? 121 | 122 | Kami paham bahwa Anda adalah seorang _software engineer_ autodidak, lulusan _bootcamp_ atau siswa SMA yang ingin tahu, atau mahasiswa yang ingin melengkapi pendidikan formal Anda dengan belajar mandiri. Pertanyaan tentang kapan memulai perjalanan ini sepenuhnya bersifat pribadi, tetapi kebanyakan orang cenderung mendapat manfaat dari memiliki beberapa pengalaman profesional sebelum menyelam terlalu jauh ke dalam teori ilmu komputer. Misalnya, kami melihat bahwa siswa suka belajar tentang sistem basis data jika mereka telah bekerja dengan basis data secara profesional, atau tentang jaringan komputer jika mereka pernah mengerjakan satu atau dua proyek aplikasi web. 123 | 124 | #### Bagaimana dengan AI/grafis/topik favorit X? 125 | 126 | Kami telah mencoba membatasi daftar kami pada topik ilmu komputer yang kami rasa perlu diketahui oleh setiap _software engineer_, terlepas dari spesialisasi atau industri, tetapi dengan fokus pada sistem. Dari pengalaman kami, ini akan menjadi topik dengan manfaat terbesar untuk sebagian besar _engineer_ autodidak dan lulusan _bootcamp_, dan memberikan dasar yang kuat untuk studi lebih lanjut. Selanjutnya, Anda akan berada dalam posisi yang jauh lebih baik untuk membaca buku teks atau makalah lanjutan dan mempelajari konsep utama tanpa banyak panduan. Berikut adalah titik awal yang kami sarankan untuk beberapa "topik pilihan" umum: 127 | 128 | - Untuk topik kecerdasan buatan: selesaikan [kursus pengantar AI dari Berkeley](http://ai.berkeley.edu/) dengan menonton video dan mengerjakan proyek Pacman yang luar biasa. Untuk buku teks, gunakan _Artificial Intelligence: A Modern Approach_ oleh Russell dan Norvig. 129 | - Untuk topik _machine learning_: selesaikan kursus di Coursera oleh Andrew Ng. Bersabarlah, dan pastikan Anda memahami dasar-dasarnya sebelum beralih ke topik baru yang menarik seperti _deep learning_. 130 | - Untuk grafik komputer: pelajari materi [CS 184 Berkeley](https://inst.eecs.berkeley.edu/~cs184/fa12/onlinelectures.html), dan gunakan [_Computer Graphics: Principles and Practice_](https://www.amazon.com/Computer-Graphics-Principles-Practice-3rd/dp/0321399528) sebagai buku teks. 131 | 132 | #### Seberapa ketat urutan yang disarankan? 133 | 134 | Jika diperhatikan, semua mata pelajaran ini memiliki sejumlah bagian yang saling tumpang tindih, dan saling merujuk satu sama lain. Anda dapat mengambil contoh hubungan antara matematika diskrit dan algoritma: mempelajari matematika terlebih dahulu akan membantu Anda menganalisis dan memahami lebih dalam algoritma Anda, tetapi mempelajari algoritma terlebih dahulu akan memberikan motivasi dan konteks yang lebih besar untuk matematika diskrit. Idealnya, Anda akan mengunjungi kembali kedua topik ini berkali-kali sepanjang karier Anda. 135 | 136 | Dengan demikian, urutan yang kami sarankan dapat membantu Anda _untuk langsung memulai_... jika Anda memiliki alasan kuat untuk memilih urutan yang berbeda, maka lakukanlah. Beberapa "prasyarat" yang menurut kami penting adalah: arsitektur komputer sebelum sistem operasi atau database, dan jaringan dan sistem operasi sebelum sistem terdistribusi. 137 | 138 | #### Apa perbedaan panduan ini dengan kurikulum Open Source Society atau freeCodeCamp? 139 | 140 | Ketika panduan ini pertama kali ditulis pada tahun 2016, [panduan OSS](https://github.com/open-source-society/computer-science) membahas terlalu banyak mata pelajaran, menyarankan sumber belajar yang tidak lebih baik dari kebanyakan, dan tidak memberikan alasan atau panduan seputar mengapa atau aspek apa dari kursus tertentu yang lebih bermanfaat. Kami berusaha untuk membatasi daftar kursus kami hanya untuk kursus yang _benar-benar harus Anda ketahui_ sebagai _software engineer_, terlepas dari spesialisasi Anda, dan untuk membantu Anda memahami mengapa setiap kursus disertakan. Di tahun-tahun berikutnya, kualitas panduan OSS telah meningkat, tetapi kami masih berpikir bahwa panduan ini memberikan jalur pembelajaran yang lebih jelas dan lebih terpadu. 141 | 142 | freeCodeCamp sebagian besar berfokus pada pemrograman, bukan ilmu komputer. Untuk alasan mengapa Anda mungkin ingin mempelajari ilmu komputer, coba lihat [di atas](#mengapa-mempelajari-ilmu-komputer). Jika Anda baru memulai pemrograman, kami sarankan untuk memprioritaskan kurikulum tersebut, dan kembali ke panduan ini dalam satu atau dua tahun ke depan. 143 | 144 | #### Bagaimana dengan bahasa pemrograman X? 145 | 146 | Mempelajari bahasa pemrograman tertentu adalah hal yang sangat berbeda dengan mempelajari bidang pada ilmu komputer — mempelajari bahasa pemrograman jauh _lebih mudah_ dan _tidak lebih penting_ manfaatnya. Jika Anda sudah mengetahui beberapa bahasa pemrograman, kami sangat menyarankan Anda untuk mengikuti panduan kami dan menyesuaikan penguasaan bahasa pemrograman di sela waktu, atau setelah menyelesaikannya. Jika Anda telah mempelajari pemrograman dengan baik (seperti melalui _Structure and Interpretation of Computer Programs_), dan terutama jika Anda telah mempelajari kompiler, Anda hanya akan membutuhkan waktu setidaknya satu akhir pekan untuk mempelajari bahasa pemrograman baru, setelah itu Anda dapat mempelajarinya tentang _library_/_tooling_/ekosistem di tempat kerja. 147 | 148 | #### Bagaimana dengan teknologi terbaru X? 149 | 150 | Tidak ada satu teknologi pun yang lebih penting sehingga belajar menggunakannya harus menjadi bagian inti dari pendidikan Anda. Di sisi lain, adalah hal yang sangat bagus bahwa Anda bersemangat untuk mempelajari teknologi tersebut. Triknya adalah memulai dari bidang atau konsep yang mendasari teknologi tertentu, dan mempelajarinya secara mendalam sebelum melihat bagaimana teknologi terbaru Anda mengisi gambaran yang lebih besar. 151 | 152 | #### Mengapa Anda masih merekomendasikan SICP? 153 | 154 | Anda perlu mencoba buku SICP. Beberapa orang menganggap SICP mencengangkan, ciri yang hanya dimiliki oleh segelintir buku. Jika Anda tidak menyukainya, Anda dapat mencoba buku lain dan setelah itu mungkin kembali ke SICP. 155 | 156 | #### Mengapa Anda masih merekomendasikan _Dragon book_? 157 | 158 | _Dragon book_ masih merupakan sumber tunggal terlengkap untuk topik seputar kompiler. Buku tersebut sering mendapat reputasi buruk, biasanya karena terlalu menekankan pada topik tertentu yang kurang populer untuk dibahas secara detail, seperti _parsing_. Masalahnya adalah, buku itu tidak pernah dimaksudkan untuk dipelajari dari sampul ke sampul, hanya untuk menyediakan materi pembelajaran yang cukup bagi seorang instruktur untuk menyusun materi kuliah. Demikian pula, seorang pembelajar mandiri dapat memilih petualangan mereka melalui buku, atau lebih baik mengikuti saran yang telah dibuat oleh dosen dalam garis besar mata kuliah mereka. 159 | 160 | #### Bagaimana saya bisa mendapatkan buku teks yang terjangkau? 161 | 162 | Kebanyakan dari buku teks yang kami sarankan tersedia secara daring dan gratis, berkat kemurahan hati penulisnya. Untuk buku yang tidak tersedia gratis, kami sarankan untuk membeli buku bekas edisi lama. Sebagai aturan umum, jika suatu buku teks punya lebih dari beberapa edisi, kemungkinan besar edisi lama sudah cukup memadai. Jelas tidak mungkin versi terbaru 10x lebih baik daripada yang lama, meskipun harganya berbeda! 163 | 164 | #### Siapa yang menulis panduan ini? 165 | 166 | Panduan ini ditulis oleh [Oz Nova](https://twitter.com/oznova_) dan [Myles Byrne](https://twitter.com/quackingduck), dengan pembaruan pada tahun 2020 oleh Oz. Panduan ini dibuat berdasarkan pengalaman kami mengajar dasar-dasar ilmu komputer kepada lebih dari 1000 _engineer_ autodidak atau lulusan _bootcamp_ dalam kelompok kecil di San Francisco dan secara daring. Terima kasih kepada semua siswa kami atas masukan tentang sumber belajar mandiri. 167 | 168 | Kami yakin Anda dapat mempelajari semua hal di atas, dengan waktu dan motivasi yang cukup. Tetapi jika Anda lebih menyukai program intensif, terstruktur, dan dibimbing oleh instruktur, Anda mungkin tertarik dengan program [Computer Science Intensive](https://bradfieldcs.com/csi/) dari kami. Kami [TIDAK](https://ozwrites.com/masters/) menyarankan untuk mengejar gelar magister. 169 | --------------------------------------------------------------------------------