Должны ли опытные программисты знать запросы к базе данных? [закрыто]

35

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

Должно ли это быть основным требованием быть опытным программистом или программистом?

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

Шамим Хафиз
источник
2
Что вы подразумеваете под "структурой"? Если вы говорите о семантике, то понимание любой новой семантики не должно быть проблемой для « эксперта ». По определению. OTOH, только немногие разработчики знакомы с базами данных и языками запросов, остальным нас это не волнует.
SK-logic
3
Я думаю, что это ошибочное предположение: «Есть так много программистов, которые также являются экспертами в написании запросов и проектировании баз данных». Есть относительно немного программистов, которые являются экспертами в этих вещах: DBA! = SE.
Эшли
1
Насколько сложно на самом деле писать запросы к базе данных?
Капитан Разумный
@CaptainShakespeare, действительно, это может быть довольно сложно, как только вы пройдете операции CRUD. Ты иногда делаешь сложные отчеты. А затем посмотрите на запросы настройки производительности.
HLGEM

Ответы:

69

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

Итак, если бы я встретил программиста, который не знал, как писать запросы к базе данных, я бы ожидал одну из двух вещей:

  1. Они вообще неопытны.
  2. Они высокоспециализированы в другой области (например, встраиваемые системы) и никогда не нуждались в изучении этого.

Запросы к базе данных принципиально отличаются от более стандартных языков программирования. Они алгебраические и предназначены для работы с реляционными данными, в то время как C # или Java являются обязательными и работают с дисками, памятью, пользовательским вводом и т. Д. Даже функциональные языки, такие как LISP или Haskell, которые являются более алгебраическими по форме, менее ориентированы на реляционные данные.

РЕДАКТИРОВАТЬ: Как было отмечено в комментариях меня и других, есть несколько веских причин, по которым опытный разработчик может не знать запросов к базе данных хорошо:

  • Их команда использовала ORM / NoSQL
  • В их команде были программисты БД
  • Сложность приложения заключалась в бизнес-логике, а запросы к БД были тривиальными
  • Их команда распределила работу так, что некоторые программисты не писали запросы

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

Таким образом, наиболее опытные разработчики должны знать запросы к базе данных .

Мэтью Родатус
источник
1
Итак, если кто-то сделал нетривиальный проект, использующий базу данных, он, как ожидается, будет знаком с запросами, верно?
Шамим Хафиз
3
@ Шамим, я бы ожидал, что этот человек будет иметь умеренный опыт работы с запросами, если только этот человек не был младшим или начального уровня. Возможно, у этого человека всего несколько лет опыта, и его приютили в узкоспециализированной команде?
maple_shaft
12
@ Шамим, я бы, наверное, так и ожидал. Они все еще могут быть хорошим программистом. На такие вопросы очень сложно ответить, потому что они очень много предостережений: возможно, в команде был программист БД; возможно нетривиальность приложения была в бизнес-логике, а запросы к базе данных были тривиальными; возможно, они распределили работу так, чтобы ваш программист не работал над запросами; и т. д.
Мэтью Родатус
4
Моя команда разработчиков посвятила программистов на PL / SQL как часть проекта. Таким образом, хотя .Net-программисты могут выполнять простые запросы, они готовы их проанализировать и разработать более сложные запросы. Более того, с распространением ORM (и NOSQL), как вы думаете, разработчики не-SQL должны знать сложные запросы.
софтведа
2
@Matthew Rodatus: я работал в местах, где были библиотеки, управляющие запросами, поэтому теоретически можно было бы работать там без понимания простого SQL. Я считаю, что все разработчики были компетентны в этом на практике.
Дэвид Торнли
23

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

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

wolfgangsz
источник
1
К счастью, в настоящее время совершенно нормально делать приложения без каких-либо СУБД. Большинство задач не нуждаются в них или просто не могут быть адекватно сопоставлены с реляционной моделью. Есть тонны нереляционных вариантов хранения.
СК-логика
8
Это подводит итог моего мнения, а также. Эксперт? Знание? Да.
Уэйн Молина
2
@ SK-logic, какие варианты вы считаете реляционными базами данных неактуальными? Хранилище данных слишком специализировано для аналитики, чтобы быть полезным в транзакционной системе. И не заставляйте меня начинать все неправильно с OODBMS.
maple_shaft
1
@maple_shaft, существует множество специализированных доменных решений для хранения данных. СУРБД старается быть универсальным, и терпит неудачу в этом. В некоторых случаях даже древние иерархические СУБД намного лучше, чем реляционные.
SK-logic
6
Не все настольные программы используют базы данных, поэтому будьте осторожны, когда говорите, что это происходит постоянно.
Адам Лир
18

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

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

