Saya sudah belajar, bekerja, dan bermain dengan Python selama satu setengah tahun sekarang. Sebagai seorang ahli biologi yang perlahan-lahan beralih ke bio-informatika, bahasa ini telah menjadi inti dari semua kontribusi utama yang saya buat di lab. Saya kurang lebih jatuh cinta dengan cara Python memungkinkan saya untuk mengekspresikan solusi yang indah dan juga dengan semantik bahasa yang memungkinkan aliran alami dari pikiran ke kode yang bisa diterapkan.
Yang ingin saya ketahui adalah jawaban Anda untuk jenis pertanyaan yang jarang saya lihat di forum ini atau lainnya. Pertanyaan ini tampaknya penting bagi saya bagi siapa saja yang berada di jalur perbaikan Python tetapi siapa yang bertanya-tanya apa langkah selanjutnya.
Biarkan saya meringkas apa yang saya TIDAK ingin tanyakan terlebih dahulu;)
- Saya tidak ingin tahu cara CEPAT belajar Python
- Saya juga tidak ingin mencari tahu cara terbaik untuk berkenalan dengan bahasa tersebut
- Akhirnya, saya tidak ingin tahu pendekatan 'satu trik yang melakukan semuanya'.
Apa yang saya ingin tahu tentang pendapat Anda, adalah:
Apa saja langkah-langkah yang akan Anda rekomendasikan kepada pekerja harian Python, dari magang ke status guru (jangan ragu untuk berhenti di mana pun keahlian Anda menentukannya), agar seseorang MENINGKATKAN DENGAN KONSTAN, menjadi pembuat kode Python yang lebih baik dan lebih baik, selangkah demi selangkah. Beberapa orang di SO hampir tampak layak disembah karena kehebatan Python mereka, mohon beri tahu kami :)
Jenis jawaban yang akan saya nikmati (tapi jangan ragu untuk mengejutkan pembaca: P), diformat kurang lebih seperti ini:
- Baca ini (misalnya: tutorial python), perhatikan detail seperti itu
- Kode untuk banyak waktu / masalah / baris kode
- Kemudian, baca ini (misalnya: buku ini atau itu), tetapi kali ini, perhatikan ini
- Atasi beberapa masalah kehidupan nyata
- Kemudian, lanjutkan membaca Y.
- Pastikan untuk memahami konsep-konsep ini
- Kode untuk waktu X
- Kembali ke dasar-dasar ini dan itu atau pindah lebih jauh ke ...
- (Anda mendapatkan intinya :)
Saya benar-benar peduli tentang mengetahui pendapat Anda tentang apa yang harus diperhatikan seseorang, pada berbagai tahap, untuk maju secara KONSTAN (dengan upaya, tentu saja). Jika Anda berasal dari bidang keahlian tertentu, diskusikan jalur yang Anda lihat sesuai di bidang ini.
EDIT: Terima kasih atas masukan Anda yang luar biasa, saya kembali ke jalur peningkatan Python! Saya sangat menghargai!
Salah satu cara yang baik untuk meningkatkan pengetahuan Python Anda adalah menggali kode sumber perpustakaan, platform, dan kerangka kerja yang sudah Anda gunakan.
Misalnya, jika Anda membangun situs di Django , banyak pertanyaan yang mungkin membingungkan Anda dapat dijawab dengan melihat bagaimana Django mengimplementasikan fitur yang dimaksud.
Dengan cara ini Anda akan terus mengambil idiom baru, gaya pengkodean, dan trik Python . (Beberapa akan menjadi baik dan beberapa akan menjadi buruk.)
Dan ketika Anda melihat sesuatu Pythony yang tidak Anda mengerti di sumbernya, naiklah ke saluran #python IRC dan Anda akan menemukan banyak "pengacara bahasa" yang senang menjelaskan.
Akumulasi dari klarifikasi kecil ini selama bertahun-tahun mengarah pada pemahaman yang jauh lebih mendalam tentang bahasa dan semua seluk beluknya.
sumber
Memahami (lebih dalam) tipe data Python dan perannya terkait dengan memori mgmt
Seperti yang diketahui oleh sebagian dari Anda di komunitas, saya mengajar kursus Python , yang paling populer adalah kursus Intro + Intermediate yang komprehensif serta kursus "lanjutan" yang memperkenalkan berbagai bidang pengembangan aplikasi.
Cukup sering, saya ditanya pertanyaan yang sangat mirip, "Haruskah saya mengambil kursus intro atau lanjutan Anda? Saya sudah memprogram Python selama 1-2 tahun, dan saya pikir intro terlalu sederhana untuk saya, jadi saya akan ingin melompat langsung ke mahir ... kursus mana yang akan Anda rekomendasikan? "
Untuk menjawab pertanyaan mereka, saya menyelidiki untuk melihat seberapa kuat mereka di bidang ini - bukan itu benar-benar cara terbaik untuk mengukur apakah mereka siap untuk kursus lanjutan, tetapi untuk melihat seberapa baik pengetahuan dasar mereka tentang objek Python dan model memori, yang merupakan penyebab banyak bug Python ditulis oleh mereka yang bukan hanya pemula tetapi mereka yang telah melampaui itu.
Untuk melakukan ini, saya mengarahkan mereka pada pertanyaan kuis 2-bagian sederhana ini:
Banyak kali, mereka bisa mendapatkan output, tetapi mengapa lebih sulit dan jauh lebih penting dari suatu respons ... Saya akan menimbang output sebagai 20% dari jawaban sementara "mengapa" mendapat kredit 80%. Jika mereka tidak bisa mendapatkan alasannya, terlepas dari bagaimana pengalaman Python yang mereka miliki, saya akan selalu mengarahkan orang ke kursus intro + menengah yang komprehensif karena saya menghabiskan satu kuliah tentang objek dan manajemen memori ke titik di mana Anda harus dapat menjawab dengan output dan alasannya dengan keyakinan yang cukup. (Hanya karena Anda tahu sintaksis Python setelah 1-2 tahun tidak membuat Anda siap untuk bergerak melampaui label "pemula" sampai Anda memiliki pemahaman yang jauh lebih baik sejauh cara Python bekerja di bawah selimut.)
Penyelidikan selanjutnya yang membutuhkan jawaban yang serupa bahkan lebih sulit, misalnya,
Contoh 3
Topik berikutnya yang saya sarankan adalah memahami penghitungan referensi dengan baik, mempelajari apa arti "magang" (tetapi tidak harus menggunakannya), belajar tentang salinan dangkal dan dalam (seperti dalam Contoh 3 di atas), dan akhirnya, keterkaitan antara berbagai jenis dan konstruksi dalam bahasa, yaitu daftar vs tupel, dikt vs. vs. set, daftar pemahaman vs ekspresi generator, iterator vs generator, dll.; namun semua saran lainnya adalah posting lain untuk waktu yang lain. Semoga ini bisa membantu! :-)
ps. Saya setuju dengan tanggapan lain untuk menjadi lebih intim dengan introspeksi serta mempelajari kode sumber proyek lain dan menambahkan "+1" yang kuat untuk kedua saran!
pps. Pertanyaan bagus BTW. Saya berharap pada awalnya saya cukup pintar untuk menanyakan sesuatu seperti ini, tapi itu sudah lama sekali, dan sekarang saya mencoba untuk membantu orang lain dengan bertahun-tahun pemrograman Python penuh waktu saya !!
sumber
print
bukan pernyataan.Lihatlah esai Peter Norvig tentang menjadi programmer utama dalam 10 tahun: http://norvig.com/21-days.html . Saya bertaruh itu berlaku untuk bahasa apa pun.
sumber
Pahami Introspeksi
dir()
setaratype()
setaradis
modul untuk melihat bagaimana berbagai konstruksi bahasa bekerjaMelakukan hal-hal ini akan
sumber
type()
setara" itu akan sangat sulit jika Anda mengambil spesifikasi metaclassy penuh daritype
!sumber
Saya akan memberi Anda nasihat paling sederhana dan paling efektif yang saya pikir semua orang bisa memberi Anda: kode .
Anda hanya bisa lebih baik dalam menggunakan bahasa (yang menyiratkan memahaminya) dengan coding . Anda harus secara aktif menikmati pengkodean, terinspirasi, mengajukan pertanyaan, dan menemukan jawaban sendiri.
Masih punya waktu satu jam? Tulis kode yang akan membalik string, dan cari solusi yang paling optimal. Malam yang gratis? Mengapa tidak mencoba menggores web. Baca kode orang lain. Lihat bagaimana mereka melakukan sesuatu. Tanyakan pada diri sendiri apa yang akan Anda lakukan.
Ketika saya bosan di komputer saya, saya membuka IDE dan badai kode saya. Saya menuliskan ide-ide yang terdengar menarik, dan menantang. Penyingkat URL? Tentu, saya bisa melakukannya. Oh, saya belajar cara mengubah angka dari satu basis ke basis lainnya sebagai efek samping!
Ini valid, apa pun tingkat keahlian Anda. Anda tidak pernah berhenti belajar. Dengan secara aktif menyandi waktu luang Anda, Anda akan, dengan sedikit usaha tambahan, memahami bahasa, dan akhirnya, menjadi seorang guru. Anda akan membangun pengetahuan dan kode yang dapat digunakan kembali dan menghafal idiom.
sumber
Jika Anda berada di dan menggunakan python untuk sains (yang tampaknya Anda) bagian dari yang akan belajar dan memahami perpustakaan ilmiah, bagi saya ini akan menjadi
mengetahui cara menggunakan perpustakaan yang tepat dan membuat vektor kode Anda sangat penting untuk komputasi ilmiah.
Saya ingin menambahkan bahwa, menangani dataset numerik besar dengan cara pythonic yang umum (pendekatan berorientasi objek, daftar, iterator) bisa sangat tidak efisien. Dalam komputasi ilmiah, mungkin perlu untuk menyusun kode Anda dengan cara yang berbeda secara drastis dari cara kebanyakan pengkode python konvensional mendekati data.
sumber
Google baru-baru ini merilis kelas Python online ("kelas" seperti dalam "program studi").
http://code.google.com/edu/languages/google-python-class/
Saya tahu ini tidak menjawab pertanyaan lengkap Anda, tetapi saya pikir ini adalah tempat yang bagus untuk memulai!
sumber
Unduh Twisted dan lihat kode sumbernya. Mereka menggunakan beberapa teknik yang cukup canggih.
sumber
Memahami Semua Jenis dan Struktur Data
Untuk setiap jenis dan struktur, tulislah serangkaian program demo yang melatih setiap aspek dari jenis atau struktur data. Jika Anda melakukan ini, mungkin bermanfaat untuk membuat catatan blog pada masing-masing ... mungkin bermanfaat bagi banyak orang!
sumber
Saya belajar python pertama kali sendirian selama musim panas hanya dengan melakukan tutorial di situs python (sayangnya, saya sepertinya tidak dapat menemukannya lagi, jadi saya tidak dapat memposting tautan).
Kemudian, python diajarkan kepada saya di salah satu kursus tahun pertama saya di universitas. Di musim panas berikutnya, saya berlatih dengan PythonChallenge dan dengan masalah dari Google Code Jam . Memecahkan masalah ini membantu dari perspektif algoritmik serta dari perspektif belajar apa yang bisa dilakukan Python serta bagaimana memanipulasi untuk mendapatkan hasil maksimal dari python.
Untuk alasan yang sama, saya pernah mendengar bahwa golf code juga berfungsi, tetapi saya belum pernah mencobanya sendiri.
sumber
Algoritma pembelajaran / matematika / file IO / optimasi Pythonic
Ini tidak akan membuat Anda jadi guru tetapi untuk memulai, coba selesaikan masalah - masalah Project Euler 50 atau lebih yang pertama seharusnya tidak membebani Anda jika Anda memiliki matematika sekolah menengah yang baik dan tahu cara menggunakan Google. Ketika Anda memecahkan satu, Anda masuk ke forum di mana Anda dapat melihat melalui solusi orang lain yang akan mengajarkan Anda lebih banyak lagi. Tetaplah sopan dan jangan posting solusi Anda karena idenya adalah untuk mendorong orang untuk mengerjakannya sendiri.
Memaksa diri Anda untuk bekerja dengan Python tidak akan memaafkan jika Anda menggunakan algoritma brute-force. Ini akan mengajarkan Anda cara meletakkan dataset besar dalam memori dan mengaksesnya secara efisien dengan fitur-fitur bahasa cepat seperti kamus.
Dari melakukan ini sendiri, saya belajar:
Dan juga sangat penting
Semua ini harus relevan dengan Bioinformatika
Memang saya tidak belajar tentang fitur OOP Python dari pengalaman itu.
sumber
Pernahkah Anda melihat buku " Pemrograman Bioinformatika menggunakan Python "? Sepertinya Anda adalah anggota tepat dari grup fokusnya.
sumber
Anda sudah memiliki banyak bahan bacaan, tetapi jika Anda dapat menangani lebih banyak, saya sarankan Anda mempelajari tentang evolusi python dengan membaca Proposal Peningkatan Python, terutama PEP "Selesai" dan "PEP yang Ditunda, Ditinggalkan, Dicabut, Dicabut, dan Ditolak" PEPs.
Dengan melihat bagaimana bahasa telah berubah, keputusan yang dibuat dan alasannya, Anda akan menyerap filosofi Python dan memahami bagaimana "Python idiomatik" muncul.
http://www.python.org/dev/peps/
sumber
Coba http://challenge.greplin.com/ menggunakan Python
sumber
Mengajar kepada orang lain yang mulai belajar Python selalu merupakan cara yang bagus untuk menjelaskan ide-ide Anda dan kadang-kadang, saya biasanya mendapatkan banyak pertanyaan rapi dari siswa yang membuat saya memikirkan kembali hal-hal konseptual tentang Python.
sumber
Tidak persis apa yang Anda minta, tapi saya pikir itu saran yang bagus.
Belajar bahasa lain, tidak masalah yang mana. Setiap bahasa memiliki ide dan konvensi sendiri yang dapat Anda pelajari. Pelajari perbedaan dalam bahasa dan yang lebih penting
why
perbedaannya. Cobalah bahasa yang murni fungsional seperti Haskell dan lihat beberapa manfaat (dan tantangan) fungsi yang bebas dari efek samping. Lihat bagaimana Anda dapat menerapkan beberapa hal yang Anda pelajari dari bahasa lain ke Python.sumber
Saya sarankan memulai dengan sesuatu yang memaksa Anda untuk mengeksplorasi kekuatan ekspresif dari sintaks. Python memungkinkan banyak cara berbeda untuk menulis fungsionalitas yang sama, tetapi seringkali ada satu pendekatan yang paling elegan dan tercepat. Jika Anda terbiasa dengan idiom bahasa lain, Anda mungkin tidak akan pernah menemukan atau menerima cara yang lebih baik ini. Saya menghabiskan akhir pekan dengan susah payah menelusuri 20 atau lebih masalah Project Euler pertama dan membuat webapp sederhana dengan Django di Google App Engine. Ini hanya akan membawa Anda dari magang ke pemula, mungkin, tetapi Anda kemudian dapat terus membuat aplikasi web yang agak lebih maju dan memecahkan masalah Project Euler yang lebih maju. Setelah beberapa bulan saya kembali dan menyelesaikan 20 masalah PE pertama dari awal dalam satu jam, bukan akhir pekan.
sumber