Qualsiasi linguaggio di programmazione può essere padroneggiato facilmente se i fondamenti della programmazione sono forti. Un fatto o un mito? [chiuso]

33

È vero che una persona con basi abbastanza buone nella programmazione può facilmente apprendere qualsiasi linguaggio di programmazione?

Bene, quando dico linguaggi di programmazione, mi riferisco ai linguaggi agili e dinamici come PHP, Perl, Ruby, ecc. ma non i precedenti linguaggi di programmazione del passato remoto.

Ho lavorato solo su java, groovy e flex in una certa misura. Quindi considerando il fatto che sono un programmatore amatoriale ma uno studente veloce, su una base approssimativa, quanto tempo ci vorrà per avere un punto d'appoggio su uno di questi linguaggi?

    
posta Vamsi Emani 15.04.2011 - 08:00
fonte

12 risposte

46

Sì, con riserve.

Quattro settimane fa, direi che avevo abilità di livello professionale in C e C ++ e abilità a livello amatoriale in Java. Il mio capo mi ha chiesto di scrivere un software in JavaScript, con cui non avevo esperienza, e sono andato via.

Nelle due settimane successive ho letto molti snippet di codice di esempio, ho trovato tutte le librerie interessanti e ho scritto il mio programma. È fatto e funziona. Poi la scorsa settimana ho comprato un libro JavaScript e l'ho letto, e ragazzo, non sapevo cosa stavo facendo. Ora capisco perché i miei oggetti si comportino in modo così strano.

Quindi ora dico, conosco un piccolo JS. Posso leggerlo e lavorarci, ma sono sicuro che quello che sto scrivendo è inefficiente, difficile da leggere e non segue le migliori pratiche.

In generale, uno studente veloce può richiedere una settimana e iniziare a produrre prodotti di bassa qualità in una nuova lingua. Se conosci Java, puoi rapidamente prendere C, C ++, PHP, Python, JavaScript, ma abbastanza bene da modificare il codice o scrivere funzioni ben definite. (Perl potrebbe essere più difficile perché le regex sono complesse.) Per progettare correttamente un sistema in una nuova lingua, vorrai probabilmente un anno di sviluppo professionale sotto mentori esperti.

    
risposta data 15.04.2011 - 08:15
fonte
28

Fondamentalmente la risposta è sì ... e no ... dipende da cosa intendi per fondamenti e padronanza facile .

FACT

  • Conoscere i fondamenti della programmazione aiuterà indipendentemente dalla lingua. Con i fondamentali qui intendo cose che non sono specifiche per un dato paradigma. Cose come algoritmica, livelli di astrazione, isolamento ecc.

  • Conoscere bene i fondamenti di un dato paradigma (OOP, functionnal, ecc.) renderà le lingue facili da imparare a supportare lo stesso paradigma. Si potrebbe dire che conoscere bene una lingua ti consentirà di acquisire rapidamente le lingue della stessa famiglia.

  • Con tutte le lingue apprese nella stessa famiglia il prossimo sarà molto più semplice, non sarei sorpreso se questa curva di apprendimento fosse esponenzialmente più veloce come sai di più.

MITO

  • Passando a un nuovo paradigma diverso, conoscendo bene, un linguaggio del primo paradigma non sarà così utile come l'apprendimento di una lingua nella stessa famiglia. In effetti, a seconda della differenza tra di loro, potresti benissimo aver prima disimparare alcune cose prima di poter andare avanti e ingannare davvero il nuovo paradigma.

--- modificato l'ultima sezione in base ai commenti ---

Fact ...

  • Conoscere un primo paradigma può aiutarti ad imparare il prossimo ...

ma

Mito

  • Non essere arrogante, può anche rallentarti o non essere di nessun aiuto per il terzo paradigma.
risposta data 15.04.2011 - 08:53
fonte
14

per qualsiasi lingua simile , sì

per le lingue con paradigmi radicalmente diversi, non tanto

esempio: conosci C ++, vuoi imparare Java, pezzo di torta; conosci VB.NET, vuoi imparare Prolog ... l'intera torta, forse tre o quattro torte

    
risposta data 15.04.2011 - 08:22
fonte
4

