Как разобраться в Computer Science самостоятельно

Computer architecture

Computer architecture is often used to refer to an area of specialization within the academic discipline of computer science. At other times, the phrase computer architecture may be used to refer to a specific machine specification, such as SPARC, Intel X86, PowerPC, or Motorola 680×0. A more precise designation for specifying such machines is instruction set architecture (ISA). In the 1980’s, when computer architecture programs first began within computer science departments at various universities, heavy emphasis was placed on research related to designing better ISA’s. Nowadays, the industry has converged on a few different ISA’s and tends to rebuild them over and over again with faster hardware, so computer architecture has moved to focus more on the ways to speed up computer hardware and system-level software than on designing new ISA’s. The academic discipline of computer architecture thus tends to overlap somewhat with fields called computer engineering, or the like, that usually are located within the academic discipline of electrical engineering. The field known as computer architecture may touch all aspects of how specific computers can be specified, built, and verified (tested).

This article will discuss the basics of computer organization, and related articles will expand on each basic part, since the design of computers involves a broad and complex set of technologies.

Зачем изучать компьютерные науки?

Существует два типа программистов: те, кто владеют компьютерными науками достаточно хорошо, чтобы совершать инновации, и те, кто вроде как что-то могут благодаря знанию пары-тройки высокоуровневых инструментов.

И те и другие называют себя программистами или инженерами программного обеспечения и имеют примерно одинаковые доходы в начале своей карьеры. Однако первые в итоге становятся более высокооплачиваемыми специалистами. Причём абсолютно неважно, работают они над известными, дорогими и большими коммерческими проектами или над инновационными open-source проектами различной сложности. Они становятся лидерами в своей области и привносят нечто большее и более качественное на рынок.

Они углубленно изучают компьютерные науки, читая книги, слушая лекции, практикуясь или же упорно поглощая материал на личном опыте в своей карьере. Вторые же обычно остаются на дне, изучая различные инструменты и технологии для своей работы, а не то, на чём эти технологии основаны. Для них причиной для изучения чего-то нового является появление новых инструментов и, следовательно, устаревание старых.

На данный момент число людей в индустрии постоянно растёт, а число выпускников с факультета компьютерных наук остаётся неизменным. Перенасыщение рынка инженерами второго типа в итоге приводит оных к безработице или к сравнительно дешевому трудоустройству. Вне зависимости от ваших стремлений: хотите вы стать инженером первого типа или просто ищете способ заработать немного денег, изучение Computer Science — единственный надёжный путь для этого.

Направления

Если человек решил самостоятельно, или посетив специализированные курсы, освоить рассматриваемую область, придется понять, что она в себя включает. На самом деле науки технологического характера состоят из многочисленных сфер. Освоить все сразу и в полном объеме невозможно. Поэтому приходится выбирать область деятельности.

На сегодня Компьютерная Science преимущественно подразумевает следующие варианты развития событий:

  • программирование;
  • архитектура компьютера (электронно-вычислительных машин);
  • алгоритмы и структуры данных;
  • математика для IT и computer science;
  • операционные системы;
  • компьютерные сети;
  • базы данных;
  • языки программирования и компиляторы;
  • распределенные системы;
  • графика;
  • искусственный интеллект.

Если описать направленности кратко, это – написание программных кодификаций, а также информатика и математика. Но изучаемая информация выходит за пределы «стандартного» школьного и ВУЗовского обучения.

Programming

То, с чего начинают многие. Принципы написания программных кодов – основополагающая всех информационных технологий. Здесь вариантов воплощения задумки в жизнь несколько:

  1. Пойти обучаться в ВУЗ после 11 классов в школе. Отнимает от 5 лет, зато в процессе удается стать настоящим специалистом с дипломом государственного образца.
  2. Отдать предпочтение получению образования в техникуме/колледже после 9/11 классов. Человек здесь больше практикуется. По выпуску получает диплом о средне профессиональном образовании.
  3. Заниматься самообучением. Неплохой вариант для тех, кто еще не определился, стоит ли вообще связываться с IT-технологиями. Требует усидчивости и долгого кропотливого труда. Стать настоящим профессионалом в области написания кодов можно и без «вышки».

Последний вариант – это посещение Computer Science курсов. Есть варианты как для новичков, так и для уже более опытных людей. По окончании процесса выдается спецсертификат.

Внимание: все перечисленные методы получения знаний относительно программирования подходят и для остальных сфер. Но иногда добиться успеха без ВУЗа или техникума окажется предельно трудно.

