la codifica è importante? [chiuso]


9

La codifica è importante per essere bravi in ​​informatica? Si dovrebbe implementare l'algoritmo per conoscerlo bene?

Ricordo il linguaggio di un professore cs che " non ho mai codice"


32
Stai chiedendo a un gruppo di programmatori se la codifica è importante ... potresti non ottenere esattamente una risposta imparziale.
Rachel,

25
Con tutto il rispetto per il linguaggio del tuo professore, se non scrive codice, non è qualificato per insegnare agli altri come scrivere codice. Se il suo insegnamento è puramente teorico, trarrebbe comunque vantaggio dall'avere capacità di programmazione.
Robert Harvey,

19
Prenderesti lezioni di nuoto da qualcuno che non sa nuotare?
Steven A. Lowe,

5
@Steven A. Lowe: penso che il professore non nuotatore insegna fisiologia acquatica, non nuoto. Tuttavia, se non nuota, dubiterei che sappia come si sente la narcosi da azoto.
Javier,

4
@Javier: più probabilmente insegnerà demolizioni sottomarine, ma non è nemmeno certificato SCUBA. Il termine tecnico per persone del genere (diverso da "professore") è "poseur" ;-)
Steven A. Lowe,

Risposte:


27

Non sarà davvero conoscere l'algoritmo bene fino a quando si codifica esso.


3
questo non è necessariamente vero, si può capire un algoritmo e applicarlo a una situazione o problema senza realmente codificarlo.
aggietech,

10
@aggietech: penso che la parola chiave qui sia "bene".
Robert Harvey,

2
@aggietech, Robert ha capito bene. Posso fare da pappagallo agli algoritmi, ma quando provo davvero a farli funzionare, scopro quanto devo imparare.

3
se stai parlando di for-loop e bubble-sort, allora non è un grosso problema, ma c'è un'enorme differenza tra leggere un libro sull'algoritmo genetico e risolvere effettivamente i problemi del mondo reale
Steven A. Lowe,

2
@Steven, sì, la complessità ha molto a che fare con questo.

19

La codifica non è importante per il tuo professore, ma devi tenere presente che non è pagato per fare le cose. È pagato per dire cose (e scrivere cose).

Sono un ex professore di matematica, quindi capisco bene questa dinamica.

Se vuoi seguire il suo percorso ed essere un teorico informatico, allora sì, la programmazione è di minore importanza. Ma se lo fai, ricorda di mantenere l'umiltà, sapendo che il tuo stipendio è pagato dalle risorse guadagnate da coloro che hanno scelto di FARE cose.


3
La voce dell'esperienza. Questo è il miglior riassunto della cattedra che penso di aver visto.
TehShrike il

1
Sì, e aggiungerei che devi praticare il "fare" se vuoi insegnare agli altri a "fare" bene.
Beth Whitezel,

@BitOff: sono d'accordo, ma il "if" è anche un "solo se". Un professore che non codifica mai non ha attività di insegnamento dello sviluppo di software, ma potrebbe essere perfettamente adatto all'insegnamento, per esempio, alla teoria della complessità. In questo caso, ciò che sta insegnando agli studenti è come dimostrare i teoremi, quindi l'unico requisito è che deve avere pratica per dimostrare i teoremi (non la codifica).
ShreevatsaR il

@ShreevatsaR Sì, sono d'accordo. E in realtà non sono poi così severo sul fatto che in pratica codificano molto. I bravi programmatori raramente sono bravi insegnanti. Se l'insegnante conosce i loro punti settimanali, può compensare. Abbiamo un programma a livello locale che porta le persone del settore in classe. L'insegnante è un esperto nell'insegnamento, sa programmare e sa come estrarre le informazioni dalla persona del settore a beneficio degli studenti.
Beth Whitezel,

16

L'informatica non riguarda più i computer di quanto l'astronomia riguardi i telescopi

- Edsger Dijkstra

Tendo ad essere d'accordo.


2
Ok, ma come si collega alla domanda?
Robert Harvey,

2
"La codifica è importante per essere bravi in ​​informatica?" Se un computer non è correlato, come potrebbe essere importante la codifica fisica del computer?
ElGringoGrande,

