Sebagai Guru: Memilih bahasa pemrograman yang sesuai

8

Saya tidak yakin apakah itu tempat yang tepat untuk pertanyaan ini. Maaf jika sedikit di luar topik.

Memilih Bahasa yang cocok untuk kursus pemrograman pertama adalah salah satu hal terpenting yang harus diingat oleh setiap guru / dosen terkait; terutama jika siswa masih muda atau memiliki pengetahuan matematika yang terbatas.

Saat ini saya mengajar sekelompok anak muda yang sangat antusias (sekitar 16 hingga 17 tahun) dengan pengetahuan matematika sedang . Mereka menghadiri Sekolah Menengah di kelas 10 sekarang. Saya akan mulai mengajar bahasa pemrograman untuk semester mendatang.

Mereka adalah sekelompok siswa yang dipilih sendiri di seluruh kota dengan tingkat kreativitas dan ketekunan yang luar biasa, jadi saya melihat bahwa bekerja dengan bahasa pemrograman nyata tidak akan menjadi tugas yang sulit bagi mereka. Jadi, memilih solusi grafis dan drag'n'drop sederhana seperti Turtle Art, Scratch, dan Tynker tidak dianggap sebagai opsi.

Ada beberapa faktor yang harus diperiksa sebelum membuat pilihan:

  • Kesederhanaan : Sebagian besar dari mereka mungkin belum pernah mengalami tindakan pengkodean nyata apa pun sebelumnya.
  • Kesederhanaan, Lagi : Salah satu ide utama adalah mengajarkan cara berpikir algoritmik . Memiliki bahasa yang canggih atau sulit disintesis akan mengalihkan mereka keluar dari jalur.
  • Umum : Lebih baik bahasa tidak dirancang untuk kasus pengembangan khusus. Ambil PHP dan MATLAB sebagai contoh yang masing-masing dirancang untuk Pengembangan Web dan Perhitungan / Pemodelan.
  • Hal-hal Tujuan Minimum : Tidak ada pemrograman OO paksa (seperti Java). Atau setidaknya dengan ketergantungan minimum pada konsep OO.
  • Platform : Sangat penting untuk memiliki Windows sebagai lingkungan pengembang yang didukung, karena hampir semuanya ada di Windows.
  • Mudah Pengaturan : Lebih baik memiliki cara langsung mengatur lingkungan dev.
  • Preferensi industri : Bukan masalah serius. Tetapi harus setidaknya bahasa saat ini aktif memungkinkan siswa untuk mencapai pengalaman dev yang hampir nyata.
  • Portabilitas Perangkat Keras : Penting (tetapi tidak diharuskan) bahwa bahasa tersebut cukup fleksibel untuk digunakan pada pemrograman Perangkat Keras. (Saya tidak berbicara bahasa Deskripsi Perangkat Keras seperti Verilog dan VHDL.) Tujuannya adalah pemrograman untuk perangkat keras berbasis prosesor yang lebih sederhana seperti AVR Microprocessors atau Raspberry Pi GPIO interface .

Saya ingin tahu itu

  1. apakah ada faktor lain yang saya lewatkan?
  2. Dan, bahasa apa yang Anda sarankan sebagai pilihan?
zxcmehran
sumber
2
Untuk kriteria lain yang mungkin Anda lewatkan, lihat pertanyaan ini .
David Richerby
1
@ DavidRicherby Saya telah melihatnya sebelum memposting pertanyaan, dan tentu saja, itu sangat membantu.
zxcmehran
Cobalah Lua.
Ankur
1
@zxcmehran Pada topik paradigma pemrograman, saya menemukan ini di Wikipedia hari ini dan berpikir mungkin relevan dengan pertanyaan Anda: Perbandingan bahasa pemrograman multi-paradigma
tehDorf

Jawaban:

11

Jawabanku? Python.

