La decisione di progettazione o programmazione più spiacevole che hai preso? [chiuso]


57

Mi piacerebbe sapere che tipo di decisioni progettuali hai preso e in che modo si sono ritorti contro. A causa di una cattiva decisione di progettazione, ho finito per dover sostenere per sempre quella cattiva decisione (ne ho avuto anche una parte). Questo mi ha fatto capire che un singolo errore di design può perseguitarti per sempre. Voglio imparare dalle persone più esperte che tipo di errori hanno vissuto e cosa hanno imparato da loro.

Sono sicuro che questo sarà di grande aiuto per gli altri programmatori aiutandoli a non ripetere quelle decisioni.

Grazie per aver condiviso la tua esperienza.


19
passare troppo tempo su SO !! ;)
Mitch Wheat,

6
@George: sembra che il tuo primo link sia sull'ingegnerizzazione eccessiva, che può essere tangenzialmente correlata a questo thread, ma non è un duplicato. Il secondo e ultimo link riguardano errori di codifica e errori di gestione, nessuno dei quali sono duplicati di questo thread.
Juliet,

1
Questo dovrebbe probabilmente essere trasformato in un wiki della comunità (c'è una casella quando modifichi il post).

3
Vorrei che ci fosse un modo di votare per contrastare la chiusura. Sottoscrivi una chiusura?
Kieveli,

5
Cosa c'è di sbagliato in tutti gli elettori chiusi? E se non fosse un CW, lascia che chi lo chiede ottenga dei voti per aver posto la domanda. Sono sinceramente interessato a questo argomento. Non lasciare che CW si frapponga a una buona domanda soggettiva. Sheesh, SO è pieno di urlatori "CW QUESTO".
Syaz,

Risposte:


73

Ignorando YAGNI , ancora e ancora ...


22
Vero per la maggior parte, ma ci sono anche persone che potrebbero usare un po 'meno YAGNI. Nessuno dei due estremi è il posto migliore dove stare.
Console 80x24,

56

"Lo farò più tardi"
"Più tardi" non arriva mai.


8
Più tardi non arriva mai.

Non lo fa mai.

È stato detto, se non hai tempo per farlo adesso, cosa ti fa pensare che avrai tempo per ripararlo in seguito?

4
La chiamiamo "iterazione mai"
NotMe,

10
Non c'è nulla di così permanente come una soluzione temporanea.
dietbuddha,


44

La configurabilità in un'applicazione è buona. Troppa configurabilità è un incubo da usare e da mantenere.


2
Sì. Vero. È l'idealismo per rendere tutto configurabile e dire al capo che non dovremo mai più cambiare una singola riga di codice.

1
Essendo stato lo sfortunato utente bloccato con uno di quei sistemi mal configurabili per il nostro project management, posso solo dire che ti avrei votato un milione di volte se potessi.
HLGEM,

L'iperflessibilità nella configurazione è di solito perché non è possibile eseguire codice arbitrario in fase di esecuzione, quindi è necessario anticipare tutto.

Questo si chiama «spoftcoding» invece di «
hardcoding

42

Da uno dei miei errori ho imparato che la normalizzazione del DB non dovrebbe essere seguita alla cieca. Puoi, e in alcune situazioni DEVI appiattire i tuoi tavoli.

Ho finito per gestire un sacco di tabelle (tramite modelli) e le prestazioni non erano buone come potrebbero essere con un piccolo appiattimento per le tabelle.


5
Non potrei essere più d'accordo ... Sono un ingegnere del software e ci viene detto di normalizzare sempre. Che schifo di merda. È solo perché gli insegnanti non hanno mai provato a lavorare con DB veramente complessi e dipendenti dalle prestazioni.

8
Potrei aggiungere che anche la normalizzazione può essere molto positiva, ovviamente.

12
Penso che i programmatori siano troppo veloci per denormalizzare per ragioni inadeguate, ma sì, l'adesione servile alle regole della normalizzazione è un grosso errore. In generale, una delle mie grandi frustrazioni nello sviluppo del software è quando qualcuno dice "Dobbiamo fare X", e quando sottolineo tutti i problemi che questo causerà, rispondono: "È irrilevante. Tutti gli esperti concordano sul fatto che X è buono, quindi dobbiamo fare X, sempre, senza eccezioni. "

4
Il mio approccio alla normalizzazione è sempre diretto. Mi normalizzo sempre, MA se vedo un potenziale aumento delle prestazioni su un piccolo appiattimento - provo sempre e benchmark e nella maggior parte dei casi paga appiattire.
Eimantas,

7
Ma la normalizzazione è DIVERTENTE! :) Sono serio, mi piace progettare strutture dati. Quello che direi è che, sebbene sia facile de-normalizzare uno schema normalizzato, il contrario NON è vero. Devi conoscere le regole prima di infrangerle.

