2010-07-18 7 views
5

Sono nuovo di Java e mi riferisco al libro di Head-First.Un libro Java è sufficiente o dovrei prima imparare gli algoritmi?

Devo imparare Algoritmi per poter realizzare programmi in Java?

Devo imparare Algoritmi prima o solo libri Java come Java efficace, puzzle Java ecc. Saranno sufficienti?

Voglio diventare uno sviluppatore aziendale di successo. Allora quali algoritmi e strutture dati dovrei essere esperto? Quali libri mi consiglieresti?

Per essere uno sviluppatore Java di successo, è necessario conoscere tutti gli algoritmi avanzati come quelli forniti in CLRS?

PS: Ho avuto C e C++ nei miei semestri passati, ho ottenuto buoni voti in loro, ma che è stato un po 'aggressione. Conosco le basi della programmazione. Non sono un principiante. Il fatto è che non ho una solida conoscenza in nessuna lingua, anche io voglio essere uno sviluppatore, non un algoritmista.

+3

Qual è il tuo background di programmazione? Hai una comprensione degli algoritmi e delle strutture dati? – quantumSoup

+0

È necessario avere una comprensione degli algoritmi prima di implementarli, in Java o per qualsiasi linguaggio di programmazione. –

+1

@ Raze2dust - hai bisogno anche di un linguaggio per descrivere gli algoritmi prima che tu possa capirli. L'inglese non è così grande per questo, e la matematica raramente ha senso da solo. E senza un test oggettivo per gli esperimenti sugli algoritmi (funziona davvero), è facile ottenere alcune idee sbagliate profondamente radicate. – Steve314

risposta

10

Se vuoi diventare uno sviluppatore di successo è necessario imparare un sacco di cose. Un linguaggio di programmazione principale (java) e basi di CS (ad esempio algoritmi) sono solo due di questi. Altri sono: capacità di comunicazione, test (direi TDD ma non voglio iniziare una lotta), gestione di database, roba web, OOD e molti altri. Anche un sacco di cose che potresti non usare direttamente ti aiuterà molto allargando il tuo orizzonte (programmazione funzionale, concetti avanzati di CS)

Non c'è un ordine fisso in cui imparare quella roba. Dal momento che l'apprendimento funziona meglio quando sei motivato, scegli ciò che ti interessa di più o ciò che ti sta aiutando di più. Impara un po 'qui, poi impara un po' lì. Tieni gli occhi aperti e pratica molto e starai bene.

Nella tua situazione attuale ti consiglio di prendere un libro di Algorithms e implementare gli algoritmi lì in java. Ti insegna java e algoritmi.

Leggi anche "Codice Clean", "The Pragmatic Programmer" e il solido http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod principi

+1

+1, la migliore risposta qui! –

+0

+1 per "The Pragmatic Programmer" - un must-have :) – bedwyr

2

Il mio consiglio: impara un sottoinsieme di Java, quindi impara alcuni algoritmi di base, quindi scopri dove vuoi andare da lì.

Non è necessario conoscere tutto Java per sperimentare con gli algoritmi di implementazione. Avrai bisogno di essere in grado di avvolgere alcuni metodi (spesso solo uno) in una singola classe (e anche solo perché Java insiste sul fatto che tutto è una classe). Avrai bisogno di costrutti e matrici condizionali e in loop. Per le strutture di dati, probabilmente dovrai comprendere i riferimenti Java, anche se potresti essere in grado di simulare i puntatori utilizzando gli interi come indici di array.

Il punto è che gli algoritmi sono importanti, ma su scala relativamente piccola. Le strutture dati richiedono in genere alcuni algoritmi per farle funzionare. Ma non è necessaria la comprensione di problemi su larga scala come la progettazione orientata agli oggetti per sperimentare con gli algoritmi.

EDIT

Dai commenti, vedo che siete già in "dove andare da lì" stadio.

Non dimenticare gli algoritmi (o la matematica discreta) perché non ti interessa l'analisi, però. Una comprensione ampia (non necessariamente approfondita) è una risorsa utile: sono ideali per i metodi di risoluzione dei problemi.

