Saya tahu bahwa belajar bahasa, Anda cukup membeli buku, mengikuti contoh-contohnya, dan sedapat mungkin mencoba latihannya. Tapi yang benar-benar saya cari adalah bagaimana menguasai bahasa setelah Anda mempelajarinya.
Sekarang saya tahu bahwa pengalaman adalah salah satu faktor utama, tetapi bagaimana dengan mempelajari internal bahasa, apa struktur yang mendasarinya, dll.
Ada artikel di luar sana yang mengatakan baca buku ini, baca buku itu, buat game ini dan game itu. Tetapi bagi saya ini tidak berarti menguasai bahasa. Saya ingin dapat membaca kode orang lain dan memahaminya, tidak peduli betapa sulitnya itu. Untuk memahami kapan harus menggunakan suatu fungsi dan kapan lainnya, dll.
Daftarnya bisa terus dan terus tapi saya yakin saya sudah membuat titik. :)
Dan akhirnya, ambil bahasa apa pun sebagai contoh jika diperlukan, meskipun yang terbaik adalah jika C diambil sebagai contoh.
sumber
Jawaban:
Saya harus menjawab, "Semua yang di atas." Orang-orang berdebat tentang apakah pengkodean adalah seni, kerajinan, disiplin teknik, atau cabang matematika, dan saya pikir paling adil untuk mengatakan bahwa pengkodean itu masing-masing. Dengan demikian, semakin banyak teknik yang Anda gunakan untuk menguasai bahasa, semakin baik. Berikut ini sebagian daftar:
Gunakan bahasa sepanjang hari, setiap hari. Biasanya ini berarti dipekerjakan penuh waktu dalam bahasa.
Baca semua yang Anda bisa tentang bahasa. Terutama, "praktik terbaik" dan idiom.
Bergabunglah dengan grup pengguna untuk berbicara dengan orang lain tentang bahasa dan apa yang mereka lakukan dengannya.
Bekerja dengan kode orang lain! Tidak ada cara yang lebih cepat untuk mempelajari apa yang tidak boleh dilakukan dalam bahasa daripada harus membersihkan setelah seseorang yang melakukan sesuatu yang mengerikan.
Dukung kode yang Anda tulis - setiap bug menjadi tur bagi keputusan terburuk Anda!
Pelajari ilmu komputer dan bahasa secara umum
Belajar bahasa yang sangat berbeda. Pujian yang bagus untuk C akan menjadi bahasa fungsional seperti Lisp. Ini akan mengubah cara Anda berpikir tentang bahasa prosedural Anda.
Pelajari cara menggunakan kerangka kerja dan API yang tersedia untuk bahasa itu.
Luangkan waktu untuk melakukan percobaan sendiri dengan bahasa tersebut. SICP tidak berlaku untuk C, tetapi sikap belajar bahasa dengan menguji batasannya adalah sangat produktif.
Baca sejarah bahasa untuk mempelajari mengapa itu dibuat seperti itu.
Hadiri konferensi untuk mendengar penulis bahasa berbicara, atau untuk mendengar apa yang dilakukan pemimpin industri dengan bahasa tersebut.
Ambil kelas dalam bahasa ini.
Ajarkan bahasa tersebut kepada orang lain (terima kasih kepada Bryan Oakley )
Singkatnya, lakukan semua yang dapat Anda pikirkan. Tidak ada cara untuk mengetahui segalanya tentang sebagian besar bahasa. Setiap teknik pembelajaran yang Anda gunakan membawa perspektif tambahan untuk pemahaman Anda.
sumber
Every technique you use to learn brings and additional perspective to your understanding.
10.000 jam latihan adalah apa yang diperlukan.
Baca "Teach Yourself Programming Sepuluh Tahun"
Poin-poin penting dari atas:
sumber
JANGAN PERNAH menganggap diri Anda penguasa seluruh bahasa sampai Anda menerapkan bahasa yang lebih baik dari itu. Yang berarti, untuk mempelajari cara kerja bahasa tertentu dari bawah, dapatkan buku yang mengajarkan Anda konsep penyusun / juru bahasa. Sebagai contoh:
C: Buku LCC Compiler
C ++: Desain dan Evolusi C ++ (Dan kemudian lanjutkan membangun kompiler C ++ Anda sendiri atau setidaknya pahami implementasi yang menggunakan kode Kompilator GNU C ++)
Java: Dapatkan "Inside JVM" dan dapatkan kode sumber javac. Kode .C "java" juga membantu
Python: implementasi CPython.
ObjectiveC: Hampir semua materi dari Apple tentang internal ObjC runtime env dan kode sumber kompiler akan membantu Anda.
Lisp: SICP Book (mengajarkan Skema dan kompiler penafsir dasar untuk bahasa mirip pelat): Lisp dalam Small Piece (buku bagus lainnya).
sumber
Coba gunakan bahasa untuk sesuatu yang tidak dimaksudkan untuk digunakan. Tulis driver perangkat dengan Python, atau pustaka manipulasi matriks di COBOL. Saya pikir salah satu cara terbaik untuk menguasai bahasa adalah dengan benar-benar mendorongnya, mencoba membuat kekuatannya mengatasi kelemahannya.
sumber
Saya akan memudahkan Anda. Anda tidak akan pernah menguasai bahasa. Titik. Jika Anda pikir sudah, maka jelas sekali belum. Tidak ada puncak gunung yang tiba-tiba Anda jangkau dan berkata, "Nah, sekarang, saya sudah sepenuhnya menguasai bahasa itu. Bagaimana sekarang?" Bahkan programmer berpengalaman yang telah bekerja dengan bahasa yang sama selama beberapa dekade akan memberitahu Anda bahwa kadang-kadang mereka masih menemukan ide-ide baru, proses, praktik, dll. Tujuan sebenarnya adalah untuk menguasai pemahaman konseptual Anda tentang bahasa atau bahasa. Kemampuan untuk mempelajari konsep-konsep baru dan kecepatan di mana Anda dapat mengadopsi fitur-fitur baru atau yang diubah dalam bahasa jauh lebih penting daripada menghafal pengetahuan tentang setiap kata kunci dan sintaksis. Berhentilah khawatir tentang "menguasai" suatu bahasa, dan hanya khawatir tentang terus meningkatkan dan memperbaiki kualitas dan efisiensi kode Anda.
sumber
The true goal is to master your conceptual understanding of a language or languages.
Persis. Itu yang saya maksud.Anda sudah tahu jawabannya
Itu datang ke kerja keras dan tekad dan untuk semua yang Anda mungkin tidak pernah sampai di sana.
Pikirkan dari mana kita mendapatkan istilah dari - untuk menjadi Master Craftsman Anda harus menjadi magang dan kemudian seorang pekerja harian dan hanya mereka yang mungkin Anda memiliki kesempatan untuk menjadi master. Sepanjang jalan Anda akan diajarkan dan Anda akan berlatih dan Anda akan mengamati dan menanyai orang lain di keahlian mereka dan (mudah-mudahan) belajar dari mereka.
Tidak ada peluru ajaib ...
sumber
Mulailah dengan membaca dan memahami apa itu SDLC (alias, siklus hidup pengembangan Perangkat Lunak). Ini adalah proses berulang yang melibatkan peningkatan diri, belajar,
**practicing, practicing...**
Itu akan membuka cakrawala Anda pada bidang apa yang perlu Anda pelajari atau tingkatkan. Ada beberapa buku rekayasa perangkat lunak inti yang menurut Anda sangat berguna untuk dibaca begitu Anda membangun beberapa aplikasi sendiri.
Selain itu, begitu Anda akan merasa percaya diri dengan bahasa OOP , Anda dapat mulai mempelajari pola desain , dan pola Desain Kepala Pertama adalah buku yang sangat bagus untuk dipertimbangkan. Saya suka buku ini.
sumber
Tidak ada yang dapat menggantikan pengalaman. Untuk menguasai sesuatu, Anda harus melakukan / menggunakannya, pada banyak hal, untuk banyak hal yang berbeda.
Jadi lanjutkan dan gunakan bahasa itu untuk latihan (seperti Project Euler ) dan proyek pribadi, hal-hal yang sebenarnya Anda butuhkan, atau hal-hal yang menurut Anda menarik. Tulis game, tulis aplikasi web, tulis parser, apa pun yang Anda suka. Dan pada setiap langkah, berusahalah untuk memahami apa yang Anda lakukan daripada hanya menempelkan kode bersama atau mengikuti instruksi.
Itu adalah sesuatu yang dapat Anda lakukan segera setelah Anda memahami sintaks dasar. Ambil saja beberapa kode dan luangkan waktu untuk mencari tahu secara detail. Cari hal-hal yang tidak Anda pahami, atau ajukan pertanyaan spesifik tentang tempat-tempat seperti Stack Overflow .
sumber
Di sisi masalah tingkat tinggi, pelajari tentang arsitektur: bagaimana mengatur proyek Anda, apa strukturnya. Jangan biarkan mereka tumbuh secara acak.
Di tingkat menengah, pelajari berbagai teknik dan paradigma. Semakin beragam alat yang Anda miliki dalam daftar lagu Anda, semakin banyak kekuatan untuk Anda. Jika Anda hanya mempelajari java, python dan ruby, Anda telah terpapar hanya pada sebagian kecil ruang pemrograman. Belajar pemrograman imperatif dan fungsional, pelajari prolog dan J. Idenya bukan untuk "menguasai" ratusan bahasa, tetapi untuk belajar tentang berbagai cara menyelesaikan masalah yang sama.
Di sisi masalah yang rendah, satu hal yang dapat membantu Anda menjadi programmer yang lebih baik (bahkan lebih baik dalam apa pun yang Anda lakukan) adalah memiliki model mental platform yang baik. Misalnya, Anda dapat mempelajari cara struktur kontrol C bekerja dan mengetahui perpustakaan paling umum, tetapi jika Anda tidak memiliki model mental tentang cara kerja pointer dan memori, maka Anda akan mengalami masalah dengan ekspresi yang cukup kompleks.
sumber
Bolehkah saya membuat beberapa saran?
Pertama jika Anda dapat menemukan seorang mentor untuk mendiskusikan penggunaan bahasa Anda dengan, dan untuk mendapatkan tips dan trik terbaik, dan untuk menjawab ketika satu teknik lebih baik dari yang lain.
Kedua, berlatihlah sebanyak mungkin dan cobalah bahasanya secara maksimal! Saya dulu bekerja dalam sebuah tim, yang (sebagai hal yang menyenangkan) akan memilih kata kerja atau bagian lain dari bahasa pemrograman dari manual setiap hari. Itu adalah tanda kehormatan jika Anda bisa mengerjakannya ke dalam kode Anda hari itu. Ini berarti seluruh tim pemrograman perlu melihat dan memahami istilah (kadang-kadang) yang tidak jelas untuk memahami dan menggunakannya secara efektif. Beberapa hari kami gagal, tetapi tim itu menyenangkan untuk bekerja dan secara teknis diaktifkan !!
sumber
Bahasa pemrograman mencerminkan ide-ide di balik paradigma pemrograman yang dikembangkan dengan menargetkan pengembangan perangkat lunak tujuan umum atau untuk mengembangkan perangkat lunak tujuan khusus. Misalnya, bahasa program seperti Jawa mewakili paradigma program berorientasi objek, tetapi AspectJ (ekstensi Jawa) digunakan untuk memprogram sesuai dengan pemrograman berorientasi aspek.
Dengan pengantar singkat ini, untuk benar-benar menguasai bahasa, membeli dan membaca buku dengan sendirinya tidak akan banyak membantu. Anda perlu memahami lingkungan di mana Anda dapat memprogram menggunakan bahasa yang diinginkan, belajar tentang paradigma, dan yang lebih penting membangun aplikasi yang bermakna menggunakan bahasa tersebut. Membangun aplikasi kecil yang dapat memberi Anda rasa berbagai alat yang disediakan oleh bahasa adalah pendekatan pembelajaran yang sangat membantu.
Saya telah melihat orang-orang yang datang dari komunitas C murni tanpa belajar apapun tentang orientasi objek dan perjuangan dalam belajar Java atau objektif-c. Saya juga telah melihat orang-orang bergumul dengan pemrograman antarmuka pengguna ketika mereka belum benar-benar memahami elemen-elemen antarmuka pengguna, pemrograman berbasis peristiwa, dll ...
Saya harap ini membantu!
sumber
Saya akan menambahkan dua item ke daftar Glen
sumber
Untuk membangun apa yang dikatakan @TMN. Saya sudah sangat sukses dalam belajar bahasa dengan menulis program yang sama dalam bahasa yang berbeda.
Misalnya menulis program yang membaca dalam file CSV, mem-parsing teks dan kemudian menulisnya kembali ke CSV kedua dengan kolom dalam urutan terbalik.
Seperti ini,
untuk
Ini akan memberi Anda pemahaman dasar atau bahasa. Lalu lihat apa lagi yang bisa Anda lakukan. Mungkin memungkinkan untuk penggantian nilai atau pemesanan ulang atau membaca dari baris perintah. Jadikan serumit yang Anda inginkan.
Saya juga memikirkan apa yang dikatakan @GlenPeterson tentang,
Adalah Ide yang bagus. Saya menyarankan bahasa seperti Haskell karena dalam versi terbaru Anda dapat memprogram menggunakan keempat paradigma pemrograman OO, prosedural, logis atau fungsional. Meskipun sebenarnya ini adalah bahasa fungsional, Anda dapat dengan upaya mengimplementasikan paradigma lain yang akan menjadi pengalaman belajar yang baik.
Bahasa yang bagus untuk dimainkan.
sumber
Anda tidak dapat belajar bahasa dari buku. Yang Anda butuhkan adalah latihan dan latihan. Jangan berpikir Anda dapat belajar bahasa dari buku tertentu atau sumber tertentu. Hanya berpikir bahasa pemrograman sama dengan bahasa manusia. Anda tidak bisa hanya belajar bahasa Inggris atau Prancis dengan membaca buku tertentu. Semua yang Anda perlukan menggunakannya dalam sehari untuk kehidupan sehari-hari. Kode dari awal, perluas fungsinya coba untuk membangun sesuatu yang akan membuat Anda sedikit puas. Dan jika Anda berpikir menguasai bahasa karena mengetahui seluruh bahasa dan menggunakan setiap elemen bahasa pemrograman dalam pengkodean praktis .. ANDA TIDAK BISA. Atau bahkan jika Anda bisa, mungkin butuh 10-15 tahun.
sumber