СТАТЬ ПРОГРАММИСТОМ
1.38K subscribers
12 photos
59 links
ЧАТ/СООБЩЕСТВО - @tobeprog_chat

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

Спасибо всем, кто подписался
Спасибо всем, кто рекомендует канал


Это невероятно мотивирует, будем дальше расти и развиваться(100% выходим на регулярный выход постов, накопилась куча интересных ссылок на уч.материалы, заметок/набросков будущих больших постов, еженедельных рубрик и прочих интересных штук)
CS50 | Введение в искусственный интеллект с python

Перевод - https://youtu.be/nDCFajF49U4
Оригинал[плейлист] - https://www.youtube.com/watch?v=WbzNRTTrX0g&list=PLhQjrBD2T382Nz7z1AEXmioc27axa19Kv&ab_channel=CS50

Ссылка выше - перевод первой лекции(на данный момент переведено 4 лекции из 7) из курса по ИИ, следующего за cs50, как говорит сам Дэвид Мэлан(тот самый профессор, легендарный лектор CS50): “этот курс начинается там, где заканчивается основной cs50”, кстати видео с приглашением на курс, где он это и говорит, тоже переведено - https://youtu.be/vKPdq0xDeXk

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

Отдельный респект автору перевода. Это титанический труд, невероятного качества перевод, как и написано выше, таймкоды, буквально на все темы в лекции, код удобно выложен на github(ссылка там же, где и таймкоды). И к сожалению, незаслуженно малое число просмотров.

Если вы прошли основы питона, посмотрели CS50, и хотите дальше углубится в изучении computer science(не говоря уже, об изучении ИИ) и python, то этот курс подходит как нельзя лучше.

P.S. Это не первое  “ответвление” от cs50 о котором я пишу, на канале есть пост о курсе посвященном gamedev https://t.me/tobeprog/8 [он без перевода]
#CS50 #академ_подход #курс #перевод
Может сложиться впечатление, что этот канал об изучении исключительно python, но это не так, он в целом, об изучении программирования. Никакой привязки к определенному языку нет. 

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

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

Скорее всего, первым будет Си, знаю что для многих это странный выбор и вообще мало интересный ЯП. Именно поэтому, и хочу о нем рассказать, объяснить зачем его вообще нынче учить и почему он настолько любим программистами. 
Выразительный JavaScript

Оригинал - https://eloquentjavascript.net/ 
Перевод -  https://karmazzin.gitbook.io/eloquentjavascript_ru/

Один из самых примечательных вводов в ЯП. Отличная книга, много кода, много примеров, все хорошо объяснено, отдельно хочется отметить главы-проекты, чего только стоит проект - создание маленького языка программирования.

Важная деталь - темп повествования может быть слишком уж быстрым(что называется - 'галопом по Европам'). Это особенность многих вводов в ЯПы, в этом нет ничего страшного, но для совсем начинающих это может стать проблемой(обычно, говорят что подобные уч.материалы для продвинутых начинающих). 

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

#книги #JS #перевод
Для того, чтобы собрать все посты в одном месте(например, чтобы на них было удобнее ссылаться), решил перепостить сюда несколько больших постов, не выходивших ранее на этом канале.
Python, основы | что читать/смотреть | как правильно использовать уч.материалы

Учебные материалы разделены на 3 разных подхода, деление это весьма условное, но с ним будет удобнее объяснить какие то моменты.

1. Автоматизация рутины
1.1. Автоматизация рутинных задач с помощью Python, Свейгарт - сильно отличается от других вводов в Python(да и не только, в python). Дело в подходе к практике: вы сразу учитесь делать полезные штуки(как говорит книга, автоматизировать свою рутину), а не стандартные абстрактные задачи, служащие исключительно для закрепления материала.

Кроме того, что это, рациональный способ изучения python(язык позволяет быстро сделать что то интересное/полезное/работающие, почему бы не использовать эту приятную, и довольно впечатляющую возможность). Это в принципе, правильный способ изучения программирования, именно программирования, а не просто синтаксиса языка.

1.2. https://stepik.org/course/575 - курс по автоматизации тестирования, нам интересны первые две его части(в рамках изучения питона). Там про selenium - инструмент, для автоматизации в браузере(это про - зайти на страницу, заполнить форму, нажать кнопочки, оставить комент и т.д. и т.п.). О нем рассказано в книге Свейграта, но нужна практика. В этом курсе ее много и подана она отлично.

1.3 Огромное кол-во туториалов по автоматизации. Книга Свейгарта породила целую волну материалов по "автоматизации". Если вбить на ютубе "python automation", то темы роликов будут от работы в Excel до знакомств в Tinder(десяток подобных видео, и алгоритм рекомендаций избавит от нехватки новых идей).

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

2.1. Книги, которые мне кажутся наиболее удачными представителями 'классического' подхода:
- Лутц, Изучаем Python. Наверно самая рекомендуемая и популярная книга по питону. Может оказаться несколько перегруженной для начинающих(в этом нет ничего страшного), в таком случае стоит выбрать один из вариантов ниже.

3 замечательные книги, немного разные по стилю(можно выбрать что ближе), во всех 3 очень хорошая подача, именно для начинающих
-Изучаем Python. Программирование игр, визуализация данных, веб-приложения, Мэтиз Эрик

-Программирование на Python 3. Подробное руководство, Марк Саммерфилд

-Программируем на Python, Доусон Майкл

2.2. https://stepik.org/course/67 - тот самый курс, его рекомендуют в каждом посте про изучение python, а если его там не окажется, то о нем вспомнят в комментах. Очень популярный(430к учащихся), возможно самый популярный курс по python на русском.

Звучит несколько иррационально, но в программировании, популярность учебного материала - верный признак качества. Правда работает это тогда, когда популярность - следствие рекомендаций уже ставших программистами(именно подобные отзывы и стоит искать при подборе уч. материалов). Поэтому, на туториалы с миллионами просмотров, из разряда ‘‘выучимся кодить за 15 минут’’ - правило не распространяется.

3. Академический подход
Кроме ряда очевидных положительных сторон, есть одна особенность(тоже положительная), которая сильно влияет на процесс изучения - подразумевается предварительная подготовка студентов(даже если, курс читается с нуля). И тут речь не столько о предмете, сколько о способностях к усвоению материала. У вузов есть система отбора, у хороших - довольно жесткая, к тому же высшее образование, в принципе и не претендует быть чем то простым(например, если что то можно объяснить за 10 минут, то это не буду растягивать на 2 часа).

3.1. 
https://youtu.be/KdZ4HF1SrFs Алгоритмы на Python 3 
https://youtu.be/fgf57Sa5A-A Практика программирования на Python 3
Два замечательных курса(МФТИ) Тимофея Хирьянова. Одни из лучших лекции по Python, и скорее всего, лучшие на русском.

3.2. Если все хорошо с английским, довольно интересный вариант:
https://youtu.be/nykOeWgQcHM -1 лекция из MIT 6.
0001 Introduction to Computer Science and Programming in Python) - знаменитый МТИ(Массачусетский технологический институт), ввод в сам язык и cs одновременно.

4. Что с этим всем делать?
4.1. Все вышеперечисленный варианты, решают задачу - изучить питон с 0(неважно, что где-то больше практики/теории, где-то учебный материал сильно выйдет за рамки основ или наоборот будет исключительно в них т.д. и т.п.). К тому же, они все - топовые представители своего формата. Поэтому, можно выбрать, буквально любой(какой больше по вкусу, да даже случайный), и это должно сработать.

Если выбрать только условного Лутца(а не начать с автоматизации, закрепив потом курсами или академ. подходом), ничего страшного не случится, хотя это и довольно сложный вариант. Но говорить, что подобное не сработает - неправильно(повторюсь, многие буквально так и начинали).

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

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

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

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

4.3. Существует куча других отличных книг/курсов, и далеко не 2 вуза выкладывают свои лекции, более того, можно выдумать, куда более сложный способ изучения, и он может быть вполне рабочим. Но нужно ли все это? Меня смущает обилие списков с кучей учебных материалов, которые забывают упомянуть одну важную штуку - для того, чтобы выучить основы программирования, и мочь что-то сделать используя определенный яп, всего пары названий из подобного списка будет достаточно.

5. После основ(не зависит от выбранного подхода)
Ряд учебных материалов, изучение которых, на раннем этапе, сильно поднимет уровень.

5.1. https://youtu.be/vpyWbpdk3Xs Уникальный пример, где автор показывает процесс мышления при написании программы. Будет позитивной практикой, время от времени пересматривать и отмечать что-то новое, трекать свой прогресс. Можно считать видео ориентиром, когда подобный способ понят, понят и сам процесс программирования.

5.2. https://stepik.org/course/4519 - курс в котором учат искать на StackOverflow, читать документацию и юзать библиотеки. Это тот самый подход, о котором не особо пишут в книжках, однако, это именно про такую - трушную практику. В каком то смысле, здесь учат делать, как в видео выше.

5.3. https://stepik.org/course/512 - курс по питону, для тех кто прошел основы. Стоит посмотреть хотя бы начало - там небольшой ввод в само устройство языка, стек вызовов, пространство имен, области видимости и прочее.

5.4. CS50
Этот Гарвардский курс ввода в computer science полезно посмотреть всем начинающим программистам.

P.S. Программирование - это не про колл-во прочитанных книг и пройденных курсов, оно про практику. Уч. материалы - это инструменты, они помогут прояснить какие то моменты, но ту самую практику за изучающего не сделают. Можно до бесконечности искать уч. материалы, проходить их, иметь кучу сертификатов, сделанных упражнений из конца главы и переписанного кода с туториалов, но так и не мочь программировать. По сути, просто отодвигать саму практику, это на самом деле, довольно бессмысленно.
Нет никакого смысла, искать правильный способ начать учить язык(тратить на это кучу времени), нужно просто подобрать самый удобный инструмент, сосредоточится на практике, если после, знаний категорически не хватает(для реализации практики), нужно снова подобрать самый удобный инструмент и получить их.

В одном из постов, я приводил пример про комментарии в коде, в некоторых курсах, буквально, заставляют их писать под каждый хеловорлд. Это вызывает, разве что, раздражение. Можно в сотый раз попытаться объяснить их важность, однако, зачем они нужны, станет понятно и без этого. Очень естественным образом, на практике - ровно в тот момент, когда сам себе впервые задашь вопрос - "почему/как/что я здесь написал?"
Что значит программировать, и почему многие не понимают этот процесс

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

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

Утрированный пример - есть менеджер, абсолютно не понимающий в разработке, и при этом стоящий над разработчиком(так быть, разумеется, не должно). Как он видит процесс работы программиста?

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

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

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

Довольно интересно наблюдать, как сами разработчики пытаются подобрать понятную метафору для этого процесса, к примеру, нередки сравнения с творчеством(если хочется покопаться в теме метафор, то довольно интересно это описывает Макконнелл, во 2 главе “Совершенного кода”)

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

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

Немного про сам процесс
Важно понять, программирование - не выученный синтаксис языка, программирование - умение решать задачи. Не решение задачек из книжки, или курса, а умение решать свои задачи с помощью кода(немного отдает пафосом - но это, про то как думать в некой сложной системе, недостаточно просто ее выучить).

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

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

Именно такой подход и порождает “странные” свойства самого процесса, по идее, именно на нем и стоит сосредоточиться. Но вместо этого, учебные материалы зачастую берут другой вектор - вместо того, чтобы учить программированию, они зачастую учат просто синтаксису(думаю это очевидно, но на всякий случай напишу, я не говорю о том, что учить синтаксис не нужно, это просто нелепо).

Зачастую, самому процессу программирования уделяют(если вообще уделяют) очень мало внимания. Нопо сути, яп - лишь инструмент, можно сказать переменная, а сам процесс программирования - постоянная.
Именно поэтому, многие разрабы скажут, что абсолютно неважно с какого языка начнешь учить, и могут даже предложить достаточно экзотический вариант(сразу на ум приходит легендарная книга из 80-ых, написанная в MIT, где яп - lisp), главное - понять сам процесс.

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

Он простой, при этом позволяет очень быстро писать сложные программы или их рабочие прототипы, т.е. как можно быстрее прийти к тому самому процессу программирования. Также можно ограничить круг задач, тем самым еще ускорив этот переход(в посте про уч. материалы - все что связано с автоматизацией рутины(п.1.)).

1. Чтобы понять процесс программирования, для начала надо его увидеть.(увидеть процесс программирования и досконально понять код - разные вещи, нам нужно именно само мышление).

https://www.youtube.com/watch?v=vpyWbpdk3Xs серия видео, где показан именно тот самый процесс мышления при написании программы.

