Правила 3(трёх) «П» разработчика

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

Правила 3(трёх) «П» разработчика

3 «Пэ»-компонента для успешной деятельности:

  • правильно
  • поcтоянно
  • постепенно

Правильно

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

Пример: eсть пропорция изготовления бетона М200 (1 часть цемента | 3 части песка | 6 частей щебня). Соблюдаем эти пропорции - получаем "правильный" бетон нужной марки. Но, мешать можно:

  1. руками, мастерком, лопатой, миксером, бетономешалкой;
  2. в корыте, ведре, ванне, в миксере.

Во всех случаях результат будет "правильный", но очевидно, что разный по эффективности. Разница будет заключаться в

  • времени
  • затраченных силах
  • количестве потерь

Итог: в программировании, при изучении нового материала (разбор главы учебника, разбор 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 лет, причем знания постоянно устаревают, а значит вам нужно учиться всю жизнь! Поэтому, важно не потерять запал и желание развиваться, а это возможно только при соблюдении **всех** правил!

Надеюсь, эта статья оказалась вам полезной ;)

Меньше багов — больше кода!

3030
8 комментариев

прокрастинация
побыстрому
потом

19
Ответить

Я использую час времени на задачу. Полное погружение, с отключением телефона, телеги, почты. Потом беру перерыв в 5-10 мин и опять на час.

4
Ответить

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

1
Ответить

Предлагаю свой вариант принципа 3П: Похуй, в Пизду и Поебать.

2
Ответить

нормально делай, нормально будет

1
Ответить

Ааа в наше время все было по другому - ЕНЧП + ЕНКП.. хотя , мне кажется большинство и сейчас работают по этим двум принципам

Ответить