¿Deben los programadores experimentados conocer las consultas de la base de datos? [cerrado]

35

Hay tantos programadores que también son expertos en redacción de consultas y diseño de bases de datos.

¿Debería ser este un requisito central para ser un programador experto o un ingeniero de software?

Aunque hay muchas similitudes en la forma en que se desarrollan las consultas y los códigos, mi opinión personal es que las Consultas parecen tener una Estructura diferente al Código y puede ser difícil Dominar ambas simultáneamente debido a los diferentes enfoques.

Shamim Hafiz
fuente
2
¿Qué quieres decir con "estructura"? Si está hablando de semántica, entonces comprender cualquier tipo de semántica nueva no debería ser un problema para un " experto ". Por definición. OTOH, solo unos pocos desarrolladores están expuestos a bases de datos y lenguajes de consulta, al resto de nosotros no nos importa en absoluto.
SK-logic
3
Creo que esta es una suposición errónea: "Hay tantos programadores que también son expertos en redacción de consultas y diseño de bases de datos". Hay relativamente pocos programadores expertos en estas cosas: DBA! = SE.
Ashley
1
¿Qué tan difícil es realmente escribir consultas en la base de datos?
Capitán Sensible
@CaptainShakespeare, realmente puede ser bastante difícil una vez que pasas las operaciones CRUD. Ty haciendo informes complejos alguna vez. Y luego mire las consultas de ajuste de rendimiento.
HLGEM

Respuestas:

69

El hecho de que la escritura de consultas a la base de datos sea o no un requisito central depende del trabajo, pero las bases de datos relacionales son ubicuas en la tecnología actual.

Entonces, si conozco a un programador que no sabe cómo escribir consultas de bases de datos, esperaría una de dos cosas:

  1. Generalmente son inexpertos.
  2. Están altamente especializados en otro campo (por ejemplo, sistemas integrados) y nunca han necesitado aprenderlo.

Las consultas de bases de datos son fundamentalmente diferentes de los lenguajes de programación más estándar. Son algebraicos y están destinados a operar en datos relacionales, mientras que C # o Java son imprescindibles y funcionan en discos, memoria, entrada del usuario, etc. Incluso los lenguajes funcionales como LISP o Haskell que tienen una forma más algebraica están menos orientados a los datos relacionales.

EDITAR: Como se ha señalado en los comentarios de mí y otros, hay algunas razones válidas por las que un desarrollador experimentado puede no conocer bien las consultas de la base de datos:

  • Su equipo usó ORM / NoSQL
  • Su equipo tenía programadores de DB
  • La complejidad de la aplicación estaba en la lógica del negocio, y las consultas de la base de datos eran triviales.
  • Su equipo repartió el trabajo de tal manera que algunos programadores no escribieron consultas

Aunque válidas, estas advertencias no son razones convincentes por las que un desarrollador experimentado no conocería las consultas de la base de datos. A menos que sea altamente especializado, un programador debe estar familiarizado con las bases de datos relacionales.

En resumen, los desarrolladores más experimentados deben conocer las consultas de la base de datos .

Matthew Rodatus
fuente
1
Entonces, si alguien hizo un proyecto no trivial que usó la base de datos, se espera que conozca las consultas, ¿verdad?
Shamim Hafiz
3
@Shamim, esperaría que esta persona tenga una experiencia moderada con las consultas a menos que esta persona fuera un junior o un nivel de entrada. ¿Quizás esta persona solo tiene unos pocos años de experiencia y fue protegida en un equipo altamente especializado?
maple_shaft
12
@Shamim, probablemente lo esperaría. Todavía podrían ser un buen programador. Preguntas como esta son muy difíciles de responder, porque son muchas advertencias: tal vez el equipo tenía un programador de DB; quizás la falta de validez de la aplicación estaba en la lógica del negocio, y las consultas de la base de datos eran triviales; tal vez distribuyeron el trabajo de tal manera que su programador no trabajó en las consultas; etc.
Matthew Rodatus
44
Mi equipo de desarrollo tiene programadores PL / SQL dedicados como parte del proyecto. Entonces, aunque los programadores .Net pueden hacer consultas simples, están allí para revisarlo y desarrollar las consultas más complejas. Además, con la proliferación de ORM (y NOSQL), ¿por qué crees que los desarrolladores que no son SQL deben conocer consultas complejas?
softveda
2
@Matthew Rodatus: He trabajado en lugares que tenían bibliotecas que administraban consultas, por lo que sería teóricamente posible trabajar allí sin comprender SQL simple. Creo que todos los desarrolladores fueron competentes en la práctica.
David Thornley
23

