Apakah "Ilmu Komputer! = Rekayasa Perangkat Lunak" merupakan alasan untuk mengajar pemrograman dengan buruk?

23

Kita semua pernah mendengarnya; setiap kali ada diskusi tentang lulusan CS yang memiliki keterampilan pengembangan yang buruk seseorang akhirnya berkata,

Ilmu komputer bukanlah rekayasa perangkat lunak.

Masalah yang saya lihat adalah bahwa pemrograman dan pengembangan perangkat lunak yang diajarkan dalam kursus CS. Mereka hanya diajarkan secara buruk. Jika itu diajarkan, mengapa tidak mengajarkannya dengan benar pertama kali? *

Jadi saya ingin melihat apa pendapat tentang 2 pertanyaan:

  1. Apakah argumen CS! = SE merupakan alasan atau alasan untuk tidak mengajarkan keterampilan pemrograman dengan benar.

  2. Terlepas dari jawaban Anda untuk pertanyaan 1; jika Anda berada dalam posisi yang mahakuasa untuk membuat keputusan seperti itu: apakah Anda akan memaksakan penekanan pada pengajaran pemrograman yang tepat dalam kursus CS?

*. Saya memiliki kecurigaan, berdasarkan bukti anekdotal yang saya peroleh selama pendidikan, bahwa sebagian besar akademisi di lapangan tidak harus menulis kode untuk dipelihara dan tidak memelihara kode, dan sebagai hasilnya tidak memiliki pengetahuan / keterampilan untuk mengajarkannya secara efektif.

Steve Evers
sumber
7
Saya akan mengklarifikasi komentar saya; dalam pikiran saya, mereka berbeda (CS! = SE). Jadi jika saya mengganti CS dan SE dengan 2 bidang lainnya A, B, di mana A! = B, Anda bisa mendapatkan sesuatu seperti Pelajaran Bowling! = Sejarah Jepang. Maka argumen Anda menjadi: apakah BL! = JH alasan untuk tidak mengajar JH dengan benar? Ini sekarang pertanyaan yang tidak masuk akal, dan harus diberhentikan. Jika Anda melihat lulusan CS yang tidak tahu mengapa Anda akan menggunakan hashtable pada daftar tertaut, ia diajar dengan buruk. Jika Anda melihat lulusan CS yang melakukan kode refactoring pekerjaan yang buruk, itu bisa dimaafkan.
Jeremiah Nunn
2
@Jeremiag Nunn: Untuk menggunakan analogi Anda: Sejarah Jepang tidak diajarkan bersamaan dengan bowling. Saya membuat argumen bahwa setiap program CS, pada kenyataannya mengajarkan pemrograman dan bahwa mereka menggunakan argumen "CS! = SE" untuk memaafkan diri mereka sendiri dari mengajarkannya dengan baik.
Steven Evers
2
Pikiran lain: apakah kurangnya keterampilan SE dalam lulusan CS tertentu kesalahan sekolah atau siswa? Di setiap kelas Anda mungkin memiliki keterampilan yang cukup luas menyebar dari kompeten ke yang mengerikan.
Adam Lear
2
@SnOrfus Rekayasa perangkat lunak adalah keahlian membangun perangkat lunak. Ilmu komputer adalah teori di balik perangkat lunak. Mengetahui keduanya itu ideal, tetapi mereka masih terpisah. Analogi yang lebih baik (IMO) daripada @ Jeremiah akan menjadi salah satu instrumen bangunan vs memainkannya.
dash-tom-bang
5
Catatan kaki tentang para akademisi yang tidak harus menulis kode yang bisa dipelihara hampir merupakan intinya. Bukan itu yang CS pedulikan.
dash-tom-bang

Jawaban:

27

Saya tidak berpikir itu adalah copout, tetapi lebih merupakan pernyataan bahwa ilmu komputer bukan rekayasa perangkat lunak, itu bukan pemrograman - itu, well, ilmu komputasi formal. Intinya, ini matematika (pada kenyataannya, banyak program CS dimulai sebagai program matematika terapan).

Saya pikir masalahnya lebih pada industri daripada akademisi. Industri melihat gelar CS terdaftar pada resume dan berpikir, "Bagus, orang ini baik dengan komputer," dan mempekerjakannya untuk melakukan apa pun yang terkait dengan komputer: TI, pemrograman, pengembangan perangkat lunak, apa pun. Hal-hal itu tidak selalu terletak pada bidang keahlian lulusan CS. Pada gilirannya, banyak orang yang suka membuat komputer atau bermain videogame memasuki program CS yang berharap melakukan hal-hal semacam itu, dan mendapatkan kejutan kasar; yaitu, banyak siswa yang masuk ke CS tidak benar-benar berada di sana, dan akan lebih baik dalam program gelar yang lebih bertarget.

Kedua, ada waktu yang sangat terbatas untuk mengajar CS - subjek yang sangat luas - dalam kurikulum sarjana yang khas. Kurikulum tingkat sarjana saya memiliki 8 kursus CS (untuk BA) atau 12 kursus CS (untuk gelar BS), ditambah semua kursus matematika yang diperlukan. Itu tidak banyak waktu untuk mengajar CS dan matematika dan pemrograman dan rekayasa perangkat lunak, jadi pada titik tertentu Anda harus memutuskan apa yang penting, dan apa yang dapat diambil sendiri oleh siswa.

