April 30, 2019

14 советов, с которыми ты начнёшь мыслить как программист

Изменить свой образ мышления – не самая простая задача. Эти 14 крутых советов помогут тебе начать мыслить как программист.

1. Помни о целях своего приложения

На любых стадиях разработки помни о цели приложения, которая заключается в помощи людям.

Цель приложения – это не хвастовство своими знаниями.

Разработчик, не понимающий целей, напишет плохое приложение. Плохое приложение – это сложная система, которая не помогает людям в полной мере.

Принимай решения о приложении с вопросом: как мы можем помочь? Этим же вопросом легко расставлять приоритеты.

2. Выбирай технологии правильно

Не опирайся на внешние технологии или уменьшай зависимость от них.

Зависимости порождают сложности. Они могут поставить под угрозу разработку и сделать проект сложнее. Большой баг в зависимости заставит тебя ждать пока разработчики его не пофиксят. С такой зависимостью, которая является центральной частью проекта, ты не сможешь двигаться дальше. Вот почему так важно выбирать правильные технологии для своего проекта.

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

  • Технология находится в активной разработке?
  • Поддерживается разработчиками?
  • Сложно ли отказаться от неё?
  • Что говорит сообщество?

Найдёшь правильные ответы – снизишь риск выбора неподходящей технологии.

3. Не изобретай… сам знаешь что

Услышав советы вроде «Давай сделаем собственный сборщик мусора вместо встроенного по умолчанию?!», знай, что это трата времени впустую. Вместо этого займись непосредственно программой.

Вот единственные причины, оправдывающие «изобретение велосипеда»:

  • Тебе нужно что-то, чего ещё не существует.
  • Все существующие «велосипеды» плохи, и не покрывают твои нужды.
  • Существующие «велосипеды» не поддерживаются разработчиками.

Простое правило:

Не изобретай велосипед.

4. Будь последовательным

Последовательность упрощает проект. Придерживайся одного способа реализации во всех местах. Назвал переменную thisIsVariable? Тогда называй таким образом все переменные (otherVariableanAnotherVariable, и не other_variable).

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

Этот практический совет помогает мыслить как программист – упорядочено.

5. Автоматизируй

Не трать своё время на рутину. Настрой и забудь. Повторяющиеся задачи могут выполняться в фоне, пока ты спишь. Когда понимаешь, что делаешь что-то снова и снова, вспомни правило:

Автоматизируй то, что можешь.

Читай книгу «Автоматизация рутинных задач с помощью Python». С ней ты заставишь компьютер выполнять за тебя поиск определённого текста в файлах, обновление и форматирование данных в электронных таблицах и прочие рутинные задачи.

6. Контролируй сложность

«Управление сложностью – это сущность компьютерного программирования» – Брайан Керниган.

Сложность – источник неудач программного обеспечения. Давай представим: ты начинаешь с простого проекта, который можно закончить за месяц. Затем добавляешь сложности и получаешь три месяца разработки. С добавлением новых фич система становится сложнее – шесть месяцев.

Это ещё не конец.

С улучшением каждой отдельной фичи система усложняется дальше. Получаем девять месяцев. Из-за сложности кода тебя приветствуют новые баги. Ты начинаешь их фиксить, не думая о том, как это отразиться на других частях. Малейшие изменения становятся затруднительными. Когда исправление багов рождает новые баги, ты приходишь к самому страшному сну разработчиков:

Переписывание кода с нуля.

Неважно, как ты попал в этот кошмар. Главное – как его предотвратить?

Всё просто. Первое, что нужно знать – это цель и определение своего приложения. Второе: будь проще во всех местах своего кода. Третье: оценивай изменения и новые фичи, исходя из цели приложения.

Сопротивление – нормальная реакция разработчика на требования внести (необязательные) изменения. Защищай свой код и требуй убедить тебя в необходимости изменений прежде, чем вносить их.

И это не единственные причины роста сложности. Скажем проще:

Контролируй сложность, не создавай.

7. Умей просить о помощи

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

Не можешь ничего придумать? Ищи! Проверь найденные ответы и адаптируй под свой код. Пойми, почему они работают.

А главное, ищи совета.

Возможно, ты перепробовал всё и не нашёл работоспособное решение. Время искать советы сеньоров. Предоставь свой код на ревью и читай 8 простых советов, как задавать правильные вопросы.

8. Довольствуйся просто хорошим

«Совершенное – враг хорошего» – Вольтер.

Разработчики часто планируют всё до мелочей на старте проекта или новой фичи. Когда хочется сделать первую версию идеальной, теряется внимание к проблеме, которую решает приложение, обдумывается каждая возможная деталь. Так можно приступить к реализации версии, идеализированной в своём воображении. Никто не задумывается о том, что их ждёт и во что обойдётся совершенство.