Архитектура электронно-вычислительной техники

Может называться как «компьютерные системы» или «организация computers». Важный раздел, характеризующий принципы функционирования аппаратуры. Речь идет о слое, находящимся «под» программным обеспечением. Инженеры-самоучки не слишком уважают архитектуру ЭВМ, хотя она крайне важна.

Для того, чтобы разобраться в области самостоятельно, можно прочесть книгу «The elements of Computing Systems». Позволяет осознать, каким образом функционирует computer. Здесь есть:

  • иерархия памяти;
  • вычислительный конвейер;
  • написание логики на языке описания аппаратов (HGL) посредством центрального процессора.

После изучения соответствующей литературы удастся намного лучше ориентироваться в архитектуре ЭВМ. Далее теорию обычно изучают посредством спецкурсов.

Алгоритмы и структуры

В компьютерных науках не обойтись без алгоритмов и структур информации. Область служит одной из основополагающих. Помогает потренироваться в решении разнообразных задач, необходимых в выбранной специализации.

Практика показывает, что алгоритмы и структуры «материалов» изучаются через:

  • специализированную литературу (электронную или бумажную);
  • обучающие видеоролики;
  • спец course.

В ВУЗах соответствующий раздел изучается, но не слишком углубленно. Получаемых знаний достаточно на первых порах, но затем приходится «ударяться» в самообразование.

Дела математические

В компьютерных науках невозможно обойтись без разного рода вычислений. Все, что связано с computers, можно отнести в той или иной степени к прикладной математике. Хороший программер или «комп.ученый» не оставит math в стороне. В один прекрасный момент решение поставленных задач, особенно при разработке сложного контента, отсутствие достаточного багажа знаний станет огромной проблемой.

Математиков, занятых углубленным изучением «дискретики», ждет успех в случае смены специализации в пользу IT-технологий. Связано это с тем, что компнауки относятся преимущественно к дискретной математике. Выходят они далеко за пределы матанализа.

Также рекомендуется изучать:

  • комбинаторику;
  • основы логики;
  • теорию вероятности;
  • графы;
  • криптографию (основы);
  • линейную алгебру.

Последняя особо важна для тех, кто предпочтет в будущем сконцентрироваться на графике и видео, а также машинном обучении. Математика для Computer Science – главный «раздел».

Операционные системы

Каждый современный юзер точно знает – операционных систем у ПК и других устройств полно. Каждое «системное программное обеспечение» обладает собственным функционалом, особенностями и интерфейсом. Чтобы стать настоящим специалистом в компьютерах, стоит изучать все ОС. Либо выбрать одну «специализацию», в которой совершенствоваться далее.

В соответствующей «категории» предстоит узнать о принципах работы ОС, а также об их видах. Лучше действовать путем прохождения курсов (можно дистанционно). Вариантов полно – как для новичков, так и для продвинутых «ученых».

При самообразовании идеально прочесть код маленького ядра, после чего откорректировать его. Пример – XV6. Это – современная интерпретация Unix x86, которая написана на ANSI C.

Программеры работают преимущественно с веб-серверами и компьютерными сетями. Значит, упомянутую сферу обделять вниманием нельзя. Она расскажет о:

  • принципах работы сетей;
  • разновидностях «подключений»;
  • настройке и отладке сетей.

Самоучкам рекомендуется прочесть книгу Computer Networking: A Top-Down Approach. Там не только теория, но и практика – небольшие проекты и задания.

Базы данных

База данных – совокупность информации, которая организована в концептуальную структуру, описывающую особенности соответствующих материалов и их взаимоотношения. Простыми словами – некое хранилище электронных сведений. Используются БД повсеместно – не только в программировании и IT, но и в обыденной жизни: экономика, бухгалтерия, юриспруденция. Даже при работе с 1C требуется знания баз данных.

В ВУЗах этому разделу уделяется достаточно времени как у «компьютерщиков», так и у математиков/экономистов/программистов. Но лучше посетить курсы по базам данных, чтобы получить максимально много полезной информации.

Компиляторы и языки

Программеры занимаются непосредственным изучением языков «общения» с компьютерами и приложениями. А вот работники компьютерных наук стараются разобраться в принципах работы оных. Соответствующие познания помогают обойти даже опытных разрабов. Схватывание нового материала будет максимальным и быстрым.

