Các môn học CS mà một sinh viên phải biết [đóng]


34

Ở trường đại học, tôi không bao giờ quan tâm đến lý thuyết. Tôi không bao giờ đọc nó. Cho dù tôi đã cố gắng bao nhiêu, tôi cũng không thể đọc được nội dung và không biết điều gì đang thực sự xảy ra trên thực tế. Giống như, ví dụ, trong khóa học về lý thuyết automata, giáo sư của tôi đã nói với tôi mọi thứ có thể liên quan đến khía cạnh toán học của nó, nhưng thậm chí không một lần ông đề cập đến việc nó sẽ được sử dụng thực tế ở đâu. Đây chỉ là một ví dụ.

Tôi đã vượt qua được trường đại học của mình và thực tập tại một công ty, nơi tôi đã làm một dự án và may mắn là họ không bận tâm về điểm số của tôi, vì họ ở trên mức trung bình.

Bây giờ, tôi muốn biết những môn học nào mà một sinh viên CS phải nhận thức một cách tuyệt đối và tích cực? Các đối tượng có thể có liên quan trong ngành công nghiệp. Điều này là do tôi có một chút thời gian rảnh trong tay và nó sẽ giúp tôi hiểu rõ hơn về họ.

Đề xuất của bạn là gì? Giống như đối với một, thuật toán là một chủ đề.


3
Biểu thức thông thường dựa trên lý thuyết automata, và nó sẽ giúp bạn nếu bạn phải phân tích cú pháp bất cứ điều gì. Tôi đã làm và học được những điều ở trường chứng tỏ không liên quan đến công việc tôi đã có, nhưng điều đó nói ít nhất là về những gì tôi đã làm như những gì tôi đã học. Không có gì tôi học được sẽ vô dụng trong lĩnh vực này trong mọi trường hợp.
David Thornley

2
Tôi ghét làm việc với loại của bạn ... jk (loại). Nếu tôi là bạn, trước tiên tôi sẽ dành thời gian để xem xét những điều mà bạn nên biết từ trường học - theo cách đó bạn sẽ không giống như một thằng ngốc trong cuộc phỏng vấn tiếp theo của bạn. Sau đó, tôi sẽ học được một lượng cấu trúc dữ liệu và thuật toán hợp lý, trông giống như chúng có thể được sử dụng trong thế giới thực. Bạn cần phải tìm ra nơi bạn muốn. Nếu là một nhà phát triển trò chơi, thì có lẽ bạn cần đại số tuyến tính, đồ họa 3d, hình học tính toán. Nói chung, bạn cần xem lại dữ liệu str, alg, cơ sở dữ liệu, hệ điều hành và trình biên dịch ở mức tối thiểu và tiếp tục học hỏi.
Công việc

Thật khó để đặt tên cho một ứng dụng cụ thể cho lý thuyết automata giống như cách khó đặt tên cho một ứng dụng cụ thể cho số học. Một sự cường điệu, có thể, nhưng không nhiều. Các sơ đồ trạng thái thường hữu ích và thao tác trong mã là hữu ích cho một số mục đích. Cây quyết định (được thu nhỏ thành hình vẽ) là một ví dụ tương đối gần đây đối với tôi và tôi thậm chí còn cần sử dụng các mô hình trạng thái (ở dạng chính tắc) làm khóa vào các thùng chứa. Nếu bạn không thể thấy các ứng dụng trong các ứng dụng, hãy suy nghĩ về việc thêm một lớp không xác định - tạo mã.
Steve314

1
Bạn đang nhận được rất nhiều câu trả lời CS tuyệt vời bên dưới, nhưng tôi nghĩ bằng cách giới hạn câu hỏi của bạn như thể bạn đang thiếu một vài điều hữu ích nhất tôi đã thấy trong 15 năm kể từ khi tôi nhận BSCS, điều gì đã làm nên sự khác biệt của mọi người đã làm rất tốt trong ngành: kỹ năng giao tiếp và làm việc nhóm nhỏ. Có vẻ ngớ ngẩn, đi đến bộ phận ngôn ngữ / ngôn ngữ / nhà hát và tham gia một lớp học như "giao tiếp nhóm nhỏ" hoặc "lãnh đạo / quản lý nhóm / nhóm". Ngay cả khi bạn không có kế hoạch làm quản lý, các kỹ năng bạn nhận được ở đó sẽ giúp bạn trở thành một kỹ sư và thành viên nhóm tốt hơn.
cabbey

Câu trả lời:


41

Dù bạn có tin hay không, một trong những điều trở nên quan trọng đối với tôi trong cuộc sống sau này là Compiler Construction. Không phải là phiên bản namby-pamby hiện đại sử dụng Lex và Yacc, đó là cho người giả.

Xây dựng trình biên dịch REAL nơi bạn viết trình quét biểu tượng và trình phân tích cú pháp của riêng bạn từ đầu.

Đây là thứ tôi nghĩ rằng tôi sẽ không bao giờ sử dụng nữa. Nhưng trong 20 năm qua, khóa học đã chứng minh trọng lượng của nó bằng vàng gấp 4 lần. Bộ xử lý lệnh từng phải viết, mọi trình quét tin nhắn đến, mọi bộ điều phối người dùng, mọi trình thông dịch kịch bản, đều sử dụng các nguyên tắc từ khóa học đó. Làm theo cách đó và cuộc sống thật ngọt ngào, rõ ràng và đơn giản. VÀ tôi thậm chí đã đưa tất cả thông tin cho một đồng nghiệp chưa làm điều đó - anh ta thực sự phải viết một trình biên dịch cho một máy trừu tượng. Mà tôi có thể thêm đã tiếp tục thành công về mặt thương mại.

Nếu tôi phải đi lên và cảm ơn một giảng viên khóa học đại học trong bất kỳ môn học nào, đây sẽ là nó. Nếu không có điều đó tôi sẽ có được nhưng giải pháp của tôi sẽ xấu hơn nhiều.

