Lottando come programmatore. Hai bisogno di un consiglio [chiuso]


20

Sono uno sviluppatore da diversi anni. Sono abbastanza bravo in quello che faccio e posso "fare il lavoro".

Ma c'è una differenza tra "portare a termine il lavoro" e "fare il lavoro correttamente". Facciamo un esempio.

Di recente ho sviluppato un sito Web da zero. Il sito web funziona bene e non ho avuto problemi. Guardando attraverso il codice ho pensato a me stesso che avrei potuto farlo meglio. Avrei potuto ridurre le mie query MySQL. Avrei potuto usare MVC per semplificare l'estensione (ora ha bisogno di estenderla).

Ho deciso di riscrivere il progetto usando CodeIgniter. Mi piace il quadro. Ma poi mi sono distratto perché per ridurre le mie query MySQL ho dovuto imparare i join avanzati.

E questo è il problema. Ogni volta che svolgo un lavoro in modo adeguato sono in una ruota di apprendimento costante. E argomenti come i join MySQL avanzati richiedono tempo per apprendere e quindi tempo per l'implementazione.

Non lavoro per un'azienda. Faccio tutto da solo. Quindi immagino che se lavorassi come sviluppatore PHP per un'azienda ci sarebbero team separati che gestiscono l'SQL.

Essere da solo è difficile. E a volte, sebbene la mia conoscenza sia avanzata, mi ritrovo a porre domande, dopo domande. Probabilmente ho molto orgoglio nel mio lavoro. Ma se dovessi lavorare per una società che gestisce progetti completi, potrei immaginare i progetti impiegando un po 'di tempo perché dovrei imparare sempre di più per soddisfare il mio orgoglio e per assicurarmi di fare le cose "correttamente".

Ho intenzione di trovare un lavoro dopo il nuovo anno. Ho bisogno della sicurezza del lavoro. Ecco perché sto facendo questa domanda.

Che consiglio puoi dare in termini di auto-sviluppo e auto-miglioramento? Dovrei preoccuparmi di meno? O forse cerchi un lavoro come sviluppatore PHP quando non gestirò direttamente le query SQL?


54
se non vuoi imparare costantemente, sei nel campo sbagliato

6
@JamesGuvnaJeffery: se non permettessero (qualsiasi) tempo (per niente) per l'apprendimento durante un progetto, non vorrei lavorare lì perché come sviluppatore smetterei di migliorarmi.
Marjan Venema,

3
il lavoro è l'apprendimento, non ti danno questo magico momento libero per studiare, in realtà lo fanno, si chiama "il tuo tempo personale". Non lo chiamano "sulla formazione professionale" senza motivo. Se non ti senti a tuo agio ad essere uno studente auto-iniziato e ad apprendere tutto il tempo gratuitamente, come ho detto, probabilmente sei nel campo sbagliato.

5
Il vecchio codice dovrebbe fare schifo. Non ucciderti per questo; cerca di migliorare nel tempo. Riscrivere un progetto di lavoro non ha praticamente alcun senso pratico. I clienti non pagheranno un extra per questo. codinghorror.com/blog/2006/10/…
Giobbe

2
Non capisci quello che sto dicendo, lavorare per un'azienda è esattamente L'OPPOSITO di ciò che sposerai e che ami fare. Sta lavorando su un programma di qualcun altro, usando ciò che dettano e come lo dettano con nient'altro che compromessi e non c'è tempo per studiare cose nuove sul loro tempo e non c'è tempo per implementare cose in nuove cose eccitanti che impari nel tuo tempo personale. Questa è la realtà di essere uno sviluppatore di software aziendale. Dubito che ti saresti dedicato tanto a un ambiente aziendale come dici di essere al tuo stile di ricerca e sviluppo sperimentale a cui sei abituato.

Risposte:


33

Consiglio: non abbiate paura di imparare cose nuove - hai fatto un buon primo passo nel riconoscere che si potrebbe fare meglio e poi ha fatto lo sforzo di imparare come si potrebbe fare meglio. Sì, ci vuole più tempo in anticipo, ma a lungo termine ne vale la pena. Ora che conosci CodeIgniter, puoi usarlo per i prossimi progetti futuri. Puoi metterlo sul tuo curriculum. Ora che conosci tecniche SQL avanzate, i tuoi progetti futuri ne trarranno vantaggio. Se smetti di imparare, ristagni.


21

Quello che stai attraversando mi sembra abbastanza normale. Questo è il modo in cui lavoriamo sul nostro mestiere e miglioriamo sempre di più in quello che facciamo.


10

... Ho deciso di riscrivere il progetto usando CodeIgniter. Mi piace il quadro. Ma poi mi sono distratto perché per ridurre le mie query MySQL ho dovuto imparare i join avanzati.

