All streams
Search
Write a publication
Pull to refresh
43
0
Александр Чепайкин @alexgreendev

Senior Developer в финтехе

Send message

Конечно используют разный логин. Это мой ответ на предложение выше "Включить авторизацию на уровне СУБД" как решение проблемы SQL-инъекций. Это само собой всегда должно быть.

Мало того, что разработчики могут написать SQL запросы неоптимальные или опасные

Разработчики делают это и без ORM.

с добавлением ORM теперь еще и ORM начинает спамить базу невероятным трафиком и также неоптимальными запросами.

Если только люди не понимают как работает ORM и даже не проверяют какой запрос сгенериться в их коде. Но чаще всего проблема в непонимании внутреннего устройства БД. ORM используют разработчики и это их ответственность, понимать как это работает. Когда я вижу, что запрос будет неэффективен причина не в том, что ORM его не правильно генерирует, а в том, что разработчик не понимает, что это неэффективно. Т. е. он знает какой будет запрос, какой он индекс создал, и просто не понимает что не так. Писал бы он на SQL, сделал бы тоже самое.

Можно ли винить ORM в том, что разработчик не понимает как она работает или не понимает впринципе как писать эффективные запросы и создавать эффективные индексы?

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

Спасибо за комментарий)

Решениe 1. Включить авторизацию на уровне СУБД

Так мы ограничим изменения схемы БД и возможно что-то еще, но проблему это не решает.

Решение 2. упаковывать параметры и значения в json далее распаривать их в CTE

Не выглядит как оптимальное решение, когда речь идет о таблицах с сотнями млн. записей или может я не верно интерпритировал пример. Использую SQL не хотелось бы жертвовать производительность. Тогда уж лучше на ORM написать. И на первый взляд читаемость тут не сильно лучше.

Я бы скорее использовал что-то вроде Query Builder, котороый будет в SQL вставлять нужные параметры (маппить по определенному синтаксису). Так мы будет иметь и читаемый SQL (без CTE и подзапросов с OR) и не будет проблем с инъекциями, производительностью.

Пример ниже. Обратите внимате тут нет f-string это аля синтаксис который понимает метод build_query.

def get_books(conn, name, author):
    query = "SELECT * FROM books"
    params = []
    where = []

    if name:
        where.append("name = {name}")
        params.append(name)

    if author:
        where.append("author = {author}")
        params.append(author)

    if where:
        query += " WHERE " + " AND ".join(where)

    query, params = build_query(query, params)
    return conn.execute(query, *params)

Как-то аналитик быстрее понимает SQL, чем ORM.

Всегда можно посмотреть, что генерирует ORM.

Спасибо за комментарий) По поводу производительности согласен стоит добавить не много. Но не соглашусь, что это основной фактор выбора.

Тут важно понимать что сравнивать производительность запроса в БД с ORM и SQL смысла нет. Все зависит от того, какой SQL в итоге генерируется и на этом уровне все в порядке, если вы всегда проверяете, что генерирует ORM и умеете с ним работать.

У нас в проекте на 20млн+ пользователей ORM никогда не являлась узким местом.

Если говорить про накладные расходы CPU связанные с дополнительной логикой на создание итогового SQL запроса через ORM, но тут оверхед небольшой и даже с нашей нагрузкой он значения не имеет. Даже если бы у нас было сотни миллионов пользователей это экономия условно 1% CPU, что конечно тоже хорошо, но вряд ли оправдает полный отказ от ORM. Даже если запросы в приложении писали бы на SQL, то как минимум для миграций и админки все равно бы использовали ORM, а там производительность не критична. Опять же, какой запрос генериться в миграциях\запросах просто надо проверять всегда.

В работе с БД узкими местами как правило становятся не ORM, а запросы с агрегацией, неверные запросы\индексы, большое колличество индексов\FK и т.д. И тут подходы оптимизации не зависят от того на SQL вы пишите или на ORM.

Если ORM не предоставляет возможность написать запрос так, как вам нужно, то конечно просто пишите на SQL. Часто люди просто ищут причины не изучать ORM.

Основной спор - это "логика в приложении" vs "логика в СУБД". А вы рассматриваете (немножко) лишь первый вариант. Посему основная направленность в сторону ORM совершенно неудивительна.

