Môn học / lý thuyết khó nhất trong Khoa học máy tính? [đóng cửa]


17

Môn học / lý thuyết CS khó nhất mà bạn học nhưng quan trọng đối với lĩnh vực này là gì? Và lý do xin vui lòng?


3
Tôi nghĩ điều này phần lớn phụ thuộc vào người học môn học và người dạy nó
Mahmoud Hossam

Câu trả lời:


37

Có hai vấn đề khó khăn trong khoa học máy tính: bộ nhớ đệm, đặt tên và lỗi tắt 1


4
Tôi sẽ thêm luồng ...
Carra

35

Thành thật mà nói, trình biên dịch xây dựng!


13
Trình biên dịch +1 là khó nhất và bổ ích nhất.
dietbuddha

3
Nó ở trên đó với hầu hết mọi công việc, và chuẩn bị tốt cho mã hóa lẩm cẩm, nhưng tôi không nghĩ nó khó đến thế. Có lẽ khó hơn khi không sử dụng YACC hoặc bất kỳ công cụ nào chúng tôi đã sử dụng, tôi không biết.
Peter Turner

4
Trình biên dịch thực sự chỉ khó khăn vì hầu hết các lý thuyết đều có thời điểm hạn chế phần cứng cực kỳ nghiêm trọng và rất nhiều hướng dẫn chính thức đã không tiến xa hơn thế. Hãy xem Let's Build A Compiler để xem cách viết trình biên dịch có thể dễ dàng như thế nào nếu bạn tiếp cận nó từ một góc độ khác.
Mason Wheeler

1
@Martin York, với tư cách là một người viết trình biên dịch Tôi nghĩ rằng sự phức tạp của việc thực hiện các trình biên dịch được đánh giá quá cao. Nói chung, một trình biên dịch đơn giản hơn nhiều so với một trình thông dịch. Tôi nghi ngờ đó là Sách Rồng và loại của nó đáng trách, họ đang đề xuất những cách phức tạp nhất để làm những việc đơn giản và chú ý quá nhiều đến bước ít quan trọng nhất, đó là phân tích cú pháp.
SK-logic

1
@Martin York, có các kỹ thuật giữ AST đơn giản và dễ bảo trì nhất có thể, bất kể ngôn ngữ nguồn phức tạp đến mức nào. Ngoài ra, có một số kỹ thuật rất đơn giản nhưng mạnh mẽ để giữ cho mỗi giai đoạn biên dịch tầm thường và bị cô lập.
SK-logic

22

Thiết kế và phân tích thuật toán

Tôi nghĩ rằng câu hỏi đó phụ thuộc vào giáo viên bạn có, và môn học đó được tổ chức như thế nào trong sự nghiệp của bạn.

Phân tích thuật toán có thể khó như ai đó muốn. Hãy tính rằng có những vấn đề chưa được giải quyết, và không chỉ có thế: những vấn đề không thể giải quyết được.

Vấn đề là bạn có thể có một vấn đề, và nếu bạn biết nó không thể được giải quyết, điều đó thật hoàn hảo. Nhưng nếu bạn không? Bạn có thể dành nhiều thời gian để cố gắng chứng minh NP-Complete hoặc cố gắng tìm một giải pháp thời gian đa thức để giải quyết nó.

Chứng minh NP-Hoàn thành là không dễ dàng. Vâng, rất nhiều vấn đề được biết đến, nhưng điều cần tìm là giảm bớt để chứng minh rằng đó là NP-Complete. Và nếu bạn dành nhiều giờ / ngày / tháng để cố gắng chứng minh điều đó, và nó có thể được giải quyết trong thời gian đa thức thì sao? :)

Ngoài ra còn có các môn học khác, như Trình biên dịch , Lý thuyết nhómHàm đệ quy nguyên thủy có thể khó như kế hoạch môn học hoặc giáo viên muốn;)


1
s / Phân tích / Phân tích ... nếu không thì chính xác là những gì tôi nghĩ ... các hàm đệ quy nguyên thủy, uargh !!
Felix Dombek

Đồng ý, tôi đã nhầm lẫn bằng cử nhân của mình không bao giờ tự tin rằng tôi đã thành công 'chứng minh' bất cứ điều gì (mặc dù lớp Thuật toán của tôi quá đơn giản, do giáo sư)
Peter Turner