E questo è il problema. Ogni volta che svolgo un lavoro in modo adeguato sono in una ruota di apprendimento costante. E argomenti come i join MySQL avanzati richiedono tempo per apprendere e quindi tempo per implementare ...

Ben dato sopra, penso che abbia senso concentrarti sul miglioramento della tua capacità di pianificare in anticipo, stabilire e dare priorità al lavoro in coda, gestire il tuo tempo - cose del genere.

Davvero, questa sembra essere l'unica cosa che manca nel tuo atteggiamento. Quello che chiamate "sidetracking" è essenzialmente un altro lavoro ("impara i join avanzati") che deve essere pianificato, prioritario e messo in coda.


Grazie @gnat. Apprezzo davvero queste risposte positive. Posso concordare con sfida con te su ciò che hai detto.
James Guvna Jeffery,

9

Essere un professionista in questo campo significa sfondare costantemente te stesso contro la tua inadeguatezza. Fallo dall'8 al 5 dal lunedì al venerdì, forse di più se è in arrivo una scadenza, passa un buon fine settimana e torna di nuovo lunedì. Questo è il lavoro.

Fare software richiede una certa umiltà. Se sei qualcuno che deve avere ragione e che deve dimostrare di sapere già tutto, questo potrebbe non essere il campo per te.

Non riesco a capire di non aver imparato qualcosa ogni singolo giorno. Non penso che vorrei quel lavoro.


La mia esperienza è che va bene essere qualcuno che deve avere ragione, purché tu possa anche avere un'insufficienza di stomaco. Mi prendo gioco di tutto ciò che non è perfetto. Ecco perché faccio le cose meglio col passare del tempo.
Tom Anderson,

Bene, questo è il paradosso non è vero? Hubris è una delle tre virtù del programmatore. Ma nella mia esperienza, essere "spinto compulsivamente a dimostrare che sono intelligente dimostrando di aver già saputo tutto prima di impararlo" è una tendenza che gli sviluppatori principianti o lasciano andare, o non durano a lungo in questo campo.
Dan Ray,

Forse accelerare piuttosto che lasciar andare? Molto tempo fa, fortunatamente, ho preso l'abitudine di proclamare che sapevo cose che non sapevo. Tuttavia, odio ancora ammettere di non sapere le cose; la necessità di colmare il divario tra ciò che so e ciò che voglio poter dire, so che è piuttosto un driver per me. Non necessariamente per tutti!
Tom Anderson,

Non lo so, Tom. Mi sembra che quel momento di imbarazzo che non conosci già qualcosa sia un momento che potresti passare per impararlo. Mi piace sapere quanto il prossimo, ma non ho nessun problema a dire "Non lo so".
Dan Ray,

6

Essere soli è difficile. Al contrario, quando lavori con un team di sviluppatori, tutti imparano gli uni dagli altri. Come parte del team, acquisirai molte conoscenze lavorando con altri sviluppatori e con molto meno sforzo rispetto a quando provi a capire tutto da solo.

Detto questo, come sviluppatore, devi impegnarti ad apprendere costantemente. Che si tratti di leggere la documentazione per nuovi framework o libri sullo sviluppo, devi fare uno sforzo costante per mantenere le tue conoscenze aggiornate e in crescita. Tuttavia, far parte di una squadra può chiarire quale area è necessario conoscere di più in un dato momento.

Per quanto riguarda il tuo punto di rivisitare il tuo vecchio codice e riscriverlo: ho scoperto che il mio codice rappresenta sempre il meglio di ciò che sapevo al momento in cui l'ho scritto. Molte volte torno a qualcosa che ho scritto anni fa e mi schiaffeggio sulla fronte, quando vedo quanto avrei potuto fare di meglio, dato quello che so adesso . Ma questa è la natura dell'esperienza, la ottieni dopo averne bisogno ...

Infine, quando si sviluppa un'applicazione, è sempre necessario esercitare un buon senso degli affari, decidere quando è meglio tagliare gli angoli per finire più rapidamente e quando è necessario impiegare più tempo per imparare qualcosa di nuovo che migliorerebbe il design e la qualità dell'applicazione. C'è un universo di cose da imparare nel mondo del software. Senza esercitare quel tipo di buon senso, potresti ritrovarti a girare le ruote imparando, pensando, riprogettando, ma senza mai fare nulla.


+1 per la seconda frase. Ho imparato di più dai miei colleghi, lavorando in diverse organizzazioni, di quanto abbia mai imparato leggendo (libri o online). Dalla tua domanda sembra che lavorare in gruppo per un po 'ti farebbe un mondo di bene.
Dawood dice di ripristinare Monica il

3

