+1 Kompiler adalah yang paling sulit dan paling bermanfaat.
dietbuddha
3
Itu di atas sana dengan yang paling atas semua pekerjaan, dan persiapan yang baik untuk coding mendengus, tapi saya tidak berpikir itu semua sulit. Mungkin lebih sulit tanpa menggunakan YACC atau alat apa pun yang kami gunakan, saya tidak tahu.
Peter Turner
4
Kompiler benar-benar hanya sulit karena sebagian besar teorinya berasal dari kendala perangkat keras yang parah dan banyak instruksi formal belum maju terlalu jauh dari itu. Lihatlah Let's Build A Compiler untuk melihat betapa mudahnya penulisan kompiler jika Anda mendekatinya dari sudut yang berbeda.
Mason Wheeler
1
@ Martin York, sebagai penulis kompiler, saya pikir kompleksitas penerapan kompiler terlalu ditaksir. Secara umum, kompiler jauh lebih sederhana daripada seorang juru bahasa. Saya menduga itu adalah Buku Naga dan jenisnya yang harus disalahkan, mereka mengusulkan cara paling rumit untuk melakukan hal-hal sederhana dan terlalu memperhatikan langkah paling tidak penting, yaitu penguraian.
SK-logic
1
@ Martin York, ada teknik menjaga AST sesederhana dan dapat dirawat, tidak peduli seberapa rumit bahasa sumbernya. Juga ada sejumlah teknik yang sangat sederhana tetapi kuat untuk menjaga setiap tahap kompilasi sepele dan terisolasi.
SK-logic
22
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;)
s / Analisis / Analisis ... kalau tidak, apa yang saya pikirkan ... fungsi rekursif primitif, uargh !!
Felix Dombek
Setuju, saya mengacaukan gelar sarjana saya tidak pernah yakin bahwa saya pernah berhasil 'membuktikan' apa pun (meskipun kelas Algoritma saya terlalu sederhana, karena profesor)
Peter Turner
Saya akan tunjukkan pada Anda hari ini, betapa sulitnya algoritme :)
Oscar Mederos
18
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.
Sulit karena itu bukan sesuatu yang deterministik. Mengembangkan pengenalan pola AI yang baik memerlukan eksperimen untuk setiap aplikasi yang ingin Anda gunakan, untuk memastikan Anda memilih algoritma yang tepat, fitur yang tepat, dll ...
Ken Bloom
1
Saya baru mulai mendaki gunung khusus ini (pengenalan pola). Sulit. BANYAK matematika. Tumpukan matematika yang hebat, besar, dan menakutkan, menatap balik ke arahku, berani aku untuk masuk.
David Poole
well ... pola recog juga dapat dilihat sebagai statistik terapan, ini bukan hanya masalah dalam rentang CS
Saya akan setuju bahwa Teori perhitungan itu sulit, tetapi itu juga salah satu mata pelajaran favorit saya. Memang, saya mengambil jurusan Matematika ...
Poindexter
+1 Saya menggandakan jurusan juga. Saya bisa menangani intro tentang hal ini, tetapi versi pascasarjana ... senang bahwa saya menjatuhkannya!
Pekerjaan
itu sulit, kita tidak tahu banyak tentang itu sehingga tidak terlalu penting.
Nama Tampilan
10
Hanya ada dua masalah sulit dalam Ilmu Komputer: pembatalan cache dan penamaan hal-hal. - Phil Karlton
Meskipun semakin populer, Crypto tidak unik untuk perangkat lunak.
JBRWilkinson
Crypto tidak sulit. Masalahnya adalah keamanan tidak dapat diuji dengan mudah, jadi Anda hanya melihat kesalahan Anda ketika seseorang meretas Anda. Tetapi kurangnya testability berlaku untuk sebagian besar bentuk keamanan TI, bukan hanya crypto.
CodesInChaos
4
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).
Biarkan istri Anda menulis kode multithreaded :) :)
3
Ingat, ketika datang ke multithreading bersama-memori, komputer adalah babi licik yang keluar untuk mendapatkan Anda. Ragu jadi ketika berhadapan dengan prosesor multicore; satu inti dapat mengganggu Anda di depan mata Anda di mana Anda menonton, dan yang lain kemudian bisa pergi di belakang Anda dan menusuk Anda dari belakang.
Donal Fellows
3
Saya juga memilih Desain Kompiler. Terutama di mana bagian DFA dan NFA masuk. Saya juga tidak begitu jelas tentang masalah dan hal-hal NP.
Ya, saya akan mengalami kesulitan dengan Compiler jika saya tidak mengambil Theory of Computation terlebih dahulu.
Peter Turner
DFA dan NFA adalah pakan ayam. Tunggu hingga Anda harus melakukan parsing LALR (1).
David Thornley
3
Teori Antrian
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.
Tidak (Sebanyak (Seseorang bisa (lihat), Tapi (Telah (dikenal)). Untuk Terjadi)).
Martin York
3
Analisis numerik
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.
Saya tidak yakin saya setuju dengan ini sebagai konsep Ilmu Komputer. Saya juga tidak melihat bagaimana hal itu dapat diselesaikan dengan menggunakan metode ilmiah.
jmort253
@ jmort253 - Ini benar, tetapi ilmu komputer mencoba (tidak berhasil menurut saya) untuk menyelidiki bidang ini dengan metode formal desain dan validasi.
mouviciel
Saya setuju bukan konsep "ilmu komputer" - tetapi ketika saya memulai karir saya, saya tidak menyadari / menyadari fakta bahwa klien tidak tahu apa yang mereka inginkan. Saya pikir SEMUA proyek perangkat lunak datang dengan semacam dokumen persyaratan formal. Mungkin topik kuliah untuk kursus rekayasa perangkat lunak (mungkin kuliah saya tidak membahasnya)?
Steven Striga
1
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".
Formal Logic adalah sesuatu yang membuat saya memiliki hubungan cinta / benci. Saya suka memikirkan konsep-konsepnya, tetapi saya tidak pernah bisa mengerti bagaimana itu membantu saya sampai nanti ketika saya menghadapi masalah dunia nyata yang membutuhkan pemikiran logis.
jmort253
@ jmort253 - Itu benar-benar sama bagi saya. Aku bahkan berjuang sampai-sampai berpikir aku akan gagal, belajar begitu lama dan keras sampai akhirnya diklik di kepalaku. Setelah itu, manfaatnya luar biasa.
Kyle Rozendo
1
Konstruksi Kompiler. Sulit tetapi harus memahami konsep di belakang
Anda harus memberikan suara untuk jawaban yang sama yang diberikan sebelum Anda, daripada memberikan jawaban yang sama lagi.
Abimaran Kugathasan
1
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:
Multi-threading aman dan bebas macet
Keamanan
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.
Penuh kebosanan karena mereka berbicara tentang seluk-beluk konseptual masing-masing sistem, sementara setengah orang tidak pernah menulis sistem sendiri (tetapi mereka tentu saja menggunakan berbagai). Juga, seminar menggunakan begitu banyak kata yang dimuat namun gagal memberikan contoh kehidupan nyata dalam bahasa Inggris yang sederhana. Seperti sistem pendukung keputusan ... tidak bisakah Anda menjatuhkan beberapa tangkapan layar dari laporan Google Analytics, FML, hanya untuk membuat siswa berada di halaman yang sama sebelum Anda mengalami orgasme intelektual di depan audiens.
Filip Dupanović
0
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.
Betulkah? Maksud saya, setiap orang berbeda, tetapi saya pikir ada banyak (maksud saya, banyak ) topik yang lebih sulit dari sekadar petunjuk . Sebagai contoh, Computer's Architecture , Assambler yang dalam beberapa hal terkait dengan pointer ;)
Oscar Mederos
Benar, tetapi Anda akan lebih mudah memahami referensi memori melalui assembler, karena Anda benar-benar bekerja dengan pointer mentah , sementara di C / C ++ pekerjaan Anda dengan referensi ke pointer, yang hanya membingungkan banyak orang karena abstraksi tidak pernah secara blak-blakan berbicara tentang.
Filip Dupanović
2
Ah assambler, teh programmer terbaik
Matt Ellen
Lelaki itu menanyakan topik-topik mana yang sulit tetapi penting, karenanya penting.
Manoj R
@Matt: Anda baru saja membuat hari saya: D @Manoj R: Pointer sepele jika Anda hanya menganggapnya sebagai akses array. Atau apakah akses array sulit?
back2dos
0
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.
Notasi Z / metode formal yang digunakan untuk melukai otak saya di perguruan tinggi. Terutama karena aku benci itu. Keras jauh lebih mudah ketika Anda menikmati apa yang Anda lakukan dan jauh lebih sulit ketika Anda tidak.
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.
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.
Jawaban:
“Ada 2 masalah sulit dalam ilmu komputer: caching, penamaan, dan kesalahan off-by-1”
sumber
Jujur, konstruksi kompiler!
sumber
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;)
sumber
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.
sumber
Pilihan saya adalah teori komputabilitas
(Hmm ... mungkin itu tidak penting, tapi itu pasti sulit)
sumber
sumber
teori kategori (matematika diskrit), tetapi sepadan
sumber
Kriptografi
Jika Anda melakukannya hanya sedikit salah, itu bisa menelan biaya jutaan perusahaan.
sumber
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).
sumber
Saya juga memilih Desain Kompiler. Terutama di mana bagian DFA dan NFA masuk. Saya juga tidak begitu jelas tentang masalah dan hal-hal NP.
sumber
Teori Antrian
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.
sumber
Analisis numerik
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.
sumber
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.
sumber
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".
sumber
Konstruksi Kompiler. Sulit tetapi harus memahami konsep di belakang
sumber
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.
sumber
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 ...
sumber
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.
sumber
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.
sumber
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.
sumber
Pemrograman Kendala. yang berkaitan dengan masalah kombinatorial, masalah NP-complete.
sumber
Optimalisasi Algoritma adalah Topik yang menantang.
sumber
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. ^^
sumber
Notasi Z / metode formal yang digunakan untuk melukai otak saya di perguruan tinggi. Terutama karena aku benci itu. Keras jauh lebih mudah ketika Anda menikmati apa yang Anda lakukan dan jauh lebih sulit ketika Anda tidak.
sumber
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.
sumber
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.
sumber