Моя самая большая мечта при смене работы: узнать все о проекте самостоятельно. Не задать ни одного вопроса, а просто потратить немного времени на изучение материалов.

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

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

С чего начать

Все же знают разницу между фреймворком, библиотекой и языком программирования? Я предпочитаю начать изучать репозиторий с кодом с документации фреймворка, на котором он написан. В моем случае это Laravel.

Как читать документацию

  1. Начните с прочтения оглавления. Может оказаться, что похожие сущности вы уже встречали в других фреймворках.

    Если в оглавлении нет ни одного знакомого слова, ничего страшного. Уверена, что вы сможете разобраться после прочтения самих страниц.

  2. Прочитайте разделы Введение или Начало работы. Такие разделы дадут вам общее представление о фреймворке.

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

Скорость чтения взрослого человека — примерно 200 слов в минуту. Даже если кажется, что на странице много текста, поверьте, обычно прочтение не занимает больше 5-7 минут.

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

Благодаря еще и хорошему неймингу на нашем проекте, теперь я легко разбираюсь, за что отвечает любой файл, в котором я нахожусь. С фреймворком разобрались. А что с PHP?

Как работать с неизвестным синтаксисом

Больше всего меня удивили в PHP стрелочки: => и ->. Я совершенно не понимала, как они работают.

Пример кода на PHP со стрелочками:

<?php

// 1. Arrow Functions (PHP 7.4+)

// Anonymous function using traditional syntax
$greet = function($name) {
    return "Hello, $name!";
};

echo $greet('World') . PHP_EOL; // Output: Hello, World!

// Anonymous function using arrow function syntax
$greetArrow = fn($name) => "Hello, $name!";

echo $greetArrow('World') . PHP_EOL; // Output: Hello, World!

// 2. Associative Arrays

// Creating an associative array using => operator
$user = [
    'name' => 'John Doe',
    'age' => 30,
    'city' => 'New York'
];

// Accessing values using the key
echo $user['name'] . PHP_EOL; // Output: John Doe

// 3. Class Properties with Arrow Function

class User {
    public $name;
    public $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }

    // Method using arrow function for concise syntax
    public function getFullName(): string {
        return $this->name . ' (' . $this->age . ')';
    }
}

$user = new User('Jane Doe', 25);
echo $user->getFullName() . PHP_EOL; // Output: Jane Doe (25)

?>

Я не знаю, кто это придумал Но мне пришлось воспользоваться аж тремя источниками информации, чтобы разобраться: Stack Overflow, прекрасная разработчица Таня и ChatGPT. В тот момент, когда я поняла, что все три источника несут одну и ту же информацию, я убедилась, что поняла правильно.

Как использовать ChatGPT

ChatGPT можно задавать любые вопросы, например, "Что это за стрелочки в PHP?". Но самое простое его использование: если вы дадите ChatGPT кусок кода, он интерпретирует его максимально подробно.

Чтобы интерпретировать код с помощью ChatGPT:

  1. Введите фразу: "Объясни мне код:".

  2. Вставьте код и ждите ответ.

Готово, у вас есть объяснение для кода. Только будьте внимательны, иногда ChatGPT может приврать где-нибудь.

Как использовать Google или Яндекс

Для некоторых вопросов и ChatGPT не нужен, погуглите немного, и Stack Overflow может дать ответ про те же стрелочки, например.

Чтобы найти информацию про разницу между стрелочками в PHP:

  1. Введите запрос: stackoverflow arrows PHP difference.

  2. Откройте первую страницу в рекомендациях.

Готово, вы нашли страницу с информацией о стрелочках.

Заключение

Я никого не призываю избегать коллег и пытаться во всем разобраться самостоятельно. Уметь работать в команде тоже надо.

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

Давайте искать самостоятельно.

Послесловие

Что же со стрелочками и что же такое фасад?

Начну со стрелочек:

  • одинарная стрелка -> используется для запроса доступов к свойствам и методам объектов.

  • двойная стрелка => используется для определения значений в массивах и для обозначения тела анонимных функций.

Фасад же предоставляет интерфейс для классов, доступных в контейнере служб приложения.

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