Penso che le tue preoccupazioni siano valide, ma non dovresti perdere il sonno. Sono convinto che un essere un tecnologo abbia il seguente bagaglio:

  • Devi costantemente imparare nuove cose. O impari ad amarlo o non lo fai.
  • Ci sono molte più cose che vorresti padroneggiare di quanto si possa mai sapere.
  • Svilupperai abilità durante un progetto che vorresti avere durante il progetto.
  • Di conseguenza, vorrai sempre tornare indietro e ripetere quel progetto. È così difficile rilasciare qualcosa che sai potrebbe essere migliore.

Alla fine, sembra che ti interessi costruire software di qualità, che è qualcosa che non puoi imparare . Sappi che devi differenziare la costruzione di una soluzione di alta qualità con la costruzione di qualcosa di perfetto. Sembra che tu sia come me e non ti sembrerà mai perfetto. Sarebbe più preoccupante se non ti sentissi come se avessi la possibilità di migliorare te stesso e il tuo lavoro.

È difficile essere un tuttofare (maestro di nessuno), ma è davvero necessario capire come identificare le cose che sono più interessanti e utili per te e concentrarsi su di esse. Scopri come meglio "esternalizzare" altri lavori ad altre persone o strumenti .


2

Penso che devi preoccuparti di meno di "farlo correttamente". Puntare alla perfezione, ma rendersi conto che non è davvero possibile progettare una soluzione perfetta, tanto più la prima volta. Il fatto che tu sia abbastanza preoccupato di farlo correttamente per porre questa domanda significa che sei già sulla buona strada.

Per quanto riguarda la tua frustrazione per l'apprendimento di nuove cose, ho scoperto che lavorare in un gruppo e poter chiedere e discutere il problema con altri programmatori ha rimosso il dolore di scoprire che cosa avevo bisogno di imparare e lo ha sostituito con la gioia di scoprire qualcosa di nuovo e imparare come applicarlo.

Adoro scrivere software, ma a volte c'è davvero dolore non nell'apprendimento reale di qualcosa di nuovo, ma trovare quello che è esattamente ciò che devi imparare per essere in grado di ottenere ciò che vuoi fare.

Da quello che ho capito, sono stato in una posizione simile a te. Codificare qualcosa da solo può essere sia frustrante che difficile a volte, e gratificante e un po 'divertente a volte.

Fai esattamente quello che pensi di fare, trova un lavoro in cui farai parte di una squadra (e fai del tuo meglio per assicurarti di ottenere un lavoro da qualche parte che non fa schifo). Lavorare con altre persone che usano le stesse tecnologie e progettare lo stesso software amplierà la tua comprensione e l'applicazione di tali tecnologie e modelli di progettazione quasi da un giorno all'altro.

Quanto a sapere come fare qualcosa nel modo giusto la prima volta, beh, come faresti a sapere che c'era un modo migliore se non l'avessi già fatto in un certo modo la prima volta? L'abilità nella progettazione del software dipende spesso in gran parte dall'esperienza. Joel Spolsky è un genio del software, ma se leggi molti dei suoi articoli noterai che sono molto il risultato sia dell'esperienza che dell'intelligenza.

Per quanto riguarda la parte SQL, come sviluppatore .NET devo ancora lavorare ovunque con uno sviluppatore di database dedicato, scriviamo tutti il ​​nostro SQL, ma spesso ci sono sviluppatori che sono davvero bravi in ​​SQL e sono disposti ad aiutarti con le cose più approfondite.

Sembri un ragazzo intelligente, non penso che dovresti essere così duro con te stesso.


1

Questo è del tutto normale e non qualcosa di cui dovresti preoccuparti troppo. Devi imparare continuamente nuove competenze, ma devi anche imparare a stabilire le priorità e gestire il tuo tempo. È inoltre necessario evitare la trappola della riqualificazione non necessaria.

Il programmatore inesperto viene spesso attirato nella trappola della riqualificazione:

Non ho scritto questo programma perfettamente, e ora ho bisogno di estenderlo o modificarlo. Ci vorrà molto lavoro per modificare il codice esistente a causa del modo in cui l'ho scritto. Ho imparato molto di più da allora, sono sicuro che la cosa migliore sarebbe riscrivere l'intero programma. Sono sicuro di poterlo scrivere molto meglio questa volta.

Ci sono molte cose sbagliate in questa logica.

  • è molto lavoro da modificare o aggiungere al codice esistente, ma non sarà molto più lavoro per riscrivere tutto?
  • se riscrivi tutto, c'è una buona probabilità di creare nuovi bug e ci vorrà più tempo di quanto pensi (soprattutto se non hai esperienza). Stai considerando tutto ciò che è coinvolto nella scrittura del sistema? (ricorda quanto tempo hai impiegato la prima volta)
  • hai imparato molto da quando hai originariamente scritto il programma (quindi potresti essere in grado di migliorarlo), ma avrai anche ulteriori informazioni il prossimo mese / anno. Cosa ti fa pensare che non vorrai riscrivere di nuovo tutto ad un certo punto in futuro?
  • l'ultima prova di un programma è che esso funziona . Non hai niente di meglio da fare?

