Правила 3(трёх) «П» разработчика
Эти «правила» сформулировал мой отец, заслуженный учитель с более чем 30-летним стажем, и вот по прошествии многих лет я делюсь ими с вами. Правила универсальны, просты и подходят по-сути к любой сфере деятельности.
3 «Пэ»-компонента для успешной деятельности:
- правильно
- поcтоянно
- постепенно
Правильно
Правильно тут в смысле не только "верно", но и "эффективно". Правильно - это когда в результате выполнения определенных действий вы получаете запланированный результат. Эффективно - это наиболее оптимальный по затратам способ решения задачи, по отношению к другим способам.
Пример: eсть пропорция изготовления бетона М200 (1 часть цемента | 3 части песка | 6 частей щебня). Соблюдаем эти пропорции - получаем "правильный" бетон нужной марки. Но, мешать можно:
- руками, мастерком, лопатой, миксером, бетономешалкой;
- в корыте, ведре, ванне, в миксере.
Во всех случаях результат будет "правильный", но очевидно, что разный по эффективности. Разница будет заключаться в
- времени
- затраченных силах
- количестве потерь
Итог: в программировании, при изучении нового материала (разбор главы учебника, разбор legacy code или code-review), либо при выработке своего решения, следует обращать внимание не только на корректность кода/процесса, но и на элегантность, эффективность. В этом могут помочь такие практики как Clean Code, Clean Architecture, Code Optimizations.
Причем оптимизацию стоит разделить на 2 этапа:
- выработка "корректного решения", пусть и корявого, "в лоб", не очень эффективного
- после фиксации изменений стоит приступать к оптимизации. Оптимизировать можно по времени выполнения, либо по памяти.В оптимизации могут помочь знание типов данных (data structures) + особенности реализации в конкретном языке/библиотеке, алгоритмов (О-нотация и типовое применение), инструменты профилирования (для Python timeit, profile, cProfile, pstats)
Постоянно
Постоянное пребывание в контексте деятельности позволяет:
- закреплять нейронные связи, полученные в результате выработки нового решения/знания
- минимизировать затраты на восстановления этих связей
Доказано, что внезапный телефонный звонок на 1 мин выбивает разработчика на 15-30 мин, те это то время, которое потребуется чтобы восстановить прерванный контекст. А теперь представим, что у вас нет постоянной (систематической) целенаправленной деятельности - сколько времени вам потребуется чтобы изучить (разобрать, запомнить и воспроизвести) какой-либо материал, знание, процесс?
Причем, важно больше не количество времени, а именно постоянство --> график занятий. У каждого этот процесс индивидуален, но есть методики, позволяющие закреплять полученные знания и минимизировать прокрастинацию (Spaced repetition, Pomodoro, Memo Cards)
В идеале, нужно миксовать информацию теоретического плана и практического.
Пример: вы изучаете Python и хотите с помощью него написать веб-приложение. Для того, чтобы решить эту задачу, необходимо:
- знать основные конструкты ЯП (типы данных, синтаксис, архитектура)
- понимать область применения, процесс выполнения программ на Python
- понимать доменную область Backend (протоколы TCP/IP, HTTP, JSON, WebAPI, WSGI, SQL)
- понимать доменную область Frontend (Html/CSS/JS, шаблонизаторы, процесс рендеринга)
- если используется Framework - пониать по каким принципам он работает (паттерны MVC, ORM, иерархию классов и компонентов)
- умение декомпозировать сложные компоненты приложения
- умение параметризовать компоненты, принципы DRY, конфигурирование
- понимать, как запустить приложение, как его протестировать
- автоматизация и деплой
Очевидно, что если мы начнем упарываться в каждый из этих пунктов, то мы утонем в количестве информации. Мы уйдем максимально далеко от первоначальной задачи и скорее всего ее не завершим. Знания, полученные в таком случае скорее всего быстро забудутся, т.к. не будет практической составляющей.Вместо этого следует выделить 2-3 направления, которые стоит перемешивать и дополнять друг-другом. В зависимости от этапа реализации вы можете менять, перекрывать процессы --> практика будет подкреплять теорию и наоборот.
Начинаем реализовывать endpoint, по которому будет доступна наша страница. Узнаем, что url является частью HTTP протокола. Параллельно знакомимся, какие для этого компоненты предназначены в используемом фреймворке. Если не знаем, что такое модули/классы/функции - изучаем ровно столько, сколько требуется для первоначальной реализации. При этом хорошо еще иметь перед глазами пример кода/проекта, который можно копировать и модифицировать.
Постепенно
Этот принцип призывает вас не надрываться. Не нужно пытаться налить в стакан больше, чем в него помещается. Хорошего результата не выйдет - будет выгорание и просадка по другим направлениям. Лучше потихоньку наращивать нагрузку, чем один раз надорваться и забить окончательно.Не нужно быть слишком строгими к себе, особенно в начале. Не нужно сравнивать себя с другими - сравнивайте себя с собой и спокойно улучшайте личный результат. А он ОБЯЗАТЕЛЬНО будет, можете не сомневаться !
Запомните: нацеливаться нужно на долгосрочную перспективу. Процесс получения квалификации высокого уровня может занимать 5-10 лет, причем знания постоянно устаревают, а значит вам нужно учиться всю жизнь! Поэтому, важно не потерять запал и желание развиваться, а это возможно только при соблюдении **всех** правил!
Надеюсь, эта статья оказалась вам полезной ;)
Меньше багов — больше кода!