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
- apakah ada faktor lain yang saya lewatkan?
- Dan, bahasa apa yang Anda sarankan sebagai pilihan?
sumber
Jawaban:
Jawabanku? Python.
Biarkan saya jelaskan dengan menangani semua poin Anda.
print("Hello World!")
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.
sumber
{
dan}
ataubegin
danend
untuk 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.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.
sumber
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.
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:
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.
sumber
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.
sumber
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.)
sumber
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)
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.
sumber
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
sumber