Cualquier ingeniero de software debe tener una comprensión básica de las bases de datos y cómo almacenar y recuperar datos utilizando SQL, al menos al nivel en el que comprenda para qué se puede usar (y con eso incluiría una comprensión de las claves, vistas , procedimientos almacenados y desencadenantes).

No todos los ingenieros de software necesitan ser expertos, y el nivel de experiencia requerido realmente depende del tipo de software en el que se centran. El software incorporado, los controladores de hardware y los sistemas operativos rara vez usan SQL, pero el software de aplicación (ya sea web o de escritorio o basado en servicio / demonio) usa bases de datos todo el tiempo.

wolfgangsz
fuente
1
Afortunadamente, hoy en día está perfectamente bien hacer aplicaciones sin ningún RDBMS en absoluto. La mayoría de las tareas no las necesitan, o simplemente no pueden asignarse adecuadamente a un modelo relacional. Hay toneladas de opciones de almacenamiento no relacionales disponibles.
SK-logic
8
Esto resume mi opinión también. ¿Experto? ¿Sin conocimiento? Sí.
Wayne Molina
2
@ SK-logic, ¿qué tipo de opciones considera que hacen que las bases de datos relacionales sean irrelevantes? Datawarehousing es demasiado especializado para que la analítica sea útil en un sistema transaccional. Y no me hagas empezar con todo lo que está mal con OODBMS.
maple_shaft
1
@maple_shaft, existen numerosas soluciones de almacenamiento especializadas y orientadas al dominio. RDBMSes intenta ser genérico, y falla mucho en eso. En algunos casos, incluso los antiguos DBMS jerárquicos son mucho mejores que los relacionales.
SK-logic
66
No todo el software de escritorio usa bases de datos, así que tenga cuidado cuando diga que sucede todo el tiempo.
Adam Lear
18

Hay algunas áreas de especialización (sistemas embebidos, por ejemplo) donde el conocimiento de la base de datos no es necesario. Pero la mayoría de las aplicaciones comerciales usan una base de datos de algún tipo y si no comprende a fondo cómo usarla correctamente, puede crear un desastre de rendimiento que es extremadamente difícil de solucionar. La refactorización de las bases de datos puede ser un proceso complejo y difícil y muchos lugares optan por no solucionar los problemas estructurales debido a esa dificultad y simplemente cavar más profundo en un agujero. Si tiene conocimiento de la base de datos, el diseño es mucho más fácil y es mucho más probable que funcione bien con el tiempo.

Los ORM no sustituyen el conocimiento de la base de datos. Cualquiera que use uno sin conocer los conceptos básicos de la consulta y el diseño de la base de datos está condenado a tener una base de datos de bajo rendimiento y mal diseñada que afectará la capacidad de su aplicación a largo plazo para manejar la carga. Los ORM en manos de alguien que sabe lo que está haciendo están bien; en manos de personas que no pueden molestarse en aprender sobre bases de datos, generalmente son un desastre.

Si tuviera un proyecto con un servidor de base de datos, el especialista en bases de datos sería el segundo desarrollador que contrataría (después del desarrollador de la aplicación inicial). Por lo general, las bases de datos no son descartables, ya que los datos seguirán existiendo casi de la misma forma 20 años después, vale la pena tener experiencia en las etapas iniciales.

Los proyectos a menudo se meten en problemas porque no contratan a estas personas hasta que la base de datos tiene 100,000,000 de registros y se ejecuta lentamente. O culpan a la herramienta de ser mala (no SQL Server no es lento si diseña correctamente) no su incompetencia de diseño.

HLGEM
fuente
44
+1 por mencionar que la presencia de un ORM no reemplaza la necesidad de conocer SQL (o los factores subyacentes en cualquier tipo de base de datos que esté utilizando).
RHSeeger
44
¡+1 y desearía poder darte 100 más! Sé que la correlación! = Causalidad, pero es más que evidente para mí que los desarrolladores de aplicaciones más efectivos con los que he trabajado alguna vez tenían un conocimiento profundo de cómo escribir una consulta SELECT estándar. Debería poder entregarle a un buen desarrollador un modelo de datos y una "pregunta" sobre los datos y esa persona eventualmente debería poder escribir una consulta que "responda" mi pregunta.
maple_shaft
1
+1, totalmente de acuerdo. No compro la explicación de que "usamos ORM" o "tenemos programadores dedicados para eso". Si alguien tiene mucha experiencia , habría desempeñado el papel de desarrollador de db en un punto. Eso es lo que es la experiencia.
GrandmasterB
15

La respuesta políticamente correcta: depende. El conocimiento de SQL no tiene ningún valor si el desarrollador nunca trabaja con bases de datos relacionales (y en la actualidad de las aplicaciones NoSQL, eso es bastante probable).

