Ringkasan
-
Topik utama
- Memperkenalkan buku dan materi terkait yang menjelaskan langsung struktur internal dan keputusan desain aplikasi open source oleh para pengembangnya.
-
Poin utama
- Berbeda dengan arsitek, pengembang perangkat lunak secara historis memiliki sedikit kesempatan untuk mempelajari secara sistematis struktur program besar yang penting.
- Akibatnya, muncul masalah berupa pengulangan kesalahan serupa alih-alih memanfaatkan contoh sukses yang sudah ada.
- Buku-buku ini merangkum struktur, komponen, cara interaksi, dan pelajaran yang diperoleh selama proses pengembangan dari proyek-proyek open source utama.
- Pengembang pemula dapat mempelajari cara berpikir pengembang berpengalaman, sementara pengembang tingkat menengah dan senior dapat merujuk pada contoh penyelesaian masalah desain yang kompleks.
- Semua materi tersedia dengan lisensi Creative Commons Attribution 3.0, dan pendapatan dari penjualan buku disumbangkan kepada Amnesty International.
- Kontribusi komunitas dimungkinkan, termasuk pelaporan kesalahan, penerjemahan, dan penulisan bab baru.
Pendahuluan
-
Keterbatasan struktural dalam pembelajaran desain perangkat lunak
- Dalam proses pendidikan, arsitek mengamati banyak bangunan dan mempelajari kritik dari para ahli.
- Sebaliknya, pengembang perangkat lunak memiliki kesempatan terbatas untuk memahami program berskala besar secara mendalam.
- Banyak pengembang membangun pengalaman terutama dari program yang mereka tulis sendiri.
- Akibatnya, mereka lebih berisiko mengulangi kesalahan desain serupa daripada berkembang berdasarkan contoh desain unggul dari masa lalu.
-
Tujuan materi
- Tujuannya adalah menyediakan struktur nyata aplikasi open source dalam bentuk yang dapat dianalisis.
- Penulis proyek menjelaskan langsung struktur perangkat lunak dan latar belakang desainnya.
- Materi ini membantu pengembang mempelajari cara berpikir desain dari pengembang lain.
Isi
Menjelaskan langsung struktur proyek open source
-
Objek analisis utama
- Total empat buku membahas berbagai aplikasi open source dan topik terkait.
- Setiap bab menjelaskan struktur dan pendekatan desain dari proyek atau topik teknis tertentu.
- Para penulis terdiri dari pengembang proyek tersebut atau pakar terkait.
-
Pertanyaan inti dalam analisis
- Apa saja komponen utama program.
- Bagaimana setiap komponen saling berinteraksi.
- Keputusan desain apa yang diambil selama proses pengembangan.
- Pelajaran apa yang diperoleh saat membuat proyek tersebut.
AOSA Volume 1 membahas struktur aplikasi open source representatif
-
Isi utama
- Membahas berbagai proyek seperti Asterisk, Audacity, Bash, Berkeley DB, CMake, Eclipse, Graphite, HDFS, LLVM, Mercurial, Selenium WebDriver, dan Sendmail.
- Mencakup cakupan luas seperti perangkat lunak sistem, alat pengembangan, basis data, sistem file terdistribusi, alat kolaborasi, dan alat visualisasi.
-
Makna penting
- Struktur internal proyek open source dapat dipahami dari sudut pandang pengembang nyata.
- Masalah desain dan cara penyelesaian yang berulang di berbagai bidang teknologi dapat dibandingkan.
AOSA Volume 2 menyediakan cakupan teknologi yang lebih luas dan contoh desain
-
Isi utama
- Membahas scalable web architecture, rekayasa rilis Firefox, FreeRTOS, GDB, GHC, Git, GPSD, MediaWiki, Moodle, nginx, Open MPI, Puppet, PyPy, SQLAlchemy, Twisted, ZeroMQ, dan lainnya.
- Mencakup beragam topik seperti web, compiler, sistem operasi, sistem terdistribusi, runtime bahasa, framework, dan alat infrastruktur.
-
Makna penting
- Menyediakan contoh tentang cara merancang dan mengoperasikan sistem perangkat lunak yang kompleks.
- Berguna bagi pengembang tingkat menengah dan senior untuk meninjau contoh nyata keputusan desain.
POSA membahas masalah performa dalam aplikasi open source
-
Isi utama
- Membahas high-performance networking di Chrome, perubahan dari SocialCalc ke EtherCalc, sistem build Ninja, optimasi parsing XML, MemShrink, performa jaringan mobile, pemrosesan big data dalam bioinformatika, dan lainnya.
-
Makna penting
- Menunjukkan bahwa peningkatan performa perangkat lunak bukan sekadar optimasi kode, melainkan terkait dengan desain struktural, metode deployment, lingkungan jaringan, dan cara pemrosesan data.
- Masalah performa dapat dianalisis dengan berfokus pada contoh nyata.
500 Lines or Less mengimplementasikan ide inti dengan sedikit kode
-
Isi utama
- Membahas alat pemrograman visual, sistem continuous integration, sistem build dinamis, web crawler, basis data graf in-memory, framework web berbasis event, interpreter Python, OCR, spreadsheet web, analisis statis, template engine, server web sederhana, dan lainnya.
-
Makna penting
- Menjelaskan prinsip desain inti dalam skala kode yang terbatas.
- Disusun agar konsep sistem yang kompleks dapat dipelajari melalui implementasi kecil.
Lisensi dan cara berkontribusi jelas
-
Lisensi
- Materi ini tersedia dengan lisensi Creative Commons Attribution 3.0 Unported.
- Materi dapat digunakan selama memenuhi ketentuan atribusi.
-
Penggunaan pendapatan
- Semua royalti dari penjualan buku disumbangkan kepada Amnesty International.
-
Cara berkontribusi
- Kesalahan dapat dilaporkan.
- Anda dapat berpartisipasi dalam penerjemahan ke bahasa atau format lain.
- Anda dapat menulis bab yang menjelaskan arsitektur proyek open source baru.
- Orang yang berminat pada penerjemahan baru atau penulisan bab dapat menghubungi pihak terkait proyek.
Kesimpulan
-
Rangkuman inti
- Materi ini adalah kumpulan contoh untuk mempelajari secara sistematis struktur internal dan keputusan desain aplikasi open source.
- Pengembang dapat memahami komposisi seluruh sistem dan alasan desainnya, bukan hanya potongan kode individual.
- Bagi pengembang pemula, ini menjadi titik awal untuk mempelajari cara berpikir pengembang berpengalaman.
- Bagi pengembang tingkat menengah dan senior, ini menjadi materi untuk membandingkan dan menganalisis contoh nyata penyelesaian masalah desain yang kompleks.
-
Nilai praktis
- Materi ini bernilai sebagai referensi tidak hanya bagi pengembang yang menggunakan proyek open source, tetapi juga bagi pengembang yang merancang dan mengoperasikannya sendiri.
- Membantu mengurangi kesalahan desain yang berulang dan mempelajari contoh desain yang telah teruji.
- Menunjukkan bahwa berbagi pengetahuan berbasis komunitas dapat berkontribusi pada peningkatan kemampuan pengembangan perangkat lunak.
1 komentar
Terima kasih