Poin terakhir itu penting: Saya pikir seorang siswa yang baik - dalam bidang apa pun - akan mengeksplorasi ide-ide mereka sendiri. Saya memiliki gelar CS, tetapi saya pikir saya keluar dari perguruan tinggi sebagai pengembang yang layak, karena saya belajar dan menulis perangkat lunak sendiri . Perguruan tinggi tidak semua tentang kelas; ini juga tentang memberi siswa waktu untuk mengembangkan keterampilan mereka secara semi-otonom, sambil tetap memberikan bimbingan yang berharga.

Saya berpendapat bahwa teori pengajaran - CS, matematika, dll. - sama pentingnya, jika tidak lebih penting, daripada mengajarkan keterampilan spesifik terkait pekerjaan. Jika Anda mengajar siswa mengapa di balik metode dan teknik, dan bukan hanya apa , Anda akan berakhir dengan seseorang yang jauh lebih mudah beradaptasi ketika menerapkan pengetahuannya. Sebagai contoh, saya pergi ke "sekolah Jawa" yang banyak difitnah dan dengan demikian diajarkan di Jawa, tetapi saya juga memiliki kursus dalam teori bahasa pemrograman, yang menjelaskan mengapa di balik banyak bahasa; sebagai hasilnya, saya telah belajar menulis perangkat lunak yang jauh lebih baik daripada jika saya tidak memiliki latar belakang itu. Tentu, saya tidak menulis perangkat lunak di Haskell dalam pekerjaan saya, tetapi mengetahui banyak teori bahasa pemrograman telah memungkinkan saya untuk mendapatkan wawasan bahwatelah berlaku untuk pekerjaan saya sebagai programmer.

Saya juga berpikir industri mengharapkan terlalu banyak dari mahasiswa. Industri ingin memotong biayanya sendiri, jadi alih-alih melatih rekrutan baru untuk pekerjaan mereka, mereka berharap perguruan tinggi menjadi sekolah perdagangan / teknis; Akibatnya, mereka ingin perguruan tinggi melakukan pelatihan untuk mereka. Lulusan perguruan tinggi tidak dapat diharapkan untuk mengetahui segala sesuatu yang baru keluar dari perguruan tinggi. Menjadi pengembang yang baik adalah tentang pengalaman seperti halnya tentang pengetahuan (terutama dalam bidang yang relatif muda seperti pengembangan perangkat lunak).

mipadi
sumber
Ini persis pemikiran saya, tetapi menjelaskan jauh lebih baik daripada jawaban saya.
Jeremiah Nunn
+1: Begitu banyak hal bagus di sini, saya benci memilih pada satu hal, tetapi mengingat bahwa CS berasal dari matematika terapan, bukankah itu menyiratkan pentingnya penerapannya - dalam hal ini, pemrograman?
Steven Evers
2
@SnOrfus: Sejauh pemrograman matematika diterapkan, ya. Tapi sama seperti ilmu komputer! = Rekayasa perangkat lunak, pemrograman! = Rekayasa perangkat lunak, baik.
mipadi
1
@ David Thornley: Pertama, saya dan semua orang yang pernah saya kenal yang mengambil fisika menggunakan oscilliscope saat mempelajari gelombang. Meski begitu, analoginya tidak berlaku. Siswa sudah diajarkan pemrograman sebagai bagian dari gelar CS. Anda, saya, semua dari kita yang menghadiri unveristy adalah. Itu bahkan bukan bagian sekali saja dari satu saja. Ini merupakan bagian integral dari setidaknya 1-2 kelas per semester.
Steven Evers
2
+1 untuk menjelaskan sekolah itu (perguruan tinggi, universitas, apa pun) harus mengajari Anda cara memancing dan tidak hanya memberi Anda ikan
Emiliano
25

Bagian dari masalah di sini adalah kenyataan bahwa 4 tahun tidak cukup waktu untuk menjadi insinyur perangkat lunak yang dipoles. Mengingat bahwa kami ingin para sarjana memiliki keterpaparan terhadap lebih banyak hal daripada hanya mata pelajaran matematika dan CS dan fakta bahwa ada banyak mekanika murni untuk dipelajari (algoritma, struktur data, sintaksis bahasa), kami tidak dapat mengharapkan mata kuliah CS hijau menjadi seorang insinyur perangkat lunak.

Saya setuju bahwa CS! = SE dan saya tidak yakin Anda bisa pergi ke sekolah dan menjadi SE (bahkan dengan gelar Master)

bigtang
sumber
+! 1: Saya mengerti maksud Anda, tetapi bukan hanya 'dipoles'. Banyak yang kurang memiliki keterampilan yang sangat mendasar.
Steven Evers
Saya kira itu tergantung pada apa yang Anda anggap keterampilan yang sangat mendasar. Sebagai contoh, SQL adalah keterampilan dasar dalam pikiran saya, tetapi saya telah menemukan lulusan CS saya sebenarnya cukup lemah di dalamnya dan saya pikir itu yang diharapkan. Jika Anda mengatakan mereka lemah dalam sintaksis bahasa atau modularitas dasar atau konsep OOP maka itu masalah besar dan saya akan mulai mencari lulusan dari sekolah yang berbeda
bigtang
Saya telah pemrograman secara profesional selama 14 tahun. Saya telah melihat SQL dan bahkan dapat membuat pertanyaan dasar, tetapi bahkan keterampilan dasar ini baru tiba pada tahun lalu. SQL bukan CS. SQL adalah implementasi dari teori basis data, yaitu CS.
dash-tom-bang
@ dash-tom-bang: Apakah Anda menganggap kontrol pernyataan aliran dalam bahasa imperatif sebagai dasar? Saya dapat mengonfirmasi bahwa ada gelar sarjana CS total yang tidak tahu mayoritas dari mereka.
Steven Evers
Saya tidak akan menganggap implementasi kontrol aliran dalam bahasa tertentu sebagai salah satu "dasar-dasar Ilmu Komputer." Namun jika seseorang tidak memahami kontrol aliran sebagai konsep maka mereka belum belajar CS.
dash-tom-bang
10