Tôi sẽ chỉ cho bạn trong những ngày này, các thuật toán có thể khó đến mức nào :)
Oscar Mederos

18

Nhận dạng mẫu tức là Trí tuệ nhân tạo. Điều này đề cập đến điện toán thông minh cùng với các công cụ nhận dạng mẫu khác như, Nhận dạng ký tự quang học, Giọng nói thành văn bản, nhận dạng khuôn mặt, v.v.

Nhiều điều "tuyệt vời" bạn có thể làm hoặc ước bạn có thể làm với máy tính dựa trên các thuật toán này và chúng tôi đã cố gắng hoàn thiện chúng trong nhiều thập kỷ mà không có nhiều thành công.


Thật khó vì nó không phải là thứ gì đó mang tính quyết định. Phát triển nhận dạng mẫu AI tốt đòi hỏi phải thử nghiệm cho mọi ứng dụng bạn muốn sử dụng, để đảm bảo bạn chọn đúng thuật toán, đúng tính năng, v.v ...
Ken Bloom

1
Tôi mới bắt đầu leo ​​lên ngọn núi đặc biệt này (nhận dạng mẫu). Nó khó. RẤT NHIỀU môn toán. Những đống toán học vĩ đại, to lớn, đáng sợ, nhìn chằm chằm vào tôi, dám cho tôi bước vào.
David Poole

cũng ... recog mẫu cũng có thể được xem là số liệu thống kê được áp dụng, nó không chỉ là vấn đề trong phạm vi của CS
aggietech

12

Lựa chọn của tôi là lý thuyết tính toán

(Hmm ... có thể nó không quan trọng, nhưng chắc chắn là khó)


2
Tôi đồng ý và cá nhân tôi sẽ khái quát nó như en.wikipedia.org/wiki/Theory_of_computing .
Matt H

Tôi sẽ đồng ý rằng Lý thuyết tính toán là khó, nhưng nó cũng là một trong những môn học yêu thích của tôi. Cấp, tôi đã học hai chuyên ngành Toán học ...
Poindexter

+1 tôi cũng học kép. Tôi có thể xử lý phần giới thiệu cho nội dung này, nhưng phiên bản tốt nghiệp ... rất vui vì tôi đã bỏ nó!
Công việc

thật khó, không phải chúng ta biết nhiều về nó mà nó không quan trọng lắm.
Tên hiển thị

10

Chỉ có hai vấn đề khó khăn trong Khoa học Máy tính: vô hiệu hóa bộ đệm và đặt tên mọi thứ. - Phil Karlton


7

lý thuyết phạm trù (toán học rời rạc), nhưng đáng


Những lợi ích cụ thể nào bạn có được từ việc học lý thuyết thể loại?
zvrba

@zvrba: hiểu sâu hơn về kỹ thuật trừu tượng và lập bản đồ vấn đề
Steven A. Lowe

Bạn đã học nó từ đâu?
zvrba

@zvrba: Tôi không thấy cuốn sách trên kệ sách của tôi, nó có thể vẫn còn trong lưu trữ (remodeling) nhưng tôi nghĩ đó là cuốn sách này amazon.com/Category-Computer-Scientists-Foundations-Computing/...
Steven A. Lowe

6

Mật mã

Nếu bạn làm điều đó chỉ hơi sai, nó có thể tiêu tốn của một công ty hàng triệu.


Mặc dù ngày càng phổ biến, Crypto không phải là duy nhất cho phần mềm.
JBRWilkinson

Tiền điện tử không khó lắm. Vấn đề là bảo mật không thể được kiểm tra dễ dàng, vì vậy bạn chỉ nhận thấy những sai lầm của mình khi ai đó hack bạn. Nhưng thiếu khả năng kiểm tra áp dụng cho hầu hết các hình thức bảo mật CNTT, không chỉ tiền điện tử.
CodeInChaos

4

Hệ điều hành, đặc biệt là phần có liên quan đến phân luồng.

Và lý do không phải là vì thật khó để khiến 5 triết gia ăn pizza bằng nĩa. Lý do là bởi vì viết mã đa luồng rất khó và không nhất thiết phải dễ dàng cho con người (ít nhất là nam - theo vợ tôi) để tính toán.


