Pull to refresh
-1
0
Send message
Вы уходите от сути, начинаете рассуждать о нужности или не нужности метода. А я не метод обсуждаю, я пишу что лишь 1 из 10 джунов ЗНАЕТ О НЕМ, что он в принципе существует. Я это привел как пример простейшей сознательной денормализации БД, о котором почему-то редко в каком ВУЗе рассказывают на курсе СУБД.

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

Но в то же время — чем больше разных способов сортировки человек знает, тем более оптимальный код он пишет — потому что выбирает инструмент под задачу, а не переизобретает велосипеды в мучениях. С нормальными формами то же самое.
MPTT (Modified Preorder Tree Traversal) позволяет ЗНАЧИТЕЛЬНО ускорить чтение иерархических данных из базы, путем небольшой сознательной денормализации. Оставлю пару ссылок, там все подробно расписано.

www.sitepoint.com/hierarchical-data-database-2
www.caktusgroup.com/blog/2016/01/04/modified-preorder-tree-traversal-django

Если кратко, без MPTT быстрая вставка но медленное чтение. С MPTT медленная вставка (поскольку приходится пересчитывать атрибуты MPTT) но быстрое чтение. Идеальный вариант для больших и редко меняющихся справочников, вроде общероссийских классификаторов или деревьев гео-данных.

И я нигде не писал что прохождение моего теста сводится к знанию MPTT. Я писал что лишь 1 из 10 джунов знает о нем, остальные решают либо через JOIN-ы, либо через рекурсию.

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

Потому что как по мне, способность быстро найти, усвоить и использовать инфу — не менее важный навык для IT-шника, чем базовые знания. Т.е. если джун знал о базах только CRUD, но за пару вечеров разобрался в MPTT и сделал с ним тестовый пример — он мне подходит)
У меня одно из тестовых заданий для джунов — сделать простой иерархический каталог, чтобы он отображался в дерево на странице — а перейдя на один из его элементов, вывести хлебные крошки к корню. Там кода на полтора экрана, но только 1 из 10 кандидатов знает про MPTT (это к слову о денормализации) и даже этому кандидату (если я его беру) приходится объяснять что он и вывод, и операции благодаря этому может осуществлять над линейным списком за 1 проход, а не рекурсивно.

Меня это удивляло ровно до того момента, пока я не узнал что преподаватели в самых разных ВУЗах тоже про MPTT ничего не знают… все это очень печально(((
Смотря что за должность. Как я уже писал выше — для фронтенда или девопса это не критично. Но если это бэкенд, то незнание СУБД нужно оправдывать чем-то очень весомым в плане специализации — например «Я сетевой программист и сделаю вам такие сокеты, что синхронизация распределенных по разным ЦОД реалтайм-сервисам будет летать за наносекунды».

Но при этом если вашим конкурентом на должность будет равный вам специалист, который четко ответит что 1НФ это «Атомарность», и означает что каждый кортеж отношения содержит только одно значение для каждого из атрибутов, и нарисует табличку-пример — будьте уверены, возьмут его. Потому что он может оптимизировать сетевое взаимодействие зная как определить, что в лаге виноват косяк в базе сервиса, а не сокет.

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

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

Идете в бэкенд — пишите сервисы для себя. Идете в РП — пишите бизнес-планы для себя. Идете в SEO — пишите планы продвижения для себя. Идете в маркетинг — пишите рыночные исследования для себя.

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

А если сможете — шикарно, поскольку у вас начнет формирования понимание разницы между учебой и реальностью. Плюс, вы сможете прямо на первое же собеседование принести тучу своих тренировочных примеров. Профит +)))

Да, говорим об одном и том же) Спасибо за уточнение)

Entity Framework Code First
Я к тому что даже если ORM позволяет сначала написать классы-модели, а потом накатить миграцию чтобы сгенерить для них БД — все-равно нужно сначала спроектировать БД, в том числе выполнив нормализацию. Т.к. именно по проекту базы будет понятно — какие модели и с какими полями создавать, как декомпозировать, какие отношения определять и т.д. CodeFirst не заменяет собой сам процесс проектирования базы, лишь позволяет после проектирования пойти писать код для ORM, а не create-ы и alter-ы в базу, которые как раз ORM и выполнит.

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

