От LEGO к функциональному программированию

ЛЕГО

Создание вещей всегда было частью меня. Это началось, когда я был молод. Я был фанатиком LEGO (до сих пор не уверен, что это когда-нибудь действительно исчезнет). У меня было много наборов, но, что более важно, у меня была большая ванна случайных LEGO.

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

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

Нэшвилл и Odd Jobs

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

Я смешивал краски в Sherwin-Williams, продавал автомобильную электронику местной компании, а также стал классическим доставщиком пиццы. Было много других, ни один из них не был гламурным, но они оплатили счета. В то время я никогда не работал на полной ставке. Я обнаружил, что несколько подработок позволили мне заработать немного больше и у меня появилось немного свободного времени, чтобы попробовать другие вещи на стороне. И в это свободное время я научился создавать веб-сайты и, что более важно, мне нравилось создавать веб-сайты.

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

Это было здорово. Я начал изучать платформы веб-сайтов и, наконец, остановился на Joomla. Joomla - отличная платформа. Он построен на PHP и имеет очень здоровую экосистему сторонних разработчиков. Wordpress тоже был доступен в то время, но он был не таким большим, как сейчас. Итак, как только я остановился на Joomla, началось настоящее веселье. Я решил, что лучший способ начать - это начинать снизу и двигаться вверх… поэтому я установил свой первый сервер.

В наши дни это довольно банальная вещь, но для меня тогда это было все равно, что пытаться построить дом без чертежей в темноте. Благодаря Google и Stack Overflow я справился. У меня был запущен сервер, MySQL и Joomla. Пришло время создать настоящий продукт / веб-сайт.

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

Думаю, мне это нравится ...

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

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

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

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

Кодирование 101

PHP был моим первым языком. Я много лет разглядывал его в Joomla и Wordpress. Только внесение изменений на уровне поверхности и, в лучшем случае, копирование линий из Интернета и вставка их в мои файлы. Через некоммерческую организацию я познакомился с парнем, который по какой-то причине решил научить меня PHP. Более того, он научил меня думать о проблемах и разбивать их на составляющие. Это настоящий навык. Решение проблем.

Итак, я создал несколько приложений PHP и MySQL, многому научившись в процессе. Примерно в это же время Javascript недавно начал свой путь «доминировать в мире кодирования», так что он стал настоящим инструментом. Это больше не было просто вспышкой на передней панели, с ней можно было решить некоторые серьезные проблемы. Это было следующим, чему нужно было научиться.

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

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

Поэтому моей следующей целью стало программирование на Javascript с использованием парадигмы функционального программирования (FP). Я уже изучил несколько других парадигм PHP. Классы, фабрики, объектно-ориентированные, процедурные… было ясно, что обучение программированию таким образом, через парадигмы, было для меня наиболее полезным. Понятия широкие и обычно не применимы к одному языку. Изучение синтаксиса более узкое. Изучая концепции, вы учитесь программировать.

Думаю, я понял

На этом этапе мы с братом начали работать вместе. У нас возникла идея создать фреймворк приложения на Javascript, используя FP. Мы сделали, и хотя на создание инструментов, которые мы собирались использовать для создания реальных приложений, потребовалось много времени, все это того стоило. Наш фреймворк приложения, который теперь называется Pagoda, приятно разрабатывать. Многие современные передовые практики встроены в фреймворк на глубоком уровне; что требует большого давления, чтобы делать что-то правильно от нас, а теперь от нашей команды разработчиков.

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

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

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

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