9
Hãy để vợ bạn viết mã đa luồng sau đó :)

3
Hãy nhớ rằng, khi nói đến đa luồng bộ nhớ chia sẻ, máy tính là một con lợn lén lút ra ngoài để giúp bạn. Chắc chắn là như vậy khi làm việc với một bộ xử lý đa lõi; một lõi có thể làm bạn mất tập trung trước mắt khi bạn đang xem, và lõi kia có thể đi sau bạn và đâm sau lưng bạn.
Donal Fellows

3

Tôi cũng bỏ phiếu cho Thiết kế trình biên dịch. Đặc biệt là khi phần DFA và NFA xuất hiện. Tôi cũng không rõ lắm về các vấn đề và công cụ NP.


Vâng, tôi đã có một thời gian khó khăn hơn với Trình biên dịch nếu tôi chưa lấy Lý thuyết tính toán trước.
Peter Turner

DFA và NFA là thức ăn cho gà. Đợi cho đến khi bạn phải thực hiện phân tích cú pháp LALR (1).
David Thornley

3

Lý thuyết hàng đợi

Về mặt kỹ thuật, đây là một nhánh của toán học, nhưng có liên quan cao trong CS.

Gần như mọi thứ trong CS đều dựa trên hàng đợi (hiển thị (rõ ràng) và vô hình (không quá rõ ràng hoặc ngụ ý)).

Trong những ngày đầu của CS, hàng đợi là rõ ràng.
Một hàng các chương trình (mỗi chương trình một cỗ bài).

Ngày nay, hàng đợi không quá rõ ràng. Internet ví dụ: một mạng chuyển mạch gói, nhưng các gói hình thành hàng đợi và định tuyến các gói là một hình thức thu nhỏ hàng đợi.


