L'apprendimento di C # come prima lingua è un errore? [chiuso]


26

So che ci sono domande simili qui, che ho letto, ma di recente ho letto questo post di Joel Spolsky:

Come posso insegnare a una persona brillante, senza esperienza di programmazione, come programmare?

E mi ha fatto pensare al mio modo di apprendere e se potrebbe effettivamente essere dannoso a lungo termine.

Mi sono dilettato con varie lingue, ma C # è il mio primo serio, ho letto "Head First C #" e creato alcuni progetti. Ma dopo aver letto il post sopra ho trovato un po 'scoraggiante che potessi sbagliare, ovviamente rispetto l'opinione di Joel che è ciò che mi ha gettato un po'.

Ho iniziato a leggere "Codice" come raccomandato nell'elenco di lettura e lo trovo piuttosto difficile, sebbene divertente. Sento che ha tolto lo splendore del mio "hacking noobish" in Visual Studio.

Quindi ora non sono sicuro di quale percorso dovrei prendere? Dovrei fare un passo indietro e seguire i consigli di Joel e iniziare a leggere?

Immagino che il mio obiettivo principale sia solo quello di diventare un buon programmatore, come tutti gli altri, ma non voglio entrare in cattive pratiche imparando un linguaggio .NET quando qualcuno che ritiene che io rispetti pensi che sia dannoso.

Pensieri?


4
Imparare CS nel modo più duro può essere fatto, ma solo se hai un buon insegnante.
Giobbe

5
C # non era la mia prima lingua VB.net e posso dirti che non è il modo in cui inizi che conta. Penso che C # sarà un ottimo linguaggio di partenza, ricordati solo di chiederti sempre perché le cose vanno fatte così come sono.
Daniel Little,

23
No. Qualsiasi lingua come prima lingua è buona per apprendere la teoria dell'informatica. Concesso, per farne una carriera, alcune lingue sono migliori di altre, ma a fini di apprendimento, tutto è buono. Alcuni dei migliori programmatori che conosco hanno iniziato con BASIC su un C64, Apple II o TI-99 / 4A. Non marcì il cervello, ma li spinse alla lingua successiva e poi alla successiva.
Jesse C. Slicer,

5
Inoltre, dipende da cosa hai intenzione di fare con quella conoscenza. C # risolve i problemi aziendali giorno dopo giorno dove lavoro. Non ho guardato C al limite di 2 decenni e mi sento male quando devo.
Jesse C. Slicer,

19
Imparare qualcosa non è mai un errore. È sempre molto meglio che non imparare .
Logica SK

Risposte:


80

Mi sono dilettato con varie lingue ma C # è il mio primo serio, ho letto "Head First C #" e creato alcuni progetti. Ma dopo aver letto il post sopra ho trovato un po 'scoraggiante che potessi sbagliare, ovviamente rispetto l'opinione di Joel che è ciò che mi ha gettato un po'.

Rispetto anche le opinioni di Joel, ma sono proprio queste: opinioni . Non c'è assolutamente nulla di sbagliato nell'usare C # come lingua di partenza.

Il più grande consiglio che posso darvi, o chiunque fare qualsiasi programmazione (anche se sono a partire dal vaniglia C!) È quello di non essere stagnante, e non essere religiosi . Non mi interessa con quale linguaggio di programmazione stai iniziando, o quanto sia puro o giusto quel linguaggio - al giorno d'oggi non puoi permetterti di sederti in un solo mondo di programmazione.

Ad esempio, ho iniziato a programmare con PHP3 quando ero un adolescente. Ho creato alcune piccole app Web e alcuni siti Web; Pensavo di essere un programmatore geniale e di poter fare qualsiasi cosa con PHP3, e ho aggrottato le sopracciglia verso le persone che erano tutte incentrate su ASP o BASIC. Ragazzo, ho sbagliato.

Non ho iniziato a fiorire come sviluppatore fino a quando non ho iniziato ad espandere i miei orizzonti e studiare altri linguaggi e concetti di programmazione. Durante il liceo ho imparato RealBASIC, e poi Visual Basic. Dopo la business school, quando sono diventato uno sviluppatore professionista, ho iniziato a studiare seriamente C # e Javascript.

Ora, non fraintendermi qui - sto , non sostenendo che si prova a essere un Jack of All Trades. Nel profondo, e nel commercio, sono ancora un programmatore di PHP. PHP è il mio pane e burro, e lo conosco dentro e fuori. Tuttavia, le mie capacità di PHP non sono diventate ciò che stavano facendo PHP. Ecco alcuni concetti molto importanti che non ho capito da PHP, nonostante ci abbia lavorato in modo professionale.

  • Javascript: chiusure
  • jQuery (sì, separato): il DOM e l'Ajax
  • Visual Basic: programmazione orientata agli oggetti
  • C #: generici e chiusure
  • Ruby (on Rails): la potenza del design MVC

