Я кодирую дольше, чем могу признаться. Я в основном «самоучка», но в конце концов я прошел несколько курсов программирования в колледже, которые, как мне кажется, не сильно повлияли на мои общие знания и опыт в программировании. Вы можете научиться программированию, только создавая реальные вещи, не являющиеся примерами. В этой статье я делюсь своей весьма самоуверенной коллекцией советов, советов и вещей, которые, как я считаю, вам следует и не следует делать. Мнения - вот ключевое слово, многие профессиональные программисты не согласны с некоторыми пунктами, которые я собираюсь здесь сделать.

В наши дни я в основном кодирую на JavaScript, поэтому некоторые моменты здесь могут быть немного предвзятыми для языка. Отнеситесь ко всему этому с недоверием.

1. Эффективно используйте клавиатуру

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

На самом деле я научился слепой печати по необходимости. Мне приходилось печатать на клавиатуре без надписей, и я был слишком беден, чтобы покупать другую. Долгое время я печатал 4–6 пальцами на Qwerty и на самом деле делал более 90 слов в минуту, но мне не нравилось, что я не использую все 10 пальцев. Друг посоветовал мне попробовать Дворжака, и я попробовал. Переключиться на Дворжака было непросто, но заставить себя заново учиться печатать всеми 10 пальцами - возможно, лучшее решение, которое я когда-либо принимал как кодировщик.

Узнайте о автозавершении табуляции и используйте его всеми возможными способами. Вкладка должна быть самой используемой клавишей на клавиатуре. Завершение по табуляции - это не только скорость набора текста, но, что еще более важно, чтобы избежать ошибок и знать, что вы можете сделать. Современные программы фактически поставляются с автозавершением табуляции из коробки (например, протестируйте это в режиме REPL узла!). Некоторые программы - например, git - требуют добавления скрипта для включения автозавершения табуляции, и это того стоит.

По возможности постарайтесь отказаться от мыши. Вы действительно можете делать все с помощью клавиатуры (даже просмотр и приложения вроде Gmail). Это особенно верно, если вы набираете вслепую всеми 10 пальцами, потому что каждый раз, когда вы используете мышь, вы уходите от основного ряда, и вам нужно восстановить свое положение, когда вы вернетесь. Я использую мышь в основном, когда не печатаю активно.

2 - Используйте свой редактор эффективно

Изучите редактор терминала и не оправдывайтесь. Здесь не так много вариантов, это либо Vim, либо Emacs. Даже если вы не собираетесь использовать редактор терминала ежедневно, вам нужно привыкнуть к хорошему, когда единственный выход - использовать ssh где-нибудь для внесения изменений. Связанный; изучите tmux или screen и всегда запускайте редактор терминала в сеансе tmux / screen. Вы можете выйти из терминала и перезапустить его в той же точке, в которой вы его оставили, с той же историей, открытыми буферами и точным состоянием выполненных вами команд.

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

Будьте совместимы с вашим отступом. Линтинг может вам в этом помочь. Если у вас нет твердого мнения по этому поводу, избегайте использования символа табуляции и используйте вместо него 2 (или 4) пробела. Пробел всегда представляет собой один столбец, в то время как на вкладке используется разное количество столбцов в разных средах, и это создает проблему при перемещении кода между средами. Однако, независимо от того, какой у вас выбор табуляции / пробелов, просто будьте последовательны в этом и, пожалуйста, пожалуйста никогда не смешивайте табуляции и пробелы. Показывайте пробелы в редакторе и всегда исправляйте любой вставленный код, чтобы он соответствовал вашему стилю отступа.

3. Знайте, что ваш язык программирования может и чего нельзя.

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

Изучите синтаксис, используемый в документации для передачи таких вещей, как типы, обязательные / необязательные, порядок вещей, псевдонимы, зависимости и т. Д. Поймите и используйте команду man, чтобы узнать свои параметры и даже просто проверить, что вы собираемся делать.

Узнайте об императивном и декларативном стилях программирования. Попробуйте преобразовать код, написанный одним способом, в другой. Если вы используете JavaScript, изучите возможности языка функционального программирования (вот хорошая книга об этом).

Поймите разницу между вызовом функции и ссылкой на функцию, передачей по значению и передачей по ссылке, а также любыми странными вещами, которые делает JavaScript.

4. Научитесь любить отладку

Как и маленькие дети, код общается через неправильное поведение. Измените свое отношение к ошибкам и проблемам, всегда приятно сталкиваться с ними, потому что вы, вероятно, узнаете что-то новое, и легко добиться прогресса прямо сейчас. Но не просто решайте проблему, а поймите, почему это произошло. Трассировка стека - ваш лучший друг.

Получите комфортное чтение и отладку чужого кода, который вы видите впервые. Используйте интерактивную отладку, когда можете (точки останова, шаг,…), но не недооценивайте значение отладки печати. В некоторых случаях отладка печати намного эффективнее интерактивной отладки.

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

