Selama musim panas, saya cukup beruntung bisa masuk ke Google Summer of Code. Saya belajar banyak (mungkin lebih dari yang saya pelajari dalam jumlah semua kursus universitas saya). Saya benar-benar bertanya-tanya mengapa mereka tidak mengajarkan beberapa hal yang saya pelajari lebih awal di sekolah. Untuk beberapa nama:
- pengujian unit
- kontrol versi
- perkembangan lincah
Menurut saya, mereka menghabiskan banyak waktu untuk mengajarkan hal-hal lain seperti struktur data dan algoritme di awal. Sementara saya masih berpikir itu sangat penting untuk dipelajari sejak dini, mengapa mereka tidak mengajarkan lebih banyak dari ketiganya sebelum mereka? Atau hanya sekolah saya yang tidak banyak mengajarkan hal ini?
Jangan salah paham, menurut saya universitas tidak ingin selalu mengajarkan mode pemrograman paling trendi, tetapi bukankah seharusnya profesor saya mengajari saya sesuatu selain "menggambar diagram sebelum Anda mulai membuat kode?"
sumber
Jawaban:
Jawaban paling sederhana untuk pertanyaan Anda adalah bahwa bidang ilmu komputer dan pengembangan perangkat lunak sama-sama baru, dan belum dipahami dengan baik. Meskipun semua disiplin ilmu dan teknik berkembang lebih pesat di zaman modern, bidang lain memiliki lebih banyak pengalaman untuk digunakan dan ada pemahaman bersama yang jauh lebih luas tentang cara kerjanya.
Misalnya, meskipun ada kemajuan baru-baru ini dalam ilmu material, insinyur sipil telah mengetahui selama sekitar 2000 tahun bagaimana membangun sebuah lengkungan yang tidak akan roboh, dan ini adalah sesuatu yang dapat diajarkan dan dipelajari di universitas dengan kontroversi yang relatif kecil. Meskipun saya sepenuhnya setuju dengan Anda tentang teknik yang harus dipelajari oleh pengembang perangkat lunak, perjanjian ini didasarkan pada pengalaman pribadi dan penalaran informal. Untuk menjadi "praktik terbaik" yang diterima secara sosial, kita memerlukan data kuantitatif yang bisa sangat mahal untuk dikumpulkan: seberapa besar bantuan kontrol versi? Bagaimana itu membantu? Pengujian unit? Kita dapat bernalar tentang keefektifan berbagai teknik, tetapi sebenarnya membuktikan bahwa keefektifan secara meyakinkan akan sangat mahal. Kami perlu menjalankan proyek perangkat lunak yang lengkap dan realistis dari awal hingga akhir, berkali-kali, dengan kelompok pemrogram yang memiliki keahlian setara, menggunakan teknik yang berbeda. Paling tidak kami membutuhkan banyak data tentang proyek yang ada yang tidak mau dirilis oleh proyek-proyek tersebut.
Insinyur sipil memiliki ribuan tahun jembatan untuk dilihat, dengan banyak informasi. Pengembang perangkat lunak, di sisi lain, hanya memiliki beberapa dekade informasi, sebagian besar dirahasiakan, karena ada sedikit motivasi bagi organisasi untuk menyusun dan mempublikasikan informasi tentang efektivitas pengembang mereka, bahkan jika mereka mengumpulkannya (yang 't).
Ada juga beberapa bidang yang membingungkan. Pengembangan perangkat lunak, atau perangkat lunak "rekayasa", sebenarnya adalah hal yang berbeda dari ilmu komputer. Pengembang perangkat lunak membutuhkan pengetahuan kerja tentang ilmu komputer, tetapi bekerja di batas kompleksitas algoritmik atau penalaran tentang paralelisme bukanlah sesuatu yang akan dilakukan oleh programmer yang bekerja setiap hari; sama halnya, "ilmuwan komputer" sejati akan menulis banyak sekali kode yang bisa dibuang yang tidak berfungsi atau tidak melakukan sesuatu yang menarik, dan tidak akan mendapat banyak manfaat dari ketelitian yang diberikan oleh produk perangkat lunak yang sebenarnya.
Munculnya internet dan komunitas open source dapat memberikan data yang cukup untuk mulai menjawab pertanyaan-pertanyaan ini secara meyakinkan, tetapi bahkan jika jawabannya tersedia besok, mungkin akan membutuhkan 100 tahun bagi mereka untuk menembus masyarakat internasional ke titik di mana semua orang setuju tentang apa harus diajarkan di sekolah.
Akhirnya ada beberapa pertimbangan ekonomi. Sudah waktu yang relatif singkat karena hampir semua orang yang terlibat dalam pengembangan perangkat lunak memiliki akses yang mudah dan murah ke mesin khusus untuk menjalankan alat pengembangan apa pun yang mereka inginkan. Beberapa dekade yang lalu, mendedikasikan sebuah mesin sepenuhnya untuk hanya menjalankan pengujian Anda, atau bahkan menyimpan sejarah kode sumber yang tak terbatas, akan tampak sangat mahal bagi banyak orang.
sumber
Karena guru kami:
Siswa harus menangani masalah dengan tangan mereka sendiri. Kami melakukan itu, dan ternyata baik-baik saja, bukan?
sumber
Leonardo da Vinci menulis,
Sekolah yang baik mengajarkan teori (struktur data, algoritme, dll.) Serta praktik (pengujian unit, kontrol versi, dll.). Ini membutuhkan campuran fakultas yang tepat agar kedua sisi mata uang ini bisa diajarkan dengan baik. Fakultas yang seluruhnya terdiri dari tipe teoritis tanpa pengalaman nyata tidak akan berhasil. Demikian pula, fakultas yang seluruhnya terdiri dari praktisi tidak akan melakukannya. Anda perlu campuran, dan sekolah yang bagus memilikinya.
sumber
Ilmu komputer selalu agak kontradiktif; Bagian tentang komputer bukanlah ilmu, dan bagian yang ilmu bukan tentang komputer.
Universitas cenderung lebih bersandar pada ujung 'sains' (algoritma, datastrctures, compiler, dll) karena hal-hal itu jauh lebih 'abadi' daripada praktik terbaik industri saat ini, yang cenderung berkembang dan berubah dari tahun ke tahun. Kontrol Versi, misalnya, telah mengalami perubahan luar biasa dalam 5 atau 10 tahun terakhir, tetapi O besar masih O besar, dan hashing, btree, dan rekursi masih berguna seperti 40 tahun lalu. Ide mereka umumnya memberi Anda cukup fondasi sehingga Anda dapat mengambil alat seperti git dan memahami apa artinya ketika Anda diberi tahu bahwa struktur data yang mendasarinya adalah grafik berarah asiklik dari hash SHA-1, dan bahwa pengembang telah bekerja keras untuk mengoptimalkan jumlah syscall sehingga io-bound.
Sekarang, pikirkan di mana Anda mempelajari semua hal yang harus Anda ketahui untuk memahami kalimat terakhir itu - jika jawabannya adalah 'universitas', mereka melakukan pekerjaan dengan baik.
sumber
Semuanya hanya iseng. Anda akan belajar lebih banyak di tahun pertama Anda di luar perguruan tinggi daripada tahun-tahun Anda di perguruan tinggi. Ilmu komputer tidak ada hubungannya dengan komputer.
Perguruan tinggi memberi Anda kotak alat yang penuh dengan alat. Ini obeng, itu kunci bulan sabit. Anda BISA menggunakan setiap alat sekali di perguruan tinggi. Saat Anda memasuki dunia nyata adalah saat Anda benar-benar menemukan apa yang Anda miliki. Anda memilah yang berguna dari yang lain, mana yang ingin Anda tinggalkan di rumah di meja kerja, untuk berjaga-jaga, dan yang Anda simpan di saku setiap hari.
Tqm, Iso, Cmm, Agile, dll. Ini semua adalah mode, mereka akan datang dan pergi, tidak ada yang sukses yang lebih dari sekedar akal sehat. Semua insinyur dan perusahaan yang sukses menggunakan akal sehat, itulah yang membuat mereka sukses, hanya sedikit yang membutuhkan nama untuk itu. Masalahnya adalah Anda tidak dapat menjual akal sehat, seorang manajer tidak dapat membuktikan nilai mereka kepada perusahaan dengan melatih dan membeli akal sehat tanpa nama yang menarik. Cantumkan nama yang telah dibaca atasan mereka di beberapa artikel berita atau majalah dan manajer mempertahankan pekerjaan mereka dan Anda mempertahankan pekerjaan Anda. Sangat sedikit dari perusahaan yang mengklaim mengikuti praktik ini yang benar-benar melakukannya. Sebagian besar menulis cek ke konsultan, dan mendapatkan sertifikat tahunan dan atau seumur hidup mereka ke beberapa klub sehingga mereka dapat memasang grafik di situs web mereka atau label di kotak produk mereka masuk. Banyak yang akan berpendapat bahwa ini jarang ... pernah ada, melihatnya, itu terjadi. Ini semua adalah bagian dari bisnis, Anda kadang-kadang harus mengambil jalan pintas agar tetap untung dan menjaga pintu tetap terbuka dan lampu menyala. Pengikut hardcore dari semua praktik ini semuanya berpendapat bahwa yang terakhir adalah iseng dan yang ini bukan, yang terakhir benar-benar terlalu mahal untuk diikuti, yang ini bukan. Yang terakhir palsu Anda baru saja menyewa konsultan, yang ini nyata. Seperti bahasa pemrograman, ini juga akan berkembang. Yang terakhir palsu Anda baru saja menyewa konsultan, yang ini nyata. Seperti bahasa pemrograman, ini juga akan berkembang. Yang terakhir palsu Anda baru saja menyewa konsultan, yang ini nyata. Seperti bahasa pemrograman, ini juga akan berkembang.
Kemampuan Anda untuk memahami realitas bisnis, sistem universitas, dan peran Anda di dalamnya adalah kuncinya. Seperti apa pun dalam hidup, pilih pertempuran Anda. Bukan universitas atau bisnis atau pemerintah atau tugas orang lain untuk mengajar yang Anda inginkan atau ingin Anda ketahui. Tugas Anda adalah mencari yang nomor satu. Demikian juga Anda tidak dapat menyalahkan orang lain karena memberi Anda waktu untuk melakukan ini, Anda harus melakukannya. Anda akan jatuh dari kuda, Anda bukan korban, bangun dan bangkit kembali, tidak ada alasan, hidup tidak adil dengannya. Manfaatkan handout, jangan berpura-pura mandiri. Dan tentu saja, bayar iuran Anda, jangan menghisap keringanan perusahaan, tanpa memberi mereka sesuatu (terbaik Anda saat itu?) Sebagai imbalan.
Mengapa orang menganggap cmm atau lincah atau yang lainnya adalah iseng? Mengapa mereka mengira tidak? Mengapa profesor mengajari Anda program seperti itu? Untuk menghindari gotos atau untuk menghindari konstanta atau untuk menghindari ini dan itu? Apakah karena menghasilkan kode yang lebih andal? Kode berkinerja lebih baik? Mengurangi kesalahan manusia? Ataukah karena lebih mudah menilai makalah / program yang memberi mereka lebih banyak waktu untuk melakukan penelitian? Apakah karena mereka tidak tahu bagaimana memprogram dan mereka hanya mengikuti buku orang lain tentang subjek? Apakah mereka mengajari Anda bahwa Anda tidak dapat memiliki kode yang dapat dipelihara, dapat diandalkan, dan berkinerja tinggi? Anda bahkan tidak dapat "memilih dua" gangguan pemeliharaan dapat diandalkan dan kinerja tinggi? Terkadang Anda mengorbankan keandalan demi kinerja. Terkadang Anda tidak peduli dengan keandalan atau kinerja, Anda hanya ingin mendapatkan dari versi 117.34. 2 dari program perangkat lunak akuntansi lain untuk versi 118.0.0. Model bisnis Anda berasal dari menjual peningkatan versi dan dukungan teknis, dan sejauh pengembang perangkat lunak, robot lama mana pun akan melakukannya yang dapat menulis kode yang sama dengan cara yang sama. Gantilah yang terbakar dengan yang baru lulus kuliah dan tetap menjual upgrade.
Tidak ada jawaban universal untuk pertanyaan-pertanyaan ini, Anda harus mencari tahu apa pendapat Anda, menerimanya, dan mempertahankannya. Ubah pikiran Anda, hidup dengannya, dan pertahankan.
Pertanyakan semuanya ... apakah saya benar-benar akan terbakar jika saya menyentuh panci panas di atas kompor? Akankah efek psikologis dari rasa takut menyebabkan lebih banyak kerusakan daripada hanya terbakar? Apakah ada cara yang aman untuk menguji jawabannya tanpa terluka?
Ketika saya mampu membelinya, saya akan membeli dan akhirnya melelehkan transistor, tutup, resistor, dll di kamar asrama saya, yang semuanya memiliki bau tak sedap yang khas. Jauh lebih murah dan lebih mudah untuk hanya membeli sebuah amp untuk stereo Anda daripada mencoba membangunnya sehari setelah kelas transistor pertama Anda. Sebagai pengecualian, Linus tentu saja lebih mudah membeli sistem operasi daripada menulisnya ... Anda bisa menyelesaikan lebih banyak walaupun apa yang Anda pelajari saat itu berbeda dengan apa yang dipelajari Linus.
Dunia di dalam dan di luar universitas akan mengadopsi rumus-rumus ini (cmm, agile, dll) untuk memecahkan masalah dan ketika yang berikutnya keluar, mereka akan menjatuhkannya dengan cepat. Anda tidak harus menggunakan kontrol versi untuk menjadi sukses, ada banyak keberhasilan dengan atau tanpa (yah sebenarnya karena usia industri, ada lebih banyak keberhasilan tanpa kontrol versi sejauh ini). Anda juga bisa sukses dengan pengujian minimal (lihat nama-nama besar di industri komputer sebagai contoh). Anda bisa sukses dengan menguji kode Anda sendiri, serta sukses dengan mengikuti aturan bahwa Anda tidak boleh menguji kode Anda sendiri. Anda bisa sukses menggunakan emacs dan Anda bisa sukses menggunakan vi. Anda harus memutuskan campuran apa yang cocok untuk Anda dan jika Anda beruntung menemukan tempat kerja yang sesuai dengan Anda.
Ketika Anda keluar dari perguruan tinggi dan memasuki dunia nyata, dengarkan dan bekerja dengan dan berdebat dengan "pengatur waktu lama". Mereka memiliki pengalaman berpuluh-puluh hingga berabad-abad yang menggabungkan pengalaman, jebakan-jebakan yang mungkin Anda hindari dan atau uji sendiri (mungkin Anda menyadari bahwa Anda tidak perlu menyentuh panci panas untuk mengetahui bahwa itu akan membakar Anda). Sebagian besar akan melihat setidaknya satu atau dua mode ini datang dan pergi, dan khususnya seberapa parah mereka dibakar, dan apa yang mereka lakukan untuk memulihkannya. Mereka tahu banyak cara berbeda untuk menguji berbagai hal, dan nama gaya pengujian yang telah datang dan pergi juga. Apa yang berhasil, apa yang tidak. Di mana risikonya dan bagaimana menghindari membuang-buang waktu di garis singgung. Saat Anda dewasa dan menjadi pewaktu lama, teruskan ke depan. Bayarlah untuk apa yang Anda pelajari dengan mencoba mengajar mereka yang mengikuti Anda. Ingatlah untuk mengajari mereka CARA memancing, jangan hanya memberi mereka ikan. Dan terkadang Anda harus membiarkannya gagal sebelum berhasil, agar mereka tidak terlalu terbakar.
Apa yang sebenarnya ingin saya katakan di sini adalah saat ini kita berada dalam situasi langka di mana kita dapat menyaksikan evolusi alam semesta paralel (dan mungkin mempengaruhinya). Ya, ilmu komputer adalah ilmu yang masih muda dibandingkan dengan fisika. Tetapi pada saat yang sama itu telah berkembang berkali-kali. Tergantung di mana Anda bekerja dan dengan siapa Anda bekerja, Anda mungkin dapat mengamati insinyur perangkat keras. Bahasa pemrograman dalam dunia perangkat keras tentunya bukanlah hal baru, namun belum berkembang secepat dunia perangkat lunak. Perangkat lunak memiliki awal beberapa dekade. Perangkat keras selalu menganggap insinyur perangkat lunak sebagai warga kelas dua. Pekerjaan kita mudah, pekerjaan mereka berat. (Perhatikan bahwa saya sebenarnya adalah seorang insinyur perangkat keras dan perangkat lunak). Yang menarik adalah saat ini mereka masih berurusan dengan apa yang kita anggap masalah dasar atau kekanak-kanakan. Mengapa saya perlu menggunakan kontrol versi, saya satu-satunya yang mengerjakan chip ini. Pengalaman Anda dengan gcc atau kompiler murah lainnya atau IDE gratis mungkin tidak dapat dibandingkan dengan alat mahal yang saya gunakan, jika perusahaan mengira Anda cukup layak untuk menggunakannya atau bahkan tahu bagaimana menggunakannya, mereka akan membelikan Anda salinannya. Dan daftar panjang alasan lainnya. Saya merasa senang mempelajari vhdl dan verilog dan menjadi produktif di keduanya dalam waktu seminggu dari apa yang hampir merupakan tantangan dari insinyur perangkat keras seperti itu (meskipun diploma saya mengatakan insinyur listrik, jabatan saya adalah insinyur perangkat lunak). Saya ingin mempelajari bahasa-bahasa ini, ketika alat tersedia untuk saya, saya tinggal di kantor hingga larut malam dan belajar sendiri. Sejak saat itu, insinyur tersebut secara khusus menyadari bahwa apa yang saya katakan itu benar, bahasa hanyalah sintaksis, dasar-dasar pemrograman sama, semua alat melakukan hal yang sama. Apel dan apelnya bukan apel dan jeruk.
Secara umum, meskipun masih sulit untuk mengirim pesan bahwa salah satu dari dua industri paralel ini memiliki lebih banyak pengalaman dalam bahasa, kebiasaan pemrograman, kontrol sumber, pengujian, alat, lingkungan pemrograman, dll daripada yang lain. Masalah yang saya coba selesaikan adalah mengambil desain perangkat keras seperti yang sedang dikembangkan, membuat simulator fungsional yang terjangkau yang dapat kita ikat dengan simulasi (mesin virtual) prosesor sehingga kita dapat mulai menguji perangkat keras dan mengembangkan pengujian dan perangkat lunak yang dapat dikirimkan jauh sebelum kita beralih ke silikon. Tidak ada yang "baru" tentang ini, tetapi kami tidak memiliki mekanisme untuk mendapatkan kode terbaru, melacak perubahan dalam kode untuk melihat di mana kami perlu memfokuskan waktu kami. Tidak ada mekanisme untuk melacak dokumentasi yang mendefinisikan antarmuka pengguna (pemrograman) ke perangkat keras. Satu salinan emas ada di kotak masuk email seseorang dalam bentuk biner dan hanya berubah jika, Anda tidak perlu membaca Verilog untuk mengetahui apa yang terjadi. Tunggu, Verilog itu berapa umurnya? Bug yang saya habiskan sepanjang minggu untuk Anda temukan tiga minggu yang lalu dan diperbaiki? Jadi apakah kita hanya terbang ke suatu tempat liburan dan pesta selama enam bulan menunggu orang-orang perangkat keras menyelesaikan tugas mereka dan melemparkannya ke dinding untuk kita, atau apakah kita mengambil kesempatan ini untuk mencoba bersabar dan optimis dan mengajari mereka bahwa mereka ada metode akal sehat yang tidak terlalu mengganggu yang memungkinkan mereka berdua melakukan pekerjaan mereka, mencadangkan pekerjaan mereka serta membagikan barang-barang mereka untuk tinjauan sejawat ... Verilog itu berapa umurnya? Bug yang saya habiskan sepanjang minggu untuk Anda temukan tiga minggu yang lalu dan diperbaiki? Jadi apakah kita hanya terbang ke suatu tempat liburan dan pesta selama enam bulan menunggu orang-orang perangkat keras menyelesaikan tugas mereka dan melemparkannya ke dinding untuk kita, atau apakah kita mengambil kesempatan ini untuk mencoba bersabar dan optimis dan mengajari mereka bahwa mereka ada metode akal sehat yang tidak terlalu mengganggu yang memungkinkan mereka berdua melakukan pekerjaan mereka, mencadangkan pekerjaan mereka serta membagikan barang-barang mereka untuk tinjauan sejawat ... Verilog itu berapa umurnya? Bug yang saya habiskan sepanjang minggu untuk Anda temukan tiga minggu yang lalu dan diperbaiki? Jadi apakah kita hanya terbang ke suatu tempat liburan dan pesta selama enam bulan menunggu orang-orang perangkat keras menyelesaikan tugas mereka dan melemparkannya ke dinding untuk kita, atau apakah kita mengambil kesempatan ini untuk mencoba bersabar dan optimis dan mengajari mereka bahwa mereka ada metode akal sehat yang tidak terlalu mengganggu yang memungkinkan mereka berdua melakukan pekerjaan mereka, mencadangkan pekerjaan mereka serta membagikan barang-barang mereka untuk tinjauan sejawat ...
Ingatlah bahwa insinyur perangkat keras lulus kuliah dengan sekotak alat baru seperti Anda. Anda mempelajari 17 bahasa pemrograman berbeda yang hanya dapat Anda gunakan satu, bahasa lainnya dalam karier Anda akan ditemukan setelah Anda lulus kuliah. Ketika mereka lulus kuliah, mereka dapat memberi tahu Anda apa yang mereka ketahui tentang kalkulus dan teori relativitas berapa banyak elektron di setiap elemen dan menghitung muatan di sekitar permukaan Gaussian. Tetapi sebagian besar karir mereka adalah satu, nol, dan, atau dan tidak (hei, kami memiliki kesamaan, semua yang benar-benar perlu Anda ketahui tentang komputer, satu, nol, dan, atau dan bukan insinyur perangkat keras atau perangkat lunak). Memang hukum dasar fisika, kalkulus, elektron tidak akan berubah secepat bahasa pemrograman. Tetapi dasar-dasar pemrograman sama di semua bahasa dan akan terus berlanjut di masa mendatang. Apakah Anda meninggalkan perguruan tinggi dengan mengetahui hal itu atau apakah Anda keluar dengan berpikir bahwa java berbeda dan lebih baik dari C ++ karena ini dan itu dan yang lainnya?
Seperti bisnis lainnya, pekerjaan universitas adalah tetap menguntungkan. Mereka harus mempekerjakan akademisi yang tepat untuk menghasilkan mahasiswa yang tepat dan dana penelitian yang tepat serta jenis penelitian yang tepat untuk membuat universitas menguntungkan. Mereka harus menawarkan kelas yang tepat untuk membawa siswa yang tepat dan menghasilkan lulusan yang tepat sehingga seiring berlalunya dekade, para pengusaha di dekat universitas dan mudah-mudahan jauh akan menyadari bahwa universitas ini menghasilkan karyawan yang produktif dan menguntungkan. (ya dan terkadang Anda harus menarik atlet yang tepat dalam olahraga yang tepat untuk mendapatkan jumlah waktu TV yang tepat dan jumlah pengenalan nama dan pendapatan olahraga yang tepat). Beberapa universitas akan mengajarkan C ++ dan Java, beberapa tidak akan pernah. Beberapa akan menemukan CMM, dan beberapa akan mengajar Agile, beberapa tidak akan melakukan keduanya. Jika universitas memiliki nilai, pasti ada sesuatu yang bisa Anda pelajari. Mereka tidak akan mengajari Anda segala sesuatu yang perlu dipelajari, tetapi mereka akan memiliki sesuatu yang berguna. Pelajari sesuatu itu saat Anda berada di sana, kumpulkan berbagai bentuk alat dalam jumlah yang wajar di kotak alat Anda. Tinggalkan universitas dan dapatkan pekerjaan. Jika kotak peralatan Anda jelek, mungkin cari universitas lain dan jangan pernah menyebutkan yang pertama. Jika ini adalah kotak alat yang baik, gunakan alat-alat itu dan buat beberapa yang baru pada waktu Anda sendiri. Jika ini adalah kotak alat yang cukup bagus, katakan hal-hal baik tentang universitas itu dan akademisi yang baik yang Anda pelajari dari sini dan itu dan bayar kembali sekolah untuk apa yang mereka berikan kepada Anda. Meskipun Anda tidak mendapatkan semua alat yang mungkin dalam katalog universal alat-alat universitas, Anda akan pergi dengan subset tertentu. Bahkan jika kamu tidak lulus ...
sumber
Saya mengajarkan hal-hal ini ketika saya menjadi Adjunct di Oregon Institute of Technology. Mereka diajar, hanya sedikit.
sumber
Jawaban paling sederhana adalah Anda sedang mempelajari ilmu komputer dan hal-hal yang Anda cantumkan tidak terlalu terkait dengan bidang akademik ilmu komputer. Pengembangan perangkat lunak mungkin sesuatu yang Anda lakukan dengan ilmu komputer, sesuatu yang dibangun di atas blok dari apa yang telah Anda pelajari ... tetapi Ilmu Komputer dan pengembangan perangkat lunak bukanlah hal yang sama.
Kelas yang mengajarkan Anda kontrol versi, atau bagaimana menulis tes unit yang efektif ... yang akan mengajar Anda perdagangan , yaitu, (baik) pengembangan perangkat lunak.
sumber
oh tuhan jangan biarkan aku mulai
Saya pernah memiliki dekan cs di universitas terkemuka yang memberi tahu saya bahwa pemrograman berorientasi objek hanyalah 'iseng' sehingga mereka tidak menawarkan kelas apa pun secara sepintas lalu seperti C ++
tentang mengapa mereka tidak mengajarkan hal-hal ini, yah, perguruan tinggi ada di sana untuk mengajari Anda dasar-dasar disiplin ilmu, belum tentu praktik terbaik industri
sumber
Masalahnya dengan universitas adalah mereka perlu mengajarkan hal-hal yang benar-benar universal. Sesuatu seperti pengembangan tangkas masih cukup baru dan meskipun banyak dibicarakan di Internet, hal itu tidak digunakan di mana-mana sehingga mengajarkannya kepada seluruh siswa hanya berpotensi menguntungkan beberapa orang yang mendarat di toko tangkas.
Kontrol versi bagaimanapun adalah sesuatu yang saat ini tidak dapat dimaafkan. Itu adalah sesuatu yang setiap orang perlu pahami bahwa ini adalah alat yang hampir sama bermanfaatnya dengan kompiler dan CVS telah ada selama sekitar 20+ tahun. Konsep tersebut setidaknya perlu dipahami oleh setiap programmer yang meninggalkan universitas. Untungnya jika Anda melakukan kerja kelompok di universitas, Anda mungkin cukup beruntung untuk bertemu dengan seseorang yang sudah tahu tentang kontrol versi dan meyakinkan kelompok Anda untuk menggunakannya. Saya tahu saya senang orang itu ada di grup saya.
Pengujian unit juga tidak bisa dimaafkan. Satu-satunya hal yang akan saya katakan di sana adalah bahwa buku ini masih dalam pengembangan yang didorong oleh pengujian dan menggunakan cakupan kode 100% terkadang bisa menjadi lebih banyak masalah daripada nilainya. Tetapi pengujian unit sangat berharga dan harus tercakup dalam kursus rekayasa perangkat lunak. Saya membayangkan bahwa beberapa dari hal ini berhasil masuk ke beberapa universitas tetapi belum menjangkau semuanya.
sumber
Kenapa tidak? Pengalaman saya mendapatkan gelar CS saya kurang lebih sama. Alasannya adalah bahwa orang yang mengajar pemrograman tidak memprogram, sejauh yang saya tahu. Tidak diwajibkan untuk mengajarkan hal itu untuk akreditasi, para guru tidak terbiasa dengannya, dan siswa tidak pernah mengembangkan proyek yang penting sebagai bagian dari tugas kursus mereka. Tidak ada motivasi untuk benar-benar mengajar pemrograman, dibandingkan dengan mengajarkan teori CS atau sintaks Java.
sumber
Ilmuwan komputer mengira mereka adalah ahli matematika bukan insinyur dan karena itu mereka lebih suka mengajar bagian matematika daripada bagian teknik. Pengujian, kontrol versi, dan dokumentasi tidak lagi melewati mode seperti dalam disiplin teknik lainnya.
sumber
Itu tergantung universitas. Saya lulus pada tahun 2003, dari universitas Australia. Pada saat itu kami mempelajari UML, Unit Testing, XP (dan Metodologi Agile lainnya), bersama dengan semua hal formal seperti Z, Algoritma dan Struktur Data, Sistem Operasi, dll.
Mereka tidak membahas pengujian unit dengan sangat rinci, lebih banyak hanya membayarnya lewat layanan untuk satu kuliah. Akan sangat bagus untuk belajar bagaimana menulis tes unit yang efektif, daripada hanya "Apa itu unit test".
Sejauh menyangkut kontrol versi, kami telah menggunakannya (CVS) dalam proyek pemrograman kami dari tahun ke-2 dan seterusnya.
Saya sangat setuju dengan apa yang dikatakan Glyph juga. Ilmu Komputer adalah bidang yang belum matang, benar-benar hanya ada dalam 50 tahun terakhir, sehingga kami tidak tahu apa yang harus kami pelajari dan apa yang hanya iseng saja. Beri waktu 150 tahun, maka hal-hal mungkin akan lebih tenang. Banyaknya proyek dunia nyata yang gagal memperjelas bahwa ini adalah industri yang belum matang. Bayangkan jika 80% proyek pembangunan gagal!
sumber
Semua itu dapat dengan mudah dicakup (dangkal) dalam satu kelas tentang praktik pengembangan perangkat lunak. Itu bukan bagian dari kebanyakan kurikulum Ilmu Komputer, karena itu bukanlah tentang Ilmu Komputer, meskipun menurut saya beberapa liputan tentang hal-hal itu berguna. Sekolah saya memiliki kelas seperti itu; itu tidak mencakup kontrol versi, tetapi mencakup UML, pengumpulan persyaratan, metodologi pengembangan (berbagai agile dan waterfall), pengujian unit, pengujian integrasi, dll., Dan mengharuskan kami untuk bekerja dalam tim beranggotakan 4-5 orang untuk mengembangkan proyek. (Clue rip-off yang agak sederhana di Jawa). Jika Anda merasa perlu untuk kelas Rekayasa Perangkat Lunak lebih lanjut, mereka tersedia sebagai pilihan.
Meskipun tidak pernah memiliki kontrol versi yang disebutkan sekali di kelas mana pun yang saya ambil, sebagian besar teman saya menggunakannya untuk proyek pribadi, tugas kelas, dan sebagainya, jadi bukan seolah-olah kami tidak terpapar padanya. Orang-orang yang tidak mengambilnya sendiri dipaksa untuk menggunakannya oleh teman sekelasnya dalam tugas tim.
Universitas dimaksudkan untuk mengajarkan konsep dan teori, karena itu adalah hal-hal yang sulit Anda pelajari sendiri. Kontrol versi adalah sebuah alat, dan cukup mudah untuk diambil. Gunakan sedikit, baca beberapa tutorial di web, dan Anda sudah siap. Jika Anda membutuhkan kuliah dan pekerjaan rumah untuk mengetahui cara memeriksa sesuatu dari SVN, Anda akan mendapatkan banyak masalah dengan hal-hal yang sebenarnya SANGAT sulit.
Ingatlah bahwa ada banyak cara untuk mempelajari hal-hal di perguruan tinggi di luar kelas; manfaatkan itu. Anda membayar banyak untuk menghadiri kelas dan menggunakan fasilitas, jadi peras untuk semua yang berharga dan pergi ke pertemuan LUG dan ACM, berpartisipasi dalam tim proyek (selalu ada beberapa ME yang membuat robot yang membutuhkan programmer), atau dapatkan pekerjaan yang mengelola server departemen Humaniora. Trashpick komputer dari dok pemuatan gedung Teknik Material, unduh iso Linux dengan koneksi internet asrama cepat Anda, dan bermain-main.
sumber
Saya pikir masalahnya adalah universitas tidak merasa mereka perlu mengajari Anda untuk menjadi seorang profesional, tetapi berfokus pada sisi akademis dari pemrograman. Saya pikir setidaknya harus ada referensi ke metode dan teknik terbaru yang digunakan di industri ini, karena hal-hal ini juga menarik minat akademis.
Dalam kursus kami, kami diajari Proses Perangkat Lunak Pribadi, yang mencakup hal-hal seperti merekam waktu yang dihabiskan untuk proyek, komentar yang baik, dll., Tetapi tidak menyebutkan dasar-dasar profesional seperti kontrol versi.
sumber
Anda telah menyebutkan 3, beberapa di antaranya menurut saya tidak sepenting pemahaman sistem komputer (misalnya kontrol versi). Hal-hal ini adalah bagian dari pekerjaan, dan Anda bisa menjadi programmer / ilmuwan komputer yang baik tanpa perlu mengetahuinya.
demikian pula untuk pengujian unit - mengapa memilih pengujian unit? Tentunya pengujian kegunaan, pengujian sistem, pengujian penerimaan pengguna, dan pengujian penerimaan pabrik lebih penting? Ya, kecuali jika Anda menganggap pekerjaan Anda selesai setelah kode dikirim ke departemen pemeliharaan :)
Pikirkan konsep lain yang saya gunakan setiap hari, yang akan sedikit berguna bagi siswa yang memahami dasar-dasar perangkat lunak dan sistem komputer:
Di atas adalah semua "soft skill" yang Anda tidak perlu menulis kode yang baik.
Namun jika Anda kehilangan keterampilan "keras ', seperti struktur data dan algoritme, maka peluang Anda untuk menulis kode yang baik hampir mustahil.
sumber
Saya mempelajari semua itu di Universitas. Mungkin tergantung pada program studi yang Anda pilih? Kursus saya sangat beragam (Desain Perangkat Lunak, Desain UI, eCommerce, AI, Pemrograman Fungsional, dll.). Desain Perangkat Lunak memiliki paparan pola desain dan pengujian unit (satu proyek besar yang melibatkan berbagai hal). Desain UI ... kami adalah kelompok tiga orang yang mengerjakan sebuah proyek. Kami tidak dapat melakukan apa pun tanpa kontrol versi, jadi kami mendapatkannya. Dan pengembangan yang gesit adalah sesuatu yang terus-menerus diberitahukan oleh profesor kami kepada kami, tetapi mereka menyerahkannya kepada setiap kelompok untuk menggunakannya.
Saya menemukan bahwa banyak mahasiswa Universitas mengambil kursus "mudah" atau kursus yang akan mereka beri IPK tinggi. Yang lain fokus pada apa yang ingin mereka pelajari dan sebagian besar mengeksplorasi untuk menemukan bidang apa yang menarik bagi mereka. Dan kemudian ada orang yang tahu persis apa yang mereka minati ... yang bagus, kecuali mereka cenderung tidak mendiversifikasi kursus mereka.
sumber
Untuk menjawab mengapa hal-hal ini bukan hal pertama yang diajarkan: Program sarjana biasanya melatih Anda untuk menjadi siswa Master. Hanya setelah Anda mulai memilih kursus Anda sendiri (yang biasanya terjadi di tahun-tahun berikutnya) Anda dapat memilih untuk mempelajari hal-hal yang digunakan di luar akademisi. Inilah mengapa mereka fokus pada algoritme, struktur data, menyajikan kepada Anda masalah yang belum terpecahkan, dll.
Saya pribadi berpikir tidak apa-apa jika mereka melakukan ini. Pemrograman tidak semudah yang kita bayangkan; banyak orang bergumul dengannya. Saya lebih suka orang-orang ini terlebih dahulu memahami cara kerja for loop sebelum mencari tahu monster Perforce itu.
sumber
Mereka tidak mengajarkan topik seperti itu karena kebanyakan sekolah bersifat akademis, bukan perdagangan. Artinya, mereka dirancang untuk mengajarkan ide dan teori, bukan melatih Anda untuk berkarir. Seluruh konsep QA tidak ada hubungannya dengan ilmu komputer selain melewati bukti matematis. Selain itu, praktik QA dan alur kerja pengembangan sangat berbeda dari satu rumah pengembangan ke rumah lainnya, jadi mengajar mereka di sekolah hanya membuang-buang waktu dan uang Anda.
sumber
Saya mempelajari semua hal itu di tahun pertama, dengan pengecualian pengembangan yang gesit.
Ini semua tentang memilih sekolah yang tepat, IMHO. Jika Anda masuk 10 besar, Anda akan mempelajari semua hal itu dengan cepat.
Sejauh Pendidikan Ilmu Komputer secara umum, pada dasarnya kami meminta profesor untuk mengajar begitu banyak (bahasa dari setiap jenis, struktur data, efisiensi waktu kerja, bagaimana hal-hal sebenarnya bekerja pada tingkat bit). Saya ingin mengajukan pertanyaan, Mengapa anak-anak tidak mengambil tanggung jawab sendiri untuk mempelajari lebih lanjut tentang Rekayasa Perangkat Lunak?
sumber
Sama seperti pelajar, setiap perguruan tinggi berbeda. Beberapa perguruan tinggi, atau lebih tepatnya, beberapa profesor tahan terhadap perubahan atau malas. Untungnya kebanyakan tidak. Teori, konsep, sejarah, dll. Adalah penting dan vital untuk kurikulum Ilmu Komputer. Tetapi begitu juga dengan mempersiapkan siswa untuk lingkungan kerja mereka. Tidak mengherankan, community college di daerah saya menawarkan kursus Ilmu Komputer terkini dan dapat diterapkan. Tidak terlalu banyak dengan universitas besar, mapan, dan bergengsi.
sumber
Ini hanya karena struktur data dan algoritme merupakan inti komputasi dan karenanya jauh lebih penting. Pengujian unit, kontrol versi, dan metodologi tangkas hanyalah alat perdagangan (dan jika perlu, diharapkan dapat digunakan saat bekerja).
sumber
Menurut saya, program Ilmu Komputer yang baik harus mengajarkan dasar-dasar yang akan menjadi dasar Anda untuk semua pendidikan pemrograman di masa mendatang. Metodologi pengembangan seperti Agile, dan alat kontrol versi seperti mode; mereka datang dan pergi. Juga, mereka cenderung digunakan dalam pengaturan industri dan bukan akademis, jadi saya pikir jarang universitas membahas hal-hal seperti yang mungkin akan Anda pelajari saat bekerja. Saya tidak mengatakan itu benar, tapi itu mungkin mentalitas akademis.
sumber
Saya setuju dengan apa yang Anda katakan. Saya baru saja mulai bekerja di dunia pengembangan perangkat lunak dan saya sudah mulai belajar tentang pengembangan tangkas, sesuatu yang tidak pernah saya ajarkan di universitas.
Faktanya mungkin para profesor universitas tidak mengikuti teknik pengembangan yang lebih baru sebanyak yang seharusnya. Mereka juga mungkin merasa ada hal lain yang lebih penting dalam kurikulum mereka.
sumber
Dosen universitas tidak tahu tentang cara menulis perangkat lunak, mereka hanya menelitinya, mengajarkannya, dan kadang-kadang mengeluarkan beberapa kode yang hanya harus berfungsi sampai makalahnya diterbitkan.
Hanya karena orang-orang seperti Titus kami mendapatkan akademisi yang benar-benar pemrograman grok - Baca komentarnya tentang topik itu di sini
Ketika saya masih menjadi siswa saya membaca buku di perpustakaan tentang Pemrograman Ekstrim, dan kami membahasnya secara singkat di kelas - kelas yang sama yang menuntut agar kami menyesuaikan diri dengan "Model Air Terjun" dari pengembangan perangkat lunak, di mana "kompilasi" adalah langkahnya sendiri.
Semua yang terbaik dalam karir Anda, saya harap Anda lulus gelar, senang memiliki huruf setelah nama Anda. :)
sumber
Ketiga hal yang Anda sebutkan (pengujian unit, kontrol versi, pengembangan tangkas) diajarkan sampai tingkat tertentu dalam program Ilmu Komputasi Universitas Groningen. Apakah itu hal yang baik atau tidak, saya akan tinggalkan sebagai pertanyaan terbuka; tetapi tidak benar bahwa tidak ada universitas yang mengajari Anda "hal-hal praktis".
sumber
Ini didasarkan pada pengalaman saya yang terbatas dalam program CS sebelum saya beralih jurusan, dan pengalaman saya sebagai magang di perusahaan perangkat lunak besar. Pengujian unit tidak diajarkan karena sebagian besar program yang harus Anda buat tidak cukup besar untuk memerlukan pengujian otomatis, Anda memerlukan serangkaian input tertentu sehingga dapat menguji semuanya secara manual. Mengajari Anda cara mengotomatiskan pengujian juga dapat mengganggu penilaian proyek Anda karena sebagian besar proyek dinilai dengan skrip yang menjalankan pengujian otomatis, dengan sekilas melihat kode untuk memastikan Anda tidak memiliki int foo1; int foo2; dan Anda menggunakan lekukan yang tepat.
Saya tidak tahu mengapa kontrol versi tidak akan diajarkan tetapi sebagian darinya mungkin adalah ukuran proyek. Saya tidak pernah memiliki proyek yang cukup besar untuk kontrol versi, dan maksud saya lebih dari 1000 baris kode dan membutuhkan waktu satu semester untuk menulis. Saya kira mereka mengira Anda akan mengajarkannya kepada diri Anda sendiri jika Anda membutuhkannya. Setiap proyek kelompok yang saya miliki seharusnya merupakan proyek pemrograman berpasangan, dan mengapa menggunakan kontrol versi jika Anda berdua berada di komputer yang sama?
Saya tidak tahu mengapa pengembangan tangkas tidak akan diajarkan tetapi mungkin kembali ke hal yang sama dengan ukuran program. Sementara pengembangan adgile adalah umum dengan perangkat lunak baru yang berjalan di komputer pribadi dan server kecil, ini umumnya tidak digunakan pada sistem seperti mainframe IBM atau dalam domain bermasalah seperti perbankan atau medis di mana dokumentasi adalah rajanya. Mungkin juga ada hubungannya dengan fakta bahwa perkembangan adgile tidak sekitar 20 tahun yang lalu ketika banyak profesor dilatih.
sumber
Alasan utamanya adalah bahwa banyak (sebagian besar?) Universitas menganggap dirinya memiliki tujuan yang berbeda dari sekolah perdagangan. Karena itu, mereka ingin mengajari siswa cara belajar , dan asas-asas dasar disiplin. Selain itu, algoritme dan struktur data akan berlaku untuk bahasa pemrograman apa pun, dan tidak bergantung pada alat tertentu (yang mungkin atau mungkin masih digunakan saat kelulusan).
Dalam Ilmu Komputer, itu berarti algoritma, struktur data, teori komputer, teori penyusun, dll. Hal-hal yang Anda cantumkan kurang tentang memahami cara memprogram, cara memecahkan masalah, dll. Ini tentang praktik pemrograman (yang, kebetulan, adalah buku yang luar biasa untuk siapa saja di perguruan tinggi dengan tujuan bekerja sebagai programmer). Sekarang, banyak dari ini tidak akan digunakan pada posisi kode monyet tingkat awal, membuat beberapa orang berpikir itu tidak berguna. Saya tidak setuju. Saya pikir ini bisa sangat berguna. Namun, itu tidak berarti bahwa setelah Anda mendapatkan gelar CS, Anda tahu semua yang Anda perlukan untuk bekerja sebagai programmer.
Yang juga tidak berarti bahwa hal-hal yang Anda sebutkan tidak berguna. Mereka. Anda akan kesulitan bekerja sebagai programmer jika Anda tidak mempelajarinya, dan saya pikir mereka harus diajarkan di perguruan tinggi, setidaknya sampai batas tertentu. Saya akan melihat pengajaran kontrol versi, pengujian unit, dll, dengan cara yang sama saya akan melihat program sarjana dalam seni, dan pengajaran tentang kuas cat dan mana yang harus digunakan untuk berbagai kasus.
sumber
Menurut saya itu tergantung dari jenis program Ilmu Komputer yang Anda ikuti, ada yang mengarah ke sisi Riset dan Sains dan ada yang mengarah ke sisi Implementasi. Saya secara khusus menolak sekolah tertentu yang hanya memiliki profesor yang bertahan di dunia akademis. Jika Anda tidak memiliki profesor yang belum "menggunakan" apa yang mereka ajarkan, itu semua ada di kepala mereka, secara harfiah.
Plug: Setelah mengambil BS di Comp Sci dan MS di Soft Eng di DePaul University, saya kebanyakan diajar oleh instruktur / profesor yang mengajar paruh waktu, yang baik-baik saja oleh saya karena saya lebih suka mereka datang dengan anekdot dari hari sebelumnya dan menghubungkannya dengan kelas. Juga sekolah ini sebagian besar komuter / paruh waktu, sebagian besar siswa memiliki pekerjaan dalam menggunakan apa yang mereka pelajari.
Proses pembelajaran masih dimulai dengan semua teori, tetapi kemudian kita biasanya ditanya "berapa banyak dari Anda yang benar-benar menggunakan ini dalam pekerjaan Anda?" dan jawaban tipikal adalah "kami menggunakannya tetapi dengan cara yang dipreteli atau lebih sederhana" dan kemudian kami masuk ke skenario dunia nyata yang praktis.
Selama pengujian unit sekolah saya selalu ada. Meskipun mereka memulai Anda di Java, mereka meminta kami menggunakan ANT dan JUnit untuk semua proyek. Yang merupakan awal yang baik dalam konfigurasi build dan pengujian unit.
Dan Programing Ekstrim termasuk dalam sekitar 3 atau 4 kelas yang saya ambil. Saya ingat mereka semua memulai dengan 12 aspek yang berbeda, dari program pasangan sampai pengujian unit (lihat di atas). Dan sekarang sepertinya fokusnya ada pada Agile.
Jadi jawaban singkatnya adalah ya, ada sekolah di luar sana yang memiliki pendekatan yang lebih pragmatis daripada yang lain.
sumber
Pengujian unit dan kontrol versi keduanya diajarkan di kursus Ilmu Komputer tahun ke-2 di mana saya kuliah. Pengujian unit berada di bawah bagian pengujian yang juga mencakup perbedaan antara kotak putih dan kotak hitam dan sebagian besar nilai dalam tugas pemrograman tahun ke-3 menggunakan penanganan kesalahan yang baik yang dapat dengan mudah berasal dari pengujian unit.
Pengembangan tangkas mungkin agak sulit untuk diajarkan dalam lingkungan akademis menurut saya. Sementara saya belajar tentang metode Waterfall dalam teori, saya tidak bisa melihatnya di lapangan sampai saya lulus dan pindah ke dunia nyata yang bisa sangat berbeda dari akademisi, misalnya di tahun ke-3 saya melakukan semua kesalahan ganjil kasus dan hampir lulus tugas di mana saya tidak pernah menyentuh inti dari apa yang tugas itu coba ajarkan kepada saya tentang Semaphores.
Juga, sudah berapa lama agile ada dan bentuk agile mana yang kamu maksud? Ada banyak implementasi berbeda dari apa yang saya lihat.
sumber
Menurut saya, pemrograman tangkas bukanlah mode, tetapi pada saat yang sama saya akan kesulitan memikirkan cara seorang guru dapat memberi Anda proyek untuk memungkinkan Anda mempelajarinya .. Kecuali jika mereka memberi Anda proyek A build a, proyek B memperluas a. Masalahnya adalah waktu dan ruang lingkup. Dalam kursus 4 bulan itu akan sulit.
Kontrol versi dan metode pengujian unit selalu berubah dan bergantung pada bahasa, atau orang yang mendefinisikannya.
Struktur data dan algo adalah sesuatu yang dapat dikerjakan dalam pengaturan kelas. Sejujurnya juga, mereka membutuhkan lebih banyak upaya untuk memahami pengujian unit dan pembuatan versi. Cobalah untuk mengingat bagian dari universitas adalah mengajari Anda untuk mengajar diri sendiri. Kolase tidak memiliki mandat yang sama. Atau setidaknya tidak pada tingkat yang sama. MENURUT OPINI SAYA.
sumber