Credo che la risposta breve sia: "un po 'vero ma difficile da verificare". È molto difficile imparare API, usi, idiomi e paradigmi strettamente associati (OO, funzionali, ecc.) Rispetto alla sintassi effettiva di una lingua. Penso che il linguaggio stesso possa essere facilmente conquistato se hai una conoscenza ed esperienza approfondita sui fondamenti della programmazione e qualche conoscenza del compilatore, ma è difficile da padroneggiare a causa delle cose ausiliarie.

Un chiaro esempio andrebbe da una lingua all'altra; C a Java. La sintassi del codice ricorda da vicino i programmi in stile C, ma è anche necessario conoscere le API di java (generici, garbage collection, ecc.) E molto probabilmente, nel nostro attuale "panorama IT", alcuni framework di terze parti (Spring, jUnit , Hibernate e così via) per fare qualcosa di utile per le imprese. Quindi, se hai già fatto C prima, la sintassi della lingua non sarebbe il problema, è il resto.

Questo viene da me che conosce Java, C #, Javascript, HTML, CSS, Delphi, ecc. Potrei non sapere ogni angolo delle strutture o librerie che uso, ma so come muoversi e posso imparare rapidamente a causa della mia esperienza con l'utilizzo di quelli precedenti. Per uno "studente veloce" è davvero tutto un pensiero laterale.

    
risposta data 15.04.2011 - 08:23
fonte
3

I fondamenti dell'informatica che dovresti conoscere includono non solo le basi matematiche (teoria degli insiemi, logica, teoria dei grafi, algebra, teoria dell'informazione, teoria dell'informazione algoritmica, ecc.) ma anche un certo numero di linguaggi di programmazione, almeno uno per ogni gruppo - cioè, un imperativo (possibilmente con OOP, ma quel bit non è obbligatorio), uno desideroso funzionale, uno pigro funzionale, uno logico, uno concatenativo o basato sullo stack.

Con questa base sarai in grado di apprendere facilmente qualsiasi nuova lingua in pochissimo tempo. Se mancano alcuni bit potresti finire per affrontare una strong resistenza.

E il miglior modo di apprendere la lingua al di fuori è implementare un compilatore di giocattoli o un interprete per un sottoinsieme significativo di esso (ovviamente senza una libreria standard - questa è la parte più complicata e più noiosa di qualsiasi lingua).

    
risposta data 15.04.2011 - 10:16
fonte
2

Credo che il consenso sia che avere buoni fondamentali aiuterà in una certa misura, e non sono d'accordo. Tuttavia, un punto che manca alle altre risposte è il problema di riprendere gli idiomi della lingua, e penso che per padroneggiare un linguaggio devi scriverlo in modo idiomatico.

Ad esempio, puoi scrivere risme di C # completamente corretto senza mai usare l'istruzione using per disporre automaticamente degli oggetti, ma in C # bene scritto bene vedrai using {...} un grande affare. Non conosco nessun linguaggio.Net che abbia questo costrutto (anche se ne conosco pochissimi altri e il mio Java è piuttosto arrugginito quindi potrei sbagliarmi), quindi anche un esperto proveniente da un'altra lingua che non ha questo funzione dovrà imparare questo idioma da zero come se fosse.

    
risposta data 15.04.2011 - 10:59
fonte
1

È una vera affermazione per alcune definizioni di "abbastanza buono" e "facilmente".

