記得我本科的課程有數學、英語、統計學、編程導論、演算法導論、進階演算法、人工智慧、語言學導論、語意學、哲學導論、心靈哲學、計算語言學、心理學導論、生物心理學、認知心理學、進階認知心理學、神經科學導論等。雖然沒拿到 first hon,但也過得去吧。而且這和我在大二時創業時自學 SQL、C#、http://ASP.NET 沒什麼衝突,我當時也為興趣學了 Direct3D、OpenGL 及一部分計算機圖形學、遊戲引擎相關知識等。我覺得不用「取捨」,在完成基本專業內的課,儘力學習自己有興趣的知識。
個人認為,程序員最基礎的是編程和演算法方面的知識,後者你可能比較缺乏。做軟體的話,最好也可以學一點軟體工程上的,但必需通過實踐來學習。而做研究的話,你需要選擇一些理論或應用方向,例如應用方面有人工智慧(機器學習、計算機視覺)、圖形、數據、網路等等。
學弟你好。我是swu自動化專業的,去年畢業,現在從事嵌入式軟體開發的工作,談談我的一些感受吧。咱們學習的課程大概90%都相同。不過說實話,咱們學校cs方面的實力不怎麼樣,看到你想要考研,建議選擇一些cs牛校(國內的話北郵北航等,據我所知狼廠里過半職員都來自這兩個學校,想進去可以找學長學姐內推),不過說實話做軟體開發更看重你的實力而不是學歷,狼廠里也有專科生,碩士進去也就比本科多2k左右。如果再讓我讀一次本科的話,我會選擇把所有基礎都認認真真學好,而不是去挑選所謂更有用的課程。參加工作後你幾乎是沒有時間再來學習基本課程的,而你工作需要的技能,只要進了大廠並且基本功過硬,就算你毛都不會都能把你培養成能適應崗位的人。基礎課程是內功,內功打好學什麼都快,因為你明白原理,不會只知其然,在工作中,能解決難題的往往也是基本功深厚的人,在團隊內解決問題擔任救星升職加薪不是夢( ????? )。計算機科學的基本科目有哪些可以在知乎上搜其他答案,然後對應這些科目去找相關的經典書籍,雖然計科的書碰到一本就是800多頁的大部頭,但是如果你英語水平過硬的話還是推薦你看英文原版,大部分譯本都有問題,會帶來歧義,平常上課就作為對知識點的補充和查漏補缺吧。苦逼如我以前沒好好學習,現在都是用下班時間惡補基礎。做後端的話我也不懂,大概就是學linux,php,java吧,等大神來答。最後別再說什麼對課程的取捨了,這句話在我看來只是在企圖給想要偷懶的自己找心裡安慰罷了,想要成為大牛,就得肯下功夫,計算機是應用科學,沒有捷徑的。昨天剛回重慶出差,苦逼長水痘發燒打點滴中,語言比較混亂,請見諒。做了一點微小的工作,謝謝大家。
Google 有一個 Technical Development Guide可以參考。https://www.google.se/about/careers/students/guide-to-technical-development.html
This guide provides tips and resources to help you develop your technical skills (academically and non-academically) through self-paced, hands-on learning.
This guide is intended to target Computer Science students seeking an internship or university grad role at Google.
How to use this guide
You can use this guide to determine which courses to take, but be sure stay on track with your courses required for your major to graduate.
We encourage you to learn more outside of this guide. The more you know, the better!
The online resources we』ve cited aren』t meant to replace courses available at your university, but they may help supplement your education or provide an introduction to a topic.
The information and recommendations in this guide were gathered through our work with students and candidates in the field. It is a work-in-progress, living document, so be sure to periodically check back for updates.
Note: Following the recommendations in the guide does not guarantee a job at Google.
Tips and Resources
Follow our Google for Students +Page to get additional tips and resources, and connect with other students.
Recommendations and ResourcesTake an 「Introduction to CS」 courseFocus on basic coding instructions
Online resources:
Udacity - Introduction to Computer Science
Coursera - Computer Science 101
Code in (at least) ONE object-oriented programming language (C++, Java?, Python?)Beginner online resources:
Coursera - Learn to Program: The Fundamentals
MIT Intro to Programming in Java
Google"s Python Class
Coursera - Introduction to Python, Python Open Source E-Book
Intermediate online resources:
Udacity"s Design of Computer Programs
Coursera - Learn to Program: Crafting Quality Code, Coursera - Programming Languages
Brown University - Introduction to Programming Language
Learn other programming languagesAdd to your repertoire:
JavaScript?
CSS HTML
Ruby?
PHP?
C?
Perl?
Shell? script
Lisp?
Scheme?
Online resources:
Codecademy
Udacity - Mobile Web Development
Udacity - HTML5 Game Development
Test your codeLearn how to catch bugs, create tests, and break your software
Online resources:
Udacity - Software Testing Methods
Udacity - Software Debugging
Develop logical reasoning and knowledge of discrete mathOnline resources:
MIT Mathematics for Computer Science
Coursera - Introduction to Logic
Coursera - Linear and Discrete Optimization
Coursera - Probabilistic Graphical Models
Coursera - Game Theory
Develop a strong understanding of algorithms and data structuresLearn about fundamental data types (stack, queues, and bags), sorting algorithms (quicksort, mergesort, heapsort), data structures (binary search trees, red-black trees, hash tables), and Big O.
Online resources:
MIT Introduction to Algorithms
Coursera - Introduction to Algorithms Part 1 Part 2
Coursera - List of Algorithms
Coursera - List of Data Structures
Coursera - Book:The Algorithm Design Manual
Develop a strong knowledge of operating systemsOnline resources:
UC Berkeley Computer Science 162
Learn UX designOnline resources:
Udacity - UX Design for Mobile Developers
Learn artificial intelligenceOnline resources:
Stanford University - Introduction to Robotics
Stanford University - Natural Language Processing
Stanford University - Machine Learning
Learn how to build compilersOnline resources:
Coursera - Compilers
Learn cryptographyOnline resources:
Coursera - Cryptography
Udacity - Applied Cryptography
Learn parallel programmingOnline Resources:
Coursera - Heterogeneous Parallel Programming
Work on projects outside of the classroomCreate and maintain a website, build your own server, or build a robot
Online resources:
Apache List of Projects
Google Summer of Code
Google Developer Group
Work on a small piece of a large system (codebase), read and understand existing code, track down documentation, and debugGitHub is a great way to read other people』s code or contribute to a project
Online resources:
GitHub?
Kiln?
Work on projects with other programmersThis will help you improve your ability to work well in a team and enable you to learn from others.Practice your algorithmic knowledge and coding skillsPractice your algorithmic knowledge through coding competitions like CodeJam or ACM』s International Collegiate Programming Contest.
Online resources:
CodeJam
ACM ICPC
Become a teaching assistantHelping to teach other students will help enhance your knowledge in the subject matter.Gain internship experience in software engineeringIn the U.S., internships take place during summer (May–September). Applications are usually accepted several months in advance.