Perché utilizziamo nomi in codice interni non descrittivi? [chiuso]


16

Penso che l'uso dei nomi in codice sia abbastanza diffuso. Anche la nostra azienda li sta usando.

Ma la mia preoccupazione principale è che questi nomi di solito non sono documentati da nessuna parte. E il significato è diffuso dal passaparola. E i nomi non hanno nulla a che fare con la funzione dello strumento o entità che ha il nome.

Vedo lo schema secondo cui le macchine di test interne prendono il nome da costellazioni, i server di fronte al pubblico prendono il nome dagli dei greci. E i progetti prendono il nome da luoghi o dal nome di una stella del cinema scelta casualmente o dal nome del personaggio. Ma nessuna informazione direttamente disponibile dal nome se le macchine sono Windows o Linux; Server a 32 o 64 bit. O di cosa tratta il progetto.

Ho solo una brutta sensazione quando vedo il messaggio di commit del VCS che qualcuno ha appena ramificato il progetto "Gandalf" o il progetto "Callanish" o qualunque altro progetto. Solo per lo stesso motivo, in genere non si nominano le funzioni e le variabili in questo modo.

Ho proposto di usare nomi più descrittivi, almeno per le nuove entità, ma ho affrontato un'opposizione molto forte. Apparentemente tutti nell'organizzazione tranne me adorano nominare cose del genere.

Quindi perché usiamo nomi in codice non descrittivi?

Non fraintendetemi, non ho problemi a nominare le versioni del programma e le pietre miliari, o avere un bel nome di prodotto per motivi di marketing. Ma tutti gli altri posti mi piacerebbe vedere nomi descrittivi.

MODIFICARE:

Per darti un po 'di contesto: Gandalf è un progetto che porta il codice a 64 bit. Callanish è quello che lo porta su Android ... Preferirei chiamare l'export 64 bitportport e il secondo androidporting. Forse un suffisso ad esso associato indica la versione di destinazione che intendiamo spedire. Quindi tutti saprebbero per nome di cosa si tratta.

I server in questione sono immagini di macchine virtuali su cui testiamo il prodotto ... Non conosco la macchina fisica su cui effettivamente gira. Quindi chiamarli windowsxp_32, windows7_64, debian_32 o solaris_64 va benissimo.


6
Ciò che è descrittivo per te potrebbe non essere abbastanza descrittivo (o consise) per qualcun altro. Un nome è un nome è un nome. Nessuna confusione o disaccordo.
Robbie Dee,

1
Così tante risposte, eppure, se poni la domanda "Dovrei nominare i miei server per scopo o da divinità greche?", Sospetto / spero che lo scopo sarà avvisato. E sì, fileserver4 è più facile da ricordare di Afrodita, quando si tratta di ricordare quali sono i server con ftp.
Vorac,

2
Questa domanda sembra essere fuori tema perché non è correlata allo sviluppo del software.
Mike Partridge,

4
Cosa c'è in un nome? Ciò che chiamiamo rosa con qualsiasi altra parola avrebbe un odore dolce.
Caleb,

3
Spero che il ramo Gandalf non sia il nome in codice per un framework di unit test. Tutto ciò che lo attraversa NON DEVE PASSARE!
corsiKa

Risposte:


25

Non facciamo riferimento alle persone in base alle loro caratteristiche in quanto ci vuole tutto il giorno per elencarle in modo sufficientemente dettagliato da non essere ambigue e le caratteristiche possono cambiare. E se avessero un taglio di capelli? Invece diamo loro nomi. Inoltre, le persone ricordano meglio le parole rispetto ai flussi di simboli casuali.

Disclaimer: conterrà alcune opinioni e storie aneddotiche dovute alla domanda.

In un posto in cui ho lavorato un paio d'anni fa, tutti i nostri server hanno preso il nome da lune e parti del corpo. "Rhea", "Miranda", "polmone", "rene" ecc.

In alto ho deciso, come te, che era tutto un po 'sciocco e dovremmo cambiarli in nomi più "descrittivi" come "arc-sql-w-4" o "lon-web-lin-2". Ciò ha incontrato molta opposizione. Ma è passato attraverso. Abbiamo rinominato tutto.

Quindi cosa è andato storto?

In precedenza, avremmo saputo dalla cima delle nostre teste quali macchine erano i database primari e quali erano gli schiavi perché potevamo ricordare "testa" controllata "dal cuore" o che "Tarvos" era un server delle applicazioni per X. Qualunque cosa. Ora dovevamo ricordare un mucchio oscuro di simboli che parzialmente, ma non descriveva in modo completo la macchina che stavamo cercando. Dovevamo sapere tramite una tabella di ricerca nelle nostre teste che "lon-web-lin-1" era un server delle applicazioni per il prodotto A e "lon-web-lin-2" per il prodotto B.

