Perché sembra esserci molta paura nella scelta della lingua "sbagliata" da imparare? [chiuso]


28

Forse sono solo io, ma come attuale studente CS ho già incontrato molte domande su questo sito e altrove non solo su "Quale lingua dovrei usare per x?" ma anche "Qualcuno usa ancora la lingua Y?" La mia prima lezione CS è stata insegnata in Scheme, che, se non sbaglio, non è ampiamente utilizzata (almeno in confronto a linguaggi come Java, PHP, Python, ecc.). Molti dei miei compagni di classe si sono rifiutati dell'idea di dover imparare una lingua che non avrebbero mai più dovuto usare, ma non capisco bene da dove provenga tanta paura di apprendere lingue meno popolari. No, non posso usare Scheme in qualsiasi lavoro che ottengo, ma certamente non mi pento di aver imparato ad usarlo (anche se in modo molto principiante, non molto approfondito in quel semestre). Prenderò una classe di motori di ricerca questo semestre, che è fatto in Perl e di nuovo vedo compagni di scuola lamentarsi della scelta della lingua. Capisco di avere una lingua preferita e di non apprezzare gli altri, ma perché alcuni riescono a capire come impararla? Sai davvero imparare la lingua "sbagliata"? Imparare qualcosa come Scheme o Haskell non è forse un buon esercizio mentale, se non altro, e utile almeno all'esposizione a diversi modi di risolvere i problemi?


È interessante notare che i miei primi due anni di educazione CS hanno riguardato esclusivamente C # e Java e indovinate cosa ho finito per utilizzare nel mio primo collocamento in cooperativa? Parola di quattro lettere, inizia con "P".
Anon.

6
@Shewbox, hai ragione, hanno torto, otterrai il vantaggio del cross-learning, non lo faranno. Fine della storia.
ocodo,

7
Stanno facendo SEO (ottimizzazione dei motori di ricerca) con i responsabili delle assunzioni.
rwong

1
@rwong: e sfortunatamente alcuni di noi hanno dovuto imparare nel modo più duro per non mettere "Ho usato XXX una volta e non lo toccherò mai più", perché alcuni ricorrenti inviano spam su corrispondenze di parole chiave.

1
@JB: il 99% delle persone fa sembrare gli altri come se si baciassero.
Michael K,

Risposte:


27

Il punto di una laurea in CS non è insegnarti C # e Java, puoi impararli da solo. È per insegnarti la programmazione e il calcolo. La lingua è solo un dettaglio. Nel corso di una carriera nella programmazione utilizzerai molte lingue. Oggi potrebbe essere Java o C #, ma tra 10 o 15 anni potrebbe essere Erlang o qualcosa che non è stato ancora inventato. Imparare stili di programmazione diversi e modi diversi per attaccare un problema è molto più importante dell'apprendimento di una lingua.


Esatto - la mia laurea precede C ++ e tanto meno Java o C #. Sebbene ci fosse stato insegnato principalmente in Pascal, ci venivano dati problemi in una varietà di lingue sin dalle prime fasi e nel nostro secondo anno aveva un corso che equivaleva a "lingua del mese", simula (usata per fare simulazioni) rimane il mio ricordo più caro - sebbene non ci sia alcuna possibilità di scrivere un codice simula, principalmente a causa dell'OOP che mi ha insegnato (anche se al momento non lo sapevo)
Murph

17

Perché la tua prima lingua modellerà il tuo modo di pensare, fino a quando non impari diversamente.

Se sei analfabeta dal punto di vista computazionale (programmatore per la prima volta) e la prima lingua che impari è troppo "di base", potresti non conoscere concetti di ordine superiore come orientamento degli oggetti, invio multiplo, ereditarietà, funzioni di prima classe, meta-programmazione, ecc.

La prima lingua che impari è generalmente legata alla tua prima incursione nel pensiero computazionale. Se qualcuno ti dice, Jimmy, il mondo davanti a te è composto da simboli A, B e C, tutto il tuo pensiero sarà in termini di A, B e C. Fino a quando un giorno, un nerd fantasioso ti deride per non conoscere X , Y e Z concetti. Non avresti mai saputo questo sapendo solo ABC.

Le persone più preoccupate per la prima lingua di qualcuno sono probabilmente programmatori illuminati che hanno combattuto nell'oscurità. Oh, ora so cos'è una funzione di prima classe. Amico, vorrei sapere dell'eredità e dell'iniezione di dipendenza due anni fa!

