... bagaimana saya bisa mengembangkan keterampilan pemrograman yang dapat diterapkan ke semua bahasa, bukan hanya satu?
Kunci dari pertanyaan ini adalah untuk melampaui bahasa dan berpikir bukan bahasa yang Anda kodekan.
WAT?
Pemrogram poliglot berpengalaman berpikir dalam pohon sintaksis abstrak (AST) dari model mental bahasa mereka sendiri. Orang tidak berpikir "Saya perlu loop untuk di sini", melainkan "Saya perlu mengulang sesuatu" dan menerjemahkannya ke yang sesuai untuk, atau sementara, atau iterator atau rekursi untuk bahasa itu.
Ini mirip dengan apa yang dilihat seseorang dalam mempelajari bahasa lisan. Orang-orang yang berbicara banyak bahasa dengan lancar memikirkan artinya , dan itu muncul dalam bahasa yang diberikan.
Seseorang dapat melihat beberapa petunjuk AST ini dalam sepasang video eyecracking Pemahaman Kode dengan Eye Tracking dan Eye-Tracking Code Experiment (Novice) di mana gerakan mata seorang pemula dan programmer berpengalaman ditonton. Orang dapat melihat programer yang berpengalaman 'mengkompilasi' kode ke dalam model mental mereka dan 'menjalankannya' di kepala mereka, sedangkan pemula harus beralih pada kata kunci kode dengan kata kunci.
Dengan demikian, kunci dari pertanyaan untuk mengembangkan keterampilan pemrograman untuk diterapkan ke semua bahasa adalah untuk belajar beberapa bahasa sehingga seseorang dapat menjauhkan diri dari memiliki model mental dari satu bahasa dan mengembangkan kemampuan untuk menghasilkan AST untuk masalah mereka sendiri di bahasa kepala yang kemudian diterjemahkan ke bahasa tertentu.
Setelah seseorang memiliki kemampuan untuk menggunakan AST di kepala, belajar bahasa lain dalam aliran pemikiran yang sama (pergi ke Befunge adalah sedikit lompatan dari Jawa, tetapi tidak sebanyak dari Forth ) menjadi lebih mudah - itu 'hanya' menerjemahkan AST ke bahasa baru yang jauh lebih mudah pada waktu ke 3, 4 dan 5 (dll ...) selesai.
Ada artikel klasik, Programmer Nyata Jangan Gunakan Pascal . Bagian dari ini berbunyi:
... Programmer Nyata yang ditentukan dapat menulis program Fortran dalam bahasa apa pun
Ada juga bit yang Anda tidak bisa hanya menggunakan AST mental - Anda perlu berpikir dalam bahasa itu juga. Ini membutuhkan sedikit waktu untuk menyelesaikannya (saya masih dituduh menulis kode Perl dengan Python dan kode Lisp pertama saya ditinjau mengatakan "Ini adalah program C yang sangat bagus.").
Untuk ini, saya harus menunjukkan artikel yang diterbitkan oleh ACM, Bagaimana Tidak Menulis Fortran dalam Bahasa Apa Pun . Paragraf ketiga artikel (yang tidak memimpin kutipan) langsung menjawab pertanyaan:
Ada karakteristik pengkodean yang baik yang melampaui semua bahasa pemrograman untuk tujuan umum. Anda dapat menerapkan desain yang baik dan gaya transparan di hampir semua kode, jika Anda menerapkannya. Hanya karena bahasa pemrograman memungkinkan Anda untuk menulis kode yang buruk tidak berarti Anda harus melakukannya. Dan bahasa pemrograman yang telah direkayasa untuk mempromosikan gaya dan desain yang baik masih dapat digunakan untuk menulis kode yang buruk jika pembuat kode cukup kreatif. Anda dapat menenggelamkan diri di dalam bak mandi dengan satu inci air di dalamnya, dan Anda dapat dengan mudah menulis program yang benar-benar tidak dapat dibaca dan tidak dapat dipelihara dalam bahasa tanpa goto atau nomor garis, dengan pengecualian penanganan dan jenis generik dan pengumpulan sampah. Apakah Anda sedang menulis Fortran atau Java, C ++ atau Smalltalk, Anda dapat (dan harus) memilih untuk menulis kode yang baik daripada kode yang buruk.
Tidak hanya cukup untuk memiliki AST - perlu memiliki AST yang dapat diterjemahkan ke dalam bahasa lain. Memiliki Fortran AST di kepala Anda dan menulis kode Fortran di Jawa bukanlah hal yang baik. Seseorang juga harus cukup akrab dengan bahasa dan idiom-idiomnya untuk dapat berpikir dalam bahasa tersebut (terlepas dari apa yang saya katakan di bagian paling atas).
Saya telah melihat kode Java yang ditulis oleh seseorang yang tidak berhenti menulis kode C. Ada satu objek dengan metode utama. Dalam objek ini ada banyak metode statis yang dipanggil oleh main
, dan kelas dalam pribadi yang memiliki bidang publik (dan dengan demikian tampak sangat mirip struts). Itu kode C yang ditulis dalam Java. Semua yang dilakukan adalah menerjemahkan sintaks dari satu bahasa ke bahasa lain.
Untuk melewati titik ini, seseorang harus terus menulis kode dalam berbagai bahasa, tidak berpikir dalam bahasa tersebut ketika mendesain kode, tetapi berpikir di dalamnya ketika menerjemahkan desain ke dalam kode untuk bekerja dengan idiom bahasa dengan benar.
Satu-satunya cara untuk sampai ke sana - bisa mengembangkan keterampilan pemrograman yang dapat diterapkan ke semua bahasa - adalah untuk terus belajar bahasa dan menjaga bahasa pemrograman mental fleksibel daripada dihubungkan ke satu bahasa.
(Aku minta maaf pada ChaosPandion karena meminjam banyak dari ide yang disajikannya .)