Quanto è importante studiare algoritmi e teoria significa diventare un grande programmatore? [duplicare]

12

Sono uno studente di CS. Voglio diventare un grande programmatore, cosa devo fare per diventare un grande programmatore? Altri poi scrivere un sacco di codice, ho sentito che studiare algoritmi e teoria (logica!) È d'aiuto. Cosa consigli per diventare il migliore? Cosa devo leggere? Che cosa ho bisogno di studiare?

    
posta Snow_Mac 01.03.2011 - 01:47
fonte

7 risposte

13

La programmazione è tanto vasta e diversificata quanto i programmi. Potresti avere una carriera molto fruttuosa senza dovermi mai preoccupare della complessità algoritmica. Ho sviluppato applicazioni di tipo di database che aiutano a salvare vite ogni giorno ma non ho mai dovuto calcolare la notazione BigO di tutto ciò che ho prodotto.

Detto questo, l'algoritmo è una parte importante del dominio e può essere una buona risorsa se la impari. L'apprendimento aprirà la tua mente a determinati problemi che potresti incontrare, a come misurarlo e ti insegnerà alcuni schemi comuni che puoi utilizzare per risolverli.

Quindi sì, lo studio dell'algoritmo renderà un programmatore migliore di cui sono certo.

Penso che una domanda più importante che dovresti porci a questo punto è che tipo di problemi vuoi risolvere come carriera. Sapere questo ti aiuterà a trovare gli strumenti giusti per darti un vantaggio. Algorithmic è un importante strumento teorico, ma lo è anche per ergonomia cognitiva , motivi architettonici , teoria delle informazioni . Ci sono anche molte conoscenze di base, come l'apprendimento dei diversi modelli nel processo di sviluppo del software che sono spesso disapprovati come noiosi e disinteressato mentre apprende il mestiere, gioca ancora un ruolo cruciale nella creazione di software nel settore.

Questo non era affatto un elenco completo, ma tutti sono, secondo la mia esperienza, ugualmente preziosi nel farti diventare un grande programmatore. Tutto dipende dai problemi che desideri risolvere con la programmazione e l'approccio che desideri utilizzare per risolverli.

--- MODIFICA --- Come Earlz ha menzionato nei commenti dopo aver appreso le abilità rimangono con te fino in fondo. Quindi, anche se non ho mai fatto un'analisi approfondita completa di un sistema, la conoscenza rimane disponibile, immagino che ti dia un senso supplementare con cui ottenere un'idea di un sistema. Una volta mi sono imbattuto in un semplice sistema di registrazione la cui implementazione era in ordine fattoriale. Penso che se il programmatore avesse imparato a conoscere la complessità algoritmica che avrebbe notato e che avrebbe codificato al di fuori di esso, ho ottenuto la vecchia retorica "è solo una registrazione, non influenza il runtime". Ovviamente non era quello che doveva dire al cliente che dovevano aspettare circa 6,4 miliardi di anni prima che la loro importazione di dati potesse essere completata.

Questo sarebbe vero per quasi tutto questo corpo fondamentale sulla conoscenza. Anche se non lo usi attivamente, le conoscenze acquisite permangono e influenzano le tue attività quotidiane. L'apprendimento di una lingua, di una metodologia o di un sistema specifici è buono per il breve termine, ma è condannato dall'obsolescenza prima ancora di aprire il libro.

    
risposta data 01.03.2011 - 02:34
fonte
7

Per diventare un vero programmatore, devi assolutamente studiare gli algoritmi almeno in una certa misura. C'è molto che non è cruciale per la programmazione, ma senza almeno una ragionevole quantità di conoscenza, sei praticamente affondato.

Ci sono un certo numero di classici nel campo, ovviamente:

  1. L'arte della programmazione informatica , di Donald Knuth
  2. Introduzione agli algoritmi , di Cormen, Leiserson, Rivest e Stein.

Personalmente, preferisco Knuth, ma entrambi sono del tutto adeguati, e l'altro copre di più i nuovi algoritmi (anche se la nuova edizione di Knuth è indubbiamente migliore anche sotto questo aspetto - non ho aggiornato le mie copie da quando le ho comprate da qualche parte circa 30 anni fa.

    
risposta data 01.03.2011 - 02:01
fonte
5

Assolutamente essenziale. Centrale. Niente importa di più.

Alcune persone sostengono di non utilizzare mai la spazzatura che hanno appreso in classe Algorithms.

Tuttavia, stranamente, sembrano sapere quando evitare loop annidati e utilizzare i puntatori.

Quindi, possono affermare di non averne mai fatto uso. Ma influenza chiaramente la loro codifica.

    
risposta data 01.03.2011 - 02:16
fonte
4

Studio delle strutture dati. Conoscere le strutture dati giuste è di grande aiuto per sapere come organizzare un programma e gli algoritmi applicabili tendono a seguirne.

Ad esempio, impara a capire dalle specifiche (di una singola funzione o di un intero programma) se puoi tenere i dati in un array o se hai bisogno di una tabella hash, di un albero, ecc.

