A che punto posso dire di aver "imparato" una lingua?


67

Nei miei pochi anni di programmazione, ho giocato con tutto, dal Ruby al C ++. Ho fatto di tutto, dall'apprendimento della sintassi di base (Ruby) al completamento di numerosi progetti (per me) importanti che hanno ampliato le mie capacità con la lingua. Data questa varietà (e il fatto che imparare veramente una lingua non si ferma mai), quando posso dire di conoscere (o aver imparato) una lingua?


12
Penso che la parola che stai cercando sia "padroneggiare" una lingua, "imparato" in questo contesto è un po 'strano.
Pieter B,

7
"Le parole sono per significato: quando hai il significato, puoi dimenticare le parole." - Zhuangzi
jfrankcarr,

9
quando non devi porre questa domanda, avrai imparato cosa devi sapere ...

1
@JarrodRoberson È questo Zhuangzi a dirlo anche lui?
jadkik94,

2
Secondo LinkedIn c'è una barra molto bassa per mettere un linguaggio di programmazione sul tuo curriculum di abilità ... Secondo il mio LinkedIn persone che hanno visto il codice Java prima apparentemente si sentono a proprio agio nel elencarlo nella loro sezione delle abilità.
Chris Dale,

Risposte:


70

A che punto puoi dire di aver "imparato" una lingua come l'inglese o il francese? Penso che molte persone accetterebbero che hai imparato una lingua quando puoi usarla per comunicare. Non devi conoscere ogni parola o comprendere ogni linguaggio, ma dovresti conoscere la maggior parte del (piuttosto piccolo) sottoinsieme della lingua che le persone usano nella conversazione quotidiana. Avendo "imparato" una lingua fino a quel punto, puoi continuare a imparare di più mentre usi la lingua ogni giorno e ti esponi a sempre di più. Quando morirai, non saprai ancora tutto quello che c'è da sapere sulla lingua, ma nessuno dirà che non hai mai "imparato" la lingua.

Quindi è, credo, con i linguaggi informatici. Puoi dire che "conosci" un linguaggio come C ++ o Ruby quando puoi scrivere programmi utili in esso. Se devi quantificare il grado in cui conosci la lingua, usa gli stessi termini che useresti per una lingua umana. Dì "Conosco un po 'di C ++" o "Conosco un C ++ colloquiale " o "Sono fluente in C ++" per indicare che sai quanto basta per raschiare, abbastanza per fare cose utili o che sei un esperto, rispettivamente.


15
I termini colloquiale e fluente sono piuttosto soggettivi e benché appropriati al linguaggio naturale, è difficile capire cosa significano quando applicati a un linguaggio informatico. Sebbene sia ancora soggettivo, funzionale e idomatico può funzionare meglio. Funzionale implica che conosci la sintassi abbastanza bene per scrivere costrutti utili, mentre avere una conoscenza idiomatica implica che non solo sai come scrivere nella lingua ma anche che conosci abbastanza bene da usare gli idiomi della lingua, come usare usingin C # o b, a = a, be generatori in pitone. Altrimenti, +1.
Mark Booth

13
@MarkBooth Qualsiasi descrizione a corto di un punteggio in un esame sarà in qualche modo soggettiva. Il punto è usare la familiarità che la maggior parte delle persone ha già con i livelli di conoscenza dei linguaggi umani come una guida approssimativa alla conoscenza di un linguaggio informatico e farlo in un modo amichevole che invita a ulteriori indagini. Conversation C ++ è l'abbreviazione di "Ho familiarità con le basi, ma potrebbe essere necessario aiutarmi con codice avanzato, oscuro o ingannevole".
Caleb,

3
Mentre penso che tu abbia per lo più ragione, penso che molte persone credano erroneamente di aver imparato un linguaggio naturale quando hanno ancora un livello miserabile. E si applica anche alle persone che affermano di aver imparato i linguaggi di programmazione.
haylem,

Penso che la tua risposta sia perfetta, mostra persino quanto sia impossibile quantificare la conoscenza della lingua. In effetti, sebbene fluente significhi che puoi parlare di quasi tutto, con tutte le spiegazioni che un madrelingua richiederebbe, ciò non risolve il fatto che la maggior parte dei madrelingua non possiede una decima delle conoscenze linguistiche dei bravi scrittori vecchi (no , non harry potter o dan brown, roba vecchia davvero difficile da leggere). Come lo affronteresti, quando in realtà nessuno si è preoccupato di affrontarlo per le lingue? e quando in effetti ha un forte impatto sulla produttività nella programmazione?
Morg.