È simile ai motivi per cui dovresti usare password come FartDownTrousersForALivingDoYou? invece di 43gH5 # € 1. Le persone sono brave a ricordare le parole, non le pile casuali di spazzatura. Le parole sono simboli che si riferiscono alle cose.

Un altro problema (probabilmente più pratico) è che stai collegando i tuoi nomi DNS e server alle loro funzioni. Ciò significa che non è possibile modificare la funzione senza cambiare il nome. Per noi questo includeva anche la posizione fisica e anche il sistema operativo. Che è un dolore enorme nel culo.

Inoltre, e questo è l'ultimo punto. I nomi sono molto più divertenti.

E i nomi dei progetti?

Bene, invece di "Progetto Gandalf" cosa proponi? "Proietta la funzione prototipo X e vedi se possiamo trasformarla in un prodotto"? Cosa succede se l'ambito del progetto cambia, quindi rinominiamo il progetto? Ancora una volta, i nomi sono simboli abbreviati che si riferiscono a cose.


5
Sembra che tu abbia cambiato metafore descrittive per geroglifici non descrittivi. Dovresti aver applicato un modello di denominazione che chiarisce quale prodotto viene eseguito su quale server. Ecco di cosa si tratta "descrittivo";)
back2dos

9
@ back2dos - E quando una nuova applicazione viene distribuita sul server o un'applicazione esistente si sposta su un altro server, rinominate tutti i server interessati? Che dire di quando il prodotto A viene rinominato (dal momento che non stiamo usando nomi in codice)? Stai per cambiare ovunque quel nome sia memorizzato su un client? O lascerai in atto alias DNS fuorvianti per ridurre al minimo l'ambito della modifica?
Grotta di Giustino,

5
@ back2dos - Rinominare i server (e aggiornare tutti i client) ogni volta che viene distribuita una nuova app diventa piuttosto doloroso abbastanza rapidamente. Cosa succede quando si distribuisce una decima app su un determinato server? Cosa succede quando si hanno centinaia di macchine client che hanno riferimenti a un determinato nome del server? db3.todoappè più informativo se il server gestisce solo todoapp. Se il marketing decide di chiamare l'app "Organizer Pro" e hai altre 8 app sul server, la gestione dei nomi diventa piuttosto complicata.
Grotta di Giustino,

4
Inoltre, cosa succede quando le macchine hanno più di una funzione? I nomi diventano ingestibilmente grandi o non riescono a descriverli con precisione.
Tom,

3
È difficile non essere d'accordo con back2dos. "geroglifici non descrittivi" è esattamente quello a cui stavo pensando quando ho letto i tuoi esempi. Anche la distinzione tra ruolo e identità di back2dos è particolarmente rilevante. Nella mia azienda, i server sono nominati in base al loro ruolo e un nome come "http-blog-db-failover" sembra essere molto più esplicito di "Hermione" e il nome non cambierà quando passo da MongoDB a CouchDB o quando il marketing decide di cambiare il nome commerciale del sito Web che ospita i blog.
Arseni Mourzenko,

10

Nominare le cose con le loro proprietà è fondamentalmente una cattiva idea. La ragione è che le proprietà sono, per definizione, fenomeni mutevoli, mentre l' identità di una cosa rimane la stessa anche se le proprietà vengono modificate.

Qualcuno decide che il file server dovrebbe essere migrato su Linux? Se il suo nome è "Apollo", non è un problema. Se il nome si riferisse a "windows", allora diventerebbe fuorviante, o dovrebbe essere cambiato ovunque con grandi spese o rischi. Stai introducendo un nuovo formato di output? Per amore di Dio, non chiamarlo "newFormat"! Esso sarà eventualmente essere sostituito ancora una volta, e il formato ancora più recente avrà bisogno di un nome ancora più descrittivo per distinguerlo. Chiamalo "3", in modo da poterlo successivamente aumentare a "4" o "oro" in modo da poter passare a "platino".

(Un ulteriore motivo è che i nomi composti da pepite di informazioni sono orribili. Nessuno vuole lavorare su un computer chiamato "PC-Marketing-Windows7-143" - prenderà "Apollo" o addirittura "Bacco" su quello ogni giorno. Ma il punto principale è la divisione identità / proprietà.)


5
I nomi descrittivi non descrivono proprietà ma scopi . Se chiamate una funzione che visualizza l'output, Hermesallora sì, è più riconoscibile di functionWithTenLinesOfCode. Personalmente, lo definirei printcomunque.
back2dos

@ back2dos Gli esempi forniti dall'OP sembrano descrivere l'equivalente diprint_left_aligned_to_CRT_monitor()
Izkata,