логика в СУБД это не много другое (функции, процедуры и т.д.). Она может быть и при использовании ORM в проекте и без. Да, в статье все про логику в приложении.

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

Бывает что кто-то даже зная про инъекции, все равно совершал такую ошибку просто случайно. Хотя это всегда должно присекаться на код ревью. Ну и конечно навички часто ошибаются тут тоже мало что можно поделать. Научатся, я не был бы так котегоричен :)

А ещё в том, что кто-то поленился написать универсальную хранимую процедуру фильтрации.

А вот это уже про логику в СУБД, о чем я возможно напишу отдельную статью)

Да ничего ORM не оптимизирует! как сляпалось, так и ладно, сервер колом не встал - уже хорошо.

Спасибо поменяю формулировку. Хотел сказать, что ORM генерирует SQL-запросы в соответствии с API конкретной СУБД. Оптимизация производительности всегда лежит на плечах разработчика и его понимании, что он делает.

DBA и инженеры по оптимизации

Я когда-то был человеком, который ревьюит все запросы и миграции в проекте. Миграции там писались на SQL и могу сказать, что проблема не в использовании ORM. С ORM просто добавляется еще фактор, что человек мог не проверить какой запрос она генерирует.

Так что работа для DBA и инженеров в любом случае будет, пока есть разработчики, которые не понимают внутреннего устройства БД и тут не важно на SQL они пишут или на ORM.

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

Каждое слово в рекламе как правило было протестировано и добавлено так как повышает конверсию продаж. А если конверсия растет благодаря ложным обещаниям, значит и люди, которые в это верят, есть.

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

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

Да есть те, кто рассматривает курсы просто как дополнительный источник информации, но сейчас таких студентов меньшинство. Наоборот, на вопрос почему купил курс отвечают, что все в одном месте и больше ничего не нужно (как им кажется)

Да, вы правы. В худшем случае сложность O(N^2). Я даже написал это в таблице, но потом посмотрел и выглядело перегрузом информации не много и удалил. Как я написал в начале статьи, все что тут рассматривается нужно дополнительно изучать в других источниках/книгах и т.д. Статью стоит воспринимать как роадмап, чем она и является.

ТГ указан еще в начале статьи. А сама статья написана, чтобы привлечь работодателей и рассказать, как обучаются потенциальные кандидаты. То чем я занимаюсь это не бизнес и заработать на этом сложно (ну или я пока не знаю как). Из десятков людей, которые мне пишут с Хабра я пока никого не взял на обучение. Посмотрите главу про трудостройство. Первое время я писал в ТГ чатах например вот этот пост и писал на почту компаниям.

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

Почему я этим занимаюсь подробно ответил в этом комментарии. Эта ссылка тоже есть в начале статьи. Мне это просто нравится.

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

Но я не спорю, статья действительно реклама. Но, на мой взгяд, экологичная.

Так что если в вашей компании готовы рассмотреть хорошего Junior Python, буду рад обменяться контактами. От себя могу пообещать, что буду рекомендовать только подготовленных людей.

Да, согласен. После онлайн школ, как правило, люди еще не умеют программировать. Чаще всего они могут что-то сделать на каком-то фреймворке, но не понимают что делают, и не обладают достаточным уровнем абстрактного мысшления и знаниями, чтобы грамотно спроектировать программу. Приходя ко мне, говорят: «Я многое умею». Уходя, говорят: «Вы обучили меня с нуля».

Спасибо за комментатрий) надеюсь многим будет полезно

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

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

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

Нет, не совпадение) Прочитай обе статьи, возможно поймете в чем разница.

Спасибо за комментарий) Как будет время я еще не много дополню ее уточнениями в некоторых моментах.

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

Я к примеру менторить и помогать, начал еще когда даже сам первую работу не нашел лет 14 назад. Чему-то научился, уже помогал другим в профильных сообществах. Потом на работе менторил и растил мидлов.
Если копнуть еще дальше, то я делал это и в школе, когда учился, помогая кому-то подготовиться к контрольной по математике.

А потом раз, и я работаю в компаниях, куда нанимают только senior и менторить некого)
В какой-то момент понял, что мне этого не хватает, и начал менторить ребят в онлайн школе. Конечно себе в убыток, так как стоимость часа моей работы, им не по карману, и даже если онлайн школа отдавала бы все деньги, которые платят студенты, все равно бы не покрыло реальную стоимость часа. Потому и менторов хороших мало, в онлайн школах, оптлала там символическая, и работает условно 3-5 middle+\senior энтузиастов и 100 джунов для которых это хоть какие-то деньги. И там тоже бывают те, кто накрутил опыт, чтобы хотя бы туда, попасть в IT.

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

