Io stesso a prova di futuro quando imparo a programmare [chiuso]

10

Voglio imparare a programmare in un modo "a prova di futuro", se vuoi. Mentre Windows domina il mercato del desktop OS (per ora), ovviamente c'è molto valore nell'apprendimento dei suoi linguaggi / framework / API e così via - questo potrebbe essere soggetto a modifiche quando nuovi dispositivi emergeranno o Windows si spara in piedi (oltre le anteprime amichevoli di Windows 8 non sembrano troppo allettanti ...).

Avrei ragione nel pensare che avere una solida conoscenza di C / C ++ per logica back-end / programmazione di basso livello e simili, combinato con un linguaggio estremamente portatile come Java per GUI e così via, sarebbe una buona base per lo sviluppo del software che si rivelerà utile sulla maggior parte dei sistemi? - Sto parlando di PC desktop, tablet, telefoni.

    
posta Anonymous 21.06.2011 - 17:14
fonte

5 risposte

31

Se vuoi essere a prova di futuro, il miglior consiglio che posso darti non è racchiuderti in una tecnologia.

Quindi non imparare le API alla cieca. Scopri come sono concepiti. Quali sono le filosofie dietro la scena? Quali sono i loro vantaggi e difetti? Pensa al software in generale, non a una tecnologia specifica.

Puoi anche lavorare sulla buona idea del programma, andare a OOP e AOP è una buona scelta IMO. Ma non solo capire il meccanismo, lavorare davvero sulla filosofia alla base del meccanismo.

Non trascurare l'informatica generale, come le strutture dati e gli algoritmi, perché sono una conoscenza cross-tecnologia che è sempre utile.

Fai anche delle buone pratiche. Spesso hai dozzine di modi per fare qualcosa, ma la maggior parte di loro sono schifo: bug incline, difficile da mantenere, difficile da capire in seguito o da un altro programmatore, ecc. . . Di solito, il codice è più difficile da leggere rispetto a scrivere. Quindi impara a dedicare un po 'più di impegno alla scrittura per rendere la lettura più semplice (perché leggi più codice di quello che scrivi).

Scopri tecniche efficaci per il debug (uso intelligente di log e debugger) e test (come scrivere codice che può essere facilmente testato su unità e come automatizzare questi test).

Quindi, avrai bisogno di uno sfondo di tecnologia generale. Sto parlando di una conoscenza molto ampia, come il funzionamento di un processore (la cache miss o branch prediction è un buon inizio), sui sistemi UNIX, su protocolli di rete come IP, TCP ed Ethernet, ecc. . .

Alla fine, impara come imparare. Se sai come imparare, allora puoi adattarti.

Avrai bisogno di alcune conoscenze approfondite in tecnologie specifiche per essere in grado di trovare un lavoro, ma quelli sono obsoleti molto velocemente (pensa a COBOL per esempio, o alla programmazione web al momento della guerra IE / Netscape). Quindi non fare affidamento su di loro per essere a prova di futuro. Saranno la chiave per essere assunti, ma in definitiva non è ciò che rende un grande programmatore e ciò che renderà le tue abilità durature nel tempo.

EDIT: Se stai appena iniziando, dovresti fare qualcosa in modo definitivo. Qualsiasi cosa, davvero. Un gioco come Tetris o serpente è un buon inizio e divertente. Se non ottieni risultati, passerai molto tempo a imparare e davvero non acquisirai l'esperienza necessaria per comprendere appieno ciò che impari.

Diamo un esempio con i modelli di design. I modelli di design sono fantastici e dovresti usarli definitivamente. Ma se abusato renderà il tuo codice complicato e difficile da capire. Dovrai affrontare il problema che un modello di progettazione risolve e perdere un po 'di tempo cercando di risolverlo o i suoi effetti collaterali per comprendere appieno il motivo del progetto. I modelli di progettazione devono essere utilizzati come piccoli refactoring nel tempo in cui il codice cresce. E saprai quando è necessario un modello di progettazione quando il vantaggio di esso è maggiore della complessità del codice indotta dal suo utilizzo. Ciò richiede esperienza.

Quindi, in modo definitivo, fai le cose, imparano dai tuoi errori. Non posso insistere di più: OTTENERE COSE !

    
risposta data 21.06.2011 - 17:38
fonte
4

Ciò che separa i bravi programmatori da quelli cattivi è la loro capacità di programmare in QUALSIASI lingua. Come hanno notato altri utenti, conoscere un linguaggio orientato agli oggetti significativo ti darà gli strumenti per creare programmi fantastici e essere richiesto.