En segundo lugar, cuando hay un DBA o un escritor de consultas a tiempo completo (cualquiera que sea el título), la comprensión también es de menor importancia.

Solo es realmente importante si el desarrollador necesita ser un experto y hay un requisito en sus proyectos para usar una base de datos relacional (por ejemplo, en aplicaciones web anticuadas o conectarse con bases de datos existentes)

Mi opinión personal: No. Un desarrollador de software experimentado debería ser capaz de aprender una nueva habilidad (como SQL) si es necesario y cuando lo necesite, no "por defecto". La flexibilidad y la capacidad de aprender y comprender es, en mi opinión, lo que diferencia a un buen desarrollador de uno bueno. La regla del 'martillo dorado' también se aplica: si tiene un desarrollador con amplios conocimientos de SQL, es muy probable que este desarrollador saque la herramienta que mejor conoce, las bases de datos relacionales, para intentar resolver cada problema, mientras que no necesariamente tiene Ser la mejor solución. Por supuesto, esto también se aplica a los defensores de NoSQL,;).

Elegir la herramienta adecuada para el trabajo correcto es lo que debe saber un programador experimentado.

Cthulhu
fuente
Las bases de datos NoSQL no procesan más datos, o más rápido, que las bases de datos relacionales. No sé dónde escuchaste eso, pero es flagrantemente peligroso .
Aaronaught
@Aaronaught - Editado, gracias por el aviso de mi suposición prematura, :).
Cthulhu
7

Echa un vistazo a esta introducción de Wikipedia a la programación de computadoras:

La programación informática (a menudo abreviada a programación o codificación) es el proceso de diseño, escritura, prueba, depuración / solución de problemas y mantenimiento del código fuente de los programas informáticos. Este código fuente está escrito en un lenguaje de programación. El propósito de la programación es crear un programa que exhiba un cierto comportamiento deseado.

Las consultas de bases de datos tienen sus propios idiomas, se pueden diseñar, probar, depurar y mantener. El propósito de una consulta de base de datos es permitirle obtener la información que necesita, de la manera que la necesita.

Así que creo que es programación, definitivamente.

Guiman
fuente
7

Un buen ingeniero de software con experiencia en aplicaciones empresariales y empresariales (EDIT: específicamente en proyectos que utilizan un RDBMS) debe tener un conocimiento experto para escribir consultas de bases de datos relacionales en el formato estándar. Además, deberían ser capaces de comprender esquemas complejos y proponer diseños de esquemas de al menos una complejidad moderada.

El diseño de esquemas extremadamente avanzado o complicado debe ser el ámbito de un modelador de datos o arquitecto funcional.

Esto no significa que los programadores de bases de datos tampoco tengan un lugar. Los procedimientos almacenados complejos, las consultas complejas y eficientes y el diseño y la arquitectura del software de nivel de base de datos centrados en las herramientas y ofertas únicas de un único proveedor de bases de datos (por ejemplo, Oracle, MySQL, SQLServer, etc.) deberían ser los mejores para el software profesional cuando sea posible. ingenieros que tienen experiencia con estas ofertas altamente especializadas y complicadas.

Sin embargo, en mi opinión, la gran mayoría de los sistemas empresariales y empresariales no justifican la necesidad de modeladores de datos y programadores especializados de bases de datos, pero he trabajado en proyectos de este tipo antes que se beneficiaron enormemente del conocimiento y la experiencia que estas personas aportaron.

árbol de arce
fuente
2
-1: no estoy de acuerdo con que un "buen" ingeniero de software sea un experto en consultas de bases de datos relacionales.
John Saunders
3
¿Aún no está de acuerdo si digo que es un buen ingeniero de software de aplicaciones EMPRESARIALES o EMPRESARIALES (a diferencia de los sistemas integrados, etc.) y si dijera que esta persona debería ser experta en consultas ESTÁNDAR de bases de datos relacionales (sin un proveedor de pantalones elegantes detalles como consultas analíticas y similares) CUALQUIER ingeniero de software que lleve las etiquetas que especifiqué a fondo debe comprender completamente y demostrar ampliamente todos los tipos de uniones, uniones, intersecciones y fusiones, vistas en línea, condiciones, conjuntos de resultados de ordenación y agrupación.
maple_shaft
44
Meh Trabajo en una gran empresa de software y no tratamos con ningún RDBMS. Mi último trabajo desarrollando software de escritorio tampoco requirió ningún SQL. No estoy seguro de cómo define las aplicaciones empresariales y empresariales, pero me parece que su punto de vista sobre las cosas es un poco limitado.
Adam Lear
2
Mantengo lo que dije. Teóricamente, si la aplicación está organizada en niveles y bien compuesta, entonces no hay necesidad, sin embargo, en toda mi experiencia profesional, mi equipo y yo HABRÍAMOS ABANDONADO si no fuéramos expertos en SQL, incluso cuando teníamos un equipo dedicado para el diseño y desarrollo de RDBMS. ¿Quizás soy anticuado o simplemente tengo una suerte terrible en mi carrera?
maple_shaft
3
@maple_shaft Sí, no es que las aplicaciones en las que he trabajado estén suficientemente compuestas. Es que no usaron ningún RDBMS, punto. Diferentes campos, supongo. El punto es que no se puede decir que todo desarrollador de negocios / empresas debe ser bueno en SQL. Simplemente no es verdad. Sé bueno si lo usas. No se preocupe demasiado si no lo hace hasta que lo necesite, como con cualquier otro idioma o tecnología.
Adam Lear
6

