計算機科學-為什麼要教書?
「程式設計不是你知道的事情。這是你能弄清楚的事情。” Chris Pine,程式設計專家、書籍和教學的作者。 「在某些方面,程式設計就像畫畫。一開始,你只有一塊空白的畫布和材料。你需要結合科學、藝術和工藝來弄清楚如何處理這一切。” Andrew Hunt 是暢銷書《實用程式設計師》的作者,也是《敏捷宣言》的合著者。不難理解我們的前進方向。要成為一名真正優秀的程式設計師,或者只是比普通程式設計師至少提升一級,除了程式語言本身之外,您還需要在各個領域擁有最廣泛且同時相當深入的知識。掌握電腦科學概念中包含的學科是這裡的首要任務之一。電腦科學學科
讓我們看看電腦科學領域包括哪些科目。為了對學科進行簡短描述以及研究這些學科的理由,我們將添加有關該主題的最佳書籍和最佳免費視頻講座系列的推薦,這可能是由Oz Nova 和 Myles 撰寫的最好的計算機科學英語指南伯恩是舊金山布拉德菲爾德電腦科學學院的教師。-
程式設計
程式設計是電腦科學的基礎和基礎學科,大多數學生都是從它開始學習CS課程的。最好的 CS 程式設計課程不僅對初學者有用,而且對那些在第一次學習時可能錯過某些程式設計概念和模型的經驗豐富的程式設計師也有用。
Лучшая книга: “Структура и интерпретация компьютерных программ” (Structure and Interpretation of Computer Programs). Authorы: Джеральд Сассман (Gerald Sussman) и Хэл Абельсон (Hal Abelson).
А на JavaRush, кстати говоря, всем желающим доступен для изучения легендарный гарвардский курс “CS50. Основы программирования”, fully переведенный на русский.
Лучшая видеолекция: Brian Harvey’s Berkeley CS 61A
-
Алгоритмы и структуры данных
Знание наиболее распространенных алгоритмов и структур данных помогает решать разного рода задачи, а это очень важно в любой из областей компьютерных наук, включая, конечно, и разработку программного обеспечения.
Лучшая книга: The Algorithm Design Manual. Author: Стивен Скьена (Steven Skiena).
Лучшая видеолекция: лекции Стивена Скьены
-
Компьютерная архитектура
Знание компьютерной архитектуры, то есть понимание того, How на самом деле работает компьютер, является еще одной важной частичкой пазла, без которой попытки построения программных конструкций и моделей часто оказываются неудачными.
Лучшая книга: “Архитектура компьютера и проектирование компьютерных систем” (Computer Organization and Design). Authorы: Дэвид Паттерсон (David Patterson) и Джон Хеннеси (John Hennessy).
Лучшая видеолекция: Berkeley CS 61C
-
Операционные системы
Практически весь code, написанный программистом, будет выполняться операционной системой, поэтому знание принципов работы ОС также является важным элементом.
Лучшая книга: “Введение в операционные системы” (Operating Systems: Three Easy Pieces). Authorы: Андреа Арпачи-Дюссо (Andrea Arpaci-Dusseau) и Ремзи Арпачи-Дюссо (Remzi Arpaci-Dusseau).
Лучшая видеолекция: Berkeley CS 162
-
Компьютерные сети
Мало что в современном ИТ может обойтись без использования Интернета, поэтому ИТ-специалистам важно понимать, How Всемирная сеть работает, чтобы использовать ее потенциал по полной.
Лучшая книга: Computer Networking: A Top-Down Approach. Authorы: Джеймс Куросе (James Kurose), Кит Росс ( Keith Ross).
Лучшая видеолекция: Stanford CS 144
-
Математика для computer science
Поскольку компьютерные науки, по сути, являются ответвлением прикладной математики, знание этого предмета тоже будет очень полезным практически в любой профессии, связанной с программированием. А также даст вам конкурентное преимущество перед теми, кто этой дисциплиной не владеет.
Лучшая книга: Mathematics for Computer Science. Authorы: Альберт Р. Мейер (Albert R. Meyer), Эрик Леман (Eric Lehman) и Фрэнк Томсон Лейтон (Frank Thomson Leighton).
Лучшая видеолекция: Tom Leighton’s MIT 6.042J
-
Базы данных
資料庫是電腦科學中一個相對較新的領域,而且該領域的專家仍然不多。數據是電腦科學的另一個關鍵要素,因為它支撐著最重要的程序,但很少有人了解資料庫系統的實際運作原理。
最佳書籍:資料庫系統讀物。作者:約瑟夫‧M‧海勒斯坦 (Joseph M. Hellerstein) 與麥可‧斯通布雷克 (Michael Stonebraker)。
-
語言和編譯器
了解程式語言和編譯器在技術上的工作原理可以讓您提高程式碼和程式設計技能。它還使學習新語言變得更加容易,從長遠來看,這對任何開發人員來說也至關重要。
最佳書籍:編譯器:原理、技術與工具。作者:阿爾弗雷德·阿霍、莫妮卡·S·林、拉維·塞西、傑弗裡·烏爾曼。
最佳視訊講座: Alex Aiken 的 Lagunita 課程
-
分散式系統
如今,大多數系統都是分散式的。電腦和程式變得越來越複雜,分散式系統的知識將有助於確保您的軟體正確流暢地運作。
最佳書籍:分散式系統,第三版。作者:馬丁·範·斯蒂恩和安德魯·S·塔南鮑姆。
最佳視訊講座:CS 436:分散式電腦系統
學習電腦科學的技巧
最後,給那些計劃開始學習電腦科學學科的人一些建議。-
培養計算機科學學科的實用技能
與其他 IT 課程一樣,CS 的優勢之一是您剛剛獲得的理論技能可以立即應用於實踐。不要忘記這一點,將理論與實踐結合,以獲得最佳結果。
-
不要拖延
電腦科學是一門相當複雜的學科,對少數人來說學習它很容易,尤其是剛開始的時候。這就是為什麼在開始學習CS學科時,要避免拖延——不要把理論的掌握、解決問題和實踐拖到以後,因為這不僅會讓學習時間變得很長,而且很可能不會那麼有效。
-
不要將自己限制在一門課程
不要指望能夠從一門課程中獲得某一學科所需的所有知識,無論它有多好。最好至少諮詢幾個資訊來源,以獲得對該主題更廣泛的了解。
-
尋找志同道合的人
這聽起來有點老套,但有效的學習,就像做生活中的許多其他事情一樣,最好是與一群志同道合的人一起完成。出於多種原因,尋找團隊來學習 CS 是有益的。這將幫助您更有效地學習,共同解決任務和問題,與他人比較您的學習進度和應用新知識的技能。
-
學習寫文字,而不僅僅是程式碼
許多專家對那些學習CS以提高技能、提高專業水平的程式設計師的另一個共同建議是:學會寫作(不是代碼),即把單字放入句子中,並從句子中組成文本。這項技能對任何開發人員來說都非常重要,它的缺乏不僅會阻礙電腦科學研究的進步,還會阻礙程式設計作為職業的其他方面的進步。
GO TO FULL VERSION