(Và trước khi ai đó nhảy lên và nói "tốt, bạn có thể đã sử dụng lex và yacc ...", câu trả lời là, có lẽ - nó phụ thuộc rất nhiều vào hệ thống. Trong một số trường hợp, ngôn ngữ lập trình không phải là C (ví dụ PL / M và Ada), trong một số trường hợp không có sẵn Lex hoặc Yacc cho nền tảng. Biết những điều cơ bản có nghĩa là một giải pháp đã sẵn sàng thay vì vắt tay cố gắng tìm ra cách bẻ cong một số công cụ để phù hợp với vấn đề.)


6
Trình biên dịch +1 là một trong những khóa học yêu thích của tôi tại uni và luôn hữu ích. Tôi hiếm khi sử dụng lex / yacc / bison, các nguyên tắc cơ bản được sử dụng cụ thể hơn nhiều.
Orble

Tôi hoàn toàn đồng ý mặc dù vì một lý do khác. Làm quen với cách viết trình tạo mã - mặc dù tôi đã sử dụng Lex và Yacc - là lần đầu tiên và tốt nhất của tôi trong lập trình hướng đối tượng.
Peter Turner

Bạn cũng có thể (và nên biết cách viết) trình tạo mã bằng chữ C hoặc một số ngôn ngữ không phải OO khác. Sau đó, đó là một bài học về việc viết các đoạn mã thủ tục rất lớn và chia bộ phân tích cú pháp / trình quét / mã thành các giai đoạn hợp lý và dễ hiểu.
quick_now

Trình biên dịch +1 kết hợp rất nhiều mẫu và nguyên tắc mà nó sẽ cho phép bạn nhìn thấy thiết kế và mã trong một ánh sáng hoàn toàn khác sau khi thực hiện nó.
Andrew T Finnell

2
"Đây là thứ tôi nghĩ rằng tôi sẽ không bao giờ, sử dụng lại." Nếu tôi có một đô la cho mỗi lần tôi nói điều đó với chính mình khi tôi còn trẻ ....
Nick Spreitzer

37
  1. Cấu trúc dữ liệu / Thuật toán đặc biệt là đồ thị. Số lượng các tình huống trong thế giới thực mà tôi đã quản lý để sử dụng các thuật toán liên quan đến biểu đồ là một điều ngạc nhiên đối với tôi. Tập trung vào việc biết các đặc điểm khi cấu trúc dữ liệu hoặc thuật toán là phù hợp. Ví dụ, việc có thể nhìn thấy một vấn đề và biết sử dụng thuật toán lập trình / tham lam động là rất quan trọng và có thể giúp bạn tiết kiệm rất nhiều thời gian.

  2. Kiến thức làm việc về độ phức tạp tính toán. Bạn không cần phải biết trên đỉnh đầu của bạn về giới hạn dưới của loại cơ số là gì nhưng biết làm thế nào để biết thời gian chạy trong trường hợp xấu nhất của thứ gì đó bạn viết là quan trọng, đặc biệt là đối với các dự án quan trọng.

  3. Khái niệm hệ điều hành. Quản lý bộ nhớ, Trình lập lịch biểu, v.v ... Mọi nhà phát triển thực sự cần có một sự hiểu biết vững chắc về các hệ điều hành do mã bạn viết liên tục tương tác với nó.

  4. NetSec. Tôi đã gặp rất ít nhà phát triển có hiểu biết vững chắc về các mối quan tâm bảo mật cơ bản với sự phát triển (tràn bộ đệm, xss, SQLI, v.v.). Đây thực sự là điều bắt buộc nếu bạn muốn thành công trong ngành công nghiệp. Thật tuyệt nếu bạn có thể viết điều lớn tiếp theo nhưng bạn sẽ không có nhiều người dùng lâu nếu bạn không bảo mật dữ liệu của họ.

  5. Các mô hình lập trình. Biết các đặc điểm và sự khác biệt giữa lập trình OO / Chức năng / Thủ tục. Một trong những lớp học tốt nhất mà tôi từng có là viết 20 trình thông dịch hướng dẫn đơn giản cho fortan, scheme, prolog, v.v. bằng chính các ngôn ngữ. Chỉ cần tiếp xúc thực sự có thể giúp bạn hiểu các khái niệm cơ bản của phát triển phần mềm.


1
Danh sách +1 Toàn bộ là khá nhiều yêu cầu, (4) đặc biệt là rất quan trọng trong thời đại phân tán hiện đại.
Orble

1
+1 trên Cấu trúc dữ liệu / Đồ thị. Số lượng lập trình viên mà tôi biết là người không biết cách sử dụng Hashtable chính xác hoặc tại sao Danh sách được liên kết thay vì một mảng đơn giản trong một số trường hợp làm tôi ngạc nhiên mỗi ngày.
Machado

+1 cho mô hình lập trình. Một sự hiểu biết tốt về sự tương phản giữa các loại ngôn ngữ khác nhau giúp ích rất nhiều.
apoorv020

19