Комментарии (24)


  1. zbot
    01.09.2024 19:12
    +3

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


  1. w00dLAN
    01.09.2024 19:12
    +1

    Часто прошу GPTшку разъяснить код. В целом - не врёт :-)


  1. IvarsPL
    01.09.2024 19:12
    +1

    Я вместе с ии учу язык. Если мне что то не понятно он очень подробно объясняет все.


  1. 19Zb84
    01.09.2024 19:12
    +1

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

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

    И по поводу языков. Rust c c++ сложно понять если не знаешь суть задачи сервиса.

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


    1. Fancryer
      01.09.2024 19:12
      +1

      А ещё сложнее понять Perl или, не дай бог, Raku... А ведь на них пишут проекты.


    1. ElenaShliaga Автор
      01.09.2024 19:12
      +1

      У меня обычно нет задачи изменять код, только доставать из него информации. С изменением кода, конечно, все сложнее.


      1. FanatPHP
        01.09.2024 19:12
        +1

        Интересный случай когда оба правы. You know, I'm something of a technical writer myself, и очень люблю таких зануд как комментатор выше. Сам-то всегда смотришь только с одной точки зрения, и требуется вторая пара глаз, чтобы подметить кошмар техписа - место, в котором тебя могут понять неправильно :)

        Хотя у вас конечно пограничный случай - по тексту и так ясно, что речь идёт именно о чтении. А неверная трактовка возникает только если вырвать фразу из контекста. Но опять же, по опыту - люди читают по такой диагонали, что я стараюсь по возможности избегать даже таких разночтений.

        Один из самых показательных примеров (раз уж мы в хабе про РНР) - это страничка документации про генераторы. Примерно 80% пхпешников после её прочтения остаются в убеждении, что генераторы служат для экономии памяти. Читая приведенный ниже абзац,

        Генератор помогает писать код, который использует foreach для перебора набора данных без необходимости создания массива в памяти

        они по какой-то неведомой причине проскакивают середину и воспринимают это предложение как "Генератор помогает писать код без необходимости создания массива в памяти". И получают на 100% некорректное утверждение: код, который не требует создания массива в памяти, реализуется совсем другими механизмами. А генератор всего лишь позволяет "поженить" эти механизмы с командой foreach.

        Увы, добиться изменения этой формулировки нереально - если читать её целиком, то она на 100% корректна и менять её никто не будет. И при этом большиство понимает её неправильно. Такой вот интересный феномен.


  1. S_gray
    01.09.2024 19:12
    +7

    То есть, даже заголовок "Как использовать Google или Яндекс" не раскрыт. Ибо объяснением "как" слова "погуглите" или "введите (куда?!) вопрос" не являются. А весь замах первых главок статьи ушёл в этот абзац. Вроде как предполагается, что все и так всё знают. Но если и так знают - зачем этот текст? Чтобы рассказать, что автор не понимает, что за стрелочки? Так что же за стрелочки? Тоже нет ответа.

    Я вот подумал - техническое описание, которое в результате напишет технический писатель по прочтении этой статьи, тоже будет в этом стиле? Погуглите... Спросите ChatGPT...


    1. tkovacs
      01.09.2024 19:12
      +1

      Тоже смутило, думал будет разбор проекта, какие то примеры от человека совсем не разбирающегося в php, а по итогу остановились на каких то стрелочках. Из этого всего я могу сделать вывод, что у автора не получилось прочитать код проекта)


      1. ElenaShliaga Автор
        01.09.2024 19:12

        К сожалению, я не могу делать примеры на коде, который находится под NDA)

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

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

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


    1. i86com
      01.09.2024 19:12
      +1

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

      Недавно, например, увидел, что время в логах сервера на 3 часа отличается от нужного. Казалось бы, точно помню, что GMT отличается от МСК на 3 часа, но решил навскидку загуглить для верности, и ввёл "мск gmt -3" и в первом же раскрывающемся ответе вижу:

      Сколько Москва GMT?

      Со 2 мая 1924 года московское время стало соответствовать GMT+2.

      Очень смутило на какое-то время, пока не вспомнил, для чего в запросах используется минус.


      1. ElenaShliaga Автор
        01.09.2024 19:12

        Очень интересно. Спасибо! Учту на будущее.


  1. Batorskylab
    01.09.2024 19:12

    Поправьте пожалуйста "Leravel"

    И хотелось бы больше узнать про фасады, а то как-то вскользь упомянули и пошли дальше)
    И да, а что в итоге, какой нашли ответ на вопрос: "Что это за стрелочки в PHP?"

    Складывается такое впечатление, что о самом интересном и не рассказали)))


    1. ElenaShliaga Автор
      01.09.2024 19:12

      Ой, спасибо. Да, Laravel.

      Давайте сегодня вечером раскрою мысль и допишу. Спасибо за комментарий)


  1. FanatPHP
    01.09.2024 19:12

    Еще один загадочный оператор в РНР - это троеточие. Он используется для реализации трёх различных механизмов, причем если первые два хотя бы очень близкие, то третий к ним не относится вообще никак.

    И здесь мы сталкиваемся с очень большой проблемой Stack Overflow (и - как следствие - чат жипити): этот сайт напоминает кладбище, ответы на котором напоминают замшелые монументы, возведенные в незапамятные времена. Сама идея такого Q&A сайта изначально порочна: механизма редактирования информации (как например в википедии) не предусмотрено. Да, можно написать свой новый ответ. Который никто не увидит в самом низу длинного списка реплик, написанных при царе Горохе.

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

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


    1. event1
      01.09.2024 19:12

      Никто не запрещает обратиться к официальной документации. Лично мне гугл выдал её третьей ссылкой.


      1. FanatPHP
        01.09.2024 19:12

        Не очень понятно, зачем вы решили поделиться со мной этой информацией, но раз уж мы все равно здесь, то два уточнения:

        Во-первых, это не совсем та документация. Если, скажем, в работу этого оператора будут внесены изменения, то на этой странице их никто править не будет. Документация на оператор (а не описание нововведений определенной версии языка) - это, скорее, здесь (и вот эту страницу вам гугль покажет куда менее охотно, увы).

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


        1. sshikov
          01.09.2024 19:12

          Кстати, далеко не факт, что у вас двоих третья ссылка в поиске - одна и та же страница.


          1. FanatPHP
            01.09.2024 19:12

            Ну это как раз не принципиально. Первая, пятая - главное чтобы была. А тут как раз проблема в том, что в документации нет единой страницы, которая объясняла бы все варианты, и приходится смотреть по другим источникам.


            1. sshikov
              01.09.2024 19:12

              Во-первых, это не совсем та документация. 

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


              1. FanatPHP
                01.09.2024 19:12

                В случае РНР таких проблем не возникает. Во всех приведенных здесь ссылках фигурирует только официальная.