CS sebenarnya bukan SE. Dan orang-orang tampaknya mengacaukan keduanya sepanjang waktu, bahkan ketika mengakuinya. Ilmu komputer harus benar-benar dinamai sesuatu seperti Computology, atau ilmu komputasi. Faktanya, ilmu komputer sangat sedikit hubungannya dengan komputer. Itu teori grafik, analisis algoritma, struktur data, dll.

Orang ingin menganggap lulusan CS yang baru sebenarnya adalah lulusan ITT; mereka menginginkan seseorang yang telah terlatih dalam suatu panggilan. Ilmu komputer adalah ilmu, pemrograman adalah seni. Ini tidak sama.

Ini seperti bertanya mengapa lulusan Fisika baru bukanlah insinyur mobil yang baik. Itu konyol.

Jeremiah Nunn
sumber
2
Pemrograman adalah kerajinan, bukan seni.
dash-tom-bang
6
Pemrograman adalah kerajinan, teknik dan seni.
Maciej Piechotka
2
Saya tidak akan mengganti nama itu. Apa itu Ilmu Komputer, tetapi ilmu komputer? dengan kata lain, studi tentang mesin hitung, yang menyiratkan studi tentang menghitung.
Michael K
1
Harus diganti namanya karena orang membuat kebingungan seperti Anda. Anda kenal Edsger W. Dijastra? dia pernah berkata, "ilmu komputer tidak lebih tentang komputer daripada astronomi adalah tentang teleskop." :)
boos
1
Seni menciptakan keindahan; kerajinan menciptakan utilitas. Seni diciptakan karena keindahannya; kerajinan dibuat untuk kegunaannya. Seni mungkin bermanfaat; kerajinan mungkin indah. Rekayasa Perangkat Lunak menciptakan utilitas; Oleh karena itu, Rekayasa Perangkat Lunak adalah kerajinan.
systemovich
8
  1. Setidaknya di Amerika Serikat, pendidikan secara keseluruhan telah menjadi tentang keuntungan. Sekolah mengurangi kurikulum di seluruh papan untuk meningkatkan pendaftaran. Ada lebih banyak orang di perguruan tinggi yang tidak termasuk di sana daripada sebelumnya. Mempelajari teknik-teknik yang tepat bukanlah sesuatu yang dapat Anda ajarkan dengan mudah sehingga mereka tidak melakukannya.
  2. Secara pribadi saya akan lebih menekankan pada SE daripada biasanya, tetapi saya percaya CS sebagai program kurang cocok untuk orang yang ingin masuk ke industri. Saya pikir lebih banyak institusi harus menawarkan program SE praktis.
ChaosPandion
sumber
+1 untuk # 1. Saya perhatikan ini ketika saya pergi ke sekolah. Itu adalah sekolah nirlaba dan saya merasa bahwa banyak siswa yang tidak memenuhi syarat untuk berada di sana. Selain itu, sekolah hanya mendapat uang per kursus dan gagal siswa berarti mereka tidak mendapatkan uang lagi dari mereka, sehingga cukup sering guru keluar dari jalan mereka untuk lulus siswa. Kami memiliki setidaknya satu orang lulus dengan gelar mereka yang saya pikir tidak bisa menulis program Hello World dalam pilihan bahasa mereka!
Rachel
karena Anda menyentuh sistem Pendidikan AS dan peran laba, berikut ini adalah Paduan Suara Milton Friedman yang wajib: youtube.com/watch?v=W3Seg0JE1PM
Ayub
7

Apakah argumen CS! = SE merupakan alasan atau alasan untuk tidak mengajarkan keterampilan pemrograman dengan benar.

Tidak. CS bukan SE. Itu fakta, bukan alasan.

Terlepas dari jawaban Anda untuk pertanyaan 1; jika Anda berada dalam posisi yang mahakuasa untuk membuat keputusan seperti itu: apakah Anda akan memaksakan penekanan pada pengajaran pemrograman yang tepat dalam kursus CS?

Tidak. Ini seperti memaksa para astronom untuk mempelajari detail pembuatan teleskop. Atau memaksa programmer untuk mempelajari detail membangun komputer. Hal-hal terkait, tetapi seorang pria tidak perlu tahu segalanya.

Joonas Pulakka
sumber
6

Ya, ini terdengar seperti tantangan bagi saya, dan tanda ketidakdewasaan CS sebagai disiplin akademis.

Program BS terakreditasi American Chemical Society mengharuskan Anda telah lulus kursus khusus untuk menunjukkan keahlian khusus dalam teori (kelas kuliah) dan praktik (kelas lab). Sejauh ini, CS tidak memiliki yang seperti itu sejauh yang saya tahu.

Salah satu profesor lulusan saya adalah ahli teori menara sangat gading yang kantornya tidak pernah dinodai dengan bahan kimia fisik selain akuarium dengan Magic Rocks, tetapi ketika saya menjadi TA untuk mahasiswa baru kimia, dia juga terbukti ahli kimia bangku yang cukup kompeten. .

Ketika saya bekerja sebagai ahli kimia cat industri, mereka akan tertawa terbahak-bahak pada gagasan bahwa saya akan memiliki sarjana dan tidak kompeten di lab. Tentu saja detail dari apa yang saya lakukan di lab berbeda dari apa yang saya miliki di kelas lab di sekolah, tetapi prinsipnya sama - kami hanya menggunakan mixer cat dan kaleng, daripada gelas kimia dan pengaduk magnet .