Данная область затрагивает:

  • принципы функционирования языков при создании машинных кодификаций;
  • программы, используемые при кодировании и эмуляции;
  • особенности компиляторов.

Своими силами здесь обойтись проблематично.

Распределенные системы

Распределенной системой называют некую систему, в которой отношения местоположения составляющих или их групп играют важную роль для дальнейшего функционирования. С развитием прогресса и IT даже самые простые приложения способны функционировать на нескольких computers одновременно. Распределенные системы являются наукой о том, как обеспечить подобное явление.

Для изучения Science соответствующей области требуется просмотреть книгу Distributed Systems. Лучше пробежать глазами по всем изданиям. 3-е – это своеобразное дополнение к предыдущим.

А можно ли начинать изучать язык программирования, не зная основ Computer Science? Или все равно придется сделать шаг назад и вернуться за базой.

Артем: База есть база, от ее изучения все равно никуда не деться. При изучении языков программирования косвенно затрагивается и Computer Science, ведь множество учебных задач построены на алгоритмах. Так, во время изучения языков программирования происходит неосознанное освоение и Computer Science, построенное на любопытстве и логике.

Здесь хочу подчеркнуть важный момент — знание базы значительно ускоряет изучение языка программирования.

Сергей: Верно, фундаментальные труды по CS точно не создавались впустую. Я думаю, что правильно начать изучать любой язык программирования именно как инструмент, который позволит параллельно осваивать алгоритмы и структуры данных, а также практиковаться в них. Ведь, овладев JS, специалист может усилить свои позиции в React/ VueJS/ Angular.

Если представить ситуацию, что на работу устраиваются два специалиста с равными знаниями по определенному языку, то выбор будет в пользу того кандидата, который владеет основами CS. Поэтому моя рекомендация для начинающих специалистов: учите инструменты для работы (языки, фрэймворки, библиотеки), но не забывайте о базовых понятиях. Старайтесь расти как вглубь, так и вширь.

3. Математика для Computer Science (8 недель)

В освоении вопросов математической индукции, теории чисел, теории графов и прочих математических основ самообразования в Computer Science поможет соответствующий курс MIT, состоящий из 25 лекций и 12 контрольных работ. Полный конспект курса состоит из 557 страниц, соответственно в среднем нужно проходить около 10 страниц в день и решать 1-2 контрольные в неделю.

Дисциплины Сomputer Science

Программирование является основой и базовой дисциплиной компьютерных наук, большинство студентов начинают изучение курса CS именно с него. Самые лучшие курсы программирования в рамках CS будут полезны далеко не только новичкам, но и опытным кодерам, которые могли пропустить те или иные концепции и модели программирования, когда учились этому впервые.

Лучшая книга: “Структура и интерпретация компьютерных программ” (Structure and Interpretation of Computer Programs). Авторы: Джеральд Сассман (Gerald Sussman) и Хэл Абельсон (Hal Abelson).

А на JavaRush, кстати говоря, всем желающим доступен для изучения легендарный гарвардский курс “CS50. Основы программирования”, полностью переведенный на русский.

Алгоритмы и структуры данных

Знание наиболее распространенных алгоритмов и структур данных помогает решать разного рода задачи, а это очень важно в любой из областей компьютерных наук, включая, конечно, и разработку программного обеспечения.

Лучшая книга: The Algorithm Design Manual. Автор: Стивен Скьена (Steven Skiena).

Знание компьютерной архитектуры, то есть понимание того, как на самом деле работает компьютер, является еще одной важной частичкой пазла, без которой попытки построения программных конструкций и моделей часто оказываются неудачными.

Лучшая книга: “Архитектура компьютера и проектирование компьютерных систем” (Computer Organization and Design). Авторы: Дэвид Паттерсон (David Patterson) и Джон Хеннеси (John Hennessy).

Практически весь код, написанный программистом, будет выполняться операционной системой, поэтому знание принципов работы ОС также является важным элементом.

Лучшая книга: “Введение в операционные системы” (Operating Systems: Three Easy Pieces). Авторы: Андреа Арпачи-Дюссо (Andrea Arpaci-Dusseau) и Ремзи Арпачи-Дюссо (Remzi Arpaci-Dusseau).

Мало что в современном ИТ может обойтись без использования Интернета, поэтому ИТ-специалистам важно понимать, как Всемирная сеть работает, чтобы использовать ее потенциал по полной.

Лучшая книга: Computer Networking: A Top-Down Approach. Авторы: Джеймс Куросе (James Kurose), Кит Росс ( Keith Ross).

