Studi tentang seberapa baik seorang programmer dapat memahami kode dalam bahasa asing? [Tutup]


15

Adakah penelitian serius tentang seberapa baik programmer berpengalaman yang mengetahui bahasa X dapat memahami kode yang ditulis oleh programmer yang kompeten menggunakan bahasa Y, untuk berbagai bahasa yang digunakan secara luas seperti X dan Y?

Tentu saja dunia nyata tidak begitu sederhana karena seorang programmer hanya tahu satu bahasa. Yang ingin kami ketahui adalah: jika kami mengerjakan proyek kami, katakanlah, C #, dan suatu hari beberapa fisikawan tua yang hanya tahu Fortran dan Algol melihatnya, sejauh mana masuk akal bagi mereka? Bagian matematika dari itu mungkin baik untuk mereka, jika mereka mengabaikan apa yang mereka berikan adalah beberapa tanda baca acak. Atau, apakah pakar Python dapat menemukan kekurangan dalam skrip Ruby pintar saya?

Mungkin ada masalah dari tingkat sintaksis yang dangkal hingga tingkat konsep besar seperti objek, metaprogramming template, fungsional dan sebagainya. Saya tidak mengharapkan satu programmer untuk sepenuhnya memahami setiap detail sintaksis kode dalam "bahasa asing" atau mengikuti agama beberapa konsep besar, tetapi bertanya-tanya sejauh mana mereka akan mendapatkan aliran kendali utama, temukan tempatnya di mana ada sesuatu yang tergambar di layar dan apa yang menentukan warna atau ukurannya, pastikan bahwa robot yang diprogram untuk mengendarai mobil akan mematikan mesin ketika sudah selesai, hal-hal semacam itu.

Studi kualitas yang baik akan mencakup penelitian akademis yang diterbitkan, laporan resmi dari beberapa kelompok industri atau perusahaan perangkat lunak besar, meskipun saya akan melakukan pengamatan sistematis yang tidak bias oleh para pemimpin bengkel dan kelas yang berpengalaman atau sumber lainnya. Tidak tertarik pada blog pendek, contoh kasus tunggal, atau anekdot. (Yah, mungkin beberapa anekdot jika itu bisa dibaca dengan baik.)


1
Saya tidak tahu apakah ada studi, tetapi dari pengalaman pribadi saya, saya katakan Ya, saya berhasil memahami suatu program tanpa mengetahui bahasa.
superM

2
Ini akan tergantung pada sepasang bahasa: pilih C # vs. Java - dan Anda akan mendapatkan keakraban yang hampir instan; pilih Algol vs. C - dan Anda akan terbiasa dengan cheatsheet satu halaman. Semoga beruntung memilih C vs. Prolog atau Whitespace vs Ada - itu akan membuat frustasi. Omong-omong, bahasa bukan satu-satunya hal yang berperan dalam memahami suatu program: seorang pakar C yang mengkhususkan diri dalam desain yang disematkan yang mencoba memahami kode MFC yang ditulis dalam C adalah pemandangan yang agak menyedihkan (ini adalah pengalaman langsung).
dasblinkenlight

Seberapa mudah bagi seseorang yang mengerti Aljabar bagi mereka untuk mengambil Trigonometri vs seseorang yang mengerti Kalkulus? Itu tergantung pada bahasa dan paradigma. Mendeteksi dan mengisolasi perbedaan antar bahasa cukup sulit, terutama karena bahasa terus berkembang. Saya benar-benar ragu ada yang bisa menilai pemahaman dengan akurasi yang masuk akal.
Evan Plaice

Jawaban:


9

Hal ini jelas tergantung pada tingkat keterkaitan bahasa tersebut satu sama lain. Misalnya, jika Anda memiliki latar belakang C atau C ++ dan telah melakukan beberapa pemrograman C # atau Java, seharusnya mudah bagi Anda untuk membaca dan memahami bahasa lain dari kedua bahasa tersebut (Java atau C #). Jika Anda mengenal Lisp dengan baik, Skema seharusnya tidak menjadi masalah. Saya pernah men-debug program PHP tanpa memiliki pengetahuan tentang PHP, hanya dengan pengetahuan saya dari C, C ++ dan Perl. Saya cukup yakin ketika program itu akan ditulis dalam Haskell atau Smalltalk, yang akan menjadi jauh lebih sulit dan mustahil bagi saya.

Sebenarnya, saya tidak berpikir penelitian akademis tentang topik ini akan masuk akal (setidaknya, bukan yang serius). Tidak ada yang namanya "programmer berpengalaman standar yang tahu bahasa X", jadi setiap studi akan kehilangan data dasar yang terjamin. Orang-orang memiliki pengetahuan yang berbeda, dan bahkan jika mereka telah menjalankan sekolah yang sama, mereka memiliki talenta dan motivasi yang berbeda.

tetapi bertanya-tanya sejauh mana mereka mendapatkan aliran kendali utama, temukan tempat di mana sesuatu digambar di layar

Itu mungkin sulit bahkan ketika Anda sangat terbiasa dengan bahasa, baik karena kualitas kode sangat rendah, atau kerangka kerja yang digunakan sangat kompleks, atau basis kode sangat besar.


6

Tidak yakin tentang referensi studi yang dilakukan secara akademis, namun penamaan metode, kelas dan fungsi yang cukup jelas dalam bahasa C # / C ++ / Java / Python atau lainnya harus memberikan kemudahan untuk memahami basis kode serta aliran proses bisnis.

Konvensi penamaan dalam proyek dan umumnya dalam pengembangan perangkat lunak adalah aspek yang sangat penting. Namun,its importancedan relevansi untuk membangun perangkat lunak berkualitas sering diabaikan atau diabaikan bersama-sama.

Pedoman Penamaan yang digunakan dalam .NET Framework dan Konvensi Penamaan Umum yang digunakan dalam .NET juga merupakan referensi yang bagus untuk dilihat.


Desain API dan konvensi penamaan yang baik membantu tetapi bahkan konvensi penamaan berbasis bahasa sering 'dikritik' dengan cara yang hanya berlaku untuk bahasa itu. Selain C # / Java (yang hampir identik) sebagian besar bahasa beroperasi pada prinsip yang berbeda yang memiliki alur kerja yang unik dan implementasi khusus untuk bahasa itu. Misalnya, dalam bahasa yang tidak mengikuti model kerangka inti mega-monolitik Anda biasanya akan menemukan ekosistem paket yang sangat besar yang disatukan menggunakan manajer paket umum.
Evan Plaice

3

Ini sangat tergantung pada masing-masing programmer, dan bagaimana mereka menginternalisasi bahasa. Saya sama sekali tidak kesulitan bekerja dalam selusin bahasa, sementara saya punya teman yang hanya tahu C ++. Dia tidak lebih buruk dalam pemrograman daripada saya, dia hanya belajar dengan cara yang berbeda.

Secara pribadi, saya menemukan pertanyaan terkait yang lebih menarik: ketika ada bug dalam kode (yaitu programmer X pikir dia menulis someFunction(x, y)tetapi dia benar-benar menulis sesuatu yang lain), seberapa sulit bagi pengembang kedua untuk mengidentifikasi bug. Seorang programmer X yang baik akan membuatnya sangat jelas apa yang ia INGIN komputer untuk lakukan, dan itu akan mudah dibaca. Namun, jika dia melakukan kesalahan, itu bisa menjadi masalah besar. Hal-hal seperti bug C ++ berikut:

int x = getCorrectValueForX();
if (x = 2)
   doSomethingWhenXIsTwo();

Bisa sangat sulit dideteksi kecuali Anda tahu bahasanya.


1

Itu tidak hanya tergantung pada programmer seperti yang dikatakan orang lain, tetapi juga pada persamaan antara bahasa, baik dalam sintaksis, filosofi dan implementasi.

Banyak bahasa yang berbeda menggunakan sintaks turunan C, dan mengikuti aliran kontrol akan lebih mudah jika Anda terbiasa dengan jenis sintaksis itu. Hal yang sama berlaku untuk bahasa yang sangat diketik dan diketik longgar, bahasa dengan dukungan fungsi tingkat tinggi, tingkat abstraksi dan filosofi terprogram. Itu tidak hanya tergantung pada Anda dapat membaca sintaksis tetapi juga terbiasa dengan konsep dan filosofi bahasa.

Jika Anda mempelajari C misalnya, saya pikir akan masuk akal untuk mengharapkan Anda dapat memperoleh aliran kontrol dari C #, Java, atau C ++ dll. Akan sedikit lebih sulit untuk menguraikan VB karena perbedaan dalam sintaksis, atau JavaScript karena fungsi penutupan, pengetikan yang lemah, dan tingkat tinggi (saya tahu Anda bisa melakukan ini di C tetapi agak miring). Saya tidak akan mengharapkan Anda, bagaimanapun, untuk dapat men-debug Lisp, F #, R atau, Tuhan melarang, perakitan karena ini menggunakan paradigma pemrograman yang sama sekali berbeda.

TL; DR Tidak hanya penting untuk dapat mengenali sintaksis, sebagian besar waktu Anda dapat menguraikan deklarasi atau pemanggilan metode tetapi mampu memahami alasan di balik mengapa suatu program ditulis dengan cara tertentu adalah inti dari pemahaman dan membaca kode .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.