Cosa succede se non ho buone idee per implementare una funzione? [chiuso]


32

Sto lavorando sulla mia applicazione e sono bloccato. Devo implementare una funzione ma non riesco a trovare un buon approccio per implementare questa funzione. Ci stavo pensando da un paio di giorni e non sono venuti pensieri positivi. La ricerca in Internet non mi ha dato alcuna ispirazione.

Devo andare avanti, ma voglio sapere qual è il migliore:

  • Pensa di più, aspetta di più e continua a cercare l'approccio migliore
  • Smetti di perdere tempo e inizia con un design scadente, coprendo tutto con i test

Cosa pensi? Come ho detto prima, sto lavorando sulla mia stessa applicazione. Non ho nessuna scadenza, ma voglio anche finire di programmare l'app al più presto.



12
@gnat: Queste altre domande riguardano situazioni in cui i richiedenti sanno già come implementare alcune funzionalità in modo pulito, ma potrebbero voler sacrificare un buon design per essere "veloci e sporche". Questa domanda, tuttavia, descrive una situazione diversa, riguarda la risoluzione dei problemi in generale quando non trovi un buon punto di partenza, quindi non è un duplicato di IMHO.
Doc Brown,

nota: se l'app ha successo non finirai mai per "codificarla" e le funzionalità verranno riprogettate comunque. Quindi vorrei implementarlo nel miglior modo possibile ora.
ren

Risposte:


41

Oltre a parlarne con le persone (la domanda suggerisce che non hai colleghi nel progetto), trovo spesso un buon approccio per concentrarmi sulle cose che posso fare.

Di solito c'è una parte del codice che so che devo scrivere comunque. Le cose che non so ancora scrivere, vengono quindi sostituite da matrici che restituiscono risultati fittizi o usano un'approssimazione che è abbastanza buona per testare il resto.

Questo ti mantiene produttivo. E quando devi implementare il pezzo mancante, hai l'interfaccia. E hai scritto un sacco di codice che circonda il problema, nello stesso dominio del problema, che di solito mi aiuta a generare idee: sai più esattamente cosa ti viene richiesto di produrre e quali altri input sono disponibili se aiuta a risolvere il problema . Inoltre, spesso la conclusione è che il pezzo mancante non deve essere così completo come inizialmente pensato.


6
Lo svantaggio di scrivere il codice più rischioso e meno compreso per ultimo è che potresti scoprire che non è possibile risolvere il problema, o solo risolverlo con modifiche sostanziali all'architettura del programma, portando a uno sforzo sprecato.
Rich Smith,

1
L'altro aspetto negativo di questo approccio è a volte ti porta a "Posso risolvere il problema X. Tutto ciò che rimane è fare Y." quando in realtà, Y non è fattibile e la vera soluzione è Z.
Brian

@RichSmith, Brian: Succede, anche se raramente se me lo chiedi. Quindi può fornirti una migliore comprensione del perché la parte mancante è così difficile, il che migliora le tue stime. E non suggerirei di dedicare settimane di lavoro a una divisione speculativa e arbitraria delle responsabilità.
jdv-Jan de Vaan,

è discutibile se questi siano o meno degli aspetti negativi. sarebbe stato meglio passare il tempo a non esplorare affatto il problema? o da te seduto a indovinare cosa avrebbe funzionato? Penso che sia una buona pratica scrivere prototipi rapidi, provare cose e fallire velocemente. è l'unico modo per sapere con certezza e fare esperienza per future situazioni simili
sara,

14

Se la ricerca fallisce, puoi sempre implementare usando la prima (non necessariamente la migliore) idea che hai avuto, e poi rifattorizzarla in seguito quando trovi l'approccio giusto.

Questo è l'approccio giusto, poiché anche se trovi qualcosa che sembra una buona idea, in seguito potrebbe rivelarsi negativa. O potrebbe essere buono in quel momento, ma in seguito trovi qualcosa di molto meglio. Quindi dovrai ancora refactoring.

Nel fare ciò, assicurati di progettare e implementare in modo che sia facile da refactoring. Se lo fai correttamente, dovrai cambiare solo la parte problematica e non iniziare dall'inizio.


1
Sembra essere ipotizzato in questo post, ma vorrei aggiungere che è molto importante che tu scriva il tuo codice in modo che sia facile ripensare.
c_maker,