Математика для computer science

Поскольку компьютерные науки, по сути, являются ответвлением прикладной математики, знание этого предмета тоже будет очень полезным практически в любой профессии, связанной с программированием. А также даст вам конкурентное преимущество перед теми, кто этой дисциплиной не владеет.

Лучшая книга: Mathematics for Computer Science. Авторы: Альберт Р. Мейер (Albert R. Meyer), Эрик Леман (Eric Lehman) и Фрэнк Томсон Лейтон (Frank Thomson Leighton).

Базы данных — относительно новая область компьютерных наук, и экспертов в ней по-прежнему не так уж много. Данные — еще один ключевой элемент CS, потому что они лежат в основе большинства значимых программ, но мало кто понимает, как на самом деле работают системы баз данных.

Лучшая книга: Readings in Database Systems. Авторы: Джозеф М. Хеллерштейн (Joseph M. Hellerstein) и Майкл Стоунбрейкер (Michael Stonebraker).

Как из обычного кодера стать крутым разработчиком? Изучаем Computer Science - 2

Лучшая видеолекция: 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).

Дисциплины Сomputer Science

Программирование является основой и базовой дисциплиной компьютерных наук, большинство студентов начинают изучение курса CS именно с него. Самые лучшие курсы программирования в рамках CS будут полезны далеко не только новичкам, но и опытным кодерам, которые могли пропустить те или иные концепции и модели программирования, когда учились этому впервые.

Лучшая книга: “Структура и интерпретация компьютерных программ” (Structure and Interpretation of Computer Programs). Авторы: Джеральд Сассман (Gerald Sussman) и Хэл Абельсон (Hal Abelson).

А на JavaRush, кстати говоря, всем желающим доступен для изучения легендарный гарвардский курс “CS50. Основы программирования”, полностью переведенный на русский.

Алгоритмы и структуры данных

Знание наиболее распространенных алгоритмов и структур данных помогает решать разного рода задачи, а это очень важно в любой из областей компьютерных наук, включая, конечно, и разработку программного обеспечения.

Лучшая книга: The Algorithm Design Manual. Автор: Стивен Скьена (Steven Skiena).

Знание компьютерной архитектуры, то есть понимание того, как на самом деле работает компьютер, является еще одной важной частичкой пазла, без которой попытки построения программных конструкций и моделей часто оказываются неудачными.

Лучшая книга: “Архитектура компьютера и проектирование компьютерных систем” (Computer Organization and Design). Авторы: Дэвид Паттерсон (David Patterson) и Джон Хеннеси (John Hennessy).

Практически весь код, написанный программистом, будет выполняться операционной системой, поэтому знание принципов работы ОС также является важным элементом.

Лучшая книга: “Введение в операционные системы” (Operating Systems: Three Easy Pieces). Авторы: Андреа Арпачи-Дюссо (Andrea Arpaci-Dusseau) и Ремзи Арпачи-Дюссо (Remzi Arpaci-Dusseau).

Мало что в современном ИТ может обойтись без использования Интернета, поэтому ИТ-специалистам важно понимать, как Всемирная сеть работает, чтобы использовать ее потенциал по полной.

Лучшая книга: Computer Networking: A Top-Down Approach. Авторы: Джеймс Куросе (James Kurose), Кит Росс ( Keith Ross).

Математика для computer science

Поскольку компьютерные науки, по сути, являются ответвлением прикладной математики, знание этого предмета тоже будет очень полезным практически в любой профессии, связанной с программированием. А также даст вам конкурентное преимущество перед теми, кто этой дисциплиной не владеет.

Лучшая книга: Mathematics for Computer Science. Авторы: Альберт Р. Мейер (Albert R. Meyer), Эрик Леман (Eric Lehman) и Фрэнк Томсон Лейтон (Frank Thomson Leighton).

Базы данных — относительно новая область компьютерных наук, и экспертов в ней по-прежнему не так уж много. Данные — еще один ключевой элемент CS, потому что они лежат в основе большинства значимых программ, но мало кто понимает, как на самом деле работают системы баз данных.

Лучшая книга: Readings in Database Systems. Авторы: Джозеф М. Хеллерштейн (Joseph M. Hellerstein) и Майкл Стоунбрейкер (Michael Stonebraker).

Как из обычного кодера стать крутым разработчиком? Изучаем Computer Science - 2

Лучшая видеолекция: 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).

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector