Bahasa apa (atau kelas (seperti dalam paradigma) bahasa pemrograman, ditambah bahasa yang direkomendasikan dari kelas itu) yang harus diajarkan setiap siswa ilmu komputer di perguruan tinggi menurut Anda? Memotivasi jawaban Anda; mengapa bahasa itu? Apa gunanya satu dari itu? Konsep apa yang diajarkannya (lebih baik daripada bahasa X)?
Catatan / klarifikasi : Pertanyaan ini adalah tentang ilmu komputer dengan fokus utama pada rekayasa perangkat lunak, bukan ilmu komputer murni. Masih pendidikan ilmu komputer dan bukan pendidikan rekayasa perangkat lunak yang menjadi fokus.
Jawaban:
Saya akan memberikan daftar:
Siswa harus paling tidak terkena semua paradigma ini . Bukan hanya satu atau dua.
Saya kira banyak orang akan menyarankan Python untuk membahas gaya prosedural, gaya OOP, dan mungkin yang lain, tetapi saya tidak memiliki pengalaman pribadi yang cukup dengan Python untuk dapat dengan yakin merekomendasikannya.
sumber
Saya pribadi merasa agak sedih bahwa bahasa fungsional tidak diajarkan secara dominan seperti dulu. Saya pikir paling tidak mahasiswa sains harus dihadapkan pada bahasa dari semua paradigma utama: prosedural, berorientasi objek, fungsional, dan dinamis.
sumber
Saya pikir seorang siswa CS yang seimbang harus diajarkan bahasa di masing-masing dari 4 jenis bahasa pemrograman:
Fungsional - Lisp / Haskell / PostScript. Saya tidak punya banyak pengalaman dengan Haskell, tapi saya pernah mendengar programmer lain yang suka tentang itu. Memahami konstruksi pemrograman fungsional dan mengapa mereka berguna dalam banyak situasi akan membantu seorang programmer menjadi lebih baik dalam mengatur algoritma dalam bahasa lain juga.
Berorientasi Objek - Pilih. C # / Java / Python / Ruby / yadda yadda yadda. Jenis ini perlu diajarkan hanya karena itulah yang diinginkan bisnis modern.
Imperatif - C / Fortran / Pascal. Ini kurang umum hari ini, tetapi mereka masih harus dipelajari dari perspektif praktis / historis. Metode yang mereka gunakan masih memiliki kepraktisan karena dalam setiap bahasa, semuanya bermuara pada sebuah instruksi. Dan bahasa imperatif sangat baik dalam daftar dan mengikuti instruksi.
Logis - ProLog. Saya belum pernah menemukan penggunaan praktis yang baik untuk bahasa-bahasa ini, tetapi saya telah menemukan beberapa konsep di balik bahasa logis yang berguna ketika mencoba mencari cara untuk menulis beberapa metode saya dalam bahasa yang lebih berorientasi objek. Saya tidak bisa fokus lama pada bahasa logis selama tahun-tahun kuliah saya, dan saya pikir fokus yang lebih kuat di sana mungkin bisa membantu saya.
sumber
Bahasa # 1 yang harus diketahui oleh setiap jurusan CS adalah yang memaksimalkan potensi mereka untuk mendapatkan pekerjaan yang hebat. Itu akan berubah seiring waktu, itu akan berubah berdasarkan pada definisi individu tentang pekerjaan yang hebat , dan itu akan bervariasi berdasarkan wilayah geografis.
Untuk saat ini, saya akan mengatakan bahwa bahasa Inggris adalah bahasa # 1 yang harus diketahui oleh semua jurusan CS (ini, tentu saja, berbeda di setiap wilayah.)
sumber
Saya pikir itu berubah seiring waktu, tetapi idealnya - 3 bahasa dari 3 perspektif yang sangat berbeda. Di hari saya itu adalah prosedural, OO, dan fungsional - Pascal, C ++, dan LISP. Saya tidak begitu dijual terutama pada ketiganya. Tetapi ketika saya wawancarai saya mencari:
Sebagai perdagangan lain - saya pikir program CS perlu melatih siswa tentang bahasa-bahasa terkemuka di pasar. Pada waktu tertentu, saya pikir 2-3 bahasa memiliki keunggulan serius untuk sebagian besar pekerjaan. Saya pikir sekolah berhutang kepada siswa untuk memberikan kesempatan untuk belajar 2 dari 3 bahasa tersebut dengan pelatihan mendalam yang tersedia dalam setidaknya satu.
sumber
Untuk siswa CS, cari bahasa pemrograman yang dipetakan dekat dengan konsep CS yang sedang dibahas. Saya sarankan:
Daftarnya bisa berlanjut seperti ini, tetapi ide dasarnya cukup sederhana: Ajari siswa bahasa pemrograman yang paling cocok dengan cara Anda ingin mengajarkan konsep.
sumber
ya
untuk mendapatkan ide tentang apa yang terjadi di balik layar, bahasa pemrograman apa pun yang Anda gunakan. ini membantu memahami konsep dasar seperti kode mati, dan berbagai jenis optimisasi yang dapat dilakukan oleh kompiler (baik) untuk Anda.
sumber
Gangguan (dengan CLOS untuk OOP) dan Haskell. Pertanyaan ini tidak terbatas pada siswa. Bahasa pemrograman baru yang mewah telah meminjam (disalin, dicuri? ... tidak, tidak buruk) banyak fitur dari keduanya. Anda bisa mempersiapkan diri untuk masa depan. Pemrograman fungsional (gaya) lebih penting hari ini dan diperkenalkan dalam bahasa pemrograman imperatif seperti C # (LINQ) atau C ++ (lambda) dan banyak lagi. Sayang sekali bahwa beberapa siswa hanya belajar Java.
sumber
Saya pikir bahasanya tidak sepenting orang percaya.
Ya, Anda perlu tahu cara memprogram dll, tetapi banyak programmer hebat belajar sendiri dari pengalaman dunia nyata mereka yang membantu mereka ketika berkembang.
Siswa dapat melakukan beberapa pelajaran tentang bagaimana pemrograman di dunia nyata dan bukan hanya metode buku, ini akan membuat mereka lebih "bulat" dan dalam pilihan saya pengembang / lulusan yang lebih baik.
Saya belajar lebih banyak tentang pemrograman dan pengembangan perangkat lunak setelah saya meninggalkan universitas dan mulai bekerja!
sumber
APAKAH ITU BENAR-BENAR MASALAH?
Biasanya gatal di balik pertanyaan ini adalah "Kata kunci apa yang dapat saya masukkan pada resume saya yang akan membuat saya mendapatkan pekerjaan yang paling menguntungkan / menarik / menantang / mudah?". Meskipun pertanyaannya memiliki kelebihan karena kebanyakan resume disaring pertama kali oleh orang-orang HR yang tidak mengerti apa yang mereka cari. tetapi sangat dangkal, karena sekali Anda telah melewati gerbang Anda perlu mengirimkan barang.
Bukan bahasa apa yang Anda tahu yang menjadikan Anda seorang programmer yang baik atau buruk, tetapi bagaimana Anda dapat menggunakannya. Untuk ini pada dasarnya ada dua kategori programmer:
Orang-orang yang berkonsentrasi mempelajari bahasa pada intinya. Yang paling penting adalah bahasa dan cara menggunakannya. Pada ekstrem mereka cenderung super optimal setiap setitik kecil kode dan akan sering menggunakan fitur yang tidak jelas hanya karena mereka bisa.
Lalu ada yang ingin belajar tentang teknik dan paradigma. Bahasa apa yang mereka gunakan tidak terlalu penting asalkan dapat mengekspresikan gambaran mental mereka dengan elegan. Pada ekstrem ini akan cenderung menggunakan UML atau sistem lain seperti berharap orang lain akan melakukan pekerjaan kasar dari pengkodean itu.
Menurut pendapat saya, Anda membutuhkan keduanya. # 1 akan memberikan keterampilan jangka pendek dan ketika dipilih dengan bijak akan memudahkan Anda melalui gerbang HR tetapi # 2 akan tetap dengan Anda semua karir Anda dan akan menentukan Anda sebagai seorang programmer.
# 2 akan memberikan panduan dan mengatur alur pemikiran Anda menuju solusi yang dapat mengatasi masalah yang ada, tetapi tanpa 1 itu akan tetap menjadi ide, selamanya mengambang di limbos surga vaporware (atau neraka tergantung dari mana Anda melihatnya).
# 1 akan memberi Anda sarana untuk mengimplementasikan ide-ide ke dalam sistem kerja nyata tetapi tanpa 2 sistem Anda akan cenderung menuju monster tak berbentuk kanker.
sumber
Saya yakin Anda sendiri sebagian menjawab pertanyaan Anda.
Yang paling penting adalah memberi siswa kesempatan untuk berhubungan dengan beberapa paradigma, bahasa yang sebenarnya tidak penting.
Tentu, penting untuk terutama mengajarkan paradigma-paradigma yang memberikan sebagian besar peluang kerja (mungkin OOP saat ini). Oleh karena itu, lebih baik mengajarkan bahasa yang digunakan secara luas untuk paradigma ini, karena ini lebih berguna daripada mempelajari sesuatu yang mungkin tidak akan pernah Anda gunakan. Karena itu saya juga benci harus menulis kode semu pada ujian saya. Pseudocode baik-baik saja, asalkan tidak memiliki sintaks 'diperbaiki'. Anda hanya bisa membawa konsep.
Jadi secara konkret:
OOP: .NET atau Java
Setidaknya 1 paradigma pemrograman tambahan, untuk membuat siswa sadar akan pendekatan lain.
Fungsional: Gangguan?
sumber
Bahasa rakitan dan mikrokode. Seorang siswa CS harus memahami semua lapisan dasar abstraksi antara mesin negara boolean dan fungsional tingkat tinggi terbaru / OOP / dll. paradigma bahasa pemrograman.
Basic atau Logo atau Squeak (et.al.), jika mereka ingin dapat memahami bagaimana cara mengajar anak-anak kecil kemampuan membaca komputer.
Fortran, Cobol dan Lisp, jika mereka ingin memahami sejarah bahasa pemrograman, dan apa masalah sebenarnya yang diperbaiki oleh praktik modern.
sumber
Memilih 3 bahasa atau lebih dari paradigma yang berbeda tidaklah sulit, banyak jawaban bagus telah diberikan. Tetapi jika saya harus memilih hanya satu bahasa, saya akan menggunakan Scala, karena itu fungsional dan berorientasi objek. Anda dapat menjelaskan dan membandingkan berbagai pendekatan dalam bahasa yang sama.
sumber
Jangan lupa bahasa yang berorientasi stack / concatenative! Mereka bisa menjadi pembengkok pikiran yang nyata. Mereka menekankan membangun kompleksitas dengan menggunakan primitif kecil yang mudah dipahami. Anda dapat menggunakannya untuk menulis kode pointfree (atau diam-diam) yang terasa sangat bersih.
Bahasa klasik adalah Forth , tetapi tujuan saya saat ini adalah Factor . Juga patut dicoba adalah Joy dan Cat . Jangan lewatkan wiki bahasa concatenative . Ini lebih menyenangkan daripada tas yang penuh dengan palu!
sumber
Sesuatu yang fungsional, Haskell atau Lisp akan menjadi pilihan pertama saya, tapi mungkin Erlang. Bahasa fungsional benar-benar mengajarkan Anda bagaimana membangun abstraksi dengan cara yang sangat kuat.
sumber
Terlepas dari kurangnya arus utama, saya menemukan bahwa D, khususnya versi 2, memberikan beberapa pelajaran menarik yang tidak dapat dipelajari dengan mudah di tempat lain. Itu membuat upaya yang lebih serius daripada bahasa lain yang dapat saya pikirkan untuk mendapatkan pemrograman imperatif / prosedural, berorientasi objek dan fungsional untuk bermain baik satu sama lain, dan untuk memungkinkan pemrograman pada tingkat yang sangat rendah (pointer, manajemen memori manual, inline). bahasa rakitan) dan tingkat yang sangat tinggi (pemrograman generik dan generatif) dalam bahasa yang sama.
Ini berharga karena, daripada melihat paradigma dalam isolasi seolah-olah mereka ada di alam semesta yang berbeda, Anda bisa melihat hutan melalui pepohonan. Anda bisa melihat kekuatan dan kelemahan masing-masing paradigma pada tingkat yang halus saat Anda menggabungkannya ke dalam program Anda. Anda bisa melihat bagaimana aspek-aspek utama paradigma dapat diimplementasikan di perpustakaan dalam hal kode tingkat rendah. Modul perpustakaan standar std.algorithm mengimplementasikan primitif pemrograman fungsional yang penting, namun tetap, kode D sederhana tanpa sihir. Demikian pula, std.rangemengimplementasikan evaluasi malas, tetapi sekali lagi adalah kode D yang cukup sederhana. Anda bisa memahami biaya yang terlibat dalam primitif masing-masing paradigma, karena fitur D-dekat-ke-logam membuat apa yang sebenarnya terjadi di bawah tenda relatif transparan. Anda bahkan dapat menulis sesuatu tingkat rendah yang terlihat seperti C, dan kemudian membuat antarmuka tingkat tinggi yang cantik untuk itu, dalam bahasa yang sama, tanpa lapisan lem ajaib yang menghalangi.
sumber
Kodesemu.
Orang-orang di lapangan harus dapat menjelaskan ide-ide mereka dengan cara yang koheren, terstruktur tanpa dan kerangka kerja atau sintaksis spesifik jargon. Saya tidak harus tahu perbedaan antara tanda kurung siku dan kawat gigi Anda untuk memahami algoritma Anda. Saya seharusnya tidak perlu tahu apa
??
artinya, atau apagrep
saklar itu.Menulis dalam bahasa yang sederhana, tetapi struktur dan format itu seperti kode. Siapa pun dapat menerapkannya dalam bahasa apa pun yang mereka suka.
sunting: Jawaban ini sebagian dimotivasi oleh ketidakmampuan beberapa programmer untuk menulis kodesemu.
Manfaat pseudocode adalah bahwa pemangku kepentingan non-pemrograman dapat memahaminya. Saya tidak menyarankan Anda ingin BA dan pengguna memeriksa kode Anda, namun dapat membantu ketika non-programmer memiliki pemahaman tentang algoritma yang diperlukan. Psuedocode menghilangkan kebutuhan untuk menjelaskan
for (int i = 0; i < j; i++)
dan apa yang pada dasarnya adalah jargon boilerplate.sumber
C.
Tentu saja, seseorang harus tahu lebih dari satu bahasa, dan tidak hanya bahasa prosedural lama. Tetapi jika saya harus pergi ke pulau terpencil dengan hanya satu kompiler, saya akan pergi dengan gcc tua yang baik. Anda dapat memahami pemrograman tingkat tinggi jika Anda tahu tentang pemrograman tingkat rendah. Saya pikir itu tidak benar sebaliknya.
sumber
Beberapa bahasa pemrograman yang diterapkan untuk memperoleh keterampilan pemecahan masalah umum, dan konsep pemrograman adalah Logo dan Karel, mereka harus diajarkan sebelum C / C ++ / Java / Lisp / PERL / Majelis / apa pun paradigma pemrograman.
Siswa mendapatkan pengantar pemrograman yang sangat praktis.
sumber
Apa pun dengan benda. Pastikan mereka mempelajarinya dengan baik.
Saya akan menyewa programmer java yang hebat untuk c # kapan saja, tapi saya akan memiliki banyak keraguan mempekerjakan seseorang yang tidak pernah menulis kode nyata
sumber