Quanto è importante capire la codifica dietro le quinte?

1

Prima di tutto, se questo è nel posto sbagliato, mi scuso. Non ero troppo sicuro su quale dei siti Stack Exchange chiedergli.

Sto studiando lo sviluppo del software all'università, in un corso di conversione di un anno. Il mio linguaggio di programmazione principale è Java. Abbiamo appena finito di studiare ricerche e generi. Concentrandomi su quest'ultimo in particolare, ho avuto difficoltà a lavorare attraverso la complessità del codice. Alcuni, come un tipo di inserimento, erano abbastanza ovvi. Altri, come l'unire sort, ho trovato estremamente difficile da capire. Capisco perfettamente come funzionano, semplicemente non vorrei implementare il mio.

Mi è stato detto che la maggior parte dei programmatori non crea i propri tipi / ricerche poiché i metodi incorporati in Java sono più affidabili e generalmente più veloci. Tuttavia, è considerata una buona pratica conoscere questo tipo.

Quando guardo un ordinamento come l'ordinamento di tipo merge o di tipo binario, penso a me stesso che non avrei mai potuto trovare soluzioni del genere. Sono troppo complicati e complicati.

Questo mi porta alla mia domanda. La maggior parte dei programmatori usa tipi come persone che usano semplici formule matematiche, ad es. l'area di un triangolo o cerchio, dove la si applica quasi mesmericamente? Come programmatore faresti uno sforzo reale nel cercare di sviluppare nuovi tipi, o più efficienti? O se avessi saputo che era necessario un tipo, sapresti semplicemente quale è stato meglio attraverso la notazione bigOh e poi basta copiare e incollare la stessa cosa, senza mai veramente pensare alla codifica dietro di esso?

Nota: se questa domanda non è adatta per Q & A (ho guardato le FAQ e penso che sia), ti prego di avvisarmi dove potrei postare. Grazie.

    
posta Andrew Martin 22.02.2013 - 00:54
fonte

4 risposte

8

La gente è ossessionata dall'ordinare gli algorthims per le ragioni sbagliate. Il valore della comprensione del mergesort o di qualsiasi altro tipo non è semplicemente la capacità di scrivere la propria funzione di ordinamento. Piuttosto è quel tipo che fornisce esempi prontamente comprensibili di intere classi di algoritmi. Mergesort e quicksort sono entrambi esempi di un approccio generale chiamato "divide et impera". Probabilmente non avrai mai bisogno di per riscrivere il mergesort, ma se comprendi il mergesort hai una possibilità molto migliore di riconoscere quando un approccio 'divide et impera' può essere usato per risolvere i problemi che stai affrontando. / p>     

risposta data 22.02.2013 - 01:50
fonte
4

Per essere onesti, sono stato uno sviluppatore di software per più di 30 anni e non ho dovuto scrivere una funzione di ordinamento in almeno 20 anni. Sì, è importante capire come funzionano, ma sinceramente, non riesco a ricordare l'ultima volta che ho effettivamente usato un ordinamento in modo esplicito, in genere è implicitamente fatto dalle librerie o dal backend che stai usando.

    
risposta data 22.02.2013 - 01:17
fonte
1

Di solito non devi comprendere tutti gli aspetti dell'attuazione effettiva di una lingua / biblioteca / ambiente specifici. Inoltre, non è un compito comune implementarli manualmente come implementazioni per qualsiasi ambiente.

Tuttavia, apprendere i concetti di diversi algoritmi di ricerca è una parte fondamentale di qualsiasi curriculum di informatica. Da questo studenti apprendono molte tecniche fondamentali per qualsiasi confronto di algoritmi e algoritmi. Si apprendono anche approcci diversi che possono essere utilizzati anche per altri algoritmi.

Considerare questo da un obiettivo pratico: l'ordinamento è un'operazione comune. Conoscere algoritmi di ordinamento aiuta a scegliere la scelta migliore a portata di mano. Anche se i progettisti Java hanno fatto una buona scelta per scopi generali (io sono, non nel profondo di Java, ma penso che abbiano implementazioni diverse e ne scelgano una a seconda dei casi ...) ma se conosci i tuoi dati probabilmente potresti scegliere un algoritmo migliore.

    
risposta data 22.02.2013 - 01:15
fonte
0

Anche se non ho mai dovuto implementare un ordinamento standard al di fuori della scuola, ciò che fa emergono di tanto in tanto sono situazioni in cui ho bisogno di un algoritmo abbastanza diverso da non poter usare uno standard uno. In quelle situazioni, devo capire il miglior algoritmo standard per iniziare e modificarlo in base alle mie esigenze.

Per esempio, sto attualmente scrivendo un calcolatore come un progetto per hobby. Per gestire la precedenza degli operatori, sto utilizzando l'algoritmo Shunting-yard , ma tutte le implementazioni che ho trovato presuppongono che l'intera espressione è disponibile quando si avvia l'algoritmo, mentre è necessario essere in grado di "mettere in pausa" nel mezzo dell'algoritmo mentre l'utente è ancora in fase di punzonatura dei pulsanti. Non un'enorme deviazione dall'implementazione standard, ma abbastanza diversa da dover capire veramente come e perché funziona.

Quindi, non stressarti sugli algoritmi che sono difficili, ma non ignorare neanche le lezioni. Sarà più facile con il tempo.

    
risposta data 22.02.2013 - 02:18
fonte

Leggi altre domande sui tag