Ad esempio, sono stato recentemente confuso in un problema di ordine delle dipendenze su come gestire i cicli. Mi ero dimenticato di "componenti fortemente connessi" nei digrammi. Una volta che mi è stato ricordato, il problema è diventato banale - non ha senso cercare di ordinare all'interno di un componente fortemente connesso, ma questi componenti formano un digrafo aciclico. Da lì, la risposta è solo una sorta di topologia.

Conoscere gli ordinamenti topologici rende l'ultimo passaggio banale. Avendo dimenticato componenti fortemente connessi mi è costato un bel po 'di tempo. Capire come funziona l'algoritmo di componenti fortemente collegato a Tarjans ... Wikipedia e pochi minuti con carta e penna sono sufficienti, una volta che sai cosa cercare.

In realtà, dovrei confessare: "Mi è stato ricordato" significa che ho consultato un vecchio articolo del Dr. Dobbs sullo smistamento topologico che utilizzava lo stesso approccio.

0

@Chankey: Secondo me è necessario prendere in mano sia java che algoritmi. Prima apprendi alcune nozioni di base del linguaggio di programmazione Java come le classi, i tipi di dati, le funzioni, ecc. Quindi impara alcuni algoritmi di base per l'ordinamento e la ricerca.E ora applica le tue conoscenze java per implementare questi algoritmi.

Saluti !! Mukul Gupta

+0

Ok, grazie :) –

2

Sono con Steve314 per la maggior parte, ma ho voluto specificare alcune cose.

Impara Java (o qualsiasi altra cosa) per essere pericoloso. Quindi le principali strutture di dati (elenchi, pile, mappe, alberi, ecc.), Che include alcuni algoritmi per attraversarli. Dopo il resto, il resto dei tuoi algoritmi funzionerà. Ecco alcuni obiettivi specifici, se li vuoi, che rispecchiano più o meno l'ordine di Data Structures & Algorithms in Java.

  1. Comprendere Java e OO a livello base. Specificamente ereditarietà e polimorfismo (come li definiscono Java) e come usare i generici.
  2. Avere una conoscenza di base di Big-O (come è definito e perché è possibile abbassare i termini dell'ordine inferiore).
  3. Essere in grado di utilizzare, scrivere e tracciare funzioni ricorsive.
  4. Elenchi a codice singolo e doppio. Dovrebbero implementare Iterable e supportare l'aggiunta e la rimozione di elementi. Usali per implementare uno stack e una coda.

Un paio di cose da sapere circa una volta ti immerge in un libro come Algoritmi:

  • MIT OCW ha videos lectures su dalla classe che Algoritmi è stato scritto per, data da uno dei suoi autori.
  • Lo scopo di un libro come Algorithms non è solo quello di mostrare algoritmi specifici, ma di insegnare come analizzare i loro tempi di esecuzione. Hai bisogno di una piccola quantità di matematica discreta per questo, fondamentalmente somme e relazioni di ricorrenza. Guarda qui per le domande big-O per vedere cosa intendo.

Parlando di video, penso che questo sia un modo migliore per iniziare: Programming Abstractions (Stanford, Julie Zelenski). Sono molto felice che quelli esistano.

(Come accade io sono nel bel mezzo di attuazione di una mappa con un binary search tree.)

+0

Oh sì ... non preoccupatevi di Wikipedia per imparare big-O. Diamine, non preoccuparti di WP per l'apprendimento di queste cose. Questo è il punto e in realtà contiene esempi (pazzi, lo so): http://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/ – johncip

+0

Grazie per dando collegamenti dei siti web John. –

2

vi consiglio di iniziare ad imparare con Head First. functionx.com è anche un buon sito. La maggior parte dei libri Java descrive gli algoritmi come parte del libro, quindi non preoccuparti degli algoritmi. Prima di tutto impara Java.

Permettetemi di darvi un modo semplice per trovare buoni libri. Cerca sempre libri con un punteggio più alto in amazon.com e poi scarica da wowebook.be.

Raccomando "Strutture dati e algoritmi in Java" di Michael T. Goodrich e Roberto Tamassia. "Think Like a Programmer" sono buoni libri relativi all'algoritmo.

Problemi correlati