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"
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"
Risposte:
Non sarà davvero conoscere l'algoritmo bene fino a quando si codifica esso.
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.
L'informatica non riguarda più i computer di quanto l'astronomia riguardi i telescopi
- Edsger Dijkstra
Tendo ad essere d'accordo.
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.
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.
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.
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.
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.
È 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.
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.
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.
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É.
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.