Всем доброго времени уток!
В прошлом посте Женщина-программист? я рассказала о желании сменить белую рубашку типичного офисного работника на удобные шмотки программиста.
Напомню вводные: женщина, 35 лет. Всю жизнь работаю с людьми, прилично знаю 1с,
но в общем ничего сверхъестественного. Ворваться в айти решила спонтанно, сперва через тестирование. Не зашло. Потом здесь на Пикабу увидела набор на курс по укрощению Питона. Прошла отбор, уже третий месяц учусь.
В этом посте хочу дать больше конкретики, что изучаю, на что оно вообще похоже и какие
есть сложности. Потому что для меня программирование раньше выглядело так:
Итак, что я прошла на данный момент. Из первой темы уяснила самые азы - базовый синтаксис языка, переменные, работа с операторами, форматирование строк, циклы и исключения. Что было самым сложным - как раз последняя парочка. До меня долго не доходило, как правильно обозначить условие для остановки цикла. И я по-прежнему пользуюсь переводом с машинного на человеческий язык. Например, вот эта конструкция:
- у меня в голове монотонным голосом бубнится как "Пока переменная k меньше либо равно 311, делай это: если остаток от деления k на два равен 0, то печатай это и прибавь к k единицу..." и т.п. Это как чтение со словарем - медленно, вдумчиво. В будущем, надеюсь, буду читать бегло.
С исключениями тоже не всегда было понятно. Исключения, по простому - это защита от дурака. Например, вы просите пользователя указать свой год рождения в формате "4 арабские цифры". А он, негодяй, пишет вам все что угодно - и прописью, и римскими цифрами, или вообще ставит пробел. В общем, все не то! На этот случай, чтобы программа не ушла в крутое пике, нужно прописать исключения - все варианты, которые юзер может ввести от глупости или от скуки. Было сложно понять, когда эти исключения надо "ловить" в цикле, а когда - в основном теле программы. Все эти нюансы очень влияют на гибкость, понятность и в целом на чистоту кода.
Чистота кода - это в том числе про это:
Честно, я поначалу бесилась, когда наш проверяющий придирался к таким мелочам как лишний пробел в строке или имя переменной. Скрипела зубами - мы же не уроке английского! И это при том, что у меня инглиш на среднем уровне есть. Общее правило - имена переменных должны быть "говорящими". То есть a и b - это плохо. А name и surname - хорошо. Плюс учитываем контекст. Конечно, если вы пишете код для себя или в стол, можно забить. Но нас учат сразу писать чисто, с прицелом на будущих заказчиков или коллег.
Ну, чтобы вот так было:
Еще училась наводить порядок не только в коде, но и в голове. Честно, я не знаю, как тру-программисты пишут, но я стала понимать важность предподготовки. То есть - перед тем как выполнять большую практику, ты должен сделать 3 вещи:
- общий анализ задачи (мы хотим в итоге стул или стол?)
- общий план (для стула пойдет береза или лучше взять дуб? какая высота, ширина?)
- детальный план, он же алгоритм (чертим проект стула со всеми нюансами, вплоть до оттенка
краски)
Вот тут я тоже сделала открытие. Всегда думала, что люблю работать с документами, писать сопроводительные записки и проч. Но алгоритм - это не сочинение) Пришлось перестраивать мышление от "Да по ходу разберемся, главное начать" до "Так, у нас стоит такая-то задача, ее нужно разбить на несколько подзадач, применить вот этот метод..." Можно использовать блок-схемы, но мне удобнее текстовый формат.
Блок-схемы - для перфекционистов, можно все выверить по линеечке и даже по CMYK!
Красивое...
Второй блок меня порадовал новой большой темой - функции. На них здорово так застопорилась. В теории все понятно. Но на практике... Какое значение куда возвращается? Как его передать в другую функцию? Настоящая магия! Поэтому хоть учусь упрощать сложное и решать большую задачу через мелкие - все равно пока часто обращаюсь к методу научного тыка. Великий метод))
Особняком тут еще стоит рекурсия - да-да, вот эти шутки из серии:
Я честно говоря не поняла, к чему можно привлечь рекурсию в плане решения практических задач, но тема просто крышесносная :) Посмотрите хотя бы пример с факториалом. Рекомендую!
Еще расскажу про забавное совпадение. Писала большой код, суть программы такая - задаем команду, параметры и получаем на выходе рисунок из символов. Рисунков на выбор несколько, один из них ромб. Я долго пыхтела над уравнением для ромба, как сделать его симметричным, правильным и т.д. И тут на Пикабу случайно вижу это:
Для моего кода это решение не годилось, но это же мой любимый феномен Баадера — Майнхоф в действии. Приятная мелочь.
В теме с функциями изучала некоторые методы для строк. Очень интересное наблюдение, что все эти методы типа .lower, .replace, .strip не изменяют исходную строку, а вызывают ее копию с изменениями. Очень идет в разрез например с работой в Word. Там жмякнул - "Найти и заменить", и все, документ уже изменился фактически. А здесь создаются параллельные миры со своими жизнями. Как в известном фильме:
Кто не видел - очень советую фильм "Осторожно, двери закрываются", 1998 г.
В прошлом посте я отдельно поднимала тему мотивации. Как ее решаю? Да никак, просто занимаюсь по графику, и все. Фиксирую свои успехи, это хорошо подстегивает. А бывает, что наоборот не могу вникнуть в тему, или конкретная задача не поддается. Открываешь решение - мамочки, да как до этого можно было додуматься... Чувствуешь себя тупицей, потом перечитываешь материал, гуглишь, через пару дней возвращаешься к этому же месту - вроде понятнее стало, хотя бы местами, хорошо. Еще через пару дней пробуешь решить снова, и теперь получается.
И как ни странно, в последние недели программирование для меня стало хорошей
отдушиной. Потому что без конца листать новостную ленту уже сил нет.
Расскажете о вашем опыте программирования, новички и матёрые?
Про себя буду держать в курсе. Всем удачи и веры в себя!