Задать вопрос
  • Куда податься с такими навыками?

    php666
    @php666
    PHP-макака
    Бесполезно ожидать какие-то волшебных советов, если ты сам описал ситуацию, которая к реальности имеет гораздо больше отношения, нежели сказки про фриланс на Хабре. У тебя три выхода:

    1. Удаленная полноценная работа - если найдешь такую. Почему пишу "если найдешь"? Лично я не верю в удаленную работу. Сотрудник должен быть под колпаком, иначе большие риски.

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

    3. Кардинальная смена деятельности. На одном IT свет не сошелся.
    Ответ написан
    Комментировать
  • Куда податься с такими навыками?

    Sanes
    @Sanes
    В офис. Не обязательно там сидеть. Можно удаленно работать.
    Фриланс, это предпринимательская деятельность. Не каждому дано.
    Ответ написан
  • Как правильнее использовать БД в nodejs?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Держать 1 соединение правильнее. Но не всегда хватает. И оно рано или поздно отвалится и нужно будет переподключатся, так как база имеет лимит на простаивающее соединение. Можете почитать о connection pool в Node.js, как их менеджментить и пользоваться.

    Можете об этом не задумываться и использовать query-build'еры, которые сами делают всё, что нужно с соединением. Я предпочитаю Knex - очень прост в освоении и удобен в использовании. Поддерживает callback'и, then и async/await.
    Ответ написан
    Комментировать
  • Литература по базам данных?

    glaphire
    @glaphire
    PHP developer
    Алан Бьюли очень прост, почитать конечно стОит, но скорее для упорядочения текущих знаний, чем получения новых)
    По глубокому пониманию MySQL сложная, но хорошая книга MySQL. Оптимизация производительности. - позволяет взглянуть на многие вещи со стороны "почему так лучше", а не "так принято".
    Ответ написан
    4 комментария
  • Можно ли устриться на работу не имея нормальных проектов?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    хорошо знаю языки <..> знаю где искать ответы конкретно по задаче

    Лол. А я-то всё искал критерий хорошего знания языков.

    В общем главный вопрос: возьмут на работу если не будет ни одного проекта в резюме?

    Веб? Нет. Даже если будут.

    Можно как то по другому доказать что я хорошо знаю языки?

    Можно на Библии или Торе поклясться.

    Слышал там задачки дают и вопросы на собеседовании?

    И ещё спрашивают про опыт, ага.

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

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Нету ничего, что может делать "любой" фреймворк. Есть то, что может делать любой из популярных фреймворков.

    Говоря об бэкэндовых HTTP фреймах, они НЕ занимаются:
    - загрузка классов к этому не относится - этим занимается composer.
    - отображение ошибок так же к этому не относится - этим занимается какой-либо фронтэнд.
    - "готовые методы запросов в базу" так же к этому не относятся - это задача ORM, одну из которых фреймворки обычно предлагают как рекомендованую.

    Они (или предлагаемые ими first-party решения), обычно, могут:
    - раутинг
    - dependency injection/container
    - сессии
    - валидация
    - логирование
    - хэндлинг ошибок
    - работа с файлами
    - кэш
    - очереди
    - консольные команды
    - расписание выполнения чего либо
    - хэши, криптование
    - почта

    Иногда шаблонизатор, аутентификация, авторизация, интернациолизация, веб-сокеты, event bus, тестинг.
    Ответ написан
    Комментировать
  • В чем разница между линтерами, хинтерами, и претиром?

    Adamos
    @Adamos
    и что лучше?

    Лучше - пользоваться IDE, где эти инструменты уже настроены из коробки, не мешают друг другу и позволяют вам не заморачиваться разницей между ними.
    Ответ написан
    3 комментария
  • Как лучше хранить контент в БД: HTML vs MarkDown?

    shai_hulud
    @shai_hulud
    > и возникла идея хранить текст в markdown.
    И решение как сконвертировать в MD уже найдено и оно работает на всех статьях?
    > Вопрос в том, будет ли от этого пользы?
    > Если перенесём всё на markdown, они займут меньше места в БД?
    Стоит проверить с помощью того решения для конвертации что у вас есть. Обычно занимает меньше места.
    > При выдаче на сайте текста статьи, как конвертировать Markdown в HTML?
    Написав код конвертации из MD в HTML. На сервере.
    > Если да, то это большая нагрузка на сервер? (сайт довольно посещаемый)
    В любом случае никто в здравом уме не будет сервить HTML прямо из БД, по любому есть вытесняющий кеш на приоритетах, в котором живет этот HTML и раздается людям. Так что конвертация HTML->MD будет происходить не каждый запрос.

    Если делать на клиенте, то поисковики увидят plain text, а не маркдаун, MD очень похож на обычный текст, так что трагедии не будет. Но у него нет форматирования (заголовки, абзацы) понятного для поисковиков, так что это для них будет как каша из текста.
    Ответ написан
    1 комментарий
  • Происходит ли укрупнение айти-игроков на рынке вакансий?

    opium
    @opium
    Просто люблю качественно работать
    Компании растут саммит по себе, мелкие чаще всего просто умирают, каким то везёт и их покупают
    Ответ написан
    Комментировать
  • Почему так работает в js?Или где моя ошибка?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Никак не обрабатывается ситуация, когда правильно введены данные только в одно поле, поэтому вы видите предыдущий результат.

    А вообще, никакие условные операторы тут не нужны:

    siteForm.userAdmin = loginValue === login && passwordValue === password;
    Ответ написан
    2 комментария
  • На чём писать он лайн билеты?

    ruddy22
    @ruddy22
    Спасение утопающих — дело рук самих утопающих
    тогда откажись
    Ответ написан
    9 комментариев
  • Как узнать значение по хешу MD5?

    Zoominger
    @Zoominger
    System Integrator
    она в MD5. Можно как-то узнать значение по этому хешу?

    Только грубым перебором, что вы и сделали.
    А так - никак, оно для того и придумано, чтобы нельзя было расшифровать, хэширование - односторонняя функция.
    Ответ написан
    4 комментария
  • Как вы учились или как вы считаете чему нужно учить Web-разработчика в ВУЗе?

    php666
    @php666
    PHP-макака
    Современное программирование (особенно веб) вообще никак не связано ни с математикой, ни с алгеброй, ни с геометрией или физкультурой. В большинстве случаев работа программиста - это оперирование абстракциями. Для покрытия 99% бизнеса хватит 5 класса математики.

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

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

    Я в 2001 году, сразу после колледжа, проработал несколько месяцев инженером в IT на ныне покойном ЗИЛе. Потом пошел вышку получать. Как сейчас помню - абсолютное, тотальное нежелание заниматься херотой, которую нам преподавали, особенно когда ты уже работал и трезво понимаешь, что нужно в жизни, а что - нет. Плюнул и ушел дальше работать.
    Ответ написан
    1 комментарий
  • Как вы учились или как вы считаете чему нужно учить Web-разработчика в ВУЗе?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    У меня нет высшего образования и совсем нет желания его получать. Вообще и совсем.

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

    Возможно вы посоветуете что совсем не пригодится если я буду идти именно в web?

    Уточните, что вы понимаете под "Web".
    Если JS, CSS, HTML, то практически ничего, это довольно простая область, там не нужно ни ТПР, ни дифф. и инт. исчисление, ни теория графов, я уж молчу про историю и экологию. Вы особо ничего не потеряете, если не будете учить вузовскую программу.

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

    Добавить нечего.

    UPD: ТС дополнил вопрос:
    У меня есть новый виток вопроса: А насколько полезны курсы - например Яндекса или услуги менторов когда ты джун+ или мидл?

    Менторов - сразу посылать, с чего бы ментору, который, судя по их рекламе, "прафисьянальный программист", собирать копейки с ученика, если он может рубить по 300k в месяц, особо не напрягаясь (с).
    Курсы могут помочь, если у вас уже есть какой-то бэкграунд, без знаний - пустая трата времени и денег. И не ведитесь на "последующее трудоустройство", это развод.
    Ответ написан
    3 комментария
  • Идти на стажировку за бесплатно или учиться дома?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    Идти на стажировку за бесплатно

    This. У вас будет реальный опыт и реальная бумажка, что вас хоть где-то потерпели.

    неплохо в html, css (сверстано порядка 20 одностраничных макетов PSD)

    Фигня.

    сейчас учу основы JS (есть пара работ: todo, calculator, математическая игра с генерацией рандомных примеров)

    Ничто.

    Как бы вы поступили на моем месте?

    Побежал бы на стажировку бегом.

    P. S. А ещё я забыл пункт "целовать ноги тому, кто позвал на стажировку".
    Ответ написан
    1 комментарий
  • Как в докере запустить php-fpm не от рут?

    xEpozZ
    @xEpozZ
    Веб-разработчик
    Комментировать
  • Попросили проверить код, на что смотреть нужно?

    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 комментариев
  • Как не начать говн*кодить?

    banderos120
    @banderos120
    Играю на балалайке
    - Оу, смотрите, я сумел сделать форму и отправить ее POST запросом и вывести ответ и это все в одном файле !
    - Таак, шаблоны на Wordpress, отлично, только что за файл functions.php. О! Анонимные функции я видел такое в JQuery ! Оказывается все так просто.
    - Воот, раскидал функции (процедуры) по конкретным файлам. Думаю так будет удобнее и понятнее.
    - ООП, ооп. Везде требуют ООП. "Классы", "наследование", "инка..." чего ?! Понял ! Классы - это же такая неплохая обертка для моих любимых функций !
    - Ого ! Блин, опять приходится плодить одинаковый функционал. Наверное наследование поможет это исправить. СТАТИЧЕСКИЕ МЕТОДЫ !!!
    - Черт, везде необходимо знание фреймворка. Попробую-ка я Symfony. *!"#$^$&@мать !!! КТо придумал эту хрень ! Месяц прошел я так ничего и не запустил !!
    - Роутинг, хм, толково. Контроллеры. Сервисы. Ага, так вот что означает single responsibility.
    - Ребята ! Я предлагаю не пихать всё в один бандл, а разделить.
    - ORM, репозитории, сервисы, сущности ...
    - ТАК ВОТ ЗАЧЕМ НУЖНЫ ИНТЕРФЕЙСЫ !
    - Чё за "бизнес логика" такая ? DDD ? Чта, простите ?
    - Б*я, б*я, б*я... Так, если эту сущность вынести в этот модуль, то тогда у нас появляется зависимость в вот этом модуле, а это не хорошо. Блин, этот метод вообще не несет смысла. Тааак, а тут стандартный Chain Responsibility . Отлично, напишу-ка тест под это дело.
    - Да пофиг, что по CQRS команда не должна возвращать результат, мне так удобно.
    ...
    - Да Сережа, делать вот как ты делаешь - это и есть говнокод.
    Ответ написан
    Комментировать
  • Как перестать говнокодить и принимать неверные архитектурные решения?

    miraage
    @miraage
    Старый прогер
    как писать поддерживаемый код?

    Если уж очень коротко, то соблюдать SOLID/GRASP. Мне понравился твит одного из авторов React Router:
    https://twitter.com/mjackson/status/1171524189850701825

    Most common mistake software developers make: putting stuff in the wrong place. Coupling responsibilities and concepts that should be kept separate.
    For me, this is 95% of software development. Just figuring out *where* things belong.


    Что гуглить, что учить?

    Фундаментальные знания, вроде вышеупомянутых SOLID/GRASP, паттерны (не только классические паттерны, но и вообще, общеизвестные решения определённых задач), базовые структуры данных. Фреймворки/библиотеки всегда будут приходить/уходить, что-то будет забываться. А фундаментальные знания всегда актуальны.

    Может литературу какую почитать посоветуете?

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

    Можно ли себя называть миддлом, если твой код говно?

    Не пытайтесь себя оценить. В каждой компании свои понятия миддла. А если кто-то 35 лет на лиспе кодил, а потом прыгнет на Angular - кто он, джун или сеньор?
    И, да, все мы в какой-то степени пишем говнокод. Если кто-то Вам доказывает, что он пишет супер чистый код - не слушайте.

    И ответ на главный вопрос.
    Как перестать говнокодить и принимать неверные архитектурные решения?

    Это невозможно. Все проекты, которые чуток сложнее CRUD-ов, рано или поздно обрастают говнокодом. Никто не пишет идеальный код. Код должен работать и решать проблемы бизнеса.
    Ответ написан
    6 комментариев