Non può mai far male contemplare e pianificare una riqualificazione. Ciò significa considerare come si desidera riscrivere il programma e tentare di identificare eventuali problemi che si verificano. In questo caso avresti identificato i "join SQL avanzati" che ora richiedi, e quindi indagare su come funzionano e conoscerli.

Se ritieni di non aver identificato il divario di conoscenza del join avanzato attraverso la pianificazione (senza avviare lo sviluppo), devi migliorare le tue capacità di pianificazione. Prova a pensare a quale parte del piano non era abbastanza dettagliata. Dovresti entrare nei dettagli necessari fino a quando non sei sicuro che l'intero sistema sia tecnicamente possibile.

Questo approccio ti permetterà di imparare in anticipo .

Infine, l'apprendimento sul lavoro è una parte normale della programmazione. Ciò non significa, tuttavia, che tu avvii un'attività e poi ti renda conto che devi fermarti per una settimana per imparare, diciamo, sull'HTML di base. Puoi smettere per alcune ore per conoscere qualcosa, ma il tuo datore di lavoro ti sta pagando solo per fare il lavoro. Impara in modo efficiente: non leggere l'introduzione e la cronologia, come funziona e come si adatta al tuo programma. Se devi smettere di lavorare per giorni e giorni per imparare a completare una parte del programma, stai sbagliando.


1

Potresti pensare che apprendere nuove tecnologie e problemi sia una perdita di tempo. Ma non fatevi prendere dal panico. È normale. Fa parte della tua pratica come programmatore imparare ... altrimenti saremmo tutti bloccati con COBOL.

I professionisti freelance adeguano le loro commissioni di conseguenza e i periodi di apprendimento sono tra le altre cose qualcosa che dovrebbe essere preso in considerazione nelle stime del tempo. La prossima volta che decidi di introdurre un nuovo framework, assicurati di pianificare in tempo sufficiente per apprenderlo.


0

Ma c'è una differenza tra "portare a termine il lavoro" e "fare il lavoro correttamente".

No, non c'è, e penso che questa sia la radice del tuo problema qui. Mi sembra che tu sia troppo impaziente di preoccuparti di fare le cose "correttamente" perché come singolo sviluppatore non vedi come funzionano gli altri. Ma correttamente secondo chi? Chi è questa persona magica che decreta che ciò che stai facendo è "corretto"? Prendi 100 dei migliori programmatori del mondo e garantisco che nessuno sarà d'accordo al 100% su ogni argomento di programmazione.

In definitiva ciò che conta è se i tuoi clienti sono felici. Se i programmi che crei risolvono i problemi che dovrebbero e lo fanno in modo economico, lo stai facendo correttamente. Non è più intrinsecamente corretto, ad esempio, usare codeigniter che usare il proprio framework. Il corollario di ciò è che se produci un mucchio di merda, lo stai facendo "sbagliato" indipendentemente dai processi o dalle "migliori pratiche" seguite.

Che tu stia rivisitando il tuo codice e vedendo i modi per migliorarlo è una parte normale del processo di sviluppo. Non è un segno che non stai facendo le cose 'correttamente'. È un segno che ti dedichi all'apprendimento e al miglioramento. Da tutto quello che vedo nel tuo post, non hai problemi.

Ora vai a dare un calcio * * *


Non sono d'accordo con questo. Esistono modi di programmazione che sono molto più gestibili e facilmente leggibili rispetto ad altri, e ci sono pile di libri dedicati a migliorare il programmatore in modo che siano in grado di scrivere codice migliore.
TehShrike,

Grazie @grandmasterB. TehShrike e riferimento a questi libri?
James Guvna Jeffery,

3
" nessuno due sarà d'accordo al 100% su ogni argomento di programmazione ", forse, ma almeno l'80% sarà d'accordo su almeno l'80% degli argomenti di programmazione. Questo è il consenso professionale. Non esistono "diritti" assoluti, ma esistono le migliori pratiche e vale la pena conoscerle.
Kirk Broadhurst,

1
Va bene, ma se il tuo programma non risolve il problema che dovrebbe, buone pratiche o meno, è stato fatto in modo errato. Esiste un mezzo oggettivo per dire se un programma viene eseguito correttamente: se il cliente consegna fogli di carta verdi o altri pagamenti in cambio del tuo lavoro. Qualsiasi altra misura è semplicemente opinione.
GrandmasterB,

2
E quando il tuo cliente ritiene che il tuo preventivo per una modifica sia eccessivo e trova un altro esperto che conferma tali sentimenti perché era scarsamente codificato, sei senza lavoro.
JeffO,
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.