Контакты

Достижения

Все достижения (7)

Наибольший вклад в теги

Все теги (39)

Лучшие ответы пользователя

Все ответы (117)
  • Что отличает freelance программиста от корпоративного?

    Тут сложный момент. Не рискну говорить за всех, но расскажу о своём личном опыте и опыте моего друга.
    Мне на данный момент 33 и я всю жизнь проработал в офисе, никогда ни одного дня не фрилансил. Хотя понимаю, что во фрилансе больше денег. Но. Находясь в офисе ты находишься во взаимодействии с коллегами, а значит возможен очный обмен опытом, который, как ни крути, более интенсивен и более значим, нежели заочное общение на форумах. Просто потому что очно общаться проще и продуктивнее. Кроме того, для фриланса важна сильная самодисциплина: слишком много дома есть отвлекающих факторов и, лично мне, трудно находясь дома сосредоточиться на работе; далее, я разделяю среду обитания: на работе я работаю, а дома я отдыхаю. Ввиду таковой психологической установки мне трудно дома переключиться на рабочий режим. Ну и плюс к этому, о доходе в полмиллиона деревянных мне можно лишь мечтать, но меня деньги не интересуют как таковые, а потому мотивацией являются не деньги, а делание полезного и большого продукта, т.е. относительно маленькие проекты (с ограниченным сроком разработки и поддержки) меня не интересуют. Потому я всегда работал в ай-ти-шных интернет-компаниях над большими проектами, но никогда не рассматривал возможность трудоустройства в студию.

    Далее про друга. Он фрилансит уже более 10 лет. И, когда начинал, то немного троллил на тему "а я вот не работаю на дядю". Спустя 5 лет, он понял, что всё-таки работает. Но только на много разных дядь.
    Далее, есть момент в сложности самообразования: когда он не взаимодействует с большим коллективом таких же умных людей, то обмен опытом происходит гораздо слабее (писал выше), а потому знания необходимо самостоятельно подчерпывать из разных источников (хабр, англоязычные статьи, книжки, блоги умных разработчиков, и т.д.), но вот ведь вопрос: а когда это всё читать?, и каким образом это можно опробовать (если только не вести собственный(ые) опен-сорс проектики)? А значит, если нет жажды знаний, то варясь в зафиксированном стеке технологий начинается профессиональная стагнация. На что друг стал жаловаться мне 3 года назад: он понял, что очень много не знает, что появилось много нового и интересного, но он из-за того, что "просто решал прикладные задачи конкретного заказа" пропустил это всё. Было интересно за ним наблюдать, когда рассказывал ему про Git, DIC, модульное тестирование и т.д. --- то были удивлённые глаза ребёнка.
    Кстати, о детях. Упомянул выше, что для фриланса нужна сильная самодисциплина. У него тоже было такое: когда начал фрилансить, то он уже жил с девушкой (ныне женой) и она никак не могла понять почему нельзя отвлекать: ну вот же он!, что такого, чтобы помочь что-нибудь сделать по дому по-быстрому (например помыть посуду или вынести мусор): работа ж не убежит?, а что такого, чтобы подойти и спросить что он хочет на ужин? В конечном итоге проблема решилась тем, что договорился с ней о том, что в период с 2-х часов дня до 6-ти часов вечера, она к нему даже близко не подходит, не спрашивает, не отвлекает и вообще старается не шуметь. Вроде, всё стало хорошо... пока не родился ребёнок, а вот там уже не объяснить ребёнку, что папа работает и не надо мешать. Поэтому всё закончилось тем, что он снял комнату в офисе и теперь каждый день, как и многие другие люди, ездит работать в офис.

    Собственно к чему я это всё. И там и там есть плюсы и минусы. И каждый находит и занимается тем, что ему интересно, к чему больше лежит душа.
    Но лично я с большой настороженностью отношусь к найму фрилансеров в штат компании лишь по одной причине: если недостаток знаний всегда можно восполнить общением и обучением, то вот с коммуницированием возникают (по моему опыту) значительные проблемы: нежеление (а иногда и саботаж) в части принятия используемого код-стайла; нежелание исправлять замечания, оставленные во время код-ревью; притаскивание сторонних говно-библиотек без необходимости; нежелание писать модульные тесты; а в отдельных случаях, даже эгоизм. При этом, уточню, что это относится не ко всем! Далеко не ко всем! Во всей моей практике такое было лишь дважды и то были молодые фрилансеры. Так же замечу, что опытные фрилансеры (ввиду большего жизненного опыта) гораздо спокойнее и легче вливаются в команду (такие тоже приходили и у меня был опыт работы с ними).
    Ответ написан
    2 комментария
  • Дает ли строгая типизация в PHP 7 прирост производительности?

    Начал писать ответ комментарий https://toster.ru/answer?answer_id=937197, но ответ получился большим и поэтому решил поместить его отдельно.

    DevMan , я попробую уточнить ваше утверждение, что немного снижает.
    На самом деле, при использовании скалярных тайпхинтов снижается производительность вызова функций, поскольку возникает некий дополнительный оверхед на валидацию аргументов и приведение значений к нужным типам (если не используется strict_types). Но! Так как внутри функции значения аргументов уже приведены к нужным типам, то при использовании аргументов не происходит неявного приведения типа.
    Поясню на синтетическом примере:
    function foo($x) {
        $result = 0;
        for ($i = 0; $i < 100; $i++) {
            $result += $i + $x;
        }
        return $result;
    }


    Если вызвать эту функцию так: "foo('123')", то в таком случае внутри цикла аргумент будет неявно приводится к целому числу 100 раз. Если вызвать функцию так: "foo(123)", то в таком случае аргумент не будет внутри цикла приводится к целому числу. Очевидно, что второй вариант более производительный:
    ~$ time php70 -r 'function foo($x) { $result = 0; for ($i = 0; $i < 10000000; $i++) { $result += $i + $x; } } foo("123");'
    
    real    0m0.860s
    user    0m0.855s
    sys     0m0.005s

    ~$ time php70 -r 'function foo($x) { $result = 0; for ($i = 0; $i < 10000000; $i++) { $result += $i + $x; } } foo(123);'
    
    real    0m0.508s
    user    0m0.500s
    sys     0m0.008s


    В то же самое время, если добавить к аргументу скалярный тайпхинт, то тогда значение аргумента один раз будет приведено к тайпхинту и внутри функции уйдёт весь оверхед связанный с неявным приведением типа:
    ~$ time php70 -r 'function foo(int $x) { $result = 0; for ($i = 0; $i < 10000000; $i++) { $result += $i + $x; } } foo("123");'
    
    real    0m0.502s
    user    0m0.498s
    sys     0m0.003s

    ~$ time php70 -r 'function foo(int $x) { $result = 0; for ($i = 0; $i < 10000000; $i++) { $result += $i + $x; } } foo(123);'
    
    real    0m0.504s
    user    0m0.495s
    sys     0m0.008s


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

    Зато использование строгой типизации не даст запустить функцию в неконтроллируемом состоянии: когда функция ожидает на вход целое число, а по какой-то причине подсунули массив:
    $var = $_GET['foo'];
    bar($var);
    , для get-параметра foo=123 вызов будет корректным, а для foo[]=123 вызов функции приведёт к TypeError; для foo=abc тоже будет TypeError. Разумеется, этот пример сильно надуман и тут нужно использовать "нормальный" валидатор.
    Ответ написан
    1 комментарий
  • PHP функция не видит внешнюю переменную?

    Глобальные переменные --- зло. Не используйте их даже под страхом расстрела.

    Либо используйте ключевое слово "global":
    <?php 
    $nameErr = $emailErr = $genderErr = "";
    
    function checkDone()
    {
        global $nameErr;
    
        if ($nameErr == "") {
            return "true";
        } else {
            return "false";
        }
    }
    
    echo checkDone();


    Либо передавайте переменную для проверки через аргументы функции. См. решение от Макс

    P.S.
    Сейчас 21-й век. Закрывающих тег ("?>") не нужен
    Ответ написан
    3 комментария
  • Как получить GET-данные после решетки?

    1. Это не get-данные. Это называется "фрагмент"
    2. Браузеры не передают фрагмент на сервер, поэтому, в общем и целом, в пыхе его никак не получить.
    3. Можно получить фрагмент в JS и передать на сервер AJAX-запросом.
    4. Или с помощью JS составить новый url и сделать на него перенаправление.
    5. Фрагмент в таком формате обычно предназначеначается для обработки именно JS'ом.
    Ответ написан
    3 комментария
  • Какой PHP фреймворк изучать в 2016 новичку?

    Что ж вы поиском-то не пользуетесь? А если серьёзно, то вопросы на тему "какой фреймворк выбрать" уже набили оскомину и порядком надоели. Выбирайте тот, который вам кажется удобным или перспективным или востребованным.
    https://toster.ru/search?q=%D0%BA%D0%B0%D0%BA%D0%B...
    Ответ написан
    Комментировать