1
@Robert Harvey: L'informatica non riguarda esplicitamente i computer e molti astronomi passano poco tempo a guardare attraverso le lenti di vetro. Alcuni semplicemente analizzano i risultati. La metà delle scoperte importanti nella programmazione del computer erano note prima ancora che il computer diventasse realtà.
Orbling

2
@Robert Harvey: l'informatica semplicemente non riguarda il modo di programmare, è la scienza del calcolo. Al di fuori della pura codifica binaria usi un linguaggio, che è un'astrazione, per implementare le teorie e le scoperte dell'informatica. Ci sono molte idee nell'informatica (es. Informatica quantistica) che la programmazione non può realizzare pienamente. Tutto quello che sto dicendo è che tutte le idee dell'informatica possono essere espresse in modo completo ed elegante senza usare un linguaggio di programmazione. Nominane uno che non può.
ElGringoGrande,

3
@Orbling: molto vero. Ad esempio, ricorda che Turing ha inventato l'idea della macchina universale Turing prima ancora che il primo computer elettronico fosse creato. Il fatto che non abbia scritto tonnellate di codice lo rende uno scienziato informatico incompetente?
mipadi,

11

Se stai parlando di essere un puro accademico di Informatica specializzato in concetti di Informatica di base astratti, allora non necessariamente.

Per piegare un'analogia: è un po 'come chiedere se ogni scienziato missilistico della NASA debba volare nello spazio per essere un "buon scienziato missilistico". Ovviamente no. Essere un astronauta fa parte dell'industria del volo spaziale e una parte molto pratica, ma ciò non significa che gli scienziati di terra non siano altrettanto importanti a modo loro.

Detto questo, probabilmente è una buona idea APPLICARE l'algoritmo che ha creato, se non addirittura scriverlo in un vero linguaggio di programmazione. In questo senso, puoi pensare al design dell'algoritmo come una branca della matematica.


1
Penso che sia giusto dire che tutti gli scienziati missilistici della NASA hanno una solida base nella scienza missilistica e una profonda esperienza pratica con l'ingegneria meccanica ed elettrica. Oh, e generalmente sanno anche scrivere codice.
Robert Harvey,

3
Penso che abbiano calcolato molte traiettorie, non solo teorizzato su come.

3
+1, aggiungerei un altro esempio: non devi avere esperienza nella vinificazione per essere un grande somellier (o come si chiamano i ragazzi della degustazione).
Jas,

2
@Jas: terribile analogia. Gli informatici non sono i destinatari del prodotto finale. Essi sono i produttori di vino.
doppelgreener,

1
@Axidos No, no, sono i viticoltori .
Segna C il

9

La codifica non è molto importante per essere un vero scienziato informatico. E pensare nel codice può limitare il pensiero mentre cercano di sviluppare utili concetti astratti. I programmatori più eccellenti non hanno le braciole intellettuali per analizzare algoritmi complessi o sviluppare concetti come linguaggi di programmazione, algoritmi di ricerca e ordinamento avanzati, teoria degli automi finiti, teoria dell'informatica distribuita, alberi a R, protocolli di tolleranza agli errori, protocolli di comunicazione affidabili, digitali algoritmi di elaborazione del segnale, teoria crittografica, analisi delle prestazioni e ottimizzazione, memorizzazione nella cache efficiente, riduzione della mappa, protocolli di sicurezza affidabili, ecc. I programmatori e gli ingegneri informatici eccellenti di solito possono usare queste teorie nei sistemi che stanno cercando di costruire e farlo in modo abbastanza efficace, ma quello è davvero il regno dell'ingegnere dei sistemi informatici o del programmatore di computer.

La codifica è di fondamentale importanza per essere un programmatore di computer. È anche utile capire come codificare gli utili concetti astratti prodotti dagli informatici nel codice di lavoro.

Un grosso problema nell'informatica è che spesso devono trovare soluzioni ai problemi matematici che hanno poca utilità nel risolvere i problemi di programmazione odierni. Anche se codificassero una soluzione, nessuno sarebbe davvero in grado di usarla. Pensa alla teoria dell'elaborazione del segnale digitale. È stato inventato da persone come Fourier, Hilbert e Shannon, ma l'applicazione a problemi informatici di DSP non era ampiamente possibile fino a circa 20 anni fa.