А что с ними такого страшного происходит, если про Eager Loading не забывать?
Это в фреймворке можно так сделать, когда пишешь ручками)) Например в Django это prefetch_related — а вот в коробках типа Drupal где изменение схемы данных автоматизировано и делается мышкой из админки, все работает через mainhook — и количество запросов к базе со временем становится просто убийственным))
А знать их должен тот кто схему БД проектирует или изменяет — а это не обязательно DBA.
Вообще не обязательно. Любой backend-middle уже должен твердо знать такие вещи. Потому что когда у меня в компании over9000 проектов, я как архитектор проектирую только основную концепцию базы. И если я отдаю ее мидлу, я должен быть уверен что он не проморгает в ней какие-то детали и нюансы связанные с реализацией. И что он не впихнет туда не нормализованную таблицу, которая потом превратит в хаос работу с любыми связанными данными. Особенно, если такая таблица успеет накопить миллиарды записей.

А если это распределенная система, работающая в реальном времени, с репликациями, синхронизацией и тяжелыми данными, цена ошибки на этапе проектирования БД будет фатальной.

На начальных стадиях проектов схемой БД частенько управляет ORM — и тут без знания нормальных форм можно наворотить такого что потом никакой DBA такую базу не согласится поддерживать.
ORM управляет схемой? Что вы там курите?)))

ORM в 99% случаев лишь отражает схему в DAL. Но независимо от того мигрирует ли ваша ORM таблицы в классы кода, или же классы в таблицы и отношения СУБД — все-равно сначала нужно спроектировать саму базу и уже только потом реализовывать интерфейсы для нее в ORM.

Проект в котором приложение имеет доступ к миграциям БД для динамической модификации схемы данных — огромная редкость) И я не беру в расчет сейчас банальные вещи вроде Drupal который просто создает таблицы под ваш CCK, потому что думаю мы все знаем что потом происходит с количеством запросов к базе. ИМХО, нужно быть конченым психопатом, чтобы строить большую сложную систему по такому принципу.
Спасибо, обойдусь… нет у меня такой потребности.
Нормальная история для фронтенда или девопса, но бэкенда, заявившего такое, я бы не подпустил к коду и на пушечный выстрел.
А сфера деятельности у вас, простите, какая?
Проектирование и разработка информационных систем — от сайтов общего назначения (новостные порталы, интернет магазины и т. д.) до специальных систем обработки данных, автоматизации процессов и др.
Инженерный навык это хорошо, когда он нужен. Абстракцию инженерного мышления я могу потренировать и на других областях.
Знание баз данных и мышление в их категориях, это один из критичных навыков для бэкенд-разработчика.

Его отсутствие порождает персонажей, которые берут SQL запрос работающий 5мс и переводят в ORM так, что он работает 5 минут — просто потому, что они не понимают как работают индексы по составным ключам, например. Или страдают с запросом N дней просто потому, что не понимают как сделать каскадный JOIN на M-N-K отношение и дербанят его по частям, чтобы потом собирать обратно уже в коде. Примеров много.

Все это произрастает как раз из отсутствия понимания таких базовых вещей как нормальные формы.

Druu там выше написал, что:
Если же бд приходится постоянно дорабатывать — сохранение нормальности сильно усложняет процесс, т.к. часто требует достаточно глубоко изменять структуру базы, в то время как при отказе от нормальности достаточно добавить одно поле в таблицу.
Так вот понимание НФ как-раз и позволяет еще на этапе проектирования базы определить такую структуру, чтобы не приходилось ради добавления пары полей нырять с головой в ад миграций или забивать пол-базы нулями.
При этом страдает расширяемость бд и производительность.
Страдает она именно у тех кто при проектировании положил болт на вещи вроде НФ а-ля «все-равно база будет меняться». Если системный архитектор нормально выполнил свою работу, модификация структуры базы — штатная рутина.

Рекомендую вам остановиться и прочитать классическое "Введение в базы данных" Криса Дейта.