Biarkan saya jelaskan dengan menangani semua poin Anda.

  1. Kesederhanaan . Kode python berbunyi seperti bahasa Inggris. Serius, betapa sederhananya print("Hello World!")
  2. Generalitas . Python dapat digunakan untuk pengembangan web (via. Flask / Django), analisis data (via. NumPy / Pandas / SciPy), game (via. PyGame), serta banyak tugas lain karena banyaknya perpustakaan di sana adalah.
  3. Hal-hal Objektif Minimum . Anda dapat melakukan beberapa OOP dengan Python tetapi tidak diperlukan.
  4. Platform . Python2.7 ada di hampir semua distro Linux dan ada banyak video YouTube untuk mengaturnya di Windows / Mac. Jika ada, Anda dapat menggunakan juru bahasa online yang ditawarkan Repl.It.
  5. Preferensi Industri . Perbaiki saya jika saya salah, tetapi Python secara konsisten diperingkatkan sebagai salah satu bahasa yang paling populer.

Dalam pengalaman mengajar saya, sangat penting untuk memastikan bahwa sintaksanya semudah mungkin untuk ditulis dan dipahami. Untuk programmer baru, bisa sangat mengecewakan ketika dia menulis kode hanya untuk melihat pesan kesalahan (terutama jika dia tidak memiliki keterampilan untuk membaca pesan kesalahan dan men-debug).

Catatan tambahan, PythonTutor akan sangat membantu dalam menjelaskan beberapa konsep ilmu / pemrograman komputer utama.

Lawrence Vo
sumber
Terima kasih sudah berbagi. Saya setuju dengan Anda dan berpikir tentang Python sebagai salah satu pilihan terbaik.
zxcmehran
1
Berbicara tentang PythonTutor, JetBrains PyCharm Edu juga merupakan alat yang baik untuk memulai dengan python.
zxcmehran
Saya bekerja dalam penelitian dalam bahasa pemrograman dan saya percaya bahwa bahasa pemrograman tujuan umum yang baik harus diketik secara statis, tetapi saya juga berpikir Python adalah bahasa pembelajaran yang hebat, terutama bagi siswa muda. Ada banyak faktor yang orang lain tunjukkan, tetapi izinkan saya juga mengatakan ini: dalam pengalaman saya seorang pemula perlu melihat program mereka crash dan terbakar dengan mata mereka sendiri. Jika kompiler buruk besar terus mengatakannya "Anda tidak bisa melakukan ini karena itu akan crash dan terbakar" itu sedikit membantu. Agak seperti saya memberi tahu anak-anak saya "jangan menyentuh oven, ini panas."
Andrej Bauer
1
Dan tidak pernah meremehkan fakta bahwa dalam Python lekukan blok membuat struktur program menjadi jelas. Hanya dengan mengetik {dan }atau begindan enduntuk membatasi blok kode adalah beban kognitif yang signifikan pada siswa pemula. Jika Anda berpikir sebaliknya, beralihlah ke skema dan lihat pendapat Anda tentang tanda kurung.
Andrej Bauer
Anda juga dapat memprogram dalam python pada raspberry pi, yang bagus.
heather
10

Latar Belakang

Pertanyaan ini menimbulkan kepalanya yang buruk setiap 5 tahun di departemen kami. Kami memiliki Miranda dan Pascal berabad-abad yang lalu, lalu kami memiliki Haskell, sekarang kami memiliki C karena Anda EE memutuskan untuk mengirimi kami para siswa mereka seperti sebelumnya, tetapi menuntut "sesuatu yang praktis seperti C" dan kepemimpinan kita yang tidak memiliki apa-apa lebih baik melakukan daripada mematuhi.

Mengapa tidak ada yang direkomendasikan di atas?

Saya telah mengajarkan beberapa hal ini dan melihat siswa keluar darinya selama hampir 20 tahun. Satu hal yang menonjol adalah bahasanya tidak terlalu penting asalkan memungkinkan Anda untuk mengekspresikan konsep dasar komputasi dengan cukup mudah dan bahwa jika Anda tidak melakukan hal yang benar, Anda akan mendapatkan pesan kesalahan yang baik, terutama dari penyusun. Di situlah python gagal. Jenis itu penting! Di situlah C gagal: tipenya penting dan polimorfisme penting! (Dan tidak, membuat semuanya memiliki tipe batal bukanlah solusi. Anda hanya pindah ke tanah python.) Di situlah java gagal: program tidak cocok pada slide - terlalu banyak pelat boiler dan verbosity.