@c_maker Sì, certo. Altrimenti, non ha senso riscrivere tutto più tardi da zero. Lo aggiungerò alla risposta. grazie
BЈовић

10

Che ne dici di chiedere a un'altra persona? Ad esempio, puoi descrivere qui il tuo problema o, se si tratta più di un problema di implementazione, su stackoverflow.com e chiedere idee. A volte ti aiuterà già se inizi a scrivere il problema, anche se non ottieni buone risposte.


Se è l'interfaccia utente che è un problema, c'è anche ux.stackexchange.com
Rob Church l'

se chiedi su SO, le risposte saranno protette da copyright sotto Creative Commons e, a seconda del progetto, quel codice potrebbe essere inutilizzabile.
smcg,

2
Il consiglio può essere protetto da copyright? Sicuramente l'autore lo userebbe come tutorial, non copia / incolla?
Grizwako,

@smcg: l'argomento è stato discusso qui: meta.stackexchange.com/questions/12527/… - Ma onestamente, se questo sta davvero diventando un problema, penso che si possa aggirare questo nel modo suggerito da GrizzLy.
Doc Brown,

@DocBrown IANAL, quindi non posso dire con certezza se ciò potrebbe reggere, ma a volte è bene sbagliare dal lato della cautela.
smcg,

2

Alcune idee:

  • Brainstorm
    Scrivi ogni stupida idea che hai (su carta o lavagna). Elimina quelli che sei sicuro che non funzioneranno. Continua a scrivere. Includi soluzioni a problemi del mondo reale potenzialmente correlati. Ad esempio, mescolare la vernice, mettere un chiodo nel muro o cambiare l'olio risolve una similitudine nel mondo reale?
  • Chiedi aiuto
    Google, chiedi qui, chiedi ai tuoi amici geek, ecc.
  • Risolvi un problema correlato
    Non puoi risolvere il problema, ma puoi risolverne uno molto più semplice? O ugualmente complessa, correlata? Fai quello. Quindi apportare piccole modifiche individuali per avvicinare la soluzione alla soluzione desiderata.
  • Inizia a scrivere dall'esterno
    Indipendentemente dal fatto che la tua interfaccia sia un servizio Web, una pagina Web, un modulo nativo, una fotocamera, una tastiera, un monitor o qualsiasi altra cosa , esiste un'interfaccia. Scrivi alcune righe di codice / pseudocodice per far funzionare l'interfaccia. Usa metodi magici che non esistono ancora. Ricorsivamente fai lo stesso per ogni metodo magico inesistente. Ottimizza più tardi.

2

Non c'è niente di sbagliato nell'andare con la cattiva soluzione. Spesso in quel momento non sai abbastanza del dominio problematico. Andare con una cattiva soluzione ti consente di andare avanti e saperne di più sul problema. Quindi puoi ancora tornare indietro e riformattare la tua prima soluzione.


1

Cerco sempre di guardarlo dal punto di vista dell'utente finale. È molto facile pensare a un'idea "interessante" come uno sviluppatore su cui puoi lavorare per anni che in realtà aggiunge molto poco alla tua app.

Idealmente, vuoi mappare tutte le funzionalità della tua app e assegnarle le priorità in base al vantaggio per l'utente finale, personalmente uso MOSCoW , anche se finché mantieni il tuo metodo di prioritizzazione lo stesso in tutto può essere semplice come 1 - 5.

Dopodiché se scopri ancora che questa funzione è una parte essenziale della tua app, come già detto dalle persone, chiedi! Non credo di aver mai riscontrato un problema che alla fine non è stato risolto né da un collega né da quelle persone simpatiche su StackOverflow.


Bene

Ecco qua è un segno!
Mrk Fldig,

1

La mia opinione è: non scrivere mai codice che funzioni semplicemente! In futuro dovrebbe essere molto difficile fare il refactoring.

È un approccio molto comune per gli sviluppatori (e ovviamente per i PM o i capi). Ho sentito molto tempo "farlo funzionare" o "Risolverò più tardi" (più tardi quando ??? mai!) Ma, penso che la qualità non sia qualcosa che non puoi ottenere nel mezzo del progetto.

Il mio suggerimento è, smetti di pensare al tuo problema per un po '.... fai qualcos'altro e, a volte, le soluzioni escono da solo.

A proposito, chiedere a un collega è assolutamente un ottimo modo per risolvere i tuoi problemi.

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.