Perdebatan tentang bahasa pemrograman pertama: keputusan akhir

Beberapa berhubungan dengan perdebatan tentang memilih bahasa pemrograman pertama kira-kira seperti ini:



Mereka mengatakan bahwa sejuta facor mempengaruhi pilihan dan tidak ada gunanya memperdebatkan hal ini. Namun, holaris terus berlanjut.

Vitaly Bragilevsky memutuskan untuk mengakhiri itu dan mempresentasikan keputusan akhir di Saint AppsConf . Setelah membaca artikel (atau melihat laporan), Anda akan tahu bagaimana menanggapi dengan benar kerabat atau kenalan yang telah belajar berapa banyak yang mereka peroleh di TI dan bahwa remote itu bukan halangan, dan sekarang bertanya-tanya dari mana harus memulai.


Vitaly Bragilevsky bekerja di JetBrains dan mengajar di Universitas Negeri St. Petersburg di Fakultas Matematika dan Ilmu Komputer, anggota Komite Haskell untuk Standardisasi Bahasa Pemrograman dan Komite Pengembangan Kompiler Haskell Glasgow Haskell, penulis buku Haskell in Depth.

Jadi, mari kita cari tahu bagaimana memulai belajar pemrograman, alat apa yang digunakan? Padahal, ini merupakan masalah penting.
Dijkstra menulis pada tahun 1972: "... alat yang kami coba gunakan dan bahasa atau notasi yang kami gunakan untuk mengekspresikan atau mencatat pemikiran kami adalah faktor utama yang menentukan apa yang dapat kami pikirkan atau ungkapkan sama sekali!"
Seringkali bahasa pemrograman (dan bahasa pada umumnya) sama sekali tidak memungkinkan kita untuk melakukan apa yang kita inginkan, atau tidak melakukannya dengan cara yang kita inginkan. Bahasa adalah alat yang penting, dan pilihannya harus ditanggapi dengan serius.

Jika Anda membuat kesalahan dalam pilihan ini (atau lebih sering seseorang membuat pilihan untuk siswa), maka konsekuensinya bisa serius. Beginilah tampilan programmer:

  • dimanjakan oleh Fortran;
  • terkena dampak BASIC;
  • menghancurkan C ++;
  • Jawa tercekik.

Oleh karena itu lelucon bahwa programmer Fortran nyata dapat menulis program Fortran dalam bahasa apa pun. Atau cerita tentang orang-orang yang di tahun pertama diganggu oleh C ++, dan kemudian mereka sudah tidak mungkin menjadi programmer - hanya mereka yang tahu caranya <, dan >menulis.

Karena kita melihat orang-orang seperti itu, masuk akal untuk berasumsi bahwa bahasa pemrograman pertama mempengaruhi .

Saya punya kisah pribadi dalam hal ini. Bahasa pemrograman pertama saya adalah Fortran, kecuali untuk perjalanan yang gagal ke kuliah Dasar, di mana guru berbicara tentang array, dan sebagai pemula, semuanya tidak dapat dipahami oleh saya dan membuat saya takut untuk melanjutkan. Kemudian saya pergi ke perpustakaan, mengambil buku Fortran dan mulai melakukan latihan pemrograman di selembar kertas. Sejujurnya, itu bahkan lebih nyaman bagi saya - tetapi kompiler tidak bersumpah.

Latar Belakang


Saya akan mulai dengan apa yang disebut masalah Richard Vekselblat. Pria ini dikenal sebagai PhD pertamanya dalam Ilmu Komputer. Pada tahun 1980, ia menulis sebuah artikel tentang konsekuensi memilih bahasa pemrograman pertama ( Richard L. Wexelblat. Konsekuensi dari bahasa pemrograman pertama seseorang. Prosiding simposium ACM SIGSMALL ke-3 dan simposium SIGPC pertama pada sistem Kecil, 1980 ).

Semuanya berawal pada 1978, ketika Richard menulis surat ke majalah dengan tajuk provokatif "Kesalahan Pemuda, atau Apakah Dasar Dasar Buruk untuk Kesehatan Anda?" Jawaban surat ini menjadi bahan untuk artikel tersebut.


Berdasarkan sudut pandang berulang, Richard Vekselblat membuat kesimpulan berikut:

  • , (Pascal, PL/C) , (COBOL, FORTRAN). .
  • , . — , .
  • , , . .