Я каждого своего джуна заставляю учить нормальные формы до НФБК, и регулярно, например в курилке или на обеде, терроризирую их спонтанными вопросами-примерами вроде "у тебя есть такая задача, расскажи как ты будешь делать базу..."


Потому что помимо прикладного навыка, это ещё и абстракция инженерного мышления.


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

Лол, продолжай)) Я заинтригован)))

В плане готовки ИИ еще долго не превзойдет человека, потому что он не чувствует «вкуса данных», которыми оперирует. Даже если разработать какие-то вкусовые метрики, вкусы людей очень сильно отличаются. К тому же люди очень по-разному улавливают вкусовые интонации и детали. Так что у ИИ просто не хватит воображения придумать что-то интригующее, все это в рамках случайных попаданий в процессе комбинаторики, всеравно оцениваемых потом людьми. Плюс, он врядле учитывает декомпозированную сложность приготовления, вот например…

Ставим кастрюлю с водой (2 литра) кипятиться. Пока она греется, в миску пару желтков яиц (отделить желтки от белков, если попадет немного белка нестрашно). Потом выжать в яица половину небольшого лимона, следя чтобы не попали семечки, и хорошенько все это взбить. Когда вода закипит — вылить смесь желтка и лимона в нее. Лимон не даст яйцу свернуться и получится наваристый бульон. Потом долить в бульон немного сливок, и дать покипеть минут 5, после чего закинуть туда макароны на свой вкус — рачки, ломаные спагеттины, вермишель, флотские или другие. Когда макарохи почти сварились, добавить сверху водоросли НОРИ, которые для роллов, поломав их на кусочки нужного размера, и дать еще постоять. Специи по вкусу.

Делается минут за 10-15, главное найти баланс лимона, потому что чуть меньше — яица свернутся в кипятке… но чуть больше и получится невыносимая кислятина.
Это все прекрасно, но снова про английский язык. Даже на конференциях вроде ДИАЛОГ-а подавляющее большинство прикладных разработок — про английский язык. Где же такие статьи и системы для русского языка?

Когда 6 падежей, а не 2 как в английском. Когда язык поддерживает все 6 базовых порядка слов, а не 2 как в английском. Когда время равномерно размазано по всему языку, и присутствуют маркеры которые контекстно могут относиться к любому времени, а не организованы в аккуратные 12 времен. Когда омонимия — это половина языка, а сам язык при этом настолько инкапсулирует контекст, что в нем что угодно можно выразить смешивая императив и декларатив, и положить болт на их противоречия. В противовес английскому, который исторически формировался как инструкция (благодаря чему и стал техническим языком).

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

Даже под капотом IBM WATSON постоянный ручной труд, разница лишь в том что когда IBM нужно сделать Ватсону поддержку японского языка, они просто покупают японскую компанию которая присоединяется к ручному наполнению Ватсона.

И даже в отношении английского языка… ну вот есть ChatScript. И что же в нем прям радикально отличает его от хотя бы OWL/RDF? Да даже от реляционно связанных предикатов, использующихся как основа для регулярок — такое можно написать просто на Python, PHP, JS, хоть на бейсике.

Где и в чем он упрощает разработку при создании чат-ботов? А сопровождение эксплуатируемой системы? Почему система использующая ChatScript не потонет в хаосе и безумии мониторинга, оценки, ранжирования, модификации и контроля правил, когда их количество перевалит хотя-бы за 10000? А 100000? А миллион?

ChatScript только для маленьких систем? Эффективен только в системах с количеством правил в районе 100? Если у меня весь проект на Python, зачем мне тащить в маленький проект целый +1 язык ради 100 правил?
Похоже вы не можете в сарказм…

Это все прекрасно пока у вас 1 страница админки соответствует 1 объекту данных. А можете ли вы в рамках такой системы разруливать ситуации, когда у вас N объектов данных на странице, и доступ назначается не столько к данным, сколько к сценариям того, что можно выполнить с этими данными?


Например если на странице несколько объектов связанных в БД отношением класса M-N-K, и действия одного пользователя должны влиять на них всех, а другой пользователь части из них даже не видит, но может работать с видимой ему частью.