Если бы у меня был проект с базой данных, специалист по базам данных был бы вторым разработчиком, которого я бы нанял (после разработчика начальных приложений). Базы данных, как правило, не являются одноразовыми, так как через 20 лет данные будут оставаться в том же виде, что и на начальных этапах.

Проекты часто попадают в неприятности, потому что они не нанимают этих людей, пока база данных не содержит 100 000 000 записей и работает медленно. Или они обвиняют инструмент в том, что он плохой (никакой SQL Server не медленный, если вы разрабатываете правильно), а не в своей некомпетентности.

HLGEM
источник
4
+1 за упоминание о том, что наличие ORM не заменяет необходимость знать SQL (или факторы, лежащие в основе любого типа БД, который вы используете).
RHSeeger
4
+1, и я хотел бы дать вам еще 100! Я знаю, что корреляция! = Причинно-следственная связь, но для меня более чем очевидно, что наиболее эффективные разработчики приложений, с которыми я когда-либо работал, хорошо понимали, как написать стандартный запрос SELECT. Я должен быть в состоянии передать хорошему разработчику модель данных и «вопрос» о данных, и этот человек в конечном итоге сможет написать запрос, который «ответит» на мой вопрос.
maple_shaft
1
+1, полностью согласен. Я не покупаю объяснение, что «мы используем ORM» или «у нас есть специальные программисты для этого». Если кто-то действительно опытный , он в какой-то момент выполнил бы роль разработчика базы данных. Вот что такое опыт.
GrandmasterB
15

Политически правильный ответ: это зависит. Знание SQL не имеет никакого значения, если разработчик никогда не работает с реляционными базами данных (и в наши дни, и в эпоху приложений NoSQL, это на самом деле вполне вероятно).

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

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

Мое личное мнение: Нет. Опытный разработчик программного обеспечения должен быть в состоянии освоить новый навык (например, SQL), если и когда это необходимо, а не «по умолчанию». Гибкость и способность учиться и понимать - это то, что отличает хорошего разработчика от нормального. Правило «золотого молотка» также применимо - если у вас есть разработчик с обширными знаниями SQL, очень вероятно, что этот разработчик извлечет инструмент, который он знает лучше всего - реляционные базы данных - чтобы попытаться решить каждую проблему, хотя он не обязательно имеет быть лучшим решением. Конечно, это относится и к адвокатам NoSQL,;).

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

Ктулху
источник
Базы данных NoSQL не обрабатывают больше данных или быстрее, чем реляционные базы данных. Я не знаю, где вы это услышали, но это явно, опасно неправильно.
Аарона
@Aaronaught - Отредактировано, спасибо за опровержение моего преждевременного предположения, :).
Ктулху
7

Посмотрите это введение в Википедию по компьютерному программированию:

Компьютерное программирование (часто сокращаемое до программирования или кодирования) - это процесс проектирования, написания, тестирования, отладки / устранения неполадок и поддержки исходного кода компьютерных программ. Этот исходный код написан на языке программирования. Цель программирования - создать программу, которая демонстрирует определенное желаемое поведение.

Запросы к базам данных имеют свои языки, они могут быть разработаны, протестированы, отлажены и поддержаны. Целью запроса к базе данных является предоставление вам необходимой информации в соответствии с вашими потребностями.

Так что я думаю, что это программирование, безусловно.

guiman
источник
7

Хороший инженер-программист, имеющий опыт работы в корпоративных и бизнес-приложениях (EDIT: особенно в проектах, использующих СУБД), должен обладать экспертными знаниями по написанию запросов к реляционной базе данных в стандартном формате. Кроме того, они должны уметь понимать сложную схему и предлагать схемы, по крайней мере, средней сложности.

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

Это не значит, что у программистов баз данных тоже нет места. Сложные хранимые процедуры, сложные и эффективные запросы и программный дизайн и архитектура уровня базы данных, ориентированные на уникальные инструменты и предложения одного поставщика баз данных (например, Oracle, MySQL, SQLServer и т. Д.), Лучше всего по возможности оставить профессиональному программному обеспечению. инженеры, которые имеют опыт работы с этими высокоспециализированными и сложными предложениями.

