A prova di futuro me stesso quando imparo a programmare [chiuso]


10

Voglio imparare a programmare in modo "a prova di futuro", se lo desideri. Mentre Windows domina il mercato del sistema operativo desktop (per ora), ovviamente c'è molto valore nell'apprendimento delle sue lingue / framework / API e così via - questo potrebbe essere soggetto a cambiamenti quando emergono nuovi dispositivi o Windows si spara ai piedi (oltre anteprime amichevoli di Windows 8 non sembrano troppo allettanti ...).

Avrei ragione nel pensare che avere una solida conoscenza del C / C ++ per la logica back-end / programmazione di basso livello e simili, combinata con un linguaggio estremamente portatile come Java per la 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.


11
Non esiste nulla del genere
Giobbe,

Costruisci una tana e riempila di libri.
Edward Strange,

4
Costruisci una tana e riempila di cibo in scatola. Il programmatore più a prova di futuro è il programmatore che è vivo dopo l'apocalisse.
Tom Anderson,

1
Non impara i linguaggi di programmazione o la programmazione, ma soprattutto impara la programmazione e questo richiede molti anni , quasi dieci, e dovresti continuare ad imparare tutta la tua vita
Basile Starynkevitch

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 su una buona idea del programma, andare su OOP e AOP è una buona scelta IMO. Ma non solo capire il meccanismo, lavorare veramente sulla filosofia che sta dietro al meccanismo.

Non trascurare l'informatica generale, come le strutture dati e gli algoritmi, perché sono conoscenze incrociate che sono sempre utili.

Scegli anche le buone pratiche. Hai spesso dozzine di modi per fare qualcosa, ma la maggior parte di loro è una schifezza: incline ai bug, difficile da mantenere, difficile da capire in seguito o da un altro programmatore, ecc. . . Di solito, il codice è più difficile da leggere che da scrivere. Quindi impara come dedicare un po 'più di sforzo alla scrittura per rendere la lettura più semplice (perché leggerai il codice più di quanto tu scriva).

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

Quindi, avrai bisogno di un background tecnologico generale. Sto parlando di una conoscenza molto ampia, come come funziona un processore (la cache cache o la previsione del ramo sono un buon inizio), i sistemi UNIX, i protocolli di rete come IP, TCP ed Ethernet, ecc. . .

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

Avrai bisogno di una forte conoscenza di tecnologie specifiche per poter trovare un lavoro, ma questi sono obsoleti molto rapidamente (pensa ad esempio a COBOL o alla programmazione web al momento della guerra di IE / Netscape). Quindi non fare affidamento su di loro per essere a prova di futuro. Saranno fondamentali per essere assunti, ma sicuramente non ciò che rende un grande programmatore e ciò che renderà le tue abilità durature nel tempo.

EDIT: Se hai appena iniziato, dovresti fare qualcosa in modo definitivo. Qualunque cosa, davvero. Un gioco come Tetris o Snake è un buon inizio e divertente. Se non riesci a fare le cose, passerai molto tempo a imparare e davvero non otterrai l'esperienza necessaria per comprendere appieno ciò che impari.

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

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


Bene ... Ottima * risposta e qualcosa che capisco - Capisco la necessità di comprendere l'argomento della "programmazione" nel suo insieme, non tutti gli argomenti che hai citato. Non sono troppo preoccupato di trovare un lavoro sul campo poiché ho un ruolo ben pagato nella gestione di un sito di e-commerce di cui sono decisamente soddisfatto per il prevedibile. Il mio interesse per la programmazione lo classificherei come un hobby serio, anche se mi piacerebbe usarlo per migliorare sia il mio che il flusso di lavoro sul lavoro.
Anonimo il

Aggiunta una modifica per rendere le cose più chiare come punto di vista per principianti.
deadalnix,

4

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

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

Una volta che inizi a lavorare, la cosa migliore da fare per evitare di essere obsoleti è tenere il passo con le tendenze attuali. Non aver paura di lasciare un lavoro per un altro se non usano la tecnologia attuale o hanno un processo terribile ecc. La cosa peggiore che puoi fare per la tua carriera è prendere un lavoro che ti fa lavorare con la vecchia tecnologia o con processi deboli.


Apprezzo che una buona conoscenza dei concetti di programmazione sia essenziale per essere bravi "in questo gioco", ma avere una conoscenza della sintassi del linguaggio reale / della libreria standard e di ciò che non si rivela ancora essenziale per l'utilizzo di tutte le funzionalità del linguaggio (ove appropriato). Sfortunatamente non sono ancora a scuola, sto lavorando, anche se come penso di aver detto in un commento precedente, sono abbastanza ben pagato, quindi non sono troppo preoccupato per quell'aspetto. Grazie per la risposta. =)
Anonimo il