Đáp ứng các yêu cầu tốt nghiệp không nhất thiết là đủ để trở thành nhà khoa học máy tính giỏi nhất bạn có thể. Đối với một chương trình giảng dạy đại học điển hình, đây là mười điều hàng đầu bạn nên chắc chắn học:

  1. Những điều cơ bản của kinh tế học - Một khóa học giới thiệu bao gồm các chủ đề như bổ sung và thay thế là rất quan trọng để làm việc trong nền kinh tế lớn hơn, hoặc chỉ đơn giản là hiểu nó. Mặc dù khái niệm về Giffen Good sẽ không nhất thiết giúp bạn, biết về ngoại cảnh sẽ. Nó cũng có thể giúp bạn đánh giá cao rằng nhiều tình huống là thắng-thắng hơn bạn có thể nhận ra.

  2. Làm thế nào để viết một bằng chứng - Tất cả các chuyên ngành khoa học máy tính nên biết cách viết một bằng chứng. Và toán học rời rạc, trong khi một phần của bữa sáng cân bằng, không được tính. [Cảm ứng chỉ là một kỹ thuật chứng minh, và bạn có thể nhận được mà không thực sự biết nhiều về bằng chứng.] Một khóa học về đại số hoặc phân tích thực là cần thiết để thực sự viết bằng chứng. Và theo đại số tôi có nghĩa là lý thuyết nhóm hoặc đại số trừu tượng, không phải là khóa học bạn đã học ở trường trung học. Để có lợi ích đầy đủ, hãy lấy đại số và phân tích thực trong cùng một thuật ngữ.

    Tại sao văn bản chứng minh là thiết yếu? Bởi vì đó là lập trình! Hãy suy nghĩ về lần đầu tiên bạn học cách lập trình: nếu một nhiệm vụ yêu cầuifvà một vòng lặp, bạn có thể không có bất kỳ trực giác nào về nơi đặt chúng trong mối quan hệ với nhau. Nhưng bây giờ cùng một nhiệm vụ sẽ cảm thấy hoàn toàn tự nhiên. Viết một bằng chứng rất giống nhau. Có một loạt các thủ thuật mà bạn học được, và một khi bạn học chúng, mọi thứ trông khá khác biệt.

  3. Cách viết - Kỹ năng giao tiếp bằng văn bản là rất cần thiết, cho dù bạn sẽ làm việc trong ngành công nghiệp hay học viện. Tốt nhất là bạn có thể tìm thấy một khóa học cơ học, và không phải là một khóa học viết có hiệu quả về một chủ đề khác. Đó là, nhiều trường sẽ cố gắng làm cho các khóa học viết trở nên phù hợp hoặc thú vị hơn bằng cách làm cho nó trở thành một chủ đề đặc biệt. Hãy thử tham gia phiên bản nhàm chán của trò chơi.

  4. Xác suất và thống kê - Có một số điều bạn sẽ chỉ chọn đúng bằng cách tham gia một khóa học. Cùng với các yêu cầu chính của CS (sẽ cung cấp cho bạn toán học rời rạc, phép tính biến đơn và biến đa biến và đại số tuyến tính) và đại số và / hoặc phân tích thực, việc chọn số liệu thống kê có thể sẽ giúp bạn có được điểm số nhỏ trong môn toán. Học thống kê có thể giúp bạn làm việc với các nhà khoa học khác trong các dự án của họ.

  5. Chủ đề nóng hiện tại - Trong những thập kỷ trước, nó có thể là cơ sở dữ liệu hoặc lập trình hướng đối tượng. Ngày nay nó có thể là lập trình web hoặc kiến ​​trúc hướng dịch vụ. Dù mốt hiện tại là gì, hãy chắc chắn tham gia một khóa học trong đó. Nếu chỉ để xem những gì các mốt là về.

  6. Vấn đề tạm dừng - Hầu hết các vấn đề không thể được giải quyết bằng máy móc. Đây là một ý tưởng khá sâu sắc rằng văn hóa của chúng ta đã tiếp thu tốt đến mức nó không còn gây sốc nữa. Điều tương tự cũng xảy ra với radio, Goedel và bom nguyên tử; mãi đến khi nghệ thuật hậu hiện đại và chiến tranh lạnh mà chúng ta có thể một lần nữa đối phó với những khái niệm này. Tuy nhiên, tham gia một khóa học về lý thuyết tính toán có thể tái cảm nhận bạn với bằng chứng khá tuyệt vời này.

  7. Lập trình chức năng thuần túy - Rất có thể bạn sẽ không tham gia vào lập trình chức năng thuần túy, trừ khi bạn nghiên cứu về nó hoặc làm việc cho một vài công ty được chọn, nhưng biết rằng nó sẽ giúp bạn trở thành một lập trình viên tốt hơn. Lý do là bạn sẽ học được nhiều hình thức trừu tượng mới và các khái niệm như số Giáo hội và sự tiếp tục và đơn nguyên và, vâng, đệ quy và các công cụ này cũng có thể được áp dụng cho chương trình Java tiếp theo của bạn.

  8. P và NP - OK, cái này đã nằm trên con đường quan trọng của bạn, nhưng dù sao cũng phải chú ý. Bạn muốn chắc chắn rằng bạn có thể sửa một người nào đó khi họ gọi không chính xác NP không phải là đa thức.

  9. Các chủ đề từ khóa học bạn chắc chắn ghét - Đây có thể là khóa học CS bạn thấy quá thấp, quá lý thuyết hoặc khóa học không CS mà bạn thấy quá khó chịu, quá khó hoặc quá nhàm chán . Nếu một khóa học như thế này có vẻ là một vấn đề đối với bạn và bạn thấy mình đang giải thích cho người khác lý do tại sao bạn rất vui vì bạn không phải làm như vậy, thì nó sẽ cho bạn biết rằng bạn sẽ học được rất nhiều bằng cách tham gia khóa học Có lẽ bạn sẽ không học các tài liệu của khóa học, nhưng bạn sẽ tìm hiểu về giới hạn của chính mình và có lẽ nhiều hơn về những lời biện minh mà bạn tự đưa ra. [Gợi ý: Họ thường yếu.]

  10. Khóa học không phải CS bạn chắc chắn sẽ yêu thích - Cuối cùng, bạn nên có một chút niềm vui. Đây là khóa học có thể bạn sẽ nhận được ít nhất, nhưng dù sao đi nữa. Làm một lần. Nếu bạn tình cờ yêu thích nhiều khóa học, thì tốt cho bạn, nhưng hãy chắc chắn rằng nó không cản trở các khóa học còn lại trong danh sách này.

Cách tiếp cận của tôi ở đây là thực tế, dựa trên các khóa học bạn thực sự có thể tham gia. Và tôi đã tập trung vào các mục tiêu học tập có khả năng sẽ được học. Lưu ý: Câu trả lời này được điều chỉnh từ một bài đăng trên blog của tôi về Mười điều mọi chuyên ngành khoa học máy tính nên học .


Một lời giải thích cho downvote sẽ hữu ích. Có lẽ tôi có thể thay đổi câu trả lời của mình, và sau đó bạn có thể thay đổi suy nghĩ của mình.
Macneil

Thưa giáo sư, tôi sẽ không bỏ phiếu cho câu trả lời của bạn nhưng có một điều tôi sẽ đưa ra vấn đề. Viết bằng chứng: Cho đến ngày nay tôi vẫn không thể viết một bằng chứng rời rạc trừ khi bạn yêu cầu tôi chứng minh một số là số lẻ hoặc số chẵn. Tôi không thấy mối liên hệ giữa điều này và ngành công nghiệp. Có lẽ tôi đang thiếu "Vấn đề giải quyết vấn đề?". Tôi không bao giờ có thể bao bọc bộ não của mình xung quanh Toán học cảm ứng hoặc Bổ đề bơm. Tôi không nghĩ nó làm tôi chậm lại.
Bryan Harrington