Насколько я знаю, для такого пока никто не придумал удобных решений. Это делают либо цепляя доступ к вьюхам, а не к моделям. Либо вообще выносят проверку доступа вместе с бизнес-логикой в интеграционную шину, а приложения и базы априори считают, что если им какая-то команда пришла от шины, значит шина 100% все проверила и разрешила.


Но управлять таким доступом все-равно ад в обоих этих решениях, для любой более-менее крупной и сложной системы.


А если туда ещё подвозят мандатные метки уровня ОС...

Лол, письменность? Вы чё шумеры штоле? На дворе 2017!!! Поди прогуливали телепатию в школе?)))


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


Ну восхваляет кто-то фортран в 2017-м, зачем на него агриться если только цель не в умышленном троллинге?))

Когда я поступал, на кафедре куда я хотел было 10 бюджетных мест, 10 целевых и 40 платных. И вот 10 бюджетных мест заняли медалисты, 10 — целевики за которых платят предприятия, а они потом должны 3 года отработать за это на местах. А что делать остальным? Искать другую кафедру или другой ВУЗ? Так в них та же самая картина)
Ой ли? А сравним? Кафедра «Информатика и вычислительная техника»

1. Бауманка, isot.bmstu.ru/edu/price/price-17181718.html — от 257к в год
2. Тюменский индустриальный, www.tyuiu.ru/stoimost-obucheniya — от 56к в год

Почти в 5 раз разница. А теперь вспоминаем, что средняя зарплата айтишника в провинции 30к плюс-минус… все-еще настаиваете, что отправить в топовый ВУЗ ничего в плане денег не стоит?

Я имею ввиду не политиков, а бизнес-элиту. Тех кто выше среднего класса. Когда человек не может позволить себе отправить детей в MIT, но может в ИТМО, он не будет отправлять их в университет Мухосранска. И университеты знают это, возможно отчасти поэтому в провинциях они и не парятся.

На более старших курсах пример курсовой — написать планировщик задач для ОС с определенными зарактеристиками, выполнить исследования по «пропускной способности» в зависимости от настроек и т.д.
Написать АИС для институтской библиотеки с полным циклом — учет книг, читателей, все операции с ними, репликация между филиалами в разных зданиях библиотеки, каталог, поиск, стыковка для веб-интерфейса (без реализации оного), создание «кубов» для анализа, вывод аналитических справок
Могу лишь завистливо вздыхать, читая это))
Мы же говорили о курсовой, т.е. о достаточно большом проекте.
Даже интересно стало, как выглядели курсовые у вас — в нормальном ВУЗе?)) Наши «курсовые» выглядели так, преподаватель дает тебе задачу из какого-неть учебника, на какой-то мат-метод… чаще всего это было либо что-то из Кнута, либо какой-нибудь метод оптимизации. И тебе нужно написать прогу для его реализации, и предоставить пояснительную записку листов на 10 — что там такое и как оно работает. «Большими проектами» там и не пахло)))
Есть ТЗ, неотъемлемой частью которого...
Нет, не было никаких ТЗ +)) Была постановка задачи — «Написать программу для демонстрации сортировки пузырьком». Все +))

И да, предлагаю оставить этот спор, т.к. я все-равно останусь при своем мнении, что a = a + 1 или if x < y: можно понять для любого ЯП, и преподаватель который устраивает из-за этого истерику… ладно, мы же люди культурные… некомпетентен.
Скорее просто студенты, которые поступили в ВУЗ после 10 лет в школе, не имеют достаточного жизненного опыта. Я школу закончил в 18 и имел опыт написания бумаг, жалоб, представлял, как работает бюрократическая машина, и куда давить.
Все в ВУЗ поступали в 17-18, после 10 лет в школе. Не осознал в чем ваша уникальность окончания школы в 18 лет?

А что касается бумаг, жалоб и бюрократической машины… вы видимо еще не сталкивались с ситуацией, когда бюрократическая машина перемалывает вас своими жерновами, ломая все кости) Потому что ей нужно не обучать студентов, ей нужно платить зарплаты преподавателям, от которых ВУЗам не так-то просто избавиться… да и кем их заменить?)

Information

Rating
Does not participate
Date of birth
Registered
Activity