Bagaimana Cara Berpikir Layaknya Ilmuan Komputer: Belajar dengan Python 3 (RLE)

Tujuan dari buku ini adalah untuk mengajarkan bagaimana cara berpikir seperti seorang ilmuan. Cara berpikir ini menggabungkan beberapa fitur terbaik dari matematika, perekayasaan, dan ilmu pengetahuan alam.


on Rab, 12/09/2015 - 12:36
8.652 View

Copyright Notice

Copyright (C) Peter Wentworth, Jeffrey Elkner, Allen B. Downey and Chris Meyers.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with Invariant Sections being Foreword, Preface, and Contributor List, no
Front-Cover Texts, and no Back-Cover Texts. A copy of the license is
included in the section entitled “GNU Free Documentation License”.

The Rhodes Local Edition (RLE) (Versi Oktober 2012)

Oleh Peter Wentworth, diterjemahkan ke Bahasa Indonesia oleh Aditya Suranata.

Ucapan Terimakasih

Kami beralih dari Java ke Python pada kuliah perkenalan tahun 2010. Sejauh ini kami merasakan hasil yang positif. Selebihnya akan terjawab seiring waktu.

Pendahuluan dari buku ini merupakan titik mulai yang bagus untuk kami, khususnya karena ijin umum untuk merubah sesuatu. Dengan memiliki catatan sendiri atau handout memungkinkan kami untuk beradaptasi dan tetap segar, mengatur ulang hal-hal, yang tentunya memberikan kami kelincahan. Kami juga bisa memastikan bahwa setiap mahasiswa dalam perkuliahan mendapat salinan dari handoutnya -- yang mana akan sulit untuk dilakukan jika kami meresepkan buku pelajaran yang mahal kepada mereka.

Seorang kolega sekaligus teman, Peter Waren, pernah membuat pernyataan bahwa untuk belajar pengantar pemrograman, sebaiknya pembahasannya lebih banyak mengarah ke hal lingkungan seperti bahasa pemrograman itu sendiri.

Saya sendiri merupakan penggemar berat dari IDE (Integrated Development Environments). Saya ingin segala bantuan yang ada diintegrasikan ke editor saya, seperti layaknya rakyat golongan satu, semuanya tersedia hanya dalam satu kali klik. Saya ingin syntax highlighting. Saya ingin syntax checking secara langsung atau live, dan autocompletion yang sensible jadi saya tidak perlu mengetik panjang lebar, sudah auto komplit. Saya menginginkan sebuah editor yang bisa melipat bodi fungsi atau region dari kode kode sehingga bisa memperluas pandangan, karena kemampuan ini akan mempromosikan dan mendorong bagaimana kami membangun mental abstraksi kepada para mahasiswa.

Saya terutama tertarik untuk memiliki debugger single-stepping (langkah demi langkah) dan breakpoint dengan fitur inspeksi kode built-in. Dan untuk itu kami sedang mencoba untuk membangun sebuah model konseptual dari pengeksekusian program pada pemahaman mahasiswa kami, jadi saya menemukan cara terbaik untuk mengajar dengan memiliki call stack dan variabel yang bisa terlihat secara eksplisit, dan agar bisa dengan langsung mengamati hasil dari pengeksekusian sebuah perintah.

Filosopi saya bukanlah untuk fokus pada mengajar sebuah bahasa saja, tapi untuk sebuah kombinasi dari IDE dan bahasa yang dipaketkan bersama, dan dievaluasi sebagai satu kesatuan.

Saya telah membuat perubahan yang cukup dalam pada buku aslinya untuk mencerminkan ini (dan banyak lagi pandangan opini lainnya yang saya pegang), dan saya tidak masalah kalau akan ada perubahan lainnya lagi seiring dengan pemahaman kami pada perkuliahannya yang semakin matang.

Berikut beberapa hal penting dari hal yang saya temui dengan cara yang berbeda:

  • Pada awal perkuliahan yang hanya 3 minggu lamanya namun memiliki jadwal yang sangat padat, tapi kami juga memiliki satu semester lain untuk mengajarkan mereka yang masuk ke program utama kami. Jadi buku ini dibagi menjadi dua bagian: pada bagian lima bab pertama akan membahas secara garis besar, dan sisanya yang lebih terperinci dalam semester yang berbeda.
  • Kami menggunakan Python 3. Lebih bersih, lebih berorientasi objek, dan memiliki penyimpangan ad-hoc yang jauh lebih sedikit daripada versi Python sebelumnya.
  • Kami menggunakan PyScripter sebagai IDE, pada Windows. Dan disisipkan kedalam bagian-bagian dari buku ini, dengan screenshoot, dll.
  • Tidak mencakup GASP (Graphics API for Students of Python).
  • Untuk grafik kami mulai dengan modul Turtle. Tapi untuk selanjutnya, kami menggunakan PyGame untuk grafik yang labih lanjut.
  • Saya telah memperkenalkan beberapa event-driven programming menggunakan turtle.
  • Saya telah mencoba mendorong gagasan berorientasi objek sebelumnya, tanpa meminta mahasiswa untuk mempersatukan objek-objek atau menulis kelas-kelas mereka sendiri. Jadi, sebagai contoh, pada bab tentang turtle, kami membuat banyak instan dari turtle, membicarakan atribut-atribut dan state (warna, posisi, dll), dan kami menikmati gaya method-call (pemanggilan method) untuk memindahkan-mindahkan objeknya, seperti tess.forward(100). Demikian juga, ketika kami menggunakan angka acak, kami menghindari "hidden singleton generator" dari modul random -- kami lebih memilih untuk membuat sebuah instan dari generator, dan meng-invoke methodnya dari instan tersebut.
  • Kemudahan dalam membuat list dan perulangan for rasanya memang paling juara di Python, jadi daripada menggunakan command line input tradisional untuk data, saya lebih menikmati menggunakan loop dan list, seperti ini:
