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.
Respuestas:
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:
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:
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 .
fuente
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.
fuente
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.
fuente
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.
fuente
Echa un vistazo a esta introducción de Wikipedia a la programación de computadoras:
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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?
fuente
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.
fuente
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.
fuente
Mirando a nuestro alrededor, depende:
fuente