4

La risposta di @deadalnix è buona. Aggiungerei ad esso 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ò semplicemente come: il livello superiore è troppo vicino alla soluzione specifica per gran parte di esso da applicare al problema successivo, mentre il livello inferiore è troppo vicino al piattaforma specifica per gran parte di essa da applicare al problema successivo. Il livello intermedio è dove si trovano le informazioni riutilizzabili: algoritmi, modelli, tassonomie, tattiche, strategie, tecniche, organizzazioni, protocolli, ecc. Che sono generalmente utili per risolvere problemi simili indipendentemente dal dominio (livello superiore) o dalla piattaforma (livello inferiore ). Nota: questi livelli non hanno nulla a che fare con l'architettura a 3 livelli, qui stiamo parlando di semantica spazio-problema / spazio-soluzione.
  2. non saprai cosa è comune / generale / riutilizzabile fino a quando non ne avrai visto almeno due casi. Quindi, studia come Windows funziona internamente, quindi studia come funziona linux / unix internamente e confronta i due. Le cose comuni sono riutilizzabili. Le diverse cose sono le decisioni di progettazione, che possono anche tradursi in informazioni riutilizzabili.
  3. per ogni data situazione o problema, pensa a come potresti implementare la soluzione, quindi confronta la tua soluzione poltrona con la soluzione reale e prova a capire i possibili motivi alla base delle differenze.

Grandi aggiunte!
deadalnix il

2

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

Quindi, all'inizio non pensare troppo all'essere "a prova di futuro". Tuttavia, man mano che avanzi, cerca di acquisire competenze in lingue molto diverse l'una dall'altra. Fondamentalmente, (come hai detto) dovresti essere utile 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 davvero avanzate, devi anche conoscere Assembly.

Ma non preoccuparti troppo di questo in questo momento. Imparare a programmare richiede anni. Per il momento, scegli una lingua come Java o C # o qualsiasi altra cosa e provaci. :)


Mi piace il 'sceglierne uno' e prenderlo per l'atteggiamento ... Probabilmente lo adotterò. Sì o no per scegliere una lingua di basso livello (C), una di alto livello (Java) e una di scripting (Python) e apprendere tutti e 3 contemporaneamente?
Anonimo il

Stai appena iniziando a programmare? Quindi non imparare più di una lingua alla volta, ti confonderà e basta. Quello che devi imparare all'inizio sono i concetti, non le lingue. Dovresti passare a nuove lingue solo quando richiesto. Ad esempio, solo di recente ho sentito la necessità di entrare nei linguaggi di scripting, e questo perché ho deciso di rendere il mio gioco scriptabile con Python.
Paul,

Non direi solo all'inizio: conosco html / css da anni (anche se in realtà non si qualificano / in qualche modo irrilevanti) e hanno creato siti Web PHP / MySQL per alcuni mesi. Sviluppo web con cui posso "cavarmela", è lo sviluppo del software che sto affrontando. Farò attenzione a quello che stai dicendo però.
Anonimo il

If you want to go into the really advanced stuff you must also know Assembly- Puoi farlo in qualsiasi livello, le sfide sono solo diverse.
sixtyfootersdude,

1

Avrei ragione nel pensare che avere una solida conoscenza del C / C ++ per la logica back-end / programmazione di basso livello e simili, combinata con un linguaggio estremamente portatile come Java per la 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.

No. Niente di tutto ciò aiuterà.

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

Un "linguaggio estremamente portatile come Java" è portatile come C e non aiuta. The Next Big Thing sarà così diverso da queste lingue che la tua super-portatile Java sarà una responsabilità, non un vantaggio.

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.


Stavo confrontando Java con C come entrambi i linguaggi portatili - con Java che era rispettivamente di basso e alto livello, il che è un po 'vero ... Come hai appena detto te stesso, Mac OS = Obj-C, Windows = C #, che è dove non voglio specializzarmi in uno e tagliare le mie opzioni, o entrambi ed essere un 'maestro di nessuno' se catturi la mia deriva. Apprezzo quello che stai dicendo, ma una solida conoscenza delle strutture dati e degli algoritmi senza la conoscenza di un linguaggio di programmazione è inutile quanto la conoscenza di un linguaggio di programmazione senza quest'ultimo.
Anonimo il

@Chris Bridgett: stai sbagliando completamente il punto. Esistono fondamenti universali e nessuno dei due è un linguaggio di programmazione. Innanzitutto, impara i fondamenti. Quindi, una lingua (o un sistema operativo) è semplicemente brina sulla torta. I fondamenti sono la torta e sono a prova di futuro.
S.Lott,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.