Tentu saja, ini adalah studi yang sangat naif, tanpa memperhitungkan faktor sosiologis, dan itu memungkinkan kami untuk menarik beberapa kesimpulan.

Setelah mempelajari sejarah masalah ini lebih dalam, saya yakin bahwa ada ratusan studi yang ditujukan untuk pilihan bahasa pemrograman. Bahkan ada karya yang merangkum karya tentang pilihan senjata nuklir, misalnya: Kevin Parker, Bill Davey. Sejarah Pemilihan Bahasa Komputer. (Dalam Arthur Tatnall. Refleksi tentang Sejarah Komputasi: Memelihara Kenangan dan Berbagi Cerita, AICT-387, Springer, hlm. 166-179, 2012, Kemajuan IFIP dalam Teknologi Informasi dan Komunikasi (SURVEI)) .

Para penulis, mengandalkan bibliografi yang luas, mengidentifikasi faktor-faktor yang mempengaruhi pilihan bahasa, tidak hanya untuk mengajar, tetapi juga untuk melaksanakan proyek:

  • : , ( ). , .
  • : ( 150 «Hello world!» 500 IDE); problem-solving, ; .
  • : (, 2000- ); .

Banyak ahli yang terlibat dalam membandingkan bahasa, khususnya mengenai seberapa baik mereka cocok untuk studi awal. Linda Mannila dan Michael de Raadt dalam artikel mereka “Perbandingan Objektif Bahasa untuk Pengajaran Pemrograman Pengantar” merumuskan kelompok kriteria untuk mengevaluasi PL:

  1. Berlaku dalam pelatihan.
  2. Bahasa dan lingkungan pengembangan.
  3. Dukungan dan ketersediaan.
  4. Gunakan di luar kursus pengantar.

Berbekal kriteria ini, Linda Mannila dan Michael de Raadt menyusun tabel perbandingan bahasa.



Dalam aslinya, setiap kriteria memiliki karakteristik tambahan yang tidak begitu penting bagi kami. Kami tertarik pada kenyataan bahwa para pemimpin dalam skor Penulis akhir adalah Python dan Eiffel , bahasa yang hampir tidak bisa disebut populer.

Pada awalnya, saya berharap untuk memberi peringkat YP sesuai dengan kriteria ini dan menarik kesimpulan saya sendiri, tetapi, melihat kolom Haskell, saya menemukan kebohongan tentang setiap item! Dan dia memutuskan bahwa meja itu tidak ada hubungannya dengan kenyataan - ini adalah perbandingan "objektif".

Setelah refleksi, saya sampai pada kesimpulan bahwa perbandingan seperti itu tidak masuk akal. Misalkan saya akan menambahkan kolom dengan Kotlin dan memberi tanda centang pada setiap item, atau tidak. Itu sama sekali tidak berarti apa-apa.

Kemudian saya memutuskan untuk melihat apa yang digunakan untuk pelatihan sebenarnya. Di sini gambarnya berbeda.


Sumber data .

Fakta bahwa data untuk 2014 seharusnya tidak membingungkan Anda, karena sistem pendidikan tinggi berubah sangat lambat dan gambaran keseluruhan belum banyak berubah sekarang.

Python masih di tempat pertama, Jawa - mencerminkan permintaan dari Oracle, Sun Microsystems dan perusahaan lain untuk mempelajari bahasa ini. Di antara universitas yang mulai mengajar pemrograman C ++ mungkin adalah University of Texas - Björn Straustrup membaca kursus awal di sana dan, saya pikir, para siswa melakukannya dengan baik.

Banyak bahasa yang menarik bagi komunitas akademik sama sekali tidak termasuk dalam peringkat ini, khususnya:

  • PL fungsional dengan pengetikan statis Haskell dan ML, populer di kalangan peneliti.
  • Banyak digunakan dalam pengembangan web, dengan pengetikan dinamis JavaScript, Ruby, PHP.
  • Bahasa industri platform-spesifik Objective-C dan C # / Visual Basic.

Dengan yang terakhir, dapat dipahami bahwa secara historis universitas tidak ingin ikatan yang kaku dengan apa pun.

Suara orang-orang