@Izkata: Devi ammetterlo, è molto meglio di Cathy(). nota: ho visto personalmente il codice di produzione con nomi di funzioni e variabili che citano i testi di Guns & Roses e sono colpevole di scrivere codice di produzione con nomi di variabili e funzioni che fanno riferimento a Buffy.
slebetman,

10

Ci sono 3 motivi, nella mia esperienza:

  1. Quando devi nominare molte cose simili, può essere difficile trovare nomi descrittivi unici per tutti loro. Le persone hanno bisogno di un modo univoco di riferirsi ad esso, e siamo più bravi nell'usare i nomi che in quelli che usano i numeri (a meno che il numero non sia molto breve). Quando gli dai un nome, tende ad assumere una personalità nella tua mente, quindi ricorderai che il server Gandalf è quello con il connettore di alimentazione traballante migliore di SERWIN15AB23. È anche meno probabile che tu ne confonda due con un errore di battitura.

  2. Il processo di denominazione può essere divertente. Alcune aziende lo fanno con un voto. Ad altre persone piace inventarsi nomi univoci. Basta chiedere a qualsiasi genitore.

  3. Per i progetti esterni, di solito è il marketing a decidere quale sia il nome e normalmente lo fanno proprio prima della spedizione. Quando Microsoft ha deciso di chiamare l'ultimo sistema operativo "Windows 10"? Dubito che si chiamasse sempre così. Il progetto potrebbe essere in fase di sviluppo da molto tempo, e in alcuni casi si desidera offuscarlo in modo che le persone esterne all'azienda non sappiano di cosa si sta parlando.


5
Vale anche la pena aggiungere che i nomi possono essere personalizzati in base all'attività in questione. Gandalf potrebbe essere il server di build "dove accade la magia", Cerberus potrebbe essere il firewall, Hephaestus il server di sviluppo ecc ... è molto difficile associare i numeri alle funzioni
Liath,

1
A proposito: il nome interno di "Windows 10" è in realtà "Windows NT 6.4". Ma il marketing non avrebbe mai ammesso che la versione 6.0, nota anche come "Vista", era l'ultima versione in cui il kernel del sistema operativo aveva una riprogettazione importante.
Philipp,

@Philipp basta digitare "ver" nella riga di comando di una macchina Windows 7 - 6.1 (Vista SP1 che è sempre stato uno scherzo), non sono sicuro di ciò che Windows 8 è fuori dalla mia testa.
Liath

Di Windows 8.1 Pro (sono certo questo PC non ha Update 1): 6.3.9600 msdn.microsoft.com/en-us/library/windows/desktop/...
WernerCD

@Philipp AFAIK, fatto per motivi di compatibilità all'indietro, non riflette quanto è cambiato il kernel.
svick,

6

La denominazione descrittiva è difficile ™, è molto più semplice se hai già un tema che viene automaticamente con un elenco di parole che puoi usare.

Quando si dispone di più dello stesso oggetto dar loro un nome foo1.6, foo1.2ecc diventa rapidamente confusione / soggetto a errori. Ad esempio, quando devi eseguire il test Virgo, noterai rapidamente l'errore se ti capita di essere attivo Cancer.

È anche un incontro divertente quando vengono lanciate le convenzioni di denominazione e viene presa la decisione di basare i nomi delle sale conferenze su generi musicali e si nomina la caffetteria Salsa.


1
Descriptive naming is hard™, it's much easier if you already have a theme which automatically comes with a list of words you can use.Verissimo. Ma solo perché è più facile, non significa che sia buono a lungo termine. Quello che stai dicendo non è diverso dal non fare una corretta progettazione API, perché è molto più semplice sfornare la funzionalità.
back2dos

4

Ciò può essere correlato alla cultura del contesto elevato o del contesto basso . Ogni azienda, organizzazione o squadra ha la propria cultura. Cultura di contesto alta o bassa indica quante informazioni una cultura ama mettere in relazione in modo esplicito e quante persone dovrebbero prendere dal contesto.

La denominazione di tutti i servizi con nomi da riferimenti culturali fornisce una certa flessibilità, ma manca anche di esplicitazione. Ci deve essere un passaparola o "conoscenza tribale" che integri i nomi, ovvero il contesto del servizio. Ho visto situazioni in cui ad esempio c'è il server "fizzbuzz" o il servizio "marcopolo" che nessuno sa cosa fanno, ma ottengono traffico, quindi devono fare qualcosa.

Sono una persona a basso contesto, quindi tendo a scegliere nomi semplici ed espliciti che forniscano un contesto sullo scopo di un server o servizio. Scrivo anche "codice auto-documentante" dove sto attento a nominare il mio codice per renderlo più leggibile.

Ma attualmente sto lavorando in un negozio ad alto contesto in cui tutti i servizi prendono il nome da Transfomers. Sospiro. Almeno usano i nomi in modo coerente.