Potrei andare avanti, e così anche molti altri su questo sito, per giorni. Anche se sono un programmatore di PHP, sono stato in grado di riportare tutti questi altri meravigliosi concetti nel lavoro che faccio ogni giorno.

Qual è il mio punto? Impara C #. Diventa un maestro di C #: avrai una carriera lunga e di successo e probabilmente realizzerai cose incredibili. Ma non fare il buco del piccione. Viaggia e assapora altre lingue, ambienti e concetti.


+1: @toleero - C # o Java sono perfetti per iniziare a imparare. Joel e Paul Graham Beating the Averages stavano cercando di superare il punto di stagnazione degli sviluppatori con le loro lingue scelte, come sottolineato che questo è fin troppo comune.
Justin Shield,

A proposito, anche Objective-C insegna MVC, ma è meno convenzionale.
Moshe,

4
+1. A mio avviso, non puoi davvero essere un grande sviluppatore e un padrone della tua lingua principale, senza aver imparato e giocato con altre lingue. Questo è il modo migliore per espandere le tue conoscenze e apprezzare veramente i lati forti della tua lingua principale.
Niklas H,

3
+1. La chiave da togliere a questo sono le parole che ha scelto in grassetto. È troppo facile imparare qualcosa come Java e C #, o anche C e passare 10 anni della tua vita a scrivere codice come hai sempre fatto. Spingiti, impara una nuova lingua ogni anno. Metti in discussione le cose che fai, prova a trovare un modo migliore. E, soprattutto, rimanere coinvolti su programmatori e StackOverflow.
Andrew T Finnell,

Puoi fare tutti questi esempi in C #. Dom / ajax: librerie C # xml e ajax. Orientato agli oggetti? Dai un'occhiata. MVC? Asp.net framework mvc.
Carra,

21

quando qualcuno che è dell'opinione che rispetto pensa che sia dannoso.

Questo mi ricorda una storia che coinvolge Richard Feynman. Uno studente della Caltech chiese all'eminente cosmologo Michael Turner quale fosse il suo "pregiudizio" nel favorire un tipo di particella come candidato per comprendere la materia oscura, e Feynman scattò e disse "Perché vuoi conoscere il suo pregiudizio? Crea il tuo! ... Non prestare attenzione alle autorità, pensa da solo. "

I programmatori provengono da ogni ceto sociale. Java viene insegnato in molte scuole superiori e college oggi, eppure non era nemmeno stato inventato quando Joel Spolsky era a scuola. Non esiste un "vero percorso" per diventare un buon programmatore. Ci sono certamente alcuni classici come SICP che la maggior parte dei programmatori si imbattono in qualche punto, ma non esiste uno standard duro e veloce. La cosa principale è iniziare da qualche parte e concentrarsi sulla costruzione di concetti. Un grande programmatore una volta disse qualcosa del tipo:

I cattivi programmatori si concentrano sul codice, i buoni programmatori si concentrano sugli algoritmi.

Penso che C # sia un bel linguaggio per cominciare, ma ti avverto di diffidare di Visual Studio. È un IDE formidabile, ma se trascini DropDownListae associ a GridViewa ObjectDataSourcee usi un Buttoncontrollo per effettuare una DropDownListricerca basata, l'IDE svolge la maggior parte del lavoro e non stai davvero programmando. Sfrutta gli strumenti IDE, ma cerca sempre di sviluppare concetti e sviluppare conoscenze.


Una risposta fantastica.
Yasir,

3
Prima dici "I bravi programmatori si concentrano sugli algoritmi", poi dici "il lavoro è svolto dall'IDE e non stai davvero programmando". Cos'è questo? Sono in grado di scrivere un programma, eseguire correttamente il flusso di lavoro e non preoccuparmi dei "dettagli di implementazione" come GridView e DropDown (Supponendo che conosco abbastanza per scegliere quelli giusti e come implementarli nel modo giusto). +1 per il resto della domanda, ma l'utilizzo di un IDE non ti impedisce di essere un buon programmatore.
WernerCD,

@WernerCD - Quando ho detto "il lavoro è svolto dall'IDE", mi riferivo all'esempio specifico che ho dato. Se prendi un bambino che non ha mai fatto alcuna codifica e lo fai seguire passo per passo le istruzioni in un IDE, creerà una pagina di lavoro, ma non sta programmando. Penso che gli IDE siano incredibilmente utili per il lavoro di programmazione, ma come principiante completo, è meglio imparare quale ricorsione è invece di trascinare i controlli in giro.
BlackJack,

2
@Graham - Scusa, ma non sono d'accordo. Non sta cercando di imparare l'IT o lo sviluppo del software, sta cercando di imparare la programmazione. A mio avviso, gli strumenti IDE sono meglio lasciare per dopo che in realtà sei un programmatore competente.
BlackJack,