La tua prima lingua non è importante quanto il tuo atteggiamento nei confronti delle lingue successive. Se riesci a vedere molto più avanti di te per sapere che esiste un mondo oltre BASIC / C / Perl / PHP / ecc., Allora sei molto più avanti del gioco. Questo è il motivo per cui molte persone sono fanatiche dei linguaggi funzionali poiché molte lingue sviluppate attivamente stanno convergendo verso di loro.


1
Tuttavia, dobbiamo tutti iniziare da questi concetti di base. Quando qualcuno impara un nuovo concetto (prendi come esempio i modelli di design) tende ad usarlo ovunque per un po '. Se non avessi trascorso i primi 5 anni che ho programmato nella struttura del programma di apprendimento di base e come pensare come un programmatore, allora quando sarei arrivato a OO, sarei stato così impegnato ad apprendere la parte procedurale che non avrei potuto concentrarmi sul OO part. Detto questo, +1 per "La tua prima lingua non è importante quanto il tuo atteggiamento nei confronti delle lingue e dei concetti successivi" .
Michael K,

Ho pensato di aggiungerlo. Non stavo affatto dicendo che le lingue di base non hanno il loro posto. In effetti, lo fanno (nelle prime fasi di apprendimento). Non ne ho parlato.
Mark Canlas,

Oh Michael, la tua modifica è molto più elegante, hahahaha.
Mark Canlas,

Se i compagni di classe del PO sono preoccupati, lo Schema è la lingua sbagliata da imparare, probabilmente non sono poi così illuminati. :)
David Moles,

Alcuni linguaggi hanno una sintassi complessa mentre in realtà sono semplici (derivati ​​C), altri hanno una sintassi semplice mentre sono in realtà complessi (Groovy). Con ciò intendo - in C / C ++ o Objective-C - le cose sono abbastanza dichiarative e procedurali all'interno di qualsiasi ambito di codice attivo, mentre qualcosa come Groovy ha molte cose che "accadono sotto il cofano" che sono "nascoste" dallo zucchero sintattico. Il mio suggerimento per i neofiti è generalmente quello di seguire le difficili lingue della sintassi che rispecchiano più da vicino come funziona effettivamente un computer, perché questa conoscenza semplifica l'uso di altre lingue.
dcgregorya,

11

Quando ero al college, conoscevo molte persone che hanno deciso di specializzarsi in economia non perché fosse qualcosa di cui erano particolarmente interessati o appassionati, ma perché pensavano che avrebbe fatto loro un buon lavoro.

Mi sono laureato in Studi dell'Asia orientale perché le lezioni che ho preso come effetto collaterale del mio interesse iniziale per la letteratura mi hanno catturato. Sono andato in Germania perché volevo fare un programma di scambio, dove ho trascorso la maggior parte del mio tempo in programmi di Japanology e Sinology. Ho studiato ciò che mi interessava di più. Ho deciso di non usare il college per studiare cose legate al computer, dal momento che durante l'infanzia avevo già hackerato un bel po 'di tempo, ma ho trascorso del tempo a programmare e capire Internet, e forse, forse, in modo improbabile , Ho ottenuto un buon lavoro che è riuscito a combinare tutti quegli interessi.

La differenza è tra il Careerist e qualcuno che impara per il gusto di imparare. Il Careerist è preoccupato che abbiano studiato The Wrong Thing e che se ne pentiranno perché non sarà The Right Thing To Land Me A Job. La persona che impara per motivi di apprendimento si rende conto di avere 4 anni per passare il tempo ad esplorare tutti i tipi di campi con pressioni relativamente gestibili; il carriera pensa che il compito della scuola sia insegnare loro qualcosa. Lo studente capisce le cose quando colpiscono un territorio sconosciuto e ha maggiori possibilità di trovare il lavoro giusto per loro. Il Careerist finisce in un contabile di secondo livello presso una società di terzo livello, paga le bollette e si risente del loro capo.