Подавляющее большинство систем для бизнеса и предприятий, однако, на мой взгляд, не оправдывает необходимость в разработчиках данных и специализированных программистах баз данных, но я работал над такими проектами до того, как БОЛЬШОЕ воспользовалось знаниями и опытом, которые эти люди принесли за стол.

maple_shaft
источник
2
-1: категорически не согласен с тем, что «хороший» инженер-программист должен быть экспертом в запросах реляционных баз данных.
Джон Сондерс
3
Вы все еще не согласны, если я скажу, что хороший инженер по прикладному программному обеспечению ENTERPRISE или BUSINESS (в отличие от встроенных систем и т. Д.) И если бы я сказал, что этот человек должен быть экспертом в запросах реляционных баз данных STANDARD (без поставщика модных штанов) что-то вроде аналитических запросов и тому подобное)? Глубокое понимание операторов SQL SELECT, всех типов объединений, объединений, пересечений и слияний, встроенных представлений, условий, упорядочения и группировки результирующих наборов должно быть полностью понято и продемонстрировано ЛЮБОЙ разработчиком программного обеспечения, на котором есть метки, указанные мной выше.
maple_shaft
4
Мех. Я работаю в крупной софтверной компании, и мы не имеем никакого отношения к РСУБД. Моя последняя работа по разработке настольного программного обеспечения также не требовала SQL. Я не уверен, как вы определяете корпоративные и бизнес-приложения, но мне кажется, что ваш взгляд на вещи немного узок.
Адам Лир
2
Я поддерживаю то, что я сказал. Теоретически, если приложение хорошо разбито на части и многокомпонентно, тогда в моем профессиональном опыте нет необходимости, однако моя команда и я были бы DROWNED, если бы мы не были экспертами в SQL, даже когда у нас была специальная команда для проектирования и разработки RDBMS. Возможно, я старомоден или мне просто везет в карьере?
maple_shaft
3
@maple_shaft Да, дело не в том, что приложения, над которыми я работал, были достаточно многокомпонентными. Дело в том, что они не использовали RDBMS, точка. Разные поля, наверное. Дело в том, что нельзя сказать, что каждый разработчик бизнеса / предприятия должен хорошо разбираться в SQL. Это просто неправда. Будь хорош в этом, если ты им пользуешься. Не беспокойтесь слишком сильно, если вам это не нужно, пока вам это не понадобится, как с любым другим языком или технологией.
Адам Лир
6

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

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

Место, где я сейчас работаю, имеет тот же дизайн базы данных, что и в 1970 году. Мы переместили базу данных из IDMS в DB2, но это тот же дизайн базы данных сети. У меня была возможность создать 5 новых таблиц DB2 за 9 лет работы здесь.

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

Гилберт Ле Блан
источник
5

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

Другие упоминали о многих способах, которыми мы можем избежать тщательности SQL в нашей работе, даже когда мы работаем (косвенно) с базами данных, но как насчет всех разработчиков, которые пишут прошивку для 101 электротехнической продукции, которую мы каждый обладать? А как насчет парней, специализирующихся на мониторинге в реальном времени?

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

cjmUK
источник
5

Я думаю, вы переоцениваете важность баз данных в программном обеспечении.

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

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

А как быть с линейными видеоредакторами и физическими движками видеоигр?

Алекс Жасмин
источник
5

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

Барри Браун
источник
4

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

Однако, если этот программист может писать только запросы типа «select * from tblxxxx», я бы не стал считать этого программиста экспертом. Аналогично, если база данных, разработанная этим программистом, помещает отношения один ко многим в одну таблицу вместо двух таблиц, я бы не считал этого программиста экспертом.

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

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

Майкл Райли - AKA Gunny
источник
3

Оглядываясь в нашем отделе, это зависит от:

  • Наши разработчики десктопов / веб / серверов . По крайней мере, требуется написать базовые или расширенные заявления о грубости в зависимости от их специальности. Для оптимизации у нас есть несколько специализированных администраторов БД.
  • Наши встроенные программисты . Многие из них никогда не проходили мимо «select * from mytable». Однако, это также изменилось за последние несколько месяцев с введением sqllite в их проекты.
Карра
источник