16
La chiave è che un buon sviluppatore non crede nella magia . Il lavoro svolto dall'IDE (o qualsiasi altro strumento) è una comodità, una scorciatoia, ma non un sostituto per la comprensione .
Bevan,

7

Sono solo un giovane, ma con tutta l'umiltà e il rispetto per quelli infinitamente più esperti, devo confessare che non ho nemmeno questo atteggiamento.

Un programmatore ha commentato sotto la risposta di Joel: " come qualcuno che ha dovuto sbattere la testa sulla scrivania rispetto ai" programmatori "che è venuto altamente raccomandato per le sue abilità in C #, ma non ha potuto fare cose semplici come implementare una classe base molto ben documentata, trovare perdite di memoria nei programmi c e c ++ " ...

Ma perché trovare perdite di memoria nelle app C ++ deve essere semplice per chi non ha mai affermato di conoscere C ++? :) Non capisco. È come criticare uno psicologo per la mancanza di abilità dentistiche. Non sono sicuramente un buon programmatore, ma penso che ciò non sia dovuto al fatto che non conosco il C ++, ma perché non conosco abbastanza bene il framework e i linguaggi che sto usando.

"Non è possibile fare cose semplici come implementare una classe base molto ben documentata (...) o semplicemente capire un problema da soli o imparare una nuova idea anche a un ritmo moderato"

OK, ma - correlazione non significa causalità, e cosa ci fa supporre che la loro mancanza di capacità di programmazione generale - di cui non dubito - sia il risultato della loro scelta della lingua?

O un effetto del fatto che C # sia la loro prima lingua preferita, del resto?