Sì, questi sono archetipi e tutti devono bilanciare il pragmatismo con le loro passioni, ma questa è la differenza essenziale. Certo, qualcuno con l'estetica del programmatore può anche porre la domanda, ma più nel contesto di "quale sarà l'uso meno dispendioso del mio tempo". Ma la mia ipotesi è che sia l'impulso professionista a porre quella domanda, perché il Careerist ha molta più paura di fare un errore rispetto allo Studente, e lo Studente generalmente fa un programmatore migliore perché lo Studente non teme gli errori. Lo studente, come il programmatore, abbraccia l'insuccesso nella ricerca dell'abilità.


9

Sì, l'apprendimento di linguaggi funzionali come Scheme e Haskell è utile come introduzione alla programmazione funzionale. Per quanto riguarda i tuoi compagni di classe che si lamentano di Perl, mentre Perl non è così popolare come una volta, è sicuramente ancora un linguaggio ampiamente usato negli affari.

Riesco a capire i tuoi compagni di classe che vogliono imparare i linguaggi pratici utilizzati nel mondo reale, ma penso che manchino il punto che una volta che sei un programmatore esperto e sei stato esposto a diversi paradigmi di programmazione, imparare nuovi linguaggi è principalmente solo una questione di conoscenza la nuova sintassi. Pertanto, finché sei esposto ai concetti, puoi "specializzarti" in qualsiasi lingua il tuo datore di lavoro preferisca senza troppe difficoltà.


5

Forse perché le persone sono state influenzate da affermazioni come la classica traina di Edsger Dijkstra, "È praticamente impossibile insegnare una buona programmazione agli studenti che hanno avuto una precedente esposizione a BASIC: come potenziali programmatori sono mentalmente mutilati oltre ogni speranza di rigenerazione". ( link )

Porta alla paura di soffrire di danni cerebrali permanenti se impari la lingua "sbagliata". Il tuo esempio di Perl non è sorprendente, dal momento che Perl è una di quelle lingue che spesso invoca critiche come questa dai suoi detrattori.


5

La tua prima lingua dovrebbe concentrarsi su concetti, non sintassi o modi di dire. Usandolo come linea guida:

  • Perl significa molta ricerca di variabili speciali e sintassi arcana
  • PHP significa miscelazione di concetti a causa della sua crescita organica
  • Java significa un po 'di confusione poiché non tutto è veramente un oggetto
  • Assembly / C / C ++ significa un sacco di cose di basso livello, il che è ottimo se vuoi fare lo sviluppo di sistemi embedded ma toglie i concetti di livello superiore
  • SQL è utile per vedere come il linguaggio naturale può (e non può) essere mappato su strutture di codice e dati
  • Visual Basic, Applications Edition si concentra su oggetti speciali, da buttare via, e come tali rende troppo facile saltare concetti importanti come la corretta gestione degli errori e il refactoring
  • LISP sembra una semplice sintassi, ma ha anche troppe espressioni stenografiche che sono francamente prive di significato senza una conoscenza dettagliata dei loro nomi completi
  • Haskell spesso assomiglia molto alla matematica, ma può rapidamente degenerare in una zuppa di sintassi
  • Python ... In realtà, Python è l'unica lingua per cui non riesco a trovare obiezioni serie per i principianti. Forse semplicemente perché è l'ultima lingua che ho imparato e la lingua successiva mi insegnerà l'errore dei miei modi.

Ho notato che non hai scritto nulla su C # o VB.Net.
HK1

4

Chiedi ai tuoi compagni di classe come sanno che una lingua è "sbagliata" se non l'hanno usata. Puoi solo capire cosa ti piace usando una grande varietà di lingue.

Molti dei miei compagni di classe si sono rifiutati dell'idea di dover imparare una lingua che non avrebbero mai più dovuto usare, ma non capisco bene da dove provenga tanta paura di apprendere lingue meno popolari.

Senza conoscerli non posso dire con certezza perché si sentirebbero così. Forse sono pigri. Forse hanno usato la lingua prima e non è piaciuta. Forse hanno paura di provare un'altra lingua. Chissà. Quello che so è che come studente CS, ricercatore e che ha lavorato nel settore, conoscendo una varietà di lingue, beh, è ​​una risorsa enorme e non sai mai cosa userai o no. Esempio: quando ho iniziato a studiare C, il mio insegnante ci ha fatto conoscere gli script di shell e le utility da riga di comando come grepe awk. I miei amici non si sono preoccupati di apprenderli a un livello di competenza. Ora li uso al lavoro tutti i giorni.