Jika seseorang menerapkan pendekatan yang sama pada CS, perincian tentang apa yang mungkin diajarkan sebagai keterampilan pengembangan perangkat lunak praktis untuk kurikulum CS / SE mungkin berbeda dari satu sekolah ke sekolah lainnya, dan seiring waktu. Tapi itu kedengarannya gila bagi saya bahwa dapat diterima bahwa seseorang dapat memperoleh gelar di bidangnya dan tidak kompeten dalam menulis, men-debug, dan memelihara beberapa jenis kode. (Tentu saja, itulah yang sebenarnya terjadi dalam banyak program CS, tetapi ini masih gila.)

Bob Murphy
sumber
Itu tidak gila, ini epidemi. Sekitar 90% dari kode yang saya lihat ditulis oleh rekan-rekan saya dapat dipertahankan seperti menara miring Pisa.
Marcel Valdez Orozco
5

Saya setuju bahwa 4 tahun adalah waktu yang cukup untuk memberi mereka fondasi yang baik untuk bertumbuh. Namun, saya pikir satu hal yang sangat membantu adalah ketika orang-orang dari industri terlibat dalam pengembangan kurikulum dan bahkan mengajar di kelas. Tahun lalu saya adalah seorang Rekan Industri di kelas Pengembangan Perangkat Lunak di universitas setempat. Itu adalah pengalaman yang sangat membuka mata bagi saya. Profesor dan saya bekerja bersama pada isi kursus dan kami memberikan lebih banyak informasi tentang proses pengembangan, praktik terbaik industri, dan situasi "dunia nyata" yang telah mereka lakukan sebelumnya. Apa yang kami temukan adalah bahwa, karena sebagian besar instruktur tidak mengembangkan kode yang digunakan dan dipelihara secara luas, membawa seseorang dari industri membantu mengidentifikasi dan mengajarkan keterampilan yang diperlukan untuk melakukan itu.

Beth Whitezel
sumber
Saya ingin mencoba hal seperti itu.
ChaosPandion
Anda harus menghubungi universitas setempat dan melihat apakah mereka memiliki sesuatu seperti itu. Di mana kau berada?
Beth Whitezel
3
  1. Ya itu adalah copout 100%, mereka harus mengajarkan keterampilan jangka panjang yang akan berguna sepanjang karier kita. Apakah niat Anda adalah masuk ke dunia akademis atau industri, Anda harus dapat memprogram dengan cara yang dapat dipertahankan, bahkan jika itu hanya Anda sendiri.

  2. Ya, meskipun itu hanya akan ditekankan dalam kursus yang tepat. Secara pribadi, jika saya harus berbicara dengan Anda untuk lebih memahami bagaimana Anda mencoba menerapkan suatu algoritma saya akan menandai nilai Anda.

Bahkan jika Anda melakukan riset CS murni, Anda mungkin harus membuat kode untuk menunjukkan ide-ide Anda. Keterampilan pemrograman yang tepat akan berguna bagi Anda di beberapa titik jadi mengapa tidak memulai di perguruan tinggi.

Hanya John
sumber
Keterampilan jangka panjang adalah CS. "Java" bukan keterampilan jangka panjang, juga. NET, SQL, Pascal, atau COBOL. Kecuali dengan "jangka panjang" yang Anda maksudkan "senang bahwa Anda memiliki pekerjaan ketika mereka membutuhkan seseorang untuk mempertahankan sistem warisan".
dash-tom-bang
Sementara saya setuju bahwa keterampilan dasar (CS) diperlukan, maksud saya menulis kode yang dapat dikelola dan mudah dibaca terlepas dari bahasa pemrograman yang digunakan. Jadi, keterampilan makna jangka panjang yang melampaui teknologi yang digunakan.
JustJohn
1
IMHO CS diperlukan untuk dapat mendekati masalah yang lebih kompleks, banyak orang di sekitar sini, tidak perlu gelar CS untuk menulis kode, tetapi jika Anda perlu menangani matriks 10x10 Juta data, dan memanipulasinya, saya tidak bisa membayangkan caranya SE dapat menanganinya tanpa gelar CS.
ejekan
3

Saya pikir masalah kita adalah kita jauh lebih seperti dokter daripada yang mau kita akui ... Kami memiliki gagasan bahwa gelar empat tahun harus mempersiapkan siswa untuk menulis perangkat lunak. Itu bahkan tidak dekat.

Profesi kami sebagian besar masih dalam masa pertumbuhan dibandingkan dengan disiplin ilmu lain. Mungkin pertanyaannya adalah: bagaimana kita dapat meningkatkan CS sehingga siswa yang lulus dengan gelar itu lebih cocok untuk menjadi anggota yang produktif dari tim pengembangan perangkat lunak dunia nyata dalam rentang waktu yang jauh lebih pendek?

Mungkin kita harus lebih seperti obat. Empat tahun pekerjaan dasar (gelar CS) dan kemudian residensi - praktik kerajinan di bawah pengawasan insinyur perangkat lunak yang lebih berpengalaman. Mungkin itu yang sudah kita miliki, tapi kurang formal ... Maksudku, seperti penduduk, kita belajar keterampilan kita yang paling berharga di tempat kerja dalam pekerjaan pertama kita.

Mungkin sebagai disiplin kita hanya perlu memformalkan ini dengan lebih baik.