Il grosso problema dell'educazione informatica è che la maggior parte delle persone insegnate dagli informatici non diventeranno informatici. Ma troppi scienziati informatici non lo capiscono. La codifica potrebbe non essere importante per loro, ma se sei nella loro classe, quasi sicuramente sarà importante per te.

Un altro grosso problema nell'educazione informatica è che molti veri informatici mancano dell'esperienza industriale per essere utili nell'insegnamento dello sviluppo del software. Stanno essenzialmente cercando di insegnare qualcosa che in realtà non sanno. Ciò li fa perdere credibilità. Le cose che sono importanti in un ambiente industriale spesso non si registrano spesso con alcuni di questi scienziati informatici.

La codifica lunga e breve è importante per la maggior parte delle persone che diventano "scienziati informatici" perché la maggior parte di queste persone diventeranno programmatori di computer e ingegneri di sistemi informatici.


Ottima risposta, direttamente al cuore del problema. Il problema è che devi imparare entrambi: scienze computazionali e ingegneria del software rilevanti per l'industria. La maggior parte delle università insegna l'una meglio dell'altra, di solito la prima - non è eccessivamente facile conseguire la seconda poiché un'università è intrinsecamente un istituto di ricerca, che promuove la prima e ha poco a che fare con la seconda. Questo è un problema nella maggior parte dei campi pratici.
Orbling

3

Dipende dal sottocampo in cui si trova il professore.

Chiunque sia competente nell'analisi numerica è probabilmente un mago Fortran. Qualsiasi professore di intelligenza artificiale codificherà in Lisp o Prolog o qualcosa del genere.

In alcune delle aree più matematiche, non è davvero necessario codificare. Sarei ancora un po 'sospettoso, me stesso.


2

Sembra che sia più un tipo discreto di matematica ... solo nella matematica e nella teoria dietro l'informatica. Prendi quello che questi tipi di professori hanno da dire con un granello di sale.


5
Sono appassionato di matematica e appassionato di algoritmi. Mi piace sempre programmare. Tuttavia, gli algoritmi sono alla base della codifica. Penso che 1 penna e 1 documento siano sufficienti per gli algoritmi e anche la teoria del calcolo. Quello che faccio oggi è solo pensare e scrivere algoritmi ma non scrivere codice
Hilal

5
Prendi quello che dice un professore con un granello di sale. Se è un ragazzo di matematica discreto, prendilo sul serio quando parla di matematica discreta, non quando parla di programmazione o ingegneria del software.
David Thornley,

1
I ragazzi di matematica discreti sono tra i più importanti nel campo, la teoria è implementata dai programmatori, non ha bisogno di essere implementata per essere dimostrata corretta. Pizzico di sale davvero.
Orbling

@Orbling E prendi quello che dicono quelli che programmano (un ampio gruppo) con una dose simile di giudizio sospeso e buon senso.
Segna C il

@Mark C: Beh sì, esorto tutti a prendere tutto ciò che viene detto da chiunque abbia quelle dosi.
Orbling


2

Puoi cavartela solo con la comprensione della teoria, ma ho sempre scoperto di aver compreso meglio gli algoritmi e simili 1000x dopo averli codificati (Bubble sort vs. Quicksort, ad esempio, è bello conoscere il Big-O ma vederlo in pratica con dati di grandi dimensioni -sets ti dà un certo apprezzamento nel mondo reale per misurare la complessità computazionale).

Una cosa interessante che ho scoperto è che più studi gli aspetti teorici dell'informatica più diventa semplice la codifica. Ad un certo punto smetti di pensare alle cose in una lingua particolare, ma piuttosto le vedi come i concetti più ampi di sience del computer.


2