Будет позитивной практикой, время от времени пересматривать и отмечать что-то новое, трекать свой прогресс. Можно считать видео ориентиром, когда подобный способ понят, понят и сам процесс программирования.

2. https://stepik.org/course/4519 курс в котором учат гуглить, искать на StackOverflow, читать документацию, и юзать библиотеки. Это тот самый подход, про такую - трушную практику. В каком то смысле, здесь учат делать, как в видео выше.

Забавная штука насчет этого курса, пару раз видел реакцию, из разряда - “какой ужас, в нем ищут ответы на StackOverflow”. Это идеально иллюстрирует то самое “непонимание процесса” из начала поста.

Программирование всегда про рациональный подход
Есть еще один важный момент, касаемый странных свойств процесса - программирование всегда про рациональность.

Лучше раньше об этом узнать(и принять), отпадет куча вопросов и сохранится куча нервов. Рациональность - в буквальном смысле слова, всегда выбираем более выгодный вариант.

Многих новичков смущает, что в тех же ЯПах есть проблемы/неудобства, о которых все знают(и обсуждают), но, кажется, ничего по этому поводу не делают. Во-первых - это не так, ЯПы постоянно прогрессируют/исправляются, иногда плавно, иногда весьма радикально(когда Python разошелся на 2.x и 3.x версии). Во-вторых, не всегда исправление - рациональный вариант, к примеру, если оно коснется чего то глубокого, после него придется затратить кучу ресурсов(переписать огромное количество кода), учитывая 'наслоение' технологий друг на друга, это может, стать невыполнимой задачей.

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

К примеру, существование какой то распространенной практики всегда рационально, иначе она бы не распространилась. Возьмем те же, стандарты оформления кода(стиля), крайне удобная штука, но видно это будет, когда начнется работа с большим количеством кода(особенно чужого).
Этот пост - содержание/меню канала. Мне не очень нравится, как выглядят такие посты в закрепе канала, поэтому раз в месяц будут ссылаться на него(примерно с тем же интервалом он будет пополняться).

upd: 08.05.2021 
у основных постов появилась видеоверсия на youtube
заново запущена серия - ‘план изучения программирования’
добавлены новые посты

Основы:
Python, основы | что читать/смотреть | как правильно использовать уч.материалы - https://t.me/tobeprog/29 
upd. Видеоверсия - https://youtu.be/cqyluq__UOU 

Что значит программировать, почему многие не понимают этот процесс(и как эту проблему решить) - https://t.me/tobeprog/32 
upd. Видеоверсия - https://youtu.be/jXyFCLnN06c 

upd. Видео Самый ПОЛЕЗНЫЙ Github репозиторий| создание с нуля СЛОЖНОЙ технологии https://youtu.be/000-NvdYPMg 

upd. Где найти хороший roadmap/план изучения/список учебных материалов - https://t.me/tobeprog/51 

Посты про проекты(идеи для проектов):
Как делать интересные проекты из скучных - https://t.me/tobeprog/13 
Про цепи Маркова (и немного про то, как делать учебные проекты) - https://t.me/tobeprog/22 
upd. Roguelike игры - https://t.me/tobeprog/38 

Серия постов, с планом по изучению программирования

upd. (Видеоверсия, поскольку серия запущена заново и произошел сдвиг нумерации(сразу несколько частей в одном видео), то это теперь “часть 1”) 
План изучения программирования | Python | Часть 1 - https://youtu.be/J8MLsG1_bu8 

Прошлая версия:
Первая часть - ‘плана изучения программирования’. - https://t.me/tobeprog/16 
Вторая часть - ‘плана изучения программирования’. - https://t.me/tobeprog/18

Небольшие посты(к примеру, в которых рассказывается об интересных уч.материалах), добавлять не буду, для них есть хэштеги.
Готовлю много постов, первые будут уже завтра: библиотеки, идеи для проектов и даже gamedev немного затронем.

Уже некоторое время думал над тем, чтобы попробовать формат видео, кроме того, что это - банально удобно(не читать, а врубить видео на фоне и заниматься своими делами), в будущем я думал попробовать формат стримов(к примеру, я как то писал, что  code review в прямом эфире - страшно недооцененный и очень полезный контент).

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

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

Небольшая просьба - оцените видео, если не нравится, смело ставьте диз, я точно не обижусь, это наоборот, даст мне понимание нужно ли продолжать всю эту историю с видео.

