• Заказчик сует доработки очень маленькими порциями, как брать оплату?

    alex-1917
    @alex-1917
    Если ответ помог, отметь решением
    В чем проблема потребовать оплату за то, что:
    1. Уже сделано.
    2. Стоимость уже сделанного была проговорена ранее.

    Мягкотелость автора вопроса зашкаливает, ппц.
    Зачем сунулся в фриланс? Если нет силы воли администрировать))) клиента, отдай это дело разбирающемуся в этом нелегком деле! Работай в офисе!

    Выше (или ниже) правильно посоветовали:
    1. Минималка час (полчаса тоже ниочем, слабохарактерная уступка)
    2. Время реагирования на задачу - минимум 12 часов.
    3. Ну и самое главное - не бойтесь ставить нормальное время на выполнение, коэффициент два-три это как минимум))) Т.е. если по факту вы тратите два часа на доработку - ставим ШЕСТЬ! и т.д. Иначе вы будете пахать без остановки, а жизнь будет проходить мимо вас....

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

    а если за 2-5 минутную правку брать как за пол часа, то может уйти и к другому специалисту.

    по 15летнему опыту - никуда он не уйдет

    судя по всему, вы человек-оркестр - это тупиковая ветвь развития!!! Делайте то, что делаете отлично, а мелочевку типа наполнить текстом или поправить заголовок - это пусть делают рукунабивающие)))) Судя по 2-5 минутные правки - это именно и есть задание по текстам)))
    Ответ написан
    8 комментариев
  • Заказчик сует доработки очень маленькими порциями, как брать оплату?

    opium
    @opium
    Просто люблю качественно работать
    Тут просто надо вложить это изначально в стоимость и не надо его отучать.
    Например у меня есть заказчик который никогда не заказывает без скидки, хоть убейся ему нужна скидка, всегда наценяю ему двадцать процентов, потом даю скидку двадцать процентов, он раз как ребенок, и понятное дело что его тут вопрос денег не сильно волнует, но убеждения какие то толкают на обязательное получение скидки
    Ответ написан
    10 комментариев
  • Что вы для себя взяли из php7?

    @neol
    ИМХО направление развития PHP сейчас идёт с большим уклоном не на новые возможности, а на уменьшение количества способов выстрелить себе в ногу (если посмотреть на список всего того, что выкинули или объявили устаревшем в 7.0 - 7.2). Во всё большем количестве случаев PHP оставляет только один способ сделать что-то и даёт всё меньше возможностей сделать чёрт знает что. Лично для меня вот это значительно приятнее, чем мешочек синтаксического сахарка, который добавили (или не добавили) в очередной версии. Всё же PHP чаще ругают за то, что он слишком уж многое прощает и тащит груз не самых удачных решений из прошлого, а не за недостаток возможностей. И зачастую небезосновательно.
    Ответ написан
    Комментировать
  • Что вы для себя взяли из php7?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    * scalar type hinting
    * return type hinting
    * ??
    * \Throwable
    * Nullable
    Ответ написан
    Комментировать
  • Как въехать в программирование (ООП, паттерны)?

    GTRxShock
    @GTRxShock
    SA
    если программируете на php 2-3 года, то пора бы перед сном почитать РНР: объекты, шаблоны и методики программирования (Зандстра) желательно в бумажном варианте.

    + Паттерны проектирования (Фримен) для общего/наглядного понимания паттернов
    + www.phptherightway.com основные тезисы
    + Рефакторинг: улучшение проекта существующего кода (Фаулер) & https://refactoring.guru/ru на будущее, к чему стремиться :)
    Ответ написан
    4 комментария
  • Могу ли я отказаться от проекта?

    @Posigrade
    закончить надо через 3 недели. В силу не знания данной технологии, сжатости сроков и не резонности ее изучения, т.к. уже 5 версия, могу ли я отказаться от проекта?

    Отказываться нельзя! Но священный долг любого нормального сотрудника состоит в том, чтоб в таске отписаться: "Я сожалею, но (как я говорил при приеме на работу) эта технология мне не знакома, поэтому в 3 недели я точно не уложусь. Предполагаю, что путем героических усилий уложусь в 6-10 недель. И поставить срок выполнения - 8 недель". А начальство пускай принимает решения: либо перекидывает проект на кого-то другого, либо соглашается с 8 неделями, либо придумывает, что-нибудь свое, - о всех этих вещах у простого работника голова вообще болеть не должна, ему за это не платят, это не его уровень принятия решений. Если уволят (а это возможно), то порадоваться, что ушел не сорвав сроки и не завалив проект (адекватность в таких вопросах ценится, поэтому расстанетесь полюбовно), и через пару дней устроиться в другое место.
    Ответ написан
    Комментировать
  • Какие есть курсы для php разработчика среднего уровня?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Я конечно на уровне джуниора (7 мес), но курсов уже не найти... по крайней мере они дадут 20% от своей эффективности... именно из курсов могу посоветовать мастер-классы Елисеева (раз и два).

    Как правило нужно больше работать с документацией — да, прямо брать мануал MySQL, PostgreSQL, Yii2, Symfony, Laravel и все проштудировать — уже есть понимание большого количества применения написанного и их особенностей, если у вас конечно средний уровень... особый акцент нужно сделать на архитектуре — советую проникнуться DRY, KISS и обязательно GRASP, научиться в автотестирование (Codeception, PHPUnit, Selenium)... и практикам разработки (TDD, BDD, DDD)

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

    Главный совет — найди работу. Например моя статья о том, как я искал (+ пару лайфхаков)
    Как джуниор-разработчику найти работу (vc.ru)
    Работа дает взрывной рост навыков (конечно если не клепать сайты на ЦМС и не работать чем-то вроде дизайнопрограммистом :)
    Ответ написан
    1 комментарий
  • Как решить проблему задвоения аккаунтов при регистрации и входе через соц. сети?

    neuotq
    @neuotq
    Прокрастинация
    Если регистрация с email адресом, то по возможности вытаскивать email из соц сетей и автоматически привязывать у пользователя эту соц сеть. Если соц сеть не дает email, то при первом входе насильно требовать завершения регистрации через указания email, далее проверяется есть ли этот пользователь уже в базе - тогда говорим нужно авторизоваться и после логина привязываем соц сеть, если такого email нет, то регистрируем нового пользователя с записью этого email в качестве основного + привязка соц сети + пароль(уже по желанию).
    Ответ написан
    2 комментария
  • Разве Composer бесполезен в 2017?

    search
    @search
    мама говорит что я особенный
    Композер - это, пожалуй, лучшее что произошло с пхп 5й версии.
    Валить или переубеждать тимлида - это по сути одно и тоже, если присмотреться. Просто демонстрация вашей неспособности брать на себя ответственность.

    Года 3 назад на моей прошлой работе в команду пришел очень толковый проактивный человек, который никого не стал переубеждать. Он просто стал делать правильные вещи. Без объяснений. И без приглашений. Коммитеть юнит тесты. Подключать линтеры. Деклайнить неудачные пулл-реквесты. В итоге он сам стал тимлидом где-то через год.

    Такие дела.

    Не у всех, правда, стальные яйца. Но за проактивность никогда еще не увольняли. Если вы уже создали пулл реквест, то "переубеждение" становится задачей тимлида.
    Ответ написан
    3 комментария
  • Насколько у меня правильный код ООП php?

    Kwisatz
    @Kwisatz
    Больше web-приложений, хороших и разных
    Основные ошибки уже указали выше. Кроме того пишите классы с большой буквы. И класс лучше называть Connector а не connect. Вы работаете с объектами.

    Вам важно понять что ООП вырос не просто так. Одни из основных целей это ускорение разработки и простота поддержки. Ваш код должен быть написано таким образом, чтобы легко манипулировать объектами. Упрощенно $lion->eat($meat); Просто, понятно, коротко 8)

    Кроме того по ошибкам выше. Почитайте про DataMapper/ActiveRecord
    Ответ написан
    Комментировать
  • Насколько у меня правильный код ООП php?

    @D3lphi
    Здесь плохо всё, к сожалению.

    Начнем с того, что вы неверно наследуете классы. Почему у вас класс, отвечающий за подключение к базе данных является родителем класса, работающим с заказами? Наследование применяется, если можно сказать, что что-то является чем-то. Например, разработчик является работником; компьютер является устройством и тд. Здесь же у вас вообще близко такой логике не получится следовать. Вы должны передавать хотя бы объект для работы с бд через инъекцию, например, в конструктор. В идеале, нужно использовать паттерн репозиторий для работы с базой данных.

    Класс SearchOrder у вас не только выполняет запросы, но еще и работает с данными, хранит состояние этих самых данных, фильтрует данные (strip_tags()). Непорядок. Это все нужно разделять. У вас вообще получаются какие-то богообъекты, которые умеют во все.

    Вы каждый раз повторяете строки с подготовкой запроса, биндингом параметров, отправкой запроса и тд. Не думали, что неплохо бы было написать какую-нибудь обертку и выполнять запросы как-нибудь так:
    $result = $wrapper->select("SELECT * FROM `tablename` WHERE `id` = :id", ['id' => 5]);

    ?

    Вы вызываете connect() в методах. То есть, каждый вызов этого метода будет приводить к установке нового соединения с базой данных, даже если оно уже было установлено. Соединение с базой данных это достаточно дорогостоящая операция.

    Зачем вы используете свойства, если можно обойтись обычными локальными переменными:
    $this->orderID = (int) strip_tags($orderID);
    $this->column = (string) strip_tags($column);
    $this->value = (string) strip_tags($value);

    ?

    Почему вы стриппите тэги у идентификатора? вы настолько не уверены в том, что влетает в функцию:
    strip_tags($orderID);
    ?

    Если вы не используете php 7 и, как следствие, скалярный тайпхинтинг, то должны делать проверки на тип входящего аргумента. Если что-то не так с типом, бросаем исключение (А не приводим его к нужному)! Например:
    if (!is_string($arg)) {
        throw new InvalidArgumentTypeException('string', $arg);
    }

    Это в идеале. Вы не обязаны это делать, конечно же. Но вот такие проверки делают приложение безопаснее. Хотя, опять же, повторюсь, в 2017 нужно начинать новые проекты на php 7.1+.

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

    Кроме всего прочего, почитайте про стандарты оформления кода. Вы им не следуете.

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

    Желаю успехов!
    Ответ написан
    1 комментарий
  • Что посоветуете еще подучить что бы тянуть на Junior PHP разработчика?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    По Юнит-тестам крутейшее видео (7 часов :) https://www.youtube.com/watch?v=gRmEpUYaS20&list=P...

    от себя добавлю -- нужно знание фреймворка, сам недавно устроился, тестовые почти все дают такого плана -- сделай простейший REST API. Ну и резюме хорошее, много писем и звонков, как писали выше, на Джуна и с меньшими навыками устраиваются. Да, тесты от джунов не всегда требуют, тк в компаниях не всегда их пишут :)
    Ответ написан
    4 комментария
  • По какому принципу создавать контроллеры в MVC?

    BoShurik
    @BoShurik
    Symfony developer
    Catalog
        Controller
            Admin
                ProductController.php
            ProductController.php # ReviewManager используется тут
        Entity
            Product.php
            Review.php
        ReviewManager.php
    Order
        Controller
            Admin
                OrderController.php
            OrderController.php
        Entity
            Order.php
            Item.php
    User
        Controller
            Admin
                UserController.php
            UserController.php
        Entity
            User.php

    либо
    Controller
        Admin
            Catalog
                ProductController.php
            Order
                OrderController.php
            User
                UserController.php
        Catalog
            ProductController.php # ReviewManager используется тут
        Order
            OrderController.php
        User
            UserController.php
    Entity
        Catalog
            Product.php
            Review.php
        Order
            Order.php
            Item.php
        User
            User.php
    Catalog
        ReviewManager.php

    как больше нравится

    Не уверен нужен ли ReviewController, зависит от функциональности. Если это просто виджет на странице с недавними товарами, сделал бы в публичном ProductController
    Ответ написан
    Комментировать
  • Как развить навык проектирования приложения или как стать Senior?

    @OldCrazyCoder
    Писать код. Читать код. Например, популярные опенсорсные проекты на гитхабе. Если очень уж книгу хочется, то вот минимальный джентельменский набор:
    1. Совершенный код. С. Макконнелл
    2. Чистый код: создание, анализ и рефакторинг. Роберт Мартин
    3. Приёмы объектно-ориентированного проектирования. Паттерны проектирования. Банда четырех))
    4. PHP. Объекты, шаблоны и методики программирования. Мэт Зандстра
    5. Рефакторинг: улучшение существующего кода. Мартин Фаулер
    И т.д. Книг крайне много. И статей много. И простое их чтение мало что даст. Практика, много практики. Критичное отношение к своему коду, однако без перегибов - не стоит упираться в перфекционизм.
    Ответ написан
    Комментировать
  • Как развить навык проектирования приложения или как стать Senior?

    devspec
    @devspec
    Помогло? Отметь решением
    Вам помогут только время и большое количество реализованных проектов. Всё приходит с опытом.
    Я, например, каждые полгода делаю ревью собственного кода за предыдущие полгода и ужасаюсь - как я мог так писать? А ведь полгода назад я мнил себя профессионалом... и так каждые полгода ))
    Ответ написан
    2 комментария
  • Как решать конфликты интересов между клиентами фрилансера?

    begemot_sun
    @begemot_sun
    Программист в душе.
    Нет не должен. Это не клиента дело с кем вы работаете и что вы делаете конкуренту.
    Ответ написан
    13 комментариев
  • С чего начинать проектировать приложение?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    1. ТЗ
    2. Мокапы страниц
    3. Базовая архитектура приложения
    4. Реализация задачи с ТЗ
    5. goto 4
    Ответ написан
    Комментировать
  • С чего начинать проектировать приложение?

    ColCh
    @ColCh
    Веб разработчик
    Проектирование нужно начинать с архитектуры. Основная идея - разбить систему на модули, каждой из которых выполняет свою задачу (single responsibility principle). Каждый модуль содержит компоненты. Компоненты в модулях сильно связны (cohesion) и слабо связаны (coupling). Каждый составной элемент - чёрный ящик, куда подаётся и выводится информация. Для устойчивости нужно интерфейс у этих ящиков документ документировать. Для построения API рекомендую building apis you won't hate.

    Начинайте проектировать сверху, а имплементировать - снизу.

    Ещё пара, но это уже advanced и немного мимо кассы ... вместо наследования используйте композицию. Поймите принципы ООП и ФП, используйте иммутабельность там, где нужно часто проверять, изменились ли данные...
    Ответ написан
    Комментировать
  • С чего начинать проектировать приложение?

    @sergey_privacy
    Админ со стажем, начинающий DevOps
    Сперва постройте подробное ТЗ, чтобы самому определиться с функциональностью приложения. Иногда мелочи бывают неочевидными, наталкиваешься на них на этапе реализации и под них приходится перепроектировать БД, переделывать кучу запросов, чтобы добиться нормального быстродействия. После составления ТЗ делайте правильное проектирование БД, закладывайте возможность ее роста. Заложите возможность масштабирования, добавления новых полей в ПО. Потом начинайте клепать фронтэнд, добавляя функционал бакэнда по мере работы и тут же проверяйте работу фронтэнда. Некоторые задачи не дадут вам выбирать порядок действий, исходные условия могут заставить вас поменять порядок действий. К примеру, БД может быть импортирована из другого проекта, вас могут привлечь к разработке или расширению фронтенда для существующего бакэнда.
    Ответ написан
    1 комментарий