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?
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?
Câu trả lời:
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
Thành thật mà nói, trình biên dịch xây dựng!
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óm và Hà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;)
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.
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ó)
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
lý thuyết phạm trù (toán học rời rạc), nhưng đáng
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.
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.
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ề 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.
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.
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ó.
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.
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
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.
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:
Đâ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
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.
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.
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. ^^
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.
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.