it-swarm-id.com

Bahasa pemrograman apa yang harus diajarkan setiap siswa ilmu komputer?

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 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.

13
Anto

Saya akan memberikan daftar:

  • Majelis (dialek yang relatif sederhana): Sangat penting untuk memahami setidaknya sedikit fundamental
  • C: Bahasa prosedural, digunakan di banyak tempat. Tidak membebani siswa baru dengan konsep baru seperti OOD sekaligus.
  • Java/C #/Eiffel/C++: Sesuatu yang Berorientasi Objek baik, salah satu dari ini akan mencapai tujuan mengajar siswa OOD dan begitu mereka memahami salah satu bahasa ini, mereka harus dapat belajar yang lain .. Ada banyak bahasa yang bagus, saya mendaftarkan Eiffel karena ia juga memiliki desain-kontrak.
  • LISP dan Prolog: Mengajar siswa cara berpikir yang sama sekali baru, yang penting, bahkan jika mereka tidak pernah menggunakan salah satu dari ini "di dunia nyata".
  • SQL dan XML: Memperkenalkan cara baru untuk berpikir tentang data dan cara mengambilnya dan mengelolanya.

Siswa harus terkena semua ini paradigma setidaknya. Bukan hanya satu atau dua.

Saya kira banyak orang akan menyarankan Python untuk membahas gaya prosedural, OOP gaya, dan mungkin yang lain, tetapi saya tidak memiliki pengalaman pribadi yang cukup dengan Python untuk dapat dengan yakin merekomendasikannya.

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.

45
Michael Brown

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 - Silakan 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.

Logical - 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.

33
Joel Etherton

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 definisi individu dari pekerjaan hebat , dan itu akan bervariasi berdasarkan wilayah geografis.

Untuk saat ini, saya akan mengatakan bahwa Bahasa Inggris adalah bahasa # 1 yang harus diketahui oleh setiap jurusan CS (ini, tentu saja , bervariasi menurut wilayah.)

6
oosterwal

Untuk siswa CS, cari bahasa pemrograman yang dipetakan dekat dengan konsep CS yang sedang dibahas. Saya sarankan:

  • Skema, untuk lebih memahami kalkulus lambda
  • Erlang, untuk memahami model aktor
  • Prolog, untuk logika predikat dan sistem pembuktian
  • Haskell, untuk teori jenis/kategori, dan karena evaluasi yang malas diungkapkan sepenuhnya dalam bahasa
  • setidaknya satu bahasa Assembly - jika Anda ingin menghitungnya di bawah spanduk ini, saya juga akan memasukkan bahasa kode byte, seperti kode byte Java atau CLR byte, dan LLVM IR
  • mungkin bahasa definisi perangkat keras, seperti Verilog, atau VHDL
  • Bison untuk kelas konstruksi-kompiler
  • sesuatu dengan sistem tipe dinamis (Ruby datang ke pikiran) ...

Daftarnya bisa berlanjut seperti ini, tetapi ide dasarnya cukup sederhana: Ajari siswa bahasa pemrograman yang paling cocok dengan cara Anda ingin mengajarkan konsep.

4
Aidan Cully

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:

  • Beberapa tingkat pengalaman dengan bahasa di mana Anda harus memperhatikan manajemen memori (C/C++ dan banyak lainnya)
  • Beberapa tingkat pengalaman dengan bahasa berorientasi objek dengan harapan pada penggunaan API dan berbagai abstraksi yang tersedia (C++/Java)
  • Bahasa "peregangan" - sesuatu yang aneh, sulit, dan menantang. Saya tidak akan mempekerjakan karena seseorang tahu LISP, Majelis, atau bahasa yang menantang lainnya, tetapi saya ingin melihat bahwa insinyur menghadapi semacam tantangan yang melibatkan pemecahan masalah serius dan banyak "apa-apaan ini?" momen.

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.

4
bethlakshmi

