Sebagai seorang pendidik CS tingkat universitas, masalah yang mana bahasa pemrograman untuk mengajar dalam kursus pemrograman pertama sering muncul untuk diskusi. Ada ribuan bahasa untuk dipilih, dan banyak demam agama (atau demam) mendukung satu kamp bahasa di atas yang lain. Semua ini bias subjektif seputar setiap bahasa pemrograman membuatnya sangat sulit bagi seorang pendidik untuk memilih satu.
Pertanyaanku adalah:
Kriteria objektif apa yang bisa digunakan seorang pendidik untuk memilih bahasa pemrograman yang akan digunakan sebagai dasar untuk kursus pemrograman universitas tahun pertama? Apa dasar untuk kriteria ini?
Catatan : Saya tidak ingin melihat daftar bahasa pemrograman dan mengapa mereka adalah yang terbaik untuk digunakan. Pertanyaannya bukan tentang bahasa terbaik, ini tentang kriteria untuk memilih bahasa . Namun jawaban mungkin menggunakan bahasa pemrograman untuk menggambarkan poin-poin tertentu.
Pertanyaan ini terinspirasi oleh pertanyaan lain yang dianggap di luar topik: https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language .
sumber
SML
hanya karena itu tidak mungkin ada siswa yang tahu bahasa itu sebelumnya. Ini menyeimbangkan setiap siswa kurang lebih pada tingkat yang sama untuk memulai kursus.Jawaban:
Saya akan melemparkan dua sen saya sendiri meskipun saya percaya subjek ini adalah jurang maut. Jangan salah paham, saya pikir ini pertanyaan yang menarik, tapi mungkin bukan yang akan kami selesaikan di sini untuk kepuasan semua orang.
Singkatnya, saya akan mengatakan bahwa bahasa itu harus melakukan apa yang Anda inginkan , dengan cara yang sederhana dan tidak ambigu mungkin, dan tidak lebih .
Pengalaman saya sendiri berasal dari bimbingan beberapa generasi siswa tahun pertama dan kedua dengan bahasa pemrograman Oberon . Orang yang tahu bahasa ini akan mengenali pengaruhnya dalam pendapat saya. Perhatikan bahwa bahasa ini digunakan untuk mengajarkan "Algoritma dan Struktur Data". Pada saat itu (saat itu), pemrograman fungsional dan desain berorientasi objek diajarkan dalam kursus terpisah pada tahun kedua.
Penting : Sebelum membahas secara spesifik bahasa apa pun, saya ingin menekankan bahwa hal yang paling penting adalah benar-benar jelas, untuk diri sendiri dan bagi siswa Anda, tentang apa tujuan kursus Anda. Apakah Anda mengajar pemrograman sendiri ? Atau algoritma dan struktur data? Atau rekayasa perangkat lunak? Sebelum memilih bahasa, ada baiknya untuk berpikir sejenak tentang ke mana Anda akan pergi dengannya. Perbedaan pada tingkat ini (tujuan) adalah apa yang mungkin, menurut pendapat saya, mengarah ke sebagian besar ketidaksepakatan tentang topik ini.
Poin-poin yang saya anggap penting mungkin tumpang tindih dengan beberapa hal yang telah dikatakan, tetapi saya percaya sebagian besar akhirnya menjadi himpunan bagian dari salah satu dari empat berikut:
Kesederhanaan : Para siswa biasanya di sana untuk diajarkan pemrograman, algoritma dan struktur data, dan bukan fitur dan seluk-beluk bahasa pemrograman tertentu. Wirth menggunakan kutipan Einstein "Jadikan sesederhana mungkin, tetapi tidak sesederhana" sebagai prinsip panduan dalam desain Oberon, dan ada beberapa bahasa lain di luar sana yang melakukannya juga. Bahasa pemrograman pilihan Anda harus dapat menerapkan semua konsep yang diperlukan dalam kuliah Anda, tetapi harus melakukan ini dengan set fitur / detail sekecil mungkin. Bahasa pemrograman biasanya hanya alat, bukan tujuan.
Ketidakjelasan : Saudara dekat dari kesederhanaan, harus ada satu konstruksi untuk setiap konsep, dengan sesedikit mungkin tumpang tindih. Anggap saja hanya ada satu cara "benar" dalam mengimplementasikan setiap konsep. Tiga jenis loop yang semantik semuanya melakukan hal yang sama? Atau lima belas cara berbeda untuk meningkatkan variabel? Tidak baik. Ini juga membuat mengoreksi pekerjaan rumah atau umumnya hanya memahami kode siswa Anda jauh lebih mudah. Asisten pengajar Anda akan menghargainya.
Portabilitas : Siswa akan pergi ke kelas dengan Linux, mesin Windows dan OSX, dan lingkungan pemrograman harus sama (identik) mungkin di bawah ketiganya. Hasil dari setiap program juga harus identik. Ini adalah poin lain yang asisten pengajar, yang bertanggung jawab untuk menandai pekerjaan rumah dan menangani pertanyaan / masalah, akan sangat menghargai.
Preferensi industri : Serius, kita harus mulai mengkhawatirkan hal ini hanya jika "Industri" sendiri memutuskan bahasa pemrograman apa yang paling disukainya. Sejak penemuan komputer ini telah menjadi target yang terus bergerak. Untuk saat ini, jika siswa Anda benar - benar belajar cara memprogram, maka itu tidak akan tergantung pada bahasa. Namun, ada beberapa bidang di mana industri berhasil menyepakati standar, misalnya
VHDL untuk desain sirkuitatau SQL untuk kueri basis data, jadi ini masih merupakan poin yang valid.Sekali lagi, bagaimana bahasa cocok dengan daftar ini sangat bergantung pada apa yang Anda coba ajarkan!
sumber
WHILE expr DO stmts END
dll.Mengembangkan pemikiran algoritmik untuk menyelesaikan masalah sebagai tujuan utama: Satu hal buruk tentang menggunakan paradigma berorientasi objek dalam kursus pertama adalah, bahwa mendapatkan peserta didik baru ke dalam hal-hal seperti pewarisan, polimorfisme, dll, mengalihkan perhatian mereka dari tujuan utama yang disebutkan di atas. Bahkan, pengenalan pertimbangan sekunder apa pun di samping tujuan inti ini, seperti rekayasa perangkat lunak, portabilitas, kegunaan industri, dll, adalah kontra-produktif, untuk alasan yang disebutkan.
Bukan Bahasa Berorientasi Objek: Saat ini, sebagian besar universitas mulai mengajar pemrograman dengan benar dengan bahasa berorientasi objek. Saya pikir ini adalah kesalahan. Ada hal-hal di dunia yang dapat benar-benar dipahami hanya berbeda dengan kebalikannya. Tanpa terkena paradigma pemrograman prosedural (data dan fungsi sebagai dua aspek program yang terpisah), ide dasar orientasi objek (data dan perilaku dipandang sebagai terikat secara intrinsik bersama) dapat dilewatkan oleh banyak orang. Dan karena, pemrograman berorientasi objek sangat penting, kehilangan ide dasarnya bukanlah hal kecil. Selain itu, karena kemungkinan besar dalam kursus yang lebih senior, siswa CS akan memprogram terutama di OO, mereka perlu terkena sisi prosedural juga.
Jadi, pada akhirnya, saya akan memilih bahasa prosedural, menghindari fitur-fitur canggih, fokus pada pengembangan pemikiran algoritmik. Tetapi, dengan menghindari fitur-fitur canggih, saya tidak bermaksud menghindari masalah yang menantang. Maksud saya, bahwa bahkan masalah yang menantang, siswa harus diminta untuk menyelesaikannya menggunakan prinsip pertama, alat sederhana.
sumber
public static void main()
di Jawa, yang harus berada dalam konteks beberapa kelas. Ini menjadikan Java kurang ideal sebagai bahasa pertama, meskipun tentu saja rintangannya tidak terlalu bagus.public static void main()
untuk waktu yang sangat lama. BlueJ adalah contoh bagus dari IDE yang memungkinkan siswa menulis program tanpa satumain
pun di dalamnya.Karena kita berbicara tentang kursus pemrograman pertama dalam program Ilmu Komputer, saya akan mengatakan aspek yang paling penting adalah konsep dasar CS apa yang akan diajarkan siswa Anda. Karena tidak ada bahasa yang dapat mengajarkan semua konsep sekaligus, Anda perlu mempertimbangkan konsep apa yang akan dibutuhkan lebih lanjut.
Saya tidak setuju dengan gagasan @ Kaveh bahwa relevansi industri itu penting; itu mungkin bonus, tetapi ini tidak penting di sini. Dengan dasar yang kuat dalam prinsip-prinsip CS, mempelajari bahasa "industri" di kursus selanjutnya akan relatif mudah.
Sebagai catatan tambahan, terlepas dari bahasa yang dipilih untuk menjadi yang pertama, penting untuk mengarahkan siswa Anda ke bahasa lain, yang secara radikal berbeda, sesegera mungkin.
sumber
Perhatian utama saya adalah universalitas , dalam arti bahwa belajar bahasa pemrograman ini harus membuat siswa mampu menangani sebagian besar bahasa pemrograman.
Saya sangat menyesalinya, kriteria ini tidak termasuk bahasa fungsional murni. Ini juga berlaku untuk kursus yang tidak boleh menggunakan fitur eksotis bahasa.
... tapi ini hanya akal sehat.
sumber
Saat memilih bahasa pemrograman pertama, ada banyak masalah yang perlu dipertimbangkan. Banyak dari ini telah dipertimbangkan dalam jawaban di atas. Saya menyertakan 3 lagi karena ini adalah bagian dari jawaban saya untuk pertanyaan tertutup ( https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language ) yang awalnya mengilhami pertanyaan ini . Saya telah menyalin jawaban saya di sini (dan memodifikasinya) berdasarkan kebijakan saat ini untuk menghapus pertanyaan tertutup.
Berikut adalah 3 hal yang perlu dipertimbangkan, menggunakan beberapa bahasa pemrograman sebagai contoh.
Pemrograman dalam pemrograman besar vs dalam kecil
Ketika pertama kali belajar pemrograman , kita perlu belajar bagaimana memprogram dalam kelompok kecil , sebelum melanjutkan untuk mempelajari mekanisme untuk membantu pemrograman dalam skala besar .
Dengan pemrograman di kecil, maksud saya menulis program dengan kurang dari 100 baris. Program-program ini akan melibatkan algoritma yang memanipulasi struktur data sederhana, memiliki aliran kontrol yang sederhana, dan akan memecahkan masalah sederhana. Mereka pada umumnya tidak akan dianggap sebagai aplikasi .
Dengan pemrograman dalam ukuran besar, maksud saya menulis program besar yang dibangun dari banyak komponen / kelas, membangun di atas API, dengan GUI, database, mungkin dalam konfigurasi client-server.
Hal-hal yang perlu dipikirkan oleh seorang programmer ketika pemrograman dalam yang kecil sangat berbeda dari ketika pemrograman dalam yang besar. Pemrograman dalam skala besar membutuhkan programmer untuk memikirkan modularitas, antarmuka yang baik, desain yang baik, penggunaan kembali, dan banyak masalah lainnya. Bahasa pemrograman modern menyediakan banyak konstruksi untuk membantu program dalam skala besar. Konstruksi ini termasuk kelas, modul, antarmuka, penyembunyian informasi, dll. Ketika pemrograman dalam ukuran kecil, masalah-masalah ini jauh kurang penting.
Bahasa pemrograman seperti C ++ memiliki banyak fitur untuk membantu pemrograman dalam skala besar, tetapi lebih sulit untuk duduk dan mulai menulis program yang sangat sederhana. Java serupa.
Di sisi lain, bahasa seperti Python, Ruby, Skema atau Haskell membuatnya lebih mudah untuk langsung menulis program.
Tingkat tinggi vs tingkat rendah
Bahasa seperti C ++ dan C adalah bahasa tingkat yang lebih rendah. Mereka memungkinkan programmer untuk memanipulasi referensi ke dalam memori secara langsung. Meskipun, ini memungkinkan seseorang untuk menulis kode yang sangat efisien, detail level rendah mungkin sulit bagi programmer pertama untuk mempelajari bahasa. Beberapa orang akan berpendapat bahwa perincian tingkat rendah ini menghalangi penulisan logika untuk menyelesaikan masalah.
Bahasa tingkat tinggi seperti Python membuatnya lebih mudah untuk mengekspresikan konsep lebih langsung dalam hal domain masalah.
Dietik Secara Statis vs Dietik Secara Dinamis
C ++, Haskell, Java, dan banyak lagi bahasa lainnya diketik secara statis. Ini berarti bahwa kompiler secara otomatis menemukan tempat-tempat di mana potensi kesalahan terjadi berdasarkan tipe nilai yang diharapkan di setiap lokasi dalam kode. Ada sedikit perang agama tentang apakah pengetikan statis adalah hal yang baik atau tidak, tetapi saya akan menghindari itu. Satu masalah dengan pengetikan statis untuk programmer baru adalah bahwa pesan kesalahan yang dilaporkan oleh kompiler seringkali sulit untuk dipahami. Ini khususnya terjadi pada templat C ++ dan program Haskell secara umum.
Python, Ruby, dan Skema diketik secara dinamis. Ini berarti bahwa kesalahan terdeteksi saat program sedang berjalan. Orang bisa berpendapat bahwa ini sudah terlambat untuk mendeteksi kesalahan (tetapi kita juga dapat menggunakan pengujian untuk menghindari kesalahan tersebut). Sekali lagi, menghindari argumen keagamaan, keuntungan dari jenis kesalahan yang kita temui ketika menulis program sederhana dalam bahasa pemrograman yang diketik secara dinamis adalah dari jenis objek ini tidak tahu bagaimana melakukan operasi ini . Dalam konteks program kecil, kesalahan ini mudah dipahami dan dilacak.
Bahasa seperti C memiliki pengetikan yang lemah, artinya meskipun kompiler membantu dengan beberapa kesalahan, run-time gagal menjebak orang lain yang terjadi, seperti akses memori yang tidak valid. Akibatnya, pesan kesalahan yang dikembalikan ke programmer mirip dengan "Program macet". Bahasa yang diketik secara dinamis akan menjebak kesalahan ini dan mengubahnya menjadi pesan kesalahan yang lebih komprehensif.
Lainnya
Untuk bahasa lain, berbagai pertimbangan dapat ikut berperan, seperti dukungan yang diberikan oleh lingkungan pemrograman, API yang tersedia, kualitas buku dan tutorial online, dll.
sumber
Sebagai kata pengantar, pertimbangkan kemungkinan penyajian lebih dari satu bahasa (dalam satu kursus). Dalam istilah pertama saya, kami menunjukkan SML dan Java. Kontrasnya memiliki pesannya sendiri dan penting: pilih alat yang tepat untuk pekerjaan itu.
Tapi sekarang untuk kriteria, dalam urutan acak.
Kesulitan untuk belajar adalah masalah subjektif, tetapi penting: Anda tidak ingin siswa Anda membuang waktu untuk belajar bahasa, tetapi pada melakukan hal hal dengan itu. Bisa dibilang, bahasa dinamis seperti Ruby mungkin menang di bagian depan ini: Anda dapat memberi mereka makan apa saja, dan ada tutorial "dummy" yang sangat baik di web. Jika saya ingat dengan benar, ada juga studi yang menunjukkan bahwa siswa yang belum memprogram sebelum mencapai hasil yang lebih baik dengan bahasa fungsional daripada yang lain.
Kekayaan : bahasanya harus cukup kaya untuk semua konsep yang ingin Anda ajarkan. Misalnya, jika Anda ingin membahas fungsi tingkat tinggi, Anda memerlukan bahasa di mana fungsi bernilai, seperti bahasa fungsional atau Scala.
Skalabilitas : Peluangnya adalah siswa Anda tidak akan belajar lebih banyak bahasa sendiri daripada yang Anda tunjukkan kepada mereka. Jadi Anda ingin bahasa yang Anda pilih untuk ditingkatkan selama masa belajar mereka: mereka perlu menulis latihan kesayangan Anda sekarang, tetapi mungkin juga menyerang proyek berukuran menengah nanti. Jawa dan bahasa dengan ekosfer yang serupa adalah pilihan yang baik di sini.
Dukungan alat : Ini terkait dengan skalabilitas. Jika Anda berharap / ingin siswa Anda menjadi produktif dengan bahasa tersebut, maka IDE yang bagus, pengelola gedung, dan perpustakaan harus ada. Kerang interaktif (Ruby, Scala) juga merupakan hal yang baik, terutama untuk pemula. Alat juga harus bekerja pada semua platform utama.
Dokumentasi : Anda mungkin tidak ingin benar-benar mengajarkan bahasa tetapi minta siswa mengajar diri mereka sendiri dengan bimbingan (abstrak) Anda. Karena itu, dokumentasi yang baik adalah penting. Dapat diperdebatkan, semakin populer suatu bahasa, semakin baik dokumentasinya. Sebagai contoh, dokumentasi Scala sangat buruk (tetapi membaik). Alat seperti Hoogle merupakan nilai tambah.
Ketersediaan : Sebenarnya ada orang yang mengajar menggunakan Matlab atau Visual C ++. Pertimbangkan bahwa tidak semua orang mungkin memiliki lisensi atau mesin yang dapat menjalankan program yang diperlukan. Anda mungkin harus memilih bahasa gratis yang berjalan di berbagai platform.
Cleanness : Anda mungkin ingin membentuk cara berpikir siswa Anda. Semakin berantakan bahasa, semakin berantakan mereka akan berpikir; Saya tidak akan pernah mengusulkan PHP dalam suatu kursus. Bahasa dinamis secara umum memiliki kelemahan di sini: mereka memungkinkan, kadang-kadang bahkan mempromosikan, kebiasaan buruk.
Kriteria mana yang lebih penting bagi Anda daripada yang lain juga tergantung pada apa yang ingin Anda ajarkan. Apakah ini benar-benar kursus pemrograman? Apakah ini kursus algoritma dan struktur data? Apakah ini kursus yang memperkenalkan konsep bahasa pemrograman dalam berbagai paradigma? Apakah ini kursus pengembangan perangkat lunak dalam skala besar?
sumber
For example, if you want to discuss higher-order functions, you need a language where functions are values, such as functional languages or Scala.
... atau C atau Pascal, yang keduanya memiliki pointer fungsi hampir selamanya. Praktis satu-satunya bahasa (mainstream) kriteria ini benar-benar menutup adalah Jawa.Pertanyaan menarik; Saya suka penekanan Anda pada kriteria objektif. Kami ingin mahasiswa baru belajar:
konsep pemrograman : Bahasa pemrograman pertama harus mendukung: pemanggilan fungsi, iterasi, rekursi
ide dasar : Bahasa pemrograman pertama harus mendukung array (untuk langkah-langkah pertama dalam pengantar yang lembut tentang bagaimana cara memori benar-benar bekerja dan bagaimana pointer bekerja)
keterampilan pemrograman praktis : cara menggunakan debugger, cara menggunakan profiler, cara memecahkan masalah besar (bahasa tingkat tinggi), cara menyusun sistem besar, cara memecah masalah (penguraian masalah), cara menghindari penulisan kode yang rumit, cara berkomunikasi dengan manusia tentang maksud di balik serangkaian pernyataan yang dapat dieksekusi (seringkali samar).
fakta bahwa perpustakaan pra-tulis ada untuk hal-hal seperti sort (), dan bagaimana menggunakannya - yaitu, fakta bahwa tidak perlu menulis semuanya dari awal.
Kriteria lain untuk bahasa pertama :
ditafsirkan (umpan balik cepat membantu proses pembelajaran).
lingkungan interaktif yang mempercepat pembelajaran, pengujian, dan debugging.
kode sumber berkualitas tinggi tersedia bagi siswa untuk membaca dalam bahasa itu
"mudah dibaca", "sintaks yang mendekati bahasa alami" (untuk membuatnya lebih mudah untuk membaca dan menilai SourceCode)
portable (berjalan pada Mac OS, Windows, Unix). Setidaknya satu implementasi perangkat lunak bebas bahasa.
cepat untuk mengajar, "beberapa gotchas" - misalnya, "[saya] mungkin lebih cepat untuk mengajar pemula Python dan kemudian Jawa, daripada Jawa sebagai OOPL pertama." - "Perbandingan Bahasa Pemrograman Berorientasi Objek" dan TelescopeRule
Matthias Felleisen mengembangkan bahasa pemrograman dengan pesan kesalahan yang disesuaikan untuk audiens pemula. Dia menekankan bahwa pilihan bahasa tertentu tidak sepenting mengajar metodologi desain yang baik. Bahkan, ia melihat kursus CS pertama sebagai kelas Seni Liberal, mengajar pemikiran kritis, pemecahan masalah, dan perhatian terhadap detail.
kriteria untuk bahasa pemrograman kedua
Hal-hal yang kami ingin siswa pelajari, tetapi mungkin ini bisa menunggu bahasa pemrograman kedua:
bahasa "relevan" yang "tidak terlalu esoteris"; sesuatu yang "populer di industri"
Teori kompleksitas: bagaimana mengenali tugas yang tidak mungkin dilakukan dengan teknologi saat ini.
hal-hal tingkat yang lebih tinggi: cara memilih alat yang tepat untuk pekerjaan itu , bagaimana menggunakan kompiler, struktur, pemrograman berorientasi objek, pemrograman fungsional, pemrograman logika, desain kompiler, menyusun dan memanipulasi fungsi (dalam pengertian Lisp / ML), pemrograman bersamaan dan didistribusikan,
hal-hal tingkat rendah: aritmatika pointer, arsitektur komputer. manajemen memori, frame stack, pemrograman perakitan, arsitektur mesin, driver perangkat dan desain sistem operasi (sehingga mesin tidak akan "tampak seperti kotak hitam menakutkan yang tidak dapat mereka tembus")
EDIT: Saya merasa mengecewakan bahwa memposting ringkasan dari sesuatu yang saya tulis, bekerja sama dengan banyak orang lain, "mungkin bukan posting yang legal".
Jadi saya menambahkan kutipan yang lebih formal ke tautan informal saya sebelumnya, berusaha untuk mematuhi penggunaan yang adil dan masalah hak cipta wiki lainnya.
Jawaban ini adalah ringkasan Bahasa Pertama Freshman (Anon 2011) di Portland Pattern Repository.
(Anon 2011) Banyak penulis anonim dan berbagai lainnya. "Bahasa Pertama Mahasiswa Baru". Repositori Pola Portland. 27 September 2011. http://c2.com/cgi/wiki?FreshmansFirstLanguage .
sumber
Saya pikir kesederhanaan dan kemudahan belajar adalah salah satu kriteria utama. Dalam kursus pengantar tentang pemrograman kami ingin menghindari rintangan pemrograman yang tidak perlu dan fokus sebanyak mungkin pada prinsip-prinsip pemrograman dan pemecahan masalah algoritmik. Para siswa tahun pertama sering kurang memiliki kemampuan untuk berpikir algoritmik tentang masalah sehingga kursus juga tentang mengajar pemikiran algoritmik.
Kriteria lain adalah kegunaan bahasa dalam industri. Kami tidak ingin mengajarkan bahasa yang tidak berguna di industri. Sebagian besar siswa yang jelas akan bekerja di industri sehingga orang harus memperhatikan apa yang digunakan (dan akan digunakan ketika siswa lulus) di industri.
Kriteria ketiga adalah kursus yang akan diambil siswa di tahun-tahun berikutnya. Kursus, khususnya kursus yang diperlukan, tidak dirancang sendiri tetapi berkoordinasi dengan kursus lain.
Yang terakhir yang dapat saya pikirkan saat ini adalah sama dengan jawaban jmad, bahasanya harus memberikan kemudahan dalam mempelajari bahasa-bahasa penting lainnya. Itu harus cukup kaya dan mengambil bahasa-bahasa penting nantinya akan mudah (di sini, sarana-sarana penting penting dari sudut pandang para siswa).
Saya pikir banyak universitas telah mengalihkan pengantar utama mereka ke kursus pemrograman dari Java / C ++ / C ke Python meskipun mereka mungkin memberikan pengantar pemrograman dalam bahasa lain dari waktu ke waktu (sering untuk jurusan sains non-komputer, misalnya C untuk jurusan teknik elektro) meskipun mereka mungkin menunjukkan fleksibilitas jika instruktur ingin bereksperimen dengan mengajar bahasa lain sesekali.
sumber
Jadi, saya akan segera mengeluarkan reaksi spontan saya, yaitu setiap orang harus belajar pemrograman melalui SICP karena Lisp adalah Hal yang Tepat.
Ada banyak kriteria bagus yang ditawarkan sudah untuk memilih bahasa ... kesederhanaan dan portabilitas menjadi yang paling penting. Namun, saya juga berpikir sangat penting bagi siswa baru untuk pemrograman untuk tidak mendapatkan ide yang salah (atau tidak tahu) tentang apa yang terjadi di balik layar dengan bahasa modern.
Walaupun beberapa dari pos-pos lain ini telah menawarkan kriteria yang sangat baik, saya ingin menggunakan bahasa tertentu untuk menggambarkan seperti apa 'memenuhi kriteria'.
Beberapa masalah ini telah diatasi (jauh lebih baik daripada yang dapat saya coba) dalam posting blog Joel Spolsky, The Perils of JavaSchools . Memilih bahasa seperti Java atau Python menutup lebih dari dua konsep yang lebih sulit (dan paling vital) di CS; yaitu, pointer dan rekursi.
Tentu saja, mengajar kursus intro di C akan menjadi sangat padat, sementara juga kemungkinan kehilangan banyak konsep penting yang berkaitan dengan rekursi. Demikian juga, kursus yang diajarkan di Lisp harus membahas petunjuk di bawah selimut,
car
dancdr
menyiratkan konsep-konsep penting yang terkait dengan daftar-tertaut, sambil membiarkan bahasa menangani detailnya.Pada dasarnya, yang saya maksudkan adalah bahwa siswa perlu memahami dasar-dasar struktur data dan algoritma, serta implementasi praktis.
Saya juga tidak setuju dengan saran untuk tidak menggunakan bahasa berorientasi objek. Saya pikir kegunaan bahasa berorientasi objek untuk memodelkan dunia nyata adalah aset positif bagi programmer baru, selama ketidakcocokan impedansi dibuat jelas, dan bahwa bahasa berorientasi objek adalah salah satu paradigma di antara banyak.
Saya akan mengusulkan bahwa Ruby (disarankan sebagai kemungkinan oleh posting lain juga) mencontohkan banyak kualitas yang harus dicari dalam bahasa yang akan digunakan untuk intro ke kursus pemrograman.
Saya akan membenarkan pernyataan ini sebentar, tetapi pertama-tama saya ingin mengomentari satu tren yang mengganggu saya dalam kursus CS intro. Saya bekerja di sebuah universitas yang, seperti banyak sekolah, baru-baru ini beralih menggunakan Python untuk kursus intro-nya. Saya sangat percaya bahwa Python adalah BASIC baru, dan kecenderungan bahasa adalah untuk memilih persahabatan baru daripada kekuatan dan ekspresif, seperti yang saya baru-baru ini berpendapat di tempat lain . Ini merugikan, dan kita perlu memikirkan tentang programmer yang akan menjadi, bukan newb mereka saat ini.
Bagaimanapun, membenarkan Ruby sebagai bahasa pengantar ...
malloc()
dengan mengajar mereka untuk memperluas bahasa dalam C.Bagaimanapun, tidak ada pengganti untuk belajar banyak bahasa, dari banyak paradigma, apakah Anda menggunakannya secara profesional atau tidak. Pada dasarnya, saya pikir semua orang harus mengerti , jika tidak digunakan , C dan Lisp. Ruby adalah kompromi terbaik yang bisa saya pikirkan untuk semester pengantar.
Bagaimanapun ... itu adalah US $ .02 saya. Saya tidak mencoba meyakinkan Anda untuk menggunakan Ruby, ingatlah ... hanya menggunakannya sebagai contoh kualitas yang harus dicari dalam bahasa untuk mengajar kursus intro.
sumber
Bahasa pemrograman pertama saya adalah bahasa perakitan mainan. Yang kedua adalah Fortran. Di antaranya, saya diajari notasi "algoritma", yang kira-kira Algol 60. Saya ternyata cukup ok. Sebenarnya, saya pikir apa yang diajarkan kepada saya cukup sempurna.
Ketika saya pertama kali melihat pemrograman fungsional, dalam makalah penelitian meskipun tidak dalam bahasa yang diterapkan, saya berkata, "Wah, ini benar-benar berbeda. Ini cukup matematis!" Kebanyakan orang yang diajarkan pemrograman fungsional masih memiliki pengalaman "wow" yang sama. Saya pikir itu hebat.
Saya pikir pemrograman imperatif dan pemrograman fungsional adalah dua cara yang sangat berbeda dalam memandang dunia. Kami akan merugikan siswa kami jika kami merampok mereka dari pengalaman yang beragam.
Bahasa pemrograman pertama yang terbaik haruslah sesuatu yang sesederhana mungkin dan sejelas mungkin, sehingga siswa dapat fokus pada cara berpikir jernih. Sayangnya, kesederhanaan dan kejelasan perakitan, Fortran dan Algol 60 tidak tertandingi oleh sebagian besar bahasa pemrograman modern. Haskell adalah pengecualian yang bagus. Tapi, Haskell akan membuat bahasa pemrograman kedua yang ideal saya, bukan yang pertama. Eiffel atau Oberon mungkin bisa sesuai dengan tagihan.
sumber
Di Sekolah Sains dan Matematika Carolina Utara , kami telah memperkenalkan siswa ke Python sejak tahun 2004. Kami menggunakannya untuk mengajar pemrograman prosedural, karena kami berpikir bahwa kemampuan untuk menulis prosedur yang singkat dan benar sangat penting untuk berkembang kemudian dengan alat yang lebih berat, termasuk OO pemrograman.
Kami menyukainya karena alasan ini.
Python bukan bahasa format bebas. Ini memaksa siswa untuk menulis kode mereka dalam blok menggunakan indentasi. (Sebagai catatan teknis, kami menggunakan editor teks vim dan meletakkan [
set tabstop=4 set et
] di .vimrc untuk menghilangkan masalah yang mengganggu dan agar lekukan kode terlihat tetapi tidak menyebabkan pergeseran horizontal yang jelek dan berlebihan). Siswa kami terbiasa melihat struktur hierarki program yang dibatasi oleh spasi putih. Akibatnya, kebiasaan memformat mereka cenderung sangat baik karena mereka memprogram dalam bahasa lain.Kesederhanaan sintaksis Python membuatnya ramah-pemula. Program sederhana dapat ditulis dengan minimal kata kunci misterius dan mantra magis. Kami ingin siswa yang biasanya tidak berpikir pemrograman untuk mencobanya. Perhatikan kesederhanaan yang indah dari Python
hello.py
; sangat jelas apa yang terjadi.Python diketik secara dinamis dan diketik bebek. Ini membuat memperkenalkan variabel mudah. Saya memberi tahu siswa saya bahwa variabel hanyalah label. Mereka menunjuk benda. Anda mengirim pesan ke objek menggunakan nama variabel, sama seperti seseorang mengirim pesan kepada Anda dengan menelepon Anda di telepon.
Python adalah alat yang siswa ambisius tidak akan tumbuh lebih besar. Ini memiliki perpustakaan canggih yang melakukan banyak hal berguna. Ini adalah alat kreatif yang kuat yang dapat diakses oleh pemula.
Python gratis dan berjalan di semua platform utama. Sekolah kami adalah lingkungan OS yang heterogen dengan semua jenis mesin. Kami tidak perlu khawatir tentang sakit kepala seperti masalah kompatibilitas. Ini akan berjalan di hampir semua komputer.
Python memiliki dokumentasi yang sangat baik. Kami mendorong siswa kami untuk mengeksplorasi, mengotak-atik, dan mewarnai di luar garis. Mereka belajar tentang menggunakan dokumentasi Python sejak awal dan sering berakhir menjelajahi hal-hal keren di luar kelas.
Kami sangat senang dengan Python.
sumber
Saya akan mengatakan, bahwa bahasa (di bawah beberapa batasan) tidak terlalu penting, seperti apa yang Anda lakukan dengan bahasa tersebut. Anda dapat mempelajari hal yang sama tentang pengembangan perangkat lunak, algoritme, pemrograman berorientasi objek, perangkat keras komputer, dan sebagainya dalam sebagian besar bahasa. Kuncinya adalah, untuk mengembangkan sesuatu yang menarik, yang memanfaatkan semua konsep ini.
(jawaban yang dimigrasikan dari https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language/ )
sumber
TL; DR: Tidak ada cara untukmenjawab ini secara objektif karena tidak adadasar objektif untuk kriteria di baliknya. Ini sama sewenang-wenangnya dengan mencoba memperdebatkan apakah biru, secara objektif , warna "lebih baik" daripada merah, atau jika es krim vanila secara objektif "lebih enak" daripada cokelat.
Saya pikir sudah ada beberapa posting indah yang sudah ada, tetapi saya akan menambahkan 2 sen saya sendiri.
Pertanyaan ini mirip dengan menanyakan apakah ada cara untuk secara objektif memilih rasa es krim pertama yang harus dicoba orang lain ketika mengunjungi tempat es krim untuk pertama kalinya. Tidak, tidak ada cara obyektif untuk memilih sesuatu yang pada dasarnya subyektif .
Mengapa? Karena bahkan ketika kita melihat kriteria masuk akal yang disebutkan dalam jawaban Pedro , semua orang masih akan memiliki pandangan subjektif tentang bagaimana masing-masing faktor "bertahan" terhadap pandangan orang lain.
Misalnya, apakah Ruby secara objektif "lebih sederhana" dari pada Python? Lebih sederhana dalam arti apa? Sehubungan dengan apa? Apa arti "sederhana" bagi Anda ? Apakah ini berarti "lebih sedikit baris kode"? Apakah ini berarti "lebih mudah dibaca dan dimengerti"? Bagaimana dengan orang lain? Mengapa ada yang setuju dengan pilihan tertentu di sini? Saya tidak berpikir kita bisa menjawab pertanyaan itu secara objektif .
Ini mengarah ke pertanyaan berikutnya.
Meskipun beberapa kriteria masuk akal, saya pikir ini lebih didasarkan pada preferensi subjektif daripada yang lain. Sebagai contoh, tidak ada alasan mengapa aku harus menerima kriteria Pedro dari kesederhanaan , unambiguity , portabilitas dan industri preferensi -regardless bagaimana wajar beberapa mungkin berpikir untuk menjadi. Faktanya, preferensi industri adalah subyektif berdasarkan definisi dan hanya akan mengarah pada lingkaran setan. (Semua orang dilatih di dalamnya, jadi semua orang menggunakannya dalam industri, itulah sebabnya semua orang dilatih di dalamnya, ...)
Misalnya, mengapa tidak
Intinya adalah bahwa, walaupun saya dapat menghasilkan serangkaian kriteria evaluasi yang berbeda dan masih dianggap masuk akal, kami tidak dapat mengklaimnya secara obyektif lebih unggul / lebih rendah daripada kriteria orang lain.
Kesimpulannya, tidak ada dasar objektif untuk kriteria tersebut. Ini sama sewenang-wenangnya dengan mencoba memperdebatkan apakah biru, secara objektif , warna "lebih baik" daripada merah, atau jika es krim vanila secara objektif lebih enak daripada cokelat.
Itu bukan untuk mengatakan bahwa Anda tidak dapat memiliki alasan yang bagus untuk membenarkan preferensi Anda, tetapi pada akhirnya, itu hanya preferensi Anda .
sumber