Quindi sembra più un valore culturale, ma le pratiche tecniche si adatteranno alle preferenze culturali.

L'alto contesto può anche essere più divertente e c'è un valore in questo.


3

Una ragione per i nomi in codice è l'offuscamento. Se rendi insignificante il nome di un progetto, puoi parlarne in pubblico senza che nessuno capisca di cosa stai discutendo.

Allo stesso modo, se dai ai tuoi server nomi insignificanti, nessuno tranne gli utenti autorizzati avrà idea di cosa ci sia.


2

La domanda importante è: cos'è descrittivo? Le altre risposte hanno fatto un ottimo lavoro illustrando ciò che non è descrittivo.

Stabiliamo che la descrittività deriva dal chiamare le cose per il loro ruolo , il loro scopo. Da quello che fanno . Ad esempio, è abbastanza chiaro cosa fa un "cutter". Ora potrebbe essere un'ascia, un laser o un coltello. Non importa molto. E un laser potrebbe anche essere un "puntatore", un'ascia può anche essere un "decoratore" e un coltello può anche essere un "puntatore".

Quindi, come altri hanno sottolineato, il rapporto tra le proprietà di qualcosa e il compito che svolge è relativamente lento. Pertanto l'OS che fa parte del nome del server non è descrittivo , distrae dal vero scopo.

A meno che non sia compito tuo lavorare su come il componente DoesXrealizza X, non è affar tuo. Se è il tuo lavoro, allora ti trovi immediatamente di fronte.

Come ha sottolineato il maniaco del rachetto, a volte è difficile trovare nomi descrittivi. Ma il più delle volte, questo è un segno di non aver capito cosa fanno le cose, che devi nominare. Prima di avere quella comprensione, probabilmente non dovresti preoccuparti di come fa ciò che non conosci;)


+1, ma per quanto riguarda l'aggiunta di un esempio? Puoi usare l'esempio che ho usato per commentare la domanda ( http-blog-db-failoverper una macchina che ospita un database di failover di un sito Web che ospita blog; il passaggio da Linux a Windows o da MongoDB a CouchDB non influirà sul nome, né le decisioni di marketing. )
Arseni Mourzenko,

2

Il primo motivo è che può essere breve e memorabile. Se pensi a quante volte hai intenzione di dire o scrivere il nome del progetto, risparmierai una notevole quantità di tempo se c'è un nome breve che tutti conoscono e comprendono.

La seconda ragione è che costruisce il cameratismo. Se la squadra arriva a scegliere il nome, quello può sceglierne uno che piace a tutti. È sottile, ma aumenta il morale del team quando stai lavorando a un progetto chiamato Viper o Gimley o Boba o Bugatti invece di un progetto chiamato "Aggiornamenti contabili Q3". Avevo un amico che lavorava in una squadra con un gruppo di appassionati di auto. Il loro rituale di kickoff del progetto preferito era scegliere quale macchina avrebbero usato come nome in codice del progetto.


2

Ho sempre pensato che questo è qualcosa che viene fatto principalmente perché diverte le persone. Le persone sono condizionate dai media per attribuire valore allo skulking nel buio piuttosto che alla luce del giorno. All'età di 5 anni abbiamo "Agente speciale Oso"; a 15 anni è James Bond. La segretezza conferisce un'importanza importante alle attività altrimenti banali delle persone (ad esempio la programmazione di un computer).

Allo stesso modo, qualcuno ha creato un logo per "Longhorn" quando era un nome in codice Microsoft ( http://en.wikipedia.org/wiki/File:Windows_Longhorn_logo.svg ). Perché qualcuno dovrebbe creare un logo per un nome in codice che non è destinato a far parte realmente di qualsiasi sforzo di marketing? Ancora una volta, la gente fa questo genere di cose perché le diverte. Giocare in Photoshop è più facile / più divertente che fare davvero un vero lavoro.


1

potrebbe esserci un sistema che semplicemente non conosci.
Una società con cui ho lavorato per i nomi usati dei vincitori del premio Nobel per tutti i loro server. Diversi premi Nobel indicavano diverse categorie di server.
I server di prova potrebbero avere nomi di vincitori di matematica, server di database dopo vincitori di letteratura, server di posta dopo vincitori di medicina, ecc. Ecc.
A qualcuno che non ha familiarità con la convenzione di denominazione, i nomi sembravano completamente casuali (soprattutto perché la maggior parte delle persone non li conosce tutti centinaia di vincitori del premio Nobel nel corso dei decenni).

Ho usato un sistema simile a casa, nominando i computer dopo i cacciabombardieri, i server dopo i bombardieri e i volumi del disco dopo i vulcani.

Lo stesso potrebbe essere fatto con pezzi di software, denominando le versioni di produzione dopo gli alberi, le versioni beta dopo i fiori, ecc. Ecc.

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.