Sto seguendo un corso sui motori di ricerca questo semestre, che si svolge in Perl e di nuovo vedo compagni di classe che si lamentano della scelta della lingua.

Perl è molto potente e se sai come usarlo, può semplificarti molto la vita. È anche simile a Python e Python è ampiamente utilizzato in uno dei migliori recruiter di studenti CS: Google. I tuoi compagni di classe dovrebbero mangiare questo. FWIW, conosco il perl e il pitone a un livello intermedio (non un principiante ma non un esperto).

Capisco di avere una lingua preferita e di non apprezzare gli altri, ma perché alcuni riescono a capire come impararla?

Giovane e vanitoso? Anch'io ero così. Ma il mio "fastidio" era più nel regno della matematica. Quindi da quell'esperienza scommetterei che si sono inventati perché non amano imparare cose nuove o che le nuove lingue sono difficili da imparare per loro. (Ma poi, tutto ciò che vale la pena sapere non cadrà in grembo, dico io)

Sai davvero imparare la lingua "sbagliata"? Imparare qualcosa come Scheme o Haskell non è forse un buon esercizio mentale, se non altro, e utile almeno all'esposizione a diversi modi di risolvere i problemi?

Alla prima frase: No, ma puoi sicuramente imparare le lingue che preferiresti non avere + tosse + Lisp + tosse + =)

Per il resto: Sì! Dovresti imparare quante più lingue possibile per scoprire cosa ti piace ed espandere i tuoi orizzonti. Non è necessario padroneggiarli tutti, ma avere una conoscenza pratica è sempre utile. Non sai mai quando una lingua che pensavi sarebbe stata una perdita di tempo per imparare è utile.


1
Cosa c'è che non va in Lisp?!?! :)
Michael K,

1
+1 per "impara quante più lingue possibile". Se conosci una varietà di lingue, diventa banale sceglierne una per un determinato compito.
Michael K,

1
@Michael: Inoltre, rende più facile apprenderne uno nuovo, poiché conoscerai già la maggior parte dei concetti.
David Thornley,

@Michael: Niente di sbagliato in Lisp =). Non sono un ragazzo con un linguaggio di programmazione funzionale. Inoltre, tante parentesi !! Tuttavia, ho visto alcune soluzioni MOLTO eleganti implementate in Lisp. Molto rispetto per i guru di Scheme e Lisp.
Aqua

3

Poiché assumere programmatori è un processo così arbitrario e capriccioso, il semplice fatto è che se scegli la tecnologia sbagliata, potresti ritrovarti sulla strada del dodo

Sulla prima pagina in qualsiasi momento, vedrai un fervore religioso vicino a credenze come:

  1. Una laurea in informatica è necessaria per essere un buon programmatore.
  2. Un master in informatica rende le persone cattive programmatrici.
  3. Le certificazioni sono assolutamente necessarie per far avanzare la tua carriera.
  4. Le certificazioni sono una bandiera rossa che indica un programmatore difettoso.
  5. Una laurea in un campo diverso dall'informatica tende a sfociare nei migliori programmatori.
  6. Non sei un buon programmatore a meno che non programmi anche la sera e il fine settimana.
  7. e continua così.

L'unica costante in tutto questo è che il 99% delle aziende là fuori vuole che tu abbia X anni di esperienza con la tecnologia Y ... E poiché una persona ha così tanti cicli disponibili, quello che spendono quei cicli su questioni molto.


2

Penso che la paura di scegliere la lingua "sbagliata" da imparare sia dovuta principalmente alla mancanza di informazioni e alla mancanza di guida , come ad esempio:

  • Fallacia del proiettile d'argento . L'idea sbagliata che esista la lingua giusta per il lavoro, l'ambiente o il progetto. E se scegli quella sbagliata, sei brindato.
  • Non capire che la programmazione trascende le lingue . La lingua è solo uno strumento, come una macchina da scrivere o un computer per scrivere. Non si tratta di apprendere le sfumature dello strumento (sintassi), ma ciò che lo strumento consente (concetti, astrazioni, ecc.) Di creare.

Ecco perché, ad esempio, Scheme è un linguaggio di insegnamento così eccezionale. La programmazione riguarda due cose: astrazione e riutilizzo. Lo schema ha esattamente due caratteristiche: astrazione di funzione e chiamata di funzione (cioè riutilizzo). Cavolo, non ha nemmeno la sintassi!
Jörg W Mittag,

