Pertanyaan: Apakah sains dan seni CS mati? Maksud saya, persyaratan nyata untuk berpikir, merencanakan dan menyelesaikan masalah secara efisien tampaknya jauh dari CS saat ini. Lapangan tampaknya menurunkan entry-barrier sehingga lebih banyak orang dapat 'memprogram' tanpa harus belajar bagaimana memprogram dengan benar.
Latar belakang: Saya lulusan baru dengan gelar BS dalam Ilmu Komputer. Saya bekerja pada posisi awal di sebuah perusahaan berukuran layak di departemen TI. Saya kebanyakan melakukan .NET dan teknologi Microsoft lainnya di pekerjaan saya, tetapi sebelum ini saya telah melakukan hal-hal Java melalui magang dan sejenisnya. Saya pribadi adalah seorang programmer C ++ untuk proyek-proyek menyenangkan saya sendiri.
Dalam Kedalaman: Melalui pekerjaan yang telah saya lakukan, bagi saya tampaknya bahwa disiplin ilmu sains yang nyata tidak ada lagi di CS. Di masa lalu, programmer harus menyelesaikan masalah secara efisien agar sistem menjadi kuat dan cepat. Tetapi sekarang, dengan teknologi yang berlaku seperti .NET, Java dan bahasa scripting, sepertinya efisiensi dan ketahanan telah diperjualbelikan untuk kemudahan pengembangan.
Sebagian besar kolega yang bekerja dengan saya bahkan tidak memiliki gelar di bidang Ilmu Komputer. Sebagian besar lulus dengan gelar Teknik Elektro, beberapa dengan Rekayasa Perangkat Lunak, bahkan beberapa yang berasal dari sekolah teknologi tanpa program 4 tahun. Namun mereka mendapatkan dengan baik tanpa memiliki latar belakang teknis CS, tanpa mempelajari teori dan algoritma, tanpa memiliki perhatian untuk membuat solusi elegan (mereka hanya pergi untuk solusi termudah, termurah).
Perusahaan mendorong kami untuk menggunakan teknologi Microsoft, yang mengambil semua pemikiran nyata dari masalah ini dan menggantinya dengan perpustakaan dan alat yang dapat membangun proyek Anda secara otomatis untuk Anda separuh waktu. Saya tidak mencoba membenci bahasa, saya mengerti bahwa mereka melayani tujuan dan melakukannya dengan baik, tetapi ketika karyawan Anda tidak tahu bagaimana hash-table bekerja, dan menggunakan metode penyortiran yang salah, atau menjalankan perintah SQL yang sangat tidak efisien (tetapi menyelesaikan pekerjaan dalam waktu yang dapat diterima), rasanya seperti lebih banyak upaya dilakukan untuk mengembangkan teknologi yang memanjakan 'programmer' baru daripada benar-benar mengajar orang bagaimana melakukan sesuatu dengan benar.
Saya tertarik untuk membuat program yang efisien dan, menurut saya, indah. Jika ada cara yang lebih baik untuk melakukannya, saya lebih suka kembali dan memperbaiki daripada membiarkannya meluncur. Tetapi di dunia korporat, mereka mendorong saya untuk menyelesaikan tugas dengan cepat daripada dengan elegan. Dan itu benar-benar menggangguku.
Apakah ini yang akan saya nantikan seumur hidup saya? Apakah masih ada posisi di luar sana untuk orang-orang yang menyukai ilmu dan seni CS daripada hanya gaji?
Dan dengan catatan yang sama, inilah bacaan yang bagus jika Anda belum pernah melihatnya di The Perils Of Java Schools
sumber
Jawaban:
Iya dan tidak
Pertanyaan bagus, tapi asumsi buruk.
Bagian sains dari pendidikan memang tampaknya kurang, tetapi asumsi bahwa sains ada di sana hanya untuk membuat program menjadi efisien adalah salah arah.
Ilmu itu diperlukan untuk mengajar orang bagaimana mendefinisikan dan memecahkan masalah.
Sayangnya, bagian dari beberapa kurikulum "CS" ini (kurikulum?) Tampaknya dihilangkan sepenuhnya, digantikan oleh masalah mainan dengan solusi sepele atau yang diketahui, dan dimaksudkan hanya untuk mengajarkan keakraban dengan alat.
Mengecewakan; banyak lulusan sekolah Jawa yang mengalami kekurangan, tidak pernah diajarkan cara menguraikan masalah, merancang algoritma, menentukan tes, atau bahkan men-debug secara efektif.
sumber
Sejujurnya, dua sen saya sendiri: Anda tidak akan menemukan "ilmu" ilmu komputer bekerja di departemen TI di perusahaan berukuran layak, karena itu adalah departemen TI, bukan departemen CS. Coba kembali ke sekolah untuk mendapatkan gelar PhD, atau bekerja di departemen teknik perusahaan yang fokusnya adalah ilmu komputer (misalnya, pemrosesan gambar, jaringan berkinerja tinggi, sistem aljabar komputer, dirgantara, dll ...). Di sinilah Anda akan menemukan masalah yang sulit dan menarik di mana desain ceroboh [umumnya] tidak akan ditoleransi.
Ya, tentu saja, tetapi mungkin tidak di departemen TI perusahaan menengah.
sumber
Jika Anda seorang programmer, jangan menganggap diri Anda seorang "ilmuwan komputer"; ilmuwan komputer adalah orang-orang yang menciptakan generasi komputer berikutnya, beberapa di antaranya masih berupa fiksi ilmiah sampai campuran material yang benar, miniaturisasi, dan teori komputasi diturunkan. Mereka hanyalah awal dari jalur pipa. Orang yang mengembangkan perangkat lunak di sini dan sekarang adalah "insinyur perangkat lunak"; mereka mengambil teori dan alat, kadang-kadang meletakkan teori praktis dan alat dunia nyata di atas, untuk memanfaatkan kekuatan potentia dari sepotong sihir elektrik yang rumit ini dan membuatnya melakukan apa yang kita inginkan. Hal ini pada gilirannya adalah salah satu spesialisasi bidang "teknik komputer", yang mengambil teori-teori para ilmuwan komputer dan menerapkannya, perangkat keras dan perangkat lunak, ke solusi elektronik pengguna akhir dunia nyata.
Inilah, IMO, tempat bisnis bertemu teori. Dalam kasus-kasus seperti ini, pepatah lama "musuh yang lebih baik sudah cukup baik" dapat dengan mudah dibalik untuk membaca "musuh yang cukup baik itu lebih baik". Mempertimbangkan diri Anda sebagai seorang "insinyur" dan bukan "ilmuwan", dan menempatkan apa yang Anda lakukan secara paralel dengan disiplin ilmu teknik lainnya, membuat perbedaan menjadi lega.
Katakanlah seorang klien mendatangi Anda, seorang insinyur sipil / struktural, dan meminta Anda membangun jembatan. Jembatan perlu merentang 20 kaki, menopang dirinya sendiri dan satu ton muatan pengangkut, itu harus bertahan 10 tahun dengan pemeliharaan rutin, dan mereka menginginkannya dalam sebulan seharga $ 20.000. Itu adalah kendala Anda; memenuhi minimum tanpa maksimum. Melakukan itu "cukup baik", dan memberi Anda gaji. Ini akan menjadi rekayasa yang buruk bagi Anda untuk membangun Jembatan Golden Gate, jauh melebihi spesifikasi desain dan anggaran dengan beberapa urutan besarnya. Anda biasanya berakhir dengan penyimpangan biaya dan membayar penalti untuk kelebihan waktu. Ini juga akan menjadi rekayasa yang buruk bagi Anda untuk membangun jembatan tali dengan nilai 5 pria dewasa walaupun biayanya hanya $ 1000 dalam waktu dan bahan; Anda tidak mendapatkan ulasan dan testimonial klien yang baik,
Kembali ke perangkat lunak, misalkan Anda memiliki klien yang membutuhkan sistem pemrosesan file yang dibangun untuk mencerna file yang masuk dan memasukkan informasi ke dalam sistem. Mereka ingin itu dilakukan dalam seminggu dan harus menangani lima file sehari, sekitar 10MB nilai data, karena itu semua lalu lintas yang mereka dapatkan saat ini. Teori-teori berharga Anda sebagian besar keluar dari jendela; tugas Anda adalah membangun produk yang memenuhi spesifikasi tersebut dalam seminggu, karena dengan melakukan itu Anda juga memenuhi anggaran biaya klien (karena bahan umumnya setetes dalam ember untuk kontrak perangkat lunak sebesar ini). Menghabiskan dua minggu, bahkan untuk mendapatkan sepuluh kali lipat, bukanlah suatu pilihan, tetapi kemungkinan besar, tidak ada program yang dibangun dalam satu hari yang hanya dapat menangani setengah dari throughput, dengan instruksi untuk menjalankan dua salinan.
Jika Anda berpikir ini adalah kasus pinggiran, Anda salah; ini adalah lingkungan sehari-hari sebagian besar in-housers. Alasannya adalah ROI; program awal ini tidak memerlukan biaya banyak dan dengan demikian akan membayar sendiri dengan sangat cepat. KETIKA para pengguna akhir membutuhkannya untuk melakukan lebih banyak atau lebih cepat, kodenya dapat di refactored dan diskalakan.
Itulah alasan utama di balik keadaan pemrograman saat ini; asumsi, yang ditanggung oleh seluruh sejarah komputasi, adalah bahwa suatu program TIDAK PERNAH statis. Itu akan selalu perlu ditingkatkan dan pada akhirnya akan diganti. Secara paralel, peningkatan konstan komputer tempat program dijalankan memungkinkan penurunan perhatian terhadap efisiensi teoretis, dan peningkatan perhatian pada skalabilitas dan paralelisasi (suatu algoritma yang berjalan dalam waktu N-squared tetapi yang dapat diparalelasikan untuk berjalan pada N core akan muncul linier, dan seringkali biaya lebih banyak perangkat keras lebih murah daripada pengembang untuk menemukan solusi yang lebih efisien).
Selain itu, ada prinsip yang sangat sederhana bahwa setiap baris kode pengembang adalah sesuatu yang lain yang bisa salah. Semakin sedikit yang ditulis pengembang, semakin kecil kemungkinan bahwa apa yang ditulisnya memiliki masalah. Ini bukan kritik atas "tingkat bug" siapa pun; itu adalah pernyataan fakta yang sederhana. Anda mungkin tahu cara menulis MergeSort ke belakang dan ke depan dalam 5 bahasa, tetapi jika Anda hanya menggunakan satu pengidentifikasi dalam satu baris kode, seluruh Urutan tidak berfungsi, dan jika kompiler tidak menangkapnya, Anda dapat melakukannya jam untuk debug itu. Bandingkan dengan List.Sort (); itu ada di sana, efisien dalam kasus umum, dan, inilah yang terbaik, itu sudah berfungsi.
Jadi, banyak fitur platform modern, dan prinsip metodologi desain modern, dibangun dengan pemikiran ini:
sumber
Tampak bagi saya bahwa Anda melakukan IT dan bukan CS dan seharusnya tidak menyiratkan bahwa CS sudah mati. CS tidak mati, hanya saja sebagian besar pekerjaan dalam pengembangan Perangkat Lunak. Karena sebagian besar siswa CS belajar memprogram, mereka biasanya mempekerjakan sebagai programmer dan bukan sebagai ilmuwan komputer. Pekerjaan Ilmu Komputer sangat kecil dibandingkan dengan pekerjaan pemrograman. Anda bahkan mungkin melakukan aplikasi yang kompleks menggunakan teknik ilmu komputer, tetapi menurut saya (dan saya tidak suka pendapat-jawaban karena mereka subjektif), yang jatuh di kamp rekayasa daripada kamp ilmuwan.
Juga, kode yang indah dan elegan ada di mata yang melihatnya , tetapi bagi sebagian besar perusahaan / manajer, memiliki desain yang cukup baik dan tepat waktu jauh lebih penting daripada kode yang indah tetapi tidak pernah selesai tepat waktu.
Terakhir, ada dunia nyata dan daratan. Sayangnya, kami mendapatkan gaji dari yang pertama, dan di situlah "ilmu / seni" pengembangan perangkat lunak muncul tentang bagaimana menghasilkan kualitas perangkat lunak yang tinggi dengan kendala waktu / anggaran. Saya merasakan jenis perasaan yang sama dengan yang Anda miliki di awal karier saya. Saya selalu ingin menciptakan "yang terbaik", tetapi segera saya menyadari bahwa "yang terbaik" bukan yang paling efisien atau elegan, tetapi desain yang paling hemat biaya.
sumber
Pertama-tama, Anda salah. "Berpikir, merencanakan, dan menyelesaikan masalah secara efisien" bukanlah ilmu pengetahuan, itu rekayasa. Ilmu pengetahuan lebih banyak tentang mengeksplorasi bidang baru. Dan sebenarnya di dunia akademik orang kurang peduli tentang efisiensi kode, apalagi di industri. Di dunia akademis lebih tentang pembuktian konsep dll.
Tidak, yang Anda uraikan adalah bahwa pengetahuan yang kurang mendalam diperlukan untuk pengembangan perangkat lunak. Yang mungkin benar, jika persyaratannya sama. Namun saat ini, insinyur perangkat lunak diharapkan untuk mengetahui cara menangani multi-threading, komputasi terdistribusi, penskalaan, dll. Mereka diharapkan mengetahui cara memimpin proyek secara efisien. Sebagian besar ini sama sekali tidak ada dalam kurikulum beberapa dekade lalu.
sumber
Saya tidak berpikir apa yang Anda katakan adalah tepat, tetapi Anda memiliki sesuatu dari titik pula. Secara khusus, saya pikir seiring waktu, ilmu komputer dan rekayasa perangkat lunak telah tumbuh terpisah.
Rekayasa perangkat lunak (seperti teknik lainnya) adalah tentang menerapkan sains untuk membangun produk, menyelesaikan masalah, dll. Ilmu komputer terutama tentang penelitian dalam algoritma dan (meskipun bagian ini sering agak dilupakan) bagaimana menerapkan algoritma tersebut (setidaknya dalam beberapa pengertian teoritis - mis., mungkin memperlakukan semua mesin PRAM sebagai setara).
Mempertimbangkan hal itu, saya pikir alasan di balik bifurkasi menjadi jelas: sebagian besar masalah algoritmik yang terlibat dalam sesuatu seperti situs web biasa telah diselesaikan - sebagian besar, sudah lama . Mungkin yang lebih penting, sebagian besar dari mereka telah dipecahkan dengan cukup baik sehingga bagi pengembang web rata-rata, masalahnya hampir sepenuhnya hilang. Misalnya, melakukan pembaruan atom ke database terdistribusi jelas merupakan tugas yang tidak sepele - tetapi pengembang web biasa hanya menulis beberapa SQL, dan tidak memiliki petunjuk (atau kepedulian) tentang berapa banyak penelitian yang diperlukan untuk mengetahui bagaimana membuat pekerjaan. andal.
Pada suatu waktu, pada dasarnya mustahil memisahkan ilmu komputer dari rekayasa perangkat lunak. Begitu sedikit masalah yang telah dipecahkan sehingga penulisan bahkan suatu program yang relatif sepele memerlukan penelitian terhadap dasar-dasarnya. Jika Anda ingin melakukan sesuatu yang sederhana seperti menyortir sekelompok data di akhir tahun 50-an atau awal 60-an, kemungkinannya cukup baik bahwa Anda akan harus melakukan beberapa analisis data Anda, dan mencoba merancang sebuah algoritma yang sesuai dan sebaik mungkin dengan apa yang diperlukan untuk mengurutkan data tertentu - tidak ada yang dekat dengan banyak algoritma pengurutan yang dikenal seperti saat ini, dan bahkan algoritma yang dikenal tidak dikenal hampir sebaik mereka sekarang. .
50 tahun penelitian dan pengembangan telah membuahkan hasil - pengembangan yang paling khas dapat menggunakan tidak hanya algoritma yang dikenal, tetapi implementasi pra-tertulis. Sebagian besar masalah dapat diselesaikan dengan cukup masuk akal berdasarkan pengetahuan yang ada (dan bahkan implementasi yang ada) dari algoritma.
Itu tidak berarti ilmu komputer mati - masih ada lebih banyak algoritma untuk penelitian, dan orang-orang melakukan penelitian ke dalamnya. Namun, ini berarti bahwa sebagian besar penelitian lebih terspesialisasi, dan hanya mungkin berlaku untuk bidang yang cukup khusus. Mungkin juga ada "kesenjangan" yang lebih besar antara memperoleh dan menerapkan pengetahuan. Pada suatu waktu, Anda menemukan cara yang lebih baik untuk menyortir dalam proses menulis program penyortiran, dan itu ditulis ke dalam kode nyata segera. Sekarang banyak ilmu komputer dikhususkan untuk hal-hal seperti bagaimana menggunakan prosesor yang pada dasarnya tak terbatas - yang mungkin akan berguna suatu hari nanti, tetapi bahkan suku primitif tidak akan menghitung dual core di komputer saya sebagai "banyak" ... :-)
sumber
Pengembangan perangkat lunak dan ilmu komputer bukan hal yang sama, dan saya menemukan bahwa sebagian besar teman sekelas saya dalam B.Sc. Program Comp Sci merasa frustrasi dengan ini.
Saya menganggap perangkat lunak sebagai produk ilmu komputer ... seperti lukisan adalah produk seni visual.
Saya pikir sebagian besar orang dengan gelar CS mendapatkan pekerjaan untuk melakukan pengembangan perangkat lunak, terutama pada tahap awal karir mereka. Saya pikir banyak orang dalam peran ini tetap di sana dan tidak melangkah lebih jauh.
Saya pikir perbedaan mulai muncul ketika masalah atau paradigma baru muncul atau ketika "menampar itu bersama" tidak cukup baik. Siapa yang membangun kerangka kerja atau bahasa baru? Siapa yang duduk dan memalu detail mesin fisika baru? Siapa yang menggunakan teori grafik / transformasi grafik untuk mengeluarkan beberapa siklus per iterasi kinerja dari suatu algoritma?
Saya akan menyelesaikan di mana saya mulai, setuju bahwa ada banyak ilmuwan komputer dalam pengembangan perangkat lunak / peran rekayasa, mungkin tidak memenuhi potensi mereka.
sumber
Anda tampaknya membingungkan ilmu komputer dengan pemrograman dan pengembangan perangkat lunak secara umum. Keduanya tidak sama, bahkan tidak dekat. Terlepas dari apa yang derajat kita katakan, sebagian besar dari kita adalah programmer, bukan ilmuwan komputer. Kecuali jika Anda secara aktif terlibat dalam akademisi di tingkat tinggi maka saya akan bertaruh bahwa Anda tidak benar-benar tahu apa yang sedang terjadi dalam ilmu komputer.
sumber
Saya dapat memberitahu Anda bahwa Ilmu Komputer masih hidup dan sehat. Saya harus menyelesaikan masalah baru setiap hari dan menghasilkan solusi yang efektif dan elegan untuk masalah itu. Saya harus menggunakan keahlian saya sebagai seorang insinyur setiap hari dan menggunakan pengetahuan saya dan kolega saya untuk memecahkan masalah-masalah itu bagi pelanggan kami.
Ini terdengar seperti masalah dengan karyawan dan tentu saja tidak berlaku untuk setiap programmer.
Hanya karena alat yang membuat pekerjaan kita lebih mudah ada, bukan berarti kita tidak seharusnya memahami teknologi yang digarisbawahi, jika kita tidak melakukannya, kita tidak membantu siapa pun dan tentu saja tidak melakukan pekerjaan kita dalam menyelesaikan masalah dengan cara yang benar.
sumber
Anda hanya belum mengerti masalah yang dihadapi. Masalahnya bukan mendapatkan kinerja maksimum - itu mendapatkan kinerja yang cukup untuk aplikasi Anda menjadi responsif dan cukup cepat. Belajar program adalah tentang memecahkan masalah, dengan jumlah uang terkecil.
Saya benci mengatakannya dengan cara ini, tetapi kesan Anda tentang kematian CS hanyalah pra-konsepsi Anda sendiri tentang apa yang harus dilakukan oleh programmer "nyata".
sumber
Baik, mati atau tidak bisa diperdebatkan!
Faktanya adalah bahwa di era teknologi saat ini sebagian besar perusahaan mempekerjakan orang untuk menyelesaikan tugas-tugas jenis alur kerja dunia nyata melalui otomatisasi perangkat lunak. Mereka tidak tertarik pada seberapa elegan atau lebih cepat sebuah program yang dapat Anda tulis, asalkan memungkinkan bisnis untuk mengeksekusi lebih cepat dengan output yang lebih tinggi.
The stres adalah pada output lebih dalam waktu kurang. (Pikirkan komersialisasi tanaman / pangan; pertumbuhan lebih cepat dan lebih banyak dengan biaya lebih sedikit). Hal yang sama terjadi di dunia teknologi (ide baru berikutnya).
Ingat, di zaman sekarang ini, segala sesuatu bergerak lebih cepat daripada sebelumnya karena jumlah dan akses ke pengetahuan daripada di masa lalu. Di masa lalu, output kecil dan lebih baik, keuntungan lebih besar. Sekarang, permainan telah berubah sepenuhnya. Lihat saja hal-hal seperti kualitas layanan pelanggan dan secara umum hal itu tidak bertahan lama.
Keanggunan dan efisiensi penting bagi perusahaan teknologi seperti Google, dll. Walaupun tempat-tempat itu tidak sempurna, tetapi Anda dapat mendekatinya dengan bekerja di salah satu perusahaan itu di tahun-tahun mendatang.
Selalu ada pertukaran dalam hidup. Anda dapat menemukan pekerjaan yang membayar lebih sedikit, di mana Anda memiliki semua waktu dan perhatian. Atau, Anda memilih untuk berenang bersama kami yang lain untuk pembayaran yang lebih baik dan mengabaikan hal-hal yang tidak sempurna. Semakin cepat realisasi ini meresap dalam diri Anda, Anda bisa bersiap diri untuk dunia nyata. Saya tidak mengatakan Anda harus mengabaikan kualitas dan keanggunan tetapi tahu dinamika. Anda akan Lebih Bahagia :)
sumber
Menurut saya beberapa hal yang paling menarik di masa depan mungkin akan didasarkan pada bagian sains dari ilmu komputer, khususnya perbaikan visi komputer / pembelajaran mesin dan algoritma sematisizing lainnya. Ini mungkin akan didorong maju dalam industri (misalnya menggunakan Microsoft Kinect) tetapi merupakan masalah yang sangat sulit, mereka pasti akan didasarkan pada badan besar penelitian dan kemajuan yang dibuat dalam bidang akademik (sekali lagi, ambil Microsoft Kinect).
sumber
Saya pikir pemrograman standar sehari-hari adalah tentang sebanyak seni sebagai ilmu tetapi pasti ada daerah yang sangat tertarik pada aspek-aspek sains dari ilmu komputer. Misalnya peneliti untuk perusahaan dan universitas. Jika Anda benar-benar ingin terlibat dalam ilmu profesional maka Anda harus mencari gelar doktor. Namun, saya menemukan bahwa bagian sains dari pendidikan saya terus bernilai, meski juga harus mengandalkan sisi kreatif saya yang lebih nyata!
Orang-orang yang tidak tahu apa yang mereka lakukan dapat meretas dengan beberapa alat yang Anda sebutkan tetapi mereka biasanya mempekerjakan orang-orang CS yang nyata untuk membuat alat, Anda hanya perlu lebih abstrak untuk benar-benar mendorong diri sendiri.
sumber