teman = ["Wayan", "Made", "Komang"]
for t in teman:
    undangan = "Hai " + t + ".  Datang ke pernikahan ku nanti ya!"
    print(undangan)

Ini juga berarti bahwa saya bertemu range pada paparan awal. Saya membayangkan kalau seiring dengan waktu kami akan melihat kesempatan yang lain untuk mengeksploitasi "early list, early iteration" dalam bentuknya yang paling sederhana.

  • Saya membuang doctest: karena menurut saya terlalu aneh. Sebagai contoh, tesnya akan gagal jika spasi antara elemen list tidak benar-benar sama dengan string output, atau jika Python mencetak sebuah string dengan petik satu, tapi kami menulis test casenya dengan petik dua. Kasus seperti ini juga cukup membingungkan mahasiswa (dan bahkan instruktor).
def addlist(xs):
    """
    >>> xs = [2,3,4]
    >>> addlist(xs)
    9
    """
    return

Jika kamu bisa menjelaskan dengan elegan perbedaan dalam aturan cakupan (scope rule) dan waktu hidup (lifetime) atara parameter xs dan variabel doctest xs, tolong beritahu saya. Ya, saya tahu doctest membuat cakupannya sendiri dibelakang kita, tapi itulah sihir hitam yang benar-benar harus diusahakan untuk kita hindari. Dari aturan indentasi pada umumnya, juga bisa terlihat kalau doctest bersarang didalam cakupan fungsi (nested inside function scope), tapi sebenarnya tidak. Para mahasiswa mengira bahwa parameternya telah diberikan nilai oleh pemberian nilai pada xs pada doctest!

Saya juga memikirkan bahwa menjaga test suite tetap terpisah dari fungsi dibawah test akan menjadikan relasi yang lebih bersih antara pemanggil (caller) dan callee (yang dipanggil), dan memberikan kesempatan yang labih baik agar konsep argument passing / parameter dipahami dengan akurat.

Terdapat modul unit testing yang bagus di Python, (dan PyScripter menawarkan dukungan untuk itu, dan pembuatan modul tes kerangka terotomatisasi), tapi fitur itu terlihat terlalu lanjut untuk para pemula, karena memerlukan konsep multi modul.

Jadi saya lebih menyukai perancah test saya sendiri di Bab 6 (sekitar 10 baris kode), yang dapat dimasukan ke file apapun yang sedang dikerjakan oleh mahasiswa.

  • Ketika dimungkinkan, saya lebih banyak bermain dengan command-line untuk input / process / output. Kebanyakan dari murid kami sama sekali belum pernah melihat shell command-line, dan ini bisa dikatakan sebagai hal yang cukup mengerikan.
  • Saya lebih memilih pendekatan yang "klasik / statik" untuk menulis kelas dan objek. Python (dibandingkan dengan bahasa seperti JavaScript, Ruby, Perl, PHP, dll) tidak benar-benar menekankan gagasan dari kelas "tertutup" (sealed class) atau anggota "privat" (private member), atau bahkan instan "tertutup" (sealed instance).

Jadi satu pendekatan pengajaran adalah untuk mengalokasikan setiap instan sebagai sebuah empty container, dan secara subsekuen memungkinkan external client dari kelas untuk meng-poke member baru (method atau attribute) kedalam instan lain seperti yang diinginkan. Itu adalah pendekatan yang sangat dinamis, tapi sayangnya cara itu tidak mendorong pemikiran dan pemahaman mengenai abstractions, layers, contracts, decoupling, dll. Dan bahkan juga mungkin menjadi seperti hal yang banyak ditulis di makalah sebagai sesuatu yang ilegal dan membahayakan.

Dalam pendekatan yang lebih konservatif, kami menempatkan initializer kedalam setiap kelas, kami menentukan pada saat instansiasi objek member apa saja yang kami inginkan, dan kami menginisialisasi instan-instan tersebut dari dalam kelasnya. Jadi kami bergerak lebih dekat kedalam filosofi dari C# / Java pada yang satu ini.

  • Kami bergerak kearah pengenalan algoritma yang lebih banyak dalam perkuliahan sebelumnya. Python adalah bahasa pengajaran yang efisien -- kami bisa membuat progres cepat. Tapi keuntungan yang kami buat dari itu ingin kami tanamkan ke problem solving yang lebih dalam, dan algoritma yang lebih kompleks dari dasarnya, daripada mencakupkan "fitur-fitur Python yang lebih banyak". Beberapa dari perubahan tersebut telah mulai menemukan jalan mereka dalam versi ini, dan saya yakin kami akan melihat lebih banyak lagi nanti.
  • Kami tertarik mengenai masalah dalam hal mengajar dan belajar. Beberapa penelitian mengindikasikan bahwa "kejenakaan intelektual" sangatlah penting. Seperti halnya workbook Odds-and-ends, isinya sudah sedikit dan tipis, bahasannya juga aneh dan sulit dimengerti. Maka dari itu saya ingin membuat lebih dari sekedar buku tentang pemrograman menggunakan Python.

Profil Penulis

User Picture
  • Member Since 7 tahun 7 bulan ago
Aditya Suranata

Embedded System, Internet of Things, Precision Agriculture, Controlled Environment...

Aditya suka menulis, bukan hanya sekedar hobi, menulis menjadi medianya untuk mencurahkan pikiran dan perasaan. Di TutorKeren.com kebanyakan menyumbang tulisan sesuai dengan minat dan keahliannya yaitu pada kategori pemrograman dan elektronika....

Comments