Migliore è la comprensione dei fondamenti, più facile è passare da una lingua all'altra. Se sei un programmatore Java esperto che ha una solida conoscenza dei linguaggi orientati agli oggetti, per esempio, le differenze di sintassi di base tra Java e C # dovrebbero essere relativamente facili da padroneggiare in una settimana o due. Ci vorrà più tempo per capire come le funzionalità di tutte le librerie associate si mappano da una all'altra, ma probabilmente avrai un handle decente sulle librerie di base in un mese o due. Quindi, si tratta di capire quei casi in cui l'approccio standard a un problema nel linguaggio A non si traduce direttamente nell'approccio standard nella lingua B (vale a dire che si desidera utilizzare LINQ in C # piuttosto che JPA in Java) e mettersi comodi abbastanza nella nuova lingua in cui ci stai pensando piuttosto che pensare nella vecchia lingua e "tradurre". Ciò richiederà probabilmente da tre a sei mesi a seconda di quanto bene utilizzi le mappe in genere. Al sesto mese, il programmatore Java esperto sarebbe probabilmente uno sviluppatore C # ragionevolmente efficiente e competente. Ma come con qualsiasi cosa, puoi passare anni a imparare tutti i dettagli intricati, padroneggiare varie librerie e componenti aggiuntivi che non fanno parte del linguaggio ma fanno parte dell'ecosistema circostante e in generale migliorano te stesso come sviluppatore in quella lingua.

    
risposta data 15.04.2011 - 08:22
fonte
1

Direi che dipende completamente dall'entusiasmo di una persona per imparare la nuova lingua. Quando i fondamentali sono forti e se riesce a capire come la nuova lingua interpreti qualcosa, è abbastanza facile imparare qualsiasi lingua.

Il miglior esempio è me stesso. Ho lavorato con parecchie lingue anche se ho svolto la maggior parte del mio lavoro in C # ma ho iniziato la mia carriera da C e ho continuato ad imparare C ++, Java, VB, PHP, linguaggi di scripting, perl e così via. Ovunque nel corso di questo trimestre non ho mai sentito di non poter imparare questa lingua.

    
risposta data 15.04.2011 - 08:55
fonte
1

Non ho mai trovato difficoltà a imparare un nuovo linguaggio di programmazione, al contrario, è stato molto divertente la maggior parte del tempo. Tuttavia, ci sono lingue che ho guardato ma non ho mai capito, perché non potevo cogliere l'idea che stava dietro a loro, se ce n'era. Un esempio è COBOL, non ho mai capito cosa dovesse andare in DIVISIONE e SEZIONE e perché. Altri esempi sono PHP e Groovy. Con PHP ho cercato di capire perché ne avresti bisogno in primo luogo, dato che c'è perl. Forse qualcuno può spiegare. Con Groovy non capisco nemmeno un po 'dei concetti che ci stanno dietro.

    
risposta data 15.04.2011 - 10:41
fonte
1

Dipende tutto.

So che spesso è la risposta ...

Ma cosa significano i fondamenti ?? Molte persone che hanno i fondamenti per un paradigma (come OO) non li hanno per altri paradigmi (come quelli funzionali).

Molte persone provenienti da OO e conoscono tutti gli schemi di progettazione, potrebbero non avere alcun indizio di schemi di progettazione funzionali o roba come la comprensione di elenchi, curricula, ricorsione in coda, chiusure ...

Quindi SÌ: se i fondamenti significano i fondamenti di tutti i paradigmi.

In questo caso il problema è che javascript usa molti paradigmi, come procedurale, OO e funzionale un po 'e ha uno strano scope proveniente da java, c ++, ...

Quindi i fondamenti non sono d'aiuto in questo caso, ma raccogliere più elementi fondamentali qui e continuare a convertirli in un'altra lingua può essere più semplice e facile, più modelli si ottengono nella tua casella degli strumenti.

    
risposta data 15.04.2011 - 15:12
fonte
0

Non dimenticare che l'arte della programmazione per computer è l'arte di ESATTAMENTE quello che intendi. Quindi qualsiasi mezzo per dire al computer cosa fare, da Java a Access in Excel a Visual Fortran, è un linguaggio di programmazione.

E alcune lingue sono semplicemente pessime. IMHO Excel e Basic sono lingue scadenti; Java e C ++ sono buone lingue. Lo scripting di FileMaker è un linguaggio terribile. L'HTML può essere eccellente se non sei sciatto.

Puoi impararlo? Se è buono, sì. Se è brutto, dipende dalla tua soglia di disgusto. Le cose che ti fanno venire voglia di vomitare sono difficili da imparare.

Non impegnatevi ad usare la lingua X su un progetto a meno che non abbiate già visto e giocato con la lingua X.

    
risposta data 15.04.2011 - 08:24
fonte
0

La risposta è "Questo è un fatto, non un mito!"

Sono proprio come te, ho anche lavorato in varie tecnologie. java, .net e ha recentemente lavorato con iPhone, Android e Blackberry.

La rete è piena di risorse, basta leggere le informazioni per capire che, implementarle e andare oltre.

Infatti "La tecnologia è fatta per gli sviluppatori, non gli sviluppatori sono fatti per le tecnologie, le tecnologie cambiano ma gli sviluppatori no".

:)

    
risposta data 15.04.2011 - 15:18
fonte

Leggi altre domande sui tag