Viết một bằng chứng cũng giống như viết một chương trình. Học cách chứng minh rằng * 0 = 0, chẳng hạn, giống như FizzBuzz của toán học (tốt, có lẽ nó khó hơn một chút). Thoạt nghe có vẻ đáng sợ, nhưng chẳng mấy chốc bạn nắm bắt được những mánh khóe nhỏ, giống như bạn đã làm khi học lập trình. Bằng chứng có thể có các cấu trúc khác nhau có thể giúp bạn suy nghĩ đệ quy và cấu trúc. Như tôi đã nói, một khóa học toán rời rạc không cắt nó để học bằng chứng thực sự. Bạn cần lý thuyết nhóm hoặc phân tích thực sự cho điều đó.
Macneil

Mặc dù kiến ​​thức về lời khen chắc chắn hữu ích, tôi tin rằng kiến ​​thức về lời khen có liên quan nhiều hơn đến kinh tế.
ijw

1
@ijw: Liên quan đến kinh tế cho sinh viên CS, Joel có một cuộc thảo luận đáng đọc: joelonsoftware.com/articles/Col pheAdvice.html
Macneil

8

Sau khi nói chuyện với một vài đại diện công ty và bạn bè đã có nhiều cuộc phỏng vấn:

  • Cơ sở dữ liệu
  • OOP
  • Thuật toán
  • Cấu trúc dữ liệu

có xu hướng là "hệ thống" cho các nhân viên mới (hoặc như họ đã nói, các khóa học "rất khuyến khích").

Các khóa học khác có thể hữu ích là bảo mật máy tính, lắp ráp và kiến ​​trúc máy. Nhiều giáo sư của tôi đã đề nghị với tôi một khóa học biên dịch. Ngoài ra, nếu bạn có thời gian, tôi rất muốn giới thiệu các khóa học toán như lý thuyết đồ thị, toán học rời rạc và tổ hợp. Bạn học được rất nhiều kỹ năng lý luận trong các lớp mà hầu hết các khóa học CS đều có, nhưng cuối cùng lại rất hữu ích khi viết các chương trình rất phức tạp.

Mong rằng sẽ giúp!


1
Sẽ đồng ý với OOP và cấu trúc dữ liệu.
apoorv020

4
Cấu trúc dữ liệu cơ bản ... rất quan trọng. THÊM quan trọng, tôi nghĩ, hơn OOP. Bạn cần có khả năng suy nghĩ về cách lưu trữ và sắp xếp thông tin. Và nếu trên hệ thống nhúng, bố cục trong bộ nhớ của các cấu trúc dữ liệu của bạn là thứ sống hay chết.
quick_now

3
+1 cho các lớp toán. Họ cũng giúp bạn học cách theo dõi các vấn đề / hệ thống lớn.
Michael K

1
Mạng là một trong những tốt để làm cũng.
Keyo

OOP? Bạn có thể lập trình bằng Haskell hoặc C mà không cần OOP ... Tôi sẽ cung cấp cho bạn nó được sử dụng rộng rãi, nhưng tôi không nghĩ đó là cơ bản. Tiếp xúc với các mô hình khác nhau, mặt khác, có vẻ khá hữu ích.
Matthieu M.

6

Nó phần lớn phụ thuộc vào những gì bạn có kế hoạch làm với mức độ. Dường như hầu hết các chuyên ngành CS đều kết thúc với tư cách là kỹ sư phần mềm. Với ý nghĩ đó, tôi thực sự không chắc tại sao nhiều người không chỉ chuyên về công nghệ phần mềm. Tôi nghi ngờ rằng không có đủ các chương trình kỹ thuật phần mềm có sẵn, đặc biệt là tại các tổ chức công cộng.

Tôi đến từ một mặt đất nhúng. Mỗi một người mà tôi làm việc đều có bằng EE hoặc bằng CE và điều đó một phần là do khi "những người già" khi vào đại học không có nhiều chương trình CE. Vì vậy, một điều khá rõ ràng là nếu bạn muốn làm việc trong trường nhúng mà một nền tảng phần cứng là mong muốn.

Tuy nhiên, bất kể lĩnh vực bạn muốn làm việc là gì, tôi tin rằng mọi lập trình viên nên tham gia một khóa học về lập trình lắp ráp. Bạn có thể không bao giờ sử dụng nó, nhưng nó sẽ dạy chính xác những gì đang xảy ra ở cấp bộ xử lý trong khi gọi hàm, cách xử lý ngắt, cách cấu trúc bộ nhớ hoặc cách sử dụng các chế độ địa chỉ khác nhau. Tôi tin rằng tất cả những điều này sẽ làm cho bạn một lập trình viên tốt hơn.

Ngoài ra, mặc dù có thể không rõ ràng nên một số đây là tất cả các chủ đề quan trọng khi xem xét Cấu trúc dữ liệu và Thuật toán cho một nền tảng cụ thể.


+1 vì bằng cấp về khoa học máy tính mang đến cho bạn trải nghiệm với nhiều môn học / công nghệ. Chỉ cần chắc chắn chú ý đến khóa học thiết kế phần mềm.
Ông Ant

+1 Để lắp ráp, luôn luôn khôn ngoan để thực sự hiểu những gì đang xảy ra ở dưới cùng của ngăn xếp. Sẽ rất tốt nếu mọi người cũng biết phần cứng, nhưng đối với nhiều người, đó sẽ là một bước đi quá xa.
Orble

5

Có 2 cách để trả lời câu hỏi của bạn. Hãy để tôi thử cả hai. Cách đầu tiên là xem xét mọi thứ từ quan điểm thị trường việc làm tiềm năng, kỹ năng mã hóa, v.v ... Vì vậy, đây là danh sách của tôi:

  1. Cấu trúc dữ liệu
  2. Phân tích thuật toán
  3. Lập trình hướng đối tượng
  4. Hoặc là một khóa học cụ thể trong C ++ hoặc Java
  5. Các hệ điều hành
  6. Thiết kế giao diện người dùng
  7. Lập trình song song

