• Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

    * Тестируемость (в смысле простота тестирования) кода должна быть высокая.
    - Покрытие кода обязательно для всех возможных кейсов использования каждого публичного метода с моками зависимостей.

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

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

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

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

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

    Это далеко не полный список требований, очень много зависит от проекта в целом и от принципов, заложенных в нем. Для больших мредж реквестов 200 комментариев к коду - это ок. Дерзайте.

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Можно ли сделать анимацию картинки без знаний JS??

    Stalker_RED
    @Stalker_RED
    Да, можно.
    Ответ написан
    Комментировать
  • Книга о том как правильно должен работать программист?

    un1t
    @un1t
    Чед Фаулер "Программист фанатик"
    Джоэл Спольски "Джоэл о программировании"
    Роберт Мартин "Идеальный программист"
    Том ДеМарко, "Вальсируя с Медведями: управление рисками в проектах по разработке программного обеспечения"
    Том ДеМарко "Человеческий фактор. Успешные проекты и команды"
    Роберт Гласс "Факты и заблуждения профессионального программирования"
    Игорь Савчук "Отъявленный программист. Лайфхакинг из первых рук"
    Питер Сейбел "Кодеры за работой. Размышления о ремесле программиста"
    Хант Эндрю, Томас Дэвид "Программист прагматик"
    Ответ написан
    1 комментарий
  • Книга о том как правильно должен работать программист?

    sim3x
    @sim3x
    1. Пофиг как - если делает работу
    2. Никак не избегать - принять их как данность и фиксить
    3. Делать оценку перед задачей, делать переоценку во время решения, оценивать реальное время -
    после

    Мифический человекомесяц
    Психбольница в руках пациентов
    Ответ написан
    Комментировать
  • Вопрос по архитектуре приложений с Vue.js. Как правильнее?

    kulakoff
    @kulakoff Куратор тега Vue.js
    Vue.js developing
    Напишу свои мысли:

    У ваc скорее всего уже используется vuex для хранения состояния. Если нет, то стоит начать.

    У вас получается есть сложный компонент, который является по сути агрегатором других компонентов.
    Пусть данные компоненты получают и отправляют информацию взаимодействуя с хранилищем, а не с родительским компонентом. Так вы избавитесь от большого количества обработчиков.
    Ответ написан
    4 комментария
  • Наставник для 40 -летнего?

    amsterdy
    @amsterdy
    developer of life
    Добрый день.

    Когда люди говорят, что у них нет навыков / опыта - они ошибаются. Всегда. Это правило без исключений. Опыт или навык всегда есть в достаточном количестве, чтобы начать. Тем более у человека взрослого. Многие просто любят прятаться за этой стеной: «у меня нет навыков, поэтому я не буду этого делать».

    Через правильные вопросы всегда можно собрать горстку необходимого опыта.

    Любовь к точным наукам и использование этих навыков в быту и повсеместно;

    А вот это уже о многом говорит, главное дальше развязывать запутанный клубок.

    Удачи.
    Ответ написан
    Комментировать
  • Bootstrap. Cпор с программистом, как убедить?

    dom1n1k
    @dom1n1k
    Имею опыт глубокой кастомизации Бутстрапа. Глупая была затея.
    Родился такой монстр, который просрал плюсы и сочетал минусы обоих подходов (популярный фреймворк vs самописный велосипед).
    Сильно изменив Бутстрап, убиваются:
    - его обновления и багофиксы
    - совместимость со сторонними плагинами
    - низкий порог вхождения новых людей
    - возможность гуглить решения в случае багов
    Но и самописным велосипедом это тоже не является, потому что сильно завязано на исходную архитектуру. То есть нет полной свободы и гибкости, присущей кастомным решениям. БЭМ-ом там, конечно, тоже не пахнет, откуда идут большие проблемы с независимостью.
    Бутстрап нужно использовать либо как есть, либо с минимальными скинами-стилизациями поверх.
    Ответ написан
    Комментировать
  • Кто ни будь видел сайты с примерами рефакторинга?

    @MoonMaster
    Программист и этим все сказано
    Может быть вы имеете в виду вот этот сайт
    Ответ написан
    2 комментария
  • Как повысить уровень программирования?

    tiabc
    @tiabc
    Бизнес-партнер и консультант по технологиям
    Хорошие разработчики постоянно развиваются и никогда не стоят на месте. Любое развитие состоит в делании дел, в решении конкретных задач и в обратной связи, которую ты получаешь от других или в результате рефлексии.

    TL;DR: Читайте книжки, делайте дела, читайте чужой код.

    Что можно начать делать прямо сейчас, чтобы стать программистом лучше?

    1. Изучайте базу. Алгоритмы, сети, криптографию, архитектуру, ос, устройство браузеров, компиляторы и т.д. Изучение подобных вещей дает понимание какие задачи бывают в реальном мире и как "большие дядьки" решают возникающие проблемы. Это кладезь инсайтов.

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

    3. Написание кода - не самая большая часть работы сеньор-девелоперов, я бы сказал. Но когда речь заходит о самом коде, нужно понимать что ты пишешь и зачем. Есть классические книжки, которые можно найти, например, в матрице компетентности программиста, есть современные, но полезные типа The Art of Readable Code, которую я очень рекомендую. Нужно читать книжки. На собеседовании я всегда спрашиваю какие книжки читал или читает соискатель и если ответ отрицательный, то это большой минус.

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

    5. Наберитесь терпения. Это не случится за один день. Думайте над именованием, разделяйте обязанности, изучайте алгоритмы и экосистему, оптимизируйте ваше рабочее место, изучайте новые технологии, читайте статьи и в течение ближайших лет регулярных усилий вы обретете новый способ мышления и будете разрабатывать поддерживаемое и надежное ПО. Легкого пути, к сожалению, нет.
    Ответ написан
    2 комментария
  • Как сделать такое заполнение тегов как у toster?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    такое вот добавление тегов, как у toster.ru

    это какое? Что в нем не обычного?

    Если кто-то знает сайт, где лежит материал об этом - дайте ссылку

    https://toster.ru

    Ну, а если, кто приведет живой пример - буду ооочень благодарен!

    https://toster.ru

    З.Ы. Не смотрите кино "притяжение".

    Зачем писать само собой разумеющиеся вещи? Земля круглая, политики продажные, фильмы Бондарчука плохие.
    Ответ написан
    Комментировать
  • Как найти команду?

    Простите, а в чём фишка? Ну в смысле по вашему есть некоторые "работающие в офисе" и которых ищут на hh, а есть некоторые продвинутые "командные ребята", которые работают за $ и которых просто так не найти?

    Команда, в которой будет востребован "верстальщик \ фронтенд-девелопер" называется, как мне кажется, веб-студией. Есть достаточно веб-студий, в которых можно поискать работу. Есть немало и специализированных проектов (можете называть их стартапами), вроде нашего например, где тоже нужны хорошие "верстальщик \ фронтенд-девелопер", но при этом это не веб-студии.

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

    Либо я совершенно не понял вашего вопроса, либо у вас странные представления об окружающей действительности.
    Ответ написан
    2 комментария
  • Как опубликовать сайт на Git Pages?

    delphinpro
    @delphinpro
    frontend developer
    На 3 шаге, когда ввожу:
    echo "Hello World" > index.html


    А по-человечески, в редакторе (или IDE), создавать файлы уже не комильфо?
    Просто создайте index.html файл. Это ваша главная страница. Потом пушьте ее в репу.

    Ок, пробую другой урок

    Зачем? Зачем там уроки? Всё что нужно написано на странице https://pages.github.com/ Аж 4 шага!
    1. Создать репу с названием username.github.io
    2. Клонировать репу на свой комп
    3. Создать страницы сайта
    4. Запушить репу в гитхаб
    сайт готов по адресу http://username.github.io
    Ответ написан
    4 комментария
  • Динамческий DOM без HTML и CSS?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Конечно медленнее.

    1. HTML уже на странице
    загрузка HTML -> парсинг HTML -> рендеринг страницы

    2. Только JS
    Загрузка JS -> парсинг JS -> выполнение JS -> вставка кода DOM -> парсинг HTML -> рендеринг страницы

    Вывод очевиден.
    Ответ написан
    Комментировать
  • Как сделать такую область?

    TekVanDo
    @TekVanDo
    Javascript Developer
    Простой вариант, блоку А задать overwlow: scroll (появятся 2 скролла). Либо если нужно перемешаться с помощью драга можно использовать например https://skidding.github.io/dragdealer/
    Ответ написан
    3 комментария
  • Как правильно сделать адаптивную верстку если дизайн разный?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Все вопросы к веб-дизайнеру макетов!
    Ответ написан
    2 комментария
  • Плейсхолдеры в SCSS нужно выносить в отдельный файл?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега CSS
    Ответьте для себя на следующие вопросы:
    1. Что я получу, если сделаю это, какие у такого подхода плюсы и минусы?
    2. Что я получу, если не сделаю этого?
    3. Зачем я написал вопрос на Тостер, когда это только моё дело - куда и что я складываю в своих проектах?
    Ответ написан
    Комментировать
  • Mixin для media query на stylus?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Поражаюсь людям, которые сначала заходят на форум, а потом, не найдя ответа, лезут в гугл.
    Запрос media query stylus, первая ссылка - https://learnboost.github.io/stylus/docs/media.html
    Ответ написан
    1 комментарий