Авторы:

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

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

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

1. Быстрые победы, чтобы программировать как профессионал

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

Синтаксические ошибки

Программные мемы заставили бы вас поверить, что пропущенные точки с запятой — проклятие программистов во всем мире. Они не. Большинство языков имеют по крайней мере одну IDE (интегрированную среду разработки, то есть программное обеспечение для программирования), которая упрощает поиск этих ошибок с помощью автозаполнения и выделения. Идти без было бы все равно, что писать эссе без проверки орфографии.

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

Вот тот же код в IDE VS Code с плагином Python (полное раскрытие: VS Code публикуется постоянным работодателем Джесс, Microsoft. Доступны и другие IDE).

Он не только подчеркнул ошибку (на самом деле я ожидал, что будет подчеркнуто «приложение», а не «салат», но ошибку все еще можно найти), IDE даже предложила, какой может быть правильная функция (с помощью pylint , который мне пришлось ввести в поисковик сообщение об ошибке, чтобы напомнить себе, как его установить).

Если ваше программное обеспечение не дает такой полезной обратной связи при вводе текста, выполните поиск «лучшая IDE для ‹языка›» и посмотрите, сможете ли вы найти ту, которая делает это. И настройте цвета на свое усмотрение.

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

Терминология, жаргон и жаргон

"Мне всегда было интересно, что такое "foo" и "bar", но я боялся спросить..."

Foo и bar (и их двоюродные братья baz, qux и т. д.) образуют странную часть полусознательного контроля над входом. Люди, знакомые с ними, могут даже не заметить их, но новые программисты часто находят их запутанными или отталкивающими (если это вы, пробовали ли вы искать «что означают foo и bar»?).

Foo и bar — это заполнители, такие как Joe Bloggs, ACME Corp или Lorem Ipsum. Все, что они имеют в виду, это ваш код идет сюда. Вот список некоторых других, с которыми вы можете столкнуться.

А как насчет слов, которые действительно что-то значат? Строка, число с плавающей запятой, аргумент, исключение NullPointerException… Изучение терминологии и концепций, лежащих в ее основе, является частью обучения программированию. Если вы встретите термин, в котором не уверены, — поищите его. Если это общепринятая концепция или часть популярного языка, вы сможете найти десятки статей с пояснениями.

Вы можете обнаружить, что ваше таинственное слово — это верхушка айсберга знаний. Вы можете поискать «что такое float в программировании?» и прочитал, что float — это тип данных, представляющий число с десятичной точкой. Но что такое тип? Почему числа с десятичной точкой ведут себя не так, как без нее? Возможно, вам понравится забираться в эти кроличьи норы как можно дальше, или вам придется использовать свои навыки для определения того, сколько понимания на самом деле необходимо для решения вашей проблемы (и сколько вы вернетесь, чтобы узнать позже, когда это не поможет). вполне рабочий…).

И, конечно же, если вы получили загадочное сообщение об ошибке, удалите части сообщения, относящиеся конкретно к вашему коду, и найдите остальные. Это то, что делают профессионалы, поверьте мне. Большая часть профессионального программирования заключается в знании того, как эффективно использовать поисковую систему для поиска ответов на ваши вопросы. Гуглить — это навык, которому можно научиться!

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

Новое изобретение колеса

Изобретать колесо заново — это идиома, означающая создание чего-то, что уже было построено ранее. Если ваша задача обычная, то, скорее всего, уже существует библиотека, которая сделает всю тяжелую работу за вас. Языки часто имеют списки пакетов или концентраторы, такие как PyPI для Python или npm для Javascript, где вы можете найти библиотеки для самых разных целей.

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

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

Контроль версий

Если вы обнаружите, что у вас возникают такие мысли, как

  • «Где мой код?»
  • «Хотел бы я вернуться к тому времени, когда мой код работал?»
  • «Почему я написал эту строчку?»
  • «Это был program.final.py или program.final.final.py?»
  • «Как мне отправить вам мой код?»

Изучите Git. Пожалуйста, просто изучите Git (доступны и другие системы контроля версий, но Git, безусловно, самая популярная).