Cách thứ hai là nhìn mọi thứ từ góc độ trừu tượng một chút, và ai biết được, có thể cũng hơi triết lý. Danh sách sau đây có thể không có các kỹ năng nóng nhất mà thị trường việc làm yêu cầu, nhưng tôi khá chắc chắn khi bạn bước ra khỏi các khóa học này, bạn sẽ đánh giá cao hơn về nghệ thuật phát triển phần mềm.

  1. Ngôn ngữ hữu hạn và lý thuyết tự động
  2. Trình biên dịch xây dựng
  3. Lý thuyết đồ thị
  4. Trí tuệ nhân tạo

Đừng chỉ liệt kê một tập hợp các khóa học mà theo bạn là rất cần thiết, hãy cung cấp lý do và kinh nghiệm mà bạn đã đưa ra trong danh sách của mình.

2

Tôi cũng sẽ thêm Kỹ thuật phần mềm hoặc Thực tiễn thiết kế vào danh sách, mặc dù nội dung của chúng thường được chọn bởi các sinh viên trong ngành.

Ngoài ra, theo tôi (không được hỗ trợ bởi nhiều kinh nghiệm), các công ty không thực sự muốn hầu hết những điều lý thuyết được dạy trong các khóa học như cơ sở dữ liệu, v.v., họ muốn mọi người hiểu và có thể sử dụng những thứ này.

EDIT: Do downvote, tôi cảm thấy muốn giải thích câu trả lời của mình. Tôi là sinh viên khoa học máy tính năm cuối, và kinh nghiệm của tôi dựa trên các cuộc phỏng vấn thực tập và công việc của tôi với các công ty hàng đầu trong lĩnh vực này. Theo kinh nghiệm của tôi, mọi người hiếm khi được yêu cầu sử dụng các thuật toán phức tạp hoặc mã cấu trúc dữ liệu rất phức tạp trong các cuộc phỏng vấn hoặc trong công việc.

Hữu ích hơn nếu bạn có thể tạo và sử dụng cơ sở dữ liệu, sử dụng kiểm soát nguồn, biết cách gỡ lỗi đúng cách, biết cách sử dụng các mẫu thiết kế, v.v. Tuy nhiên, như tôi đã nói, những kỹ năng này thường được chọn trong ngành và không được đề cập trong các khóa học. Kỹ thuật phần mềm / Thực hành thiết kế thường liên quan đến việc xây dựng một dự án cỡ trung bình, rất hữu ích cho việc học tất cả các kỹ năng này.


Vui lòng cung cấp thêm chi tiết về kinh nghiệm của bạn và lý do tại sao một người nào đó nên tham gia các khóa học đó.

@Mark: Bạn có thể giải thích lý do đằng sau downvote?
apoorv020

@ apoorv020 mà không giải thích lý do tại sao bạn đề xuất Thực hành Kỹ thuật phần mềm hoặc Thiết kế, câu trả lời của bạn không hữu ích. Chỉnh sửa của bạn vẫn không giải thích lý do tại sao bạn đề xuất chúng.

@ apoorv020 giá trị đổi thưởng duy nhất để thực hiện Kỹ thuật phần mềm hoặc Thực tiễn thiết kế là bạn thường xây dựng một dự án cỡ trung bình (bất kể điều đó có nghĩa là gì)? Cá nhân bạn đã học được gì khi tham gia các khóa học đó?

Họ là tốt để biết, nhưng đây không phải là đối tượng CS.
Thomas Owens

2

Những điều tôi học được ở trường đại học mà tôi sử dụng hàng ngày:

  • Phương pháp thiết kế hướng đối tượng
  • Mẫu thiết kế
  • Biểu thức chính quy
  • Các thuật toán và phân tích cơ bản
  • Cấu trúc dữ liệu

Tôi ước tôi đã tham gia một khóa học cơ sở dữ liệu. .

Tôi đã phải tham gia một vài khóa học toán. Tôi đã không sử dụng tính toán kể từ khi tôi tốt nghiệp. Tôi ước tôi đã tham gia một khóa học thống kê. (Một lần nữa, tôi đã chọn đủ để có được từ khi tốt nghiệp, nhưng tôi ước tôi biết nhiều hơn.)

Ngoài bộ phận CS, hãy tham gia một khóa học viết. Kỹ năng giao tiếp bằng văn bản tốt là điều cần thiết để thành công.


+1 Ngạc nhiên rằng cơ sở dữ liệu không bắt buộc trong khóa học của bạn, thường được coi là một thành phần thiết yếu.
Orble

Nó đã được. Tôi đã thoát khỏi nó về một kỹ thuật và hối tiếc.
pwc

@ Tổ chức: Thường thì các khoa nhỏ (trái ngược với các trường tại các trường lớn của tiểu bang) đơn giản là không có đủ giảng viên để yêu cầu mọi chủ đề chính. Ở trường tôi, ví dụ, cơ sở dữ liệu là một môn tự chọn.
Macneil