1
@Morg. Che immondizia totale. La programmazione riguarda tanto la comunicazione con i futuri programmatori (incluso te stesso) quanto lo è dire al computer cosa fare. Certo, la semplice scrittura di un codice potrebbe non aver bisogno di essere comunicata bene, ma nel mondo reale rendere chiare le tue intenzioni ai futuri manutentori del codice è molto più importante che indurre il computer a fare la cosa giusta. Ad ogni modo, questi commenti non servono più a migliorare questa risposta, quindi suggerirei di portarlo su Software Engineering Chat se desideri discuterne ulteriormente.
Mark Booth,

25

Dipende da chi lo sta chiedendo

La persona che chiede in modo propizio ha una certa idea del livello di abilità che ci si aspetta da qualcuno che afferma di aver "imparato una lingua".

Fondamentalmente, ho incontrato due scale archetipiche, in base alle quali le persone giudicano la risposta alla domanda "hai imparato X?"

Per la maggior parte dei nerd è una domanda trabocchetto per eliminare i poser. Questo è già dimostrato dalle altre risposte alla tua domanda;). Se dici di averlo imparato, non riesci a vedere lo scopo del compito, che è implicitamente "perfezione", e, molto peggio: fallisci nell'umiltà.

Per la maggior parte dei capi, "l'hai imparato", se riesci a risolvere i loro problemi , un criterio spesso incontrato quando il tuo codice viene compilato. Rispondere alla sua domanda in modo umile lo porterà ad assegnare l'incarico a un poser che potrebbe anche essere un parente.

Allora, qual è il tuo pubblico?


4
Nelle interviste, lo sai se lo conosci. Sul posto di lavoro, lo sai se Google lo sa.
Asfallows

3
Nelle interviste, è "lo so" se l'intervistatore indossa una cravatta, ed è "per favore definisci" sapere "" se non lo fa;). Per essere onesti, la maggior parte degli intervistatori chiede se si "ha esperienza con", a cui sono più facilmente incline a rispondere con "sì"
keppla

18

Penso che le persone si stiano concentrando sulla finalità della parola "imparato" che è perfetta e significa che hai finito di imparare. E come tutti hanno notato, i linguaggi di programmazione sono entità viventi proprio come le lingue parlate. Ad esempio, qualcuno che avesse la completa padronanza di C # 2 avrebbe esaminato C # 3 con LINQ, Lambdas, varparole chiave, inizializzatori oggetto / raccolta e metodi di estensione e avrebbe scoperto che molto è cambiato da ciò che ha appreso per la versione precedente. Lo stesso sta accadendo con C # 4 con await, asyncparole chiave e altri nuovi costrutti di linguaggio.

E stiamo solo parlando di sintassi qui. Dimentichiamo che la maggior parte delle lingue è abbinata a un framework . C # ha il framework .NET, Java ha il suo framework, così come Ruby, C ++, PHP e PERL. Pensa al framework di una lingua come al vocabolario e la lingua stessa è solo sintassi. Conoscere la lingua significa che sai come pronunciare una frase nella lingua. Conoscere il framework significa che puoi esprimerti bene nella lingua. Infine, una volta che conosci la sintassi e il vocabolario, devi imparare gli idiomi in modo da scrivere il codice come "madrelingua".

Direi che ci sono diversi livelli di apprendimento.

  1. Ciao mondo (puoi scrivere i programmi più rudimentali.)
  2. Competente (è possibile scrivere programmi di base ma è necessario consultare regolarmente la guida in linea)
  3. Ottima (è possibile scrivere programmi avanzati con qualche riferimento necessario).
  4. Madrelingua (puoi scrivere programmi avanzati con una minima guida online, il tuo codice è indistinguibile dal codice di un altro madrelingua).

3
Nitpick: awaitè di C # 5, la cosa più importante in C # 4 era dynamic.
svick,

Hai ragione ... Continuo a perdere traccia di quale versione di C # va con quale versione di .NET
Michael Brown,

7

Raramente puoi dire di aver imparato una lingua. Ciò implica che hai finito di impararlo, il che è ... sciocco.

Dire che conosci una lingua va bene quando puoi scrivere un codice che non stia rompendo palesemente gli idiomi nella lingua (forse dopo una settimana di disinformazione della conoscenza) senza fare riferimento a un riferimento di sintassi.


2
I modi di dire cambiano, gli stili variano da un luogo all'altro, e in effetti le lingue stesse cambiano nel tempo. Se non puoi dire che "conosci" o "hai imparato" un linguaggio come il C ++ fino a quando non hai finito di impararlo, allora ci sono davvero poche persone che possono affermare di aver imparato il C ++.
Caleb,

1
@Caleb esattamente.
Michael Brown,

