- Программирование как искусство или как написать «Калькулятор» за 30 дней
- Немного о себе
- Осознание проблемы
- Становление на путь исправления
- Возврат в начало пути программиста и первый урок.
- Теория или практика? Вот в чем вопрос. Второй урок
- Код как искусство или последние уроки
- Вишенка на торте
- Спасибо за внимание
- Технология разработки приложения Калькулятор
Программирование как искусство или как написать «Калькулятор» за 30 дней
Доводилось ли тебе, дорогой читатель, когда-нибудь писать рассказы? Может быть это было сочинение в школе или эссе на тему «Как я провел Лето» «Смысл жизни» на факультете психологии в университете. Всегда от пишущего требовали одного, донести свои мысли четко и, по возможности, интересно. Мне хотелось бы поделиться с тобой историей о том, как я писал рассказ, в котором объяснял почему и почему . Статья несет в себе цель не сколько описать техническую сторону программирования, сколько ее эстетическую часть и, что главное, описать психологию программирования. Сопровождаться сия статья будет ссылками на коммиты в GitHub.
Немного о себе
К моменту начала истории с калькулятором я уже 2 месяца работал web-разработчиком в одном интернет-магазине (название пожалуй не буду упоминать) и проблем с работой не было, так как я обладал достаточными знаниями C# и сопутствующими технологиями для участия в полном цикле разработки и поддержки сайта. К тому же, так как проект уже был запущен к моменту моего прихода и функционировал более 4 лет, в мои задачи входило в основном расширение кода по «аналогии«. Однако существовала проблема, внимания которой я не уделял в должной мере, и имя этой проблеме «Стиль кода».
Осознание проблемы
Одним прекрасным днем (по моему, это был вторник) я решил для общего развития заняться заданием, которое мне предложила выполнить знакомая, постоянно вращающаяся в кругах общения довольно опытных программистов. Задание было на первый взгляд очень простым — необходимо было написать парсер C-кода, определяющий потенциальную рекурсивность функций.
К заданию я подошел максимально несерьёзно и довольно быстро написал работающий парсер, так как на тот момент по тому же принципу писал весь код (работает и ладно). Но данный подход спортивного программирования резко не понравился человеку, который выложил это задание в виде гиста на GitHub и еще одному человеку, который и вбил в мою голову осознание того, насколько ужасно то, что я написал и почему нужно все исправить (далее будем называть его мастер Йода наставник).
Становление на путь исправления
Возврат в начало пути программиста и первый урок.
До сих пор я не совсем понимаю, что в тот момент перемкнуло в голове моего будущего наставника и заставило его исправлять ситуацию с моим кодом, хотя у меня и есть теория. Вероятнее всего, мысль о том, что такой код может однажды по чистой случайности попасть в его проекты не давала ему спокойно жить. И вот, спустя несколько дней мы начали учиться так же, как дети учаться ходить, говорить а позже и писать.
Первым заданием, которое я получил, оказался типичный для любого начинающего программиста консольный калькулятор. «Что может быть проще» — подумал я, и, опять таки довольно быстро, написал сие творение. Это было несколько лучше парсера (за который мне, видимо, будет стыдно до конца времен), но все еще было очень далеко от того кода за который могло бы быть не стыдно. После первого же ревью на написанный мной код, я осознал с чем мне прийдется столкнуться. Ревью вроде даже был больше чем сам код (вместе с кодом стандартных библиотек .Net). Прочтя все замечания я внес изменения и попутно внес правки, которых, IMHO, не хватало данной великой программе. Я никогда так не лажал, друг мой. Код стал хуже, а я, впервые за сознательную жизнь программиста, столкнулся с яростью тим лида. Естественно я всячески оправдывал свои действия, но нет ничего более свирепого, чем ментор, чьи указы не выполняются или перекаверкиваются.
Первый урок, который я выделил для себя на пути выявления во мне сущности программиста можно сформулировать так — «Если ты не уверен что у тебя достаточно мозгов, лучше послушай более опытного программиста, если же ты уверен, что готов, перепроверь данные, кажется ты ошибся.»
Теория или практика? Вот в чем вопрос. Второй урок
Я хотел научится писать код по тому, что для меня программисты стоят на одном уровне с нейрохирургами и великими учеными, а приблизится к этому олимпу не хочет только глупец или web-дизайнер (они те еще странные хлопцы). Однако специальность в университете я выбрал не самую удачную для этого (Системный анализ и управление) и по стечению обстоятельств начал обучаться сам. Я начал читать книги, смотреть обучающие ролики на YouTube, но при этом умудрялся практически не решать казуальные задачки, так как считал,
что можно выехать только на теории а практические знания прийдут со временем.
И вот, спустя две недели занятий с ментором над простым калькулятором, я понял, что от моих теоретических знаний практически нет толку, так как куча статей и книг превратились в кашу, никак не подкрепленную механическим набиванием кода. Так вот, сейчас я могу смело заявить на весь мир и так очевидную вещь, которая для меня все же стала откровением
«Нельзя заниматься практикой программирования без должных познаний в теории и нельзя зубрить теорию в надежде на то, что после 18-ой книги то я точно смогу.»
И вот, на 14-й день кропотливого обучения создал он воду и морских животных
я постарался упорядочить все, что было замешано в моей голове с момента начала обучения,
но был повержен своим же мозгом, так как среди всего что я читал, я не помнил практически ничего из-за отсутствующего практического опыта. И все же, мой терпеливый учитель не бросил меня на съедение моей глупостью и сказал прочесть книгу, которая для многих была одной из первых, но была упущенна мной.
Код как искусство или последние уроки
Я думаю многие уже поняли о какой книге пойдет речь. «Чистый код» дядюшки Боба навел меня на мысль, которая, по моим ощущениям, засела глубоко и надолго в моем мозгу. Написать просто хороший алгоритм это 50% работы — написать же сложный алгоритм так, что бы человек, не особо разбирающийся в тонких материях, но хотя бы чуть-чуть знающий английский язык мог понять о чем ты написал — вот истинное искусство. И с этого момента обучение пошло легче, и конечно не без огрехов, не без огромных ревью и ударов по голове за глупейшие ошибки, но я таки привел код к тому виду, за который может быть не стыдно. Посмотреть его можно тут.
Какие же уроки я вынес к концу первого задания моего наставника?! Их не так много, но каждый из них стоит своего:
- Дисциплина и сосредоточенность во всем — от написания кода, до поиска информации.
- Умение балансировать. Равномерное наполение двух концов знаний — теории и практики.
- Умение задавать вопросы по существу и главное, не боятся их задавать.
- Думать. Постоянно думать и пытаться сделать лучше то, что казалось бы, уже сделано.
Вишенка на торте
Что же я получил в итоге. Как изменилось мое понимание программирования после месяца,
потраченного на калькулятор?! Все очень просто, изменилось моё отношение к коду. Буквально месяц назад тяжело было найти более несерьезного программиста, для которого любой код был лишь очередной шуткой, которую ты рассказал и забыл и неважно, понял ее кто-нибудь или нет. И вот я, стою перед исполинских размеров горой под названием «программирование», готовый карабкаться вверх и понимающий, что с каждым метром, с каждым шагом и с каждым вогнаным между камней скальным крюком будет все тяжелее и тяжелее. Но разве не за этим мы сюда пришли?! Разве не потому инженер-конструктор собирает новую модель свехбыстрого самолета или химик производит новые лекарства?! Ведь все это кому то нужно. И программирование, как явление, так же необходимо людям. И в такой ситуации относится к коду несерьезно было бы простым кощуством.
Закончить хотелось бы простым наставлением для начинающих программистов. Вы можете программировать все, что захотите: игры, вирусы, инженерные программы, фронт-энд анимации для сайтов — и все же, что бы вы не программировали, относитесь к коду так, как буд-то от его качества зависят жизни людей.
«Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.»
Спасибо за внимание
Технология разработки приложения Калькулятор
Разработка любого приложения представляет собой многоэтапный процесс. Разрабатывая приложение Калькулятор будем придерживаться следующей технологии:
- Создадим новый проект.
- Сохраним новый проект в отдельной папке.
- Выполним настройку параметров формы – окна приложения, используя для этого разные способы.
- Выполним размещение и настройку элементов управления в форме в соответствии с проектом окна, представленного на рис. 1.1.
На этом этапе необходимо осуществить выбор элементов управления. Так как проект окна уже разработан на этапе постановки задачи, то выбираем следующие элементы управления:
- для полей ввода операндов элемент текстовое поле (TextBox);
- кнопки управления (CommamdButton)для набора значений операндов и выбора операций;
- элемент надпись (Label) для отображения знака операции, результата и выдачи предупредительного сообщения в случае невозможности выполнения операции;
- элемент рамка (Frame) для объединения кнопок в логические группы: кнопки набора числа и кнопки операций;
- д ля отделения результата от операндов элемент линия (Line).
После размещения элементов форма в окне конструктора форм будет иметь следующий вид:
- Разработаем программный код, представляющий собой набор процедур выполняющих обработку событий, возникающих при работе в приложении Калькулятор.
Основные сведения об используемых в процедурах операторах Visual Basic приведены в приложении 1.
Выполнение лабораторной работы
- Выполнить запуск Visual Basic 6. Для этого следует выполнить следующие действия:
- нажать на панели задач кнопку Пуск;
- в открывшемся главном меню Windows выбрать команду Программы;
- в появившемся подменю выбрать Microsoft Visual Basic 6.
- Создать новый проект. Для этого на вкладке New (Новый) в диалоговом окне New Project (Новый проект) выбрать шаблон Standard EXE и нажать кнопку Открыть.
Созданный новый проект имеет по умолчанию имя Project1. Расположенное рядом с именем проекта выражение [design] указывает на текущий режим приложения – проектирование.
Проект состоит из входящих в него компонентов, таких как формы, модули кода, элементы управления и т. д., поэтому процесс сохранения проекта требует последовательного сохранения его компонентов. Сохранение проекта и входящих в его состав файлов целесообразно выполнять в отдельной, предварительно созданной папке.
Для сохранения проекта выполнить следующие действия:
- Создать папку с именем MyProject для хранения приложения «Калькулятор».
- В меню File (Файл) выбрать команду SaveProject (Сохранить проект) или нажать кнопку SaveProject на стандартной панели инструментов.
- В открывшемся диалоговом окне Save File As значение Form Files в списке Тип файла указывает, что сохраняется входящая в приложение форма. Используя раскрывающийся список Папка, выбрать папку MyProject, затем в поле Имя файла ввести имя формы Form1 и нажать кнопку Сохранить.
- Так как никаких компонентов, кроме формы, новое приложение не содержит, появляется диалоговое окно Save Project As для сохранения самого проекта. По умолчанию в списке Папка выбрана папка, в которой сохранили форму. Ввести наименование проекта Calc и нажать кнопку Сохранить.