计算机科学——为什么要教书?
“编程不是你知道的事情。这是你能弄清楚的事情。” Chris Pine,编程专家、书籍和教程的作者。 “在某些方面,编程就像画画。一开始,你只有一块空白的画布和材料。你需要结合科学、艺术和工艺来弄清楚如何处理这一切。” Andrew Hunt 是畅销书《实用程序员》的作者,也是《敏捷宣言》的合著者。不难理解我们的前进方向。要成为一名真正优秀的程序员,或者只是比普通程序员至少提升一级,除了编程语言本身之外,您还需要在各个领域拥有最广泛且同时相当深入的知识。掌握计算机科学概念中包含的学科是这里的首要任务之一。计算机科学学科
让我们看看计算机科学领域包括哪些科目。为了对学科进行简短描述以及研究这些学科的理由,我们将添加有关该主题的最佳书籍和最佳免费视频讲座系列的推荐,这可能是由Oz Nova 和 Myles 撰写的最好的计算机科学英语指南伯恩是旧金山布拉德菲尔德计算机科学学院的教师。-
编程
编程是计算机科学的基础和基础学科,大多数学生都是从它开始学习CS课程的。最好的 CS 编程课程不仅对初学者有用,而且对那些在第一次学习时可能错过某些编程概念和模型的经验丰富的程序员也有用。
最佳书籍:计算机程序的结构和解释。作者:杰拉尔德·萨斯曼和哈尔·阿贝尔森。
А на 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
-
Базы данных
Базы данных — относительно новая область компьютерных наук, и экспертов в ней по-прежнему не так уж много. Данные — еще один ключевой элемент CS, потому что они лежат в основе большинства значимых программ, но мало кто понимает, How на самом деле работают системы баз данных.
最佳书籍:数据库系统读物。作者:约瑟夫·M·海勒斯坦 (Joseph M. Hellerstein) 和迈克尔·斯通布雷克 (Michael Stonebraker)。
-
语言和编译器
了解编程语言和编译器在技术上的工作原理可以让您提高代码和编程技能。它还使学习新语言变得更加容易,从长远来看,这对于任何开发人员来说也至关重要。
最佳书籍:编译器:原理、技术和工具。作者:阿尔弗雷德·阿霍、莫妮卡·S·林、拉维·塞西、杰弗里·乌尔曼。
最佳视频讲座: Alex Aiken 的 Lagunita 课程
-
分布式系统
如今,大多数系统都是分布式的。计算机和程序变得越来越复杂,分布式系统的知识将有助于确保您的软件正确流畅地运行。
最佳书籍:分布式系统,第三版。作者:马丁·范·斯蒂恩和安德鲁·S·塔南鲍姆。
最佳视频讲座:CS 436:分布式计算机系统
学习计算机科学的技巧
最后,给那些计划开始学习计算机科学学科的人一些建议。-
培养计算机科学学科的实用技能
与其他 IT 课程一样,CS 的优势之一是您刚刚获得的理论技能可以立即应用于实践。不要忘记这一点,将理论与实践相结合,以获得最佳结果。
-
不要拖延
计算机科学是一门相当复杂的学科,对少数人来说学习它很容易,尤其是刚开始的时候。这就是为什么在开始学习CS学科时,要避免拖延——不要把理论的掌握、解决问题和实践拖到以后,因为这不仅会让学习时间变得很长,而且很可能不会那么有效。
-
不要将自己限制于一门课程
不要指望能够从一门课程中获得某一学科所需的所有知识,无论它有多好。最好至少咨询几个信息源,以获得对该主题更广泛的了解。
-
寻找志同道合的人
这听起来有点老套,但有效的学习,就像做生活中的许多其他事情一样,最好是与一群志同道合的人一起完成。出于多种原因,寻找一个团队来学习 CS 是有益的。这将帮助您更有效地学习,共同解决任务和问题,与他人比较您的学习进度和应用新知识的技能。
-
学习写文字,而不仅仅是代码
许多专家对那些学习CS以提高技能、提高专业水平的程序员的另一个共同建议是:学会写作(不是代码),即把单词放入句子中,并从句子中组成文本。这项技能对于任何开发人员来说都非常重要,它的缺乏不仅会阻碍计算机科学研究的进步,还会阻碍编程作为职业的其他方面的进步。
GO TO FULL VERSION