2

Siamo esposti a più opinioni.

Rispetto al modo in cui le cose potrebbero essere state fatte in passato, ci sono altre ipotesi su come stiamo spendendo il nostro tempo perché siamo esposti a più opinioni: ognuno ha le proprie idee su quale dovrebbe essere il primo linguaggio di programmazione e poiché è un argomento così schizzinoso, chiunque può giustificare qualsiasi cosa .

A causa del nostro stile di vita in rapido movimento, tutti hanno un'innata paura di perdere tempo. L'accentuata paura di imparare la lingua sbagliata è semplicemente il risultato di persone facilmente esposte a una moltitudine di opinioni.


1

È la generale antipatia per l'apprendimento di qualcosa che ha un'utilità discutibile. Vedo che la puntura qui è ancora peggio poiché questa è la classe che la gente vuole prendere e che stanno ancora imparando qualcosa che pensano sia inutile. So che se avessi intenzione di fare collage avrei voluto imparare qualcosa che potevo usare nel mondo reale.

L'unica parte in cui potrei essere in disaccordo con quelle altre persone è quando una lingua è fortemente in uso e loro semplicemente non vogliono uscire dalla loro bolla per impararla. Solo allora il lamento non ha senso.


1

Perché è "paura". La definirei animosità di cui è stato alimentato forzatamente qualcosa che non vuoi o che non ritieni importante. Nessuna lingua è sbagliata ma abbiamo poco tempo per concentrarci sulle cose. Ho dovuto tenere le mie lezioni CS con Java e non ne ero felice. Non perché temevo che Java fosse la lingua sbagliata, ma non era quello il punto focale della mia carriera.

Ora Java è utile, giusto? LOL Tutti imparano Java. Questo è ciò in cui non vuoi competere. Il tuo curriculum sarà in una pila di 1000 con l'intestazione Laureato CS recente che conosce Java. In realtà probabilmente il tuo migliore schema di apprendimento saggio di occupabilità in quanto questo è il segno segreto che sei andato in un'università d'élite e non in un college universitario vizioso.

Direi anche che questa sorta di animosità è molto più ampia della CS in generale, ma indicativa dell'istruzione superiore in generale. Sono sicuro che l'istruttore ha scelto il Perl perché conosce il Perl e può valutarlo facilmente e teme di apprendere nuove lingue che gli studenti preferiscono imparare. Penso che sia la tua educazione e dovresti essere in grado di mappare le tecnologie che ritieni necessarie per il tuo successo.

(PS MIT ha rinunciato a Schema e è passato a Python)


Un po 'triste per aver rinunciato a Scheme, SICP è qualcosa che ogni programmatore dovrebbe leggere. Tendo a promuoverlo in ogni occasione.
Zachary K,

Questo mi ricorda i miei giorni all'università. Alcuni anni dopo che avevo iniziato, il dipartimento CS passò dal C ++ a Java come principale linguaggio di insegnamento. Un paio di anni dopo (quando stavo tentando di insegnare tutorial sulla struttura dei dati), era chiaro che nessuno degli studenti aveva capito nulla sull'allocazione della memoria (ad esempio, erano completamente persi su stack vs. heap). Di conseguenza, non hanno compreso le operazioni di base sulle strutture di dati che abbiamo cercato di insegnare loro. Non molto tempo dopo, C ++ divenne di nuovo la lingua preferita.
smithco,

In pratica, l'apprendimento di nuove lingue è facile dopo aver compreso la programmazione. Le persone raccomandano linguaggi come C perché richiedono di dichiarare puntatori e allocare memoria e proteggere l'accesso in scrittura ai puntatori ... quando si pensa in questi termini tutto il resto è abbastanza semplice perché si considerano già tutte queste cose. È più difficile fare il contrario - iniziando con un linguaggio più astratto e poi costruendo l'esperienza per comprendere tutte le cose sottostanti che stanno accadendo.
dcgregorya,

1

Il tempo è la merce più rara di tutte, una volta usciti nel mondo reale - e nessuno vuole perdere tempo con abilità che non daranno loro alcun beneficio reale.

Detto questo, non credo che ci sia una lingua "sbagliata" da imparare - ma vorrei aver scoperto Ruby anni fa invece di lottare con cose avanzate in PHP ...

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.