I programmatori esperti dovrebbero conoscere le query del database? [chiuso]


35

Ci sono così tanti programmatori là fuori che sono anche esperti nella scrittura di query e nella progettazione di database.

Questo dovrebbe essere un requisito fondamentale per essere un programmatore esperto o un ingegnere del software?

Sebbene ci siano molte somiglianze nel modo in cui vengono sviluppate le query e i codici, la mia opinione personale è che le query sembrano avere una struttura diversa rispetto al codice e può essere difficile padroneggiare entrambi contemporaneamente a causa dei diversi approcci.


2
Cosa intendi per "struttura"? Se stai parlando di semantica, che afferrare qualsiasi tipo di nuova semantica non dovrebbe essere un problema per un " esperto ". Per definizione. OTOH, solo pochi sviluppatori sono esposti a database e linguaggi di query, al resto di noi non importa affatto.
SK-logic,

3
Penso che questo sia un presupposto errato: "Ci sono così tanti programmatori là fuori che sono anche esperti nella scrittura di query e nella progettazione di database". Ci sono relativamente pochi programmatori esperti in queste cose: DBA! = SE.
Ashley,

1
Quanto è difficile scrivere query sul database?
Captain Sensible,

@CaptainShakespeare, davvero può diventare abbastanza difficile una volta superate le operazioni CRUD. Ty fa rapporti complessi qualche volta. E poi guarda le query di ottimizzazione delle prestazioni.
HLGEM,

Risposte:


69

Il fatto che la scrittura di query di database debba essere un requisito fondamentale dipende dal lavoro, ma i database relazionali sono onnipresenti nella tecnologia attuale.

Quindi, se incontrassi un programmatore che non sapeva come scrivere le query del database, mi aspetterei una di queste due cose:

  1. Sono generalmente inesperti.
  2. Sono altamente specializzati in un altro campo (ad esempio i sistemi integrati) e non hanno mai avuto bisogno di impararlo.

Le query del database sono sostanzialmente diverse dai linguaggi di programmazione più standard. Sono algebrici e destinati a operare su dati relazionali, mentre C # o Java sono imperativi e operano su dischi, memoria, input dell'utente, ecc. Anche i linguaggi funzionali come LISP o Haskell che hanno una forma più algebrica sono meno orientati ai dati relazionali.

EDIT: Come è stato sottolineato nei commenti da me e da altri, ci sono alcuni motivi validi per cui uno sviluppatore esperto potrebbe non conoscere bene le query del database:

  • Il loro team ha utilizzato ORM / NoSQL
  • Il loro team aveva programmatori DB
  • La complessità dell'applicazione era nella logica aziendale e le query del DB erano banali
  • Il loro team ha ripartito il lavoro in modo tale che alcuni programmatori non scrivessero query

Sebbene validi, questi avvertimenti non sono ragioni convincenti per cui uno sviluppatore esperto non conoscerebbe le query del database. Se non altamente specializzato, un programmatore dovrebbe avere familiarità con i database relazionali.

In sintesi, gli sviluppatori più esperti dovrebbero conoscere le query del database .


1
Quindi, se qualcuno ha fatto un progetto non banale che utilizzava Database, dovrebbe conoscere le domande, giusto?
Shamim Hafiz,

3
@Shamim, mi aspetto che questa persona abbia una moderata esperienza con le domande a meno che questa persona non sia junior o entry level. Forse questa persona ha solo pochi anni di esperienza ed è stata protetta da un team altamente specializzato?
maple_shaft

12
@Shamim probabilmente me lo sarei aspettato. Hanno ancora potrebbe essere un buon programmatore. A domande come questa è molto difficile rispondere, perché sono così tanti avvertimenti: forse il team aveva un programmatore DB; forse la non-trivalenza dell'applicazione era nella logica aziendale e le query del database erano banali; forse hanno ripartito il lavoro in modo tale che il programmatore non abbia lavorato sulle query; ecc.
Matthew Rodatus,

4
Il mio team di sviluppo ha programmatori PL / SQL dedicati come parte del progetto. Pertanto, mentre i programmatori .Net possono eseguire query semplici, sono lì per esaminarlo e sviluppare query più complesse. Inoltre, con la proliferazione di ORM (e NOSQL), perché pensi che gli sviluppatori non SQL debbano conoscere query complesse.
softveda,

2
@Matteo Rodatus: ho lavorato in luoghi con librerie che gestivano le query, quindi teoricamente sarebbe possibile lavorare lì senza comprendere il semplice SQL. Credo che tutti gli sviluppatori ne fossero competenti in pratica.
David Thornley,

23