Chris Holmes
sumber
Atau program Master Craftsman / Apprentice
Austin Salonen
1
Program MD bukanlah program sains. Anda ingin belajar ilmu, Anda mengambil biologi. Jika Anda memiliki masalah medis, Anda tidak membawanya ke ahli biologi.
David Thornley
Ini adalah ide yang sangat bagus: memformalkan fakta bahwa Rekayasa Perangkat Lunak juga merupakan masalah pengalaman. Hal yang sama berlaku untuk pengacara dan dokter
Emiliano
Tapi apa yang kita bicarakan tentang David? Berapa banyak dari kita lulus dengan gelar CS dan kemudian benar-benar menghabiskan karir kita melakukan "Ilmu Komputer"? Apa yang sebagian besar dari kita benar-benar lakukan adalah pergi ke dunia dan mempraktikkan keahlian Pengembangan Perangkat Lunak. Itu sama dengan MD: mereka "berlatih" obat-obatan. Kami berlatih membangun aplikasi.
Chris Holmes
@ Chris Holmes: Saya benar-benar kesal dengan gagasan bahwa gelar CSci seharusnya mengubah Anda menjadi seorang programmer yang siap untuk dipekerjakan menjadi pekerjaan menggunakan bahasa panas terbaru. Ada banyak ruang untuk gelar atau sertifikat semacam itu, mungkin jauh lebih banyak daripada CSci yang sebenarnya. Saya pikir pengembangan perangkat lunak analog dengan praktik kedokteran di sini, tetapi Anda tidak mendapatkan MD dari departemen biologi atau psikologi, Anda mendapatkannya dari sekolah kedokteran. Itu adalah gelar yang sangat dihormati, tetapi itu bukan gelar Ph.D.
David Thornley
3

Saya memiliki gelar CS, dan selama setahun penuh program saya tidak ada pemrograman, hanya teori. Kami diberitahu bahwa kami tidak mendapatkan gelar dalam pemrograman tetapi dalam Ilmu Komputer. Jika Anda ingin menjadi programmer, masuklah ke community college.

Kami belajar tentang algoritma, pola desain, dan banyak teori tentang menyelesaikan masalah tanpa bahasa spacific. Bahasa pemrograman datang dan pergi, tetapi teori yang digarisbawahi tetap sama.

Jadi, untuk pertanyaan pertama Anda, tidak, saya tidak merasa CS! = SE adalah solusi. Itu fakta.

Untuk pertanyaan kedua Anda, tidak, saya pikir saya tidak akan melakukannya. Bagaimana Anda bisa mengajar pemrograman? Di luar loop, seandainya, metode, kelas dan OOP, apa yang akan menjadi 'pemrograman yang tepat' dan bagaimana Anda membuatnya relevan dengan bahasa pemrograman di luar sana? Anda perlu kode pengalaman menulis, sesuatu yang gelar 4 tahun tidak dapat mempersiapkan Anda untuk.

Satu hal yang saya akan lakukan adalah menyediakan kelas Pengembangan di Dunia Nyata. Kontrol sumber, pelacakan tiket / bug, pelacakan kode, dan semua jazz itu akan menjadi awal yang baik untuk mempersiapkan semua yang akan segera menjadi lulusan untuk apa yang akan mereka hadapi dalam pekerjaan baru mereka.

Saya pikir itu pada kita ketika kita menyewa lulusan baru untuk memahami bahwa mereka mungkin tidak akan menulis kode pemenang penghargaan. Mereka membutuhkan bimbingan dan arahan.

Tyanna
sumber
++ - poin bagus. Akan menyenangkan jika kurikulum CS memang menawarkan satu atau dua kelas tentang hal-hal "dunia nyata" ini, saya setuju. Kami sudah membicarakannya di universitas saya (tahun 1993) tetapi tidak pernah pergi ke mana pun.
dash-tom-bang
Bagaimana Anda diharapkan untuk menunjukkan kemahiran Anda di kelas yang merupakan tahun tanpa teori pemrograman saja? Ujian yang ditulis murni?
Carson63000
@ Carson630000 - tugas tertulis, beberapa kali menulis diagram keadaan, kadang-kadang menulis esai yang menunjukkan bagaimana kita akan mendekati dan memecahkan masalah atau bagaimana kita akan menerapkan berbagai konsep CS. Itu memaksa kami untuk memahami teori dan bukan bahasa pemrograman tertentu.
Tyanna
2

Penting bagi universitas untuk mencapai keseimbangan yang baik antara pengetahuan teoretis dan keterampilan praktis. Saat menghadiri berbagai kursus saya belajar keduanya. Selama tahun-tahun pertama ada banyak matematika dan algoritma / struktur data. Yang terjadi selanjutnya adalah pilihan: Anda bisa terus belajar ilmu komputer (semacam jalur artistik, di mana Anda bisa misalnya menghadiri kursus dengan algoritma pencocokan string yang canggih) atau fokus pada rekayasa perangkat lunak. Anda masih harus mendapatkan latar belakang pemrograman yang solid selama ini.

