Devo continuare ad investire in strutture dati e algoritmi? [chiuso]

27

In questi giorni, sto investendo molto in strutture dati e algoritmi e sto cercando di risolvere alcuni enigmi di programmazione.
Sto provando a codificare e risolvere con Java e Clojure.

Sto sprecando il mio tempo? dovrei investire di più in tecnologie e framework che conosco già per acquisire una conoscenza più approfondita (in e out) e poter codificare con loro più rapidamente?

Studiando strutture dati e algoritmi, diventerò un programmatore migliore o quei soggetti sono importanti solo durante gli anni dell'università?

    
posta Chiron 23.02.2011 - 01:42
fonte

7 risposte

24

È del tutto possibile trascorrere la maggior parte / tutta la tua carriera facendo un lavoro significativo e utile, con una conoscenza minima di algoritmi e strutture dati.

Il livello minimo di conoscenza per algoritmi e strutture dati, per avere successo, richiede di:

  • sii consapevole della maggior parte di essi (inclusa la lettura di quelli nuovi ogni tanto che escono)
  • sapere dove trovare implementazioni valide, testate e funzionanti
  • essere in grado di confrontare gli algoritmi e la loro utilità
  • essere in grado di copiare correttamente uno da un esempio open source al tuo ambiente specifico, con un piccolo pizzico di regolazione

C'è no * massimo * . Se lo desideri, puoi portare il tuo studio al livello di dottorato e oltre. La sua utilità è direttamente correlata al tipo di lavoro che ti interessa avere e al tipo di lavoro che ritieni più interessante e gratificante.

Detto questo, come una linea guida approssimativa (ma non assoluta), più la lingua, il framework e l'applicazione a cui si sta lavorando sarà più bassa, più intensiva in termini di risorse e meno automatizzata, maggiore sarà il livello di abilità richiesto quando si tratta di algoritmi e strutture di dati. Ad esempio, l'implementazione di l'algoritmo di Ukkonen in assembly probabilmente, ma non necessariamente, significa che vorresti un livello di master comprensione dell'algoritmo e delle strutture dati coinvolte.

Nella tua situazione specifica, passando da uno sfondo di sviluppo Java al lavoro sugli iO, a parità di altre condizioni, ci si aspetta una domanda leggermente più alta sulla tua comprensione generale di algoritmi e strutture dati. Dovrai essere in grado di funzionare in modo efficiente su un dispositivo con meno risorse disponibili. Inoltre, aspettati di aggiungere un paio di nuove categorie al tuo arsenale. In particolare, vorrai saperne di più sulla gestione della memoria.

    
risposta data 23.02.2011 - 02:51
fonte
14

Nah. Se sei appena agli inizi, prova a entrare in cose di grandi dimensioni come la programmazione dell'interfaccia utente e questo ti blocca. Alla fine devi andare lì, e imparare strutture più grandi ... come usare le strutture dati e gli algoritmi che ALTRE persone hanno scritto. Quando stai appena iniziando, è comunque opportuno attenersi a problemi di ambito limitato.

Algoritmi e strutture dati sono fondamentalmente il fondamento di tutto anche se probabilmente non ne scriverete mai uno dei vostri una volta che siete passati alla fase principianti. Conoscerli, o almeno averli conosciuti, ti renderanno uno sviluppatore migliore alla fine. Saprai quando e perché usarli perché saprai come funzionano. Inoltre, rendendo i tuoi algoritmi e le strutture dati generiche in modo che possano lavorare con qualsiasi tipo o tipo con l'interfaccia X, è davvero qualcosa che utilizzerai per il resto della tua carriera.

Vedo troppe persone che saltano su cose come Qt che finiscono per fare domande che mostrano zero conoscenze di C ++ (per esempio). Stanno cercando di saltare troppi passi e alla fine ci vogliono più tempo per imparare. Direi che sei sulla strada giusta.

    
risposta data 23.02.2011 - 02:03
fonte
9

Non stai sprecando il tuo tempo.

Se, nel corso del tuo lavoro, hai bisogno di utilizzare uno strumento o un framework che non hai mai usato in precedenza, lo imparerai e usalo.

Tuttavia, se hai bisogno di utilizzare una struttura dati o un algoritmo che non hai mai usato in precedenza, è probabile che non saprai nemmeno che esiste, e risolvi il problema usando una tecnica orribilmente subottimale che richiede un mucchio di più sforzo e scale terribilmente.

Quello che sto cercando di dire è, questo è il tipo di cose che non solo imparerai facendo, devi impararlo con apprendimento , sia in una situazione accademica, o attraverso l'investimento personale di sforzi, come stai facendo ora.

    
risposta data 23.02.2011 - 02:49
fonte
6

In pratica, sii consapevole di quali sono le strutture dati disponibili, quali sono le loro caratteristiche di complessità, dove ottenere una buona implementazione di esse e dove mantieni la copia di Introduzione agli algoritmi per cercare i dettagli più tardi.

    
risposta data 23.02.2011 - 02:18
fonte
1

Se è questo che ti rende felice, allora dovresti assolutamente tenerlo. Se sei preoccupato di non applicare una teoria sufficiente, considera un progetto di teoria-pesante. Crea un piccolo linguaggio di programmazione, come Potion , da zero. Un'implementazione completa utilizzerà tabelle hash, grafici, alberi e una vasta gamma di algoritmi. Se ti sembra interessante, puoi approfondire l'ottimizzazione, la generazione del codice nativo o l'estensibilità dell'utente.

Diventerai un programmatore migliore quando rimarrai interessato e concentrato, non quando lavori a progetti che sembrano pratici ma un po 'noiosi.

Giù nella tana del coniglio, Dorothy!

    
risposta data 23.02.2011 - 07:32
fonte
1

Ho passato molto tempo a hackerare in C / C ++ con OpenGL. Conosco abbastanza bene le lingue e le API ... e sono diventato uno sviluppatore e programmatore ragionevole a causa di questa esperienza. Detto questo, la conoscenza algoritmica necessaria per risolvere i vari problemi incontrati, è stata appena in grado di cogliere.

Parlando dall'esperienza personale, concentrarsi sulla creazione di applicazioni sarà uno spreco di tempo se non si conosce la teoria dietro i domini del problema che riguardano ciò che si sta cercando di costruire.

Per molti tipi diversi di software, questi domini derivano dai fondamenti appresi dallo studio degli algoritmi, oltre alla loro specifica teoria basata sulla nicchia (ad esempio, algebra lineare in computer grafica, teoria dei numeri / informazioni in crittografia, ecc. .).

Non devi necessariamente diventare un mago computazionale dietro a tutto, ma fare ciò che stavi facendo al momento di questo post è un percorso molto, molto necessario per scendere almeno una volta nel tuo percorso di programmazione - indipendentemente se sono autodidatti o meno.

    
risposta data 19.04.2014 - 00:06
fonte
0

Suppongo che se non li conosci bene non troverai i motivi per usarli. Mi sembra di trovare usi per loro tutto il tempo. Ma devo ammettere che con i miglioramenti apportati ai farmaci generici nell'ultima mezza dozzina di anni, la necessità di eseguire il rollover avviene sempre meno frequentemente. Ciò non toglie ancora i vantaggi di sapere come e quando usarli e possono semplificare notevolmente il codice altrimenti complicato.

    
risposta data 23.02.2011 - 04:03
fonte

Leggi altre domande sui tag