Setelah mempelajari sejarah masalah ini, saya memutuskan untuk mencari tahu pendapat pengembang modern melalui survei di twitter . Pertanyaan itu dirumuskan sebagai berikut: "Apa properti bahasa pemrograman yang Anda anggap paling penting ketika memilih bahasa PERTAMA untuk mengajar pemrograman?" Dan dia mengusulkan opsi jawaban yang cukup mudah dikorelasikan dengan bahasa tertentu.

Mengingat semua fitur teknis jajak pendapat di twitter, hasilnya adalah sebagai berikut.



Lebih dari setengah responden mengatakan bahwa kesederhanaan adalah hal utama. 25% yang menjawab prevalensi tampaknya berpikir bahwa kita harus segera memikirkan permintaan di pasar. Persentase tinggi dari orang-orang yang berpikir bahwa Anda perlu berurusan dengan pointer terlebih dahulu mengkhawatirkan. Dan fakta bahwa hanya 8% untuk set perpustakaan yang kaya menunjukkan bahwa bahasa pertama masih tidak harus dirancang untuk melakukan sesuatu yang nyata.

Jawaban Survei


Saya akan memberikan beberapa pendapat menarik dari diskusi survei.

Dmitry Kovanikov ( @ChShersh ) - seorang pengembang dan guru berpengalaman - mengungkapkan sejumlah pertimbangan penting, yang saya setujui sepenuhnya: “ Tingkat tinggi dan interaktivitas. Untuk mendapatkan hasil dari program dan untuk dapat melihatnya, dimungkinkan dengan jumlah langkah minimum. Pemrograman bukan tentang membuat variabel, loop, atau rekursi, ini tentang menyelesaikan masalah dengan cara PL. "

Artyom Pelenitsyn ( @ ulysses4ever ) mencatat komponen metodologis: "Kehadiran metodologi khusus (buku teks, buku tugas, tutorial, forum Q&A) dan teknis (IDE sederhana dan cerdas dengan antarmuka minimalis, steppers / debuggers dengan GUI)".

Andrei Miskov ( @andreymiskov ) mengingat faktor penting lainnya: “ Prediktabilitas : tidak terganggu oleh null / undefined dan 0,1 + 0,2. Peningkatan peluang secara bertahap: tidak ada OOP dan mutasi hingga Anda menguasai data dan fungsinya. Seperti di Racket / HtDP atau Pyret / PAPL. "

Para pembela C ditemukan: “Secara pribadi, saya percaya bahwa C adalah dan tetap yang terbaik untuk studi yang lebih mendasar. Menurut pendapat saya, ada sintaks yang sederhana dan cukup intuitif , dan banyak konsep yang berbeda (memori, pointer, stack, alokasi). Hanya satu NAMUN, tidak berarti C89, setidaknya C99, tetapi lebih baik C11. "

Ada referensi untuk Scala, dan Rust - dan dalam konteks pengetikan dan kesederhanaan. Yang membuat kita berpikir bahwa, sayangnya,bahasa pemrograman sebagai sekte totaliter . Mereka memiliki penganut yang, terlepas dari segalanya, mempromosikan bahasa favorit mereka dan tidak ingin mendengarkan kritik (dan, secara umum, pendapat orang lain).

Contoh nyata dari "sektarianisme" semacam itu adalah debat tentang bagaimana menentukan penugasan "=" atau ": =". Perselisihan ini sudah berusia lebih dari 40 tahun, ada artikel yang hanya membahas masalah ini. Dan ini hanyalah salah satu alasan dari ratusan "masalah penting" ini.
Jangan holivarit - mempopulerkan bahasa Anda, tetapi jangan bertindak sebagai penganut sekte totaliter.

Perbedaan antara bahasa industri dan pendidikan


Kami hampir menemukan solusi akhir dalam masalah memilih bahasa pertama. Tetap hanya untuk menentukan bagaimana bahasa pendidikan berbeda dari bahasa industri.

Pertama, dalam bahasa industri, selalu ada banyak cara untuk mencapai tujuan yang sama.

Kedua, pesan kesalahan dalam bahasa industri ditujukan untuk memastikan bahwa profesional dengan cepat memahami apa masalahnya dan memperbaikinya. Akibatnya, mereka berisi banyak informasi teknis yang berguna untuk seorang spesialis, yang dapat ditakuti dan membingungkan oleh seorang pemula. Aspek ini terkadang membuat tidak mungkin menggunakan bahasa profesional untuk mengajar. Jika Anda pernah melihat pesan kesalahan di C ++, maka Anda akan mengerti apa yang saya bicarakan.