Комментарии

Как знает любой, кто участвовал в обзоре кода вместе со мной (Джесс), я всегда ошибаюсь в сторону слишком большого количества комментариев, а не слишком малого. Все, что нельзя понять, взглянув на код, заслуживает комментариев, и они особенно ценны для объяснения, почему код делает то, что он делает. Например (в Java):

// add 1 to x
x += 1

Не очень полезно. Но

// add 1 to x because the API counts from 1, whereas we’ve been counting from 0
x += 1

Является гораздо более ярким.

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

Тесты

Если вы хотите облегчить жизнь себе (и другим людям) в будущем, написание тестов для вашего кода может очень помочь. Тесты состоят из кода, который вызывает написанные вами функции и проверяет, что результат соответствует вашим ожиданиям. Как проводить тестирование — это обширная тема, которая вызывает много споров. Не всем доставляет удовольствие написание тестов, но это очень поможет в исправлении мелких (или даже крупных) ошибок, которые могут быть в вашей программе. Это также позволяет вам вносить изменения во внутреннюю часть работы функции, зная, что ваши тесты потерпят неудачу, если вы что-то сломаете. Тесты также удобны для всех, кто читает ваш код, поскольку они показывают, как он должен работать.

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

2. Области, в которых опыт действительно помогает

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

Дизайн и тестирование

также известное как "как решить проблему с кодом"

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

Отладка и устранение неполадок

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

Владение вашими инструментами, аналитическое мышление и креативность могут улучшить вашу отладку, равно как и опыт, вера и нервы. Я помню, как спросил старшего разработчика: «Почему ты такой спокойный? Почему ты всегда веришь, что все можно исправить? и он указал, что просто прожил достаточно долго, чтобы увидеть гораздо больше примеров того, как что-то исправлено.

Оптимизация

также известный как «мой код работает медленно!»

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

Вот некоторые вещи, которые могут замедлить работу программы:

  • Делать слишком много работы

Это одна из вещей, которым вас учат на курсах информатики. Изучение вычислительной сложности (об этом должно быть много курсов) стоит того, но суть в том, что время, затрачиваемое на обработку данных, зависит от количества данных.

Эта функция может расти медленно (например, линейно) или быстро (например, экспоненциально) по мере роста объема данных, которые вам нужно обработать. Эти различные типы функций часто записываются в большой нотации O.

В общем, каждый вложенный цикл сделает ваш код намного медленнее, если вы дадите ему больше входных данных.

  • Чтение данных с диска
  • Загрузка данных по сети
  • Хранение слишком большого количества данных в памяти

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

Что возможно и насколько это сложно?

Наличие библиотеки соответствующих XKCD не является обязательным условием для того, чтобы стать программистом, не волнуйтесь, но этот хорошо описывает большую часть разработки программного обеспечения. Знание того, возможно ли что-то, насколько это сложно, могло ли это уже быть сделано (см. «Изобретение колеса» выше) и сколько времени это может занять, является важной частью навыков и знаний в области программирования, которые вы приобретаете с течением времени. .

Конечно, этому XKCD на момент написания более 6 лет, и теперь доступны API-интерфейсы распознавания изображений, которые идентифицируют изображения птиц, поэтому, хотя оценка персонажа устарела, время, которое потребовалось, было не слишком большим. отметка.

3. Проблемы, с которыми сталкиваются как новички, так и профессионалы

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

Ад зависимостей

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

Плохо документированные API

«Как мне сделать Х?», «Мой вариант использования не похож на пример!», «Я не понимаю документацию!», «Код не соответствует документации!», «Документации нет! ”

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

Код других людей

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

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

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

Оценка того, сколько времени займет выполнение задачи

Как смогут подтвердить мои соавторы…

Заключить

Надеюсь, что эта статья помогла вам, и вы почувствуете себя более подготовленными к написанию кода с большей уверенностью и совершенствованию своих навыков! Желаем вам приятного закрытия многочисленных вкладок «что означает X в программировании» (как я только что сделал 😉). И если ваши поиски не дают достаточно ответов, не бойтесь спросить человека. Удачного кодирования!