Inoltre, conosci le tue librerie; i moderni linguaggi di programmazione tendono ad organizzare le loro librerie attorno a strutture di dati come array / vettori, insiemi, mappe, ecc. Potresti non dover mai implementare un albero rosso-nero da solo, ma sapere quando ne hai bisogno e quale parte della libreria standard implementare uno (o una struttura simile in termini di prestazioni).

    
risposta data 01.03.2011 - 01:57
fonte
2

Dipende da cosa intendi per "ottimo programmatore". Dividerei (arbitrariamente) la grandezza in tre parti uguali:

  1. Creativa: di fronte a un nuovo, difficile problema, puoi determinare rapidamente una soluzione efficiente.
  2. Responsabile: produci codice lucido, chiaro, gestibile e mai e poi mai distruggere la build
  3. Enciclopedico: dato un problema oscuro che si interfaccia con il mondo esterno di librerie, framework, sistemi operativi, ecc., sai immediatamente come affrontarlo.

Idealmente, vorremmo tutti essere di tutti i tipi, ma non è generalmente possibile. Il posto in cui algoritmi e teoria saranno davvero d'aiuto è il primo tipo. Come ricercatore di informatica, lo uso sempre, l'esperienza di tipo 2 meno spesso di quanto mi piacerebbe, e raramente scrivo il tipo 3.

Come riferimento: il manuale degli algoritmi CLR è un classico e una buona lettura. Ci sono probabilmente alcuni usi di classe online che si presentano bene --- prova MIT OpenCourseWare. La cosa più importante, IMHO, è ottenere una strong intuizione per la complessità asintotica. Se lo fai seguendo il percorso tracciato in un testo come CLR, finirai anche con una alfabetizzazione di base delle strutture dati e degli algoritmi che ti saranno utili.

    
risposta data 01.03.2011 - 02:03
fonte
2

Come viene misurato un grande programmatore? Come vuoi essere misurato?

Le risposte che fornisci per queste domande potrebbero aiutarti a influenzarti oggi, ma continueranno a ripetersi durante tutta la tua carriera.

Avere competenze tecniche sarà sicuramente fondamentale per raggiungere il successo. Tuttavia, al fine di distinguerti, ci sono opzioni. C'è spesso più di un percorso per quasi tutte le destinazioni. Forse diventare un grande programmatore può essere ottenuto con una capacità superiore di sezionare e digerire un dominio e ora può essere d'aiuto uno studio incrociato di un particolare dominio. Forse può essere raggiunto in modo meno specifico, attraverso un'abilità indispensabile per identificare l'intento dell'utente attraverso una comprensione della psicologia e della sociologia. Forse, invece, arriva a sapere di più sul business: essere efficace nel marketing in modo che tu sappia ciò che le persone vogliono prima ancora che siano consapevoli che può esistere, e poi convinturandole non solo vogliono, ma dipendono da esso. Forse è qualcos'altro.

Il consiglio che vorrei dare è che mentre la programmazione potrebbe essere un mestiere che ti affini, non omettere di proposito uno studio più approfondito di altri campi in cui hai un talento o un interesse naturale.

    
risposta data 01.03.2011 - 04:22
fonte
0

Questa è una domanda a cui è difficile rispondere, in particolare quando otteniamo astrazioni / librerie sempre più potenti ci sarà poco bisogno di imparare queste cose.

Fase I :

Migliaia di dirigenti aziendali possono continuare a programmare su uno strumento chiamato Microsoft eccellere anche senza sapere che in realtà stanno programmando. Possono continuare a definire un flusso di lavoro (euristico), ordinare i dati, gestire i dati, interrogare i dati. Automatizzare i loro compiti e ciò anche senza conoscere una parola di programmazione. Excel capisce quali sono gli algoritmi giusti per loro quando ordinano e cercano.

Come vendi loro l'idea di algoritmi?

Fase II :

Nel passato, ti ricordi che sarebbe stato impossibile implementare qualsiasi applicazione decente senza effettivamente ricordare l'API. Dovevi o ricordarli o continuare a cercarli nel manuale. Ctrl-space in eclissi ha ampiamente eliminato la necessità di una cosa del genere oggi.

Fase III :

Nel prossimo futuro gli IDE e gli strumenti avranno intelligenza per suggerire quale soluzione (algoritmicamente) sarebbe più appropriata per te in base agli input che gli dai. O potrebbero esserci funzioni come sort () et al. Quale allenamento intelligente di quale algoritmo avresti bisogno guardando la complessità del tempo e dello spazio.

Teoria della complessità del letto d'acqua :

Le astrazioni stanno vincendo alla grande, non devi preoccuparti di un livello di complessità che è già gestito dalla biblioteca o dalla lingua. Ogni volta che viene inventata un'astrazione, c'è meno bisogno di dare un'occhiata alla complessità sottostante.

    
risposta data 01.03.2011 - 10:58
fonte

Leggi altre domande sui tag