https://youtu.be/jXyFCLnN06c
ursina engine

Простой опенсорсный игровой движок, который может в 3d и к тому же, работает на питоне. 

Такие штуки, лучше сразу смотреть в действии. https://youtu.be/DHSRaVeQxIk [англ.]- достаточно подробный туториал, отдельный респект - прежде чем переходить к написанию “клона minecraft”, немного объясняются основы самого движка(для меня загадка, почему подобное не стало правилом хорошего тона во всех туториалах). 

Объективно - впечатляет, механика строительства уложенная в 30 строк кода. Эти 30 строк - один из примеров, выложенных самим автором движка, в видео выше его как бы разбирают и дописывают. Другие примеры есть на github, их разбор, а также некоторые технические моменты о движке, можно посмотреть в видео - https://youtu.be/aCpBzdciU0o [англ.]

Вся документация, а также несколько туториалов есть на офф. сайте - https://www.ursinaengine.org/documentation.html
У движка есть канал на ютуб, на нем всего два видео, трейлер движка и показ внутриигрового редактора уровней - https://youtu.be/Zn9aCWyoG-I 

Пока, движок не очень известен(как мне кажется, в этом случае, популярность - вопрос времени), и уч. материалов по нему очень мало. В любом случае, он развивается, к тому же проект достаточно интересный, время от времени буду чекать куда все движется.

#gamedev #python
Раз коснулись minecraft в прошлом посте, а следующий о roguelike играх, нельзя не упомянуть о целой группе, очень интересных, но в тоже время сложных задач - процедурной генерации.

Смотрите, с точки зрения игрового процесса, фишка minecraft - в самой механике строительства(ну и очевидно, крафта), но с точки зрения разработки, самое важное и сложное - генерация мира(с этим, к сожалению, у урсины все немного печально, но тут сложно придраться, поскольку сам автор оставляет дисклеймер в коде ‘клона’ игры о том, что решение в данном случае не масштабируется на большую карту).

Чтобы понять в чем состоит сложность, можно ознакомится с решением более простого варианта задачи. Генерация простой карты островов - https://youtu.be/0emj42Bn-_Y [есть автоматический перевод в субтитрах, но он - оставляет желать лучшего]. Даже для такой несложной задачи, уже приходится использовать достаточно сложные метод решения - шум Перлина. И это без 3d, без излишней детализации и т.д. и т.п.

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

#gamedev #python
Roguelike

Игры жанра roguelike абсолютно восхитительны, по сути - это неограниченный полет мысли и фантазии разработчика. Много уникальных проектов, куча настоящих ‘проектов мечты’(работа над которыми может идти годами) и просто интересных идей/реализаций. 

И все же, это очень и очень нишевая штука. Первое, что бросается в глаза - графика, которая может не просто не заинтересовать, а скорее даже отпугнуть(но есть и достаточно симпатичные примеры обратного, и с каждым днем их все больше).

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

Статья(автор - Josh Ge) о том, как приступить к созданию игр жанра roguelike: 
https://www.gridsagegames.com/blog/2018/10/how-to-make-a-roguelike/ - Оригинал
https://habr.com/ru/post/428620/ - Перевод

Разобрано все, от выбора идеи/основной механики/темы, и до указания конкретных инструментов и путей реализации первой игры. Это эталон того, как нужно делать гайды, единственное, что хочется делать после прочтения подобного - отправляться делать свою roguelike.

libtcod - это библиотека для разработки roguelike игр, о ней рассказывается в статье, поэтому добавил такой хэштег

#roguelike #gamedev #libtcod
Перевод - https://habr.com/ru/company/macloud/blog/551838/ 
Оригинал - https://jacobian.org/2021/apr/7/embrace-the-grind/

Вчера в топе хабра был перевод совсем небольшой, но оттого не менее замечательной статьи[автор - Jacob Kaplan-Moss], ссылка на которую выше.

Буду время от времени постить ссылки на такие материалы, из категории - ‘лучше узнать об этом раньше’.
#habr #перевод
Сейчас будет немножко пафосно, сорян, изначально философия этого канала - быть полезным. Я как то писал, что меня страшно раздражают каналы “где эдакая рефлексия о программировании переплетенная с полу мотивационным бредом.”

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

