«Некоторые не понимают разницу компиляции/интерпретации». Зачем Computer Science?
Computer Science — это наука, которая помогает окунуться в мир информационных технологий и дает понимание, каким образом эти технологии функционируют. Сегодня Computer Science делает возможности безграничными, поэтому знания в ней — основа специалиста в IT.
О Computer Science нам рассказали Артем Перевозников, Director of Engineering @IDT Corporation (Минск) и Сергей Семенцов, Group Manager @iTechArt (Гомель) — практики со стажем более 10 лет в разработке. У обоих специалистов есть опыт преподавания, поэтому они с легкостью обозначили необходимый бэкграунд, который должен быть у каждого программиста, и поделились секретом, почему на Западе даже опытные разработчики изучают этот курс. Но обо всем по порядку…
Computer Science — это наука, которая помогает окунуться в мир информационных технологий и дает понимание, каким образом эти технологии функционируют. Сегодня Computer Science делает возможности безграничными, поэтому знания в ней — основа специалиста в IT.
О Computer Science нам рассказали Артем Перевозников, Director of Engineering @IDT Corporation (Минск) и Сергей Семенцов, Group Manager @iTechArt (Гомель) — практики со стажем более 10 лет в разработке. У обоих специалистов есть опыт преподавания, поэтому они с легкостью обозначили необходимый бэкграунд, который должен быть у каждого программиста, и поделились секретом, почему на Западе даже опытные разработчики изучают этот курс. Но обо всем по порядку…
Изучите блокчейн, создав свой: краткий путь к пониманию криптовалют
Название: Изучите блокчейн, создав свой: краткий путь к пониманию криптовалют
Автор: Ван Флаймен Дэниэл
Издательство: Apress Media
Год: 2020
Формат: pdf
Страниц: 203
Размер: 25 mb
Язык: русский
Данная книга предлагает изучить технологию блокчейна путем пошагового создания под руководством автора своего собственного работоспособного блокчейна на языке Python.
Дисциплины
Программирование
Львиная доля студентов Computer Science начинают с «вводных курсов» по программированию. Однако такие курсы будут полезны не только новичкам, но и вполне себе специалистам, которые по какой-либо причине пропустили некоторые базовые для программирования вещи.
Мы рекомендуем взять во внимание классическую «Структуру и интерпретацию компьютерных программ». Прочтите как минимум три главы приведенной выше книги, выполняя упражнения для практики. Для тех, кому данная книга кажется слишком сложной, рекомендуется «How to design programs». Тем же, кому она наоборот кажется слишком лёгкой, следует обратить внимание на «Concepts, Techniques, and Models of Computer Programming».
Можно также послушать лекции университета MIT по данной теме. Как альтернативу мы рекомендуем прослушать лекции Брайана Харви из университета Беркли, особенно, если для вас это в новинку.
Для дополнительной практики возьмите на заметку ресурс Exercism: на нём можно найти сотни интересных задачек по программированию, которые помогут вам в освоении синтаксиса разных языков программирования и прокачают ваше логическое мышление, которое необходимо программисту, как воздух.
Архитектура ЭВМ
Лучшая серия лекций: Berkeley CS 61C
Архитектура ЭВМ, также иногда называемая «компьютерными системами» или «организацией компьютера» — достаточно важная тема, описывающая работу аппаратного слоя, который лежит на уровень ниже, чем слой программного обеспечения. Пожалуй, самая недооцененная область среди инженеров-самоучек.
The elements of Computing Systems — амбициозная книга, которая даёт понимание того, как работает компьютер. Каждая глава — строение одной маленькой детали большой системы: от написания логики на HGL (языке описания аппаратуры) через центральный процессор к созданию тетриса.
Мы рекомендуем прочесть как минимум первые 6 глав книги и завершить указанный в ней проект. Это поможет лучше понять отношения между архитектурой компьютера и программным обеспечением, которое на ней работает.
Не ищите простого объяснения сложных вещей в этой книге — автор заходит издалека. Если конкретнее, то в книге, например, почти полностью отсутствуют два очень важных концепта в современной архитектуре ЭВМ — вычислительный конвейер и иерархия памяти.
Как только вы почувствуете себя в своей тарелке, читая эту книгу, смело переходите на Computer Organization And Design, отличный текст, который стал своего рода классикой. Также обратите внимание на курс CS61C, лекции которого доступны онлайн.
Алгоритмы и структуры данных
Мы полностью согласны с народной мудростью, которая гласит, что знание алгоритмов и структур данных — один из важнейших аспектов изучения компьютерных наук. К тому же, это отличный способ потренироваться в способности решать разного рода задачи, которые пригодятся в любой области компьютерных наук.
Есть сотни книг для изучения алгоритмов, но наш фаворит — «Алгоритмы Руководство по разработке» от Стивена Скиена. Наш выбор пал именно на неё, потому что автор определенно любит то, что он делает и хочет донести свои знания до читателя.
Для тех же, кто предпочитает лекции в формате видео, Скиена предлагает свой онлайн-курс. Также следует обратить внимание на курс Тима Рафгардена, доступного на Lagunita (сервис от университета Стэнфорда) или на Coursera. Материал обоих авторов очень полезен и информативен и кому из них уделить внимание — решать вам.
Мы практикуемся, решая задачи на Leetcode, потому что их задачи кажутся нам наиболее интересными. К тому же у каждой задачи есть ветка обсуждения и прикрепленное решение для самопроверки. Стоит отметить, что подобного рода задачи могут являться вопросами на интервью и решение их может сыграть вам на руку в будущем трудоустройстве. Для проверки своего знания алгоритмов решите 100 случайных задач на Leetcode.
В завершение, мы настоятельно рекомендуем How to solve it — великолепный материал для практики решения задач. Подходит как тем, кто изучает компьютерные науки, так и математикам.
Математика для компьютерных наук
В каком-то смысле компьютерные науки — это лишь область прикладной математики. Пока некоторые программисты пытаются и возможно преуспевают в попытках оставаться вдали от математики, мы рекомендуем не уподобляться им и изучать её. Ведь знание математики даст вам значительную фору по сравнению с другими программистами, которые математику игнорируют.
В основе большая часть математики для компьютерных наук — дискретная математика, где слово «дискретная» — прямая противоположность слову «непрерывная» и, грубо говоря, является сборником интересных тем в прикладной математике, за пределами математического анализа. Немного расплывчато, согласны. Впрочем, это не так важно: можно поставить себе цель изучить базовую логику, комбинаторику, теорию вероятности, теорию графов, основы криптографии. Линейная алгебра не менее прочего заслуживает вашего внимания, особенно для изучения компьютерной графики или машинного обучения.
Хорошим началом изучения дискретной математики является сборник лекций от László Lovász. Профессор проделал хорошую работу, чтобы сделать математику понятной и интуитивной, так что его работы куда больше подойдут новичкам, чем формальные математические тексты.
Для большего погружения советуем Mathematics for Computer Science — записи с лекций по одноименному курсу MIT, которые по объёму тянут на полноценную книгу. Видео данных лекций, кстати, тоже в свободном доступе.
Для линейной алгебры мы предлагаем начать с плейлиста Основы линейной алгебры.
Операционные системы
Лучшая серия лекций: Berkeley CS 162
Operating System Concepts и Modern Operating Systems — классика в вопросе операционных систем. Обе довольно часто подвергались критике в основном за то, что не являются 1000-страничными быстроустаревающими энциклопедиями, новое издание которых приходится покупать каждые пару лет.
Существует ещё одна книга по операционным системам, которую мы также очень рекомендуем к ознакомлению. Three Easy Pieces: структура повествования книги делает её легкой к восприятию, а задания помогут закрепить полученные знания.
После прочтения указанных выше книг имеет смысл пройтись по конкретным операционным системам и прочесть следующее: A commentary on the unix operating system, The design and implementation of the freeBSD operating systems и Mac OS internals.
Идеальный способ закрепить полученные знания — это прочесть код небольшого ядра и внести в него свои изменения. Как вариант можно взять XV6 — современную реализацию 6 версии Unix для архитектуры x86, написанную на ANSI C. В приведённой выше Three Easy Pieces есть раздел с заданиями с XV6, полный интересных идей для потенциальных проектов.
Компьютерные сети
Лучшая серия лекции: Stanford CS 144
Учитывая то, что львиная доля работы у программистов целиком и полностью опирается на веб-сервера, компьютерные сети — одна из самых важных областей компьютерных наук. Программисты-самоучки, которые методично изучают компьютерные сети, хвастают тем, что гораздо лучше многих понимают термины, концепты, протоколы, которыми постоянно окружены в своей карьере.
Наш фаворит в этом вопросе — Computer Networking: A Top-Down Approach. Небольшие проекты и задания для практики на протяжении всего материала весьма интересны и стоят вашего внимания. Также следует обратить внимание на Wireshark labs, любезно предоставленные автором книги.
Для тех же, кто предпочитает просмотр лекций чтению книг, мы рекомендуем серию лекций от университета Стэнфорд Stanford CS 144.
Небольшие проекты, как ни странно, более полезны для освоения компьютерных сетей, нежели задачки. Некоторые из них — HTTP сервер, чат-приложение на UDP, мини TCP stack или же распределённая таблица хэшей и т.д.
Базы данных
Изучение баз данных требует куда большего упорства, чем нужно для других тем, так как базы данных —относительно новая область компьютерных наук (с 1970-ых). Её основы скрыты от нас по вполне себе понятным коммерческим причинам. К тому же многие потенциальные авторы книг по базам данных предпочли сами стать разработчиками и основали свои компании.
Учитывая приведенные выше обстоятельства, мы настоятельно рекомендуем новичкам избегать книжек и начинать прямиком с записей CS186 весны 2015 от Джо Геллерштейна из университета Беркли. После данного курса уже можно переходить к книжкам.
Одна из них — это Architecture of a Database System от того же профессора из того же университета. Книга даст читателю углубленный взгляд на реляционные базы данных и послужит отличным скелетом для будущих знаний в этой области.
Readings in Database Systems, также известная как красная книга по базам данных (никто не вымирает), представляет собой сборник публикаций по данной теме. Для тех, кто осилил CS186, эта книга может стать следующей остановкой.
Если вы настаиваете на том, чтобы начинать изучение баз данных по книжкам, то советуем обратить внимание на Database management systems.
Сложно закрепить знания в этой области без практики. Студенты CS186 работают над дополнениями для Spark, однако лучшей практикой для начинающих будет всё же написание своей реляционной базы данных с нуля. Скорее всего, она поначалу не будет богата уникальными особенностями, но значительно укрепит ваше понимание темы.
Под конец, моделирование данных — один из самых пренебрегаемых аспектов в изучении баз данных. Здесь нашим фаворитом является Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World.
Языки и компиляторы
Большинство программистов изучают языки программирования, в то время как специалисты компьютерных наук пытаются понять, как эти языки работают. Эти знания позволяют им опережать своих коллег по карьерной лестнице и быстрее схватывать новый материал.
Классикой в данном вопросе является Compilers: Principles, Techniques and Tools. К сожалению, этот материал больше подходит учителям, нежели самоучкам. Однако книга отлично подойдёт для непоследовательного чтения, для выхватывания отдельных кусков из материала и изучения по ним. К тому же, если у вас будет учитель, это лишь ускорит ваше обучение.
Если же вы решите учиться по данной книге без учителя, то настоятельно рекомендуем обратить внимание на серию лекций от Алекса Айкена из Стэнфордского университета.
Потенциальной альтернативой этой книге может стать Language Implementation Patterns. Она написана с упором на инженеров, которые собираются практиковаться на языках вроде DSL.
В качестве проекта для закрепления материала можно написать свой компилятор для простенького языка вроде COOL. Те, кому данный проект кажется невыполнимым, могут начать с чего-то вроде Make a Lisp.
Распределённые системы
Число компьютеров и их разнообразие увеличилось за последние несколько десятков лет. Если раньше крупные компании закупали огромные сервера для обеспечения работы каких-либо программ, то сегодня нам кажется очевидным тот факт, что даже самые незначительные программы работают на нескольких компьютерах одновременно. Распределённые системы — наука о том, как это обеспечить.
Книга, которую мы хотим посоветовать, — Distributed Systems, третье издание которой служит прекрасным дополнением всем предыдущим. Учитывая то, что распределенные системы — область, которая достаточно часто меняется, нет уникальной книги, которая проведёт вас по этому тернистому пути. Приведённая же выше книга, по нашему мнению, наиболее близка к этому идеалу.
Можно также обратить внимание на серию лекций MIT 6.824, но, к сожалению, качество записи звука оставляет желать лучшего.
Не имеет значения, какую книгу или сторонний ресурс вы выбрали для изучения распределённых систем, погружение в эту область компьютерных наук требует от студента чтения большого количества литературы. Здесь вы можете найти список полезных книг.
Дисциплины С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).
Лучшая видеолекция: 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).
Теоретический минимум по Computer Science, Владстон Феррейра Фило, 2018, PDF, EPUB
Хватит тратить время на скучные академические фолианты! Изучение Computer Science может быть веселым и увлекательным занятием. Владстон Феррейра Фило знакомит нас с вычислительным мышлением, позволяющим решать любые сложные задачи. Научиться писать код просто — пара недель на курсах, и вы «программист», но чтобы стать профи, который будет востребован всегда и везде, нужны фундаментальные знания. Здесь вы найдете только самую важную информацию, которая необходима каждому разработчику и программисту каждый день.
Если вы хотите щелкать задачи как орешки, находя эффективные решения, то эта книга для вас. От вас потребуется только чуть-чуть опыта в написании программного кода. Если вам приходилось этим заниматься и вы различаете элементарные операторы вроде for и while , то все в порядке. В противном случае вы найдете все необходимое (и даже больше) на каких-нибудь онлайновых курсах программирования 2 . Вы можете пройти такой курс всего за неделю, и притом бесплатно. Для тех же, кто уже знаком с информатикой, эта
книга станет превосходным повторением пройденного и поможет укрепить знания.
Все книги представленные на сайте WEB-Программист только в ознакомительных целях. Любое их использование Вами допускается только в ознакомительных целях. Если Вы планируете их использовать в дальнейшем, то Вы обязаны приобрести их у правообладателей. Администрация сайта не несет ответственность за их использование Вами
Все книги представленные на сайте WEB-Программист только в ознакомительных целях. Любое их использование Вами допускается только в ознакомительных целях. Если Вы планируете их использовать в дальнейшем, то Вы обязаны приобрести их у правообладателей. Администрация сайта не несет ответственность за их использование Вами
Все книги представленные на сайте WEB-Программист только в ознакомительных целях. Любое их использование Вами допускается только в ознакомительных целях. Если Вы планируете их использовать в дальнейшем, то Вы обязаны приобрести их у правообладателей. Администрация сайта не несет ответственность за их использование Вами
Определение
Computer Science – перспективное направление современного обучения, тесно связанное с IT-технологиями. Представляет собой совокупность практических и теоретических данных, используемых специалистами при создании и задействовании:
- информационных систем;
- баз данных;
- разнообразных технологий;
- вычислительной техники.
Сюда также относят программирование. Впервые в качестве относящейся к computers возникла в 20 веке (30-е годы). Образовалась область посредством объединения математической логики и созданием компьютеров.
Говоря простыми словами, Computer Science – все то, что относится к современной «вычислительной технике». Для большинства иностранцев ассоциируется со специальными курсами или направлением обучения в ВУЗе.
Для чего необходимо
Computing Courses по упомянутому направлению в основном проходят программисты – как новички, так и опытные специалисты. Их разделяются на несколько категорий:
- Тех, кто собственными силами хотел окунуться в мир IT и изучил языки программирования. Обычно – один из них. Далее обучение прекратилось.
- Тех, кто осознает, что в современном мире прогресс и развитие держится на АйТи-технологиях, которые непрестанно совершенствуются. Такие люди не сидят на месте, постоянно изучают что-то новое. Они хорошо разбираются в Computer Science. Способны придумывать нестандартные решения тех или иных задач.
В первом случае работников нельзя назвать лентяями – они просто занимаются «стандартными» обязанностями. Такие лица прекрасно подходят для решения типовых задач и написания элементарных приложений.
Второй вариант – более системный. Подобные спецы готовы заниматься разработкой инновационного программного обеспечения. Работники делают разнообразные утилиты для бизнеса, совершенствуя его с минимальными затратами. Обеспечено полноценно и постоянное развитие.
Стоит обратить внимание еще и на то, что Computer Science – это еще и весьма перспективное высокооплачиваемое направление. Подчиненные в выбранной области получают не только самосовершенствование и бесценные знания, но и достойный заработок.
Это science требуется изучить, так как технологический прогресс с каждым годом занимает все больше места в обыденной жизни. Без элементарных познаний в упомянутом направлении совсем скоро будет не обойтись.