Saya berdiskusi dengan salah satu guru saya tempo hari.
Kami memperdebatkan dampak yang dimiliki bahasa skrip sederhana (seperti Python atau Ruby) pada programmer junior.
Dia berpendapat bahwa bahasa scripting menimbulkan teknik pengkodean yang ceroboh karena pemula tidak mengerti apa yang sedang terjadi "di bawah tenda". Dia juga mengutip contoh lain tentang bagaimana bahasa scripting sering menyebabkan programmer mengabaikan kekhawatiran tentang efisiensi, manajemen memori, kompleksitas operasional, dll.
Saya berpendapat bahwa bahasa tingkat yang lebih rendah mungkin terlalu banyak untuk beberapa orang dan mereka mungkin menyerah sebelum mereka mengembangkan minat untuk pemrograman. Ketika saya mulai belajar bahasa pemrograman pertama saya (C), saya mendapat petunjuk dan menyerah karena konsepnya terlalu sulit (dalam pembelaan saya, saya baru berusia 14 tahun). Jika bukan karena Java, saya mungkin tidak menjadi programmer! Jika saya mulai dengan bahasa yang lebih sederhana dan kemudian menggali lebih dalam, saya merasa saya tidak akan menyerah dan saya akan belajar sebanyak yang saya mulai dengan C.
Kelas berakhir sebelum kedua belah pihak dieksplorasi sepenuhnya.
Sampai di sini, saya telah berkhotbah bahwa pemula harus mulai dengan bahasa scripting dan kemudian menggali lebih dalam; tetapi setelah diskusi itu, saya mulai bertanya-tanya apakah ini pemikiran yang salah.
Jadi, apa dampak bahasa scripting terhadap programmer junior?
Jawaban:
Saya tidak setuju. Pertama, bahasa skrip berada pada tingkat abstraksi yang lebih tinggi, dan tidak ada yang salah dengan ini. Pada awalnya seseorang hanya mencoba mempelajari prinsip-prinsipnya. Sebenarnya saya akan mengatakan bahwa memilih bahasa tingkat rendah dapat mendorong pengkodean yang buruk, karena kita harus berurusan dengan beberapa detail sebelum dapat memahaminya. Sebagai gantinya dengan bahasa yang lebih sederhana seseorang dapat mulai menulis kode yang bersih dan ringkas dari awal.
Kedua, ada banyak yang harus dipelajari dalam bahasa-bahasa ini. Sejauh mempelajari bahasa, saya akan mengatakan bahwa C lebih mudah daripada Python. Kita harus berurusan dengan pointer atau mengurus string, tetapi ada banyak konsep untuk dipelajari dengan Python. Pemahaman, orientasi objek, refleksi, metode sihir, fungsi kelas satu, lambdas, iterator dan generator, metaclasses: semua ini adalah bagian dari bahasa.
Saya pikir memulai dengan Python memungkinkan untuk belajar lebih banyak tentang pemrograman dan dengan kurva belajar yang lebih lembut. Bahasa tingkat rendah mungkin memiliki lebih sedikit abstraksi - sehingga kurang konsep umum untuk dipelajari - dan membanjiri pemula dengan detail yang mungkin ingin ia lakukan tanpa.
sumber
Tidak masalah dari mana Anda memulai. Itu penting ke mana Anda pergi setelah Anda mulai.
BASIC mungkin bukan bahasa yang paling elegan di planet ini, tetapi mencakup dasar-dasar pemrograman prosedural, dan itu sudah cukup untuk memulai.
Saya mulai dengan BASIC. Saya tidak tinggal di sana.
sumber
Guru Anda benar, kecuali bahwa ia menganggap bahwa konsekuensinya adalah hal-hal buruk.
Jika Anda melihat belajar bahasa sebagai murni kegiatan akademik untuk mempelajari cara kerja komputer, maka ia benar. Jika Anda melihatnya sebagai cara untuk menyelesaikan sesuatu maka Anda benar.
sumber
Saya pikir "bahasa scripting" adalah kata yang mengerikan, yang sangat ketinggalan zaman atau paling sesuai dengan kelas bahasa domain tertentu. Guru Anda hanya menyelaraskan semua yang jelas-jelas tidak ia pahami tentang poros kejahatan.
Perbedaan yang masuk akal untuk dibuat adalah bahwa antara bahasa tingkat tinggi dan bahasa tingkat rendah, atau antara yang diketik secara statis dan dinamis, yang benar-benar ortogonal.
Assembler adalah level rendah yang diketik secara dinamis (jika berbicara tentang tipe masuk akal sama sekali), C adalah level rendah yang diketik secara statis, Ruby adalah tingkat tinggi yang diketik secara dinamis, Haskell adalah tingkat tinggi yang diketik secara statis. Java bukan tingkat tinggi atau rendah yang diketik secara statis, C ++ adalah tingkat tinggi dan rendah yang diketik secara statis. Dan seterusnya.
Diskusi hanya bisa, paradigma mana yang lebih cocok untuk programmer pemula.
Saya cukup yakin pemrograman tingkat rendah mungkin bukan satu. Mungkin, beberapa waktu yang lalu di awal 90-an, ketika Anda benar-benar dapat menghasilkan hasil yang menarik dalam waktu yang wajar dengannya.
Tetapi pemrograman didorong oleh hasrat. Gairah dipupuk oleh hadiah. Oleh karena itu, pemrogram entry level harus mulai dengan alat yang bermanfaat. Alat tingkat rendah tidak lagi bermanfaat, karena ada lautan alat tingkat tinggi yang memberi Anda hasil yang sama dalam sepersekian waktu.
Pemikiran manusia itu abstrak. Ketika kita belajar untuk memahami dunia, kita melakukannya dengan abstraksi berbutir kasar dan kita memerinci sesuai kebutuhan.
Agar seorang anak dapat memahami lingkungannya, Anda tidak akan mengajarkan matematika, lalu fisika, kimia, biologi, lalu sejarah, sosiologi, dan filsafat. Anda memberikannya sebuah model dunia yang sangat sederhana untuk diatasi dan akan, dengan sendirinya lama untuk melewatinya, tanpa akhir mengajukan pertanyaan kepada Anda ketika muda dan sepenuhnya meniadakan otoritas Anda nanti.
Itulah cara kami berpikir. Otak manusia hanya dapat memproses jumlah "unit" informasi yang terbatas, tetapi tingkat keabstrakan tidak banyak berarti dalam kuantisasi informasi. Misalnya: membaca ungkapan '34 * 75 'kepada kami lebih mudah bagi kami daripada menghitungnya, sedangkan untuk komputer sebaliknya. Untuk mengenali (dan dengan demikian abstrak) sekelompok piksel hitam menjadi garis berlekuk-lekuk, yang kemudian dapat dikenali (dan dengan demikian lagi diabstraksikan) menjadi digit individu adalah sejumlah besar pekerjaan.
Nenek saya mengerti ide membuka file. Namun dia tidak memiliki pemahaman di bawah level itu. Dan sejujurnya, jika dia harus belajar ini dengan terlebih dahulu mempelajari cara kerja internal perangkat keras dan sistem operasi dan apa yang tidak, dia tidak akan pernah sampai di sana.
Ada banyak orang di luar sana, yang terlalu rumit, karena mereka tidak pernah diajarkan untuk berpikir dalam hal solusi yang jelas, ringkas dan dengan demikian elegan, tetapi menghabiskan terlalu banyak waktu untuk repot-repot dengan rincian tingkat rendah yang dapat dipertukarkan dan memecahkan masalah terhadap mereka. Mengajar orang untuk berpikir seperti komputer adalah pendekatan terburuk untuk pemrograman.
Nilai pemrograman terletak pada menemukan solusi untuk suatu masalah. Mengekspresikannya sebagai kode benar-benar lebih membosankan, tugas mekanis dan harus dilakukan dengan alat apa pun yang cocok.
Oh, dan jangan khawatir tentang tidak mengerti pointer. Saya memiliki masalah yang sama pada usia yang sama. Masalahnya di sini juga adalah kurangnya abstraksi. Klasik Anda belajar tentang petunjuk dari beberapa buku C dan sementara Anda berjuang untuk memahaminya, ini sejalan dengan alokasi memori dan dengan demikian dengan memori tumpukan dan tumpukan dan sebagainya. Konsep abstrak di balik pointer adalah tipuan. Variabel, yang menyimpan indeks ke dalam array tertentu hanya itu (sebenarnya itu benar-benar sama di C, di mana array spesifik adalah ruang alamat Anda), dan Anda tidak perlu aritmatika penunjuk untuk ini.
Ini hanya dimaksudkan untuk menggambarkan, bahwa memilih abstraksi tingkat tinggi membuat banyak hal lebih mudah untuk dipahami.
EDIT: dan ketika harus mengetik, saya lebih suka bahasa yang diketik secara statis. Dan saya pikir pemrogram entry level harus dengan jelas memahami konsep tipe (yang abstrak).
sumber
Tidak ada yang sederhana tentang Python. Lihatlah Unicode dan meta-programming.
sumber
Saya melihat masalah lain yang jauh lebih dalam.
Bahasa unityped tidak memaksa seseorang untuk memperhatikan jenis, untuk berpikir dalam jenis. Ini bagus dan bagus selama saya memiliki skrip kecil dengan beberapa string dan angka yang dikonversi satu sama lain tanpa memperhatikan. Tetapi saatnya akan tiba ketika ini akan pecah. Tiba-tiba, program akan rusak, dan setiap perbaikan cepat akan menyebabkannya rusak lagi.
Atau, programmer wannabe pemula menemukan bahwa ia akan memerlukan sejumlah daftar alih-alih daftar tupel, tetapi tidak akan memiliki gagasan sedikit pun "bagaimana melakukan ini", dan ia akan mengajukan pertanyaan tentang stackoverflow yang menunjukkan ketidakberdayaan mutlak.
sumber
Saya masih berpendapat bahwa pengajaran dan bimbingan formal adalah faktor yang jauh lebih besar daripada pilihan bahasa dalam kualitas kode pemula. Namun, jika saya harus memilih bahasa pertama untuk pemula, saya akan memilih python untuk programmer otodidak dan C ++ untuk instruksi kuliah.
Alasannya adalah dengan instruksi formal Anda dapat mulai dengan program kecil dan sepele untuk meletakkan dasar teoretis yang kuat bertahun-tahun sebelum Anda perlu melakukan sesuatu yang bermanfaat. Saya pikir ketertiban itu ideal jika Anda dapat membayar waktu, dan C ++ memberi Anda banyak bantuan dengan kesalahan kompiler dan kesalahan segmentasi antara kuliah untuk memberi tahu Anda jika Anda tidak memahami dasar-dasarnya.
Beberapa dari dasar-dasar itu benar-benar sulit dipelajari jika Anda belajar sendiri, sampai Anda mendapatkan pengalaman. Selain itu, Anda biasanya perlu membuat sesuatu yang berguna sesegera mungkin, dan dapat memperoleh dasar-dasar teoretis sesuai kebutuhan, meskipun Anda berisiko tidak pernah belajar lebih dari yang seminimal mungkin dengan pendekatan ini. Itu sebabnya saya merekomendasikan bahasa seperti python dalam kasus itu.
sumber
Kami melihatnya sebaliknya di kampus dan saya pikir ini berguna. * Kami mulai di tanggul rendah. Pointer, manajemen memori, array karakter ... Jadi ya, kita mulai dengan C. Sama dengan algoritma: pertama mengimplementasikan daftar tertaut, hashtable, pohon ... Dan hanya kemudian menggunakan perpustakaan standar.
Setelah itu kami pergi ke bahasa yang lebih kuat seperti Java, C # atau perl. Tetapi dengan keuntungan mengetahui apa yang terjadi di bawah ikat pinggang.
Sementara ini berhasil, saya percaya bahwa beralih dari bahasa scripting ke bahasa level yang lebih rendah juga baik. Mengetahui bahasa tingkat tinggi dan rendah memastikan Anda memiliki kemudahan penggunaan bahasa tingkat tinggi sambil tetap memahami apa yang sedang terjadi. Urutan di mana Anda mempelajarinya kurang penting.
sumber
Bahasa scripting tidak membuat programmer ceroboh. Kurangnya kejelasan memahami domain masalah (misalnya bisnis yang dilayani program) adalah apa yang menyebabkan kecerobohan.
Seperti kata pepatah lama, "Anda dapat menulis COBOL dalam bahasa apa pun.", Walaupun saya menduga bahwa ketika setiap tipe data terlihat sama , maka menjadi lebih sulit untuk melihat apa saja aspek penting dari program Anda, fitur utama COBOL- isasi.
sumber
Foo
atauBar
atau sesuatu yang benar-benar berbeda selama Anda dapat.frobnicate()
melakukannya. Tanpa antarmuka eksplisit.Saya berpendapat bahwa bahasa scripting memang mendorong teknik ceroboh. (Perhatikan bahwa ini tidak mengatakan bahasa-bahasa itu buruk , hanya saja sulit untuk mempertahankan basis kode yang besar dalam bahasa-bahasa tersebut) Namun, saya pikir karena alasan yang berbeda dari jawaban lain di sini.
Saya pikir untuk menggunakan bahasa apa pun seorang programmer perlu memiliki pemahaman dasar tentang pemrograman secara keseluruhan. Mereka tidak akan efektif di mana pun jika mereka tidak memahami konsep seperti vektor, pohon, dan tabel hash. Mereka tidak perlu harus dapat mengimplementasikan hal-hal ini, tetapi mereka perlu mengetahui karakteristik mereka.
Di mana saya pikir kelambanan ikut bermain bukanlah keterampilan pemrograman, tetapi ketika seseorang perlu membuat komponen yang dapat digunakan kembali. Bahasa-bahasa ini tidak mengharuskan Anda untuk mendefinisikan antarmuka yang baik antara unit kode atau mekanisme untuk memiliki perpustakaan memberlakukan kendala pada klien mereka. Bukan tidak mungkin untuk membuat komponen yang dapat digunakan kembali yang baik dalam bahasa seperti itu, itu hanya jauh lebih sulit.
Bahasa scripting memiliki daya tarik bagi programmer pemula karena memungkinkan mereka untuk mendapatkan lebih banyak "satu kali" hal-hal yang dilakukan dalam waktu yang lebih sedikit, tetapi ketika para programmer yang sama mulai melakukan pemrograman pemeliharaan, mereka sering dengan cepat mengalami masalah dengan bahasa-bahasa ini.
Saya tidak mengatakan bahasa scripting itu buruk - jauh dari itu. Tetapi mereka membuatnya sulit untuk mempertahankan basis kode yang sangat besar (beberapa juta baris) (yang merupakan salah satu alasan mengapa Anda tidak melihat basis kode seperti itu dilakukan dalam bahasa scripting). Ketika Anda membutuhkan solusi yang relatif kecil atau satu kali, mereka memungkinkan Anda untuk menyelesaikan lebih banyak dalam waktu lebih sedikit, dan lebih sedikit kode (dan lebih sedikit kode hampir selalu lebih baik).
Ingatlah bahwa tidak ada alat yang terbaik untuk setiap pekerjaan. Pilih alat yang paling sesuai untuk situasi ini. Itu berlaku untuk bahasa pemrograman sama seperti halnya untuk alat apa pun.
sumber
Saya dengan guru Anda, tetapi juga dengan @Singletoned ketika dia mengatakan guru Anda mengasumsikan konsekuensinya (misalnya, tidak ada pengetahuan tentang kinerja) yang buruk.
Saya pikir memulai dengan C lebih baik daripada memulai dengan bahasa scripting. Sebagai seorang guru, saya akan berkonsentrasi pada seluruh hal arsitektur von Neumann (ALU, register, memori, port i / o, ...), langsung beralih ke pointer (Maaf, itu benar-benar konsep kunci [tidak melepaskan referensi (yaitu, pointer) dalam bahasa VM adalah sumber utama kebocoran memori]), tekan beberapa struktur data (pohon, daftar terkait, hashtable 1 ), dan kemudian ... tendang tingkat abstraksi ke sesuatu yang lain (OO, pemrograman fungsional, sesuatu - aturan pengetikan statis yang kuat , yo \ m /, jadi tidak ada "bahasa scripting"> :().
1 Hmm, mungkin saya setuju dengan guru Anda tentang pertimbangan kinerja.
sumber
Saya pikir yang terbaik adalah mulai dengan bahasa modular dan kemudian pergi ke hal-hal yang lebih rumit, di hari-hari saya kami mulai dengan Pascal dan COBOL dan mencoba untuk memahami apa yang dimaksud dengan subrutin, variabel kontrol aliran, dll. Hanya setelah merasa nyaman dengan Pascal saya bahkan memiliki keinginan untuk beralih ke bahasa seperti C / C ++ dan mempelajari semua teknik lain yang lebih merupakan tambahan untuk programmer junior.
sumber
Anda berdua benar.
Bahasa scripting jelas mempersulit pengembang pemula untuk memahami apa yang sebenarnya terjadi. (Begitu juga database, kerangka kerja, dan perpustakaan. Oh, dan browser, server, jaringan, dan sistem file.) Ketika saya mewawancarai pengembang yang lebih muda, saya sering tercengang betapa sedikitnya mereka yang tahu tentang bagaimana komputer sebenarnya bekerja, dan seberapa rentan mereka terhadap barang pemrograman -cult.
Di sisi lain, hal nomor satu yang saya cari dalam wawancara bukanlah pemahaman yang sempurna, itu karena mereka suka membuat sesuatu. Kembali ketika saya mulai, komputer melakukan apa pun cukup mengesankan, sehingga Apple Kecil saya dan hal-hal assembler 6502 tampak sangat mengagumkan bagi saya. Tetapi akhir-akhir ini komputer melakukan banyak hal luar biasa, jadi saya pikir tidak apa-apa bagi orang untuk memulai pada tingkat yang cukup tinggi jika itu yang diperlukan bagi mereka untuk ketagihan.
Pada dasarnya, saya pikir tidak apa-apa untuk memulai di ujung kolam yang dangkal asalkan Anda akhirnya menyerang perairan yang lebih dalam.
sumber
Pertama, saya akan mulai dengan bahasa tingkat abstraksi yang lebih tinggi. Saat ini saya akan merekomendasikan Python. Alasan paling penting untuk memilih bahasa scripting sebagai bahasa pertama adalah bahwa Anda dapat dengan mudah mengumpulkan sesuatu yang berfungsi. Seperti yang disebutkan Joe dalam pertanyaannya, hal nomor satu ketika menjadi seorang programmer adalah Anda memiliki motivasi untuk terus maju dan menggali lebih dalam. Motivasi ini didapat ketika Anda dapat membuat perangkat lunak yang berfungsi dan bermanfaat.
Selain poin dengan pemahaman abstraksi (level tinggi) dan pemahaman implementasi yang mendasari (level rendah) ada poin ketiga yang terlewatkan. Untuk menjadi programmer yang baik saat ini, Anda tentu harus menguasai kedua poin di atas. Selain itu, sangat penting untuk kompetensi Anda bahwa Anda terus melihat teknologi baru dan sudut pandang. Tidak masalah dari level abstraksi yang Anda mulai, Anda harus meningkatkan secara konstan, dan mempertanyakan metode Anda saat ini.
Harus dijelaskan sejak awal bahwa bahasa pemrograman hanyalah alat untuk menyelesaikan pekerjaan. Sangat penting untuk memilih alat yang tepat untuk tugas tertentu. Saya pikir untuk programmer pemula bahasa scripting tingkat tinggi akan membantu dalam menekankan hal ini. Bahasa tingkat yang lebih tinggi akan memberikan perspektif yang lebih luas dan memotivasi programmer untuk menggali lebih dalam.
sumber