Otros ya han respondido su pregunta sobre consultas de bases de datos.

El diseño de la base de datos es un tipo particular de diseño. No es tan difícil de aprender, pero el diseñador de bases de datos típico no tiene tantas oportunidades para diseñar una base de datos.

El lugar donde estoy trabajando ahora tiene el mismo diseño de base de datos que tenía en 1970. Hemos movido la base de datos de IDMS a DB2, pero es el mismo diseño de base de datos de red. He tenido la oportunidad de crear 5 nuevas tablas de DB2 en los 9 años que he trabajado aquí.

Sospecho que hay muy pocos lugares de trabajo con un diseñador de bases de datos dedicado. Por lo tanto, concluiría que el diseño de la base de datos se considera parte del repertorio de un analista sénior.

Gilbert Le Blanc
fuente
5

Estoy francamente sorprendido de que muchos de nosotros pensemos que cada desarrollo gira en torno a una base de datos, y una base de datos SQL.

Otros han mencionado las muchas formas en que podemos evitar el meollo del SQL en nuestros trabajos, incluso cuando trabajamos (indirectamente) con bases de datos, pero ¿qué pasa con todos los desarrolladores que escriben el firmware para los 101 productos eléctricos que cada uno de nosotros? ¿poseer? ¿Qué pasa con los chicos especializados en monitoreo en tiempo real?

Sugeriría que la mayoría de los desarrolladores de hoy tendrán habilidades de SQL en mayor o menor grado, pero está lejos de ser un barómetro de su capacidad.

cjmUK
fuente
5

Creo que sobreestimas la importancia de las bases de datos en el software.

Muchas clases de aplicaciones no están centradas en la base de datos.

¿Necesitamos un DBMS en procesadores de texto y editores de imágenes ahora? ¿Qué pasa con el reconocimiento de voz y los sistemas de visión por computadora? ¿Contienen muchas consultas de bases de datos?

¿Y qué hay de los editores de video lineales y los motores físicos de videojuegos?

Alex Jasmin
fuente
5

Esperaría que un desarrollador generalista tenga al menos un conocimiento de las tecnologías de bases de datos (relacionales o de otro tipo) y pueda discutir las ventajas y desventajas de usarlas. De lo contrario, me temo que todo lo que saben hacer es introducir datos en archivos planos.

Barry Brown
fuente
4

No creo que la escritura de consultas deba ser un requisito central para los programadores. Dicho esto, creo que un programador que pueda escribir consultas y diseñar bases de datos sería más valioso para una organización.

Sin embargo, si este programador solo puede escribir consultas de tipo "select * from tblxxxx", no consideraría que este programador sea un experto. Del mismo modo, si la base de datos diseñada por este programador coloca relaciones uno a muchos en una tabla en lugar de dos tablas, entonces no consideraría que este programador sea un experto.

Así es como explico esto a personas que no son de TI Los profesionales de TI se especializan en ciertas áreas similares a cómo los carpinteros, electricistas y plomeros se especializan en los campos respetados. Tienden a superponer algunas de las habilidades, pero no son expertos en todas las áreas. Un electricista puede realizar tareas simples de carpintería con confianza, pero no sería un buen augurio tratar de abordar estructuras complejas.

Del mismo modo, un programador puede y debe saber cómo escribir o manipular consultas simples y diseños de bases de datos, pero no se espera que diseñe una estructura de datos compleja.

Michael Riley - también conocido como Gunny
fuente
3

Mirando a nuestro alrededor, depende:

  • Nuestros desarrolladores de escritorio / web / servidor . Al menos se requiere que escriba declaraciones básicas o avanzadas de acuerdo con su especialidad. Para la optimización tenemos algunos administradores de bases de datos especializados.
  • Nuestros programadores integrados . Muchos nunca pasaron de "select * from mytable". Sin embargo, eso también cambió en estos últimos meses con la introducción de sqllite en sus proyectos.
Carra
fuente