Chào! (? Bạn có phải là (lập trình viên Lisp)
Mark C

Không (Nhiều như (Người ta có thể (xem), Nhưng (Nó đã (được biết đến)). To Happen)).
Martin York

3

Phân tích số

Không quá khó đối với các vấn đề về đồ chơi mà bạn đưa ra trong khóa học, nhưng một khi bạn bắt đầu xem xét các vấn đề thực sự, nó sẽ biến thành vấn đề nghiêm trọng.


2

Giải thích các yêu cầu của khách hàng khi khách hàng không thực sự biết họ muốn gì. Điều này không được dạy trong trường đại học, và là một trong những kỹ năng cần thiết nhất phải có.


1
Tôi không chắc chắn tôi đồng ý với điều này như là một khái niệm Khoa học Máy tính. Tôi cũng không thấy làm thế nào nó có thể được giải quyết bằng phương pháp khoa học.
jmort253

@ jmort253 - Điều này là đúng, nhưng theo tôi, khoa học máy tính đã cố gắng (không thành công) để điều tra lĩnh vực này bằng các phương pháp thiết kế và xác nhận chính thức.
mouviciel

Tôi đồng ý không phải là một khái niệm "khoa học máy tính" - nhưng khi tôi bắt đầu sự nghiệp, tôi không biết / không biết rằng khách hàng không biết họ muốn gì. Tôi nghĩ TẤT CẢ các dự án phần mềm đi kèm với một loại tài liệu yêu cầu chính thức. Có lẽ một chủ đề bài giảng cho một khóa học kỹ thuật phần mềm (có thể trường đại học của tôi không bao gồm nó)?
Steven Striga

1

Cá nhân tôi là Logic chính thức. Thật khó khăn khi bắt đầu, nhưng một khi bạn hiểu được các quy tắc và quản lý để chơi với nó đủ, bộ não của bạn sẽ hoạt động Logic++;, điều mà trong quá trình phát triển là một điều rất tốt.

Xin lưu ý, tôi đang trả lời trực tiếp câu hỏi - đây chắc chắn không phải là môn học khó nhất khi tôi có bằng cấp, nhưng nó có lẽ là môn học "áp dụng thực tế" khó nhất.


Logic hình thức là thứ mà tôi có mối quan hệ yêu / ghét. Tôi thích suy nghĩ thông qua các khái niệm, nhưng tôi không bao giờ có thể hiểu nó đã giúp tôi như thế nào cho đến sau này khi tôi gặp phải các vấn đề trong thế giới thực đòi hỏi tư duy logic.
jmort253

@ jmort253 - Tôi cũng vậy. Tôi thậm chí còn vật lộn đến mức nghĩ rằng mình thất bại, học rất lâu và chăm chỉ cho đến khi cuối cùng nó cũng nhấp vào đầu tôi. Sau đó, những lợi ích đã được tuyệt vời.
Kyle Rozendo

1

Trình biên dịch xây dựng. Khó nhưng phải hiểu các khái niệm đằng sau


5
Bạn nên bỏ phiếu cho cùng một câu trả lời được cung cấp trước bạn, thay vì đưa ra cùng một câu trả lời.
Abimaran Kugathasan

1

Thiết kế hạt nhân có ai không? Chà, tôi thực sự không biết nó đã được thực hiện như thế nào và các tính năng được nhắm mục tiêu cho một hệ điều hành là gì, nhưng đối với tôi, việc nghĩ đến việc thiết kế kernel phải là một nhiệm vụ khó khăn.

Tôi cũng nghĩ về bảo mật máy tính ; Tôi thực sự không biết điều gì làm cho một hệ thống không an toàn, ngoại trừ, tràn bộ đệm rõ ràng, tiêm XSS và SQL.

Tôi không chắc chắn, nhưng dường như một số thuật toán cũng không an toàn; hãy nhìn vào dự án MetaSploit, nó liệt kê tất cả các loại vi phạm bảo mật: bạn có thể thấy có rất nhiều cách mà một chương trình có thể bị sai sót.


1

Có nhiều chủ đề khó xử trong lĩnh vực này, nhưng những vấn đề khó khăn liên tục của tôi là những vấn đề liên quan Thuộc tính hệ thống toàn cầu . Ví dụ về chủ đề chung này bao gồm:

  • Đa luồng an toàn và không có bế tắc
  • Bảo vệ

Đây là những khó khăn vì bạn theo đuổi thứ gì đó chỉ tồn tại khi mọi thứ đều chính xác; bạn cần một tài sản hệ thống toàn cầu và hầu như tất cả các công cụ có sẵn (và tất cả những công cụ có khả năng giải quyết vấn đề thực sự theo kinh nghiệm của tôi) chỉ thực sự làm lý luận cục bộ. Đó là quá trình đi từ lý luận về các phần của chương trình đến toàn bộ shebang rất khó, đặc biệt là vì hoàn toàn có thể có các phần hoàn toàn chính xác nhưng ở đó vẫn có các lỗi tinh vi vì các thành phần được sắp xếp không chính xác; các lỗi có thể là đặc điểm nổi bật không mong muốn


0

Dịch vụ thông tin quản lý Trong suốt thời gian học đại học, tôi đã từng có một môn học quản lý mỗi học kỳ khiến tôi phát điên.
Khó khăn! các môn học tốt như Thiết kế trình biên dịch , Thiết kế hệ điều hành , v.v ... rất khó nhưng chúng thực sự thú vị và đầy thách thức. Tôi thực sự nhầm lẫn trong các môn học như Hệ thống / Dịch vụ thông tin quản lý, v.v. vì chúng đầy sự nhàm chán và bạn phải trải qua rất nhiều lý thuyết.


2
Đầy chán nản vì họ đang nói về sự phức tạp về khái niệm của mỗi hệ thống, trong khi một nửa số người không bao giờ tự viết bất kỳ hệ thống nào (nhưng chắc chắn họ đã sử dụng nhiều loại khác nhau). Ngoài ra, các cuộc hội thảo sử dụng rất nhiều từ được tải nhưng không cung cấp một ví dụ thực tế bằng tiếng Anh. Giống như các hệ thống hỗ trợ quyết định ... bạn không thể bỏ một vài ảnh chụp màn hình báo cáo Google Analytics, FML, chỉ để đưa các sinh viên trên cùng một trang trước khi bạn hết cơn cực khoái trí tuệ trước khán giả.
Filip Dupanović

0

Nếu bạn đang làm việc trong con trỏ C / C ++ là khái niệm quan trọng nhất cần biết. Nhưng bằng cách nào đó tôi không bao giờ hiểu nó đầy đủ ở trường đại học.


12
có thật không? Ý tôi là, mỗi người là khác nhau, nhưng tôi nghĩ có rất nhiều (ý tôi là, rất nhiều ) chủ đề khó hơn chỉ là con trỏ . Ví dụ: Computer's Architecture , Assambler theo một cách nào đó có liên quan đến con trỏ ;)
Oscar Mederos

Đúng, nhưng bạn sẽ thấy việc hiểu bộ nhớ tham khảo thông qua các trình lắp ráp dễ dàng hơn, bởi vì bạn thực sự làm việc với các con trỏ thô , trong khi trong C / C ++, bạn làm việc với các tham chiếu đến các con trỏ, điều này chỉ khiến mọi người nhầm lẫn vì sự trừu tượng không bao giờ được nói ra một cách thẳng thắn trong khoảng.
Filip Dupanović

2
Ah assambler, trà lập trình viên giỏi nhất
Matt Ellen

Chàng trai hỏi những chủ đề khó nhưng quan trọng, từ đó chỉ ra.
Manoj R

@Matt: Bạn vừa thực hiện một ngày của tôi: D @Manoj R: Con trỏ là tầm thường nếu bạn chỉ nghĩ về chúng như truy cập mảng. Hoặc là truy cập mảng khó khăn?
back2dos

0

Thiết kế và phân tích thuật toán. Không khó để hiểu và phân tích các thuật toán đã biết , việc thiết kế và phân tích các thuật toán mới cho các vấn đề khó là rất khó, và đòi hỏi hiểu biết rộng về nhiều lĩnh vực và thực hành áp dụng nhiều kỹ thuật khác nhau.


0

Lập trình hạn chế. trong đó giải quyết các vấn đề tổ hợp, các vấn đề NP-đầy đủ.


0

Tối ưu hóa thuật toán là chủ đề đầy thách thức.


0

Môn học / lý thuyết CS khó nhất mà bạn học nhưng quan trọng đối với lĩnh vực này là gì?

Toán rời rạc.

Thật khó khăn vì các lý thuyết liên quan rất lỏng lẻo với nhau nhưng chúng được sử dụng trong CS. Tôi đoán quá nhiều việc ghi nhớ ...

Chứng minh bằng cảm ứng, Big O, đệ quy, chia và cấu hình, Lý thuyết đồ thị, blah blah .. argh!

Trình biên dịch đối với tôi thật dễ dàng, bởi vì chúng tôi phải học Lý thuyết về Automata. ^^


0

Ký hiệu Z / phương pháp chính thức được sử dụng để làm tổn thương não của tôi ở trường đại học. Chủ yếu là vì tôi ghét nó. Khó sẽ dễ hơn rất nhiều khi bạn tận hưởng những gì bạn đang làm và khó hơn nhiều khi bạn không làm.


0

Tôi thích câu trả lời của bạn (và tôi đã không quên nâng cao chúng), như trình biên dịch, kernel, v.v., nhưng hầu hết các lập trình viên không bao giờ gặp những vấn đề này. Có một chút dễ dàng hơn, nhưng vấn đề phổ biến hơn: đồng thời - chủ đề, khóa. Thật dễ dàng để viết một chương trình tạo ra các lỗi ma thuật, nếu chúng ta tạo ra một lỗi nhỏ trong kiến ​​trúc tương tranh.

Vì vậy, tôi nói, đó không phải là vấn đề khó nhất trong điện toán, nhưng vì nó thường được sử dụng, nên nó là một vấn đề nguy hiểm.


0

Lập trình hướng đối tượng

Có lẽ là do tôi đã cắt răng trên FORTRAN và APL, nhưng việc chuyển từ ngôn ngữ thủ tục nghiêm ngặt sang đối tượng là điều mà tôi đã đấu tranh trong nhiều năm. Nó không giúp những người được gọi là 'chuyên gia' viết các bài báo và hướng dẫn mâu thuẫn về ý nghĩa của việc hướng đối tượng và cách tốt nhất / đúng đắn để xây dựng các chương trình hướng đối tượng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.