@Macneil: Trong khóa học của tôi, khóa học cơ sở dữ liệu chính là điều kiện tiên quyết (bao gồm tất cả các điều cơ bản: mô hình ER, các dạng thông thường, SQL (không chỉ SQL cơ bản, ghép / lồng, v.v.), vị trí chỉ mục, v.v. , các khóa học cơ sở dữ liệu là môn tự chọn (tôi nghĩ có tổng cộng ba). Tôi chưa bao giờ bầu chọn họ, vì tôi nghĩ đó là thứ tôi có thể tiếp thu độc lập dễ dàng hơn các khóa học khác mà tôi sẽ bỏ lỡ. Thay vào đó, tôi nghĩ rằng tôi đã tiến bộ HOẶC.
Orble

@pwc: Tôi cá là, bạn có nhớ tại sao bạn lại thoát ra khỏi nó, trái ngược với cách làm không?
Orble

2

Có nhiều khóa học quan trọng, tùy thuộc vào hướng bạn định đi. Tuy nhiên, giả sử bạn hoàn toàn có thể lập trình, khóa học quan trọng nhất phải là:

  • Cấu trúc dữ liệu và thuật toán

    Hầu như mọi thứ trong điện toán đều quay trở lại để xử lý dữ liệu bằng thuật toán. Đặc biệt chú ý đến mảng và hashtables, vì chúng là những cấu trúc dữ liệu hữu ích nhất được sử dụng phổ biến, nhưng danh sách và cây và biểu đồ (tốt, danh sách là loại cây bị hạn chế và cây là loại biểu đồ bị hạn chế) sẽ cũng quan trọng Hơn nữa, hiểu các thuật toán là rất quan trọng để tạo ra mã không khủng khiếp. (Nếu không, bạn sẽ làm những việc thật tồi tệ, như sử dụng thuật toán O ( n 3 ) trong đó một O ( n log n ) sẽ làm.) Nếu bằng cấp CS của bạn không có khóa học DS + A bắt buộc về nó, không phải CS. Hoặc kỹ thuật phần mềm. Hoặc thậm chí chỉ là lập trình.

Bên cạnh đó, khóa học mà tôi thấy hữu ích nhất trong nhiều năm qua ở nhiều lĩnh vực là:

  • Đồng thời

    Có nhiều khía cạnh để đồng thời, nhưng tôi mong đợi sự hiểu biết về sự khác biệt giữa bộ nhớ chia sẻ và truyền tin nhắn. Tôi cũng muốn có sự bao quát mạnh mẽ của các chiến lược khóa (mutexes, semaphores, v.v.) và giao dịch.

    Tất nhiên, điều này rất quan trọng để hiểu song song hóa, nhưng nó cũng rất quan trọng đối với bất kỳ thứ gì được phân phối (ví dụ: viết một dịch vụ tiếp xúc với internet, ngay cả khi nó là một luồng vì các máy khách sẽ không đồng bộ). Tôi hiểu rằng nó cũng hữu ích để viết trò chơi (thường là đa luồng) và làm việc với các thiết bị nhúng.

Bên cạnh đó, tôi nghĩ rằng đó là lợi ích tốt nhất của sinh viên đại học để họ được tiếp xúc với càng nhiều ý tưởng khác nhau càng tốt. Rất nhiều ngôn ngữ lập trình và mô hình. Rất nhiều lĩnh vực khác nhau của ứng dụng. Một lượng toán hợp lý (một lần nữa, vì nó rất hữu ích) và cũng có một số tiếp xúc với các yếu tố con người và tâm lý (vì bất kỳ phần mềm nào tương tác với người dùng đều giao dịch với mọi người). Rốt cuộc, bạn không bao giờ biết chính xác những gì bạn sẽ làm trong tương lai, vì vậy lập kế hoạch cho sự linh hoạt là một chiến lược cuộc sống tuyệt vời.


1

Khi tôi học đại học, có khá nhiều chủ đề mà tôi không thể thấy được sử dụng trong cuộc sống thực của mình và đôi khi trực giác đó đã được chứng minh là đúng (Phương pháp chính thức thực sự chỉ thực tế đối với các vấn đề tầm thường trong hầu hết các trường hợp) và những lần khác đã hoàn toàn sai (ký hiệu Big-O rất hữu ích) vì vậy tôi đoán rằng toàn bộ bản thân trẻ hơn của tôi là một phần đúng.

Nếu bạn muốn chuẩn bị cho thế giới thực, ngoài những thứ @ K-Ran khuyên ở trên, tôi khuyên bạn nên đọc Code Complete và sử dụng nó làm cơ sở để nghiên cứu sâu hơn về bất kỳ chủ đề nào bạn cảm thấy khó khăn hoặc không cảm thấy bạn có đủ bảo hiểm.


Đôi khi tôi đã thấy các phương thức chính thức hữu ích, mặc dù rõ ràng chỉ trên các thành phần nhỏ. Tôi nghĩ về Dijkstra et al. như nói một cái gì đó như "Nếu bạn là một nhà toán học hoàn hảo, bạn có thể là một lập trình viên giỏi."
David Thornley

Tôi nghi ngờ nếu bạn đang làm việc với mã mà cuộc sống sẽ phụ thuộc vào bạn về cơ bản phải có một nắm vững về công cụ này. Nhưng đối với công việc tôi đã làm thì chưa bao giờ cần thiết. Nếu tôi cần nó ngay bây giờ, tôi sẽ phải quay lại và học lại từ đầu ...
glenatron

Những thứ như Z chỉ thực sự được sử dụng cho phần mềm quan trọng trong các tổ chức, như bạn nói, cuộc sống có nguy cơ. Tuy nhiên, tôi nghĩ rằng việc học chúng tạo ra nhận thức lớn hơn nhiều về tính chính xác của mã và mang lại chiều sâu cho sự trở lại đầy đủ trong đặc điểm kỹ thuật của tất cả các loại. Đôi khi những gì bạn học không phải vì lợi ích của riêng nó, mà giúp đảm bảo những gì nổi bật hơn.
Orble

Hãy nghĩ về nó như làm cho các khối xây dựng lớn hơn là vững chắc. Nếu bạn đã chứng minh các thành phần của mình đúng (và đã kiểm tra chúng để tìm ra những lỗi ngu ngốc mà bạn đã mắc phải trong thiết kế và bằng chứng), bạn sẽ có ít điều phải lo lắng hơn khi viết và gỡ lỗi.
David Thornley

1

Tôi nghĩ bạn nên học như sau:

Hệ điều hành: - Mặc dù bạn có thể không cần nó để làm việc như một lập trình viên nhưng điều đáng để biết là một hệ điều hành hoạt động như thế nào và nó được mong đợi từ một lớp CS. Bất kỳ cuốn sách tốt có thể giúp đỡ.

OOP: - Đây là bánh mì và bơ. Phải. Sách nếu bạn muốn hỏi: Cuốn sách đầu tiên của bạn nên là: - đầu tiên là OOAD, sau đó bạn có thể tìm cuốn sách của Grady Booch và Ivar Jacobson

Cấu trúc dữ liệu và thuật toán: - Rất quan trọng để phát triển tư duy logic và tư duy.

Đối với tôi điều này là đủ. Không bao giờ là quá muộn. :)


1

