Sta imparando a usare C (o C ++) come requisito per essere un buon programmatore (eccellente)? [chiuso]

25

Quando ho iniziato a imparare come programmare, real i programmatori potevano scrivere assembly nel loro sonno. Qualsiasi scuola seria in informatica includerebbe un strong addestramento e pratica nella programmazione mediante l'assemblaggio. Da allora è cambiato, al punto che vedo i titoli di Informatica con assemblea, se inclusi, è relegato a un incarico, e un capitolo, per un totale di due settimane di lavoro su una scuola di 4 anni.

La programmazione C / C ++ sembra aver seguito un percorso simile. Non sono più sorpreso di intervistare laureati che non hanno trascorso più di due settimane a programmare in C ++ e di aver letto solo C in un libro da qualche parte. Mentre i gradi CS più gravi sembrano ancora includere un apprendimento significativo del tempo e l'utilizzo di una o entrambe le lingue, la tendenza è chiaramente verso il C / C ++ meno applicato a scuola.

È chiaramente possibile fare carriera producendo un buon lavoro senza mai leggere o scrivere una singola riga di codice C o C ++.

Dato tutto questo, imparare le due lingue vale lo sforzo? Sono obbligati a eccellere? (oltre il consiglio ovvio, non specifico del linguaggio, come "una buona selezione di lingue è probabilmente importante per un'istruzione completa", e "probabilmente è una buona idea continuare a provare e imparare nuove lingue durante la carriera di un programmatore, solo per allungare le celle grigie ")

    
posta blueberryfields 02.12.2011 - 06:24
fonte

22 risposte

62

Joel Spolsky (sì, quello Joel) ha sostenuto un po 'di tempo che reale i programmatori più esperti sanno usare i linguaggi più difficili (come C, C ++ e Lisp) e i loro costrutti (come i puntatori e le funzionalità) e che i linguaggi di livello superiore non erano "abbastanza" sufficienti per dimostrare la tua competenza.

Riesco a capire il suo punto di vista sul fatto che le persone che conoscono C e C ++ e che sono effettivamente bravi sanno molto di più su ciò che accade sotto le quinte di persone che, per esempio, programmano in Ruby (e solo in Ruby). Direi che va così: se conosci un linguaggio "difficile", è probabilmente una buona prova che sei in grado di programmare rispettando i severi vincoli o di padroneggiare modi di pensare complessi. Se sei bravo in un linguaggio di alto livello, potresti anche essere in grado di programmare rispettando i severi vincoli, ma non ce ne sono prove.

Non penso che l'apprendimento di C o C ++ danneggi il tuo cervello (alcune persone sembrano crederci comunque). In realtà, impararlo solo per apprezzare i migliori linguaggi di alto livello potrebbe essere una buona idea.

    
risposta data 01.02.2011 - 06:00
fonte
33

Sì, è necessario conoscere C (o C ++) per essere un eccellente programmatore (nei nostri tempi attuali).

Non è la lingua in sé, è l'ambiente.

I programmi non funzionano nel vuoto. Eccellente programmatore conosce il suo ambiente, come il grande scultore conosce il suo materiale. Il nostro attuale ambiente di programmazione (sistemi operativi, compilatori, networking, ecc.) È basato su C / C ++.

Eccellente programmatore scrive programmi efficienti e li mette a punto in situazioni reali. Deve conoscere l'ambiente e al giorno d'oggi richiede conoscere C / C ++.

Modifica: non resiste all'aggiunta del riferimento Matrix. Morpheus potrebbe chiedere: vuoi prendere la pillola Java e continuare a vivere in un mondo constrongvole fornito dalla macchina virtuale? O prendi la pillola C e vedi quanto è profonda la tana del coniglio?

    
risposta data 01.02.2011 - 09:48
fonte
20

Devo fare riferimento a un altro articolo di Joel. In La legge delle astrazioni deboli , l'apprendimento di linguaggi come C, Lisp, C ++ e le lingue che comportano la gestione della memoria coinvolgono anche imparare un modo di pensare che ci definisce per il resto delle nostre carriere.

Il mio professore della mia classe Data Structures and Algorithms, William Spears, ha detto a una stanza piena di scettici studenti di Computer Science perché non stavamo imparando gli ultimi strumenti. Gli studenti si sono lamentati che si sentivano come se non fossero preparati per il "mondo reale" perché non stavamo imparando Java. Non stavamo imparando JavaScript. Non c'erano classi su HTML. Non stavamo imparando [[INSERT TECHNOLOGY HERE]].