Dan akhirnya, tujuannya berbeda. Sebagai contoh, kecepatan adalah penting dalam operasi industri, tetapi itu tidak masalah ketika Anda hanya menguasai pemrograman.
Mempelajari YP saat Anda tahu cara memprogram itu mudah. Dalam masalah dengan bahasa pertama, Anda harus belajar memprogram, dan ini lebih sulit.
Pada masalah pengajaran pemrograman seperti itu, ada juga buku-buku, misalnya seperti itu.



Dalam buku yang sangat klasik (lihat saja sampulnya) "Struktur dan Interpretasi Program Komputer" orang mendapat kesan pemrograman sebagai aktivitas ajaib, dan programmer sebagai penyihir dengan kemampuan luar biasa. Ini, tentu saja, benar-benar bohong.

Sampul buku kedua, Bagaimana merancang Program, mencerminkan pendekatan yang sama sekali berbeda - rekayasa. Saya jauh lebih menyukainya, dan saya yakin Anda perlu belajar memprogram seperti bisnis teknik lainnya.

Ada beberapa prinsip penting dalam Cara merancang Program yang perlu Anda pelajari saat mempelajari pemrograman:

  • Cara membaca pernyataan masalah dan mengidentifikasi komponen apa yang harus terdiri dari solusi.
  • Cara mentransfer tugas ke struktur program.
  • , , .
  • , .

Beginning Student Language


Untuk menerapkan prinsip-prinsip ini, penulis buku Matthias Felleisen datang dengan ide bahasa untuk belajar. Ini adalah bahasa yang secara bertahap memperluas kemampuan mereka.

Semuanya dimulai dengan BSL - Beginning Student Language - di mana hanya ada minimum yang diperlukan: definisi fungsi, pemanggilan fungsi, operasi kondisional, aritmatika. Dan kemudian, seiring dengan tugas-tugas, bahasa secara bertahap tumbuh, konstruksi seperti daftar, rekursi, dan fungsi tingkat tinggi ditambahkan. Secara bertahap, dengan bantuan bahasa, sudah SL, menjadi mungkin untuk memecahkan masalah yang lebih kompleks. Rantai ini berakhir dengan bahasa Racket dari keluarga Lisp, yang merupakan penutupan dari semua yang sebelumnya dan memungkinkan programmer untuk mengimplementasikan apa pun.

Beginilah tampilan program dasar di lingkungan DrRacket bagi siswa pemula.


Pyret


Pendekatan lain untuk pemrograman pengajaran diusulkan oleh Shriram Krishnamurthi et al. Mereka menciptakan bahasa Pyret dan menerbitkan buku Programming and Programming Languages, karena, saya ulangi, tidak ada yang akan belajar bahasa tanpa materi pelatihan.

Perhatikan judul beberapa bab dari tutorial ini:

  • Pengantar Data Tabular (4)
  • Game Interaktif sebagai Sistem Reaktif (11)
  • Contoh, Pengujian, dan Pemeriksaan Program (12)
  • Grafik (19)
  • Program Pengolahan: Parsing (23)
  • Alasan tentang Program: Pandangan Pertama pada Jenis (27)
  • Objek: Interpretasi dan Tipe (32)

Dalam bab 11 - pada akhir bulan pertama pelatihan - mereka mengajar menulis game interaktif sebagai sistem reaktif. Seluruh program dirancang selama sekitar enam bulan dan objek dan sistem tipe diperkenalkan hampir pada akhirnya.

Bahasa Pyret dibangun sedemikian rupa sehingga memungkinkan untuk berjalan sesuai rencana tanpa melihat ke depan. Pada kenyataannya, Anda dapat memprogram segala sesuatu yang terjadi sebelum bab ke-27, tanpa mengetahui bahwa ada jenis-jenis dalam bahasa tersebut. Dan di bab ke-27 ternyata ada pengetikan statis dan Anda bisa menggunakannya. Bahasa ini dibuat khusus untuk bergerak dari awal ke akhir, secara bertahap memperkenalkan konsep-konsep baru ke dalam sirkulasi.

Di bawah ini adalah contoh program dalam Pyret dan lingkungan di mana untuk bahasa ini.