Saya memilih rekayasa perangkat lunak, karena saya tidak pernah tertarik dengan masalah abstrak. Tetapi bahkan mereka yang menyukai ilmu komputer murni harus:

  • memprogram sistem file kecil di ruang pengguna, membuat linuxmodul kernel dan memodifikasi kernel itu sendiri, menulis game berorientasi objek murni SmallTalk,
  • menulis protokol komunikasi sendiri dan kemudian mengimplementasikan satu, yang dipilih oleh guru (itu benar-benar keren, ketika program dua siswa dapat dengan mudah berkomunikasi, meskipun mereka tidak berkolaborasi sebelumnya),
  • buat proyek yang lebih besar di Javadalam tim empat,
  • membangun beberapa proyek pemrograman fungsional,
  • menulis beberapa program yang solid di C untuk pemrograman paralel (ide-idenya abstrak, tetapi ulasannya cukup keras, seperti kehilangan poin karena tidak memberikan output yang tepat, ketika program gagal, seperti unix yang baik programharus dilakukan),
  • buat portal web menggunakan beberapa kerangka kerja web (kami memilih django , yang membuat saya menyukai kerangka ini),
  • membuat program yang cukup besar menggunakan LAMP(saya masih memiliki mimpi buruk php, tetapi digunakan postgresqlsebagai gantinyaMySQL dan saya sangat senang mengetahui hal ini DBMSsekarang),
  • dan jika seseorang memilih, dia bisa menulis sebuah program untuk tesis masternya - saya menulis pythonprogram desktop 10k menggunakan PyQt.

Mungkin ada proyek lain, tetapi saya hanya melupakannya sekarang.

Maksud saya adalah: itu semua tergantung pada sekolah. Saya sangat tidak menyukai pendekatan rekayasa perangkat lunak murni, di mana Javabahasa utamanya. Saya harus membantu seorang teman, yang menghadiri sekolah seperti itu dan harus menulis beberapa program untuk pemrograman paralel. Aku harus menulis untuknya pada dasarnya, karena dia meskipun, bahwa sizeof(some_string)dalam Cmemberikan panjang string.

Saya akan jujur: Saya benci matematika, saya kesakitan, ketika saya harus mempersiapkan tugas-tugas abstrak, yang akan disajikan pada algoritma / ujian struktur data. Tetapi itu memberi saya kelebihan: saya bisa berpikir dengan cara yang sangat abstrak. Ini seperti ketika Anda belajar seni bela diri dan tidak menjaga pertahanan Anda (setidaknya pada mereka, di mana Anda seharusnya). Pelatih terus saja datang dan memukul kepala Anda, ketika Anda menurunkan tangan, karena Anda lupa atau karena Anda lelah untuk mempertahankannya. Tetapi setelah beberapa waktu, Anda terus melakukannya. Dan menjadi sangat sulit untuk memukul wajah Anda. Sama dengan masalah algoritmik abstrak. Memahami isi Pengantar Algoritma dan sangat sedikit hal yang akan mengejutkan dalam pekerjaan.

gruszczy
sumber
Kedengarannya seperti program yang bagus. Beberapa teori. Banyak latihan.
Mike Dunlavey
1

Saya pikir jawabannya adalah ya (dengan cara tertentu).

Masalahnya adalah tidak mungkin untuk mengajar anak-anak dalam waktu singkat pemrograman. Mereka harus berpikir logika programer, bagaimana memecahkan (dalam skala yang lebih kecil) masalah programmer.

Saya yakin program sekolah harus direvisi, saya negara "dunia ketiga" saya yang sangat kecil, untungnya, upaya sedang dilakukan untuk hal ini terjadi. Kami adalah negara pertama yang mengimplementasikan program OLPC; http://laptop.org/en/

Trufa
sumber
1

Dari pengalaman saya sendiri (saya seorang siswa saat ini), saya harus mengatakan ya, itu alasan. Semua orang menyebut CS sebagai ilmu yang mengajarkan kita semua dasar-dasar komputer, dan SE sebagai cabang khusus dalam CS yang secara eksplisit mengajarkan pemrograman. Imo, setiap orang yang memiliki BS di CS, harus tahu cara menulis kode yang baik dan optimal (bahkan jika pemrograman bukan bidang spesialisasinya). Jadi ya, jika saya memiliki posisi yang mahakuasa untuk membuat keputusan seperti itu, saya akan memaksa para siswa untuk mendapatkan keterampilan pemrograman yang baik.

Ilija Eftimov
sumber
Gelar saya berjudul Ilmu Komputer dan Rekayasa Perangkat Lunak, dan diarahkan untuk memberi Anda yang terbaik dari kedua dunia, yaitu menjadi programmer yang kompeten, dan cukup tahu teorinya untuk dapat melanjutkan ke sekolah pascasarjana atau penelitian. Saya pikir itu pendekatan yang bagus.
Michael K
1

Dengan asumsi tujuannya adalah untuk mendidik insinyur perangkat lunak yang baik (programmer) karena dunia membutuhkan mereka, apakah boleh menjawab dengan mengatakan apa yang menurut saya harus diajarkan?

Pertama, ini penting karena transfer pengetahuan saat ini sangat tidak efisien. Ketika calon programmer berada di kelas, pikiran mereka terbuka dan mereka menyerap apa yang diajarkan. Pada saat yang sama, para profesor (saya dulu) terlalu sering lebih tertarik untuk mengisi jalur pendidikan pascasarjana dengan siswa yang dapat mengerjakan mata pelajaran esoterik. Ketika keberatan diajukan bahwa siswa tidak siap untuk masalah dunia nyata, saya telah melihat profesor mengklaim itu bukan pekerjaan mereka . Itu pekerjaan dunia nyata.

Lalu ketika siswa menjadi programmer di dunia nyata, apakah mereka ingin belajar dari kolega baru mereka? Tidak dalam pengalaman saya. Sebaliknya mereka ingin menyebarkan Injil apa pun yang mereka peroleh di sekolah. Saya ingat sebagai seorang mahasiswa dan praktisi muda yang berpikir betapa sulitnya memupuk ide-ide baru di antara para fudddy-duddies lama di luar sana. Sekarang saya sudah tua-ayah saya melihat betapa sulitnya untuk membuka mata programmer baru untuk perbedaan antara teori dan praktek.

