План изучения программирования | дополнение к части 1 | о планах изучения
Это скорее дополнение к первой части(поэтому видеоверсию скорее всего делать не буду). Оно посвящено планам изучения, и нужно для того самого ‘контроля со стороны изучающего’ из прошлой части.
Изначально, думал начать именно с этой темы, но это мне показалось слишком уж необычном заходом, поэтому 1 часть была куда более стандартная(большинство частей будут именно - стандартными, но время от времени, будут и такие дополнения). Считаю, что описанное ниже крайне полезно узнать в начале изучения.
Если кратко - о планах изучения, как правильно составлять, какие принципы, на что обращать внимание и т.д. и т.п.
1. Где найти хороший roadmap/план изучения/список учебных материалов
Для начала, неплохо посмотреть какие они вообще бывают и возможно взять какой то за основу(или сразу несколько).
Недавно делал пост об этом - https://t.me/tobeprog/51
Кратко:
Касательно уч. материалов есть простое правило:
“в программировании, популярность учебного материала - верный признак качества. Правда работает это тогда, когда популярность - следствие рекомендаций уже ставших программистами(именно подобные отзывы и стоит искать при подборе уч. материалов).”
Т.е. нужно идти туда, где программисты обитают, где возможно невысокий, но все же хоть какой-то порог вхождения, случайным людям там будет просто не особо интересно, таким образом, ценность оценок возрастает.
Прекрасный вариант такого места - github, и как пример, буквально первая же строка выдачи “python + roadmap + github”, приведет к вполне себе отличному roadmap-у для изучения python - https://github.com/GnuriaN/Python-Roadmap (на русском, ссылается на русскоязычные ресурсы, достаточно подробно расписано, без лишней воды).
2. Взаимозаменяемость уч.материалов
Это очень важно, понимание этого способно решить кучу проблем, особенно на ранних этапах.
Изучение программирования не похоже на изучение какой-нибудь философии, нет кардинально разных взглядов на предмет(каких то определенных школ), способных изменить всю картину.
На практике это означает, что можно как угодно жонглировать учебными материалами. Если произошел какой-то затык и после изучения определенной темы, она все еще остается непонятной, хорошая идея - посмотреть как об этом рассказано в других книгах/курсах. И чем больше учебных материалов, тем выше вероятность найти подходящее объяснение.
При очень большом желании, можно читать главу про функции у одного автора, типы данных у другого, ооп у третьего, и условные 10 глав ввода в ЯП разложить на 10 разных авторов. В этом не много смысла и скорее всего это не очень удобно в плане восприятия, но даже такой странный метод никак не собьет с пути правильного изучения.
3. Учебные материалы это просто инструменты
Пункт напрямую связан с прошлым. Язык программирования это инструмент, книги/курсы по япам это инструмент для изучения инструмента.
Вроде бы, очень очевидная мысль. Но, на практике, отношение к уч.материалам противоположное - будто существует один, самый правильный вариант и нужно, сначала долго его искать, потом учить именно по строго определенной книге/курсу/методу. Как будто, это не один из вариантов(инструментов), а единственно возможный.
Если инструмент работает плохо, его надо менять. Например, материал подан отлично, за исключением одной главы, это может сильно затормозить, можно получить те же знания из другого источника, а не топтаться на месте).
4. Начать выстраивать план лучше с какого-то опорного уч.материала
Он должен быть достаточно полным, и служить ориентиром для всего дальнейшего изучения. Важна именно функция ориентира, не обязательно двигаться конкретно по этому учебному материалу, важно именно мочь с ним свериться и понять на каком этапе находитесь, что уже пройдено, какие темы еще не закрыты и т.д. и т.п.
Хорошая новость, что как и говорилось в правиле из п.1. в программировании популярность учебного материала - верный знак качества. А из-за ‘полноты’, такой учебный материала как раз и будут хвалить делая упор на эту самую ‘полноту’.
Это скорее дополнение к первой части(поэтому видеоверсию скорее всего делать не буду). Оно посвящено планам изучения, и нужно для того самого ‘контроля со стороны изучающего’ из прошлой части.
Изначально, думал начать именно с этой темы, но это мне показалось слишком уж необычном заходом, поэтому 1 часть была куда более стандартная(большинство частей будут именно - стандартными, но время от времени, будут и такие дополнения). Считаю, что описанное ниже крайне полезно узнать в начале изучения.
Если кратко - о планах изучения, как правильно составлять, какие принципы, на что обращать внимание и т.д. и т.п.
1. Где найти хороший roadmap/план изучения/список учебных материалов
Для начала, неплохо посмотреть какие они вообще бывают и возможно взять какой то за основу(или сразу несколько).
Недавно делал пост об этом - https://t.me/tobeprog/51
Кратко:
Касательно уч. материалов есть простое правило:
“в программировании, популярность учебного материала - верный признак качества. Правда работает это тогда, когда популярность - следствие рекомендаций уже ставших программистами(именно подобные отзывы и стоит искать при подборе уч. материалов).”
Т.е. нужно идти туда, где программисты обитают, где возможно невысокий, но все же хоть какой-то порог вхождения, случайным людям там будет просто не особо интересно, таким образом, ценность оценок возрастает.
Прекрасный вариант такого места - github, и как пример, буквально первая же строка выдачи “python + roadmap + github”, приведет к вполне себе отличному roadmap-у для изучения python - https://github.com/GnuriaN/Python-Roadmap (на русском, ссылается на русскоязычные ресурсы, достаточно подробно расписано, без лишней воды).
2. Взаимозаменяемость уч.материалов
Это очень важно, понимание этого способно решить кучу проблем, особенно на ранних этапах.
Изучение программирования не похоже на изучение какой-нибудь философии, нет кардинально разных взглядов на предмет(каких то определенных школ), способных изменить всю картину.
На практике это означает, что можно как угодно жонглировать учебными материалами. Если произошел какой-то затык и после изучения определенной темы, она все еще остается непонятной, хорошая идея - посмотреть как об этом рассказано в других книгах/курсах. И чем больше учебных материалов, тем выше вероятность найти подходящее объяснение.
При очень большом желании, можно читать главу про функции у одного автора, типы данных у другого, ооп у третьего, и условные 10 глав ввода в ЯП разложить на 10 разных авторов. В этом не много смысла и скорее всего это не очень удобно в плане восприятия, но даже такой странный метод никак не собьет с пути правильного изучения.
3. Учебные материалы это просто инструменты
Пункт напрямую связан с прошлым. Язык программирования это инструмент, книги/курсы по япам это инструмент для изучения инструмента.
Вроде бы, очень очевидная мысль. Но, на практике, отношение к уч.материалам противоположное - будто существует один, самый правильный вариант и нужно, сначала долго его искать, потом учить именно по строго определенной книге/курсу/методу. Как будто, это не один из вариантов(инструментов), а единственно возможный.
Если инструмент работает плохо, его надо менять. Например, материал подан отлично, за исключением одной главы, это может сильно затормозить, можно получить те же знания из другого источника, а не топтаться на месте).
4. Начать выстраивать план лучше с какого-то опорного уч.материала
Он должен быть достаточно полным, и служить ориентиром для всего дальнейшего изучения. Важна именно функция ориентира, не обязательно двигаться конкретно по этому учебному материалу, важно именно мочь с ним свериться и понять на каком этапе находитесь, что уже пройдено, какие темы еще не закрыты и т.д. и т.п.
Хорошая новость, что как и говорилось в правиле из п.1. в программировании популярность учебного материала - верный знак качества. А из-за ‘полноты’, такой учебный материала как раз и будут хвалить делая упор на эту самую ‘полноту’.
Telegram
СТАТЬ ПРОГРАММИСТОМ
Где найти хороший roadmap/план изучения/список учебных материалов
Приветствую, совсем короткий пост. Пару раз видел это вопрос под моими постами, да даже сами посты с этой тематикой получают наибольшее внимание. Очевидно, тема актуальная, и хотя ответ на…
Приветствую, совсем короткий пост. Пару раз видел это вопрос под моими постами, да даже сами посты с этой тематикой получают наибольшее внимание. Очевидно, тема актуальная, и хотя ответ на…
Небольшой ресерч, и такой материал будет найден(не говоря уже о том, что он скорее всего будет в каждом списке рекомендуемой литературы). Как пример, при упоминании основ питона первым в голову приходит Лутц.
5. Не перепроходите уже понятое
Вообще лучше относиться к опорному материалу, как к 100%(обычно они еще и переполнены), а уже ко всем остальным книгам/курсам, как к возможности эти проценты заполнить. Об этом не было сказано в п.2 и п.3, вроде бы это очевидно, но все же напишу, если какая та часть уже заполнена, делать это повторно не нужно(перепроходить понятое - потеря времени).
6. Для материалов на английском не нужен уровень Disco Elysium
Я не лингвист, поэтому рассуждений на тему почему так выдать не могу. Но точно могу сказать, что для многих становится настоящим открытием то, насколько простой английский используют в тех же лекциях по тех.специальностям. Если получается смотреть какие-нибудь ситкомчики(условных “Друзей”) в оригинале, то и лекции условного MIT по алгоритмам тоже потянете.
7. На этапе изучения бессмысленно читать проф.литературу
Один из самых худших советов - почитать что-то для разработчиков не будучи разработчиком. Кроме того, что это занятие крайне бессмысленное оно еще очень плохо может сказаться на восприятии предмета. Будучи далеким от самого процесса, изучающий может крайне субъективно трактовать некоторые советы, утрировать важность и например выучить то, что уже некоторое время не актуально(а потом на этот выстроится очень и очень странное представление предмета).
8. План всегда должен оставаться в контексте конечной задачи
Для чего изучается предмет, например, если для обретения профессии, то за пределы необходимых для работы требований, изучение выходить не должно. Связанно это с тем, что никое изучение даже близко не даст тот же опыт, что настоящая работа. Время, по сути, главный буст будущей карьеры, и тратить его просто так, не особо рационально.
5. Не перепроходите уже понятое
Вообще лучше относиться к опорному материалу, как к 100%(обычно они еще и переполнены), а уже ко всем остальным книгам/курсам, как к возможности эти проценты заполнить. Об этом не было сказано в п.2 и п.3, вроде бы это очевидно, но все же напишу, если какая та часть уже заполнена, делать это повторно не нужно(перепроходить понятое - потеря времени).
6. Для материалов на английском не нужен уровень Disco Elysium
Я не лингвист, поэтому рассуждений на тему почему так выдать не могу. Но точно могу сказать, что для многих становится настоящим открытием то, насколько простой английский используют в тех же лекциях по тех.специальностям. Если получается смотреть какие-нибудь ситкомчики(условных “Друзей”) в оригинале, то и лекции условного MIT по алгоритмам тоже потянете.
7. На этапе изучения бессмысленно читать проф.литературу
Один из самых худших советов - почитать что-то для разработчиков не будучи разработчиком. Кроме того, что это занятие крайне бессмысленное оно еще очень плохо может сказаться на восприятии предмета. Будучи далеким от самого процесса, изучающий может крайне субъективно трактовать некоторые советы, утрировать важность и например выучить то, что уже некоторое время не актуально(а потом на этот выстроится очень и очень странное представление предмета).
8. План всегда должен оставаться в контексте конечной задачи
Для чего изучается предмет, например, если для обретения профессии, то за пределы необходимых для работы требований, изучение выходить не должно. Связанно это с тем, что никое изучение даже близко не даст тот же опыт, что настоящая работа. Время, по сути, главный буст будущей карьеры, и тратить его просто так, не особо рационально.
Приветствую, давно хотел написать пост об изучении Computer Science, рассмотреть пару тем. рассказать об интересных уч.материалах. К тому же здесь превалируют русскоязычные уч. материалы, что достаточно редкая история.
Подготовка к изучению cs
Выбор языка
Все сводится к 2 вариантам: более классический - си, более простой - питон. Вообще можно выбрать и любой другой, но так уж сложилось, что большинство уч.материалов крутятся вокруг этих двух.
Начнем с питона, основное преимущество - можно быстро писать сложные программы или их рабочие прототипы. В cs очень важно, не просто изучать теорию, но и мочь что-то сделать, что называется “покрутить” это, поэкспериментировать, понять принцип работы на практике.
Пост про уч.материалы для изучения основ питона - https://t.me/tobeprog/29
Не буду расписывать каждый, уже кучу всего про них написал, как и про подбор правильных уч.материалов, все есть в посте.
Поэтому, сразу к Си. Сразу скажу, в моем понимании, изучении Си без ассемблера - крайне странная идея, и из того же gdb изучающий вообще вылезать не должен. Но это достаточно хардкорный подход, в котором, для начинающего уж слишком много процесса исследования(что может сильно запутать).
Надо ли писать о книгах по Си, там и так все ясно, в любой подборке будет фигурировать тот же Прата, мимо основных пройти невозможно, вместо этого расскажу о куда более интересном и малоизвестном материале.
https://stepik.org/course/73618 - один из лучших курсов по Си, найденный мной весьма странным образом. Дело в том, что автор курса написал книгу, с тем самым правильным в моем понимании подходом(сишечка через ассемблер), самой книги нет на русском, но гугл неожиданно привел меня на степик, где курс можно сказать спрятался(не привязан к какой-либо организации, на обложке милейший котик, и всего 2к учащихся, поэтому на самом сайте его приметить затруднительно). К сожалению, сам курс без ассемблера, но он все же очень хорош.
Cложный, глубокий, про современный подход к разработке(это прям редкость). Тут главное не торопиться, и постепенно, вникая во все(это оч. важно), двигаться по курсу.
А оно точно вам нужно?
Этот вопрос стоит задавать перед изучением любого топика/темы cs. И уж точно, перед комплексным изучением всего предмета. Да, вроде как лишних знаний не бывает, но вот что бывает, так это потерянное зря время(в случае с cs, очень и очень большое).
Почему я вообще поднял этот вопрос? Если кратко, ища разные материалы на тему cs, очень уж часто я видел крайне спорные утверждения из разряда: “каждый программист должен знать”. И если подобное утверждение выходит далеко за пределы основ, то я советую очень и очень осторожно к нему относиться.
Особенно, если изначально не стоит задачи разобраться в той или иной области, а ее изучения связано с получением, например, будущей профессии. Сделайте ресерч, посмотрите действительно ли это необходимое требование(предположу, что в большинстве случаев - нет).
Изучение от практики
Одна из самых примечательных особенностей изучения cs сейчас, это - возможность изучать некоторые темы от практики. Начинать с небольших “игрушечных” проектов и потихоньку увеличивать сложность, все больше и больше приближаясь к настоящим.
Даже без github-а, подборок и прочего, туториалы с ними легко гуглятся. Например, запрос “Lisp interpreter in python” и первый же результат:
http://norvig.com/lispy.html (How to Write a (Lisp) Interpreter (in Python)) статья Питера Норвига, где буквально за 90 строк он пишет и объясняет очень простой интерпретатор Lisp
https://habr.com/ru/post/115206/ - перевод этой статьи, также будет на первой странице выдачи
Это отличный вариант для старта. А что потом? Ну например, есть продолжении этой статьи с улучшенной версией интерпретатора:
https://norvig.com/lispy2.html (An ((Even Better) Lisp) Interpreter (in Python)) все также первая страница выдачи, там же будут и другие варианты.
Такой подход, ни в коем случае не отрицает чтения фундаментальной литературы, а наоборот дополняет его, и даже мотивирует все глубже и глубже изучать тему.
Количество тем
Чтобы этот пост не стал слишком уж большим, я взял самые популярные темы, они входят, если так можно выразиться - классические топики cs. Получилось 5(Алгоритмы, Математика, Архитектура, Операционные системы, Языки программирования и компиляторы).
Выбор языка
Все сводится к 2 вариантам: более классический - си, более простой - питон. Вообще можно выбрать и любой другой, но так уж сложилось, что большинство уч.материалов крутятся вокруг этих двух.
Начнем с питона, основное преимущество - можно быстро писать сложные программы или их рабочие прототипы. В cs очень важно, не просто изучать теорию, но и мочь что-то сделать, что называется “покрутить” это, поэкспериментировать, понять принцип работы на практике.
Пост про уч.материалы для изучения основ питона - https://t.me/tobeprog/29
Не буду расписывать каждый, уже кучу всего про них написал, как и про подбор правильных уч.материалов, все есть в посте.
Поэтому, сразу к Си. Сразу скажу, в моем понимании, изучении Си без ассемблера - крайне странная идея, и из того же gdb изучающий вообще вылезать не должен. Но это достаточно хардкорный подход, в котором, для начинающего уж слишком много процесса исследования(что может сильно запутать).
Надо ли писать о книгах по Си, там и так все ясно, в любой подборке будет фигурировать тот же Прата, мимо основных пройти невозможно, вместо этого расскажу о куда более интересном и малоизвестном материале.
https://stepik.org/course/73618 - один из лучших курсов по Си, найденный мной весьма странным образом. Дело в том, что автор курса написал книгу, с тем самым правильным в моем понимании подходом(сишечка через ассемблер), самой книги нет на русском, но гугл неожиданно привел меня на степик, где курс можно сказать спрятался(не привязан к какой-либо организации, на обложке милейший котик, и всего 2к учащихся, поэтому на самом сайте его приметить затруднительно). К сожалению, сам курс без ассемблера, но он все же очень хорош.
Cложный, глубокий, про современный подход к разработке(это прям редкость). Тут главное не торопиться, и постепенно, вникая во все(это оч. важно), двигаться по курсу.
А оно точно вам нужно?
Этот вопрос стоит задавать перед изучением любого топика/темы cs. И уж точно, перед комплексным изучением всего предмета. Да, вроде как лишних знаний не бывает, но вот что бывает, так это потерянное зря время(в случае с cs, очень и очень большое).
Почему я вообще поднял этот вопрос? Если кратко, ища разные материалы на тему cs, очень уж часто я видел крайне спорные утверждения из разряда: “каждый программист должен знать”. И если подобное утверждение выходит далеко за пределы основ, то я советую очень и очень осторожно к нему относиться.
Особенно, если изначально не стоит задачи разобраться в той или иной области, а ее изучения связано с получением, например, будущей профессии. Сделайте ресерч, посмотрите действительно ли это необходимое требование(предположу, что в большинстве случаев - нет).
Изучение от практики
Одна из самых примечательных особенностей изучения cs сейчас, это - возможность изучать некоторые темы от практики. Начинать с небольших “игрушечных” проектов и потихоньку увеличивать сложность, все больше и больше приближаясь к настоящим.
Даже без github-а, подборок и прочего, туториалы с ними легко гуглятся. Например, запрос “Lisp interpreter in python” и первый же результат:
http://norvig.com/lispy.html (How to Write a (Lisp) Interpreter (in Python)) статья Питера Норвига, где буквально за 90 строк он пишет и объясняет очень простой интерпретатор Lisp
https://habr.com/ru/post/115206/ - перевод этой статьи, также будет на первой странице выдачи
Это отличный вариант для старта. А что потом? Ну например, есть продолжении этой статьи с улучшенной версией интерпретатора:
https://norvig.com/lispy2.html (An ((Even Better) Lisp) Interpreter (in Python)) все также первая страница выдачи, там же будут и другие варианты.
Такой подход, ни в коем случае не отрицает чтения фундаментальной литературы, а наоборот дополняет его, и даже мотивирует все глубже и глубже изучать тему.
Количество тем
Чтобы этот пост не стал слишком уж большим, я взял самые популярные темы, они входят, если так можно выразиться - классические топики cs. Получилось 5(Алгоритмы, Математика, Архитектура, Операционные системы, Языки программирования и компиляторы).
Не знаю насколько вообще тема поста интересна, если хорошо зайдет, то сделаю еще 5, навскидку: сети, бд, графика и т.д.
Алгоритмы
Алгоритмы. Руководство по разработке, Стивен Скиена - считаю лучшим вариантом, замечательная книга. Кроме того, что она великолепно написана, в ней есть куча ссылок на другую отличную литературу, можно очень глубоко погрузиться в тему.
Грокаем алгоритмы, Адитья Бхаргава - хороший вариант для совсем начинающих.
Структуры данных и алгоритмы Java, Роберт Лафоре - классика, не смущайтесь ЯПа в названии, вообще хорошая литература по алгоритмам к ЯПам не привязана, они лишь лучше иллюстрируют рассказанное, в случае Лафорте, рассказанное настолько понятно, что Java точно не станет проблемой.
Но если нужно именно на определенном ЯПе, то разумеется есть репозиторий с кучей алгоритмов и реализаций на разных ЯПах - https://github.com/TheAlgorithms/Python/blob/master/DIRECTORY.md
Алгоритмы. Вводный курс, Томас Кормен - почему то все время забывают про эту книгу, и сразу отсылают к большой работе того же автора ‘Алгоритмы. Построение и анализ’, эта книга, куда легче и возможно, станет ступенькой к основному труду автора.
https://stepik.org/course/217 - Алгоритмы: теория и практика. Методы
https://stepik.org/course/1547 - Алгоритмы: теория и практика. Структуры данных
Два отличных курса от CSC, оба мультиязычные
Есть один курс на английском, который я не могу не упомянуть:
https://youtu.be/HtSuA80QTyo Introduction to Algorithms(MIT), он большой(это мягко сказано), но зато очень детальный, и объясняют все достаточно понятно, ко всему прочему этот курс только часть из серии Массачусетских курсов по алгоритмам, сразу за ним идет не менее приятный - Design and Analysis of Algorithms.
Еще к этому можно добавить кучу отличных статей, кучу объяснений сложных моментов простым языком, всякие ресурсы с задачками и т.д. и т.п. В плане поиска уч.материалов - изучение алгоритмов не доставит проблем. Если сложновато, всегда найдется объяснение попроще, если не хватает челленджа, всегда найдется челлендж.
Алгоритмы. Руководство по разработке, Стивен Скиена - считаю лучшим вариантом, замечательная книга. Кроме того, что она великолепно написана, в ней есть куча ссылок на другую отличную литературу, можно очень глубоко погрузиться в тему.
Грокаем алгоритмы, Адитья Бхаргава - хороший вариант для совсем начинающих.
Структуры данных и алгоритмы Java, Роберт Лафоре - классика, не смущайтесь ЯПа в названии, вообще хорошая литература по алгоритмам к ЯПам не привязана, они лишь лучше иллюстрируют рассказанное, в случае Лафорте, рассказанное настолько понятно, что Java точно не станет проблемой.
Но если нужно именно на определенном ЯПе, то разумеется есть репозиторий с кучей алгоритмов и реализаций на разных ЯПах - https://github.com/TheAlgorithms/Python/blob/master/DIRECTORY.md
Алгоритмы. Вводный курс, Томас Кормен - почему то все время забывают про эту книгу, и сразу отсылают к большой работе того же автора ‘Алгоритмы. Построение и анализ’, эта книга, куда легче и возможно, станет ступенькой к основному труду автора.
https://stepik.org/course/217 - Алгоритмы: теория и практика. Методы
https://stepik.org/course/1547 - Алгоритмы: теория и практика. Структуры данных
Два отличных курса от CSC, оба мультиязычные
Есть один курс на английском, который я не могу не упомянуть:
https://youtu.be/HtSuA80QTyo Introduction to Algorithms(MIT), он большой(это мягко сказано), но зато очень детальный, и объясняют все достаточно понятно, ко всему прочему этот курс только часть из серии Массачусетских курсов по алгоритмам, сразу за ним идет не менее приятный - Design and Analysis of Algorithms.
Еще к этому можно добавить кучу отличных статей, кучу объяснений сложных моментов простым языком, всякие ресурсы с задачками и т.д. и т.п. В плане поиска уч.материалов - изучение алгоритмов не доставит проблем. Если сложновато, всегда найдется объяснение попроще, если не хватает челленджа, всегда найдется челлендж.
Математика
Лучше изучать математику под конкретную цель. Т.е. в тот момент, когда приходит понимание, что для дальнейшего изучения другой темы необходимо ее(математику) подтянуть.
Но, как бы это помягче сказать, может сложиться ситуация, когда и подтягивать то нечего, настолько с математикой дружба не склеилась. В таком случае, наверно стоит почитать что-то популярное, пускай не относящееся к дискретной математике(cs крутится вокруг неё), просто чтобы понять что это не такая страшная штука.
Парочка таких книг:
Красота в квадрате, Алекс Беллос
Удовольствие от х, Стивен Строгац
Теория игр, Авинаш Диксит, Барри Нейлбафф
Что такое математика? Рихард Курант, Герберт Роббинс
После/параллельно, стоит посмотреть что-то из разряда “математика для взрослых/минимум для абитуриента тех.вуза”. Главное, чтобы подобные ликбезы не стали в тягость.
Как и говорилось выше, в cs все крутится вокруг дискретной математики
Дискретная математика для программистов, Род Хаггарти - наверно, сейчас это лучший вариант введения в предмет.
На степике довольно много курсов по дискретной математике, возможно кому то такой формат будет удобней.
https://stepik.org/course/91 - Ликбез по дискретной математике
https://stepik.org/course/83 - Дискретные структуры
https://stepik.org/course/125 - Основы перечислительной комбинаторики
https://stepik.org/course/126 - Основы теории графов
https://stepik.org/course/5608 - Теория графов
Перед курсом про алгоритмы(из прошлого раздела) в MIT читают курс, который так и называется Mathematics for Computer Science - https://youtu.be/L3LMbpZIKhQ
Лучше изучать математику под конкретную цель. Т.е. в тот момент, когда приходит понимание, что для дальнейшего изучения другой темы необходимо ее(математику) подтянуть.
Но, как бы это помягче сказать, может сложиться ситуация, когда и подтягивать то нечего, настолько с математикой дружба не склеилась. В таком случае, наверно стоит почитать что-то популярное, пускай не относящееся к дискретной математике(cs крутится вокруг неё), просто чтобы понять что это не такая страшная штука.
Парочка таких книг:
Красота в квадрате, Алекс Беллос
Удовольствие от х, Стивен Строгац
Теория игр, Авинаш Диксит, Барри Нейлбафф
Что такое математика? Рихард Курант, Герберт Роббинс
После/параллельно, стоит посмотреть что-то из разряда “математика для взрослых/минимум для абитуриента тех.вуза”. Главное, чтобы подобные ликбезы не стали в тягость.
Как и говорилось выше, в cs все крутится вокруг дискретной математики
Дискретная математика для программистов, Род Хаггарти - наверно, сейчас это лучший вариант введения в предмет.
На степике довольно много курсов по дискретной математике, возможно кому то такой формат будет удобней.
https://stepik.org/course/91 - Ликбез по дискретной математике
https://stepik.org/course/83 - Дискретные структуры
https://stepik.org/course/125 - Основы перечислительной комбинаторики
https://stepik.org/course/126 - Основы теории графов
https://stepik.org/course/5608 - Теория графов
Перед курсом про алгоритмы(из прошлого раздела) в MIT читают курс, который так и называется Mathematics for Computer Science - https://youtu.be/L3LMbpZIKhQ
Архитектура
"Код", Петцольд - книга из введения, если по каким то причинам еще не прочитана, то самое время это сделать.
Архитектура компьютера, Таненбаум - буквально фундамент, очень важная книга. Она куда сложнее Петцольда, но это, можно сказать, другой уровень. По сути, Петцольд в разрезе изучения архитектуры - подготовка к этой книге.
Архитектура компьютера и проектирование компьютерных систем, Дэвид Паттерсон, Джон Хеннесси - еще одна фундаментальная книга. Вполне может составить конкуренцию Таненбауму.
Честно сказать, не вижу смысла писать о других уч.материалах. Последние 2 книги просто вне всякой конкуренции. И даже близко никакой другой курс/книга не сможет подобраться.
"Код", Петцольд - книга из введения, если по каким то причинам еще не прочитана, то самое время это сделать.
Архитектура компьютера, Таненбаум - буквально фундамент, очень важная книга. Она куда сложнее Петцольда, но это, можно сказать, другой уровень. По сути, Петцольд в разрезе изучения архитектуры - подготовка к этой книге.
Архитектура компьютера и проектирование компьютерных систем, Дэвид Паттерсон, Джон Хеннесси - еще одна фундаментальная книга. Вполне может составить конкуренцию Таненбауму.
Честно сказать, не вижу смысла писать о других уч.материалах. Последние 2 книги просто вне всякой конкуренции. И даже близко никакой другой курс/книга не сможет подобраться.
Операционные системы
https://stepik.org/course/1780 - Операционные системы, отличный курс, с него вполне можно начать.
https://github.com/tuhdo/os01 - Operating Systems: From 0 to 1, это книга, отличный ввод в тему, к сожалению только на английском.
https://littleosbook.github.io/ - The little book about OS development, великолепная книга, именно по разработке операционок, теорию же авторы рекомендуют брать из того же Таненбаума. Тоже только на английском.
Собственно, Современные операционные системы, Таненбаум, Бос - книга, разумеется, абсолютный мастрид для желающих разобраться в вопросе, но она очень и очень сложная, поэтому крайне не рекомендую начинать с нее, посмотрите варианты которые выше, попишите всякие мелкие проекты(благо туториалов куча), и только потом стоит приступать.
Если интересует Linux, точно не стоит проходить мимо Ядро Linux. Описание процесса разработки, Роберт Лав
https://stepik.org/course/1780 - Операционные системы, отличный курс, с него вполне можно начать.
https://github.com/tuhdo/os01 - Operating Systems: From 0 to 1, это книга, отличный ввод в тему, к сожалению только на английском.
https://littleosbook.github.io/ - The little book about OS development, великолепная книга, именно по разработке операционок, теорию же авторы рекомендуют брать из того же Таненбаума. Тоже только на английском.
Собственно, Современные операционные системы, Таненбаум, Бос - книга, разумеется, абсолютный мастрид для желающих разобраться в вопросе, но она очень и очень сложная, поэтому крайне не рекомендую начинать с нее, посмотрите варианты которые выше, попишите всякие мелкие проекты(благо туториалов куча), и только потом стоит приступать.
Если интересует Linux, точно не стоит проходить мимо Ядро Linux. Описание процесса разработки, Роберт Лав
Языки программирования и компиляторы
Разумеется, есть книга дракона Компиляторы: принципы, технологии и инструменты, Ахо, Лам, Ульман, Сети - здесь та же история, что с операционками Таненбаума, абсолютный мастрид, но к нему следует хорошенько подготовиться.
К тому же, можно очень хорошо разобраться в теме, и например, написать свой первый компилятор, вообще до соприкосновения с драконами. И это мне кажется правильной тактикой изучения.
Начать с того самого “подхода от практики”, потихонечку увеличивать сложность, пока не станет ясно, что необходимо более глубокое понимание теории. Отправная точка у всех разная, благо туториалов разной сложности столько, что без проблем можно найти подходящий.
https://ruslanspivak.com/lsbasi-part1/ - отличный вариант для старта, Цикл из 19 статей, в котором автор, пишет интерпретатор языка Pascal на Python.
https://github.com/DoctorWkt/acwj - автор репозиория пишет компилятор, при этом подробнейшщим образом объясняя каждый шаг.
Разумеется, есть книга дракона Компиляторы: принципы, технологии и инструменты, Ахо, Лам, Ульман, Сети - здесь та же история, что с операционками Таненбаума, абсолютный мастрид, но к нему следует хорошенько подготовиться.
К тому же, можно очень хорошо разобраться в теме, и например, написать свой первый компилятор, вообще до соприкосновения с драконами. И это мне кажется правильной тактикой изучения.
Начать с того самого “подхода от практики”, потихонечку увеличивать сложность, пока не станет ясно, что необходимо более глубокое понимание теории. Отправная точка у всех разная, благо туториалов разной сложности столько, что без проблем можно найти подходящий.
https://ruslanspivak.com/lsbasi-part1/ - отличный вариант для старта, Цикл из 19 статей, в котором автор, пишет интерпретатор языка Pascal на Python.
https://github.com/DoctorWkt/acwj - автор репозиория пишет компилятор, при этом подробнейшщим образом объясняя каждый шаг.
Только что понял, что в пост про изучения cs забыл добавить введение, хотя в самом посте на него ссылаюсь FACEPALM
Ввод в computer science
Учебные материалы, не требующие какой либо предварительной подготовки, можно даже ни одного ЯПа не знать. При этом, их полезно посмотреть всем начинающим программистам, даже если дальнейшее изучения cs не планируется.
1.1. CS50
Оригинал Перевод
Легендарный Гарвардский ввод в cs. Лектор обладает каким то запредельным скиллом интересно подавать сложный материал, и сам материал выше всяких похвал. На данный момент, именно этот ввод мне видится лучшим вариантом для старта.
1.2. "Код", Петцольд
Эта книга - ввод в архитектуру, разбирается всё, буквально от подачи тока по проводкам и заканчивая высокоуровневыми языками программирования.
Но куда интересней другая особенность книги - здесь с легкостью ловится эффект, когда ты понял одну часть, но уже забыл прошлую, и надо все заново, и все удерживать в голове и т.д. При этом сама книга написана простым языком, не подразумевает никаких предварительных знаний по теме и досконально разбирает каждый момент. Вы как бы учитесь работать со сложной системой, находясь при этом в комфортных условиях(это буквально необходимый навык для дальнейшего изучения cs, наверно, он даже важнее самой темы книги).
Ко всему прочему CS50 и "Код" Петцольда - идеальное сочетание. CS50 мало про архитектуру, а Код отлично ложится на ввод в computer science. Поэтому рекомендую ознакомится с книгой как можно раньше.
1.3. Missing Semester
Оригинал - https://missing.csail.mit.edu/
[Перевод, на данный момент переведено 2 из 11 частей]Пропущенный семестр курса по компьютерным наукам - https://missing-semester-rus.github.io/
Есть куча инструментов, которые предположительно должен знать студент после изучения Computer Science, обычно это оставляют для самостоятельного изучения, тут же наоборот решили сакцентировать на них внимание(и сэкономить кучу времени студентам).
Ввод в computer science
Учебные материалы, не требующие какой либо предварительной подготовки, можно даже ни одного ЯПа не знать. При этом, их полезно посмотреть всем начинающим программистам, даже если дальнейшее изучения cs не планируется.
1.1. CS50
Оригинал Перевод
Легендарный Гарвардский ввод в cs. Лектор обладает каким то запредельным скиллом интересно подавать сложный материал, и сам материал выше всяких похвал. На данный момент, именно этот ввод мне видится лучшим вариантом для старта.
1.2. "Код", Петцольд
Эта книга - ввод в архитектуру, разбирается всё, буквально от подачи тока по проводкам и заканчивая высокоуровневыми языками программирования.
Но куда интересней другая особенность книги - здесь с легкостью ловится эффект, когда ты понял одну часть, но уже забыл прошлую, и надо все заново, и все удерживать в голове и т.д. При этом сама книга написана простым языком, не подразумевает никаких предварительных знаний по теме и досконально разбирает каждый момент. Вы как бы учитесь работать со сложной системой, находясь при этом в комфортных условиях(это буквально необходимый навык для дальнейшего изучения cs, наверно, он даже важнее самой темы книги).
Ко всему прочему CS50 и "Код" Петцольда - идеальное сочетание. CS50 мало про архитектуру, а Код отлично ложится на ввод в computer science. Поэтому рекомендую ознакомится с книгой как можно раньше.
1.3. Missing Semester
Оригинал - https://missing.csail.mit.edu/
[Перевод, на данный момент переведено 2 из 11 частей]Пропущенный семестр курса по компьютерным наукам - https://missing-semester-rus.github.io/
Есть куча инструментов, которые предположительно должен знать студент после изучения Computer Science, обычно это оставляют для самостоятельного изучения, тут же наоборот решили сакцентировать на них внимание(и сэкономить кучу времени студентам).
YouTube
1. CS50 на русском: Лекция #1 [Гарвард, Основы программирования, осень 2015 год]
Доп. материалы и задачи к лекции - https://javarush.com/s/level_0
Весь курс CS50 — https://javarush.com/s/course_cs50
Это Хогвартс? Нет, друзья, это Гарвард и первая лекция (Week 0) легендарного курса по основам программирования CS50 с русским переводом.…
Весь курс CS50 — https://javarush.com/s/course_cs50
Это Хогвартс? Нет, друзья, это Гарвард и первая лекция (Week 0) легендарного курса по основам программирования CS50 с русским переводом.…
Forwarded from Токов о программировании
https://vimium.github.io/
Vimium
Если кратко, это расширение для браузера, которое позволяет серфить по интернету без использования мыши.
Первый же логичный вопрос - а зачем?
Ну разумеется, чтобы выпендриваться. Можно делать все тоже самое, но выглядеть при этом куда более профессионально(и надменно смотреть на всех, кто так не может). Еще бы к этому добавить работу исключительно из консоли, и все - образ компьютерного гения готов.😂
Но если серьезно, штука очень удобная, сейчас пробегусь по 3-ем резонным причинам.
1. Для меня основное удобство не в том, что я экономлю какие-то секунды не пользуясь мышью/тачпадом, а именно в том, что не выхожу из состояния потока(максимальной сосредоточенности) во время написания кода.
Заметил я это, примерно 4 года назад, когда впервые этим расширением воспользовался, с тех пор это неотъемлемый элемент workflow. Чем-то это напоминает хоткеи(правда они существенно экономят время), можно и без них, но с ними в непомерное кол-во раз удобнее.
2. Недавно ‘оживлял’ старый ноут, накатил Manjaro(нынче мой фаворит среди Linux дистрибутивов), все встало шикарно, но это ноут, и как уже наверно все поняли, тачпад, а точнее старый тачпад. Удовольствие то еще, особенно если достаточно долгое время юзался новый тачпад(особенно если он макбучный). А что если он сломался или ноут нужен не стационарно, а таскать мышь неудобно(не чинить же всякое старье, это может быть банально не выгодно). Vimium, в таком случае, очень к месту.
3. Если надо побыстрее освоить Vim, многие команды Vim-а были логично перенесены в Vimium. Серфить в интернете куда приятней, чем писать код(я разработчик, я знаю), а если во время этого ‘фоном’ осваивается такой мощный инструмент как Vim - вдвойне приятней.
Vimium это просто инструмент, он не отрицает использовании мыши(как и говорил, юзаю его только во время работы с кодом).
Разумеется, можно добавлять исключения, но есть момент связанный с раскладкой, расширение настроено на англ., т.е. можно юзать его, потом менять раскладку и юзать комбинации которые работают на определенном сайте(например, ‘f’ - используется для быстро переход по ссылкам, а на ютубчике для полноэкранного режима).
Проект опенсорсный, если есть желание узнать что там внутри, то код на github(JS).
#инструменты #vim
Vimium
Если кратко, это расширение для браузера, которое позволяет серфить по интернету без использования мыши.
Первый же логичный вопрос - а зачем?
Ну разумеется, чтобы выпендриваться. Можно делать все тоже самое, но выглядеть при этом куда более профессионально(и надменно смотреть на всех, кто так не может). Еще бы к этому добавить работу исключительно из консоли, и все - образ компьютерного гения готов.😂
Но если серьезно, штука очень удобная, сейчас пробегусь по 3-ем резонным причинам.
1. Для меня основное удобство не в том, что я экономлю какие-то секунды не пользуясь мышью/тачпадом, а именно в том, что не выхожу из состояния потока(максимальной сосредоточенности) во время написания кода.
Заметил я это, примерно 4 года назад, когда впервые этим расширением воспользовался, с тех пор это неотъемлемый элемент workflow. Чем-то это напоминает хоткеи(правда они существенно экономят время), можно и без них, но с ними в непомерное кол-во раз удобнее.
2. Недавно ‘оживлял’ старый ноут, накатил Manjaro(нынче мой фаворит среди Linux дистрибутивов), все встало шикарно, но это ноут, и как уже наверно все поняли, тачпад, а точнее старый тачпад. Удовольствие то еще, особенно если достаточно долгое время юзался новый тачпад(особенно если он макбучный). А что если он сломался или ноут нужен не стационарно, а таскать мышь неудобно(не чинить же всякое старье, это может быть банально не выгодно). Vimium, в таком случае, очень к месту.
3. Если надо побыстрее освоить Vim, многие команды Vim-а были логично перенесены в Vimium. Серфить в интернете куда приятней, чем писать код(я разработчик, я знаю), а если во время этого ‘фоном’ осваивается такой мощный инструмент как Vim - вдвойне приятней.
Vimium это просто инструмент, он не отрицает использовании мыши(как и говорил, юзаю его только во время работы с кодом).
Разумеется, можно добавлять исключения, но есть момент связанный с раскладкой, расширение настроено на англ., т.е. можно юзать его, потом менять раскладку и юзать комбинации которые работают на определенном сайте(например, ‘f’ - используется для быстро переход по ссылкам, а на ютубчике для полноэкранного режима).
Проект опенсорсный, если есть желание узнать что там внутри, то код на github(JS).
#инструменты #vim
👍1
Git
На данный момент знание git - необходимость(вне зависимости от ЯПа или направления разработки).
Если говорить о правильном моменте изучения - сразу после основ.
Основной уч.материал и буквально лучшая книга - https://git-scm.com/book/ru/v2 , куча уч.материалов по теме ссылаются именно на нее.
Относительно курсов, есть популярный на степике - https://stepik.org/course/3145 , но на данный момент у него какие-то проблемы с интерактивными задачами(они не отображаются). И я бы не сказал, что сильно его рекомендую в таком only “лекционном” формате, он именно что ‘норм’ - не хороший и не плохой.
Поэтому расскажу об одном, вроде бы очевидном, но редко используемом шаге при самостоятельном изучении - бесплатные курсы с платных платформ(поскольку это такой способ рекламы, то они обычно хороши). По понятным причинам не буду ссылаться на какую-то конкретную, но скажу так - посмотрел на 3 разных(просто гуглите ‘бесплатный курс по гит’), везде было хорошо.
Хороший онлайн учебник, https://githowto.com/ru , как говорится на сайте интерактивный тур, самое то, если хочется чтобы было максимально кратко и без лишней воды.
https://learngitbranching.js.org/?locale=ru_RU - интерактивная среда, поможет достаточно хорошо разобраться в теме ветвления. Очень крутой проект.
Пару моментов, которые не особо часто обсуждают:
1/ Нет ничего плохого в gui клиентах, если они оптимизируют процесс работы, почему бы и нет. Однако, перед тем как ими пользоваться, неплохо бы понять что происходит внутри, хотя бы в общих чертах, и сделать это без консоли не получится. Поэтому, учимся однозначно через консоль, а пользуемся в дальнейшем как будет удобней.
2/ Не хочу углубляться в уже историю, рассуждать о том как раньше выделялись новички с вкаченными профилями на гитхабе, честно скажу, как по мне именно с новичками сейчас эта штука не сработает(знаете мем про “потрясающий ход”, так вот, ход перестает быть потрясающим, когда о нем знают буквально все).
3/ GitHub Pages и аналоги, видео ниже
#git #инструменты
На данный момент знание git - необходимость(вне зависимости от ЯПа или направления разработки).
Если говорить о правильном моменте изучения - сразу после основ.
Основной уч.материал и буквально лучшая книга - https://git-scm.com/book/ru/v2 , куча уч.материалов по теме ссылаются именно на нее.
Относительно курсов, есть популярный на степике - https://stepik.org/course/3145 , но на данный момент у него какие-то проблемы с интерактивными задачами(они не отображаются). И я бы не сказал, что сильно его рекомендую в таком only “лекционном” формате, он именно что ‘норм’ - не хороший и не плохой.
Поэтому расскажу об одном, вроде бы очевидном, но редко используемом шаге при самостоятельном изучении - бесплатные курсы с платных платформ(поскольку это такой способ рекламы, то они обычно хороши). По понятным причинам не буду ссылаться на какую-то конкретную, но скажу так - посмотрел на 3 разных(просто гуглите ‘бесплатный курс по гит’), везде было хорошо.
Хороший онлайн учебник, https://githowto.com/ru , как говорится на сайте интерактивный тур, самое то, если хочется чтобы было максимально кратко и без лишней воды.
https://learngitbranching.js.org/?locale=ru_RU - интерактивная среда, поможет достаточно хорошо разобраться в теме ветвления. Очень крутой проект.
Пару моментов, которые не особо часто обсуждают:
1/ Нет ничего плохого в gui клиентах, если они оптимизируют процесс работы, почему бы и нет. Однако, перед тем как ими пользоваться, неплохо бы понять что происходит внутри, хотя бы в общих чертах, и сделать это без консоли не получится. Поэтому, учимся однозначно через консоль, а пользуемся в дальнейшем как будет удобней.
2/ Не хочу углубляться в уже историю, рассуждать о том как раньше выделялись новички с вкаченными профилями на гитхабе, честно скажу, как по мне именно с новичками сейчас эта штука не сработает(знаете мем про “потрясающий ход”, так вот, ход перестает быть потрясающим, когда о нем знают буквально все).
3/ GitHub Pages и аналоги, видео ниже
#git #инструменты
Stepik: online education
Основы Git
Курс описывает наиболее часто используемые команды git, взятые из опыта реальных проектов. Даются примеры и интерактивные задачи.
CodeWars https://www.codewars.com
Кратко - платформа с кучей задач на разных ЯПах, с необычной стилизацией на тему восточных боевых искусств(к примеру, прогрессируя тут можно получать кю и даны) и просто великолепной реализацией.
Не знаю, можно ли назвать это минусом, но на codewars отсутствует локализация. Если это все же минус, то он буквально единственный(кстати несколько следующих постов будут как раз про английский в контексте изучения программирования).
Куча задач, огромный выбор ЯПов(о чем говорить, тут можно потренить LISP), после выбора задачи попадаем в среду где пишем решение и запускаем тесты, после прохождения тестов можем отрефакторить и засабмитить код(в целом, стандартный набор для подобных платформ).
Но дальше происходит достаточно интересная штука, нам сразу показывают как эту же задачу решили другие пользователи, присутствует рейтинговая система, благодаря которой хорошие решения будут в топе. Можно посмотреть на более правильные решения, более элегантные, что очень актуально в “сильно-свободных” языках типа того же питона, особенно для новичков.
Ко всему прочему сервис в отличии от большинства конкурентов - бесплатный, конечно есть возможность платно проапгрейдить аккаунт, но на основном функционале этот апгрейд никак не сказывается, поэтому он вовсе не обязателен.
Также важный момент с самим сообществом, платформа пополняется именно пользовательскими задачами, но существует интересная система отбора, благодаря чему в основной банк задач всякий ширпотреб попасть просто не может.
P.S. при регистрации нужно решить простенькую задачку(дописать чего не хватает в коде), обычно это return
#инструменты #задачи #алгоритмы
Кратко - платформа с кучей задач на разных ЯПах, с необычной стилизацией на тему восточных боевых искусств(к примеру, прогрессируя тут можно получать кю и даны) и просто великолепной реализацией.
Не знаю, можно ли назвать это минусом, но на codewars отсутствует локализация. Если это все же минус, то он буквально единственный(кстати несколько следующих постов будут как раз про английский в контексте изучения программирования).
Куча задач, огромный выбор ЯПов(о чем говорить, тут можно потренить LISP), после выбора задачи попадаем в среду где пишем решение и запускаем тесты, после прохождения тестов можем отрефакторить и засабмитить код(в целом, стандартный набор для подобных платформ).
Но дальше происходит достаточно интересная штука, нам сразу показывают как эту же задачу решили другие пользователи, присутствует рейтинговая система, благодаря которой хорошие решения будут в топе. Можно посмотреть на более правильные решения, более элегантные, что очень актуально в “сильно-свободных” языках типа того же питона, особенно для новичков.
Ко всему прочему сервис в отличии от большинства конкурентов - бесплатный, конечно есть возможность платно проапгрейдить аккаунт, но на основном функционале этот апгрейд никак не сказывается, поэтому он вовсе не обязателен.
Также важный момент с самим сообществом, платформа пополняется именно пользовательскими задачами, но существует интересная система отбора, благодаря чему в основной банк задач всякий ширпотреб попасть просто не может.
P.S. при регистрации нужно решить простенькую задачку(дописать чего не хватает в коде), обычно это return
#инструменты #задачи #алгоритмы
Codewars
Codewars - Achieve mastery through coding practice and developer mentorship
A coding practice website for all programming levels – Join a community of over 3 million developers and improve your coding skills in over 55 programming languages!
Github Copilot
Несколько дней назад майки представили Copilot. Второй пилот(в переводе с англ.) - инструмент на базе искусственного интеллекта помогающий писать код. Например сам дописывает функцию, исходя из ее названия.
Очень крутой обзор/разбор с демонстрацией вышел на канале Fireship - https://youtu.be/4duqI8WyfqE [англ.]
#youtube #ии #github #инструменты
Несколько дней назад майки представили Copilot. Второй пилот(в переводе с англ.) - инструмент на базе искусственного интеллекта помогающий писать код. Например сам дописывает функцию, исходя из ее названия.
Очень крутой обзор/разбор с демонстрацией вышел на канале Fireship - https://youtu.be/4duqI8WyfqE [англ.]
#youtube #ии #github #инструменты
YouTube
The Truth about Github Copilot // AI Programming First Look
Learn the basics of GitHub Copilot - an AI-powered tool for writing code faster. It is built on top of OpenAI’s GPT-3 model and uses training data from public places like StackOverflow to suggest and write code automatically.
#ai #code #firstlook
🔗 Resources…
#ai #code #firstlook
🔗 Resources…
https://youtu.be/ks4MPfMq8aQ
На канале sentdex есть серия видео посвященная созданию бота для гта5 на opencv. И это один из лучших туториалов по теме(возможно даже лучший).
Не в последнюю очередь, благодаря такой эффектной презентации, все таки это может быть и упрощенная, но все же модель беспилотного автомобиля, в очень упрощенной, но все же крайне проработанной модели реального мира.
Вообще, гта5 идеальная песочница для подобных проектов, и если понять как они строятся, то все ограничится разве что фантазией разработчика.
Например, далеко ходить не будем, связанные так же с автомобилями:
-Разные системы помощи водителям:
-- определение и подсвечивание дорожных знаков, можно усложнить и добавить реакцию на них, например сброс скорости при знаке ограничивающим онную
-- система автономного экстренного торможения автомобиля(эта штука сейчас есть в куче серийных автомобилей, можно попробовать сделать упрощенную или наоборот более умную модель(например выполняющую объезд препятствия))
-- паркинг, благо в игре куча парковок на любой вкус и цвет
Это крутые, и в тоже время очень не сложные(проект из видео в разы сложнее описанных) в реализации проекты.
Как и другие туториалы с канала sentdex, этот имеет текстовую версию - https://pythonprogramming.net/game-frames-open-cv-python-plays-gta-v
Так же на самом канале куча других туториалов по питону, машинному обучению и прочим технологиям. На sentdex очень качественные туториалы, единственный минус которых, разве что отсутствие перевода.
P.S. важный момент, за такие эксперименты можно улететь в бан. Насколько я понимаю, Роки время от времени бьют банхаммером, и удары эти не то чтобы сильно разборчивы, так что даже если бот не делает ничего плохого, это не значит, что отлета в бан не будет.
Очевидно, не стоит пробовать такое в онлайне, можно еще сильней перестраховаться заиметь отдельный акк с игрой(например многие в свое время взяли ее в егс, на по сути пустые аккаунты, сильно жаль которые не будет).
Специально неделю назад потестил этого бота, запускал разные версии, чуть менял, собирал крупных размеров дату(раз пять точно), и вроде бы все норм, но для этого взял игру на новый акк, с основного так бы делать точно не стал.
#ии #youtube #python #opencv
На канале sentdex есть серия видео посвященная созданию бота для гта5 на opencv. И это один из лучших туториалов по теме(возможно даже лучший).
Не в последнюю очередь, благодаря такой эффектной презентации, все таки это может быть и упрощенная, но все же модель беспилотного автомобиля, в очень упрощенной, но все же крайне проработанной модели реального мира.
Вообще, гта5 идеальная песочница для подобных проектов, и если понять как они строятся, то все ограничится разве что фантазией разработчика.
Например, далеко ходить не будем, связанные так же с автомобилями:
-Разные системы помощи водителям:
-- определение и подсвечивание дорожных знаков, можно усложнить и добавить реакцию на них, например сброс скорости при знаке ограничивающим онную
-- система автономного экстренного торможения автомобиля(эта штука сейчас есть в куче серийных автомобилей, можно попробовать сделать упрощенную или наоборот более умную модель(например выполняющую объезд препятствия))
-- паркинг, благо в игре куча парковок на любой вкус и цвет
Это крутые, и в тоже время очень не сложные(проект из видео в разы сложнее описанных) в реализации проекты.
Как и другие туториалы с канала sentdex, этот имеет текстовую версию - https://pythonprogramming.net/game-frames-open-cv-python-plays-gta-v
Так же на самом канале куча других туториалов по питону, машинному обучению и прочим технологиям. На sentdex очень качественные туториалы, единственный минус которых, разве что отсутствие перевода.
P.S. важный момент, за такие эксперименты можно улететь в бан. Насколько я понимаю, Роки время от времени бьют банхаммером, и удары эти не то чтобы сильно разборчивы, так что даже если бот не делает ничего плохого, это не значит, что отлета в бан не будет.
Очевидно, не стоит пробовать такое в онлайне, можно еще сильней перестраховаться заиметь отдельный акк с игрой(например многие в свое время взяли ее в егс, на по сути пустые аккаунты, сильно жаль которые не будет).
Специально неделю назад потестил этого бота, запускал разные версии, чуть менял, собирал крупных размеров дату(раз пять точно), и вроде бы все норм, но для этого взял игру на новый акк, с основного так бы делать точно не стал.
#ии #youtube #python #opencv
YouTube
Intro and Screen reading - Python plays Grand Theft Auto V p.1
The purpose of this project is to use Python to play Grand Theft Auto 5. There are many things to do in GTA V, but our first goal will be to create a self-driving car, well scooter in this case.
The idea of using GTA V is that it is such a massive, open…
The idea of using GTA V is that it is such a massive, open…
В дополнение к предыдущему посту
https://youtu.be/KecMlLUuiE4 серия видео[англ.] с канала Learn Code By Gaming, в ней автор пишет игрового бота, так же с opencv, все очень простенько и подробно, и так же как у sentdex-а есть текстовые варианты.
Есть небольшой минус - код не очень pythonic style(автор явно не python разработчик), это не прям чтобы плохо, тем более в туториале, но этот момент все же надо учитывать.
P.S. как и предыдущем посте, напомню, за такие эксперименты(тем более в онлайне, где подобное делать ну совсем не стоит) можно улететь в бан. Впрочем, автор говорит об этом в начале видео.
#ии #python #youtube #opencv
https://youtu.be/KecMlLUuiE4 серия видео[англ.] с канала Learn Code By Gaming, в ней автор пишет игрового бота, так же с opencv, все очень простенько и подробно, и так же как у sentdex-а есть текстовые варианты.
Есть небольшой минус - код не очень pythonic style(автор явно не python разработчик), это не прям чтобы плохо, тем более в туториале, но этот момент все же надо учитывать.
P.S. как и предыдущем посте, напомню, за такие эксперименты(тем более в онлайне, где подобное делать ну совсем не стоит) можно улететь в бан. Впрочем, автор говорит об этом в начале видео.
#ии #python #youtube #opencv
YouTube
OpenCV Object Detection in Games Python Tutorial #1
Learn how to use OpenCV for object detection in video games. This intro tutorial will show you how to install OpenCV for Python and get started with simple image template matching. This will serve as our foundation as we explore many different computer vision…
Python и отсутствие претендентов
Буквально вчера общался со знакомым .NET-разработчиком, мне во всех красках было описано какой F# замечательный ЯП, почему он превосходит С#(основной инструмент .NET-разработчиков), и почему за ним, очевидно, будущее отрасли.
Разумеется все эти разговоры, что в будущем все предпочтут его C# - крайне спорная штука. Мы все прекрасно понимаем, что все упрется в задачи бизнеса, и если бизнесу будет выгоден такой переход, то он случится, аналогично и обратное(вот такая она суровая реальность).
Однако F#, действительно мощный претендент на место, в каком то смысле это переосмысление, возможно неоднозначное(все таки смена парадигмы), но при этом вполне конкурентоспособное. Он можно сказать дышит в спину C#.
Так вот, довольно интересно, то что буквально все “главные” ЯПы сейчас имеют таких “конкурентов”.
Еще раз скажу, это действительно конкуренты, не из разряда-так чуть красивше/чуть удобней, здесь речь именно о технической стороне вопроса, закрытии каких-то больших проблем(которые, например, рано легли в основу языка и находятся настолько глубоко, что исправить их просто не представляется возможным).
Java -> Kotlin
C++ -> Rust ежегодно на stackoverflow проходит опрос программистов, и именно этот ЯП лидирует как самый любимый у разработчиков(отрыв от второго места - солидные 20%)
С# -> F#
Js -> TypeScript и Dart
И только питон выделяется из всех, у него вроде как подобных ‘конкурентных’ аналогов нет. Есть много экспериментов на тему ‘так чуть красивше/чуть удобней’, но чего-то серьезного - нет. Справедливо сказать, что таким претендентом в свое время стал сам Python 3, потеснив Python 2, но во-первых, это случилось не вчера, во-вторых, этот пример все равно отличается от выше перечисленных.
Это не значит, что питон лучше/хуже других ЯПов(подобные оценки с инженерной точки зрения просто нелепы), но это значит, что путь развития питона крайне необычен. И судя по реакции сообщества, это движение в верную сторону. И как по мне, это весомый плюс языка, о котором редко говорят.
#python #мысли
Буквально вчера общался со знакомым .NET-разработчиком, мне во всех красках было описано какой F# замечательный ЯП, почему он превосходит С#(основной инструмент .NET-разработчиков), и почему за ним, очевидно, будущее отрасли.
Разумеется все эти разговоры, что в будущем все предпочтут его C# - крайне спорная штука. Мы все прекрасно понимаем, что все упрется в задачи бизнеса, и если бизнесу будет выгоден такой переход, то он случится, аналогично и обратное(вот такая она суровая реальность).
Однако F#, действительно мощный претендент на место, в каком то смысле это переосмысление, возможно неоднозначное(все таки смена парадигмы), но при этом вполне конкурентоспособное. Он можно сказать дышит в спину C#.
Так вот, довольно интересно, то что буквально все “главные” ЯПы сейчас имеют таких “конкурентов”.
Еще раз скажу, это действительно конкуренты, не из разряда-так чуть красивше/чуть удобней, здесь речь именно о технической стороне вопроса, закрытии каких-то больших проблем(которые, например, рано легли в основу языка и находятся настолько глубоко, что исправить их просто не представляется возможным).
Java -> Kotlin
C++ -> Rust ежегодно на stackoverflow проходит опрос программистов, и именно этот ЯП лидирует как самый любимый у разработчиков(отрыв от второго места - солидные 20%)
С# -> F#
Js -> TypeScript и Dart
И только питон выделяется из всех, у него вроде как подобных ‘конкурентных’ аналогов нет. Есть много экспериментов на тему ‘так чуть красивше/чуть удобней’, но чего-то серьезного - нет. Справедливо сказать, что таким претендентом в свое время стал сам Python 3, потеснив Python 2, но во-первых, это случилось не вчера, во-вторых, этот пример все равно отличается от выше перечисленных.
Это не значит, что питон лучше/хуже других ЯПов(подобные оценки с инженерной точки зрения просто нелепы), но это значит, что путь развития питона крайне необычен. И судя по реакции сообщества, это движение в верную сторону. И как по мне, это весомый плюс языка, о котором редко говорят.
#python #мысли
Stack Overflow
Stack Overflow Developer Survey 2020
Nearly 65,000 took this comprehensive, annual survey of people who code. Demographics. Most loved, dreaded and wanted technologies. Salary and careers.
Я там парочку постов написал для второго канала, однако мне кажется, они будут уместны и здесь.