JavaRush /Java Blog /Random-IT /Pausa caffè #83. Quali tratti caratteriali distinguono i ...

Pausa caffè #83. Quali tratti caratteriali distinguono i programmatori eccezionali. Guida semplice alla programmazione: funzioni e metodi

Pubblicato nel gruppo Random-IT

Quali tratti caratteriali contraddistinguono i programmatori eccezionali?

Fonte: Hackernoon Cosa distingue i grandi programmatori da quelli bravi? Ho scoperto due tratti caratteriali condivisi dai grandi programmatori: erano coerenti e persistenti. Questi tratti di per sé non sono segni di genio e, se lo desidera, chiunque può svilupparli e poi applicarli nel proprio lavoro. Pausa caffè #83.  Quali tratti caratteriali distinguono i programmatori eccezionali.  Guida semplice alla programmazione: funzioni e metodi - 1

1. Sii coerente

I bravi programmatori non programmano occasionalmente. Piuttosto, hanno un programma specifico per migliorare le proprie conoscenze e competenze durante il tempo libero: prima o dopo il lavoro e nei fine settimana. Ad esempio, un programmatore che conosco trascorre le prime due ore della sua giornata, sei giorni alla settimana, su progetti o attività di studio personali. Questo non vuol dire che queste persone scrivano codice 24 ore su 24. Loro, come tutti noi, hanno tempo per la loro vita personale, i loro obblighi e i loro interessi. Ma sono coerenti: la programmazione è diventata la loro abitudine. Come puoi diventare coerente? Questo è ciò che molti di noi stanno cercando di ottenere. Ho scoperto che ci sono diversi modi per farlo. Innanzitutto, determina il numero di ore settimanali che puoi dedicare alla programmazione. Questo numero rappresenta il "chilometraggio del programma" settimanale. Come ex maratoneta, correvo un certo numero di miglia ogni settimana. Questa era la mia corsa settimanale. Adesso ho la mia esperienza di programmazione: questo è il numero di ore che passo a programmare ogni settimana. La maggior parte delle persone trascura questa fase. Saltano direttamente al progetto che vogliono portare a termine o all'argomento che vogliono studiare, senza pensare a come troveranno il tempo per farlo. Di conseguenza, lavorano di notte o 16 ore al giorno. C’è un problema con questo approccio: non è sostenibile a lungo termine. Affinare le tue capacità di programmatore non è qualcosa che fai nel corso di una o due settimane impegnative. Invece, devi lavorarci continuamente per molto tempo. Questo è il motivo per cui è così importante identificare la tua esperienza di programmazione. Per fare ciò, considera l'utilizzo di un registro temporale per vedere dove e come trascorri il tuo tempo. Prendi un pezzo di carta e scrivi tutto ciò che fai ogni giorno e per quanto tempo lo fai, incluso controllare i social media o la posta elettronica per cinque minuti. Ciò ti renderà più facile trovare gli slot aperti nel tuo programma. Potresti anche riuscire a ritagliarti un po' di tempo in più per fare i lavori domestici o guardare la TV. È quindi possibile creare un piano di formazione sulla programmazione a cui attenersi. Un piano di formazione è uno dei modi più efficaci per essere coerenti. Ti consente di distribuire tutti i dettagli in anticipo. Tutto quello che devi fare è mettere in atto questo piano ogni singolo giorno. I miei piani di allenamento per la corsa delineavano quante miglia avevo bisogno di correre ogni giorno e quanto velocemente dovevo correrle. Ora creo programmi di allenamento programmati che hanno lo stesso scopo: mi dicono cosa devo fare ogni giorno. Alla fine della giornata, apro Evernote sul mio computer e faccio un programma per il giorno successivo. Ecco un esempio:
6:30 - 8:30 - Programmazione
  1. Recensione del mazzo di flashcard Python Anki (20 minuti).
  2. Risolvere il problema dei dati Word Cloud.
Seguo questo processo durante tutta la mia giornata lavorativa: designo la quantità di tempo che dedicherò a un'attività e ciò che voglio realizzare in quel tempo. Creo anche un piano di formazione mensile. In esso includo tre cose che voglio realizzare, imparare o completare nel prossimo mese. Facevo piani trimestrali. Ma poi ho scoperto che in tre mesi possono cambiare troppe cose. Un piano mensile ti concede tempo sufficiente per compiere passi significativi nella tua formazione.

2. Sii persistente

La seconda caratteristica dei bravi programmatori è la persistenza. Lavorano attraverso tutte le opzioni per risolvere il problema e trovare la risposta. Questo sembra essere il segreto. I grandi programmatori che ho incontrato hanno una straordinaria capacità di scomporre i problemi e trovare diverse soluzioni o soluzioni a una situazione difficile. In breve, avevano un sistema per risolvere i problemi. Non ho mai avuto un sistema di soluzione al liceo. Ogni volta che mi veniva posto un problema durante la lezione di matematica, mi tuffavo subito a tutta velocità. Poi ho continuato a farlo quando ho iniziato a programmare. Nessun piano. Non esiste un sistema. Non c'è tempo per pensare. Nessuna analisi. Non sorprende che in entrambi i casi girassi inutilmente le ruote e incontrassi costantemente ostacoli. Ora dispongo di un sistema di risoluzione dei problemi che mi aiuta a scomporre un problema per trovare diverse opzioni. Ad esempio, il primo passo nel mio processo di risoluzione dei problemi è dichiarare il problema. Questo è il primo. Una volta compreso il problema, mi concentro su ciascuno dei passaggi seguenti.
  • Analisi dei dati di input e dei risultati attesi.
  • Creazione di un algoritmo di azione.
  • Scrivere pseudocodice.
  • Risolvere una versione semplificata del problema.