Saya adalah seorang mahasiswa teknik, dalam teknik mesin dan kemudian teknik elektro. Bagian mendasar dari itu adalah a) dasar matematika, dan b) pemecahan masalah praktis. Rekayasa perangkat lunak harus seperti itu, bukan hanya pemrograman.

Saya pikir rekayasa perangkat lunak (pemrograman) harus diajarkan dengan ilmu komputer yang cukup untuk menjadi pengetahuan yang berfungsi - teori automata dasar dan teori informasi. Ini tidak perlu dilakukan secara mendalam. Setelah keterampilan pemrograman dasar diajarkan, harus ada proyek kerja sama dengan ukuran nontrivial. Bagian penting dari ini harus berupa proposal dan pertimbangan solusi alternatif dari masalah spesifik, dengan analisis pro dan kontra, bukan hanya agama terbaru atau "hal besar berikutnya" atau satu ukuran cocok untuk semua. Akhirnya, harus ada kerja sama dan kemitraan antara industri dan akademisi, sehingga gagasan dan perbaikan dapat dikomunikasikan dua arah, sangat meningkatkan kontrol kualitas.

Mike Dunlavey
sumber
0

Mereka yang bisa, lakukan; mereka yang tidak bisa, mengajar.

Di universitas saya, basis pengetahuan para guru sangat kurang. Saya telah melihat para guru berjuang untuk memahami bagaimana merepresentasikan tabel semi-terstruktur dalam XML sambil memegang PHD dalam Desain Basis Data. Saya telah melihat guru Majelis bertanya kepada saya apa yang kode saya lakukan ketika itu potongan kode yang saya salin dan tempel. Saya telah melihat guru perancang perangkat lunak saya memberi tahu kami metode Agile sama dengan metode waterfall, hanya lebih cepat, bahwa model proses pengembangan iteratif telah dan hanya dapat memiliki 3 iterasi karena itulah yang digunakan oleh gambar buku seperti contohnya. Salah satu guru saya bahkan tidak tahu apa pernyataan lain jika itu.

Saya tidak percaya mereka 'mengatasi', atau membuat alasan, saya benar-benar percaya mereka melakukan yang terbaik yang dapat mereka lakukan dengan pengalaman mereka, yang mereka miliki hanya sedikit.

Saya setuju dengan orang lain yang memposting di sini bahwa 4 tahun tidak cukup untuk menjadi programmer berpengalaman, tetapi pengalaman yang dimiliki guru saya tidak cukup untuk membuat mereka berpengalaman juga. Ini sangat mirip dengan Ender's Shadow, di mana Bean memperhatikan metrik yang digunakan oleh para guru di sekolah pertempuran gagal karena perang terakhir yang merupakan aturan panduan, terlalu pendek untuk benar-benar menunjukkan apa yang sebenarnya dibutuhkan. Dengan kata lain, para guru melakukan yang terbaik yang mereka bisa, tetapi gagal memiliki pengalaman untuk mengetahui apa yang benar-benar diperlukan untuk membuat komandan yang baik (atau programmer yang baik dalam kasus ini).

Malfist
sumber
3
Saya pikir banyak contoh Anda jelas hanya kasus di mana guru Anda berusaha menyederhanakan hal-hal untuk keuntungan Anda sendiri. Those that can, do; those that cannot, teach.Saya juga tidak setuju dengan ini sama sekali: karir akademik dan industri mengarah ke gaya hidup yang sangat berbeda. Banyak penelitian dunia berasal dari akademisi. Dan saya tidak melihat cara di mana Anda menjawab pertanyaan asli.
Tidak ada yang
2
Apa hubungannya XML dengan desain basis data, selain fakta bahwa orang bisa jika seseorang tidak tertarik dalam kinerja, menggunakan XML sebagai backing store untuk database? Bukan untuk mengatakan bahwa beberapa guru dapat melewatkan poin (saya ingat berdebat dengan instruktur tentang poin dihapus karena "komentar berlebihan" ketika kurikulum ke titik itu mengajarkan "komentar seperti angin") tetapi agak berlebihan. Jika seseorang ingin belajar Java, ada cara yang lebih murah untuk melakukannya daripada melalui kurikulum CS.
dash-tom-bang
1
Ada juga fakta bahwa beberapa universitas lebih buruk daripada yang lain, dan universitas Anda mungkin memiliki departemen CS yang sangat buruk. Secara tradisional, orang-orang CS dengan gelar sarjana telah mampu menghasilkan lebih banyak uang di industri daripada akademisi, jadi orang-orang di akademisi adalah orang-orang yang benar-benar ingin berada di sana dan orang-orang yang tidak dapat memiliki pekerjaan di dunia nyata. Saya telah melihat keduanya, dan menduga rasionya bervariasi di seluruh universitas.
David Thornley
@ dash-tom-bang, XML adalah contoh hampir sempurna dari database semi-terstruktur. en.wikipedia.org/wiki/Semi-structured_model
Malfist
1
XML yang digunakan seperti ini masih merupakan implementasi dari teori database. Bukan teori itu sendiri.
dash-tom-bang
0

Ilmuwan Komputer dan Insinyur Perangkat Lunak berbeda. Ilmuwan adalah orang-orang yang melakukan eksperimen gila dan menghasilkan algoritma yang kami tingkatkan sebagai Insinyur Perangkat Lunak untuk menjadi lebih baik.

Pikirkan ahli kimia yang melakukan percobaan untuk perusahaan farmasi. Mereka tidak peduli tentang cara memproduksi bahan kimia secara massal. Mereka juga tidak peduli dengan pemasaran, pengemasan, distribusi atau apa pun yang terjadi pada obat setelah mereka menemukannya. Mereka bahkan tidak peduli dengan proses sertifikasi. Yang mereka pedulikan hanyalah menemukan bahan kimia yang memiliki efek ketika diberikan kepada subjek uji. Perusahaan bertanggung jawab untuk memindahkannya lebih dari itu.

Ilmuwan Komputer seperti ahli kimia itu. Yang mereka lakukan hanyalah menguji teori dengan kode. Mereka tidak peduli tentang bagaimana kode tersebut dapat dipelihara. Mereka membuktikan teori dan beralih ke yang berikutnya. Orang lain mengemas algoritme dan menjadikannya berguna bagi massa dan kami memiliki visi MP3 atau komputer dengan Kinect atau streaming video di iPhone Anda. Jadi CS! = SE adalah argumen yang valid.

WRT bagian kedua dari pertanyaan Anda. Jika saya menawarkan gelar dalam Teori Musik, mungkin ada kursus yang diperlukan dalam penulisan lagu atau sesuatu, tetapi tidak akan mengharuskan siapa pun untuk mempelajari instrumen. Terserah siswa untuk mencari ilmu yang mereka inginkan. Ilmu Komputer bukan Rekayasa Perangkat Lunak ... jika Anda ingin belajar SE, ambil jurusan ganda.

Michael Brown
sumber
0

Edsger Wybe Dijkstra adalah seorang ilmuwan komputer Belanda.

Dia menerima Penghargaan Turing 1972 untuk kontribusi mendasar untuk mengembangkan bahasa pemrograman , pernah berkata:

"ILMU KOMPUTER TIDAK LEBIH BANYAK TENTANG KOMPUTER DARI ASTROMI ADALAH TENTANG TELESCOPES."

CS BENAR-BENAR BERBEDA DARI SE. (CS! = SE).

CS adalah ilmuwan yang telah memperoleh pengetahuan tentang KOMPUTER SCIENCE.

ILMU KOMPUTER atau ilmu komputasi (kadang-kadang disingkat CS) adalah studi tentang dasar-dasar teoritis informasi dan komputasi dan teknik praktis untuk implementasi dan penerapannya dalam sistem komputer. Hal ini sering digambarkan sebagai studi sistematis proses algoritme yang membuat, menggambarkan, dan mengubah informasi.

Ilmu komputer memiliki banyak sub-bidang misalnya:

  • Ilmu komputer teoretis
  • Teori perhitungan
  • Algoritma dan struktur data
  • Elemen dan arsitektur komputer
  • Multiprocessing
  • Ilmu komputasi
  • Kecerdasan buatan
  • Sistem Perangkat Lunak

Banyak dari kita tidak memerlukan keterampilan ini dalam pekerjaan sehari-hari atau setidaknya sedikit.

SOFTWARE ENGINEER (SE) adalah profesi yang didedikasikan untuk merancang, mengimplementasikan, dan memodifikasi perangkat lunak sehingga berkualitas tinggi, lebih terjangkau, dapat dirawat, dan lebih cepat untuk dibangun. Ini adalah "pendekatan sistematis untuk analisis, desain, penilaian, implementasi, pengujian, pemeliharaan dan rekayasa ulang suatu perangkat lunak dengan menerapkan teknik pada perangkat lunak"

Sebagai pengetahuan CS, ia seharusnya memiliki pengetahuan untuk mengelola masalah yang sangat kompleks tanpa mengetahui bahasa pemrograman yang benar-benar bagus. IMHO di sini kita dapat membuka utas lain, di mana GELOMBANG bagi saya HANYA TITIK MULAI dan bukan TUJUAN AKHIR.

Sebagai pengetahuan SE, dia seharusnya memiliki pengetahuan untuk mengelola produksi masalah yang sangat rumit ini dan mengelola pengembangan tim atau proyek tentang bidang ini.

Bersama-sama membuat penelitian dalam sains yang dibuat oleh CS dalam Sains terapan dengan bantuan SE.

Maksudku, CS tidak lebih baik dari SE, maksudku CS! = SE.

Pertanyaan semacam ini adalah pertanyaan yang sama yang orang non komputer tanyakan kepada diri mereka sendiri ketika bertanya kepada Anda mengapa, sebagai programmer, Anda tidak dapat memperbaiki melalui telepon masalah program X, Y, Z pada sistem operasi J, M, N. ;)

Sebenarnya saya benar-benar bosan coding setelah 10 tahun pengembangan sistem unix di bidang keamanan dan setelah membaca pertanyaan ini saya mengerti intinya, saya perlu belajar lebih banyak ilmu komputer dan lebih sedikit bahasa komputer dan sistem komputer atau protokol!

Tidak seorang pun di pekerjaan saya dapat menangani perbedaan tentang SE dan CS! itu benar-benar hal yang buruk.

Jika Anda berpikir bahwa CS dapat menjadi alasan untuk keterampilan pemrograman yang buruk, Anda benar-benar kehilangan titik tentang apa itu CS dan apa itu SE.

Saya kira Anda adalah SE, apakah Anda tahu misalnya bahwa semua bahasa, semua paradigma dan semua hal yang berhubungan dengan bahasa komputer dapat diekspresikan secara matematis dalam seperangkat fungsi rekursif parsial dan apa pun yang Anda pelajari bahasa baru, APA PUN BAHASA BARU, Anda hanya mempelajari abstraksi baru atas fungsi parsial rekursif SAMA?

Selamat bersenang-senang :)

boo
sumber