36

Utilizzo di un singolo carattere nei database per gli stati, ecc. Inutile in questo, l'overhead dell'uso di un carattere più lungo () o nvarchar2 () è minuscolo rispetto alla rete e all'analisi sostenuta da qualsiasi chiamata SQL, tuttavia i caratteri terminano sempre piuttosto offuscato, o esaurito (non per gli stati, ma altre cose). Molto meglio inserire semplicemente la versione leggibile dall'uomo e avere anche nel tuo modello Java (nel mio caso) un enum con valori corrispondenti.

Immagino che questa sia una forma di ottimizzazione prematura inutile e cieca. Come se l'uso di un solo carattere salverà il mondo in questi giorni. A parte Y / N booleani nei database che non supportano booleani / bit.


+1 Abbiamo appena avuto un incontro proprio su questo problema. Siamo arrivati ​​alla stessa conclusione.
APC

Cosa succede se il tuo cliente lavora con tali abbreviazioni e non vuole abbandonarle?

Per i sistemi esistenti devi essere compatibile (creerei comunque un enum Java di valori corretti, ovviamente con un metodo <code> MyEnum fromChar (char c) </code>). Per i nuovi design, semplicemente non ci andare!

Alcuni database supportano enum, che sono sia compatti che leggibili e servono anche valori imprevisti proibiti. Se puoi, usa quelli.
Karl Bartel,

2
Quasi altrettanto male: utilizzare il tipo BIT in MS SQL Server, prima di scoprire che non può far parte di un indice.
Finnw,

32

Non sviluppare un adeguato livello di accesso ai dati e avere sql ovunque nel mio codice, solo per avere qualcosa di "rapido" attivo e funzionante. Successivamente, quando il progetto ha iniziato ad espandersi e le esigenze sono cambiate, è diventato un incubo. Non sapevo cosa fosse un DAL in quel momento.

... felice di averlo superato, anche se vedo ancora programmatori con oltre 20 anni di "esperienza" nel fare questo.


16
Non riesco a ricordare dove l'ho letto, ma c'è una differenza tra 20 anni di esperienza e un anno di esperienza ripetuta 19 volte.
CaffGeek,

@Chad: era da qualche parte negli scritti di Joel Spolsky.

+1: Sì. E prova a refactoring di tutta quella logica legata a quell'SQL ... Che si tratti di SQL in linea, in formato libero o di processi memorizzati. [Sì, non ho paura di quella guerra santa.]
Jim G.

26

Pensando che potrei essere architetto, sviluppatore e PM tutti sullo stesso progetto.

2 mesi di sonno 3 ore a notte mi hanno insegnato che non puoi farlo.


15
Quindi smetti di dormire così tanto! oh, aspetta ... vuoi dire che NON è normale ... ?? Hmm, devo trovare altre persone in questo progetto ...
AviD

Sembra il PM, hai bisogno di un po 'di allenamento con le stime :)

21

Scelta Microsoft Foundation Classes (MFC) per la scrittura di un IDE Java.


3
Owwww. Mi farebbe male al cervello.
Greg D,

2
Non è stata una decisione sbagliata nel 1999. La AWT era brutta e lenta allora.
Finnw,

finnw - beh, almeno è ancora brutto!
Niklas H,

20

