Subjek / teori CS mana yang paling sulit yang Anda pelajari tetapi penting untuk bidang ini? Dan alasannya tolong?
Subjek / teori CS mana yang paling sulit yang Anda pelajari tetapi penting untuk bidang ini? Dan alasannya tolong?
Jawaban:
“Ada 2 masalah sulit dalam ilmu komputer: caching, penamaan, dan kesalahan off-by-1”
Jujur, konstruksi kompiler!
Desain & Analisis Algoritma
Saya pikir pertanyaan itu tergantung pada guru yang Anda miliki, dan bagaimana mata pelajaran itu diatur dalam karier Anda.
Menganalisa algoritma bisa sesulit yang diinginkan seseorang. Perhatikan bahwa ada masalah yang tidak terpecahkan, dan tidak hanya itu: masalah yang tidak dapat diselesaikan.
Masalahnya adalah bahwa Anda dapat memiliki masalah, dan jika Anda tahu itu tidak dapat diselesaikan, itu sempurna. Tetapi bagaimana jika Anda tidak melakukannya? Anda dapat menghabiskan banyak waktu untuk mendemonstrasikan NP-Complete, atau mencoba mencari solusi waktu polinomial untuk menyelesaikannya.
Memperagakan NP-Completness tidak mudah. Ya, banyak masalah diketahui, tetapi masalahnya adalah menemukan pengurangan untuk menunjukkan bahwa itu NP-Lengkap. Dan bagaimana jika Anda menghabiskan banyak jam / hari / bulan mencoba menunjukkannya, dan itu dapat diselesaikan dalam waktu polinomial? :)
Ada juga mata pelajaran lain, seperti Penyusun , teori Grup dan Fungsi Rekursif Primitif yang dapat sekeras rencana pelajaran atau yang diinginkan guru;)
Pengenalan Pola yaitu Kecerdasan Buatan. Ini mengacu pada komputasi pintar bersama dengan alat pengenalan pola lain seperti, Pengenalan Karakter Optik, Suara ke teks, identifikasi wajah, dll.
Banyak hal "keren" yang dapat Anda lakukan atau berharap Anda bisa lakukan dengan komputer mengandalkan algoritma ini, dan kami telah berusaha untuk menyempurnakannya selama beberapa dekade tanpa banyak keberhasilan.
Pilihan saya adalah teori komputabilitas
(Hmm ... mungkin itu tidak penting, tapi itu pasti sulit)
Hanya ada dua masalah sulit dalam Ilmu Komputer: pembatalan cache dan penamaan hal-hal. - Phil Karlton
teori kategori (matematika diskrit), tetapi sepadan
Kriptografi
Jika Anda melakukannya hanya sedikit salah, itu bisa menelan biaya jutaan perusahaan.
Sistem Operasi, terutama bagian yang ada hubungannya dengan threading.
Dan alasannya bukan karena sulitnya membuat 5 filsuf makan pizza dengan garpu. Alasannya adalah karena menulis kode multithread dengan sendirinya sulit dan belum tentu mudah untuk dihitung oleh manusia (setidaknya laki-laki - menurut istri saya).
Saya juga memilih Desain Kompiler. Terutama di mana bagian DFA dan NFA masuk. Saya juga tidak begitu jelas tentang masalah dan hal-hal NP.
Yah secara teknis ini adalah cabang matematika, tetapi sangat relevan dalam CS.
Hampir semuanya dalam CS didasarkan pada antrian (terlihat (jelas) dan tidak terlihat (tidak begitu jelas atau tersirat)).
Pada hari-hari awal CS antriannya jelas.
Antrian program (setiap program setumpuk kartu).
Saat ini antrian tidak begitu jelas. Internet misalnya: jaringan packet switched, tetapi paket membentuk antrian dan merutekan paket adalah bentuk minimalisasi antrian.
Ini tidak terlalu sulit pada masalah mainan yang Anda berikan dalam kursus, tetapi begitu Anda mulai mempertimbangkan masalah nyata itu berubah menjadi pekerjaan yang serius.
Menafsirkan persyaratan klien ketika klien tidak benar-benar tahu apa yang mereka inginkan. Ini tidak diajarkan di perguruan tinggi, dan merupakan salah satu keterampilan yang paling penting untuk dimiliki.
Secara pribadi, milik saya adalah Formal Logic. Memang sulit untuk memulainya, tetapi begitu Anda menurunkan aturan dan berhasil bermain dengan cukup, otak Anda bergerak Logic++;
, yang dalam perkembangannya adalah hal yang sangat baik.
Sebagai catatan tambahan, saya menjawab pertanyaan secara langsung - ini jelas bukan subjek yang paling sulit ketika saya meraih gelar saya, tapi mungkin itu subjek "kehidupan nyata yang paling sulit diterapkan".
Konstruksi Kompiler. Sulit tetapi harus memahami konsep di belakang
Desain Kernel siapa saja? Yah saya tidak benar-benar tahu bagaimana hal itu dilakukan dan apa fitur yang ditargetkan untuk OS, tetapi bagi saya berpikir tentang mendesain kernel harus menjadi tugas yang menakutkan.
Saya juga memikirkan keamanan komputer ; Saya tidak benar-benar tahu apa yang membuat sistem tidak aman kecuali tentu saja, buffer overflows yang jelas, injeksi XSS dan SQL.
Saya tidak yakin, tetapi tampaknya beberapa algoritma juga tidak aman; lihat proyek MetaSploit, ia mencantumkan semua jenis dan jenis pelanggaran keamanan: Anda dapat melihat ada banyak cara suatu program dapat cacat.
Ada banyak topik canggung di lapangan, tetapi pilihan saya untuk kesulitan terus-menerus semata-mata adalah yang melibatkan Properti Sistem Global . Contoh dari topik umum ini meliputi:
Ini sulit karena Anda mencari sesuatu yang hanya ada ketika semuanya sudah benar; Anda memerlukan properti sistem global dan hampir semua alat yang tersedia (dan semua yang berskala ke masalah nyata dalam pengalaman saya) hanya benar-benar melakukan penalaran lokal. Ini adalah proses untuk beralih dari pemikiran tentang potongan-potongan program ke seluruh shebang yang sulit, terutama karena sangat mungkin untuk memiliki potongan-potongan yang semuanya benar dalam diri mereka sendiri tetapi di mana masih ada bug halus karena komponen-komponennya disusun secara tidak benar; bug dapat muncul karakteristik yang tidak diinginkan ...
Layanan Informasi Manajemen
Selama masa kuliah saya dulu memiliki satu mata pelajaran manajemen setiap semester yang benar-benar membuat saya marah.
Sulit! baik mata pelajaran seperti Desain Kompiler , Desain OS dll sulit tetapi mereka benar-benar menarik dan menantang. Saya benar-benar kacau dalam mata pelajaran seperti Sistem Informasi Manajemen / Layanan dll karena mereka penuh dengan kebosanan dan Anda harus melalui banyak teori.
Jika Anda bekerja dalam pointer C / C ++ adalah konsep yang paling penting untuk diketahui. Tetapi entah bagaimana saya tidak pernah memahaminya sepenuhnya di perguruan tinggi.
Desain dan Analisis Algoritma. Tidak terlalu sulit untuk dipahami dan dianalisis algoritma yang diketahui , itu adalah bahwa merancang dan menganalisis algoritma baru untuk masalah sulit sulit, dan membutuhkan pemahaman luas tentang banyak bidang dan praktik dalam menerapkan banyak teknik berbeda.
Subjek / teori CS mana yang paling sulit yang Anda pelajari tetapi penting untuk bidang ini?
Matematika diskrit.
Itu sulit karena teori-teori sangat longgar terkait satu sama lain tetapi mereka digunakan dalam CS. Terlalu banyak hafalan kurasa ...
Bukti oleh Induksi, Big O, rekursi, bagi dan konqure, Teori Grafik, bla bla .. argh!
Kompiler bagi saya mudah, karena kami harus mengambil Teori Automata. ^^
Saya suka jawaban Anda (dan saya tidak lupa memperbaikinya), seperti kompiler, kernel, dll., Tetapi sebagian besar programmer tidak pernah menemui masalah ini. Ada sedikit lebih mudah, tetapi masalah yang lebih umum: konkurensi - utas, mengunci. Sangat mudah untuk menulis sebuah program yang menghasilkan kesalahan magis, jika kita membuat bug kecil dalam arsitektur concurrency.
Jadi, saya katakan, ini bukan masalah tersulit dalam komputasi, tetapi karena ini biasa digunakan, ini adalah masalah yang berbahaya.
Pemrograman berorientasi objek
Itu mungkin karena saya memotong gigi pada FORTRAN dan APL, tetapi pergeseran dari bahasa yang sangat prosedural ke objek telah menjadi sesuatu yang saya perjuangkan selama bertahun-tahun. Itu tidak membantu yang disebut 'ahli' menulis artikel dan tutorial yang bertentangan tentang apa artinya menjadi berorientasi objek dan cara terbaik / tepat untuk membangun program berorientasi objek.