Qualsiasi ingegnere del software dovrebbe avere una conoscenza di base dei database e di come archiviare e recuperare i dati usando SQL, almeno al livello in cui hanno una comprensione di ciò che può essere usato (e con ciò includerei una comprensione di chiavi, viste , stored procedure e trigger).

Non tutti gli ingegneri del software devono essere esperti e il livello di esperienza richiesto dipende dal tipo di software su cui si concentrano. Software, driver hardware e sistemi operativi incorporati raramente utilizzano SQL, ma il software applicativo (sia esso web o desktop o basato su servizi / daemon) utilizza continuamente database.


1
Fortunatamente, oggi è perfettamente ok fare applicazioni senza alcun RDBMS. La maggior parte delle attività non ne ha bisogno o semplicemente non può essere adeguatamente mappata a un modello relazionale. Ci sono tonnellate di opzioni di archiviazione non relazionali disponibili.
SK-logic,

8
Questo riassume anche la mia opinione. Esperto? No. Conoscenza? Sì.
Wayne Molina,

2
@ SK-logic, Quali tipi di opzioni ritieni irrilevanti per i database relazionali? Il datawarehousing è troppo specializzato per l'analisi per essere utile in un sistema transazionale. E non farmi iniziare su tutto ciò che non va in OODBMS.
maple_shaft

1
@maple_shaft, esistono numerose soluzioni di archiviazione specializzate e orientate al dominio. RDBMSes cerca di essere generico e non ci riesce molto. In alcuni casi anche i DBMS gerarchici antichi sono molto meglio dei relazionali.
SK-logic,

6
Non tutti i software desktop utilizzano database, quindi fai attenzione quando dici che succede sempre.
Adam Lear

18

Esistono alcune aree di competenza (ad esempio sistemi integrati) in cui non è necessaria la conoscenza del database. Ma la maggior parte delle applicazioni aziendali utilizza un database di qualche tipo e se non si capisce perfettamente come utilizzarlo correttamente, è possibile creare un pasticcio di prestazioni che è estremamente difficile da risolvere. I database di refactoring possono essere un processo complesso e difficile e molti posti scelgono di non risolvere i problemi strutturali a causa di quella difficoltà e di scavare più a fondo in un buco. Se hai conoscenza del database, la progettazione è molto più semplice e molto più probabile che funzioni bene nel tempo.

Gli ORM non sostituiscono la conoscenza del database. Chiunque ne usi uno senza conoscere le basi della query e della progettazione del database è condannato a disporre di un database scarsamente performante e mal progettato che influirà sulla capacità a lungo raggio dell'applicazione di gestire il carico. Gli ORM nelle mani di qualcuno che sa cosa sta facendo vanno bene; nelle mani di persone che non possono preoccuparsi di conoscere i database, di solito sono un disastro.