3
Se stai imparando in quel modo, allora non conosci nemmeno la tua lingua madre, che è anche sciocca (almeno per la maggior parte delle persone)
superM

@Caleb, peggio ancora, molte parti di c ++ sono migliori se ignorate, come hanno sottolineato sia Carmack che Torvalds - quindi ... aver imparato tutto su cpp non è esattamente vantaggioso.
Morg.

3

Questo è più un fattore basato sull'opinione. In tutti i termini tecnici "Appreso" significherebbe avere una conoscenza completa di, come in te ci si aspetta che tu sappia TUTTO la lingua.

Tuttavia, nel mondo della programmazione, credo che si tratti più se puoi programmare fluentemente la lingua per completare un obiettivo / compito. Probabilmente significa anche se ti senti a tuo agio con la lingua. Sicuro che potresti andare là fuori e ottenere una laurea dopo anni e anni di college, ma è solo per farsi notare? Definisci quando puoi dire di aver imparato una lingua.


2

Quando inizi a notare i suoi difetti. Una volta che inizi a imparare una lingua, di solito sei ancora impegnato a imparare ora a fare cose o sei molto coinvolto in essa per notare dove fallisce (ovviamente, a meno che non inizi a impararla da un punto di vista negativo solo per vedere quanto è peggio è confrontato con la tua lingua preferita finora). Direi che non conosci veramente una lingua fino a quando non sei profondamente consapevole delle aree in cui fallisce.


Non posso essere d'accordo con quello. Potrebbe essere vero per la prima o le prime due lingue che impari - potresti semplicemente non sapere cosa cercare, quindi anche i fallimenti di progettazione più schietti sono indistinguibili dal modo giusto di fare le cose. Dopo aver appreso alcune lingue, dovresti iniziare a vedere i difetti della lingua subito dopo aver iniziato a impararne una nuova. Ma poi per un po 'nel tuo sviluppo, equiparerai erroneamente "diverso" con "sbagliato". Fino a quando non imparerai alcune lingue di ogni tipo principale (procedurale, OO, funzionale, dichiarativo ...) i tuoi giudizi immediati saranno sospetti.
Warren Young,

2

La mia risposta personale per questo è quando,

  1. Conosco le basi per scrivere un semplice programma a livello di produzione.
  2. Ho trascorso almeno 3 ore consecutive a risolvere un problema che sembrava semplice ma non lo era.

Da lì in poi, non lo chiamerei apprendimento, ma padronanza.


1

Nel momento in cui l'applicazione o il componente può leggere la posta, ovvero la legge di Zawinski , che stabilisce:

“Ogni programma tenta di espandersi fino a quando non può leggere la posta. Quei programmi che non possono espandersi così vengono sostituiti da quelli che possono. "Coniato da Jamie Zawinski (che l'ha definita la" Legge dell'involucro del software ") per esprimere la sua convinzione che tutti i programmi veramente utili subiscono la pressione per evolversi in toolkit e piattaforme applicative (il la posta, dice, è solo un effetto collaterale).

Questo è stato aggiornato quando l'RSS è diventato popolare per "... può leggere i feed RSS" e probabilmente potrebbe essere aggiornato in questi giorni per "... può leggere i feed di Twitter". ;-)


0

Penso che tu abbia imparato una lingua quando non la vedi. Non vedi i cicli for e gli accessi ai dati, ma il flusso di lavoro dell'algoritmo.

Non giochi trucchi con il passaggio di parametri e l'elaborazione di array, macro magiche. Non pensi al tuo codice come a un materiale di auto marketing da mostrare ai tuoi amici e insegnanti, ma a esprimere la tua comprensione di un problema e la tua volontà al computer nel modo più leggibile.

Hai delle abitudini che ti aiutano a evitare molti errori semplicemente seguendoli, come: usa {} blocchi di codice e () nelle espressioni anche se sei assolutamente sicuro che "sarà solo una riga" o "Non sono sciocco e lo so ordine di precedenza dell'operatore ".

Smetti di contare quante classi, schemi e API del framework conosci. Ecco a cosa servono intellisense, riferimenti e tutorial, e Google. Ma quando guardi un problema, sai immediatamente quali parti possono essere divise e con quali strumenti e algoritmi le risolverai.

Quello che fai funziona , è elegante e piccolo . Ti piace programmare e trovare facilmente i tuoi bug. Sì, anche i maestri creano bug perché sono umani - ma li trovano rapidamente perché la loro struttura di codice li porta nel posto giusto.

E finalmente realizzare: hai imparato a pensare, analizzare e risolvere i problemi; rispetto a loro, la lingua attuale è secondaria, solo l'attuale scatola di regole e strumenti.

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.