Inoltre, se sei ancora a scuola, assicurati di prendere lezioni di scrittura. I migliori ingegneri e programmatori sono anche quelli che comunicano bene le loro idee.

Quando inizi a lavorare, la cosa migliore da fare per evitare di essere obsoleto è tenere il passo con le tendenze attuali. Non aver paura di lasciare un lavoro per un altro se non sta usando la tecnologia attuale o ha un processo terribile, ecc. La cosa peggiore che puoi fare per la tua carriera è prendere un lavoro che ti fa lavorare con vecchie tecnologie o processi deboli.

    
risposta data 21.06.2011 - 17:51
fonte
4

La risposta di @deadalnix è buona. Aggiungerei tre cose:

  1. le informazioni riutilizzabili provengono dal centro, non dagli estremi. Minsky lo presenta in dettaglio nel suo libro Society of Mind quindi lo riassumerò come: lo strato superiore è troppo vicino alla soluzione specifica per applicarlo per il prossimo problema, mentre lo strato inferiore è troppo vicino al piattaforma specifica per la maggior parte di esso per applicare al prossimo problema. Lo strato intermedio è dove si trovano le informazioni riutilizzabili - gli algoritmi, i modelli, le tassonomie, le tattiche, le strategie, le tecniche, le organizzazioni, i protocolli che sono generalmente utili per risolvere problemi simili indipendentemente dal dominio (strato superiore) o dalla piattaforma (livello inferiore ). Nota: questi livelli non hanno nulla a che fare con l'architettura a 3 livelli, stiamo parlando di semantica spazio-problema / soluzione-spazio qui.
  2. non saprai cosa è comune / generale / riutilizzabile finché non ne avrai viste almeno due. Quindi, studia come Windows funziona internamente, quindi studia come linux / unix funziona internamente e confronta i due. Le cose comuni sono riutilizzabili. Le cose diverse sono decisioni di progettazione, che possono anche portare a intuizioni riutilizzabili.
  3. per qualsiasi situazione o problema, pensa a come potresti implementare la soluzione, quindi confronta la tua soluzione poltrona con la soluzione reale e cerca di capire le possibili ragioni dietro le differenze.
risposta data 21.06.2011 - 18:56
fonte
2

Dato che sei all'inizio, direi che imparo una lingua, non importa quale. La difficoltà non è nella stessa lingua (sintassi), ma nella comprensione dei concetti; e questi concetti di programmazione generale si applicano a tutti i linguaggi di programmazione, quindi imparare la tua seconda e terza e quarta (...) lingua sarà molto più facile.

Quindi, all'inizio non pensare troppo all'essere "a prova di futuro". Tuttavia, mentre progredisci, prova a diventare esperto in lingue molto diverse tra loro. In sostanza, (come hai detto) dovresti essere a portata di mano con un linguaggio di basso livello (-ish) come C / C ++, un linguaggio di programmazione di livello superiore come Java e anche un linguaggio di scripting (Python, Ruby, ecc.). Se vuoi approfondire le cose veramente avanzate devi anche conoscere Assembly.

Ma non stressarti troppo su questo adesso. Imparare a programmare richiede anni. Per il momento, scegli un linguaggio come Java o C # o qualsiasi altra cosa e vai a prenderlo. :)

    
risposta data 21.06.2011 - 17:34
fonte
1

Would I be right in thinking that having a solid knowledge of C/C++ for back-end logic/low level programming and the like, combined with an extremely portable language like Java for GUI's and so on, would be a good basis for software development that will prove useful on the most amount of systems?

I'm talking desktop PC's, tablets, phones.

No. Nessuno di questi aiuterà.

Una solida conoscenza delle strutture dati e degli algoritmi, indipendentemente da qualsiasi linguaggio di programmazione specifico, è più preziosa di "programmazione di basso livello e simili".

Un "linguaggio estremamente portatile come Java" è portatile quanto C e non aiuta. Il Next Big Thing sarà così diverso da questi linguaggi che il tuo super-portatile Java sarà una responsabilità, non una risorsa.

Mac OS (desktop, tablet e telefono) è tutto fatto nell'obiettivo C. Potrebbe essere un punto di partenza.

Windows (desktop, tavolo e telefono) è tutto fatto in C #. Potrebbe essere un punto di partenza.

    
risposta data 21.06.2011 - 17:56
fonte

Leggi altre domande sui tag