Программирование, самый полезный Github репозиторий
Приветствую, этот пост совсем короткий, всего лишь рассказывает об одном репозитории на github, но как мне кажется, он куда важнее и полезней других моих постов.
Всем кто хочет написать операционку или язык программирования, изучить сложную технологию и разобраться в ее работе. Куча туториалов, рассказывающих, как создавать с нуля действительно потрясающие штуки.
Этот текст существует в видеоформате
(мне кажется, удобная штука - не читать, а просто врубить видео на фоне и заниматься своими делами, поэтому, в будущем мои посты будут сопровождаться таким видео-дополнением).
На всякий случай, напишу сразу, то о чем пойдет речь ниже, даже близко не претендует быть чем то простым.
build-your-own-x Легендарный репозиторий, несмотря на огромную популярность(100к звезд на github), все еще многим неизвестный, и что особенно печально - многим начинающим программистам.
Если кратко - подборка туториалов, основная идея которых - создание с нуля какой то сложной технологии: языка программирования, операционки, воксельного движка, физического движка и прочего. Привязки к определенному языку тоже нет: питон, плюсы, js, c# и т.д.
Пример, одного такого материала. Цикл из 19 статей, в котором автор(Ruslan Spivak), пишет интерпретатор языка Pascal на Python(кстати отличный пример ооп на python). Вообще, качество работы поражает - по сути это полноценная книга с подробнейшим разбором, графическими пояснениями, примерами из жизни, даже юмором, а в конце каждой главы - вопросы для проверки понимания темы и домашнее задание.
В данном случае - формат блога, в нем есть комментарии(из особенно интересных - переводы на другие япы), т.е. можно можно узнать какие вопросы появлялись, как они решались, какие-то интересные ссылки, рассуждения и т.д.
Возможные проблемы, при прохождении подобных материалов:
1. Ну разумеется - английский
Душный ответ - надо выучить, перевода материала о котором выше, к сожалению, не нашел. Но да, многие пункты из репозитория переведены и легко ищутся на том же хабре.
К примеру, статья Питера Норвига, где он пишет интерпретатор языка Lisp на python:
2. Как минимум, нужно знать основы япа
Подобный уч. материал, может, буквально начинается с краткого объяснения основ языка. Это скорее правило хорошего тона, чем необходимость. Не знаю, нужно ли об этом писать, но такая сложность - не подойдет тем, кто вчера написал первый хелловорлд.
Также, неплохо иметь хотя бы начальные знания в computer science, всегда можно загуглить какие то моменты, но систематическое изучение просто сэкономит время.
Гарвардский CS50 вполне может закрыть основные моменты.
3. Сложность может быть не в коде
Может быть такая ситуация: по частям код вроде бы понятен, но собрать эти части вместе, грубо говоря, увидеть их взаимодействие - не получается. Эта проблема может наступить куда раньше изучения материалов такой сложности. Надо приучить мозг к работе со сложными системами, и есть довольно интересное решение.
Замечательная книга - "Код" Петцольда, это ввод в архитектуру, разбирается всё, буквально, от подачи тока по проводкам и заканчивая высокоуровневыми языками программирования. Здесь, с легкостью ловится эффект, когда ты понял одну часть, но уже забыл прошлую, и надо все заново, и все удерживать в голове и т.д. При этом сама книга написана простым языком, не подразумевает никаких предварительных знаний по теме и досконально разбирает каждый момент. Вы как бы учитесь работать со сложной системой, находясь при этом в комфортных условиях.
Ко всему прочему CS50 и "Код" Петцольда - идеальное сочетание. CS50 мало про архитектуру, а Код отлично ложится на ввод в computer science. Поэтому рекомендую ознакомится с книгой как можно раньше.
Если подытожить, эти туториалы, хорошо вписываются в момент обучения, когда основы пройдены, и хочется приступить/разобраться/покопаться чем то, по настоящему, сложном и главное - интересном. Именно поиск подобных уч. материалов и становится зачастую проблемой. Здесь же они собраны(их действительно много), отсортированы по темам и языкам, и даже пополняются время от времени.