Posso vedere altre spiegazioni plausibili (forse C # è solo alla moda, e, quindi, attira un sacco di novizi ... la maggior parte delle persone per le quali C # è la prima lingua non sono stati di programmazione molto lunga a tutti , e che è più di un handicap in proprio diritto che mai programmare in qualche altra lingua ... ecc. ecc.).


È più come criticare un falegname che può usare solo utensili elettrici. Anche nei linguaggi raccolti con immondizia, sapere per quanto tempo dovrebbero rimanere in sospeso le variabili è un'abilità fondamentale. Se non riesci a riconoscere la vita prevista di una variabile con un palese freeche ti fissa in faccia, come lo riconoscerai in un programma scritto in una lingua che non fornisce tali indizi?
Karl Bielefeldt,

1
Vedo il tuo punto. So che le basi di vita variabili (quasi tanto quanto io possa avere bisogno in C # su base giornaliera: portata, using, IDisposable, gestori di eventi fa riferimento a loro ascoltatori, ecc), ma non ho potuto nemmeno seriamente tentare di diagnosticare una memoria perdita in un'applicazione C ++, perché non ho nemmeno familiarità con la sintassi! Non so cosa significhi l'asterisco.
Konrad Morawski,

5

Direi che imparare una lingua e seguirla è più un errore che decidere con quale lingua iniziare. Ci sono alcune lingue che puoi imparare che sono più facili ovviamente, ma è meglio provare ad iniziare a imparare quello che userai molto (in un ambiente scolastico la scelta della lingua è già fatta dalla scuola). Dopo aver appreso correttamente un linguaggio e averlo usato attivamente dopo alcuni mesi, dovresti dilettarti con un altro linguaggio di programmazione e confrontarlo.

In .NET è facile scegliere due (più o meno ) linguaggi di programmazione diversi poiché è possibile passare da Visual Basic a C #. Quindi puoi imparare Visual Basic e vedere quali sono le differenze. A questo livello dovresti essere esperto con la codifica procedurale di base con le tre strutture di programmazione di base, se puoi essere creativo con tutte (e sapere come usare le variabili), allora sei sulla buona strada per diventare un grande programmatore:

  • Sequenza: il codice è scritto in sequenza di passaggi che si susseguono nel modo specificato (definisce un "salto", passo dopo passo e goto)
  • Condizionale - Il codice può avere punti di decisione, (definisce istruzioni if, istruzioni switch-case)
  • Ciclo / ripetizione - Il codice può ripetersi dato una certa decisione (che è un'estensione di entrambi sopra, definisce i cicli for, do-while-loop)

Non importa se il tuo linguaggio di programmazione secondario sarà il tuo più attivo o meno, semplicemente sapendo che i linguaggi di programmazione (specialmente se seguono lo stesso paradigma) sono molto simili tra loro e ci sono piccole sfumature che in realtà fanno molta strada per farti capire come funziona la programmazione software.

Da ciò, almeno una volta all'anno, prova ad imparare un nuovo linguaggio di programmazione che segue un altro paradigma di programmazione . Non è necessario tenere il passo con la nuova lingua, ma ci sono alcuni vantaggi per conoscere altri paradigmi. Esistono diversi paradigmi e alcuni linguaggi di programmazione si mescolano tra molti (si noti che C # in realtà ha sottoinsiemi i seguenti tre):

Le cose più importanti che dovresti imparare sono che molti linguaggi di programmazione seguono il loro set di idiomi e un'API di base. Quindi, quando impari una nuova lingua, prova a imparare bene quei modi di dire e le API e starai bene quando costruisci cose. Una buona ragione è che diventerai più bravo a progettare e risolvere problemi di programmazione. Qualche idioma in una lingua, potrebbe darti un'idea di come risolvere un problema nella tua principale.

Sappi anche che c'è anche un altro ottimo motivo per cui dovresti imparare altri linguaggi di programmazione, oltre alla lingua principale che utilizzerai di più: le tue possibilità di lavoro sono molto maggiori.


5

Il focus della tua domanda e molte delle risposte qui è su C #. Da Wikipedia :

Il linguaggio C # deve essere un linguaggio di programmazione semplice, moderno, generico e orientato agli oggetti.

Basandosi solo su questo, sembra sicuro di poter imparare C # come prima lingua senza fare danni a lungo termine al cervello. Non penso che Joel stia condannando l'intera lingua, quando scrisse :

I tentativi di prendere una scorciatoia e andare direttamente all'apprendimento delle cose esatte che vuoi imparare in questo momento (come iniziare con C # e ASP.NET) sono condannati.

Il problema non è la lingua, sta prendendo scorciatoie. Troppo spesso, le persone cercano di prendere una strada veloce verso il loro obiettivo finale seguendo tutorial passo-passo o libri "impara tutto in 24 ore". Non devi passare troppo tempo su Stack Overflow prima di iniziare a notare che ci sono molte domande sulla falsariga di: "Non ho mai scritto una riga di codice in vita mia, ma sto entrando in iPhone programmazione! Qualcuno può darmi istruzioni dettagliate per fare esattamente quello che voglio fare? Grazie! " Non sto dicendo che stai adottando questo approccio, ma è qualcosa da cui devi stare attento.

Se vuoi sviluppare solide capacità di programmazione, dovresti iniziare imparando le abilità fondamentali. Se provi a passare direttamente alle applicazioni OOP e GUI e simili, probabilmente ti perderai quei fondamenti. I libri che Joel ha indicato sono davvero molto buoni. Ho sfogliato solo il libro giallo C # (PDF), ma sembra che sia probabilmente un'introduzione migliore alla programmazione rispetto alla maggior parte dei libri C # che vedo nei negozi.


Vorrei sottolineare che il fraseggio non è "non imparare C #", è "C # e ASP.NET" (enfasi aggiunta). Non sono un programmatore C #, ma .NET e CLR sono un'ottima piattaforma su cui iniziare a studiare.
forivall

5

Per me, quella roba in quell'altro articolo ha colpito un po 'di essere un coglione elitario. Sì, raccomando spesso SICP a sviluppatori seri che vogliono davvero migliorare, ma solo a coloro che vogliono andare oltre la "norma" e apprendere la magia profonda. In effetti, per anni il SICP è stato il testo di programmazione della matricola MIT standard; ma molti programmatori solidi non hanno mai avuto l'opportunità di frequentare quell'istituzione eccellente ma costosa e altamente selettiva.

Così che cosa vi consiglio, in risposta alla tua domanda? Inizia con quello che hai e impara a pensare come un programmatore, piuttosto che imparare una lingua specifica.

Se ti capita di avere un'implementazione C # disponibile, beh, posso dirti che è un linguaggio perfettamente perfetto per un lavoratore rigido come me, come lo sono Java, JavaScript, Python, Ruby, Scala, Scheme e le molte altre lingue che ho imparato nel corso degli anni. Alla fine, provo a selezionare le lingue e gli strumenti giusti per il lavoro specifico a portata di mano, e questo significa cambiare le lingue come cappelli.

Non c'è niente di sbagliato nell'usare modi divertenti per imparare, come avvicinarsi a Ruby tramite Why's Poignant Guide and Shoes (come ho raccomandato in un altro post recente ). Ci sono percorsi arcani e mistici, come sbattere la testa contro The Little Schemer e The Seasoned Schemer sulla strada per il SICP . Molti pensatori moderni vorrebbero che tu salti tutta quella roba accademica e "aziendale" più vecchia e ti immerga direttamente in JavaScript, JQuery e HTML5. Esistono molti modi per iniziare, quindi non perdere troppo tempo. Basta sceglierne uno e ottenere la codifica!

Realisticamente, credo che pochi professionisti che lavorano in questi giorni ti manderebbero indietro per imparare prima Assembler o C / C ++. Francamente, se lo facessero, non credo che ti farebbero molto servizio.

Quindi, per abbellire un po '"inizia con quello che hai", ho altri tre consigli:

  • Scegli un linguaggio di programmazione che ti sembra interessante e un approccio di apprendimento che sembra avere senso e dai loro tutto. Diventa alfabetizzato nella lingua scelta; leggi tutto il codice buono che riesci a gestire!
  • Metti subito le mani sulla tastiera e inizia a scrivere codice mentre impari. Esegui tutti gli esercizi elementari nei tuoi libri di programmazione e pratica tutti i tutorial che puoi trovare con le dita facendo clic felicemente per farli funzionare davvero. Sarai sorpreso da quante abilità otterrai durante la correzione degli errori nelle demo che dovrebbero funzionare correttamente ma non lo sono!
  • Dedica la maggior parte dei tuoi sforzi all'apprendimento di come i bravi programmatori riescano a superare i problemi. Scopri come analizzare e scomporre problemi e sistemi complessi, analizzandoli fino a quando non li capisci davvero. Quindi impara a sintetizzare e progettare soluzioni automatizzate, costruendole in modo da rendere alcuni compiti più facili per alcuni esseri umani su questo pianeta.

Ho iniziato con FORTRAN IV e QBASIC e se quelli non mi hanno rovinato, C # non ti farà male! Buona fortuna e assicurati di divertirti mentre impari!


Puoi trovare le lezioni originali di Abelson & Sussman qui: groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures
BlackJack

4

Penso che il miglior consiglio che io abbia mai visto quando si tratta di persone che chiedono "Che lingua dovrei imparare?" è semplicemente: un buon programmatore può lavorare in qualsiasi lingua.

Ci sono argomenti contro questa affermazione, ne sono certo, ma il punto è: impara a essere un buon programmatore, anziché un esperto di lingue, per primo. I costruttori non sono specializzati nella costruzione di esattamente un appezzamento di terra, imparano le abilità del loro commercio e li applicano su qualsiasi appezzamento di terreno su cui sono richiesti.


Lo farò +1. È simile alla mia solita analogia con la costruzione di motociclette. Puoi costruire una moto decente lavorando sulla catena di montaggio e seguendo il libro, ma i costruttori davvero fantastici sono gli elicotteri che conoscono le viscere della bici dentro e fuori e, di conseguenza, ottieni cose incredibili.
Jarrod Nettles,

3

A volte sospetto che le lingue preferite abbiano molto più a che fare con le nostre personalità e il modo in cui siamo collegati e molto meno a che fare con considerazioni pratiche o accademiche di quanto vorremmo ammettere.

Detto questo, apprendere nuove cose non è mai dannoso. Saprai il giorno in cui hai varcato la soglia verso un cervello evoluto o forse rotto (tutta una questione di prospettiva suppongo) quando inizi a capire che tutto ha un manuale. Alla fine puoi davvero fare tutto quello che vuoi se hai qualche talento e sei effettivamente interessato a fare piuttosto che all'aspetto di un programmatore.

Almeno scherzare con Python e JavaScript. È un chiaro vantaggio di apprendimento poter davvero solo scrivere il codice e guardarlo eseguire immediatamente in un ambiente console di I / O file accessibile come IDLE o un ambiente sandbox come un browser. Quello che non mi piace di C # e Java è che vogliono che tutto sia limitato alle classi anche se stai davvero scrivendo una semplice funzione con involucri inutili attorno per mantenere felici i tuoi colleghi o un compilatore troppo restrittivo. L'altra cosa che mi piace di JS e Python è che ti permettono davvero di impostare il tuo paradigma. Un po 'troppo flessibile per molte preferenze degli sviluppatori. Non sono ancora sicuro di cosa pensare alla saggezza di sovraccaricare gli operatori di base, ma sono abbastanza sicuro di amare Python per aver permesso l'opzione.

Inoltre, non cadere nella menzogna crudele di scegliere la lingua principale con il maggior numero di annunci di lavoro. È meglio essere un grosso pesce in acque medie che fa quello che ti piace di un membro di un'orda di pesci insopportabili per lo più schifosi che trasformano ogni ricerca di lavoro in più di una lotteria che in un processo di abbinamento.


Come qualcuno che assume da quell'orda di pesci insopportabili nel mio lavoro quotidiano, devo essere d'accordo. Ci sono molti feedback davvero utili in questa discussione; Spero che @toleero lo trovi utile e non si scoraggi. A mio avviso, mentre Joel è un genio, non dovremmo mai accettare tutto ciò che qualcuno dice come vangelo. I libri che raccomanda lì sono utili. Ma lo è anche la programmazione quotidiana e l'esperienza pratica. Fallo in una manciata di lingue (diciamo C # e qualcosa di meno simile a C - un Basic, forse, o Python o Ruby) e diventerai almeno uno sviluppatore altrettanto bravo di quante altre persone là fuori: o)
Owen Blacker

3

C # non è così grave come Java per un tratto considerevole. Hanno un supporto migliore per molti concetti come programmazione funzionale, programmazione generica, distruzione deterministica e tipi di valore, sovraccarico dell'operatore, ecc. Il loro supporto per queste funzionalità potrebbe comunque richiedere molto lavoro, ma è decisamente migliore di Java, anche se non è C ++.

In secondo luogo, penso che tu stia leggendo male ciò che Joel ha detto. Se riesci a padroneggiare i puntatori e la ricorsione, allora non importa quale lingua stai usando ora. La cosa più importante sarebbe usare un piccolo unsafecodice, fare i conti con unsafe quicksorto qualcosa del genere, e poi tornare al resto del normale C #.

Oh, e leggi :)


2

La prima lingua produttiva per me è stata C #. Anche se avevo avuto a che fare con Foxpro a scuola e un po 'di C al college. C # è piuttosto un buon punto di partenza per chiunque. Segue i fondamenti generali della programmazione come la tipizzazione forte, l'incapsulamento, l'ereditarietà ecc. Che credo si debba sempre imparare, non importa se li usano o meno. Successivamente, puoi sempre passare ad altri linguaggi come Python che non segue la standardizzazione della programmazione fondamentale.

L'altro fattore di aggiunta che le persone non aggiungono realmente all'aspetto di apprendimento di C # è la disponibilità del miglior IDE per qualsiasi lingua che abbia mai visto. Anche Eclipse IDE è buono, ma una volta che hai usato Visual Studio, ringrazierai Microsoft.

Il potenziamento di C # rispetto a C assicura che non sia necessario imparare altre lingue in anticipo. Tutte le lingue nell'arco di circa un decennio si sono evolute dalla natura di C, persino la JAVA.

Quindi, il verdetto è che C # è un ottimo punto di partenza che ti rende la possibilità di imparare altre lingue velocemente in futuro


Eclipse è molto meglio per me di Visual Studio. Ma sono d'accordo con te: C # sarebbe un ottimo linguaggio, specialmente se non fosse posseduto e bloccato nei malvagi standard proprietari che distruggono il signore oscuro di Redmond .
Thomas W,

2

Imparare C # come prima lingua non è un errore se prima o poi vai avanti e inizi ad imparare una seconda lingua. Questo è molto più importante. Ancora meglio se quella seconda lingua è in qualche modo diversa da C # (javascript o ruby ​​a questo proposito sarebbe meglio di java). Ogni lingua ha i suoi pro e contro, ed è le differenze che ti renderanno un programmatore migliore nel lungo periodo.


1

Per quanto ti consiglio di imparare molte lingue (come suggeriscono gli altri), assicurati di conoscere una (coppia) di lingue che impari molto bene.

Il rischio di conoscere molte lingue è che potresti non imparare mai una lingua completamente causando frustrazione quando in realtà vuoi risolvere un problema.

Conoscere la costruzione for-loop in molte lingue è divertente ma inutile se non sai come gestire gli errori in nessuna di esse.


1

Non preoccuparti per il fatto che ti è capitato di imparare prima C #. È come essere preoccupato che il tuo primo passo sia stato fatto con il piede sinistro o destro. L'unica differenza tra l'apprendimento di una lingua gestita per prima è che stai solo ritardando quando devi imparare i puntatori e la gestione dettagliata della memoria. Questo può effettivamente funzionare a tuo favore, dal momento che quando è il momento di imparare C l'unica cosa di cui ti preoccuperai è la gestione della memoria: non dovrai anche destreggiarti cercando di imparare le strutture di controllo, il concetto di funzioni, ecc. essere in grado di concentrarsi completamente su puntatori e gestione della memoria.

Lo stereotipo esiste perché ci sono programmatori di linguaggi gestiti che non hanno mai fatto quella seconda parte e imparato C e C ++ e quindi applicati ai lavori C e C ++.

È come imparare uno strumento musicale: il primo è difficile perché stai cercando di imparare la meccanica della lettura della musica scritta E la meccanica fisica dell'articolazione di uno strumento per fare quello che vuoi. Per il secondo e i successivi strumenti che impari puoi concentrarti esclusivamente su ciò che rende tale strumento diverso da ciò che già conosci.


1

È difficile per il principiante, senza dubbio. Ho fatto vb, javascript, PL / SQL, T-SQL, Uniface e un po 'di C # per citarne alcuni.

Qualcuno in precedenza ha menzionato Visual Basic come il luogo in cui ha appreso la programmazione orientata agli oggetti e, a dire il vero, VB.NET ha la sintassi più semplice da comprendere di qualsiasi linguaggio che abbia mai visto. La caratteristica migliore è che le parole chiave corrispondono ai concetti descritti da vicino.

ad es. la funzione myHandler () gestisce myButton.click

oppure Class Human Extends implementa intelligentLifeform nei mammiferi

Seriamente, per leggibilità quando sei un principiante, cos'altro vorresti che fosse la sintassi?

Quando cerchi proprietà e metodi (e distingui tra sottotitoli e funzioni) è molto più facile da leggere in VB.

Allo stesso modo quando si dichiarano le variabili

Dim myString Come stringa - ovvio quale sia il tipo e quale sia l'istanza

La distinzione tra maiuscole e minuscole in C # incoraggia ciò che per me è un'abitudine seria - avere lo stesso nome per classe e istanza con uno maiuscolo e uno inferiore.

per esempio

Umano umano

  • ci sono davvero poche parole nel tuo volcabolario che devi riutilizzare quelle esistenti con lettere maiuscole?

se chiami human.think, sarebbe facile confondere un'istanza per una classe e pensare che stavi chiamando un metodo statico a colpo d'occhio. E lo sguardo è spesso il modo in cui percepiamo il codice, non abbiamo tempo di passare il mouse su ogni singolo elemento per consentire all'editore di dirci cosa sta succedendo.

C # potrebbe avere alcuni vantaggi, ma è molto più difficile iniziare, anche se si risparmia la digitazione. Ecco perché dovrebbe esserci sicuramente un posto per entrambe le lingue.


+1 per Umano umano. Avere c # come seconda lingua (bread and butter = Delphi) tramite un libro piuttosto che avere una profonda esperienza con il codice esistente, mi fa sempre male al cervello vedere questo. Anche se ci sono parti del linguaggio che mi sono piaciute molto, trascinare la distinzione tra maiuscole e minuscole da C è stato un grosso errore IMHO.
Matt Allwood,

Certo, perché Dim myHuman as Humanè molto meglio? : D
scrwtp,

0

Il più grande svantaggio che posso vedere è che Visual Studio e gli strumenti associati sono molto, molto belli - cose come intellisense e completamento del codice possono facilmente diventare stampelle. In genere direi che l'ambiente può essere così bello e di supporto che tendi a sentirti un po 'perso quando devi, diciamo, andare hackerare il codice ruby ​​in un editor di testo. Oh, e di solito ti mancheranno cose come Linq.


0

C # va benissimo per iniziare a programmare.

È quello che mi è stato detto di iniziare, senza nemmeno avere la possibilità di dilettarmi in qualsiasi altra cosa (a parte Hello World in Java, alcune cose di LOGO di base e alcune cose in Scratch, ma niente di "serio").

Nel complesso, può essere difficile - ci sono molte cose che non sembrano intuitive e ha i suoi limiti, ma penso che incoraggia una buona codifica ed è fantastico una volta che ne hai capito. Voglio dire, ti dà più potenza ed è un po 'più professionale di Python (che di solito viene suggerito), e questo farebbe un mondo di differenza: provare C ++ dopo C # non è stato troppo doloroso, ma se avessi iniziato con Python, allora sarebbe davvero un grosso ostacolo, anche solo a livello di sintassi.

Inoltre, ha un buon supporto multipiattaforma sotto forma di Mono (per quelli di voi che pensano che Mono non sia un grosso problema - Unity Game Engine ti consente di codificare in una versione di esso). È anche molto utile per la maggior parte delle cose, che si tratti di script di gioco, progettazione Web o applicazioni Windows. Certo, alcune lingue saranno migliori per alcune linee, quindi dipenderà dalla direzione generale in cui stai pianificando di andare - ad esempio, se stai andando nella direzione del web, C # (ASP.NET) sarebbe sicuramente un buona idea. Se hai intenzione di entrare nei giochi, allora dovresti pensare al C ++.

Alla fine, vale la pena impararlo, anche se non finisci per usarlo a favore della semplicità di Python o della natura arcaica di Java (poiché il ciclo di rilascio di Java è DAVVERO lento) - impari un buon codice pratiche, pur non essendo troppo complicato per un principiante da imparare.


questo post è piuttosto difficile da leggere (wall of text). Ti dispiacerebbe modificarlo in una forma migliore?
moscerino del

1
Come va? Ancora difficile da leggere, o ok adesso? Grazie comunque per l'heads up.
Sbspider,

-1

Per essere un programmatore devi avere passione. I programmatori che conosco sono quelli che fanno di tutto per imparare e notare i cambiamenti del settore. Ho iniziato la mia programmazione basandomi su un Commodore Vic 20 (sì, quel vecchio) e ho continuato ad andare su altre nuove lingue. Parte dei miei anni di programmazione includeva persino COBOL. Ho anche iniziato a notare che alcune lingue funzionavano meglio in alcuni processi rispetto ad altre. Il mio consiglio è di imparare qualsiasi lingua e comprendere concetti di programmazione di base come cicli, metodi, confronti. La maggior parte delle lingue supporta questi tre concetti. Non dovresti mai dire "Questo è il modo migliore", ma piuttosto "Come posso migliorare questo". La cosa peggiore di quest'ultima frase è che potresti sorprendere l'ingegneria. La programmazione è divertente, rendila divertente! Internet ha aperto un modo completamente nuovo di sperimentare la programmazione perché il livello di accesso alle informazioni oggi è sconcertante. Per me prima di Internet dovevo andare sullo scaffale e tirare giù i libri di programmazione GRIGIO IBM e imparare. Oggi puoi semplicemente digitare una cosa in google e whammo.


2
questo post è piuttosto difficile da leggere (wall of text). Ti dispiacerebbe modificarlo in una forma migliore?
moscerino del

-3

Wow molte risposte. Ecco il mio punto di vista:

C # non è un posto dove imparare l'informatica. Lo vedo come un'idea estremamente negativa. Di seguito elencherò alcune delle mie preoccupazioni.

  • C # è un linguaggio Microsoft. Non che io stia giudicando la SM qui, solo che al di fuori del mondo della SM c'è poca accettazione. Se vuoi solo programmare l'hardware MS, vai avanti ma non vedo questo approccio solido all'informatica.
  • Non sono un grande fan di imparare a programmare con le lingue gestite. Credo che il loro valore sia imparare a gestire la memoria di un programma e la costruzione di strutture di dati.

Troppo stanco per andare avanti così rapidamente scegliere un'altra lingua.


Posso capire se pensi che legarti alla SM sarebbe dannoso per la tua carriera. Ma cosa c'entra questo con l'apprendimento dell'informatica? CS non ha nulla a che fare con piattaforme o società.
svick,

-3

Consiglierei C # o qualsiasi lingua che offra queste tre cose alla base:

Completamente tipizzato Compilato e completamente orientato agli oggetti.

Un primo linguaggio che offre questi tre core insegnerà molto sul flusso del programma, sulla sintassi e su come risolvere i problemi in modo più strutturato. Vivo e respiro in un mucchio di grandi lingue che non hanno questi attributi, ma se insegnassi a qualcuno una lingua ne sceglierei una che avesse questi tre requisiti.


-6

No, quella risposta è terribile. Perché? Bene, prescrive dei buoni libri che dovresti leggere, ma senza il lavoro in classe e il lavoro di laboratorio, sarai perso e frustrato. Devi stare con un gruppo di altri nuovi programmatori a sperimentare perché c'è davvero tanto da imparare oltre a quello che c'è in quei libri. Non sto dicendo che devi andare per un BSCS, ma hai bisogno di accedere anche a un istruttore esperto quando un'intera serie di cose può andare storta in qualsiasi momento, come problemi del compilatore, ambienti di costruzione ... lo chiami. Non sarai un programmatore che lavora nel vuoto. Qualunque libro richiedano i tuoi corsi sarà abbastanza buono finché sceglierai una scuola decente a metà strada.

Quindi, iscriviti ad alcune lezioni e sarà MOLTO più divertente! Inoltre, se hai intenzione di trovare un lavoro come programmatore, hai bisogno di connessioni e sentirai tutto il brusio delle aziende che reclutano nel campus, ecc.

Infine, l'educazione formale è molto importante in quanto la programmazione richiede molte conoscenze teoriche di base per capire come le cose dovrebbero funzionare a tutti i livelli (hw / sw) in modo da poter capire come sistemare le cose. Quasi tutto è una scatola nera, quindi devi essere in grado di capire perché qualcosa si sta comportando così, così puoi prendere la prossima pugnalata logica nel buio. Senza almeno un corso di laurea di 2 anni (qualunque cosa tu lo chiami) sarai in svantaggio.

PS Non mi avvicinerei a .Net, o C #, fino a quando non avessi sperimentato Java. C # non è piacevole alla vista. È un codice dall'aspetto disordinato e ingombrante. L'IDE .Net fa schifo. È nei secoli bui degli standard IDE. Java: C # ~ Dati: Lore


10
Sono con te fino all'ultimo paragrafo. Afferma la tua opinione sull'estetica di C # in modo così infiammatorio che sembra non appartenere a una risposta altrimenti buona.
Adam Lear

9
Anche prima dell'ultimo paragrafo, questo è per lo più senza senso. Alcune persone imparano bene in un ambiente di classe, ma per altri è una totale perdita di tempo. L'apprendimento del background teorico è importante, ma ciò non richiede necessariamente nemmeno un'aula o un'istruzione formale: aiutano alcune persone, ma non (nemmeno vicino a) tutti.
Jerry Coffin,

Un'opinione è proprio questo; non è una dichiarazione di fatto. Quindi, non sentirti offeso.
Tom Jones,

Hai frainteso la raccomandazione per l'istruzione formale. Hai bisogno di un posto dove porre domande e collaborare con i tuoi colleghi in laboratorio. La collaborazione è il concetto chiave. Mi dispiace se sei un utente C # e ti ho offeso anche se ciò dovrebbe essere impossibile tra i tecnici spassionati.
Tom Jones,

1
Stackoverflow è diventato quel "laboratorio" per molte persone che non possono andare al college ma vogliono il supporto della comunità. È lo stesso di una lezione? Ovviamente no. È abbastanza buono? Scommetti.
BlackJack,
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.