Отпусти меня, PHP

    Всем привет, меня зовут Коля и я 10 лет пишу на php. Хлоп-хлоп-хлоп, привет, Коля.

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

    Затем была первая работа, брошенный универ, ООП, фреймворки, и первые попытки соскочить. Сначала Java, затем плюсы. Я делал простенькие программки-помощники (трекер времени с автосохранением в jira, десятистрочные плагины для IDE), и среди этих for, if, switch я без проблем плавал как рыба в воде.Но как только требовалось что-то посложнее таймера, сразу начиналось избиение клавиатуры, стола и прочих подручных предметов.

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

    Время шло, опыта становилось все больше, паттерны, SOLID, SQRS, DDD. PHP стал совсем понятным, любая ошибка при выполнении скрипта вызывала лишь усмешку и заряженный xdebug, а в мозгу стучало "нет ничего невозможного". Хороший программист может легко разобраться в любом незнакомом языке, а я считал себя хорошим программистом. Java Android, первые table view с данными из интернета, и снова те же грабли. Куча непонятных вещей, вроде передачи параметров между экранами (постоянные краши в этом месте с полотном непонятных ошибок). Сам java уже давно не пугал, классы похожи на PHP, вместо parent - super, а для переопределения нужно писать @override. Приватные классы, переопределение метода прямо при создании объекта wtf??? Снова дядя, задачи, кросс ревью, скрам-митинги, спринты. Снова долгий ящик.

    Strict types в php, теперь уже совсем по взрослому, в новых RFC обещают дженерики. Вот это уже настоящий прорыв, теперь мы заживем не хуже всяких java.

    Новая попытка, swift, kotlin. И тут, знаете, тот самый момент, когда ты впервые увидел JavaScript.

    JavaScript

    (код и выводы отсюда)

    const f = () => 42;

    Скобки, стрелочки, да что тут вообще происходит, как это, черт возьми, работает? Но у JS свой путь, тут важна краткость, и они нашли выходы - тот же TypeScript выглядит понятно и лаконично.

    Swiftbook выглядел многообещающе просто: if, for, switch, class struct, enum, tuple(офигеть удобно, почему в php такого нет?). Идея пет-проекта, быстро накиданная на symfony json API.
    Красиво написанные в XCode структуры для entities, какая-то либа для дерганья апишки и конвертации json в объекты. И эпик фейл. Я настолько привык к отсутствию проблем с json в php, обкололся symfony serializerами, что полностью зашел в тупик со строгой типизацией в свифт. Моя, как я думал, великолепная апишка возвращала

    {success: true, result: {SomeObjectOrArray}} 
    или
    {success:false, errors: [listErrors]}

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

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

    open func collectionView(_ collectionView: UICollectionView, canPerformAction action: Selector, forItemAt indexPath: IndexPath?, withSender sender: Any?) -> Bool {
            guard let indexPath = indexPath else { return false }
            return self.presenterForIndexPath(indexPath).canPerformMenuControllerAction(action)
        }

    Что тут вообще происходит, нижнее подчеркивание, какие-то ключевые фразы перед названием параметров.

    Или вот:

    if let JSONObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: Any]],
        let username = (JSONObject[0]["user"] as? [String: Any])?["name"] as? String {
            // There's our username
    }

    Синтаксис очень переполнен, приходится держать в голове множество конструкций, от чего мозг php-разработчика успешно отвыкает за годы разработки (чего уж там три с половиной конструкции против десятков, а в некоторых языках и сотен конструкций, синтаксического сахара и прочего).

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

    Те вещи, которые делались за считанные минуты и несколько строк кода (давайте возьмем JS, таблица, по клику на строку которой нужно эту строку удалить) теперь почему-то выглядят как пачка классов с непонятного назначения методами и, на первый взгляд, какой-то слишком усложненной логикой. Я видел отрисовку грида на UIKit, и это выглядит как мини-фреймворк. И эта реализация должна быть такой большой, ведь у нас нет умного браузера, который сделает все для вас (сейчас уже есть SwiftUI, который позволяет делать это гораздо короче, но с ним еще не все так просто). Тут нужно глубинное понимание работы, и это не просто "запустился скрипт, построчно выполнился и умер".

    Я рад, что жена в свое время выбрала первым языком swift. Знаете, когда я ради интереса сделал за нее небольшое домашнее задание, первым вопросом преподавателя было "что за phpшник это писал?"

    Если меня кто-нибудь спросит, какой язык ты посоветуешь для изучения новичку, едва ли я отвечу PHP. PHP язык с нулевым порогом вхождения и нет никаких проблем с его изучением. Десяток ключевых фраз, несколько конструкций, еще щепотка сложных вещей типа генераторов, стрима или замыканий. Пару минут - Hello World, пара часов - ToDo list, пара дней - мини блог. Пара лет, и ты уже Middle/Senior с запросами покруче архитектора, но без всякого понимания, как это работает внутри вида "почему мой алгоритм такой медленный". Но порог "выхода" слишком велик. Можно хорошо писать скрипты, но "взрослые" языки придется постигать почти "с нуля".

    Вместо послесловия

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

    Комментарии 27

      +2

      да, но нет.
      в php есть асинхронность, многопоточность, довольно удобная (на мой взгляд) работа с бинарщиной, голые сокеты и куча самых разнообразных вещей. а какое-то время назад вполне себе здравствовали обертки для gtk и qt, народ даже окошечки рисовал из php (сейчас можно обойтись без биндинг библиотек и дергать через ffi)
      и даже свой аналог async-await есть.


      и статья немного выглядит как "какой такой Tcp Listener? в похапэ я просто писал <?= 'Hello '. $world ?> и буквы сами попадали в браузер" — нет, то что вы не сталкивались с чем-то в php нисколько не показатель что там этого нет или что на нем нельзя так писать.


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

        0
        ReactPHP и pThreads всякие это скорее то, что есть, но этим пользуются люди с особым вкусом. Меня аж целый раз спросили во время собеседования умею ли я в многопоточность в пхп, я в голове то в этот момент не сумел в неё, а они про пхп. Это все там не нужно. А окошечки и подавно.
        нисколько не показатель что там этого нет или что на нем нельзя так писать.

        Можно же, но не надо, пожалуйста.
        +11

        Знаете, в те времена, когда начал программировать я, "плохим" первым языком считался бейсик, и люди у которых первым языком был паскаль, си или ассемблер очень сочувствовали тем, кто начинал с бейсика… считалось, что это будет мешает им стать хорошими программистами. Доля правды в этом, конечно, была, но по моим наблюдениям те, кто начинал с бейсика, просто разделились на две группы — одна с незначительными сложностями осилила си/паскаль и стала профессионально программировать, а вторая переключилась на разные варианты простых/специализированных языков — от уже непомню чего-то там для работы с БД времён DOS (Clipper?) до макросов в офисе и позднее 1C.


        Мне лично учить PHP в своё время помешала сильная неконсистентность языка — как только увидел в начале изучения кучи стандартных функций с похожими названиями и делающие примерно одно и то же, но при этом принимающие примерно одни и те же параметры в совершенно разном порядке — так сразу с изучением и закончил. Чуть позже вышла та известная статья про "фрактал плохого дизайна", которая полностью описывала моё собственное впечатление, чем подтвердила что это просто "не мой" язык.


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


        Можно ли считать "плохим программистом" того, кто вполне успешно решает проблемы бизнеса, но с точки зрения кого-то другого не знает чего-то такого, что "должны знать все хорошие программисты"? Лично я бы об этом вообще не парился, каждому своё. Для кого-то и я, со всем своим опытом, статьями и кучей опенсорсных проектов, выгляжу недостаточно образованным и не очень-то квалифицированным. Это — просто чужое мнение, не стоит уделять ему слишком много внимания. Лучше просто заниматься тем, чем нравится и писать на том языке, который нравится.

          0
          Я начинал с Бейсика :) Потом был Clipper, FoxPRO. Потом Perl. И потом уже C/C++, начиная с Borland c++ Builder. В конечном счете ушел на Си в микроконтроллерах. Одно время была Java в мобильных разработках (еще под телефоны, а не смартфоны).
          Не считаю себя хорошим программистом, но встающий задачи решаю и зарабатываю себе этим на хлеб :)
            0

            Начинал с бейсика на спектруме, помню в школе от нечего делать в тетради написал игру "танчики", ничего при этом не зная про функции — вся логика в одном большом цикле для игры, подциклах для танчиков и снарядов, "рендеру" (PRINT строк из массива) и кучке GOTO.
            ЧСХ игра заработала практически сразу после вбивания в спектрум.


            Потом появились игровые консоли, где нельзя было программировать, и я забросил программирование лет на 20, если не считать одной попытки прочитать "выучи С++ за 21 день", где я здался на 4-й день, и пары маленьких программ на Visual Basic уровня "калькулятор".


            И вот в 33 годика я остался без работы, вокруг все "входят в Айти" и приятель подкинул книжку "Python для сисадминов".
            Через полгода первая работа, с которой выгнали с диагнозом "медленно учится", но где я за месяц выучил BASH.
            Потом вторая — израильский "стартап" с одним продуктом на JS, который тоже пришлось по быстрому выучить.
            И так вот спустя несколько лет я с удивлением замечаю, что за сезон спроектировал и написал асинхронный сервер для IoT устройств, API для управления этими устройствами, подключил к этому API существующий Web-клиент (внедряя в него патчи в процессе), все это наладил и запускаю + написана кучу документации и все это еще и работает.


            Не считаю себя "отличным" программистом, а вот хорошим и решающим задачи бизнеса — вполне.

              0
              Начинал с бейсика на спектруме

              Я на ДВК-2М, когда о Спектрумах в наших краях никто еще и не слышал :)
                0
                Я начинал ан ПК Агат-7. Там в бейсик можно было вставлять коды ассемблера.
            +2

            Ну тот php что был лет 10-15 назад и текущий php это немного разные вещи.
            Теперь тут есть и асинхронность и многопоточность.
            Плюс очень много интересных новых инструментов (привет roadrunner и тп)
            Так что возможно перейти/выучить другие языки будет трудно (тут не берусь судить) но когда все есть что написал выше… а стоит ли учить/переходить? )))

              0
              Теперь тут есть и асинхронность и многопоточность.

              Ну как есть… Формально да, можно. На практике так практически никогда не пишут. Впрочем оно и не нужно.
              +4
              Проблема когда мы пытаемся погрузиться в парадигму нового языка не до конца выйдя из парадигмы старого. Сначала ловим кучу негатива от того, что какие-то простые вещи в пару строк кода на старом языке на новом приходится делать через пень-колоду. Но по мере погружения в контекст нового языка это будет проходить. Для каких-то задач вы найдёте удобные инструменты, про которые пока не знаете, каких-то вещи будете делать слегла по-другому (например, формировать json-api таким образом, чтобы его можно было разобрать со строгой типизацией), а каких-то вещей просто будете избегать. И со временем даже забудете что можно писать по-другому.

              Пока вы находитесь на этапе «сперва формирую фразу на русском, затем в уме перевожу её на английский, затем произношу» — будут сложности. Когда вы перейдёте на этап «сразу формулирую и произношу на английском» — сложностей не будет, а о каких-то вещах из мира PHP вы вообще возможно будете вспоминать с содроганием.

              Ну и есть масса задач, для которых лучше всего подходит как раз PHP. Если задачи такие, то может и нет смысла переходить на что-то ещё?
                +2
                Плохой программист != программист на PHP.
                Просто из-за кучи шуток, почему-то у людей часто возникает такая ассоциация.
                Я вот тоже пишу на PHP уже 15 лет, начинал с Перла.
                Потом JS, Android.
                До сих пор ваяю свою CMS-ку, которую еще в универе начал накидывать на PHP.

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

                В PHP сейчас столько интересного и вкусного внедрили, что хватает на все задумки веб-программиста с головой. А если брать популярные компоненты от Laravel, например, и ковырять их изнутри, то можно такие чудеса творить!

                Пишем свой код, читаем книжки, читаем чужой код, ломаем чужой код, фиксим чужой код — делаем это постоянно и не будет возникать вопросов «плохой ли я программист», просто времени на это не будет )
                  0

                  Kmx.ru, wen.ru — знакомые сайты? Сейчас, уже, наверное и закрыты уже.


                  Да, я тоже начинал со школы делать WAP сайты, лет с 14 имел с мобилки список сайтов-конструкторов, было интересно.


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


                  В 2009 примерно начал программировать на PHP, потом с БД и т.д. Дальше больше.
                  Заработок был мелкий и нестабильный, фриланс конкуренция высокая.


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


                  После 5 лет работы ушёл с этой работы, решил вернуться в PHP.


                  Последнее, что помню, это версия PHP 5.2 Sta bil & 5.3 Beta. Захожу в интернет, а там уже php 7, причём параллельно ветке 5.x. Ой, как себя динозавром почувствовал.


                  Хотел бы вернуться в программисты, писать свои миры, быть вольным художником. Но тяжко, всё так вперёд ушло.
                  Да и зрение подводит. :)

                    +1
                    wen.ru работает до сих пор) Я в свое время там баловался с телефона. Более того там даже живет wml версия wen.ru/wml не сайт, а музейный экспонат, но сам конструктор закрыт example.wen.ru
                    +1

                    Знаете, когда я ради интереса сделал за нее небольшое домашнее задание, первым вопросом преподавателя было "что за phpшник это писал?"


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

                      0

                      Там был Свифт, но код был написан в стиле php.

                        0
                        Не знал что у PHP есть стиль :)
                        Вордпресс и Симфони оба php, но между ними пропасть.
                      0
                      Спакуха, я бросил тоже после 10 лет ПХП
                        0

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

                          0
                          в новых RFC обещают дженерики

                          Это в каких, например?

                            +1

                            Суть статьи: "программировал 10 лет на языке %language_name% и не очень хорошо разбираюсь в других технологиях"


                            Причем тут PHP?

                              +1
                              Поддерживаю обоими руками!!!
                              Проблема не в языке, проблема в людях. Если за 10 лет так и не понял принципы работы ЭВМ, то это не проблема языка.
                              0
                              На Php надо знать много фреймворков для устройства на работу? Если сравнивать с java.Я имею ввиду, вот на java надо 1-java core, 2-spring, 3-spring boot, 4-spring security, 5-jsp, 6-hibernate, 7-sql, 8-postgre,9-rest,10-soap, 11-junit, 12-maven,13- git. И не всегда обязательные kafka, и т.д. И все это надо в голове поддерживать до «актуальных» версий. В мире php меньше в голове надо поддерживать инфы, или больше? Просто от обилия фреймворков уже поднадаедает.
                                0
                                Там несколько основных, но требуют обычно один. А вообще, фреймворки это приходящее, если есть основа, то любой осваивается за месяц.
                                +1

                                По опыту работы c разработчиками как админ/девопс и отзывам коллег, собеседуюших программистов, есть такая корреляция, что сегодня php программисты гораздо сообразительнее и имеют более широкий кругозор, чем фронтенд программисты на node.js

                                  0
                                  Не начинайте с Basic…
                                  Не начинайте с Pascal…
                                  Не начинайте с PHP…
                                  Не начинайте с JS…

                                  Наверняка уже помимо статей «с какого языка начать» есть статьи «с каких языков не следует начинать» или «в каких языках не следует задерживаться надолго». Такое досужее чтиво.
                                    0
                                    PHP-PHP, я не твой. Отпусти меня, PHP.
                                      –2
                                      После выхода PHP7 перестал страдать фигней в духе «PHP? Для ламеров».
                                      После выхода PHP8 считаю, что это лучший язык не только для веба, но и многих других задач (но потребуется время для прокачки библиотек).

                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                      Самое читаемое