Là một người thường xuyên phỏng vấn ứng viên cho các công việc lập trình và một người sau khi làm việc trong hơn 12 năm cảm thấy hoàn thành hợp lý, tôi sẽ đề xuất những điều sau đây

  • Thiết kế cơ sở dữ liệu & SQL: Thật đáng ngạc nhiên khi nhiều lập trình viên không biết SQL đơn giản và những người có kỹ năng SQL tốt là vô giá. Để có thể thiết kế một cơ sở dữ liệu tốt có thể không hữu ích trong một công ty có cấu trúc cơ sở dữ liệu được thiết lập, đối với các công ty mới khởi nghiệp và các công ty đang trải qua thay đổi, đó là một PHẢI!
  • Mẫu thiết kế. Đơn giản họ sẽ giúp bạn đưa ra quyết định tốt hơn về thiết kế tốt
  • OOP: Đây thường là một yêu cầu trước cho hầu hết các khóa học, nhưng nó sẽ giúp ích.
  • Thuật toán: Bởi vì rất ít người biết đệ quy là gì, hãy để một mình hiểu khi nào nó có thể tiết kiệm cho họ rất nhiều mã hóa phức tạp
  • Cấu trúc dữ liệu: Hầu hết các ngôn ngữ hiện đại đều xử lý công cụ này cho bạn, nhưng hiểu chúng là chìa khóa để thiết kế tốt.

Sau đó, một số công việc ngoại khóa, đọc:

  • Chứng nhận loại sách. Họ thường dạy bạn bên dưới kiểu bao gồm cú pháp và toán tử. Điều quan trọng hơn nhiều là BIẾT lý do tại sao bạn đang làm một việc gì đó, thay vì "vì nó hoạt động", điều này rất phổ biến.

1

NÓ SỞ HỮU , không có một câu trả lời hay cho câu hỏi này.

Lập trình viên là một thế giới chung để xác định một người viết phần mềm máy tính.

Bây giờ, có những phần mềm các loại. Ví dụ: sử dụng wikipedia làm nguồn tổng quát hóa, chúng ta có thể gặp 3 khái quát lớn :

  • lập trình hệ thống
  • phần mềm lập trình
  • phần mềm ứng dụng

Trong lập trình hệ thống trường đầu tiên phát triển trình điều khiển thiết bị, hệ điều hành, máy chủ, ví dụ bạn có thể theo một khóa học về hệ điều hành.

Nhưng còn phần mềm lập trình thì sao? Ở đây như wikipedia đã viết, bạn có thể viết mã trình biên dịch, trình gỡ lỗi, trình thông dịch, trình liên kết, trình soạn thảo văn bản, vì vậy, một khóa học về lý thuyết tự động, lý thuyết ngôn ngữ, ngôn ngữ và trình biên dịch có thể hữu ích.

Không phải chúng ta có thể nói về phần mềm ứng dụng dưới bất kỳ hình thức nào:
- trò chơi video: đại số, vật lý, các khóa học hướng đối tượng?
- Phần mềm toán học: khóa học toán?
- Chỉnh sửa hình ảnh: toán học, vật lý, thuật toán?
- tự động hóa công nghiệp: toán học, vật lý, thuật toán, khóa học robot?
- phần mềm y tế: sinh học, y tế, khóa học nào khác?
- rất nhiều thứ ở đây: rất nhiều khóa học ở đây.

Như bạn có thể thấy có rất nhiều khóa học bạn có thể làm theo và sẽ trở nên hữu ích cho công việc của bạn.

Theo kinh nghiệm của tôi, tôi là một phần mềm ứng dụng và kỹ thuật phần mềm hệ thống trong lĩnh vực bảo mật (bạn muốn theo khóa học bảo mật?), Bắt đầu từ một chút kinh nghiệm trong lập trình, tôi cảm thấy thú vị hơn về thuật toán và hệ thống phân tán và một lần nữa tôi cảm thấy không thoải mái về tính đơn giản của ứng dụng mục đích chung mà tôi đã viết (sniffer, hệ thống phát hiện xâm nhập mạng, trình phân tích giao thức và trình phát hiện, v.v.).

Như bạn đã học được một cách chua chát trong khoa học máy tính lý thuyết! bạn đã làm bùng nổ các khóa học này? : P

Ví dụ, bạn đã học được rằng tất cả ngôn ngữ máy tính có thể được trang bị trong một tập hợp các hàm toán học có thể tính toán được và ví dụ nếu kinh nghiệm của bạn có cùng đường dẫn với tôi, chẳng mấy chốc bạn cảm thấy khó chịu trong tập tính toán nhỏ này và giống như tôi, bạn có thể bắt đầu phát triển phần mềm không hấp dẫn và đáng kinh ngạc vì cùng một THIẾT KẾ THIẾT KẾ trở lại một lần nữa (bạn có theo dõi các khóa học mẫu thiết kế không?) và ví dụ bạn có thể bắt đầu quan tâm nhiều hơn đến TẠI SAO và ngôn ngữ có thể được dịch theo chức năng toán học và bắt đầu học rằng ngôn ngữ máy tính không quá phức tạp! ví dụ bạn có thể sớm ngạc nhiên hơn về con người và tâm lý, và bạn có thể nhận được nhiều sự quan tâm hơn về nó và trở thành một người quản lý dự án tốt! Bạn đã theo dõi các khóa học về vòng đời phần mềm chưa?

Vậy bây giờ, khóa học PHẢI-CÓ trong sự nghiệp CS của bạn là gì?

Tôi khuyên bạn nên học nhiều nhất có thể trong tất cả các lĩnh vực, đặc biệt là trong lĩnh vực lý thuyết, bởi vì trong lĩnh vực công việc chung, bạn có thể sớm cảm thấy thực sự buồn chán về sự phức tạp nhỏ xung quanh mình và trở thành một công nhân toàn thời gian mà bạn thực sự có ít thời gian để học Làm thế nào mọi thứ thực sự hoạt động và nhiều thời gian hơn để xem làm thế nào những người có kiến ​​thức lý thuyết mạnh mẽ đã dự kiến ​​những thứ để làm việc và cung cấp cho bạn khả năng mã hóa để có được thực phẩm ở nhà.

có một cảm giác sai về thực tế trong khoa học máy tính. nhà khoa học máy tính chẳng hạn đôi khi thực sự xa nhà phát triển phần mềm.

hãy xem lời giải thích của wikipedia.

vui vẻ với cuộc sống :)