È come chiedere a tutti i professori inglesi di scrivere film, serie TV, romanzi, opere teatrali e poesie nella mia mente. Allo stesso modo, immagina un professore di matematica che non usa mai numeri per un'idea altrettanto stravagante. Vale a dire che ci sono alcuni elementi di base che danno al codice una certa importanza nel poter insegnare Informatica di base. Quindi il professore dovrebbe conoscere la sintassi del linguaggio di base e come scrivere programmi sofisticati come i corsi che il professore sta insegnando. Se il professore insegna sulla progettazione del compilatore e non ha mai scritto un compilatore prima, questo sarebbe un grosso problema. Immagina uno chef che cucina una torta che non ha mai cucinato o mangiato una torta in precedenza. Aye Carumba.

Mentre vedo alcuni vantaggi nell'implementare un algoritmo per conoscerlo, dubito che sia un requisito. Dopotutto, ci si potrebbe chiedere fino a che punto si arriva a capire come viene implementato un algoritmo? Ad esempio, qualcuno deve prendere un algoritmo e implementarlo in vari paradigmi come la programmazione procedurale, orientata agli oggetti e funzionale per conoscerlo davvero? Devono sapere come i compilatori traducono tutto il codice e spostano i bit a livello di elettrone per elettrone per essere piuttosto pedanti al riguardo.


"Non ho mai codificato", tuttavia, implica in qualche modo contenere il passato e il presente. Può anche esserci un'ipotesi implicita di "codifica" come una cosa modesta che è al di sotto del professore per un altro modo di vedere l'affermazione che può avere un tono piuttosto negativo ad essa che potrebbe non andare bene in alcuni ambienti.


3
I professori inglesi dovrebbero sapere come scrivere sceneggiature di film se insegnano ad altri come scrivere sceneggiature di film. Ma tutti i professori inglesi dovrebbero certamente essere in grado di scrivere un'ottima tesi, se non un vero libro.
Robert Harvey,

2
@Robert Harvey: il professore del PO non ha detto che non può programmare, solo che non lo fa. Potrebbe essere un teorico informatico che trascorre la maggior parte del suo tempo alla ricerca. Come ha sottolineato JB King, fintanto che non tiene conferenze, diciamo, progettazione di compilatori o ingegneria del software, potrebbe benissimo essere esperto e competente nel suo campo.
mipadi,

@Robert Harvey: Penso che @mipadi abbia ragione, il professore ha appena detto "Non ho mai programmato" , non che sia incapace.
Orbling

@JB King, @Orbling: scommetto che la citazione è una traduzione, quindi non analizzarla alla lettera.
Javier,

@Javier: Potrebbe anche essere, nel qual caso sarebbe ancora meno chiaro.
Orbling

2

Il tuo professore potrebbe avere ragione, in quanto per essere un professore non è necessario codificare, ma conosce molto la teoria. Ma ciò non funzionerà al di fuori dei perimetri universitari.


1

Pur essendo uno sviluppatore di software professionale, mi sono laureato in ingegneria meccanica.

Puoi essere un buon progettista meccanico con pochissima esperienza nella costruzione e nella lavorazione di parti, lasciando quel lavoro ai macchinisti. Ma sapere come costruire e lavorare le parti ti renderà un ingegnere significativamente migliore, perché puoi prevedere le difficoltà legate alla fabbricazione e all'assemblaggio di qualsiasi cosa tu stia progettando.

Lo stesso vale per il software. Un "programmatore" è un macchinista o un tecnico, mentre un ingegnere del software è, beh, l'ingegnere. Per molti posti, una persona fa entrambi i lavori. Non è impossibile, e per alcune questioni molto astratte, una posizione "solo ingegneria" potrebbe funzionare.

Ma per la stragrande maggioranza, non vi è assolutamente alcun vantaggio dal rifiuto del codice.


2
Ma, come hai detto, sei un ingegnere meccanico e stai parlando di ingegneria del software . Gli ingegneri costruiscono cose. Ma il professore in questione insegna informatica scienza .
mipadi,

1

A meno che tu non stia contemplando e finendo il problema dell'arresto, c'è sempre un uso per la codifica in ogni aspetto dell'informatica.

L'unica classe CS che ho preso senza alcuna programmazione era la teoria. Immagino che ci siano molti fisici là fuori che dicono "Non ho mai sperimentato" ma probabilmente sono anche quelli che dicono "Non scopro mai niente". E sarei sorpreso se a loro importa.