Non è stata una mia decisione (sono entrato in azienda un po 'più tardi), ma un posto in cui ho lavorato ha portato i18n un po' troppo lontano, inclusa la traduzione di tutti i loro messaggi di registro.

risultati:

  • Più doloroso per aggiungere una nuova registrazione
  • Più costi per la traduzione
  • I registri sono più difficili da leggere in seguito

Ops.


Sto facendo un po 'di i18n qui e sto cercando di capire cosa va all'utente e cosa va nei registri. Voglio che tutti gli output rivolti all'utente siano localizzabili, ma voglio che i log rimangano gli stessi. Nel processo, devo fare di più per capire dove va un'eccezione di quanto mi piaccia.
David Thornley,

1
Fammi indovinare, il tuo americano? E se no, parli solo inglese? Usa l'internazionalizzazione dove sono presenti nuove voci di registro in inglese, se è disponibile un'altra lingua, visualizzi la lingua degli utenti. SUGGERIMENTO: L'uso dei codici di errore aiuta qui poiché significa che è sempre possibile eseguire il grep / scan dei log indipendentemente dalla lingua.

2
@Jacob: sono inglese, ma parlo solo inglese. Ma questo era per un'azienda in cui l'intera base ingegneristica era in Inghilterra, quindi avere file di registro (che sono a scopo diagnostico, non informazioni visibili all'utente) in altre lingue sarebbe solo uno spreco di risorse. Concordo sul fatto che l'uso di codici di errore al posto del testo consente la traduzione al volo, ma è ancora più lavoro che usare una sola lingua per iniziare. Si tratta di ridurre il lavoro identificando dove qualcosa che sembra utile in realtà non fornirà alcun valore significativo.
Jon Skeet,

10
Io sono svedese. Dovrei diventare medievale per chiunque suggerisca persino che codice / commenti / registri dovrebbero trovarsi in qualcosa di diverso dall'inglese. L'inglese è la lingua da utilizzare per tutto tranne che per le interfacce utente. Tutto il resto rende il codice difficile da leggere e discutere. L'uso di una lingua madre è ridicolo poiché qualsiasi altro framework / libreria che usi è in inglese.
jgauffin,

1
+1 L'inglese è la lingua franca della programmazione. Farlo tradurre significa semplicemente aggiungere un livello aggiuntivo in cui sono necessari il minor numero di livelli e la massima chiarezza possibile.


19

Fare troppo design . Creare molti diagrammi UML, in particolare i diagrammi di sequenza per ogni singola operazione, molti dei quali alla fine si sono rivelati inutili. Alla fine si è scoperto che una notevole quantità di tempo avrebbe potuto risparmiare saltando progetti / diagrammi inutilmente dettagliati e avviando direttamente la codifica.


Se la domanda era: "Qual è la decisione di progettazione o programmazione più deplorevole che tu abbia mai visto presa?" al contrario degli errori che ci eravamo fatti, avrei messo "UML" in cima alla mia lista. Proprio sotto "il registro di Windows".

2
UML è buono da discutere tra i membri di un team, ma quando si tratta di progettare quindi implementarlo secondo il design, finisce sempre male. Questo è una specie di sogno di alcune aziende, ma in verità la scrittura di software non funziona in questo modo. +1!
deadalnix,

17

I clienti credenti sanno cosa vogliono e poi fanno troppo prima di verificare con loro.


15

La mia unica peggiore decisione di design? Negli anni '80 stavo lavorando a un progetto in cui avevamo avuto la brillante idea di creare una sorta di modello per le nostre schermate di immissione dei dati che sarebbe stato interpretato in fase di esecuzione. Non è una cattiva decisione: ha reso le schermate di input facili da progettare. Fondamentalmente basta creare un file simile alla schermata di immissione dei dati, con alcuni codici speciali per identificare ciò che era un'etichetta rispetto a quello che era un campo di input e per identificare se i campi di input erano alfa o numerici. Quindi ho deciso di aggiungere altri codici speciali a questi file per identificare quali validazioni dovrebbero essere eseguite. Quindi ho aggiunto più codici per consentire la costruzione condizionale dello schermo, il campo X incluso solo quando alcune condizioni erano vere, ecc. Poi ho aggiunto più codici per eseguire una semplice elaborazione degli input. Ecc. Ecc. Alla fine avevamo trasformato il nostro modello di schermo in un nuovo linguaggio di programmazione, completo di espressioni, strutture di controllo e una libreria di I / O. E per cosa? Abbiamo lavorato moltissimo per reinventare FORTRAN. Avevamo uno scaffale pieno di compilatori per linguaggi progettati e testati meglio. Se avessimo dedicato così tanti sforzi alla costruzione di prodotti in cui avevamo effettivamente una certa esperienza, quella società potrebbe essere ancora attiva oggi.


È sia divertente che tragico :)

La cosa triste è che questo approccio a volte è il modo migliore per andare. Il cliente può scegliere "la schermata può essere cambiata in un momento" o "la schermata fa tutto compreso il tè" ma non entrambi!

3
Non ho nulla contro l'utilizzo di modelli o altri codici generici. L'errore è stato quello di trasformare un pezzo di codice generico in una lingua all'interno di una lingua.

Ho visto fare esattamente questa cosa ... nel 2004! Tutta la logica di business è distribuita su quindici tabelle di configurazione con diversi tentativi mezzo "falsi" di "linguaggi" dinamici introdotti per buona misura (vedi Decima regola di Greenspun)!

1
Non intendi COBOL piuttosto che FORTRAN?
Finnw,

15

Applicazione troppo zelante di YAGNI (che è chiamato Design by Enumeration in Pitfalls of Object Oriented Development ) in un ambiente in cui qualsiasi persona sensibile potrebbe dire che i requisiti sarebbero sicuramente cambiati. E cambia ripetutamente.

Se hai (hard-) codificato tutto esattamente secondo i requisiti attuali, mentre picchia qualcuno che dice "non potrebbe essere più generico?" con la tua mazza YAGNI — e quindi i requisiti cambiano drasticamente (ma in un modo che avrebbe potuto essere ragionevolmente anticipato), allora quella può essere la differenza tra prendere 2 settimane per adattarsi, piuttosto che prendere 20 minuti.

AGGIORNAMENTO: per chiarire, ecco un esempio fittizio che non è troppo lontano da quello che è successo. Stack Overflow è stato progettato per supportare i badge, ma supponiamo che all'inizio possano pensare solo a quattro badge. Solo quattro, un numero così piccolo, quindi hanno codificato il supporto per esattamente quattro badge in tutta la logica del sito. Nel database, nelle informazioni utente, in tutto il codice visualizzato. Perché "Non avrai bisogno di" alcun badge a cui non riesci a pensare, giusto? Supponiamo quindi che il sito diventi attivo e che le persone inizino a suggerire nuovi badge. Ogni badgeci vogliono fino a due settimane per aggiungere, perché c'è così tanto hardcoding da modificare ovunque. Tuttavia, "Non avrai bisogno di" più badge rispetto all'elenco di oggi, quindi non c'è mai alcun refactoring per supportare una collezione generica di badge. Una collezione così generica avrebbe impiegato più tempo in anticipo? Non molto, se presente.

YAGNI è un principio prezioso, ma non dovrebbe essere (ab) usato per giustificare un design scadente e un hardcoding inappropriato. C'è un equilibrio e, con l'esperienza, credo di avvicinarmi.


1
Sì e no, puoi prevedere in quale direzione cambierà? Ho esperienza di sistemi dolorosamente complessi che si sono rivelati totalmente inadeguati per il primo riutilizzo, che non rientrava nella generalità prevista ...
Benjol

Sì, preferirei affrontare YAGNI piuttosto che quella merda.

Quindi pensi che avresti dovuto trascorrere le 2 settimane in anticipo?
Finnw,

4
Quell'esempio non è affatto YAGNI. DRY fa parte di YAGNI e senza di essa non puoi rimanere reattivo al cambiamento.

3
Stephan, l'esempio mostra un abuso glib e inappropriato della frase, che era il mio punto. DRY (con la sua variante OAOO) è anche un buon principio, ma abbastanza separato: c2.com/cgi/wiki?OaooBalancesYagni . Tuttavia, non riesco a trovare nulla che sostenga la tua affermazione che "DRY fa parte di YAGNI". La senape si abbina bene agli hot dog, ma ciò non significa che la senape faccia parte degli hot dog. Se potessi chiarire, forse con riferimenti, forse capirò.
Console 80x24,

15

Risorse umane incompetenti

Cercare di fare qualcosa di giusto e di bello con le persone sbagliate!
Anche se sono nel ruolo di un ego PM superfluo (che è piuttosto troppo comune soprattutto nelle grandi aziende in cui la loro incompetenza può durare più a lungo).


1
Capisco il tuo dolore :(

13

Ogni volta che creo debiti tecnici, scrivo codice procedurale, salto test di scrittura, ecc. Perché mi precipito. Quasi inevitabilmente trovo che questo crei dolore per me lungo la strada.


13

Utilizzo di SQL Server Intergration Services (SSIS).

Non lo desidero sul mio peggior nemico.

Dopo aver creato diversi pacchetti SSIS negli ultimi due mesi, ho scoperto solo che i pacchetti che ho sviluppato non sono distribuibili e non implementabili. In particolare in un ambiente con licenza non web, non SQL Server.

È una brutta situazione, quando hai meno di 48 ore per riscrivere i tuoi pacchetti SSIS in puro codice POCO .NET o perdere la scadenza prefissata.

Mi stupisce che sono stato in grado di riscrivere tre pacchetti SSIS (che mi hanno impiegato due mesi per testare e sviluppare), entro 12 ore in puro codice .NET, con adattatori OLEDB e adattatori SQL.

SSIS non è distribuibile e non eseguirà i pacchetti da un computer client se non è installata una licenza di SQL Server (in particolare DTSPipeline.dll). Sarebbe bello saperlo in anticipo. Ora vedo la dichiarazione di non responsabilità (in stampa fine) su MSDN. Ciò non è utile quando si dispone di un codice di esempio su Internet utilizzando solo codice macchina con licenza SQL. Fondamentalmente, devi creare un servizio web che parlerà con il tuo server SQL, per eseguire i tuoi pacchetti SSIS a livello di codice. Non è possibile eseguirli dal codice .NET puro, a meno che non si disponga di una licenza SQL installata sulla macchina in esecuzione. Quanto è irrealistico? Microsoft prevede davvero che SSIS verrà utilizzato da macchine che richiedono l'installazione del server SQL? Che spreco completo di due mesi.

La mia azienda non utilizzerà mai più SSIS a causa di questo piccolo "gotcha".


Forse dovresti evitare di usare del tutto il software "fine-print"! Talend, ad esempio, è un IDE ETL open source.

+1: Sì. Anche l'esperienza di sviluppo di SSIS è un incubo. Probabilmente ci sono almeno una mezza dozzina di modi migliori per eseguire ETL.
Jim G.


10

Aggiungendo alcune "divertenti" uova di Pasqua in un codice che ho scritto prima di andare in vacanza per 2 settimane. Pensavo di essere l'unica persona a leggerlo al mio ritorno, mi avrebbe fatto ridere e pronto a ricodificarlo.

Inutile dire che il mio capo non è stato impressionato quando lo ha recensito mentre ero via, e lo è stato ancora meno quando uno delle "uova di Pasqua" ha coinvolto la sua faccia stranamente animata in ASCII.

Mmmmmm ...


1
IMO, questo è "Ottimo lavoro, signore!"

18
Molto di recente, sono stato deriso dal mio team per i messaggi di traccia del tipo "aggiungi il valore (p) tabella tyer!" Ho detto guarda, mi hanno fatto lavorare su Talk Like A Pirate Day, meritano quello che ottengono.

3
Arr, i tuoi tronchi stanno cercando una chiglia!

10

Usare i temi ASP.Net quando solo una normale cartella CSS precedente avrebbe funzionato bene.


Lol, sì!

1
Questa risposta potrebbe essere abbreviata in "Uso di ASP.NET"
finnw,

Gli skin sono utili per impostare la CssClass predefinita.
Min

8

Prendere la strada veloce per far funzionare un po 'di codice, piuttosto che la strada giusta (un po' generale, ma lo chiameremo un'astrazione e quindi una risposta "giusta").


7

La mia azienda ha un modello di sviluppo a cascata, in cui i nostri utenti e analisti aziendali definiranno i requisiti per i progetti. Su uno dei nostri "grandi" progetti, abbiamo ottenuto una serie di requisiti e ho notato che una serie di requisiti conteneva dettagli di implementazione , in particolare informazioni relative al nostro schema di database utilizzato dal nostro sistema di contabilità.

Ho commentato agli utenti aziendali che l'implementazione è il mio dominio, non dovrebbe essere contenuto nei requisiti. Non erano disposti a cambiare i loro requisiti perché, dopo tutto, sono IL BUSINESS, e ha senso solo per i contabili progettare software di contabilità. Come umile sviluppatore che è troppo in fondo al sondaggio totem, sono pagato per fare invece di pensare . Per quanto l'ho combattuto, non sono riuscito a convincerli a riscrivere i requisiti: ci sono troppe scartoffie e burocrazia per i cambiamenti che è solo una seccatura.

Quindi, ho dato loro quello che chiedevano. Per lo meno, funziona in qualche modo , ma il database è progettato in modo strano:

  • Molta normalizzazione non necessaria. Un singolo record contenente 5 o 10 campi è suddiviso in 3 o 4 tabelle. Posso occuparmene, ma personalmente vorrei che tutti i campi 1: 1 fossero raccolti in un unico tavolo.

  • Un sacco di denormalizzazione inappropriata. Abbiamo una tabella che memorizza i dati di fatturazione che memorizzano più dei dati di fatturazione. Archiviamo un numero di flag vari nella tabella InvoiceData, anche se il flag non è logicamente correlato alla tabella InvoiceData, in modo tale che ogni flag abbia un valore di chiave primaria codificata e tutti gli altri campi annullati nella tabella InvoiceData. Dato che la bandiera è rappresentata come un record nella tabella, ho suggerito di estrarre la bandiera nella sua tabella.

  • Denormalizzazione molto più inappropriata. Alcuni flag a livello di app vengono archiviati come colonne in tabelle non appropriate, per cui la modifica del flag di un'app richiede l'aggiornamento di ogni record nella tabella.

  • Le chiavi primarie contengono metadati, in modo tale che se una chiave primaria varchar termina con "D", calcoliamo le fatture utilizzando un set di valori, altrimenti lo calcoliamo con un altro set. Avrebbe più senso estrarre questi metadati in una colonna separata, oppure estrarre l'insieme di valori per calcolare in un'altra tabella.

  • Le chiavi esterne vanno spesso a più di una tabella, in modo tale che una chiave esterna che termina con "M" potrebbe essere collegata alla nostra tabella dei conti dei mutui, mentre una chiave esterna che termina con "A" potrebbe essere collegata alla nostra tabella dei conti automatici. Sarebbe più semplice dividere i dati in due tabelle, MortageData e AutoInsuranceData.

Tutti i miei suggerimenti sono stati abbattuti con molto lamento e digrignamento dei denti. L'app funziona come progettato e, sebbene sia una grande palla di fango, tutti gli hack brutte, i casi speciali e le strane regole aziendali sono documentati sarcasticamente e umoristicamente nel codice sorgente.


3
Bontà, spero che il tuo CV sia carino e aggiornato per una rapida fuga prima che la grande palla di fango cada alla gravità!
Benjol,

7

Attenersi alla tecnologia precedente perché sembra troppo complicato consentire ai client di eseguire l'aggiornamento a una nuova versione di .NET framework, ma in realtà ci vorrà più tempo di sviluppo per creare il software perché non è possibile utilizzare alcuni componenti (che fanno risparmiare tempo) del nuova versione del framework.


+1: Sì - ci sono stato ... E appena mi sono reso conto che gli n00bs non si sarebbero aggiornati, ho iniziato a pianificare la mia fuga verso pascoli più verdi.
Jim G.

E così ho fatto, appena andato in pensione il mese successivo!
viti

6

All'università stavo lavorando al mio progetto di design senior. Un altro ragazzo e io stavamo scrivendo un sistema di tracciamento dei bug basato sul web. (Niente di rivoluzionario, ma entrambi volevamo avere qualche esperienza sul web.) Abbiamo fatto la cosa con i servlet Java, e ha funzionato abbastanza bene, ma per qualche ragione sciocca, invece di optare per usare Exceptions come nostro meccanismo di gestione degli errori, abbiamo scelto per usare i codici di errore.

Quando abbiamo presentato il nostro progetto per un voto e uno dei docenti ha chiesto l'inevitabile: "Se dovessi rifarlo, cosa faresti diversamente?" Ho subito capito la risposta: "Userei le eccezioni, ecco a cosa servono."


Ahhh le gioie di reinventare la ruota! :-) È divertente.

Lo chiamo difetti intenzionali, solo per poterlo migliorare nella prossima iterazione.
whatnick

2
Le eccezioni sono solo per la gestione delle eccezioni. Troppe persone abusano delle eccezioni trasformando tutto in un'eccezione.

@jacob - Sono d'accordo con il tuo sentimento che le eccezioni dovrebbero essere usate per cose che puoi prevedere (cioè condizioni eccezionali) ma da quello che ho visto (e non essendo un programmatore Java) Java sembra usare le eccezioni per tutto ciò che è sotto il sole. Quindi non usare eccezioni nel codice Java potrebbe essere considerato in contrasto con il flusso della lingua.

6

Non è la mia scelta del metodo, ma ho creato un XSLT per convertire un file XML basato su riga in un report HTML basato su colonna.

Funzionava solo in IE, era assolutamente impossibile decodificare come funzionava. Ogni volta che dovevamo espanderlo, era incredibilmente difficile e richiedeva anni.

Alla fine, ho sostituito con un piccolo script C # che ha fatto la stessa cosa.


L'ho fatto anch'io. Ho implementato un motore di template e-mail usando XSL e ho trovato difficile leggere e mantenere.
TrueWill,

Sì. Sostituito l'enorme albero di file XSLT di qualcuno con alcune semplici funzioni VB.NET. Molto soddisfacente, soprattutto quando la successiva richiesta di modifica del cliente che sarebbe arrivata sarebbe stata impossibile da eseguire in XSLT.

Ho trovato che la maggior parte dei programmatori considerano XSLT una cattiva scelta, semplicemente perché essi non ottengono esso. È estremamente utile per una piccola serie di problemi, molto più efficiente di molte altre soluzioni. D'altra parte, è usato MODO troppo spesso, e soprattutto NON in quella piccola serie di problemi ...
AviD

6

cercando di usare tutte le nuove tecnologie (per apprendere nuove tecnologie) anche se ciò richiede anche ..


5

Non ho impiegato abbastanza tempo per valutare il modello di business. Ho fatto ciò che il cliente ha chiesto, ma 6-12 mesi dopo siamo arrivati ​​entrambi alla conclusione che avrebbe dovuto fare diversamente.


4

Progettare senza una specifica.


3
Le specifiche non sono sempre possibili

Dovrebbe essere "Implementare la soluzione senza chiedere al cliente se è quello che volevano"; che di solito significa che hai seguito le specifiche.
dietbuddha,

3

Ho implementato una sottosezione di un'applicazione in base ai requisiti.

Si scopre che i requisiti erano gonfiati e placcati in oro e il mio codice era stato riprogettato. Avrei dovuto progettare la mia sottosezione in modo che funzionasse solo con ciò che stavo aggiungendo in quel momento, ma avrei pianificato di aggiungere tutte le altre cose senza includere il supporto generico sin dall'inizio.

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.