Если действительно есть желание, то просто начинайте. Люди, которым нужна помощь, всегда есть. Онлайн школы, сообщества да и просто пишите статьи на хабре или введите видео блог. А если вам интересно как заработать на этом миллионы, то увы, я не знаю. Это уже не менторы, а предпрениматели(в лучшем случае) под шкурой ментора. Миллионы это уже массовое обучение в онайн школах или что-то такое. Как будет время, напишу подробную статью о своем пути)

Не знаю всех условий у Aston, но почти все они обещают это, заранее зная, что вакансий у них нет, или есть, только на нее не берут после своего "обучения". А вообще, это одна из вещей, которую они говорят, чтобы с ними заключили договор. Могут даже вакансию опубликовать для виду, типа она есть и они нанимают. Вы не первый человек, кстати говоря, который говорит про Aston, что могут взять к себе, но среди тех, с кем я общался, так никого и не взяли.

В другой аналогичной компании тоже говорили, что могут взять к себе. Как мне рассказали, там надо для этого сдать экзамен\собеседование, которое никогда никто не сдает. Но я склоняюсь больше к тому, что это не реальная возможность, а уловка, чтобы склонить к подписанию договора. И если, кого и нанимают таким образом, то это исключение, а не правило. Когда хотят нанять на работу, таких договоров, не заключают.

Про лидов это я конечно утрирую :) Желание просто заучить какие-то ответы на вопросы я выкорчёвываю еще на первых этапах обучения) Мне так не интересно обучать. Кто хочет полегче и побыстрее, сами от меня сбегают к тем, кто им это обещает. Я довольно сильно гоняю по базовым вещам, в том числе, и по алгоритмам.

Сейчас многие войтишники это люди, которые рассуждают примерно так - мне открыть шаверму, купить биткойн или купить курсы и стать программистом :)

С пунктом про самоучек согласен. Среди них достаточно людей, которые на энтузиазме, написали приличные пет-проекты, какие людям с курсов, и не снились. Я когда-то с игр начинал и писал не CRUD а многопользовательский шутер без каких-то готовых решений в части логики клиента или сервера) И куча проектов было, которые я делал, с целью вывести в продакшен. Это еще до первой работы было почти в детстве. Раньше компании охотнее брали людей без опыта в трудовой, потому что уровень этих людей без опыта, был выше, чем сейчас, но эти люди есть и сейчас, и из-за всего этого хайпа, вокруг IT, им сложно попасть на работу.

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

Я уже более 5 лет обучаю джунов, и если раньше мне было досточно просто хорошо их обучить, то сейчас у меня есть кандидаты практически идеально знающие Python, все что нужно для бэкенда, легко сделают тестовое задание лучше всех, но им уже даже тестовые задания не дают. Последние несколько тестовых были от таких компаний, как описано в статье. И дело тут не в каких то хитростях оформления резюме или сопроводительных письмах. За годы работы я уже все опробовал.

Я все еще пытаюсь обучать трудоустраиваться честно, с трудом но получается, но вот сейчас у меня кейс, что работу при отличных знаниях, ищем 8 месяцев на Junior Python. Всем в итоге нахожу работу, но стало это супер сложно. Раньше через тестовое задание + собеседование прям легко залетали.

Посмотрите этот мой пост в ТГ. Я так же пишу компаниям на почту, пытаюсь договариваться, уговариваю просто дать тестовое. Хотя в здоровой реальности, это компании должны мне платить, чтобы я отправлял к ним хороших кандидатов, согласных работать за "еду".

Вот начал писать статьи, вести публичную жизнь. Может со временем меня начнут узнавать HR (утопия конечно), и доверять уровню подготовки моих ребят, который реально высокий.

Если кому нужен Junior Python Backend напишите мне) Он уже подготовлен не хуже ваших лидов)

Information

Rating
Does not participate
Location
Уфа, Башкортостан(Башкирия), Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Senior
Python
PostgreSQL
Golang
JavaScript
Node.js
Kubernetes
Apache Kafka
High-loaded systems
Designing application architecture
Database design