1
Nella mia laurea in Informatica, (con un'università tra le prime 10 a livello internazionale, quindi non qualcosa di zoppo), direi che almeno un terzo delle mie lezioni non aveva alcuna programmazione in esse. Il calcolo è molto più del codice.
Orbling

Ok, a quanto pare sono andato anche in una delle dieci migliori università, potremmo anche essere andati nella stessa università e prendere lezioni diverse in base ai nostri gusti o antipatie o ottenere professori di un genere o di un altro a caso.
Peter Turner,

0

Come studente di informatica penso che all'inizio sia meglio comprendere i concetti che coinvolgono lo sviluppo del software. Dopo aver appreso l'idea alla base del software e come interagisce con un computer, allora è il momento di iniziare a programmare e gestire specifici problemi di implementazione.

Questo è proprio come "Eccezioni software", all'inizio ti occupi solo di loro perché hai fatto qualcosa che non ti è stato permesso di fare. Quindi quando li impari, inizia a fare lo stesso con il tuo codice in modo da renderlo più dettagliato.

Beh, penso che le persone a cui non importano concetti come quei programmatori che usano le Eccezioni come un normale flusso di lavoro nelle loro applicazioni. Sanno COME ma non capiscono davvero PERCHÉ.


-6

Ho un altro idioma per il tuo professore:

Quelli che sanno fare, quelli che non sanno insegnare.

imo, parlare è economico. Chiunque può giocare all'infinito sulla "teoria" e chiamarla "informatica". Ma fino a quando non viene messo in pratica, la teoria non è molto utile perché non c'è modo di convalidarla. Prenderei l'opinione di un prof su qualcosa di molto più serio se sapessi che in realtà ha risolto un particolare problema nel codice rispetto a se stesse solo rigurgitando una "teoria" che potrebbe o meno avere prove a sostegno del suo punto di vista.


6
Einstein, Aristotele, Webster, Ayn Rand, Thoreau, Confucio e Booker T. Washington erano insegnanti. Che affermazione non istruita.
JeffO,

4
-1 Per un commento estremamente offensivo agli insegnanti. Spesso citato lo so, ma sempre ridicolo. L'osservazione originale di George Bernard Shaw era "Colui che può, lo fa. Colui che non può, insegna". da Man and Superman, 1903 - disse anche: "Per me l'unica speranza di salvezza umana sta nell'insegnamento". ed è stato co-fondatore della London School of Economics (LSE), quindi giudichi il suo punto di vista.
Orbling

2
Einstein non ha mai condotto un esperimento fisico in vita sua, ha descritto alcuni esperimenti di pensiero, che sono stati condotti da altri e (con una sola eccezione) sono usciti esattamente come aveva previsto. Diresti che Einstein non ha avuto "risultati sostanziali al di fuori della classe"? Perché si assume che solo perché il professore non ha attuato nulla direttamente utilizzabile dagli utenti finali, non ha, per esempio, le ricerche di un nuovo algoritmo che viene utilizzato dai programmatori nel campo? In effetti, sembra addirittura supporre che il compito del professore sia insegnare agli studenti come programmare !
ShreevatsaR, il

3
Amico, molti dei miei professori di informatica (al MIT) sono stati fantastici e hanno contribuito immensamente alla società, e fanno "fare cose nel loro campo" - molto! Ma il loro campo ha ben poco a che fare con la codifica, e codificano molto raramente, se non del tutto. (Seriamente, ti aspetti che qualcuno che lavora al calcolo quantistico scriva codice per computer quantistici che non esistono nemmeno?) Sembra che tu abbia una visione molto ristretta dell'informatica. (Ricordate che computer science , non di ingegneria .)
ShreevatsaR

2
@GrandmasterB: Se un professore di scienze della scienza si concentra sulla teoria del calcolo, è molto probabile che raramente debba scrivere codice. Ciò non significa che non stia facendo nulla nel suo campo - probabilmente sta pubblicando articoli sulla teoria computazionale! Stai combinando la programmazione con l' informatica .
mipadi,
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.