Удобно гуглить. Если вы пишете код и ваш браузер не часто открывает google.com, вы, вероятно, делаете это неправильно. Поиск - это не только решение проблем, я чаще использую поиск, чтобы узнать, что я планирую делать дальше. Вы можете копировать вещи из Интернета и использовать их в своем коде, если вы их понимаете. Никогда не используйте строку кода, которую вы не полностью понимаете (только потому, что кто-то в Интернете сказал вам, что она будет работать, или даже потому, что она работала для вас раньше).

5. Измеряйте и будьте организованными

Узнайте, как проводить измерения до и после внесения изменений. Это более важно, когда вы вносите изменения в оптимизацию. В таком случае, если вы не можете измерить эффект от изменения, вероятно, этого не стоит делать.

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

Максимально сократите цикл обратной связи в процессе разработки (смотрите это). Автоматизируйте команды разработки, которые вы часто выполняете, и тестируйте свои изменения как можно ближе к области предварительного просмотра.

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

6: Никогда. Стоп. Обучение.

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

Не привязывайтесь слишком к языку или фреймворку. Лучшее всегда еще не изобретается. Однако перестаньте «изучать» новые языки и вместо этого «используйте» их для создания вещей.

Узнайте все, что вы можете, о всех возможных структурах данных (Set, Stack, Queue, Map, List, Tree, Heap, Graph, ...) и их вариантах. Узнайте, в чем они хороши, а в чем плохи (по крайней мере, с точки зрения работы CRUD). Узнайте, как реализовать и работать с этими структурами данных на вашем языке. Это намного важнее, чем запоминание алгоритмов.

Изучите способы автоматизации Bash, Cron и Linux. Выучите регулярные выражения, хотя, возможно, не используйте их в рабочей среде, пока вы не освоитесь с ними.

Испытай себя. Попытайтесь заново выучить то, что вы не смогли понять ранее. Долгое время я не мог изучить Vim и ненавидел его, но после нескольких лет борьбы это было лучшее, от чего я не отказывался. Трудно научиться хорошему.

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

7: Сначала проверьте. Часто тестируйте.

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

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

Разделите большую функцию на маленькие приращения с тестируемыми результатами, сосредотачиваясь на одном приращении за раз. Определите результат, затем выполните приращение. Если вы пишете более 10 строк кода, не тестируя их каким-либо образом, вы, вероятно, делаете это неправильно.

8. Оптимизируйте свое время

Не выполняйте несколько задач одновременно. Мы не настроены на это. Оптимизируйте блокирующие элементы в своем процессе, которые побуждают вас выполнять несколько задач одновременно, например, ожидание сборки или тестового запуска. Если вы не можете сделать их короче, найдите для них менеджера. Точно так же, как Node.js управляет блокировкой ввода-вывода в потоках для вас, найдите что-нибудь, чтобы автоматизировать блокировку в процессе разработки и уведомлять вас только тогда, когда вам нужно принять меры.

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

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

Прекратите пытаться оценивать время, потому что вы просто не можете этого сделать. Когда кто-то просит вас оценить время, единственно правильная оценка: Когда это будет сделано.

9. Подумайте и подтвердите

Задолго до того, как вы начнете печатать, подумайте, больше читайте, чем пишите. Есть причина, по которой Vim запускается в режиме «чтения» и имеет отличные навигационные функции. Когда вы думаете, что пришли к выводу, что нужно внести изменение, изучите код на предмет потенциальных проблем, прежде чем внедрять это изменение. Моя самая используемая команда git - это git grep.

Решите одну проблему несколькими способами, а затем выберите одно решение. Вы можете подумать, что это пустая трата времени, но это не так. Он проверяет правильные решения и улучшает ваши мыслительные способности.

Практикуйте логическое мышление и анализ, играйте в головоломки и стратегии, когда можете. Ваши аналитические навыки намного важнее ваших синтаксических навыков. Все время вкладывайте в их улучшение.

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

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

10: Написать читаемый код

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

Используйте именованные аргументы в функциях и не полагайтесь на позиции аргументов. Не используйте слишком много операторов if / switch и старайтесь использовать простой поиск объектов, когда это возможно. ЕСЛИ вам нужно использовать операторы if / switch, избегайте их вложенности.

Сделайте так, чтобы в вашем редакторе отображалась вертикальная линия из 80 символов и не пересекала ее. Это не старая школьная практика только потому, что ваш монитор стал больше. Длинные строки затрудняют чтение. Есть причина, по которой максимальная ширина статьи Medium на большом экране составляет 80 символов.

Наконец, старайтесь везде следовать эмпирическому правилу 10-max. Не более 10 строк на функцию, 10 функций на файл, 10 файлов на папку, 10 элементов в списке.

Спасибо за прочтение.