Разнообразие
И номера как на подбор
И номера как на подбор
Приветствую, этот пост без большого количества материалов, но как мне кажется, про очень выгодное сочетание действительно хороших.
Мой канал в телеге - https://t.me/tobeprog , там о самих методах обучения и обзоры на материалы.
Сегодняшний пост, о проблеме перехода новичков к большим/сложным проектам. Эта проблема не существует в вакууме, она неразрывно связана с тем, о чем я писал в постах Что не так с планами изучения программирования. Что значит программировать, и почему многие не понимают этот процесс и Научиться программировать (более того, тема этого поста скорее дополняет предыдущие, нежели является самостоятельной). Что бы пост не получился слишком большим, многие моменты, описанные в предыдущих, будут опущены.
Важно отметить, это не учебный план, хотя здесь и будут указаны этапы. Само сочетание, учебных материалов, может показаться странным. Хотя они, очень популярны, по отдельности, но я мало где видел, именно, их сочетание. Мы начинаем с простых/бытовых прикладных задач, проходим через cs и заканчиваем вводом в архитектуру.
На деле, все хорошо сочетается, дополняя и закрывая проблемы друг друга, получается такой "симбиоз". Ко всему почему, сами материалы рассчитаны, создавались с упором на новичков.
1. Автоматизация рутинных задач с помощью Python, Свейгарт | понимание ЯП как инструмента
В посте Python | Для изучающих программирование. Часть 1 я уже объяснял, почему это идеальное начало. Это все еще так, но здесь мы рассмотрим другую сторону.
Казалось бы, одни плюсы - много проектов, приобретается скилл дробить задачу на подзадачи, нахождение интересных решений, сами программы довольно впечатляющие, и главное - понимание ЯП как инструмента. Но, к сожалению, формула - начни с маленьких проектов, потом средненькие, потом большие, не работает. В какой то момент проблемой станет не величина, а именно глубина задачи. Можно придумать рутинный способ решать судоку, но дойти самому до идеи бэктрекинга(в данном случае - эффективный способ) практически невозможно. Грубо говоря, для чего то более сложного, нужно переходить на более глубокий уровень понимания.
Вторая проблема - python многое прощает, в плане написания плохого кода. Визуально, сильно перегруженный код, может быть вполне читаем. Другая крайность - ничем неограниченный сode golf(это развлечение, когда код пишут как можно короче), превращает его в не читаемый сгусток символов. Да, во всех книга по питону упоминается PEP8, какие то общие принципы рефакторинга, того что код пишется не просто в стол, а что бы дальше была возможность его расширять. Но загвоздка в том, что все это выросло из проблем, с которыми новичок, не сталкивается, а заучивать, вместо того чтобы понимать - не эффективный способ для изучения программирования.
Эти проблемы мы будем решать на следующем шаге, пока важно понять правило:'код должен быть читаем для других, и самое главное, он должен быть читаемым для автора'. Хорошее упражнение - просматривать и исправлять свой код недельной/месячной давности, особенно на начальных этапах(благодаря заходу с автоматизацией, нехватки кода явно не будет).
2. CS50 | Пишем меньше, смотрим глубже.
оригинал - https://www.youtube.com/user/cs50tv
перевод - https://www.youtube.com/watch?v=SW_UCzFO7X0
Проблему с более глубоким пониманием решает само направление курса - это computer science. Можно конечно, найти roadmap и самостоятельно идти по разным топикам, но, сделать это изучение интересным, по настоящему увлекательным, очень сложно. Каким то волшебным образом CS50 справляется, кажется это заслуга лектора, невозможно представить, что бы материал о "скучных" темах типа разных сортировок, сложности алгоритмов, систем счисления, устройства памяти и т.д. от кого то другого так хорошо заходил.
Следующая особенность, основной язык курса - си. Возникает вопрос - почему не тот же питон? Ответ - предпоследний абзац прошло этапа - python многое прощает. На си плохой код видно сразу, это не значит, что дальше мы забьем на питон. Просто основные концепции - рекурсия, отсутствие лишнего кода, циклы к месту, отсутствия ифэлсовских франкенштейнов и прочее будут рассмотрены в курсе и легко усвоены на си, ну а после, когда эти правила станут понятны, они сами лягут на любой язык.
Почему же, не стартануть с CS50 сразу? Питон через автоматизацию даст нам кучу проектов, набьет руку, и приучит к коду. Новые техники ложатся на отработанную основу. Ко всему прочему, сам курс пойдет куда легче, основы уже есть из питона, т.е. меньше распыления и сосредоточенность на конкретных проблемах.
Ну и дальше, куда проще двигаться, именно, с питоном. В этот момент, открывается огромное преимущество этого языка при изучении программирования. Он позволяет очень быстро писать сложные программы или их рабочие прототипы. У нас уже набита рука на автоматизации, понимание того как писать более менее чисто(и что важно, зачем это вообще нужно) и какие то основы cs. Самое время приступать к изучению проектов.
Не надо пытаться, с наскока, взять сложный код самому, благо, есть множество туториалов, статей и даже книг разбирающих сложные технологии с нуля.
К примеру, статья Питера Норвига, где он пишет интерпретатор языка Lisp на python:
Оригинал - http://norvig.com/lispy.html
Перевод - https://habr.com/ru/post/115206/
Я уже писал о репозитории с кучей подобных туториалов - Для изучающих программирование. Часть 0. Где найти идеи и реализации сложных проектов . Единственный минус, все на английском, переводы придется искать самостоятельно(название самого материала + habr), некоторые материалы не переведены.
Кроме следования туториалам, можно попробовать, несколько другой подход. Самостоятельно пытаться реализовать технологию. Т.е. грубо говоря, прочитать описание, какой то разбор, понять основную идею, а сам код написать самостоятельно. Это кажется сложным, это так. Но, учебный проект не должен обладать полной функциональностью, его задача - правильное взаимодействие, реализация самой концепции. Как пример в CS50 рассматривают архивацию, вроде даже реализуют. Сама идея довольно простая, если уметь читать файлы(в cs50 это разбирают), то это довольно просто. Вообще, идеальная картина обучения - читаешь о новой концепции, реализуешь простенький прототип.
3. Петцольд | Действительно сложные системы
Прошлый этап - практически бесконечен, погружаться в технологии и исследовать новые, можно годами. Но есть одна важная штука, я формально назвал ее третьим этапом, но к нему стоит приступить, примерно в середине изучения CS50.
Кажется, что разобрав сложный код по частям, ты его поймешь. Но есть одна деталь, собрать эти части, и грубо говоря, увидеть их взаимодействие, полный круг выполнения программы - очень сложно.
И это абсолютно нормально, голова не компьютер, чтобы умело подгружать в оперативку промежуточные данные, нить следования программы действительно легко потерять. Единственный способ - постепенно увеличивать сложность.
Но можно, ускорить и облегчить этот процесс(по крайней мере, в начале) - научится взаимодействовать со сложной системой вне кода.
"Код" Петцольда - ввод в архитектуру, замечательная книжка. Разбирается устройство компьютера, от подачи тока по проводкам и заканчивая высокоуровневыми языками программирования. Здесь, с легкостью ловиться эффект, когда ты понял одну часть, но уже забыл прошлую, и надо все заново, и все удерживать в голове и т.д. И это редчайший пример, когда система очень сложна, хотя ее элементы разобраны досконально и объяснены простым языком.
CS50 и "Код" Петцольда - идеальное сочетание. CS50 мало про архитектуру, а Код отлично ложится на ввод в computer science.
Листал Авито и наткнулся на очередное объявление о выбросе животного, в связи с появлением ребёнка. Когда уже люди усвоят то, что покупка животного это взвешенное решение. Человек заводит себе друга на 12-15 лет, а в редких случаях на все 20. Как же бесят такие индивиды. Накупят карманных собачек ради красивых фоток, а потом выбрасывают при появлении новой игрушки - ребёнка.
В подслушано моего города выложили данные фото.
Новый уровень борьбы с закладками.
Я, котенок, родился 3 месяца назад в подвале. Я, полосатый с белыми лапками. У меня есть братья и сестры, я самый мелкий, мы немножко дикие. Все было хорошо, но у меня заболели глаза (вирусный герпес), воспалились, и я ничего не вижу. А значит, я скоро умру от голода. Полтора месяца назад заболел мой брат, он тихо лежал под кустом и умирал от голода, а потом исчез. Его забрали в семью, вылечили. Неужели мне не найдется семья? Я так не хочу умирать. Живу в СПб, метро Черная речка, подвал. Точный адрес, любящим хозяевам.
Эта хвойная херня жила ещё миллионы лет до нас. И проживёт ещё миллионы после нас.
И насрать ей на глобальное потепление. Также ей насрать на выдвижение Путина или Трампа.
Как-то на моём любимом болоте прокладывали теплотрассу. Спилили сосны.
Афигеть, как я удивился. Сосны в диаметре сантиметров 30, а по годовым кольцам им больше 130 лет.
Мучались, бедняги, но росли.
Я тоже у себя на участке посадил сосну. Ща пойду, сфотографирую.
И осенью с удивлением обнаружил - под ней подзелёнки выросли.
Я не грибник, я споры не рассеивал под сосной.
Я к тому, что за миллионы лет эволюции.....
Сосна сама решает, как ей лучше.
Не я.
Справились? Тогда попробуйте пройти нашу новую игру на внимательность. Приз — награда в профиль на Пикабу: https://pikabu.ru/link/-oD8sjtmAi