2 xu của tôi.

xin lỗi vì tiếng anh rất tệ


1

Điều quan trọng nhất mà sinh viên CS cần thành thạo là tiếng Anh.

Nếu không có sự hiểu biết về cả nói và viết tiếng Anh, bạn sẽ mãi mãi ở thế bất lợi.

Chỉ cần nhìn vào vô số câu hỏi xuất hiện trên các trang web Stack. Cách quá nhiều trong số họ là khó để giải mã. Một số người sử dụng kết hợp l33t, nhắn tin (không chắc thuật ngữ chính xác). Những người khác đưa ra một tuyên bố và chỉ đơn giản là thêm một dấu hỏi trong khi thiếu những suy nghĩ quan trọng như động từ hoặc tính từ.

Nếu bạn không thể giao tiếp thì bạn sẽ không thể khiến bản thân hiểu ít hơn những gì người khác đang nói.

Mọi thứ khác chỉ là chi tiết. Nếu bạn có thể giao tiếp, có ít nhất trí thông minh trung bình và có thể hiểu những gì bạn đọc thì bạn cũng có thể có một chương trình nghề nghiệp thành công.


1

Tôi đến với điều này từ một quan điểm hơi khác ở chỗ tôi không tốt nghiệp CS, tôi tốt nghiệp ngành Kỹ thuật điện tử (với một trẻ vị thành niên trong kinh doanh).

Dựa vào đó tôi nghĩ rằng một danh sách những điều bạn phải hiểu là tương đối ngắn vì tôi (và nhiều sinh viên CS không phải là sinh viên tốt nghiệp khác) sống sót hạnh phúc mà không biết gì về thiết kế trình biên dịch hoặc tương tự.

Những gì tôi sẽ nói tôi đã chọn rằng tôi thấy hữu ích:

  • Thiết kế RDBMS - Các RDBMS ngồi sau hầu hết các hệ thống và trang web và bạn nên hiểu ít nhất những điều cơ bản về những gì đang diễn ra (tôi đã học được điều này trong công việc).
  • Thiết kế giao diện người dùng cơ bản - tất cả các lập trình viên giỏi nhất mà tôi từng làm việc có thể tạo ra một ứng dụng có thể sử dụng không xấu như địa ngục. Ngoại trừ một nhưng anh ta là ngoại lệ chứng minh quy tắc.
  • Một số chương trình cơ bản - và tôi có nghĩa là cơ bản. Tôi đã học được một số C (để xử lý hình ảnh và hệ thống nhúng), một số Ngôn ngữ hội (mà tôi đã quên trong vài tuần sau khi hoàn thành khóa học) và một số Pascal (một khóa học máy tính cơ bản là tiêu chuẩn cho tất cả các kỹ sư). Khi phỏng vấn tôi choáng váng về việc có bao nhiêu sinh viên tốt nghiệp CS thực sự có thể lập trình theo bất kỳ cách nào mà các tổ chức thương mại sẽ coi là hữu ích vì vậy tôi không mong đợi nhiều, nhưng tôi thực sự mong họ biết những điều cơ bản.
  • Logic - Tôi đã học nó thông qua các thiết bị điện tử kỹ thuật số, các nhà toán học thông qua lý thuyết, CS tốt nghiệp thông qua lập trình nhưng tuy nhiên bạn học nó, bạn nên nắm bắt tốt về nó vì có quá nhiều thứ liên quan đến nó.
  • Kỹ năng giao tiếp - Tôi đã thực hiện một vài khóa học tại trường đại học ngoài bằng cấp thực tế, kỹ năng thuyết trình và sự quyết đoán của mình. Rất nhiều ý nghĩa thông thường nhưng nó không bao giờ đau đớn để được nói những điều hợp lý một vài lần.
  • Những điều cơ bản của kinh doanh và kế toán. Một số lập trình viên hành động như vậy không thành vấn đề nhưng với tôi, nó quan trọng với bất kỳ ai làm việc trong công ty - đây là cách trò chơi hoạt động và nó sẽ kiểm soát cuộc sống của bạn, vậy tại sao bạn không muốn biết ít nhất là sự thô lỗ của Làm thế nào và tại sao mọi thứ xảy ra?

Và nếu bạn có cơ hội tìm hiểu về quản lý dự án thì điều đó thực sự sẽ không gây hại nhưng điều đó được dạy khá tệ ở trường đại học trong nhiều trường hợp và đó là điều bạn sẽ học được một chút về công việc chỉ bằng cách làm việc trong các dự án.


0

Tôi cũng sẽ thêm một số khóa học về Nhân lực / Tâm lý cơ bản vào danh sách.

Điều này có vẻ như là một bổ sung kỳ lạ, nhưng một phần của công việc một cách chuyên nghiệp là học cách bán mình và đàm phán. Bước vào cuộc phỏng vấn 'thực sự' đầu tiên của bạn mà không có kiến ​​thức vững chắc về động lực của HR-drone là một công thức cho thảm họa và có khả năng kết thúc với việc sinh viên bị vướng vào mức lương thấp.

Biết kẻ thù của bạn để bạn có thể bảo vệ chính mình.


-1

Năm thứ nhất:

  1. OOP cơ bản trong một ngôn ngữ cấp cao
  2. Cấu trúc dữ liệu

năm thứ 2:

  1. Trình biên dịch, bạn xây dựng một mẫu đơn giản
  2. Đồng thời

Năm thứ ba:

  1. Thuật toán
  2. Hệ điều hành, bạn thêm các chức năng và cải tiến vào một đơn giản
  3. Ngôn ngữ trang trọng

Năm thứ 4:

  1. Mạng
  2. Hệ thống phân phối
  3. Giao diện người dùng
  4. Trình biên dịch nâng cao
  5. Hệ điều hành tiên tiến
  6. Trí tuệ nhân tạo
  7. Đô họa may tinh

Những khóa học nên cung cấp nhiều lý thuyết và thực hành mã hóa.


-2

Thật lạ khi không ai nhắc đến Kiến trúc máy tính.


Tôi nghĩ kiến ​​trúc máy tính là quan trọng để biết nếu bạn muốn hiểu tác động của bộ nhớ đệm, lỗi trang, v.v.
apoorv020
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.