Prefazione
Questo è davvero un compito scoraggiante, e c'è molto terreno da percorrere. Quindi sto umilmente suggerendo questo come una guida in qualche modo completa per il tuo team, con indicazioni su strumenti appropriati e materiale educativo.
Ricorda: queste sono linee guida e che come tali sono pensate per essere adottate, adattate o eliminate in base alle circostanze.
Attenzione: scaricare tutto questo in una squadra alla volta molto probabilmente fallirebbe. Dovresti provare a scegliere gli elementi che ti darebbero il miglior rapporto qualità-prezzo e presentarli lentamente, uno alla volta.
Nota: non tutto ciò si applica direttamente ai sistemi di programmazione visiva come G2. Per dettagli più specifici su come gestirli, vedere la sezione Addendum alla fine.
Riepilogo esecutivo per impaziente
- Definire una struttura di progetto rigida , con:
- modelli di progetto ,
- convenzioni di codifica ,
- sistemi di costruzione familiari ,
- e serie di linee guida per l' utilizzo della tua infrastruttura e dei tuoi strumenti.
- Installa un buon SCM e assicurati che sappiano come usarlo.
- Indirizzali verso IDE validi per la loro tecnologia e assicurati che sappiano come utilizzarli.
- Implementare controlli di qualità del codice e report automatici nel sistema di compilazione.
- Associare il sistema di build a sistemi di integrazione continua e ispezione continua .
- Con l'aiuto di quanto sopra, identificare "hotspot" di qualità del codice e refactor .
Ora per la versione lunga ... Attenzione, preparatevi!
La rigidità è (spesso) buona
Questa è un'opinione controversa, poiché la rigidità è spesso vista come una forza che lavora contro di te. È vero per alcune fasi di alcuni progetti. Ma una volta che lo vedi come un supporto strutturale, una struttura che toglie le congetture, riduce notevolmente la quantità di tempo e fatica sprecati. Fallo funzionare per te, non contro di te.
Rigidità = processo / procedura .
Lo sviluppo del software ha bisogno di buoni processi e procedure esattamente per le stesse ragioni per cui gli impianti o le fabbriche chimiche hanno manuali, procedure, esercitazioni e linee guida di emergenza: prevenire risultati negativi, aumentare la prevedibilità, massimizzare la produttività ...
La rigidità arriva con moderazione, però!
Rigidità della struttura del progetto
Se ogni progetto ha una sua struttura, tu (e i nuovi arrivati) siete persi e dovete riprenderli da capo ogni volta che li aprite. Non lo vuoi in un negozio di software professionale e nemmeno in un laboratorio.
Rigidità dei sistemi di costruzione
Se ogni progetto ha un aspetto diverso, ci sono buone probabilità che si costruiscano anche in modo
diverso . Una build non dovrebbe richiedere troppe ricerche o troppe congetture. Si vuole essere in grado di fare la cosa canonica e non è necessario preoccuparsi di specifiche: configure; make install
, ant
,
mvn install
, ecc ...
Riutilizzare lo stesso sistema di build e farlo evolvere nel tempo garantisce anche un livello costante di qualità.
Hai bisogno di una rapida README
indicazione delle specifiche del progetto e di guidare con garbo l'utente / sviluppatore / ricercatore, se presente.
Ciò facilita notevolmente anche altre parti della tua infrastruttura di costruzione, vale a dire:
Quindi mantieni aggiornato il tuo build (come i tuoi progetti), ma rendilo più rigoroso nel tempo e più efficiente nel segnalare violazioni e cattive pratiche.
Non reinventare la ruota e riutilizzare ciò che hai già fatto.
Lettura consigliata:
Rigidità nella scelta dei linguaggi di programmazione
Non puoi aspettarti, specialmente in un ambiente di ricerca, che tutti i team (e ancor meno tutti gli sviluppatori) utilizzino lo stesso linguaggio e lo stesso stack tecnologico. Tuttavia, è possibile identificare una serie di strumenti "supportati ufficialmente" e incoraggiarne l'uso. Il resto, senza una buona logica, non dovrebbe essere consentito (oltre alla prototipazione).
Mantieni il tuo stack tecnologico semplice e la manutenzione e l'ampiezza delle competenze richieste al minimo indispensabile: un nucleo forte.
Rigidità delle convenzioni e linee guida sulla codifica
Convenzioni e linee guida per la codifica sono ciò che ti consente di sviluppare sia un'identità di squadra, sia un linguaggio condiviso . Non vuoi sbagliare in terra incognita ogni volta che apri un file sorgente.
Norme insensate che rendono la vita più dura o vietano le azioni esplicitamente nella misura in cui i commessi vengono rifiutati sulla base di singole semplici violazioni sono un onere. Però:
Approccio personale: sono aggressivo quando si tratta di convenzioni di programmazione, alcuni addirittura dicono nazista , perché credo di avere una
lingua franca , uno stile riconoscibile per la mia squadra. Quando il codice di merda viene registrato, si distingue come una ferita fredda sulla faccia di una stella di Hollywood: innesca automaticamente una recensione e un'azione. In effetti, a volte sono arrivato al punto di sostenere l'uso di hook pre-commit per rifiutare commit non conformi. Come accennato, non dovrebbe essere eccessivamente pazzo e ostacolare la produttività: dovrebbe guidarlo. Introducili lentamente, soprattutto all'inizio. Ma è preferibile spendere così tanto tempo a correggere il codice difettoso che non puoi lavorare su problemi reali.
Alcune lingue lo impongono persino in base alla progettazione:
- Java aveva lo scopo di ridurre la quantità di schifezze noiose che puoi scrivere con esso (anche se senza dubbio molti riescono a farlo).
La struttura a blocchi di Python per rientro è un'altra idea in questo senso.
Vai, con il suo gofmt
strumento, che toglie completamente ogni dibattito e sforzo ( ed ego !! ) inerenti allo stile: corri gofmt
prima di impegnarti.
Assicurati che il marciume del codice non possa scorrere. Convenzioni di codice , integrazione continua e ispezione continua , programmazione di coppie e revisioni del codice sono il tuo arsenale contro questo demone.
Inoltre, come vedrai di seguito, il codice è documentazione e questa è un'altra area in cui le convenzioni incoraggiano la leggibilità e la chiarezza.
Rigidità della documentazione
La documentazione va di pari passo con il codice. Il codice stesso è documentazione. Ma ci devono essere istruzioni chiare su come costruire, usare e mantenere le cose.
Utilizzare un unico punto di controllo per la documentazione (come un WikiWiki o un DMS) è una buona cosa. Crea spazi per progetti, spazi per battute e sperimentazione più casuali. Chiedi a tutti gli spazi di riutilizzare regole e convenzioni comuni. Cerca di renderlo parte dello spirito di squadra.
La maggior parte dei consigli che si applicano al codice e agli strumenti si applica anche alla documentazione.
Rigidità nei commenti sul codice
Anche i commenti sul codice, come menzionato sopra, sono documentazione. Agli sviluppatori piace esprimere i loro sentimenti riguardo al loro codice (principalmente orgoglio e frustrazione, se me lo chiedi). Quindi non è insolito per loro esprimerli in termini non incerti nei commenti (o persino nel codice), quando un pezzo di testo più formale avrebbe potuto trasmettere lo stesso significato con meno imprevisti o drammi. Va bene lasciarne passare alcuni per motivi storici e divertenti: fa anche parte dello sviluppo di una cultura di squadra . Ma è molto importante che tutti sappiano cosa è accettabile e cosa non lo è, e quel rumore di commento è proprio questo:
rumore .
Rigidità nei log di commit
I log di commit non sono un "passo" fastidioso e inutile del ciclo di vita del tuo SCM: NON lo salti per tornare a casa in tempo o andare avanti con l'attività successiva o per incontrare gli amici che sono partiti per pranzo. Sono importanti e, come il (buon) buon vino, più passa il tempo più diventano preziosi. Quindi falli bene. Sono sbalordito quando vedo i colleghi scrivere una riga per impegni giganti o hack non ovvi.
I commit vengono eseguiti per un motivo e tale motivo NON è sempre chiaramente espresso dal codice e dall'unica riga del log di commit immessi. C'è di più.
Ogni riga di codice ha una storia e una storia . I diff possono raccontarne la storia, ma devi scriverne la storia.
Perché ho aggiornato questa linea? -> Perché l'interfaccia è cambiata.
Perché l'interfaccia è cambiata? -> Perché la libreria L1 che la definisce è stata aggiornata.
Perché la libreria è stata aggiornata? -> Perché la libreria L2, necessaria per la funzione F, dipendeva dalla libreria L1.
E qual è la funzione X? -> Vedi l'attività 3456 nel tracker dei problemi.
Non è una mia scelta SCM e potrebbe non essere la migliore per il tuo laboratorio; ma funziona Git
bene e cerca di forzarti a scrivere buoni registri più della maggior parte degli altri sistemi SCM, usando short logs
e
long logs
. Collega l'ID attività (sì, ne hai bisogno) e lascia un riepilogo generico per shortlog
, ed espandi nel registro lungo: scrivi la storia del changeset .
È un registro: è qui per tenere traccia e registrare gli aggiornamenti.
Regola empirica: se stavi cercando qualcosa su questa modifica in un secondo momento, è probabile che il tuo registro risponda alla tua domanda?
Progetti, documentazione e codice sono VIVI
Tienili sincronizzati, altrimenti non formano più quell'entità simbiotica. Funziona a meraviglia quando hai:
- cancella i log di commit nel tuo SCM, con collegamenti agli ID attività nel tracker dei problemi,
- dove i ticket di questo tracker si collegano direttamente ai changeset nel tuo SCM (e possibilmente ai build nel tuo sistema CI),
- e un sistema di documentazione che collega a tutti questi.
Il codice e la documentazione devono essere coerenti .
Rigidità nei test
Regole pratiche:
- Ogni nuovo codice deve contenere (almeno) test unitari.
- Qualsiasi codice legacy refactored deve contenere test unitari.
Naturalmente, questi hanno bisogno di:
- per testare effettivamente qualcosa di prezioso (o sono una perdita di tempo ed energia),
- per essere ben scritto e commentato (proprio come qualsiasi altro codice che si effettua il check-in).
Sono anche documentazione e aiutano a delineare il contratto del codice. Soprattutto se si utilizza TDD . Anche se non lo fai, ne hai bisogno per la tua tranquillità. Sono la tua rete di sicurezza quando incorpori il nuovo codice (manutenzione o funzionalità) e la tua torre di guardia per proteggerti dal marciume del codice e dai guasti ambientali.
Ovviamente, dovresti andare oltre e avere test di integrazione e
test di regressione per ogni bug riproducibile che risolvi.
Rigidità nell'uso degli strumenti
Va bene per lo sviluppatore / scienziato occasionale voler provare un nuovo controllo statico sull'origine, generare un grafico o un modello usando un altro o implementare un nuovo modulo usando un DSL. Ma è meglio se esiste un set canonico di strumenti che tutti i membri del team dovrebbero conoscere e utilizzare.
Oltre a ciò, lascia che i membri usino ciò che vogliono, purché siano TUTTI:
- produttivo ,
- NON richiede regolarmente assistenza
- NON adeguarsi regolarmente alla tua infrastruttura generale ,
- NON interrompere la tua infrastruttura (modificando aree comuni come codice, sistema di compilazione, documentazione ...),
- NON influisce sul lavoro degli altri ,
- IN GRADO di eseguire tempestivamente qualsiasi attività richiesta .
In caso contrario, imporre che vengano ripristinati i valori predefiniti.
Rigidità vs versatilità, adattabilità, prototipazione ed emergenze
La flessibilità può essere buona. Consentire a qualcuno di usare occasionalmente un hack, un approccio rapido e uno strumento preferito per gli animali domestici per fare il lavoro
va bene. Non lasciare MAI che diventi un'abitudine e MAI lasciare che questo codice diventi la base di codice effettiva da supportare.
Questioni di spirito di squadra
Sviluppa un senso di orgoglio nella tua base di codice
- Sviluppa un senso di orgoglio nel codice
- Usa i wallboard
- classifica per un gioco di integrazione continua
- wallboard per la gestione dei problemi e il conteggio dei difetti
- Usa un tracker / bug tracker
Evita i giochi di colpa
- Usa i giochi di integrazione continua / ispezione continua: promuove una competizione educata e produttiva .
- Tieni traccia dei difetti: è solo un buon servizio di pulizia.
- DO individuando cause di fondo : è solo processi a prova di futuro.
- MA NON assegnare la colpa : è controproducente.
Riguarda il codice, non gli sviluppatori
Rendere gli sviluppatori consapevoli della qualità del loro codice, MA far loro vedere il codice come un'entità distaccata e non un'estensione di se stessi, che non può essere criticata.
È un paradosso: è necessario incoraggiare la programmazione senza ego per un ambiente di lavoro sano ma fare affidamento sull'ego per scopi motivazionali.
Dallo scienziato al programmatore
Le persone che non apprezzano e sono orgogliose del codice non producono un buon codice. Affinché questa proprietà emerga, devono scoprire quanto può essere preziosa e divertente. La semplice professionalità e il desiderio di fare del bene non bastano: ha bisogno di passione. Quindi devi trasformare i tuoi scienziati in
programmatori (in senso lato).
Qualcuno ha sostenuto nei commenti che dopo 10 o 20 anni su un progetto e il suo codice, chiunque avrebbe sentito attaccamento. Forse mi sbaglio ma presumo siano orgogliosi dei risultati del codice, del lavoro e della sua eredità, non del codice stesso o dell'atto di scriverlo.
Per esperienza, la maggior parte dei ricercatori considera la programmazione come una necessità, o nella migliore delle ipotesi una distrazione divertente. Vogliono solo che funzioni. Quelli che sono già abbastanza esperti e che hanno un interesse per la programmazione sono molto più facili da convincere di adottare le migliori pratiche e cambiare le tecnologie. Devi prenderli a metà strada.
La manutenzione del codice fa parte del lavoro di ricerca
Nessuno legge documenti di ricerca scadenti. Ecco perché sono sottoposti a revisione paritaria, riletti, perfezionati, riscritti e approvati più volte fino a quando non saranno considerati pronti per la pubblicazione. Lo stesso vale per una tesi e una base di codice!
Metti in chiaro che il costante refactoring e aggiornamento di una base di codice impedisce la putrefazione del codice e riduce il debito tecnico e facilita il riutilizzo e l'adattamento futuri del lavoro per altri progetti.
Perché tutto questo??!
Perché ci preoccupiamo di tutto quanto sopra? Per la qualità del codice . O è
un codice di qualità ...?
Queste linee guida mirano a guidare la tua squadra verso questo obiettivo. Alcuni aspetti lo fanno semplicemente mostrando loro la strada e lasciandoli fare (che è molto meglio) e altri li prendono per mano (ma è così che si educano le persone e si sviluppano le abitudini).
Come fai a sapere quando l'obiettivo è a portata di mano?
La qualità è misurabile
Non sempre quantitativamente, ma è misurabile . Come accennato, è necessario sviluppare un senso di orgoglio nella tua squadra e mostrare progressi e buoni risultati è la chiave. Misura regolarmente la qualità del codice e mostra i progressi tra gli intervalli e come conta. Fare retrospettive per riflettere su ciò che è stato fatto e su come ha migliorato o peggiorato le cose.
Ci sono ottimi strumenti per l' ispezione continua . Il sonar è popolare nel mondo Java, ma può adattarsi a qualsiasi tecnologia; e ce ne sono molti altri. Tieni il tuo codice al microscopio e cerca questi fastidiosi bug e microbi fastidiosi.
Ma cosa succede se il mio codice è già una schifezza?
Tutto quanto sopra è divertente e carino come un viaggio a Never Land, ma non è così facile da fare quando hai già (un mucchio di cazzate piene di vapore e puzzolente) e una squadra riluttante a cambiare.
Ecco il segreto: devi iniziare da qualche parte .
Aneddoto personale: in un progetto, abbiamo lavorato con una base di codice che pesava originariamente oltre 650.000+ Java LOC, oltre 200.000 righe di JSP, 40.000+ JavaScript LOC e oltre 400 MB di dipendenze binarie.
Dopo circa 18 mesi, sono 500.000 Java LOC (MOLTO PULITI) , 150.000 linee di JSP e 38.000 JavaScript LOC, con dipendenze fino a appena 100 MB (e queste non sono più nel nostro SCM!).
Come l'abbiamo fatto? Abbiamo appena fatto tutto quanto sopra. O provato duramente.
È uno sforzo di squadra, ma introduciamo lentamente nei nostri regolamenti e strumenti di processo per monitorare la frequenza cardiaca del nostro prodotto, mentre sbricioliamo in fretta il "grasso": codice di merda, dipendenze inutili ... Non abbiamo fermato tutto lo sviluppo per fai questo: abbiamo occasionali periodi di relativa pace e quiete in cui siamo liberi di impazzire sulla base di codice e di separarla, ma la maggior parte delle volte facciamo tutto di default in una modalità di "revisione e refactoring" ogni volta che ne abbiamo l'opportunità : durante le build, a pranzo, durante gli sprint di correzione dei bug, nei pomeriggi di venerdì ...
C'erano alcuni "lavori" di grandi dimensioni ... Il passaggio dal nostro sistema di generazione da una gigantesca build Ant di 8500+ XML LOC a una build Maven multi-modulo era uno di questi. Abbiamo quindi avuto:
- moduli chiari (o almeno era già molto meglio e abbiamo ancora grandi progetti per il futuro),
- gestione automatica delle dipendenze (per una facile manutenzione e aggiornamenti e per rimuovere deps inutili),
- build più veloci, più facili e riproducibili,
- rapporti giornalieri sulla qualità.
Un altro era l'iniezione di "utility tool-cinghia", anche se abbiamo cercato di ridurre le dipendenze: Google Guava e Apache Commons dimagrire il codice e ridurre la superficie e per il bug nel tuo codice di molto.
Abbiamo anche convinto il nostro dipartimento IT che forse usare i nostri nuovi strumenti (JIRA, Fisheye, Crucible, Confluence, Jenkins) era migliore di quelli in atto. Avevamo ancora bisogno di occuparci di alcuni che disprezzavamo (QC, Sharepoint e SupportWorks ...), ma è stata un'esperienza complessivamente migliorata, con ancora un po 'di spazio.
E ogni giorno, ora c'è un rivolo tra una e dozzine di impegni che si occupano solo di riparare e refactoring. Occasionalmente rompiamo le cose (hai bisogno di test unitari e è meglio scriverle prima di rimodellare le cose), ma nel complesso il vantaggio per il nostro morale E per il prodotto è stato enorme. Ci arriva una frazione di una percentuale di qualità del codice alla volta. Ed è divertente vederlo aumentare !!!
Nota: ancora una volta, la rigidità deve essere scossa per fare spazio a cose nuove e migliori. Nel mio aneddoto, il nostro dipartimento IT ha in parte ragione nel cercare di imporci alcune cose, e in altre sbagliato. O forse avevano ragione . Le cose cambiano. Dimostra che sono modi migliori per aumentare la tua produttività. Per questo sono disponibili prove di prova e prototipi .
Il ciclo di refactoring del codice spaghetti super-segreto incrementale per una qualità eccezionale
+-----------------+ +-----------------+
| A N A L Y Z E +----->| I D E N T I F Y |
+-----------------+ +---------+-------+
^ |
| v
+--------+--------+ +-----------------+
| C L E A N +<-----| F I X |
+-----------------+ +-----------------+
Una volta che hai degli strumenti di qualità a portata di mano:
Analizza il tuo codice con controlli di qualità del codice.
Linters, analizzatori statici o cosa hai.
Identifica i tuoi hotspot critici E i frutti bassi .
Le violazioni hanno livelli di gravità e le classi di grandi dimensioni con un numero elevato di classi ad alta gravità sono una grande bandiera rossa: come tali, appaiono come "punti caldi" su tipi di viste radiatore / heatmap.
Correggi prima gli hotspot.
Massimizza il tuo impatto in un breve lasso di tempo in quanto hanno il più alto valore aziendale. Idealmente, le violazioni critiche dovrebbero essere affrontate non appena compaiono, poiché sono potenziali vulnerabilità della sicurezza o cause di crash e presentano un alto rischio di indurre una responsabilità (e, nel tuo caso, cattive prestazioni per il laboratorio).
Elimina le violazioni di basso livello con sweep di codebase automatizzati .
Migliora il rapporto segnale-rumore in modo da poter vedere violazioni significative sul radar mentre appaiono. All'inizio c'è spesso un grande esercito di piccole violazioni se non sono mai state curate e la tua base di codice è stata lasciata libera in natura. Non presentano un vero "rischio", ma compromettono la leggibilità e la manutenibilità del codice. Risolvili mentre li incontri mentre lavori su un'attività o eseguendo grandi ricerche di pulizia con sweep di codice automatizzato, se possibile. Fai attenzione con le auto-sweep di grandi dimensioni se non hai una buona suite di test e un sistema di integrazione. Assicurati di concordare con i colleghi il momento giusto per gestirli per ridurre al minimo il fastidio.
Ripeti fino a quando non sei soddisfatto.
Che, idealmente, non dovresti mai essere, se questo è ancora un prodotto attivo: continuerà ad evolversi.
Suggerimenti rapidi per il buon mantenimento della casa
In modalità hotfix , in base a una richiesta di assistenza clienti:
- Di solito è una buona pratica NON andare in giro a risolvere altri problemi, poiché potresti introdurne di nuovi senza volerlo.
- Vanno esso SEAL-style: entrare, uccidere l'insetto, uscire , e spedire il vostro patch. È un colpo chirurgico e tattico.
Ma per tutti gli altri casi , se apri un file, prendi il tuo dovere di:
- sicuramente: esaminalo (prendi appunti, segnala problemi di file),
- forse: pulire esso (ripuliture stile e violazioni minori),
- idealmente: riformattalo (riorganizza grandi sezioni e i loro vicini).
Basta non lasciarsi sfuggire a passare una settimana da un file all'altro e finire con un enorme cambiamento di migliaia di correzioni che coprono più funzionalità e moduli - rende difficile il tracciamento futuro. Un problema nel codice = un biglietto nel tracker. A volte, un changeset può influire su più ticket; ma se succede troppo spesso, probabilmente stai facendo qualcosa di sbagliato.
Addendum: gestione degli ambienti di programmazione visiva
I giardini murati di sistemi di programmazione su misura
Più sistemi di programmazione, come l'OP G2, sono bestie diverse ...
Nessun "codice" di origine
Spesso non ti danno accesso a una rappresentazione testuale del tuo "codice" sorgente: potrebbe essere memorizzato in un formato binario proprietario, o forse memorizza le cose in formato testo ma le nasconde lontano da te. I sistemi di programmazione grafica su misura non sono in realtà rari nei laboratori di ricerca, in quanto semplificano l'automazione dei flussi di lavoro ripetitivi di elaborazione dei dati.
Nessuna attrezzatura
A parte il loro, cioè. Spesso sei vincolato dal loro ambiente di programmazione, dal loro debugger, dal loro interprete, dai loro strumenti e formati di documentazione. Sono
giardini recintati , tranne se alla fine catturano l'interesse di qualcuno abbastanza motivato da decodificare i loro formati e costruire strumenti esterni, se la licenza lo consente.
Mancanza di documentazione
Abbastanza spesso, si tratta di sistemi di programmazione di nicchia, che vengono utilizzati in ambienti abbastanza chiusi. Le persone che li usano spesso firmano accordi di riservatezza e non parlano mai di ciò che fanno. Le comunità di programmazione per loro sono rare. Quindi le risorse sono scarse. Sei bloccato con il tuo riferimento ufficiale, e basta.
La parte ironica (e spesso frustrante) è che tutte le cose che fanno questi sistemi potrebbero ovviamente essere raggiunte usando linguaggi di programmazione tradizionali e generici, e probabilmente molto più efficacemente. Ma richiede una conoscenza più approfondita della programmazione, mentre non puoi aspettarti che il tuo biologo, chimico o fisico (per citarne alcuni) sappia abbastanza sulla programmazione e ancora meno che abbia il tempo (e il desiderio) di implementare (e mantenere) sistemi complessi, che possono essere o meno di lunga durata. Per lo stesso motivo per cui utilizziamo le DSL, disponiamo di questi sistemi di programmazione personalizzati.
Aneddoto personale 2:In realtà, ho lavorato su uno di questi da solo. Non ho fatto il collegamento con la richiesta del PO, ma il mio progetto era un insieme di grandi pezzi interconnessi di software di elaborazione e archiviazione dei dati (principalmente per la ricerca bioinformatica, sanità e cosmetici, ma anche per le imprese intelligence o qualsiasi dominio che implichi il monitoraggio di grandi volumi di dati di ricerca di qualsiasi tipo e la preparazione di flussi di lavoro di elaborazione dei dati e ETL). Una di queste applicazioni era, semplicemente, un IDE visivo che utilizzava le solite campane e fischietti: interfacce drag and drop, aree di lavoro di progetto con versione (utilizzando file di testo e XML per l'archiviazione dei metadati), molti driver collegabili a origini dati eterogenee e un oggetto visivo canvas per progettare pipeline per elaborare dati da N origini dati e alla fine generare M output trasformati, e possibili visualizzazioni brillanti e report online complessi (e interattivi). Il tuo tipico sistema di programmazione visiva su misura, che soffre di un po 'di sindrome NIH con la scusa di progettare un sistema adattato alle esigenze degli utenti.
E, come ci si aspetterebbe, è un sistema piacevole, abbastanza flessibile per le sue esigenze, anche se a volte un po 'esagerato, quindi ti chiedi "perché non utilizzare invece gli strumenti da riga di comando?", E purtroppo sempre all'avanguardia nelle medie dimensioni team che lavorano su grandi progetti a molte persone diverse che lo utilizzano con diverse "migliori" pratiche.
Fantastico, siamo condannati! - Cosa ne facciamo?
Bene, alla fine, tutto quanto sopra vale ancora. Se non è possibile estrarre la maggior parte della programmazione da questo sistema per utilizzare più strumenti e linguaggi tradizionali, è "solo" necessario adattarlo ai vincoli del proprio sistema.
Informazioni su controllo delle versioni e archiviazione
Alla fine, puoi quasi sempre eseguire le versioni , anche con l'ambiente più limitato e protetto. Il più delle volte, questi sistemi vengono ancora con il proprio versioning (che sfortunatamente spesso è piuttosto semplice, e offre solo di tornare alle versioni precedenti senza molta visibilità, mantenendo solo le istantanee precedenti). Non utilizza esattamente i changeset differenziali come potrebbe essere il tuo SCM preferito, e probabilmente non è adatto a più utenti che inviano le modifiche contemporaneamente.
Tuttavia, se forniscono tale funzionalità, forse la tua soluzione è quella di seguire le nostre amate linee guida standard del settore sopra e di trasporle in questo sistema di programmazione !!
Se il sistema di archiviazione è un database, probabilmente espone le funzionalità di esportazione o può essere eseguito il backup a livello di file system. Se utilizza un formato binario personalizzato, forse puoi semplicemente provare a versione con un VCS che ha un buon supporto per i dati binari. Non avrai un controllo accurato, ma almeno avrai la tua schiena coperta da catastrofi e avrai un certo grado di conformità al ripristino di emergenza.
Informazioni sui test
Implementare i test all'interno della piattaforma stessa e utilizzare strumenti esterni e processi in background per configurare backup regolari. Molto probabilmente, si accendono questi test allo stesso modo in cui si accenderebbero i programmi sviluppati con questo sistema di programmazione.
Certo, è un lavoro di hacking e sicuramente non all'altezza di ciò che è comune per la programmazione "normale", ma l'idea è quella di adattarsi al sistema mentre si cerca di mantenere una parvenza del processo di sviluppo software professionale.
La strada è lunga e ripida ...
Come sempre con ambienti di nicchia e sistemi di programmazione su misura, e come abbiamo esposto sopra, hai a che fare con strani formati, solo un insieme limitato (o totalmente inesistente) di strumenti probabilmente ingombranti e un vuoto al posto di una comunità.
La raccomandazione: cerca di attuare il più possibile le linee guida di cui sopra al di fuori del tuo sistema di programmazione su misura. Ciò garantisce che si possa fare affidamento su strumenti "comuni", che hanno un supporto adeguato e un impulso alla comunità.
La soluzione alternativa: quando questa non è un'opzione, prova ad aggiornare questo framework globale nella tua "scatola". L'idea è quella di sovrapporre questo modello delle migliori pratiche standard del settore al di sopra del vostro sistema di programmazione e trarne il meglio. Il consiglio è ancora valido: definire la struttura e le migliori pratiche, incoraggiare la conformità.
Sfortunatamente, questo implica che potrebbe essere necessario immergersi e fare un'enorme quantità di lavoro sulle gambe. Così...
Ultime parole famose e richieste umili:
- Documenta tutto ciò che fai.
- Condividi la tua esperienza.
- Open Source qualsiasi strumento che scrivi.
Facendo tutto questo, dovrai:
- non solo aumenta le tue possibilità di ottenere supporto da persone in situazioni simili,
- ma fornisce anche aiuto ad altre persone e favorisce la discussione sul tuo stack tecnologico.
Chi lo sa, si potrebbe essere proprio all'inizio di una nuova comunità vibrante di Obscure Lingua X . Se non ce ne sono, iniziane uno!
Forse è bello dentro , ma finora nessuno ha la minima idea , quindi aiutate a abbattere questo brutto muro e date un'occhiata agli altri!