Spero che tu abbia capito l'idea. Le tappe potrebbero non essere facili, ma sono gestibili. Risolvendo un problema difficile, diventiamo persone migliori. Infonde anche fiducia. Una volta risolto un problema difficile, siamo pronti per affrontarne di nuovi.

3. Atteggiamento verso i problemi?

Nel percorso per diventare programmatori migliori, c'è qualcos'altro che dobbiamo considerare: l'atteggiamento. È necessario avere un approccio nuovo ai problemi e alle ambiguità. Un giorno ho posto alcune domande a uno sviluppatore senior su un problema su cui ero bloccato. Ero perplesso e deluso. Inizialmente anche lo sviluppatore era perplesso. Tuttavia, la sua risposta mi ha scioccato. "Wow, è un bel problema", ha detto. Il suo interesse è stato stuzzicato dai dettagli che ha scoperto. Questo non vuol dire che anche i grandi programmatori non rimangano bloccati in qualche problema. Rimangono bloccati. Ma la differenza sta nell’atteggiamento. La lezione che ho imparato quel giorno è stata questa: i bravi programmatori non hanno paura di avventurarsi nell'ignoto. Capiscono che impareranno sicuramente qualcosa di nuovo studiando questo problema. Possiamo imparare molto studiando altri programmatori. Ma alla fine la responsabilità spetta a noi: dobbiamo metterci al lavoro ogni giorno e agire.

Guida semplice alla programmazione: funzioni e metodi

Fonte: DZone Cosa rende buona una funzione o un metodo? Ciò richiede una combinazione di fattori, ognuno dei quali conta. Diamo un'occhiata a quattro dei più importanti. Pausa caffè #83.  Quali tratti caratteriali distinguono i programmatori eccezionali.  Guida semplice alla programmazione: funzioni e metodi - 2

Nome significativo

Le funzioni dovrebbero avere nomi che ne descrivano lo scopo o la funzionalità. Quando una funzione ha un nome significativo, è facile da leggere e comprenderne lo scopo. Ad esempio, se lo scopo della funzione è trovare un cliente in base all'ID, un nome valido potrebbe essere findCustomerById(id: String) . Un'altra opzione potrebbe essere findCustomer(id: String) . Qui la firma della funzione implica che l'acquirente venga trovato tramite il suo ID. La parola "trovare" implica anche che l'acquirente può essere trovato o meno. Se il nome della funzione viene modificato in getCustomer(id: String), il suo significato cambia perché ora non implica alcun rollback; il client viene trovato oppure la funzione fallisce e probabilmente genera un'eccezione. Entrambi i nomi sono nomi validi per una funzione, ma hanno significati diversi e quindi anche le loro implementazioni devono essere diverse.

Meno parametri possibili

Mi piace seguire la regola del tre. Ciò significa che la funzione deve avere tre o meno parametri. Quando una funzione richiede più di tre parametri, dovrebbe essere riscritta e i parametri inseriti in un contenitore dati, come la sua classe, classe dati, oggetto JavaScript e così via. Questo è un modo semplice per ridurre il numero di parametri e organizzare i dati all'interno di un'applicazione. Prendiamo ad esempio una funzione che ha comportamento identico ma firme diverse:
fun addCustomer(
  firstname: String,
  lastname: String,
  streetAddress: String,
  city: String,
  zipCode: String
)
Ecco un'altra opzione:
data class Address(
  val street: String,
  val city: String,
  val zipCode: String,
  val streetNumber: String
)

data class Customer(
  val firstname: String,
  val lastname: String,
  val address: Address
)

fun addCustomer(customer: Customer)

La funzione fa quello che ci si aspetta

Una funzione deve fare ciò che ci si aspetta da essa. Ne più ne meno. Se la funzione è denominata findAddress(latitude, longitude) , dovrebbe trovare l'indirizzo alle coordinate specificate o, se l'indirizzo non può essere convertito in coordinate, restituire None , null , Vuoto o qualunque sia il tipo appropriato per la lingua specificata. La funzione non dovrebbe fare nient'altro, come cercare indirizzi nelle vicinanze o creare record di coordinate. Una funzione può avere effetti collaterali come la registrazione o l'analisi, ma questi sono invisibili all'input e all'output.

La funzione può essere testata

Le funzionalità devono essere progettate in modo da poter essere testate. Nell'esempio di codice precedente ho definito la funzione addCustomer , ma non ho definito alcun tipo restituito, quindi la sua testabilità è discutibile. Ovviamente può essere testato utilizzando mock o spie a seconda di come è l'implementazione interna, ciò può essere ottenuto semplicemente fornendo il tipo di ritorno:
fun addCustomer(customer: Customer): Customer
Con questa firma di funzione, possiamo restituire l'entità client aggiunta al componente chiamato. Possiamo anche verificare se la funzione fa quello che dovrebbe fare con questo oggetto client (ovvero, assegnargli un identificatore univoco).
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION