Если вы настойчиво хотите попасть в команду разработчиков компиляторов или в «Мир Дикого Запада» — тогда смело выбирайте и учитесь лучший язык программирование от TIOBE и самое главное: на уровне его спецификации.
А если серьезно, то сейчас в индустрии все настолько запуталось с логикой и выводами, столько маркетинга и воды, что самая выигрышная стратегия — пустить в ход собственные мозги и сделать быструю переоценку технических ценностей, к которым мы стремимся.
так привык.
В этом посте я постараюсь максимально понятно сориентировать разработчиков, начинающих свою карьеру, на риски выбора технологий и сделать правильные и далеко идущие выводы.
Ты повзрослел или еще нет?
Дети отличаются от взрослых в понимании слова «ответственность».К сожалению, не все дети вырастают вовремя, а некоторые умирают в подгузниках.
Ничего страшного здесь нет — кроме одного: дети из команды программистов заставляют других сильно страдать, особенно когда сроки поджимают и релиз близок: они либо вдруг обосрались посреди открытого пространства, либо требуют соску во время мозгового штурма по предметной области с представителями клиента.
Взрослые отличаются от детей пониманием главного принципа управления ИТ: «программирование — это привилегия».
Среди опытных и успешных коллег-разработчиков наиболее адекватные хорошо кодят и одновременно «двигают компанию вперед».
IT-индустрия сошла с ума
Да, мы люди и склонны к эмоциям.Но до сих пор никто не знает, как правильно программировать, хотя со времени изобретения компьютера прошло более 50 лет. Никто! Все просто в истерике и пытаются привлечь в свой лагерь всё больше сторонников, одновременно соблазняя бизнес создать проект «на себе» :-) Поясню на примере.
Скорость мозга
Дело в том, что первые компьютеры были очень медленными, очень медленными и очень дорогими.Поэтому первые программы писались на языках очень низкого уровня, а иногда и непосредственно в машинном коде.
В наши дни такие «доисторические» технологии иногда используются, но лишь выборочно: для создания операционных систем и их компонентов (приближенных к «железу»), для игровых движков, для высокопроизводительных библиотек и т. д. серверы , Для криптовалюты и, конечно же, создавать языки программирования .
И если С , несмотря на свою тотальную дырявость и высокую опасность для разработчика, получился действительно хорош и завоевал сердца ценителей, тогда С++ оказался крайне уродливым и противоречивым существом – но что делать, такова жизнь.
Может быть Ржавчина , с правильными представлениями о безопасности памяти, будет иметь значение, но, похоже, он оставляет C++ далеко позади с точки зрения уродливого синтаксиса и нечитаемости.
Ситуация усугубляется появлением Голанг .
С одной стороны, в этом нет ничего нового, демобилизационный аккорд великого Кен Томпсон : просто жалкий остаток возможностей Java. С другой стороны, писать «относительно» системное и многопоточное ПО стало действительно проще, и это факт, который был оценен по достоинству.
многие компании :-) В этом лагере вы встретите в основном «настоящих» хардкорных бородатых программистов с глубоким знанием низкоуровневых технологий и аппаратного обеспечения, которые, как правило, выучили один язык программирования — но всю жизнь засыпают со спецификацией компилятора вместо жены .
Действительно, в этом лагере есть крутые люди.
А если вы не знаете, на что делятся команды процессора x86 выход в питоне - Позор вам и позор.
Так что совет: избегайте этого лагеря, пока не дочитаете пост до конца.
Но есть и другая сторона медали.
Реализация проектов здесь занимает не только много времени, но и.
Низкоуровневые языки программирования не только помогают, но, наоборот, мешают. Нарушения памяти происходят постоянно, требуются десятки и сотни тестировщиков (или можно выложить на github и будем тестировать коллективно) и тысячи юнит и других типов тестов, чтобы "оно взлетело" .
Многие разработчики, пришедшие в команду на старте проектов, не доживают до релиза и умирают от старости, помогая бета-тестерам до последнего вздоха.
Но эти смелые люди, пока не потекут глаза, пока не появятся стигматы, делают все возможное и.
рождаются.
шедевры .
Архитектура и предпринимательство «мозга»
Поскольку никто до сих пор не умеет правильно программировать, методом естественного отбора сформирован лагерь «грамотного проектирования и надежности».Вы без ума от программирования на языках, допускающих небезопасные операции с памятью через указатели — вы также можете довести мир до апокалипсиса: «ошибка сегментации в программном обеспечении ядерного реактора».
Как вы вообще можете начать создавать проект без строгой поддержки типизации в языке? И придумали следующие правильные языки программирования: Java и C#.
Но в Java забыли о вреде нулевых значений, а в C# не до конца продумали обратную совместимость.
Результатом является огромный корпоративный мир, относительно безопасный и относительно обратно совместимый.
В этом мире цель измеряется строками кода в день (обычно не более нескольких десятков, потому что пальцы трется до крови) и толстыми философскими и религиозными книгами о шаблонах проектирования и, ах да, чуть не забыл, о способ похоронить себя, проект, клиента и мир окружения в коде и утонуть в нем, в агонии вспоминая 20-уровневую иерархию наследования - о ООП .
Один из главных девизов лагеря – «зачем делать просто, если можно… сложно и надежно, надолго, на века!» Более того, некоторые из них умеют писать быстро и элегантно, мыть руки до крови и каждое утро собирать в голове структуру проекта, глядя одновременно на 3 монитора.
Но некоторые люди настолько увлекаются, что продолжают создавать иерархии иерархий внутри иерархий иерархий.
до бесконечности — и цель уже давно потеряна, а глаза продолжают гореть и руки чесаться.
Фактически, в областях, где предметная область четко сформирована и вписывается в «объекты со статусом и сообщениями между ними», такой подход работает очень хорошо.
Особенно радует «строгая» (кавычки, ведь о Haskell мы поговорим позже) статическая типизация (это когда типы сущностей заранее известны, они проверяются компилятором и к числу нельзя добавить строку) , легкость и удовольствие при рефакторинге и улучшении кода и высокое, если не сказать отличное, качество среды разработки .
Коллеги в этом лагере часто очень образованы в архитектуре ПО, много читают (порог вхождения высокий), понимают возможности многочисленных библиотек платформ, шаблоны проектирования, техники написания тонны документации и создания автоматизированных тестов, тестирования этих тестов и можно потратить месяцы на написание макета, который окажется не нужен.
Опять же, проекты зачастую создаются и запускаются очень долго, большими командами, требуются многочисленные тестировщики, но характер ошибок на порядок менее фатальный, что воодушевляет. Попасть в эту «касту» развития предпринимательства очень сложно.
Если вы за 5 строк продемонстрируете, как можно решить задачу на PHP, которую ваши коллеги могут решить на Java за 5 дней, вас сожгут заживо в микроволновке :-)
Надежность «мозга»
В академической среде сформировался другой лагерь и набор функциональных языков программирования (Lisp, Haskell, Erlang и другие), очень интересных и рекомендуемых для понимания.Вы без ума от программирования с использованием переменных и циклов — вы также можете сделать много ошибок! Программа — это набор вызовов функций, а вместо циклов используйте рекурсию, господа! ООП? Нет, мы о таком не слышали — классы типов и алгебраические типы данных.
Не знаю о аппликативные функторы и теорию категорий не листал - да ты же не свой мозг развиваешь, дружище.
На самом деле, на мой взгляд, чтобы войти в этот лагерь и понять его ценности, нужно очень напрячь мозг - ведь там будет много математики и еще более неожиданных, но замечательных концепций.
Опыт, полученный в этой команде, будет неоценим и пригодится при работе с другими языками программирования.
Говорят, кто-то иногда использует в реальных проектах функциональные языки: компиляторы, криптовалюты — несомненно, в ваших проектах будет на порядки меньше логических ошибок, которые уловит компилятор, а краткость, ясность и лаконичность кода на Хаскеле, конечно, поражают — но в эпоху «лабутэнов!» Людей, изучающих и понимающих эту красоту, становится все меньше.
Результат и эффективность «мозга»
К черту архитектуру и ООП, брат! Ктулху любит тебя, да утка печатает - залог успеха! Сильная типизация? Кто в здравом уме присвоит строку числу?? Статическая типизация и компиляция — пустая трата времени, потому что код пишется один раз и если он не будет написан вовремя к релизу, то его выкинут (и выкинут в любом случае, но чуть позже).Рефакторинг? Пишите сразу правильно :-) Инкапсуляция? Поставьте тире перед именем переменной и это все .
ООП — это ненужное усложнение.
Какая к черту компиляция - F5 и смотришь результат. Паттерны проектирования — нет, мы не слышали: скриптинг — это все… «Травки» хотите? Самое интересное, что когда углубляешься в языки с динамической типизацией (строгая в питоне, свободная в php и javascript), глаза постепенно открываются на реальную картину вещей, потому что:
- код становится очень понятным и лаконичным и не нужно лазить по 20 классам (если это не касается системных библиотек)
- можно быстро проверить идею через РЕПЛ
- языки просты, часто минималистичны, содержат необходимые и мощные примитивы (списки, словари), которые, главное, умещаются в голове!
- библиотек масса и любую задачу всегда можно решить в 5 строчек
В этом лагере часто встретишь много веселых людей совершенно разных специальностей, кроме «программирования на ассемблере», которые, тем не менее, могут решать задачи очень быстро и эффективно, в 5 строк, и поддерживать код и веб-проекты долго и успешно.
.
Посмотрите на последние тенденции в этом лагере и вдохновитесь этой философией счастья.
Просто и понятно среда программирования браузера , что может быть сексуальнее?
Насколько легко теперь настроить неблокирующийся веб-сервер, обслуживающий тысячи соединений по 10 строк в каждом узел.
js и сообщество растёт как на дрожжах? И никаких «Eclipse XML Soap Entiny beans Enterprise OOP.» — json и csv и улыбка (и запах неизвестного растения).
А код читаем и помещается в мозг и поэтому счастливо работает долгое время и с такой же легкостью поддерживается долгие годы.
И оказывается, что «так» тоже можно успешно программировать, а годы, проведенные в «промышленных языках программирования», потрачены впустую (зато пальцы стали сильнее).
Выбор технологии
Вы шокированы? Я тоже.Представьте, как удивляются клиенты, выбирая технологию для реализации бизнес-проекта! :-) Я думаю, вы в этот момент хорошо понимаете, что IT-мир действительно сошел с ума и заблудился (шутка).
Некоторые языки программирования, например Scala, пытаются усидеть на всех стульях, но у них это пока не очень получается — код становится трудным для понимания простым смертным.
А если серьезно, то конкуренция парадигм программирования будет только усиливаться, потому что… задачи в проектах совершенно разные и именно от задач нужно «танцевать»! В устоявшейся предметной области (серверы, библиотеки) лучше подойдет номинальный набор текста (C++, Java, C#.
), где-то было бы лучше с структурная типизация (Golang, Haskell.), а в веб-скриптах или задачах машинного обучения настоящее счастье придет с утка (python, php, javascript.).
Не надо так думать статическая типизация , особенно строгий, является «must have» — вы сорваны сроки и код будет выброшен на помойку с довольной параноидальной мыслью о «возможных ошибках».
В вебе, скриптинге и машинном обучении можно уверенно двигаться вперед с огромной скоростью и с динамической уткой типизацией, и с php и python с огромным количеством замечательных и мощные библиотеки хороший пример этого.
Поэтому забудьте к черту о том, «какой язык программирования учить в 2018 году»:
- понимать парадигмы программирования (ООП может стать вашей могилой или спасти ваш проект)
- разобраться в тонкостях набора текста и связанных с ним рисках и возможностях (Можно проклинать динамическую типизацию в финансовой библиотеке, а можно пожертвовать Java-программистом Ктулху и переписать его 100 классов на 100 строк в скрипте, понятном даже детям)
- понимать алгоритмы на уровне интуиции (нужно отличать поиск от сортировки, нейросеть от логистической регрессии - и чтобы понимать дальше, придется учиться.
всю жизнь, но оно того стоит)
- Поймите, что опытные разработчики (правда, никто не знает, где их найти на рынке) реализуют проект в срок, используя практически любую технологию (даже на мозговом ударе) и сделают это хорошо, а неопытным придется выбирать язык программирования с наиболее комфортный уровень входа и риски обвала по-прежнему велики
- посмотрите, как люди решают эти проблемы
- разобраться в рисках и возможностях каждого инструмента на основе приведенных выше критериев
- провести пару выходных с 1-3 конкретными инструментами, но ни в коем случае не впадать в фанатизм или спецификации
- быстрее приступить к делу и получить опыт использования инструментов на практике – это самое главное
- не нужно учить язык программирования «до конца» — лучше выучить способ решения вашей задачи в 5 самых популярных инструментах за 10-15 строк и вы действительно будете действовать крайне адекватно!
Конкретный пример – ML
Допустим, вы интересуетесь машинным обучением.Поздравляем! С одной стороны есть академическая теория - но из нее надо почерпнуть суть математической статистики и линейной алгебры и ни в коем случае не застревать на многомесячных курсах (с ума сойдешь, поверьте, если вы не математик, а гуманист - и не замечая).
С другой стороны, вам нужно научиться быстро писать полезный код и решать задачу за 5-15 строк.
Да, за 10 000 лет можно написать всё на C, так что посмотрите на опыт коллег и выберите, правильно, Python, у которого море библиотек и готовых решений по этой теме.
Посвятишь пару выходных изучению питона — учить больше нечего, язык очень простой (и мы договорились не лезть в дебри, ведь время — деньги).
Дополнительно почитайте о сути numpy, pandas, scikit-learn и, если глаза горят, то Keras и вперед, делайте проекты.
Но можно пойти другим путем, долгим, трудным и ведущим к личной святости и социальной нищете (через 3 года вы поймете суть алгоритма, продавая газеты в поезде, но, возможно, это особый путь) — начать внедрять алгоритмы самостоятельно, с ручным управлением памятью, или ввести дополнительные тяжеловесный решение и погрузиться в код на месяцы.
Неправильный инструмент – залог бессонных ночей и напрасной траты времени – избегайте сложности любой ценой.
Неправильный инструмент, даже самый разрекламированный, даже бесплатный подарок, даже тот, который теоретически может все в будущем, может испортить ваш проект, сорвав все сроки.
Минимизируйте этот риск настолько, насколько вы можете и не можете.
выводы
Итак, друзья, мы убеждены, что никто не умеет правильно и успешно программировать, даже мы, разработчики :-) Конкуренция между парадигмами программирования и технологиями возрастает все больше, голова раздувается, а свободного времени становится все меньше.и менее.
Поэтому самая выигрышная стратегия для начинающего карьеру разработчика — выпить баночку крутого пива, расслабиться и:
- избегать прилипания и погружения в ненужные технологические детали, количество которых растет в геометрической прогрессии
- выберите интересную проблемную область, в которой вам интересно решать проблемы клиентов
- научитесь извлекать короткую и эротическую суть из инструментов и языков программирования
- пишите как можно меньше кода, но код, который будет ясен и понятен вам и окружающим вас людям
- учитесь решать задачи за 5-15 строк, а не за 20-50 занятий
- если хочешь куда-то углубиться, то пусть это будут фундаментальные вещи типа математики, Haskell или rfc over tcp/ip
- наслаждайтесь программированием и согревайте этим своих коллег!
И всегда помните, что время, особенно свободное, — это ценный ресурс, и только от нас зависит, куда его инвестировать.
Всем удачи и хорошего настроения! Теги: #программирование #php #веб-разработка #разработка веб-сайтов #программирование
-
Как И Почему Безос Строит Часы На 10 000 Лет
19 Oct, 24 -
Вопросы По Php (Интервью)
19 Oct, 24