Получи случайную криптовалюту за регистрацию!

СТАТЬ ПРОГРАММИСТОМ

Логотип телеграм канала @tobeprog — СТАТЬ ПРОГРАММИСТОМ С
Логотип телеграм канала @tobeprog — СТАТЬ ПРОГРАММИСТОМ
Адрес канала: @tobeprog
Категории: Технологии
Язык: Русский
Количество подписчиков: 2.06K
Описание канала:

Программирование. Задача канала - полностью разобрать путь становления разработчика, проведя по нему читателя наиболее эффективно.
Админ: @tokovsam
Реклама: @daniilrekl
Python, разработка, питон, бэкенд, фронтенд, computer science, JavaScript

Рейтинги и Отзывы

2.00

2 отзыва

Оценить канал tobeprog и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

0

3 звезд

1

2 звезд

0

1 звезд

1


Последние сообщения 6

2021-06-01 21:37:03 Математика
Лучше изучать математику под конкретную цель. Т.е. в тот момент, когда приходит понимание, что для дальнейшего изучения другой темы необходимо ее(математику) подтянуть.

Но, как бы это помягче сказать, может сложиться ситуация, когда и подтягивать то нечего, настолько с математикой дружба не склеилась. В таком случае, наверно стоит почитать что-то популярное, пускай не относящееся к дискретной математике(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 -

 
283 views18:37
Открыть/Комментировать
2021-06-01 21:35:25 Алгоритмы 

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

Грокаем алгоритмы, Адитья Бхаргава - хороший вариант для совсем начинающих.

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

Но если нужно именно на определенном ЯПе, то разумеется есть репозиторий с кучей алгоритмов и реализаций на разных ЯПах - https://github.com/TheAlgorithms/Python/blob/master/DIRECTORY.md 

Алгоритмы. Вводный курс, Томас Кормен - почему то все время забывают про эту книгу, и сразу отсылают к большой работе того же автора ‘Алгоритмы. Построение и анализ’, эта книга, куда легче и возможно, станет ступенькой к основному труду автора.

https://stepik.org/course/217 - Алгоритмы: теория и практика. Методы
https://stepik.org/course/1547 - Алгоритмы: теория и практика. Структуры данных
Два отличных курса от CSC, оба мультиязычные

Есть один курс на английском, который я не могу не упомянуть:


Introduction to Algorithms(MIT), он большой(это мягко сказано), но зато очень детальный, и объясняют все достаточно понятно, ко всему прочему этот курс только часть из серии Массачусетских курсов по алгоритмам, сразу за ним идет не менее приятный - Design and Analysis of Algorithms. 

Еще к этому можно добавить кучу отличных статей, кучу объяснений сложных моментов простым языком, всякие ресурсы с задачками и т.д. и т.п. В плане поиска уч.материалов - изучение алгоритмов не доставит проблем. Если сложновато, всегда найдется объяснение попроще, если не хватает челленджа, всегда найдется челлендж.
298 views18:35
Открыть/Комментировать
2021-06-01 21:32:57 Не знаю насколько вообще тема поста интересна, если хорошо зайдет, то сделаю еще 5, навскидку: сети, бд, графика и т.д.
298 views18:32
Открыть/Комментировать
2021-06-01 21:32:56 Подготовка к изучению 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(Алгоритмы, Математика, Архитектура, Операционные системы, Языки программирования и компиляторы).
359 views18:32
Открыть/Комментировать
2021-06-01 21:31:36 Приветствую, давно хотел написать пост об изучении Computer Science, рассмотреть пару тем. рассказать об интересных уч.материалах. К тому же здесь превалируют русскоязычные уч. материалы, что достаточно редкая история.
390 views18:31
Открыть/Комментировать
2021-05-25 21:44:36 Небольшой ресерч, и такой материал будет найден(не говоря уже о том, что он скорее всего будет в каждом списке рекомендуемой литературы). Как пример, при упоминании основ питона первым в голову приходит Лутц.

5. Не перепроходите уже понятое

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

6. Для материалов на английском не нужен уровень Disco Elysium

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

7. На этапе изучения бессмысленно читать проф.литературу


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

8. План всегда должен оставаться в контексте конечной задачи

Для чего изучается предмет, например, если для обретения профессии, то за пределы необходимых для работы требований, изучение выходить не должно. Связанно это с тем, что никое изучение даже близко не даст тот же опыт, что настоящая работа. Время, по сути, главный буст будущей карьеры, и тратить его просто так, не особо рационально.
790 views18:44
Открыть/Комментировать
2021-05-25 21:44:36 План изучения программирования | дополнение к части 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. в программировании популярность учебного материала - верный знак качества. А из-за ‘полноты’, такой учебный материала как раз и будут хвалить делая упор на эту самую ‘полноту’.
761 viewsedited  18:44
Открыть/Комментировать
2021-05-21 21:20:27 То есть он хуже/лучше {вставить любой ЯП}?

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

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

Если бы был один универсально прекрасный ЯП, в коммерческой разработке использовали бы только его. Это логично и с точки зрения самого программиста, и с точки зрения бизнеса(в этом вопросе, его точка зрения куда весомей).
668 views18:20
Открыть/Комментировать
2021-05-21 21:20:27 На @tokovIT вышло несколько постов в формате вопрос/ответ, наверно это превратится в еженедельную рубрику. А пока взял несколько самых популярных вопросов:

Почему python лучший вариант первого ЯПа?
Я слышал, что питон очень простой, это так?
То есть он хуже/лучше {вставить любой ЯП}?
А что, если в середине изучения, я пойму что мне интересен другой ЯП?
А что, если в середине изучения, я пойму, что программирование это не моё?

Как пример, репостну один сюда.
675 views18:20
Открыть/Комментировать
2021-05-14 17:32:03 Missing Semester
Оригинал - https://missing.csail.mit.edu

[Перевод, на данный момент переведено 2 из 11 частей]Пропущенный семестр курса по компьютерным наукам - https://missing-semester-rus.github.io

Очень правильный формат, есть лекции(youtube) и сразу же конспекты, удобно. 

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

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

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

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

Так вот, в этом курсе научат этими самыми инструментами пользоваться. Кроме того, что их использование довольно эффектно, оно еще и очень эффективно.
799 views14:32
Открыть/Комментировать