Напоминаем тебе:

  • Ты будешь писать ненужный код
  • Ты усложнишь систему необязательным кодом
  • У тебя не будет дедлайнов
  • Ты будешь встречать баги из-за сложности

Не очень заманчиво? Тогда разберёмся, что делать.

Начинай с малого, улучшай, расширяй.

Итеративная разработка – это твой гайд. Рассмотрим на примере с калькулятором:

  1. Запланируй систему, которая не умеет ничего, кроме сложения.
  2. Реализуй.
  3. Улучшай существующий дизайн системы для добавления других операций.
  4. Добавь вычитание и повтори шаги 2 и 3.
  5. Добавляй умножение и повтори шаги 2 и 3.
  6. Добавь деление и повтори шаги 2 и 3.

9. Практикуйся

Хочешь мыслить как программист? Начни менять себя и своё окружение. Изменение мышления – это сложная задача, которая затрагивает процессы в мозге. Для этого мало читать: нужно действовать и выходить из зоны комфорта. Наше мышление не перестраивается в режиме покоя. Для этого ему нужны обстоятельства, условия и даже стресс.

Начни со своего круга общения. Люди, связанные с разработкой, помогут увлечь твоё сознание. Можно сказать, что сообщество программистов «делает» программистов.

Меняй своё цифровое пространство: онлайн-сообщества, в которых ты состоишь, источники информации и привычки. Посвящай больше времени практике и изучению непонятных концепций.

10. Тестируй

Добавляй логирование и обработку ошибок на ранних этапах. Это облегчит поиск проблем и сэкономит время.

В тестах тоже допускают ошибки. Давай рассмотрим пример с простым условием if-else. Разработчики подают входные данные в блок if, затем тестируют и коммитят. Сделано! А что насчёт блока else? Когда код дошёл до продакшена, это вызвало много проблем. Запускай все новые строки и тестируй частями прежде, чем перейти ко всему коду.

Видишь баг – воспроизведи его. Не нужно строить догадки о причине бага и фиксить исходя из своих предположений. Увидишь причину бага – не ошибёшься.

Будь надёжным. Когда другие разработчики видят твой коммит, они должны быть уверены, что твой код протестирован и работает.

Не тестированный код = неработающий код.

11. Документируй, комментируй

Неправильное представление о комментариях в коде приводит к тому, что разработчик начинает объяснять в них то, что делает код. Работа кода должна быть очевидна при чтении. Не очевидна? Значит, код или фрагмент нечитаемы и должны быть упрощены.

Не можешь упростить? Тогда объясняй эту сложность в комментариях.

Не пиши комменты о том, что делает код, объясняй для чего он это делает.

Ещё одна важная вещь – документирование. Важно иметь документацию, которая объясняет архитектуру твоего приложения, каждый модуль и компонент. Это необходимо для высокоуровневого видения программы.

Мыслить как программист – это также уметь объяснять.

12. Поддерживай код

Быстрый код и запуск выглядят важнее поддержки и обслуживания кода. И это ошибка, которая сказывается в будущем.

Реализация будет меняться всегда. Мало вносить изменения, их нужно поддерживать со временем.

Все изменения требуют обслуживания

Сложность – это фактор, влияющий на поддержку кода. Лёгкость поддержки любой части программы пропорциональна простоте отдельных частей.

Важнее снизить сложность поддержки, чем сложность реализации.

Ответственность за свой код научит тебя мыслить как программист.

13. Изучай математику чтобы мыслить как программист

Математика нужна программисту не меньше, чем кассиру.

Без иронии – разработчик должен превосходить относительно средний уровень знания математики в технических профессиях. И это не просто требования рынка труда. Информатика, как наука и языки программирования разных уровней, имеет под собой твёрдую математическую базу. Поэтому знание математики вытекает в вопрос статуса и компетентности.

Высшей и дискретной математикой прививают определённый образ мышления в хороших учебных заведениях.

Полезные книги:

14. Найди свой подход

Как выбрать поле для изучения из всего объёма информации? Тебе нужно выбрать то, в чём ты будешь чувствовать себя комфортно. Не забывай про реалии и следи за спросом на рынке.

Хочешь пойти традиционным путём? Изучай объектно-ориентированное программирование и меняй своё мышление книгой Объектно-ориентированное мышление.

Хочешь двигаться дальше к лямбда-исчислениям, чистым функциям и неизменяемым типам? Изучай функциональное программирование, всё больше набирающее популярность.

Источник