yacc

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.

3
mariotomo

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!

2
user18041

LISP (dengan CLOS for 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 belajar Java saja).

2
knivil

APAKAH 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:

  1. 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.

  2. 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 tetap merupakan 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.

2
Newtopian

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.

1
hotpaw2

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.

1

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 pointfree (atau diam-diam) kode yang terasa sangat bersih.

Bahasa klasiknya Keempat , tetapi tujuan saya hari ini adalah Faktor . Juga patut dicoba adalah Joy dan Cat . Jangan lewatkan wiki bahasa concatenative . Ini lebih menyenangkan daripada tas yang penuh dengan palu!

1
Scant Roger

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 mengajarkan paradigma tersebut yang memberikan sebagian besar peluang kerja (mungkin OOP pada saat ini). Oleh karena itu, lebih baik untuk mengajar bahasa yang digunakan secara luas untuk paradigma ini, karena ini adalah lebih berguna daripada mempelajari sesuatu yang mungkin tidak akan pernah Anda gunakan. Oleh karena itu saya juga benci harus menulis kode pseudo pada ujian saya. Pseudocode baik-baik saja, asalkan tidak memiliki sintaks 'tetap'. Anda seharusnya hanya dapat membawa konsep seberang.

Jadi secara konkret:

OOP: .NET atau Java

Setidaknya 1 paradigma pemrograman tambahan, untuk membuat siswa sadar akan pendekatan lain.

Fungsional: Gangguan?

1
Steven Jeuris

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 bagus satu sama lain, dan untuk memungkinkan pemrograman pada level yang sangat rendah (pointer, manajemen memori manual, inline). Bahasa assembly) dan level 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 memadukannya ke dalam program Anda. Anda bisa melihat bagaimana aspek utama paradigma dapat diimplementasikan di perpustakaan dalam hal kode tingkat rendah. Modul library standar std.algorithm mengimplementasikan primitif pemrograman fungsional yang penting, namun lurus, kode D sederhana tanpa sihir. Demikian pula, std.range mengimplementasikan 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.

0
dsimcha

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 apa yang grep aktifkan.

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.

"Cukup tulis algoritme dalam pseudocode"

"Apa itu?"

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.

0
Kirk Broadhurst

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.

0
umlcat

C.

  • Pertama-tama, ini masih digunakan (banyak digunakan!), Dan tidak hanya untuk kernel. Saya saat ini mempertahankan aplikasi bisnis yang dikodekan dalam C. Jadi, bahkan dengan C murni dan sederhana, Anda masih bisa mendapatkan pekerjaan. Di perusahaan besar, di industri, hampir di mana-mana (tetapi di web dev).
  • Jika Anda akan bekerja di lingkungan Unix/Linux, tidak tahu setidaknya sedikit C sama dengan berbelanja dan tidak bisa membaca harga pada tag.
  • Pointer! Setiap orang harus memahami petunjuk (lih. Joel Spolsky ). Plus, begitu Anda meraih konsep malloc, Anda tahu persis hal-hal seperti apa yang terjadi ketika Anda mengetik "baru" dengan sembrono dalam bahasa OOP.
  • Kebanyakan sintaksis "bahasa populer" berasal dari C.
  • Ya, tidak selalu jelas. Ya, sulit dipelajari. Ya, string agak menjadi mimpi buruk bagi pemula. Tetapi pemrograman tidak selalu jelas dan sulit untuk dipelajari, dan Anda akan benar-benar mengerti apa yang hebat tentang OOP ketika, setelah mempelajari C, Anda mencoba C++ dan menemukan std :: string.

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.

0
Raveline

Sesuatu yang fungsional, Haskell atau LISP akan menjadi pilihan pertama saya, tetapi mungkin Erlang. Bahasa fungsional benar-benar mengajarkan Anda bagaimana membangun abstraksi dengan cara yang sangat kuat.

0
Zachary K