Computer Science – навіщо вчити?
“Програмування – це не щось, що ви знаєте. Це щось, у чому ви можете розібратися. Кріс Пайн, експерт у програмуванні, автор книг та підручників. “У певному сенсі програмування схоже на малювання. Спочатку у вас є тільки чисте полотно та матеріали. Потрібно використати поєднання науки, мистецтва та ремесла, щоб визначити, що з усім цим робити.” Ендрю Хант (Andrew Hunt), автор бестселера The Pragmatic Programmer та один з авторів Маніфесту Agile. Зрозуміти, до чого ми ведемо, нескладно. Щоб стати дійсно хорошим програмістом, або просто піднятися хоча б на щабель вище рядового кодера, потрібно мати максимально широкі і при цьому досить глибокі знання у різних сферах, крім самих мов програмування. І володіння дисциплінами, що входять у поняття CS, йде тут на одному з перших місць.Дисципліни Сomputer Science
Давайте розберемо, які предмети входять у область комп'ютерних наук. До коротких описів дисциплін з причинами для їх вивчення додамо рекомендації кращої книги та кращої серії безкоштовних відеолекцій з предмета, мабуть, кращого англомовного гайду по computer science, написаного Озом Новою (Oz Nova) та Майлзом Бірном (Myles Byrne), Бредфілд в Сан-Франциско.-
Програмування
Програмування є основою та базовою дисципліною комп'ютерних наук, більшість студентів починають вивчення курсу CS саме з нього. Найкращі курси програмування в рамках CS будуть корисні далеко не лише новачкам, а й досвідченим кодерам, які могли пропустити ті чи інші концепції та моделі програмування, коли навчалися цього вперше.
Краща книга: "Структура та інтерпретація комп'ютерних програм" (Structure and Interpretation of Computer Programs). Автори: Джеральд Сассман (Gerald Sussman) та Хел Абельсон (Hal Abelson).
А на JavaRush, до речі, всім бажаючим доступний для вивчення легендарний гарвардський курс “CS50. Основи програмування” , повністю перекладений російською.
Найкраща відеолекція: Brian Harvey's Berkeley CS 61A
-
Алгоритми та структури даних
Знання найбільш поширених алгоритмів і структур даних допомагає вирішувати різного роду завдання, а це дуже важливо в будь-якій області комп'ютерних наук, включаючи, звичайно, і розробку програмного забезпечення.
Найкраща книга: The Algorithm Design Manual. Автор: Стівен Ск'єна (Steven Skiena).
Найкраща відеолекція: лекції Стівена Скьєни
-
Комп'ютерна архітектура
Знання комп'ютерної архітектури, тобто розуміння того, як працює комп'ютер, є ще однією важливою частинкою пазла, без якої спроби побудови програмних конструкцій і моделей часто виявляються невдалими.
Найкраща книга: "Архітектура комп'ютера та проектування комп'ютерних систем" (Computer Organization and Design). Автори: Девід Паттерсон (David Patterson) та Джон Хеннесі (John Hennessy).
Найкраща відеолекція: Berkeley CS 61C
-
Операційні системи
Практично весь код, написаний програмістом, виконуватиметься операційною системою, тому знання принципів роботи ОС також є важливим елементом.
Найкраща книга: "Введення в операційні системи" (Operating Systems: Three Easy Pieces). Автори: Андреа Арпачі-Дюссо (Andrea Arpaci-Dusseau) та Ремзі Арпачі-Дюссо (Remzi Arpaci-Dusseau).
Найкраща відеолекція: Berkeley CS 162
-
Комп'ютерні мережі
Мало що в сучасному ІТ може обійтися без використання Інтернету, тому ІТ-фахівцям важливо розуміти, як Всесвітня мережа працює, щоб використати її потенціал на повну.
Найкраща книга: Computer Networking: A Top-Down Approach. Автори: Джеймс Куросе (James Kurose), Кіт Росс (Keith Ross).
Найкраща відеолекція: Stanford CS 144
-
Математика для computer science
Оскільки комп'ютерні науки, по суті, є відгалуженням прикладної математики, знання цього предмета теж буде дуже корисним практично у будь-якій професії, пов'язаній із програмуванням. А також дасть вам конкурентну перевагу перед тими, хто не володіє цією дисципліною.
Краща книга: Mathematics for Computer Science. Автори: Альберт Р. Мейєр (Albert R. Meyer), Ерік Леман (Eric Lehman) та Френк Томсон Лейтон (Frank Thomson Leighton).
Найкраща відеолекція: Tom Leighton's MIT 6.042J
-
Бази даних
Бази даних — відносно нова галузь комп'ютерних наук, і експертів у ній, як і раніше, не так багато. Дані є ще одним ключовим елементом CS, тому що вони лежать в основі більшості значущих програм, але мало хто розуміє, як насправді працюють системи баз даних.
Найкраща книга: Readings in Database Systems. Автори: Джозеф М. Хеллерштейн (Joseph M. Hellerstein) та Майкл Стоунбрейкер (Michael Stonebraker).
Найкраща відеолекція: Joe Hellerstein's Berkeley CS 186
-
Мови та компілятори
Розуміння того, як технічно працюють мови програмування та компілятори, дозволяє вдосконалювати свій код та навички програмування. А також полегшує вивчення нових ЯП, що також критично важливо для будь-якого розробника в довгостроковій перспективі.
Краща книга: "Компілятори: принципи, технології та інструменти" (Compilers: Principles, Techniques and Tools). Автори: Альфред Ахо (Alfred Aho), Моніка С. Лам (Monica S. Lam), Раві Мережі (Ravi Sethi), Джеффрі Ульман (Jeffrey Ullman).
Найкраща відеолекція: Alex Aiken's course on Lagunita
-
розподілені системи
У наш час більшість систем є розподіленими. Комп'ютери та програми стають все більш комплексними, і знання розподілених систем виявиться корисним для забезпечення правильної та безперебійної роботи вашого софту.
Найкраща книга: Distributed Systems, 3rd Edition. Автори: Мартен ван Стін (Maarten van Steen) та Ендрю С. Таненбаум (Andrew S. Tanenbaum).
Найкраща відеолекція: CS 436: Distributed Computer Systems
Поради для вивчення Computer Science
Ну і насамкінець кілька порад для тих, хто планує розпочати вивчення дисциплін CS.-
Розвивайте практичні навички у дисциплінах CS
Одна з переваг CS, як і інших ІТ курсів, полягає в тому, що отримані щойно теоретичні навички можна відразу ж застосувати на практиці. Не забувайте про це і чергуйте теорію з практикою, щоб досягти найкращих результатів.
-
Не прокрастинуйте
Комп'ютерні науки - це досить складний предмет, вивчення якого мало кому дається легко, особливо спочатку. Саме тому, починаючи вивчати дисципліни CS, потрібно не піддаватися прокрастинації — не відкладайте на потім освоєння теорії, розв'язання задач і практику, тому що через це навчання не тільки може сильно затягнутися, а й швидше за все виявиться не таким ефективним.
-
Не обмежуйтесь одним курсом
Не чекайте, що зможете отримати всі необхідні знання з одного курсу, як би гарний він не був. Краще завжди звертатися щонайменше до кількох джерел інформації, щоб досягти ширшого розуміння предмета.
-
Знайдіть однодумців
Звучить трохи банально, але ефективно навчатися, як і робити багато інших речей у житті, найкраще у складі групи однодумців. Знайти собі компанію для спільного вивчення CS буде корисним із низки причин. Це допоможе вчитися більш ефективно, разом вирішувати завдання та проблеми, порівнювати з іншими свій прогрес у навчанні та навичках застосування нових знань.
-
Вчитеся писати слова, а не тільки код
Ще одна поширена порада від багатьох експертів, для тих програмістів, які вивчають CS для покращення своїх навичок та підвищення професійного рівня: вчитися писати (а не кодити), тобто складати слова у пропозиції та складати із пропозицій тексти. Цей досвід досить важливий для будь-якого розробника, а його відсутність заважатиме прогресувати не тільки у вивченні комп'ютерних наук, але й в інших аспектах програмування як професії.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