Jadi secara pribadi, saya tidak akan pergi dengan jawaban di atas. Saya akan pergi dengan Haskell. Ini indah selaras dengan matematika. Ini lebih ringkas daripada yang lain. Anda dapat fokus pada esensi perhitungan. Dan ghc cenderung menghasilkan kode yang lebih baik dan lebih cepat daripada kompiler C untuk upaya optimasi yang lemah yang saya saksikan setiap kali saya membiarkan siswa menggunakan C.

Tapi sungguh..

Karena itu, dalam pengalaman saya hal yang paling penting adalah bahwa guru benar-benar tahu bahasa lebih baik daripada hanya dari beberapa cerita online. Bahasa pertama hanya itu, bahasa pertama. Jika siswa Anda serius, mereka akan mengambil lebih banyak lagi di sepanjang jalan. Fokus pada konsep daripada sintaksis.

Kai
sumber
7

Pertanyaan ini sangat terbuka, menurut saya. Tidak ada yang dapat memicu perang suci seperti "bahasa mana yang terbaik untuk X". Tetap saja, saya akan gigit.

  1. apakah ada faktor lain yang saya lewatkan?

Pertama, saya sarankan Anda membaca apa yang dikatakan Dijkstra tentang pengajaran . Ini sudah tua tetapi masih relevan - mungkin jauh, jauh lebih relevan hari ini daripada sebelumnya.

Kedua, saya juga merekomendasikan membaca posting blog oleh Joel Spolsky tentang topik yang sama.

Ketiga, dan yang kurang penting, kriteria saya sendiri untuk bahasa pertama adalah:

  1. Setiap kesalahan runtime harus dilaporkan dengan pesan kesalahan yang jelas.
  2. Itu harus diketik.
  3. Tidak ada bahasa pemrograman tunggal yang dapat membuat Anda memahami semua aspek pemrograman. Untuk menjadi programmer sejati, seseorang perlu belajar banyak bahasa, terutama yang sangat berbeda.

Poin 1 sangat, sangat berguna bagi pemula. Sebagian besar bahasa memuaskan itu, dengan pengecualian C dan C ++. Sementara saya berpikir bahwa C adalah bahasa yang harus diketahui untuk setiap programmer (lihat poin 3), saya pikir itu tidak perlu keras untuk pemula. Pengumpulan sampah merupakan prasyarat untuk poin 1.

Poin 2 adalah yang paling kontroversial. Sementara saya percaya bahwa seseorang juga harus belajar bekerja dalam bahasa yang tidak diketik (sekali lagi, poin 3), saya pikir memulai dengan tipe lebih bermanfaat. Bahkan dalam lingkungan yang tidak diketik, programmer sering berpikir tentang jenis data yang harus diteruskan ke subrutin. Lebih jauh, mendeteksi kesalahan lebih awal dari runtime itu bagus.