Perché non stavamo imparando gli ultimi strumenti? Secondo il nostro professore, la tecnologia cambia così velocemente che in 4 anni gli strumenti che impariamo potrebbero essere obsoleti. Bene, dopo alcuni anni nel settore, dovrei dire che sono d'accordo con la sua valutazione.

Lo scopo di un'educazione informatica è imparare come imparare. Capire le soluzioni a molti problemi nello sviluppo spesso richiede una capacità di pensare fuori dagli schemi che può venire solo dall'apprendimento di base, fondamentale, sotto la cappa, Computer Science grezzo che viene dal lavorare con C, C ++ e Lisp.

Quando quelle astrazioni nel mondo reale perdono, e lo faranno, una comprensione delle basi è ciò che separa la media dal migliore.

    
risposta data 01.02.2011 - 07:06
fonte
18

Lasciami dire così. Supponiamo che tu abbia bisogno di assumere qualcuno per svolgere un lavoro in C ++, e qualcuno applica chi ha fatto un progetto in C ++ all'università, ma ha programmato solo in Java sin dalla laurea. Viceversa, diciamo che era necessario assumere qualcuno per un lavoro di Java, e qualcuno applica chi ha fatto un progetto Java al college, ma ha programmato solo in C ++ sin dalla laurea.

Chi hai intenzione di assumere più a tuo agio? Discuterei il tipo C ++, dal momento che passare a usare un linguaggio di raccolta dei rifiuti è molto più facile che allontanarsi da uno. Allo stesso modo per altri concetti e altri linguaggi, come il passaggio da una versione compilata a una interpretazione, o dalla tipizzazione statica a quella dinamica. In quasi tutte le funzionalità di confronto delle funzionalità è possibile fare tra le lingue, il C ++ si presenta alla fine difficile, il che lo rende difficile da programmare, ma anche una base di riferimento eccellente per giudicare un programmatore.

Riesci a prosperare in una carriera senza mai toccare il codice C o C ++? Certo, ma non vorrei ancora assumere qualcuno che non è in grado o ha paura di farlo.

    
risposta data 01.02.2011 - 08:32
fonte
13

No, non è necessario imparare C o C ++ per essere un buon programmatore, ma comprenderlo aiuterebbe a chiarire alcuni concetti di base come la gestione della memoria.

    
risposta data 01.02.2011 - 04:59
fonte
7

is learning the two languages worth the effort?

È chiaramente possibile fare carriera producendo un buon lavoro senza mai leggere o scrivere una singola riga di codice C o C ++.

    
risposta data 01.02.2011 - 04:52
fonte
6

In breve, no non lo sono. Sono lingue utili da imparare, ma puoi facilmente essere un eccellente programmatore senza toccare una riga di C o C ++. I programmatori più eccellenti probabilmente li avranno toccati ma non è questo il punto: in molte applicazioni in questi giorni non vengono utilizzati quasi quanto .NET e Java, e come tale la loro necessità è leggermente diminuita.

Nota che non sto dicendo che non valga la pena di imparare, penso che siano entrambe lingue importanti da imparare, specialmente se hai intenzione di fare carriera fuori dalla programmazione. Ma puoi essere un programmatore decente senza averlo mai toccato? Certo.

    
risposta data 01.02.2011 - 17:20
fonte
5

Dipende dai tuoi interessi.
Se vuoi essere nella programmazione di sistema, sì, devi imparare C / C ++ perché sono default lingue di CS . Per familiarizzare con i concetti del sistema operativo, i compilatori, le strutture dati, la gestione della memoria ecc. È necessario conoscere C / C ++. Inoltre sono disponibili tonnellate di buoni testi, libri e articoli su C / C ++ che ottimizzeranno le tue capacità di programmazione. Pochi giorni fa in / * Programmers * / ho letto un'ottima risposta per Perché C - Perché è vicino al metallo .
In alternativa, se vuoi limitarti alla programmazione delle applicazioni, non è necessario andare in C / C ++, iniziare direttamente con C # (.Net) / Java e otterrai un buon lavoro da sviluppatore. Ma se ami davvero la programmazione hardcore sono sicuro che un giorno inizierai ad imparare C / C ++.

    
risposta data 01.02.2011 - 06:23
fonte
3

Dipende totalmente da quale dominio applicativo vuoi lavorare. Se vuoi giocare nel panorama embedded, devi conoscere C o C ++. Il C ++ è probabilmente anche il linguaggio più comunemente utilizzato nello sviluppo del gioco. Se vuoi lavorare su applicazioni web, allora C o C ++ potrebbe non essere così importante. Non esiste un linguaggio che abbia il prestigio di essere tenuto a sapere come un precedente per la definizione di un buon ingegnere del software.

    
risposta data 01.02.2011 - 05:44
fonte
3