Но бывают такие “пограничные” темы, они вроде бы и могут как-то повлиять на процесс изучения, но они не про сам процесс и, как следствие, выбиваются из изначальной концепции/идеи канала.

У меня уже скопилась куча всяких заметок для будущих постов из этой категории, для них я создал отдельный канал @tokovIT , репост ниже как раз с него.
Есть одна, абсолютно потрясающая штука связанная с IT-индустрией - в привычном нам виде она(индустрия) началась совсем недавно(есть конечно те, кто считает чуть ли не со времен Алана Тьюринга, но это по моему какое-то снобство). Вытекающий из этого факт, который постоянно ‘взрывает’ мне мозг:

Люди создававшие эту самую индустрию не где то в далеком прошлом, а наши современники(многие уже в почтенном возрасте, но ситуацию это не меняет).

В начале 70-ых годов Деннис Ритчи создал язык программирования СИ, он же в соавторстве с Брайаном Керниганом написал книгу “The C Programming Language”. 

Книга стала эталоном ввода в ЯПы(кстати все еще популярна и отлично продается), куча всего связано с этой книгой, например именно в ней был представлен “хелло ворлд”, ставший впоследствии традиционно первой программой.

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

И до чего же странные эмоции я испытывал, смотря в середине прошлого лета подкаст Лекса Фридмана(канал - Lex Fridman) с одним из авторов(Брайаном Керниганом) - https://youtu.be/O9upVbGSBFo 

Вроде бы все сходится по датам, но раз 10 ловил себя на мысли, что как будто бы случилось нарушение временного континуума, это же автор той самой книги(я ее читал больше 10 лет назад, и уже тогда она была ‘книгой из 70-ых’, к тому же скоро ей стукнет полтинник), а я в 2020(подкаст вышел в середине прошлого лета) смотрю как автор пришел на подкаст и рассуждает о разных япах, их истории, unix, и даже немного ИИ затронули.

Кстати, на этот же подкаст приходили:
Бьёрн Страуструп(создатель C++) https://youtu.be/fjIhFzTUB9I
Гвидо ван Россум (создатель Python) https://youtu.be/ghwaIiE3Nd8 
Джеймс Гослинг (создатель Java) https://youtu.be/IT__Nrr3PNI 
Дональд Кнут(автор знаменитой монографии ‘Искусство программирования’) https://youtu.be/2BdBfsXbST8 

Услышать от автора чего то значимого, какие то рассуждения, узнать что он думает о влиянии, развитии и как видит будущее своего творения и т.д. можно сказать, подобное расставляет все точки над i.
Не знаю как скоро, но на основном канале обязательно выйдет ряд постов про уч.материалы для разных ЯПов(по типу уже существующего поста про уч.материалы для python).

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

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

Язык программирования C. Лекции и упражнения, Стивен Прата
Интересная штука с книгами Праты, 2 самые популярные - ввод в c и c++, это скорее забавное совпадение, но у обоих языков есть вводы написанные самими создателями языков. 

В чем же преимущество Праты? Я бы сказал доступность(но разумеется, всегда рекомендую ознакомиться со всеми вариантами), очень плотная подача материала и разжевано до самых мелочей. Абсолютный must-read для изучающих С.

Язык программирования Си, Брайан Керниган, Деннис Ритчи
Та самая книга от создателя языка, если планируете изучать си, с ней в любом случае стоит ознакомиться. Но есть важный момент, она очень далека от современного понимания книг по ‘вводу в ЯП’, это не учебник, а именно книга написанная инженерами для инженеров(особенно хорошо это видно в сравнении с предыдущей книгой). 

Изучаем программирование на C, Гриффитс Дэвид, Гриффитс Дон
В свое время серия книг ‘Head First’, стала “глотком свежего воздуха” в мире it литературы. Все дело в подаче, даже не знаю как это описать, она что ли веселая: шутки, смешные картинки(не уверен что тогда термин ‘мем’ был распространен), куча всякой визуализации и т.д. и т.п., и это на фоне достаточно ‘серьезных’ представителей жанра(это учитывая, что первая книга вышла в 2003).

В книге по Си, разумеется, рассматривается самое важное сложное - взаимодействие с памятью. И в данном случае, необычный стиль может сыграть на руку и сильно помочь в понимании этой темы(главный барьер в изучении языка).

#c #книги