Se avessi un progetto con un back-end del database, lo specialista del database sarebbe il secondo sviluppatore che assumerei (dopo lo sviluppatore dell'applicazione iniziale). I database non sono generalmente usa e getta, i dati saranno ancora lì quasi nella stessa forma 20 anni dopo, è utile avere esperienza nelle fasi iniziali.

I progetti spesso finiscono nei guai perché non assumono queste persone fino a quando il database non ha 100.000.000 di record e funziona lentamente. Oppure danno la colpa allo strumento per essere cattivo (nessun SQL Server non è lento se si progetta correttamente) e non per la loro incompetenza progettuale.


4
+1 per menzionare che la presenza di un ORM non sostituisce la necessità di conoscere SQL (o i fattori sottostanti in qualunque tipo di db in uso).
RHSeeger,

4
+1 e vorrei poterti dare altri 100! Conosco quella corellazione! = Causalità ma per me è più che evidente che gli sviluppatori di applicazioni più efficaci con cui abbia MAI lavorato abbiano avuto una conoscenza approfondita di come scrivere una query SELECT standard. Dovrei essere in grado di consegnare a un buon sviluppatore un modello di dati e una "domanda" sui dati e quella persona alla fine dovrebbe essere in grado di scrivere una query che "risponda" alla mia domanda.
maple_shaft

1
+1, sono totalmente d'accordo. Non compro la spiegazione che "usiamo ORM" o "abbiamo programmatori dedicati per questo". Se qualcuno ha davvero esperienza , a un certo punto avrebbe ricoperto il ruolo di sviluppatore di database. Questa è l'esperienza.
GrandmasterB,

15

La risposta politicamente corretta: dipende. La conoscenza di SQL non ha alcun valore se lo sviluppatore non lavora mai con database relazionali (e al giorno d'oggi delle applicazioni NoSQL, in realtà è abbastanza probabile).

In secondo luogo, quando esiste un DBA o un writer di query a tempo pieno (qualunque sia il titolo), anche la comprensione è di minore importanza.

È davvero importante solo se lo sviluppatore deve essere un tuttofare e c'è un requisito nei suoi progetti per l'utilizzo di un database relazionale (ad esempio in applicazioni Web vecchio stile o per la connessione con database esistenti)

La mia opinione personale: No. Uno sviluppatore di software esperto dovrebbe essere in grado di apprendere una nuova abilità (come SQL) se e quando è necessario, non "per impostazione predefinita". La flessibilità e la capacità di apprendere e comprendere è ciò che differenzia un buon sviluppatore da uno a posto. Si applica anche la regola del "martello d'oro": se si dispone di uno sviluppatore con una vasta conoscenza di SQL, è molto probabile che questo sviluppatore tirerà fuori lo strumento che conosce meglio - database relazionali - per tentare di risolvere ogni problema, mentre non ha necessariamente per essere la soluzione migliore. Naturalmente, questo vale anche per i sostenitori di NoSQL,;).

Scegliere lo strumento giusto per il lavoro giusto è ciò che un programmatore esperto dovrebbe sapere.


I database NoSQL non elaborano più dati, o più velocemente, dei database relazionali. Non so dove l'hai sentito, ma è palesemente, pericolosamente sbagliato.
Aaronaught,

@Aaronaught - A cura, grazie per l'heads-up del mio presupposto prematuro, :).
Cthulhu,

7

Dai un'occhiata a questa introduzione di Wikipedia alla programmazione per computer:

La programmazione informatica (spesso abbreviata in programmazione o codifica) è il processo di progettazione, scrittura, test, debug / risoluzione dei problemi e mantenimento del codice sorgente dei programmi per computer. Questo codice sorgente è scritto in un linguaggio di programmazione. Lo scopo della programmazione è quello di creare un programma che mostri un determinato comportamento desiderato.

Le query del database hanno le loro lingue, possono essere progettate, testate, debbuged e mantenute. Lo scopo di una query nel database è di consentirti di ottenere le informazioni di cui hai bisogno, nel modo in cui ne hai bisogno.

Quindi penso che stia programmando, sicuramente.


7

Un buon ingegnere informatico con esperienza in applicazioni aziendali e commerciali (EDIT: in particolare in progetti che utilizzano un RDBMS) dovrebbe avere una conoscenza approfondita della scrittura di query di database relazionali nel formato standard. Inoltre, dovrebbero essere in grado di comprendere schemi complessi e proporre progetti di schemi di complessità almeno moderata.

La progettazione di schemi estremamente avanzati o complicati dovrebbe essere il regno di un modellatore di dati o di un architetto funzionale.

Ciò non significa che neanche i programmatori di database abbiano un posto. Le procedure complesse memorizzate, le query complesse ed efficienti e la progettazione e l'architettura del software a livello di database incentrate sugli strumenti e le offerte unici di un singolo fornitore di database (ad es. Oracle, MySQL, SQLServer, ecc ...) dovrebbero essere lasciati nel migliore dei modi al software professionale ingegneri che hanno esperienza con queste offerte altamente specializzate e complicate.

La stragrande maggioranza dei sistemi aziendali e aziendali, tuttavia, secondo me non giustifica la necessità di modellatori di dati e programmatori di database specializzati, ma ho già lavorato a progetti di questo tipo che hanno beneficiato enormemente della conoscenza e dell'esperienza che queste persone hanno portato al tavolo.


2
-1: fortemente in disaccordo sul fatto che un "buon" ingegnere del software dovrebbe essere un esperto in query di database relazionali.
John Saunders,

3
Non saresti ancora d'accordo se dico che un buon ingegnere software applicativo ENTERPRISE o BUSINESS (al contrario di sistemi integrati, ecc ...) e se dicessi che questa persona dovrebbe essere un esperto in query di database relazionali STANDARD (senza fornitore di fantasia-pantaloni specifiche come query analitiche e simili)? Una comprensione approfondita delle istruzioni SQL SELECT, tutti i tipi di join, unioni, intersecazioni e fusioni, viste in linea, condizioni, ordini e raggruppamenti di risultati deve essere accuratamente compreso e ampiamente dimostrato da QUALSIASI ingegnere del software che porta le etichette che ho specificato sopra.
maple_shaft

4
Meh. Lavoro in una grande azienda di software e non gestiamo alcun RDBMS. Anche il mio ultimo lavoro nello sviluppo di software desktop non ha richiesto alcun SQL. Non sono sicuro di come definiate le applicazioni aziendali e aziendali, ma mi sembra che la vostra visione delle cose sia un po 'ristretta.
Adam Lear

2
Attendo quello che ho detto. Teoricamente, se l'applicazione è suddivisa in livelli e ben strutturata, non è necessario, tuttavia, in tutta la mia intera esperienza professionale, il mio team e io saremmo DROWN se non fossimo esperti di SQL, anche quando avessimo un team dedicato per la progettazione e lo sviluppo di RDBMS. Forse sono vecchio stile o ho solo una terribile fortuna nella mia carriera?
albero di acero

3
@maple_shaft Sì, non è che le applicazioni su cui ho lavorato fossero sufficientemente strutturate. È che non hanno usato alcun RDBMS, punto. Campi diversi, immagino. Il punto è che non si può dire che ogni sviluppatore aziendale / aziendale deve essere bravo in SQL. Semplicemente non è vero. Sii bravo se lo usi. Non preoccuparti troppo se non lo fai fino a quando non ne hai bisogno, come con qualsiasi altra lingua o tecnologia.
Adam Lear

6

Altri hanno già risposto alla tua domanda sulle query del database.

Il design del database è un tipo particolare di design. Non è difficile da imparare, ma il tipico progettista di database non ha molte opportunità di progettare un database.

Il posto in cui lavoro ora ha lo stesso design del database che aveva nel 1970. Abbiamo spostato il database da IDMS a DB2, ma è lo stesso design del database di rete. Ho avuto l'opportunità di creare 5 nuove tabelle DB2 nei 9 anni in cui ho lavorato qui.

Ho il sospetto che ci siano pochissimi posti di lavoro con un progettista di database dedicato. Quindi, concludo che la progettazione del database è considerata parte del repertorio di un analista senior.


5

Sono francamente sorpreso dal fatto che così tanti di noi pensino che ogni sviluppo ruota attorno a un database e ad un database SQL.

Altri hanno menzionato i molti modi in cui possiamo evitare la nitidezza di SQL nei nostri lavori, anche quando stiamo lavorando (indirettamente) con database, ma per quanto riguarda tutti gli sviluppatori che scrivono il firmware per i 101 prodotti elettrici che ognuno di noi possedere? E i ragazzi specializzati nel monitoraggio in tempo reale?

Suggerirei che la maggior parte degli sviluppatori di oggi disporrà di competenze SQL a vari livelli, ma è ben lungi dall'essere un barometro delle loro capacità.


5

Penso che tu sopravvaluti l'importanza dei database nel software.

Molte classi di applicazione non sono incentrate sul database.

Abbiamo bisogno di un DBMS negli elaboratori di testi e negli editor di immagini adesso? Che dire del riconoscimento vocale e dei sistemi di visione artificiale contengono molte query sul database?

E che dire degli editor video lineari e dei motori fisici dei videogiochi?


5

Mi aspetto che uno sviluppatore generalista abbia almeno una consapevolezza delle tecnologie di database (relazionali o meno) e sia in grado di discutere i vantaggi e gli svantaggi dell'utilizzo di queste. Altrimenti, avrei paura che tutto ciò che sanno fare sia trasferire i dati in file flat.


4

Non penso che la scrittura di query dovrebbe essere un requisito fondamentale per i programmatori. Detto ciò, ritengo che un programmatore in grado di scrivere query e progettare database sarebbe più prezioso per un'organizzazione.

Tuttavia, se questo programmatore può scrivere solo query di tipo "select * from tblxxxx" non considererei questo programmatore un esperto. Allo stesso modo, se il database progettato da questo programmatore inserisce relazioni uno-a-molti in una tabella anziché in due tabelle, non considererei questo programmatore un esperto.

Ecco come lo spiego a persone non IT. I professionisti IT sono specializzati in alcune aree simili a come i carpentieri, gli elettricisti e gli idraulici si specializzano in settori rispettati. Tendono a sovrapporre alcune delle competenze ma non sono esperti in tutti i settori. Un elettricista può svolgere semplici compiti di carpenteria con sicurezza ma non promette nulla di buono nel tentativo di affrontare strutture complesse.

Allo stesso modo, un programmatore può e deve sapere come scrivere o manipolare semplici query e progetti di database ma non ci si aspetta che progettino una struttura di dati complessa.


3

Guardandosi intorno nel nostro dipartimento, dipende:

  • I nostri sviluppatori desktop / web / server . Almeno richiesto di scrivere istruzioni crud di base o avanzate a seconda della loro specialità. Per l'ottimizzazione abbiamo alcuni amministratori DB specializzati.
  • I nostri programmatori integrati . Parecchi non hanno mai superato "select * from mytable". Tuttavia, ciò è cambiato anche in questi ultimi mesi con l'introduzione di sqllite nei loro progetti.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.