C è stato nominato "assemblaggio portabile" che è molto vero. È stato progettato per rendere portatile Unix attraverso i processori e descrivere il codice molto vicino al set di istruzioni del processore sottostante.

Se trovi che ti piacerebbe lavorare vicino all'hardware vero e proprio, trovandoti in software embedded o driver di dispositivo, ecc., non c'è modo di aggirare C. Se vuoi lavorare in modo più mainstream i linguaggi di alto livello sono un'idea migliore poiché molte delle funzionalità che rendono C potente anche rendono pericoloso C in modo che siano stati attenuati o semplicemente rimossi.

Personalmente ritengo molto importante capire che cosa alla fine dovrà eseguire i tuoi programmi, dal momento che molte decisioni di progettazione dipendono da questo, quindi dovresti almeno avere familiarità con come mappare il codice sul set di istruzioni di assemblaggio e come funziona nell'hardware attuale. Quelle cose che date per scontate in realtà prendetevi del tempo da fare e perché.

Quindi suggerirei almeno di dare un'occhiata a C e ad alcuni codici aritmetici avanzati del puntatore, in modo da sapere che cosa non devono gestire quotidianamente.

    
risposta data 01.02.2011 - 08:30
fonte
1

C è utile da imparare perché è vicino al silicio. Il linguaggio C o assembly ti darà un'idea di cosa possono fare i computer e come lo fanno, e questo è probabilmente utile per capire cosa è possibile e cosa è pratico. Inoltre, c'è un sacco di codice C là fuori che potresti essere interessato a, e molti altri linguaggi moderni usano gran parte della sua sintassi e semantica.

C ++ è un linguaggio di livello superiore che ha alcune caratteristiche molto interessanti. Ha molti buoni usi ed è un linguaggio potente. D'altra parte, ci sono molte altre lingue utili e potenti là fuori.

Quindi raccomando vivamente di imparare cosa succede ai livelli più bassi, e C è un modo eccellente per impararli, quindi consiglio vivamente di imparare C. C ++ è facoltativo; impararlo ti insegnerà le cose, ma ci sono altri modi per imparare la maggior parte di loro, e se stai già lavorando in una lingua ufficiale ci sono lingue migliori per imparare a raccogliere nuovi concetti.

    
risposta data 01.02.2011 - 17:09
fonte
0

Dipende dal tipo di software che pensi di fare. I giochi sono spesso scritti in C / C ++ in quanto è classicamente un linguaggio più ottimizzato quando si tratta del codice eseguibile. Quello che codice è solo su ciò che ottieni, in un certo senso.

Detto questo, C # è stato anche usato per programmare i giochi. C # è probabilmente una delle le migliori lingue per lo sviluppo di applicazioni desktop, almeno sulla piattaforma Windows.

Insieme a Visual Studio, C # è diventato quasi l'unico linguaggio di sviluppo del software che utilizzo (eccitando linguaggi come SQL e PHP ecc.) a mio parere. fantastico fantastico . / p>

Se sviluppi su Windows, ti consiglio vivamente di imparare C # .NET insieme a qualsiasi altra cosa.

Non credo che il C ++ sia di per sé un requisito, ma è bello avere una conoscenza di livello inferiore dei puntatori, della gestione della memoria e di altri concetti.

    
risposta data 01.02.2011 - 05:37
fonte
0

@Nick Bedford ha ragione riguardo al dominio in cui stai lavorando. Le mie controparti software scrivono driver di dispositivo e software incorporato. C è il modo di andare lì. E non pensare al C ++ come seconda lingua, hanno un'enorme sovrapposizione.

    
risposta data 01.02.2011 - 05:59
fonte
0

Molti hanno detto che C è buono da imparare per la gestione della memoria e sono d'accordo. Per la mia opinione sull'apprendimento C è che è molto bello imparare per imparare come eseguire il debug di un programma. Molto può andare storto nella scrittura di C che richiede di pensare a come si dovrebbe eseguire il debug dei programmi. Uso raramente uno strumento di debug in qualsiasi mia programmazione (in C o in altre lingue) semplicemente perché C mi ha insegnato come aggiungere utilità di debug integrate nei programmi.

L'apprendimento C / C ++ è richiesto per una carriera? No, ma ho anche visto un lotto di sviluppatori Java che non conoscono molte basi di programmazione perché hanno imparato solo Java. Lo stesso con i programmatori Perl. Imparare più di una lingua dovrebbe essere un requisito per una carriera, se C / C ++ è una di quelle lingue o no.

    
risposta data 01.02.2011 - 06:08
fonte
0