Misalnya, tes yang tertanam dalam program (blok where:) adalah bagian penting dari sintaksis. Dokumentasi juga tertanam dalam sintaks ( doc:). Konstruksi yang bermanfaat seperti itu adalah level teratas dalam bahasa dan penggunaannya ditanamkan dalam proses pembelajaran.

Codeworld


Gagasan implementasi grafis sederhana diimplementasikan di lingkungan CodeWorld. Ini memiliki bahasa sendiri, tetapi Anda dapat menggunakan Haskell dan segera mendapatkan sesuatu yang indah - bagi pemula itu menarik.


PascalABC.NET


Jawaban kami BSL dan Pyret sedang dikembangkan di SFU di Rostov-on-Don Stanislav Mikhalkovich dan murid-muridnya.

Ini adalah Pascal yang tidak ketinggalan jaman. Ini berisi, misalnya: deskripsi variabel intra-blok, kasus per baris, bilangan bulat panjang, kelas dan rutin umum, antarmuka, overloading operasi, ekspresi lambda, pengecualian, pengumpulan sampah, metode ekstensi.

Beberapa hal dari .NET muncul di sana bahkan lebih awal daripada di C #. Artinya, dalam pembungkus sintaksis Pascal yang sudah dikenal, itu adalah bahasa super dengan akses penuh ke fitur-fitur platform .NET. Ini mengimplementasikan konsep modern dari sudut pandang pengembangan senjata nuklir.


Di atas dalam tangkapan layar, program 120-garis dengan indah dan dengan animasi mengumpulkan menara Hanoi.

Keputusan terakhir


Pembaca yang cerdik telah menebak bahwa tidak ada solusi akhir untuk pertanyaan memilih bahasa pemrograman pertama. Baik saya maupun orang lain tidak memilikinya. Dan ini bagus: kita dalam ilmu komputer tidak perlu buku teks sejarah seragam yang memberi tahu satu-satunya sudut pandang yang benar.

Pada awal artikel kami menemukan apa yang lebih penting, cara belajar, daripada dalam bahasa apa. Meskipun demikian, ada beberapa cara untuk mulai mempelajari pemrograman dengan lebih benar dari sudut pandang pengembangan di masa depan.

Lebih baik memulai dengan bahasa yang lebih cocok untuk ini: Racket, Pyret, Python, PascalABC.NET. Hal utama adalah bahwa tahap awal - bahasa pertama ini - meletakkan dasar untuk pengembangan di masa depan.



Dari bahasa tingkat pertama dalam skema ini, akan mudah untuk beralih ke beberapa bahasa industri atau akademik dasar: JavaScript, C, C #, Java, Haskell, OCaml, F #. Tetapi jika Anda langsung mulai dengan JavaScript, Anda mendapatkan programmer Fortran dengan cara baru, yang kemudian akan menulis di mana-mana seperti di JS, dan itu akan mengerikan. Dan jika itu adalah bahasa kedua, maka deformasi seperti itu tidak akan terjadi.

Selanjutnya, ketika fondasi diletakkan di area tertentu, sejuta peluang terbuka. Hanya beberapa dari mereka yang ditampilkan dalam diagram.

Anda mungkin tidak perlu tahu banyak bahasa saat ini. Apalagi jika Anda adalah pengembang ponsel. Tetapi semua platform cepat atau lambat menjadi usang, dan ketika ini terjadi, ternyata yang memiliki latar belakang lebih luas dan yang tahu lebih banyak bahasa dari berbagai bidang akan mendapat manfaat.

Jika Anda menggunakan bahasa pada skema tingkat lebih rendah, dan secara kasar akan mewakili perangkat mereka, ini akan menjadikan Anda pengembang terbaik dalam bahasa apa pun.

Jika (dan bagaimana lagi, Anda membacanya di Habré) Anda sudah berhasil memulai karier pengembang, telah pergi jauh ke salah satu bidang dan sekarang ingin tahu apa yang terjadi di luarnya dan di mana lagi untuk mengarahkan perhatian Anda - bergabunglah dengan festival RIT ++ Online . Di sana, dalam dua hari (25 dan 26 Mei), Anda bisa mendapatkan sepotong industri TI secara keseluruhan, dan di kelas master dari 27 Mei hingga 10 Juni, Anda dapat memompa keterampilan individu.

All Articles