Рубрики
Без рубрики

Вы запутанный программист? Узнайте функциональный язык

Полное раскрытие: я легко запутанный программист. Мой разум не работает как гений доски …. Tagged с функциональным, Haskell, Python, Go.

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

Я провел последние несколько лет с момента Центр повторения На творческом отпуске программиста, в котором я блуждаю по пробору любых интересных языков, которые я мог бы получить. Это личное путешествие, чтобы найти мое Молоток Тора Анкет Некоторые я придерживался некоторое время, другой я бросил почти сразу после того, как опустился. Поскольку каждый язык спроектирован по -разному для отдельного мышления, я знаю, что должен продолжать искать инструмент, который мне лучше всего подходит.

За прошедшие годы, даже до поиска, я работал с C ++, Java, Python и Go. Из всего этого, иди подходит мне лучше всего и уполномочивает меня самым быстрым, самым естественным способом работы. Я был на своем пике, что написал свой Первая серьезная библиотека с открытым исходным кодом чуть больше месяца. Тем не менее, я вскоре понял, что для меня все еще не хватает (я продолжал использовать GO из -за его огромного повышения продуктивности), поэтому, когда меня приняли в центр повторного поступления, я решил погрузиться в неизведанную территорию функционального программирования. Сначала я начал с Lisp и Clojure, затем продолжил изучать Ocaml и Haskell, которые были пугающими, но очень освежающими. Прежде чем я смог уйти далеко, я устроился на работу в Силиконовой долине, где мне пришлось выкорчевать и переехать на другое побережье, чтобы написать код в JavaScript и Python в течение следующих 3 лет.

Мне потребовались годы, чтобы понять, что как запутанный программист, я не был выбросом. Большинство программистов есть. Давайте признаем это, большинство из нас не рождаются, чтобы программировать, и это должно быть нормально, потому что программирование – это учебное путешествие, а не приобретенный подарок. В течение моих лет работы инженера я создал бесчисленные ошибки в своем коде JavaScript и Python (больше в JavaScript) из-за быстро меняющего , но в основном потому, что я был смущен. Я имел тенденцию к абстрактным вещам, когда это не было необходимым, потому что абстракции сделали меня менее запутанным, когда я думаю о своем коде. Это было напряженно, когда у меня был крайний срок для встречи, и я был сведен к кодирующей версии снятия костей-слепо выявил код и неоднократно запустил его, пока он не сработает. Поскольку Python и JavaScript позволили мне запустить код, даже когда он вряд ли будет правильным, менталитет стартапа «корабль» стал «F ** * Это, давайте совершаем »(инженеры даже поощряли толкать код и исправить его, когда он ломается перед пользователями в стиле перемещения и разрыва в стиле, я думаю).

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

Поскольку я строю основной продукт, а Платформа проверки видео В Go and JavaScript я также откладываю 10% своего времени, изучая новые языки, такие как Crystal, Rust и Haskell. Я не раз играл со всем этим, но у меня никогда не было времени (или опыта), чтобы заставить их придерживаться.

Я почти сразу же бросил Crystal из-за его рубиноподобного синтаксиса (поэтому я не мог забрать эликсир, несмотря на то, что я продуктивен в Эрланге). Мне понравилась ржавчина, но я знал, что это мешает мне продуктивности задолго до того, как я смогу извлечь из этого какой -либо рентабельность. Затем Хэскелл щелкнул. Это была мистика для меня много лет назад, когда я впервые пытался выучить его, но годы программирования в OCAML, Erlang и Lisp построили свои навыки до такой степени, что я начинаю наслаждаться им.

Функциональные языки (особенно Хаскелл) были печально известны только как отличные только для академиков и академических проектов, таких как написание компиляторов. Они заработали плохое имя того, чтобы быть слишком “там” для Грока. Опять же, человеческая природа евангелизации их собственных вкусов и бросала своих домашних питков под автобус. Большинство тех, кто не функциональный программирование GROK, громкие, и, как и любые негативные новости, они распространяются быстрее.

По моему мнению, императивные и объектно-ориентированные языки, такие как Ruby, Python, Java и Go, сбивают с толку глаза и разум такого легко запутанного программиста, как я. Они так сбивают с толку меня, что мне обычно нужна помощь от серьезного интеллектуального IDE, чтобы быть продуктивной. Например, в моей кодовой базе GO мне нужно везде перемещаться, чтобы найти переменные и ссылки на объекты. Это похоже на длинную серию фильмов с множеством эпизодов, которые, как только вы остановитесь и вернетесь, вам понадобится резюме, чтобы следовать.

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

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

{- 
 - `h:t` reads `h` cons `t`
 - which means it is a list 
 - of at least an element
 - in front and the rest.
 -}

-- Get the first element in the list.
firstElement (h:t) = Just h
firstElement []    = Nothing


-- Sum all elements in the list.
sumList (h:t) = h + sumList t
sumList []    = 0

В Go, мой самый продуктивный язык до сих пор, эквивалент будет:

// Get the first element in the list.
func firstElement(list []interface{}) interface{} {
    if len(list) == 0 {
        return nil
    }

    return list[0]
}

// Sum all int elements in the list.
func sumListOfInt(nums []int) int {
    sum := 0
    for _, num := range nums {
        sum += num
    }

        return sum
}

Версия GO гораздо более вовлечена, особенно когда я один читал.

Использование Интерфейс {} введите Go, а также преднамеренный SumlistOfint Пример функции, должна быть отмечена здесь. Это показывает слабость, которая поставляется с упрощенным дизайном GO по сравнению с системой изысканного типа Haskell, о которой я не буду здесь говорить, потому что он не по теме.

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

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

Императив

Откуда вы находитесь, пройдите 20 ярдов, пока не увидите перекресток, возьмите направо и продолжайте еще 0,5 мили. Когда вы увидите школу справа от вас, продолжайте 10 ярдов и перейдите на первый переход на противоположную сторону улицы. Пройти еще 2 квартала в магазин.

Когда вы находитесь в магазине, найдите пасту в конце прохода № 3, томатный песто в проходе № 4 в середине и отправляйтесь через холодильник, чтобы получить колбасу.

Функциональный

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

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

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

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

Если вы хотите попробовать прочитать мои мысли по темам, не спроектированных, вы можете Подпишитесь на бета -школу, мой новый блог Анкет

Оригинал: “https://dev.to/pancy/are-you-a-confused-programmer-learn-a-functional-language-23f5”