All'inizio, pensavo che la mia università fosse nella generazione di Dennis M. Ritchie per aver incluso C per 2 semestri quando ci sono molti nuovi linguaggi relativamente nuovi come Java, Visual Basic e cetera. Ma il fatto è, o almeno ora credo, C è uno dei migliori linguaggi che ti aiutano a capire i concetti fondamentali della programmazione.

E sulla carriera senza imparare C (o C ++) - Sì, è possibile, ma l'apprendimento C mostrerà le tue conoscenze nella programmazione.

    
risposta data 01.02.2011 - 14:01
fonte
0

La risposta per me era sì. Sia C che C ++ richiedevano corsi nel mio corso di laurea in CS e ritengo che avere un diploma di laurea o un diploma correlato sia un requisito minimo per essere un "buon programmatore". Inoltre, essere un "buon programmatore" significa essere in grado di razionalizzare i problemi che si verificano e capire perché qualcosa non funziona come ci si potrebbe aspettare. Troppe volte nella mia carriera ho assistito al fatto che alcuni individui erano storditi dai problemi e pensavano che ci fossero forze soprannaturali che lavoravano contro di loro ... è ridicolo.

IMO, la conoscenza di C dimostra la capacità di comprendere uno qualsiasi dei linguaggi imperativi e risolvere i problemi utilizzando uno degli strumenti più potenti mai inventati dall'umanità.

    
risposta data 01.02.2011 - 21:13
fonte
0

Un programmatore ben arrotondato ha diversi sacchetti di trucchi nella manica, e questi includono:

1) Programmazione a basso livello ... C al minimo. Alcuni assemblamenti non farebbero male.

2) Programmazione funzionale ... Un linguaggio funzionale puro, non un ibrido. Scheme funziona qui.

3) OOP ... Normalmente direi smalltalk, ma suppongo che potremmo andare con Java ora.

    
risposta data 02.02.2011 - 14:23
fonte
0

C è la madre di tutti i linguaggi di programmazione .... le conoscenze specialistiche in C ti aiutano a conoscere a fondo qualsiasi altra lingua come Java in breve tempo.

C ++ è un gioco di palla completamente diverso ed è il più complesso tra tutti.

    
risposta data 04.02.2011 - 13:57
fonte
0

Non è necessario imparare che C o C ++ sia un buon programmatore (eccellente), tuttavia è necessario imparare Assemblaggio per essere un buon programmatore (eccellente). Un'eccellente programmazione significa ottimizzare la memoria, l'Mhz, la larghezza di banda, i vincoli di potenza e quindi scegliere il miglior design e / o implementazione per portare a termine il compito. Tra gli informatici la principale debolezza è ancora, dopo decenni di tecnologie in evoluzione, con la gestione dei dati in modo ottimale. Questo è un insieme di abilità insegnate scrivendo Assembly (qualsiasi assembly, potrebbe essere ARM, o MIPS o x86, o un microcontrollore, o un DSP, o anche inferiore, tramite verilog / VHDL).

    
risposta data 12.08.2011 - 21:02
fonte
0

Avendo usato con competenza c, c ++, assembly e Lisp direi che non ha senso imparare un linguaggio particolare per essere un buon programmatore. Le mie esperienze con ciò che rende un buon programmatore è in grado di pensare in modo da risolvere i problemi. Le lingue ti consentono solo di esprimere le tue capacità di problem solving. Ad esempio, la semplicità di C consente di esprimere facilmente gli algoritmi, mentre Lisp consente di risolvere i problemi in modo ricorsivo. Quindi una lingua non ti rende un programmatore. Devi essere un risolutore di problemi prima di diventare un buon programmatore. Le lingue sono solo strumenti che usi per risolvere i problemi. Per esempio, ho quasi fatto domanda per un brevetto su un'implementazione logica di programmazione, ho pensato a dove l'unico modo per esprimere quell'implementazione era attraverso l'uso del linguaggio assembly poiché non esistevano compilatori che potessero implementarlo.

    
risposta data 30.05.2012 - 07:22
fonte
-1

Vale la pena di imparare C semplicemente per acquisire una solida conoscenza della gestione della memoria. Idem per C ++ tranne che con l'obiettivo di apprendere strutture dati.

    
risposta data 01.02.2011 - 05:21
fonte
-1

No. Ci sono un sacco di programmatori schifosi che scrivono codice C / C ++. Ciò che ti renderà un buon programmatore è capire quando e perché dovresti scrivere qualcosa in C / C ++

    
risposta data 02.02.2011 - 15:02
fonte

Leggi altre domande sui tag