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

    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 комментариев
  • Идентичность отображения шрифта в PSD и в браузере, CSS настройки. Как сделать?

    Lynn
    @Lynn
    nginx, js, css
    Никак. Забудьте об этом. Вы не должны этого хотеть.
    Ответ написан
    Комментировать
  • Как объяснить девушке что такое "некрасивый" код?

    ManWithBear
    @ManWithBear
    Swift Adept, Prague
    Не красивый код не возбуждает.
    Ответ написан
    2 комментария
  • Путь программиста.Стоит ли?

    @umno
    Делайте и то и другое! Учите языки и пытайтесь набрать максимальный балл по ЕГЭ, чтобы получить образование. И главное, не жалейте себя, пока есть молодость и силы - выкладывайтесь по максимуму. Тогда в зрелом возрасте сможете раскурить сигару на Кубе и вспомнить свои подвиги )
    Ответ написан
    Комментировать
  • Путь программиста.Стоит ли?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Не важен путь, который выберете вы. Важно то, как вы его пройдете.
    Самообразование - ключ к любой профессии. Никто и никогда вас не станет ничему учить. Забудьте об этом, все только сами.
    Как, по-вашему люди из самых запдрыпанных мест становятся великими? Трудом.
    Учитесь тому, что интересно. Хотите GameDev? Без проблем. Сейчас осень, впереди зима и весна. Садитесь за Java или Swift. Напишите к лету приложение и разместите его в магазине. Будет настоящий незаменимый опыт. Потом еще и еще. Не сразу, но начнете на этом зарабатывать. Было бы желание, остальное приложится.
    И к экзаменам тоже можно подготовиться. И сдать их на отлично самому. Не смотрите на ленивцев вокруг. Они вас кормить не станут. Они так и дальше будут сосать пиво из бутылочки и сидеть на шее у родителей до последнего.
    Или вы тоже хотите пойти на стройку, чтобы зарабатывать на пиво? Тогда вперед.
    Ответ написан
    Комментировать
  • С чего начинать развиваться веб-дизайнеру?

    @eoffsock
    Кодер (Rails)
    Первый этап — подумать, надо ли это вам вообще. К хорошему дизайну на кривой козе не подъедешь.

    Прежде всего: Майк Монтейро «Дизайн — это работа». Даже если не будете потом заниматься дизайном — книга все равно полезная.
    Во многом избавляет от романтического подхода вроде «дизайнер — это художник».

    Второй этап — учиться: смотреть и делать свое.
    Только, во имя всех скандинавских богов, смотреть не на Behance и Dribble. Там красиво, конечно, стиль, все дела, но в конечном итоге 95% работ там просто картинки.
    А веб–дизайн — в первую очередь сценарий. Дизайнер определяет то, как пользователь будет пользоваться сайтом: в его власти сделать интерфейс простым и ясным или запутать до невозможности.
    Посмотрите работы бюро Горбунова, особенно процесс создания.

    Соответственно свои работы тоже нужно рассматривать с точки зрения полезного действия, а не внешней красоты. Эстетика — это третий этап.
    Учиться значит читать, в первую очередь. Чтобы делать правильно — нужна система.
    Читать лучше от общего к частному, начать стоит с этого:
    Дональд Норман «Дизайн привычных вещей»
    Виктор Папанек «Дизайн для реального мира»
    Параллельно:
    Генрих Альтшуллер «Найти идею»
    37Signals «Getting Real»

    Веб — это интерфейс, значит:
    Джеф Раскин
    «Новые направления в проектировании компьютерных систем», «Об интерфейсе»
    Брюс Тогнаццини «Главные принципы интерактивного дизайна»
    Якоб Нильсен «Веб-дизайн. Книга Якоба Нильсена»

    Веб — это шрифт и текст, стало быть:
    Ян Чихольд «Новая типографика»
    Эмиль Рудер «Типографика»
    Нора Галь «Слово живое и мертвое»
    Саша Карепина «Искусство делового письма»

    Веб — структура и верстка:
    Тим Харровер «Настольная книга газетного дизайнера»
    Мюллер-Брокман «Модульные сетки в графическом дизайне»

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

    @Chekhoved
    Важна, если это корочка хлеба. Вдруг придется в очереди ждать, будет чем перекусить.
    Ответ написан
    2 комментария
  • Какие книги нужно читать, если хочешь изучить HTML5, CSS3, JavaScript?

    @jackroll
    Сверхразум
    Ты сейчас делаешь следующее: "сейчас я хорошенько поузнаю, что мне нужно учить, а учить буду потом". Когда этот этап пройдёт, ты будешь думать "так сейчас надо найти самые лучшие книжки и курсы, а потом буду их читать и учить". Когда найдёшь - "так, нужно почитать программач ещё разок, чтобы быть в курсе, не изменилось ли чего". Потом "ага, надо ещё работы посмотреть на данный момент и сделать проекцию в будущее, чтобы предположить свой заработок". И после ещё десятка таких типа-как-небесполезных откладываний ты либо найдёшь какую-то другую великую цель для себя, либо попробуешь начать изучать то, что подготовил, но не протянешь дольше недели.

    Это я к тому, что из этого паттерна прокрастинации и фантазий нужно выбираться прямо сейчас, а не потом. Если ещё более прямо надо - бери любой язык и учи его месяц, не тратя время на всякую чушь. Иначе гроб.
    Ответ написан
    Комментировать
  • Для чего программисту математика?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    процент за вывод с Одеска считать
    Ответ написан
    3 комментария
  • Какой язык выбрать для написания desktop приложений для Linux?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    MONO, чтобы не менять язык
    С++/Qt, если вам нужна скорость
    Python/Qt, для всего остального
    Ответ написан
    6 комментариев
  • Верстка -> Frontend -> Full Stack developer - какой оптимальный путь развития?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    что бы быть full stack вы должны понимать что происходит на каждом уровне вашего приложения. от кнопочек которые вы верстаете, до того как обрабатываются запросы на сервере, в плодь до взаимодействия с базой данных через все прослойки.

    Вне зависимости от выбранного языка или фреймворка, принципы остаются примерно те же. С Symfony мы можем говорить о гексагональной архитектуре, луковой архитектуре, data mapper и т.д. С nodejs мы тоже можем обо всем этом говорить но там не особо развиты идеи data mapper (на данный момент). Приходится жить с active record или dbal. Ну и опять же управление зависимостями в js и в php по разному организованы, хотя суть (dependency inversion) остается той же.

    Единственный совет дам - не распыляйтесь. Старайтесь не переключаться между фронтэндом и бэкэндом слишком часто, это уменьшит скорость обучения. Большая часть знаний в принципе спокойно мигрирует из одной сферы в другую, так что не переживайте.
    Ответ написан
    Комментировать
  • Для каких задач используется Haskell?

    MegaMufa
    @MegaMufa
    1. см пункт 3
    2. Мое личное мнение - все равно с какого языка начинать. Но я бы на вашем месте начинал с чего-нибудь другого. Haskell не сильно востребован на рынке и работу будет найти сложно, а зарабатывать надо. Поэтому лучше начните с мейнстрима, а потом учите Haskell.
    3. Практически что угодно можно на нем писать. Чистые функции очень хорошо параллелятся. Из самого известного на мой взгляд xmonad - тайловый оконный менеджер для linux.
    4. www.ozon.ru/context/detail/id/8696277 - прекрассная книга. Интересно и все по полочкам. Сам по ней учил.
    ohaskell.dshevchenko.biz/ru/chapters.html - тоже хороший учебник, но здесь построение материала другое.
    5. Если ваша цель - найти работу, то, думаю, нет. ВАкансии существую, но их очень мало. Если вы хотите изучить другую парадигму программирования, то однозначно стоит. Так же Haskell очень красивый язык. Мне он нравится в первую очередь из-за синтаксиса. Ну и это чистый функциональный язык. Кто знает Haskell - тот знает ФП.

    Вот интересный пост на хабре от менеджера команды, которая использовала Haskell в продакшене. habrahabr.ru/post/193722 Как всегда в комментах очень много интересного.
    Ответ написан
    4 комментария
  • Есть ли хорошие видеоуроки по Django на русском?

    @Mintormo
    Ответ написан
    Комментировать
  • Как учить Angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) учим javascript на нормальном уровне (с осознанием что такое контекст, скоупы, замыкания, прототипное наследование и как вообще ООП в js устроено)
    2) разбираемся с MVC и прочими штуками
    3) далее читаем документацию к ангуляру и паралельно гуглим статьи отдельные и все такое
    4) далее читаем angular styleguide (можно паралельно с документацией)

    Все пункты подкреплять практикой.
    Ответ написан
    2 комментария
  • Зачем видеоуроки программисту?

    @deliro
    Потому что обезьянки настолько обленились думать, что просто готовы в точности повторять действия за скринкастером.
    Ответ написан
    6 комментариев
  • На PHP и Python возможно реализовать одинаковые по функционалу сайты, или какой-то язык мощнее другого?

    @deliro
    На любом языке, полном по Тьюрингу можно написать всё, что хочешь. Но твой вопрос всё равно удалят, ибо он убог.
    Ответ написан
    Комментировать
  • Как разделить строку на список с элементами, сгруппированными по парам (Python)?

    @brake
    >>> a = "abcdefgh"
    >>> map(''.join, zip(a[::2], a[1::2]))
    ['ab', 'cd', 'ef', 'gh']
    >>> map(''.join, zip(*([iter(a)]*2)))
    ['ab', 'cd', 'ef', 'gh']
    Ответ написан
    1 комментарий
  • Как разделить строку на список с элементами, сгруппированными по парам (Python)?

    bobrovskyserg
    @bobrovskyserg
    s = "0123456789"
    print([s[i:i + 2] for i in range(0, len(s), 2)])
    Ответ написан
    Комментировать