Poin 2 mengesampingkan banyak bahasa. Perhatikan bahwa Python tidak dikesampingkan: sementara Python tidak diketik, ada proyek mypy yang bagus yang memungkinkan seseorang untuk menggunakan Python yang diketik. Lebih lanjut, Perl6 memiliki pengetikan opsional (bertahap), sehingga masih akan masuk. Skrip juga menambahkan jenis ke JavaScript. Bahkan jika Lisp dan Skema dikesampingkan, ada banyak bahasa pemrograman fungsional yang diketik untuk dipilih (Ocaml, Haskell, F #, ...).

Poin 3 juga penting. Orang perlu belajar banyak hal untuk menjadi programmer yang baik. Dari hal-hal tingkat rendah (pointer, C) ke tingkat tertinggi (rekursi, penutupan, parametrik polimorfisme / generik, ...), berbagai paradigma (imperatif, fungsional, logika, ...). Ini tidak bisa diajarkan dalam satu kursus, tentu saja. Sebagai kursus pertama, Anda harus membuka jalan menuju jalan penuh.

chi
sumber
1

Saya akan pergi dengan jawaban Python, tetapi saya juga ingin merekomendasikan alternatif: C.

Bahasa pemrograman pertama saya adalah C dan pada saat mempelajarinya saya sangat menikmatinya. Guru (dan beberapa siswa lain) akan menggunakan Java sebagai bahasa pemrograman pertama tetapi ditetapkan untuk mengambil C. Guru biasa menunjukkan beberapa contoh Python untuk menunjukkan manfaat dari bahasa pemrograman yang lebih modern. Bagaimanapun, kembali ke topik:

  • Kesederhanaan Sintaks C cukup kecil, tetapi dari waktu ke waktu agak aneh. Anda tidak dipaksa untuk mengambil pendekatan vodoo, tetapi Anda mungkin.

  • Kesederhanaan, Lagi-lagi Sebagai hasil dari poin pertama, algoritma dapat diimplementasikan dengan cukup kompak dan mudah dimengerti. Pikirkan Fibonacci atau lebih lanjut Tur Ksatria.

  • Generalitas Menggunakan C Anda dapat mengimplementasikan apa yang Anda inginkan. Anda juga dapat menggunakan beberapa subsistem seperti bahasa scripting (Lua).

  • Minimum Objective Stuff C berbicara untuk dirinya sendiri di sini. Anda harus memiliki pengetahuan yang baik tentang C untuk mengimplementasikan hal-hal OO.

  • Platform Setiap platform utama mendukung bahasa, mengambil kompiler pilihan Anda dan mulai coding.

  • Pengaturan Mudah C tidak memerlukan IDE dengan banyak tombol dan rantai alat yang gemuk. Cukup ambil file make (atau sebuah skrip) dan buat comile kode Anda dengan beberapa perintah. Anda dapat menggunakan IDE (Codeblocks, ...) jika Anda mau.

  • Preferensi industri Linux, Windows, ...

  • Portabilitas Perangkat Keras Ini berfungsi baik pada mikrokontroler AVR atau menggunakan Arduino, yang juga dapat diprogram menggunakan C.


Sebagai alternatif, bagaimana dengan pengembangan pada platform yang terjangkau seperti Arduino (mungkin ada alternatif yang lebih baik). Anda dapat menunjukkan kepada mereka semua hal algoritmik menggunakan cetakan stdout sederhana atau Anda mungkin menggunakan beberapa perangkat keras untuk bekerja. Mungkin bermanfaat jika kode yang dihasilkan tidak hanya mencetak beberapa teks (atau gambar, atau gui, atau barang ...) tetapi juga memungkinkan flash LED atau sesuatu. Di perusahaan saya kadang-kadang ada kursus siswa di mana mereka memberi kode beberapa hal pada papan Arduino yang cukup mendasar dan kami menerima umpan balik yang baik dari para pelayan.


Saya pikir Anda mengajukan pertanyaan yang tepat dan saya berharap yang terbaik untuk mengajar siswa Anda.

maxik
sumber
Satu-satunya titik negatif C dan C ++ adalah bahwa koder perlu memahami beberapa struktur sintaksis canggih (seperti pointer) untuk dapat membangun sesuatu yang tampak seperti tindakan nyata. Dalam C Family, Anda tidak dapat mencapai GUI mewah atau kekuatan sihir Jaringan tanpa memahami bagian-bagian sulit dari bahasa tersebut. Sebagai mahasiswa, akan membosankan jika semua upaya melalui satu semester hanya menghasilkan beberapa logika berjalan di dalam jendela konsol hitam dengan jenis huruf yang aneh. Jadi, saya pikir menggunakan bahasa dengan tingkat yang lebih tinggi bisa lebih menarik bagi mereka dan mendorong mereka untuk melanjutkan jalan pengkodean.
zxcmehran
1
@ zxcmehran Benar, itu sebabnya saya menyarankan sesuatu seperti Arduino sebagai pendekatan alternatif.
maxik
C sederhana seperti "kelola ingatanmu sendiri" sederhana. Banyak perilaku yang tidak terdefinisi adalah masalah.
djechlin
1

Saya akan menggunakan Swift, menggunakan Swift Playground. Anda mungkin ingin memeriksa berapa banyak orang yang memiliki Mac atau iPad. Di antara siswa itu 90% di beberapa tempat. Ini juga tersedia online di http://iswift.org/playground , jadi Anda tidak memerlukan apa-apa selain browser. Anda dapat menggunakannya di ponsel jika Anda tidak memiliki komputer.

Swift adalah bahasa modern, ini adalah bahasa yang aman, dan itu adalah bahasa yang akan memberi Anda pekerjaan jika Anda menguasainya. (Kode baru apa pun yang ditulis Apple ditulis dalam Swift.)

gnasher729
sumber
0

Sunting: Maaf, tentang itu - Saya salah membaca poin Anda tentang platform. Saya pada dasarnya berpikir Anda mengatakan bahwa itu hanya harus berjalan pada Windows, tetapi saya melihat sekarang bahwa itu hanya sebagian besar pengguna Anda yang menggunakan Windows.

Microsoft telah membangun dukungan untuk Linux dan Mac dan VS Code dan Visual Studio untuk Mac , masing-masing, dan .NET Core jadi saya pikir ini masih merupakan jawaban yang valid, walaupun mungkin tidak sekuat itu.


Saya akan menyarankan Anda melihat ke dalam C #, kerangka .NET, dan Visual Studio IDE - mereka mencakup hampir semua poin 7-8 Anda. (tergantung pada bagaimana Anda menghitung dua yang pertama; D)

  • Kesederhanaan : Sintaksnya cukup mudah untuk diambil, dan ada banyak informasi di web untuk tutorial pemula.
  • Kesederhanaan, Lagi : C # adalah bahasa yang sangat diketik, yang membantu menyoroti kesalahan bahkan sebelum aplikasi berjalan. Visual Studio adalah salah satu IDE terbaik yang bisa Anda dapatkan dengan dukungan sintaksis hebat, Intellisense, dan dukungan debugging.
  • Umum : Walaupun mungkin bukan pilihan terbaik, saya pribadi menggunakannya untuk berbagai aplikasi - dari situs web dan aplikasi desktop hingga peralatan robot.
  • Hal Tujuan Minimum : Ubah Object Oriented Programming adalah gaya pemrograman berfokus pada enkapsulasi, abstraksi, warisan, dan polimorfisme. C # memiliki fitur-fitur yang membuat penulisan kode OO lebih mudah, tetapi Anda tidak perlu menggunakannya. Anda dapat menulis program C # secara prosedural.
  • Platform : Edit .NET Core adalah versi lintas-platform dari .NET Framework. Ini berfungsi di Mac, Linux, dan Windows.
  • Pengaturan Mudah : Saya rasa Anda tidak dapat menemukan bahasa dan IDE yang lebih mudah untuk mendapatkan pengaturan di Windows. Sunting Adapun Mac dan Linux, saya tidak punya pengalaman dengan itu, tetapi ada VS Code (Win / Mac / Linux) dan Visual Studio untuk Mac (Mac Only). Saya akan menganggap ini akan relatif mudah juga.
  • Preferensi industri : C # jelas merupakan bahasa profesional, meskipun Anda dapat melihatnya sendiri dengan mencari pekerjaan di wilayah Anda berdasarkan bahasa apa pun yang Anda pertimbangkan. Menggunakan Dice , saya mendapat hasil yang kira-kira sama untuk C # (6.548) dan Python (6.639) di semua posting pekerjaan terbuka, tapi saya tidak tahu apakah Dice memiliki bias satu atau lain cara, atau jika ada perbedaan regional yang signifikan.
  • Portabilitas Perangkat Keras : Mungkin setengah poin di sini - Saya tidak berpikir ada banyak dukungan untuk pemrograman mikrokontroler dengan C # selain beberapa papan khusus .NET seperti Netduino , tetapi Raspberry Pi didukung .

Sebagai bonus tambahan, Microsoft memiliki program yang disebut Imagine (sebelumnya DreamSpark) di mana mereka memberikan banyak perangkat lunak gratis untuk guru dan siswa di sekolah menengah dan perguruan tinggi. Mereka juga memiliki beberapa kontes untuk para siswa.

tehDorf
sumber
Hanya untuk Windows guys. Juga, sepenuhnya OOP
Eugene
@Eugene Kesalahan saya, saya salah membaca poin tentang Platform, jadi jawaban saya pasti hanya berkaitan dengan Windows. Saya telah memperbaruinya untuk mengatasi Linux dan Mac. Sedangkan untuk "sepenuhnya OOP", saya juga telah mengatasinya dalam jawaban saya yang diperbarui di bawah "Hal-hal Tujuan Minimum". Tolong beritahu saya bagaimana menurut anda.
tehDorf
Meskipun C # adalah bahasa yang matang, itu tidak termasuk dalam daftar saya; karena saya berasumsi bahwa ia memiliki ruang lingkup terbatas pada platform dan perangkat keras. Menghargai Anda, ia kembali ada dalam daftar. Terima kasih atas tautannya, saya akan memeriksanya.
zxcmehran
-1

Lihatlah Lazarus:

http://www.lazarus-ide.org

Lazarus adalah lingkungan pemrograman berdasarkan Free Pascal Compiler (FPC). Ini berjalan sangat lancar di Windows, dan juga tersedia untuk platform utama lainnya. FPC mendukung versi modern Pascal, yang disebut Object Pascal.

Object Pascal adalah bahasa pemrograman multi-paradigma. Anda dapat menulis kode dalam Pascal standar, kemudian mulai menggunakan fitur OO saat Anda membutuhkannya.

Aplikasi dunia nyata dapat dikembangkan menggunakan Lazarus / FPC. Keduanya cukup matang, tetapi Anda juga dapat menggunakan Delphi sebagai alternatif komersial.

FPC dapat mengkompilasi silang program Anda ke perangkat seperti Raspberry Pi atau Android.

Selain itu, masa depan Pascal cerah. Bahasa pemrograman Oberon pada akhirnya akan mengambil alih sebagai cara paling produktif untuk mengembangkan perangkat lunak:

ht tp: //www.projectoberon.com

Semoga alat untuk berkembang di Oberon akan matang dalam waktu. Sudah ada kompiler keren untuk target Win64:

https://github.com/congdm/AyaCompiler

srcstorm
sumber
Pertanyaan itu menyebutkan sebagai kriteria: "Preferensi industri: Bukan masalah serius. Tapi itu harus setidaknya bahasa yang saat ini aktif memungkinkan siswa untuk mencapai pengalaman dev yang hampir nyata." Sepertinya Lazarus / Pascal tidak cocok dengan yang satu itu. Akan menyenangkan untuk mendokumentasikan jawaban Anda di mana kriteria Lazarus bekerja dengan baik dan mana yang tidak.
DW
en.wikipedia.org/wiki/… <br/> wiki.freepascal.org/Lazarus_Application_Gallery <br/> delphi.wikia.com/wiki/… <br/> jonlennartaasenden.wordpress.com/2014/11/06/… <br/> <br/> Ketika Lazarus mencapai 1,0 tonggak, itu menarik banyak perhatian. Popularitas tidak menurun sejak itu. <br/> Delphi / Lazarus adalah salah satu alat paling populer untuk mengembangkan aplikasi desktop. Kerangka kerja untuk menggunakan FPC di server dan aplikasi seluler juga sedang dikembangkan.
srcstorm