ПРОГРАММИРОВАНИЕ

Я потратил 2 с лишним года на написание кода на бумаге — вот чему я научился

Когда твой мозг становится компилятором

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

Тем не менее, в конце концов я добрался до пространства программирования.

Все началось, когда…

Все началось на третьем курсе университета.

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

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

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

Оглядываясь назад, даже язык не помог. Я писал алгоритмы на французском языке.

Так было до моего следующего модуля (введение в C), когда лектор сказал: «Помните алгоритмы, которые вы использовали для написания в предыдущем модуле? Ты понесешь это сюда. Только синтаксис другой. Добро пожаловать на знакомство с C!», что меня поразило.

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

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

Это продолжалось 2+ года.

Сделав это из первых рук, позвольте мне рассказать вам о хорошем, плохом и уродливом написании кода на белых щепках.

Псевдокодирование

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

Я присоединяюсь к этой школе мысли. И опыт это подтвердил.

Так что да, я писал псевдокод на бумаге и до сих пор это делаю.

Я не знаю, может быть, это только я, возможно, потому, что я потратил много времени на кодирование на бумаге на раннем этапе, но одно можно сказать наверняка: время кодирования увеличивается экспоненциально, когда я не псевдокодирую. Даже когда я сталкиваюсь с наименее сложными упражнениями, карандаш и бумага всегда пригодятся.

С другой стороны, для меня стало обычным видеть, как разработчики смотрят на столько мониторов, сколько я могу сосчитать с открытыми окнами VS code, StackOverflow и Git. И редко я видел под рукой черновую тетрадь.

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

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

Кодирование

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

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

Я понял, что чем сложнее задача, тем больше времени уходит на:
а) исследование решения + б) перепрофилирование решения под мой код.

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

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

Требовалось тестирование.

И потому, что тестирование на бумаге не считается тестированием. Пришлось тестировать прямо на моей машине.

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

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

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

Отладка

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

Но знаете что? Отладка была исключена из учебной программы.

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

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

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

Например, если бы я повторял более 200 элементов, я бы записал поведение цикла по 3 элементам.

Помните в «Форсаже», как участники использовали NOS, чтобы одержать победу в самый последний момент? Использование описанной выше техники имело аналогичный эффект на мой результат.

Поскольку я в основном компилировал код в уме, я получал меньше ошибок от реальных компиляторов, что экономило время.

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

Думаю, Дейкстра все-таки был прав:

Если отладка — это процесс устранения программных ошибок, то программирование должно быть процессом их внесенияДийкстра.

Хотя кодирование на бумаге было трудным делом, отладка на бумаге облегчала боль.

Уроки выучены

Я могу сказать, что этот опыт преподал мне ценные уроки и помог мне стать лучшим программистом в будущем.

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

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

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

  • Написать псевдокод
  • Нарисуй мой мыслительный процесс
  • Моделирование выполнения программы
  • Отключиться от техники

В конце концов, это мои личные предпочтения.

Я хотел бы услышать ваше!

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



Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord . Заинтересованы в хакинге роста? Ознакомьтесь с разделом Схема.