Domanda:
Perché i diplomi in informatica contengono un'elevata percentuale di matematica?
Jimmy
2019-10-07 18:20:04 UTC
view on stackexchange narkive permalink

Circa 17 anni fa ho frequentato una delle 10 migliori università del Regno Unito per laurearmi in Informatica.

La matematica non è mai stata un punto di forza per me. Tuttavia avevo (solo) la qualifica A-Level richiesta per essere accettato al corso senza alcun problema.

Dopo due mandati ho lasciato gli studi e sono passato a un'altra delle 10 migliori università del Regno Unito per studiare per una laurea in informatica. I motivi per cui ho abbandonato il primo erano semplicemente perché trovavo le lezioni di matematica incredibilmente difficili. L'università non ha fornito (a mio parere) un buon supporto a persone che non erano forti in questo settore. Tuttavia, non ho mai capito perché questo livello di matematica venisse insegnato in primo luogo.

Recentemente ho guardato alcune note delle lezioni fornite sul sito web dell'ex università per l'anno in corso. E abbastanza sicuro, il livello di complessità sembra lo stesso.

Quando sono passato al conseguimento di una laurea in informatica, parte della mia logica era che il risultato sarebbe stato un insieme più pratico / utile di abilità per sviluppare effettivamente software , insieme al pensiero logico richiesto (che a mio avviso richiede poche conoscenze matematiche). Per me questo ha funzionato bene poiché ho avuto una buona carriera come sviluppatore di software da quando mi sono laureato. Non ho mai scoperto che nessuno dei miei lavori richieda molta matematica, oltre a quella di un livello di complessità GCSE / A.

È interessante notare che, guardando su LinkedIn, un numero enorme di persone dell'ex università è diventato ingegnere del software o ruoli simili. Gli stipendi delle organizzazioni che lavorano queste persone sembrano commisurati al ruolo in cui ricopro attualmente.

Detto questo, mi chiedo quale sia l'obiettivo finale e lo scopo dell'insegnamento della matematica complessa nei diplomi CS? Capisco che alcune persone entreranno in ruoli che lavorano con l'hardware, o addirittura producono software in cui sono presenti elementi matematici complessi. Ma questo sembra essere in minoranza - con un margine molto ampio - in termini di ciò che le persone finiscono per fare. Ho anche parlato con persone delle carriere che hanno intrapreso invece di limitarsi a guardare su LinkedIn ecc.

Mi sembra che i corsi di informatica siano abilità di insegnamento che, sebbene rilevanti, non lo sono tanto quanto loro potrebbe essere stato una volta. Se questo è il caso, perché nessuno l'ha affrontato? Sembra assurdo.

La mia esperienza in questo campo si basa su due delle 10 migliori università del Regno Unito, ma dopo aver esaminato alcune altre (nel Regno Unito e negli Stati Uniti) questo sembra essere un caso generale.

Se le persone stanno assumendo ruoli che richiedono quel livello di conoscenza matematica, quali sono questi ruoli? Perché non riesco a vedere molte prove che ciò accada effettivamente dopo che le persone si sono diplomate.

I commenti non sono per discussioni estese;questa conversazione è stata [spostata in chat] (https://chat.stackexchange.com/rooms/99761/discussion-on-question-by-jimmy-why-do-computer-science-degrees-contain-a-high-p).I commenti pubblicati sotto questo dovrebbero richiedere chiarimenti solo al richiedente (poiché non esiste un meccanismo per spostare i commenti di discussioni future nella chat, rischiano di essere eliminati)
Un altro ragazzo non riesce a distinguere la differenza tra SDE e CS.SDE è per la codifica e l'ingegneria, mentre CS è più per fare ricerca e scienza.L'origine di * computer * è in realtà un * pensiero matematico * ma non un organismo programmatico.Ma non è colpa tua, le persone lo fanno sempre.Molti studenti CS non hanno la capacità e / o l'interesse per andare oltre in CS dopo la laurea e quindi passare a SDE per sviluppare cose e fare soldi.Ma non è ciò che intende CS all'inizio.
Dodici risposte:
Spark
2019-10-07 18:51:06 UTC
view on stackexchange narkive permalink

La panoramica della laurea in scienze informatiche dell'Università di Oxford dice tutto:

Informatica riguarda la comprensione dei sistemi e delle reti di computer a un livello profondo. I computer ei programmi che eseguono sono tra i prodotti più complessi mai creati; progettarli e utilizzarli in modo efficace presenta enormi sfide. Affrontare queste sfide è l'obiettivo dell'informatica come disciplina pratica, e questo porta ad alcune domande fondamentali:

  1. Come possiamo catturare in modo preciso ciò che vogliamo che un sistema informatico fare?

  2. Possiamo dimostrare matematicamente che un sistema informatico fa quello che vogliamo?

  3. Come possono aiutarci i computer modellare e studiare sistemi complessi come il clima terrestre, i sistemi finanziari o il nostro stesso corpo?

  4. Quali sono i limiti dell'informatica? I computer quantistici estenderanno questi limiti?

In altre parole, il linguaggio dell'informatica è la matematica, non il C ++. Se stavi cercando una formazione professionale nei computer, allora CS è probabilmente una scelta inappropriata.

La parte sulla formazione professionale potrebbe essere più prominente.Questo è quello che sembra aver cercato l'operazione.
"I computer quantistici estenderanno questi limiti?".LOL no.Stessa computabilità / diversa complessità computazionale.Perché usano una domanda aperta per teaser gli studenti quando la risposta è essenzialmente "No, i computer non possono farlo".
@BlueWizard i * limiti al calcolo * possono anche essere presi come limiti * pratici *.Se un'attività impiegherebbe eoni con i computer tradizionali, è oltre quei limiti, nonostante sia * teoricamente * possibile.
"Se stavi cercando una formazione professionale in informatica, allora il CS è probabilmente una scelta inappropriata" - parole che vorrei che qualcuno mi avesse detto all '* inizio * del mio tentativo di laurea in CS.
@BlueWizard, fuori tema, ma i computer classici che eseguono calcoli basati su equazioni per sistemi quantistici raggiungono rapidamente il punto di un limite rigido, mentre i sistemi quantistici eseguiti direttamente su un computer quantistico sono effettivamente praticabili.Quindi in una certa misura, direi, sì, un computer quantistico estende i limiti dell'informatica (alcuni specializzati).Pensa alle scienze dei materiali e ad altre in cui il comportamento macro è considerato in parte dovuto agli effetti quantistici (come i super conduttori).
"In altre parole, il linguaggio dell'informatica è la matematica, non il C ++" Non sono in disaccordo con questo, ma devo ancora vedere un corso di informatica puramente teorico.Il corso di laurea di Oxford insegna Scala come parte dei loro moduli di programmazione imperativa.Haskell per FP.Warwick insegna Java e Haskell.Questi corsi * non * sono progettati solo per consentire agli studenti di proseguire la ricerca, ma includono tutti alcuni contenuti pratici di ingegneria del software accanto alla teoria.
@Adam Certo, e personalmente trovo che le persone dei corsi professionali abbiano un'attenzione troppo forte su ciò che è attualmente in voga.Non me ne potrebbe importare di meno se il mio nuovo dipendente non ha mai visto Angular prima, voglio che capiscano le basi.Dovrai comunque imparare sempre un nuovo framework / linguaggio, se comprendi le basi puoi farlo in breve tempo.Voglio che capiscano la concorrenza, le strutture dei dati, come funzionano i computer e le implicazioni e tutte le altre cose buone.
@Voo Sicuramente d'accordo (e specialmente nel mondo JS ci sembra di avere un nuovo framework da imparare ogni 5 minuti).Penso che un sano equilibrio sia importante qui: ad es.esposizione ai concetti comuni del linguaggio di programmazione tramite la scrittura di codice all'interno del corso, l'apprendimento dei concetti di controllo della versione e delle cose teoriche: complessità temporale dell'algoritmo e strutture dei dati, ecc. Non penso che vorrei assumere qualcuno con _no_ precedente programmazione praticaesperienza indipendentemente dalla loro comprensione teorica.
@Adam Assolutamente d'accordo.Onestamente, qualsiasi programma CS degno di questo nome dovrebbe offrire ai propri studenti l'esposizione a molti paradigmi di programmazione diversi.OOP, funzionale, logico (sicuramente non userete mai il prologo in pratica, ma ci sono cose preziose da imparare lì).Voglio dire, in pratica, devi comunque capire la programmazione per quei corsi di algoritmo, costruzione di compilatori o apprendimento automatico, quindi penso che non sia una grande preoccupazione.Se puoi scrivere un compilatore in qualche lingua, sicuramente imparerai le basi almeno lì;)
@AdamWilliams Cosa considereresti "puramente teorico"?Il corso che sto insegnando attualmente (con il titolo "Introduzione ad algoritmi e modelli di calcolo") non ha alcuna _programmazione_.(Inoltre, "teorico" non è l'opposto di "utile"!)
@JeffE Presumo che gli studenti farebbero qualcosa di più di quel semplice "corso", giusto, per laurearsi e laurearsi?NB: Penso che tu possa tranquillamente sostituire "programma" al corso nei miei commenti, perché sono un inglese.Ho fatto più di pochi moduli nel mio corso di laurea che non conteneva alcun tipo di programmazione insegnata: progettazione di algoritmi, reti neurali, algebra lineare ecc.!Questi sono stati inclusi in un corso di laurea * accanto * ai moduli di programmazione, quindi c'era ancora un misto tra i due.In effetti, i migliori moduli di programmazione pratici costruiti sui moduli teorici.
Al giorno d'oggi non c'è quasi nessuna area che viene tralasciata quando si tratta di matematica.E il CS coinvolge molte di queste cose, specialmente se stai andando a un livello superiore.Il motivo è che il grado più alto significa diventare più teorico.Ciò è dovuto al semplice fatto che i diplomi superiori (Master, PhD) sono diretti a persone che vogliono approfondire la ricerca, che richiede un solido background in matematica.Ovviamente il mondo reale è diverso (come al solito) da quello che pensano alcuni accademici, quindi ci sono molti professionisti CS con un master che si tengono lontani dalla ricerca.
@Voo Questo è il motivo per cui ho scelto il mio corso di laurea, all'Università di York.Sono uscito con esperienza di 18 lingue diverse attraverso diversi paradigmi.Penso che solo due moduli che ho preso in quattro anni che non seguivano un modulo precedente condividessero una lingua.La premessa è che ci insegnano l'informatica e non un linguaggio di programmazione.Mi è piaciuta quella premessa.
Sfortunatamente, se cerchi le bacheche di lavoro di qualsiasi azienda standard (banca, assicurazione, ecc.), Vogliono qualcuno con una "laurea in Comp Sci, o equivalente".Quello che vogliono veramente è qualcuno con l '"equivalente" che è una laurea in Sistemi Informativi.IS ti insegna a codificare e ai processi aziendali di base.L'industria non ha mai capito questo, quindi i ragazzi tentano di ottenere diplomi CS, piuttosto che i gradi IS più digeribili che sono più rilevanti per il business tipico.Ottieni una laurea in IS per scrivere codice.Ottieni una laurea in CS per scrivere il compilatore che costruirà quel codice.
@RLH Ma allora non hai davvero bisogno di un'università per insegnarti la programmazione.Puoi farlo in modo molto più efficiente e migliore da solo con le risorse disponibili (come se qualsiasi università riuscisse a rimanere in cima al nuovo framework JavaScript ogni 6 mesi).Soprattutto se hai imparato le basi che stanno alla base di tutte quelle cose "nuove" (se conosci le monadi comprendi già tutto LINQ, Optionals e in un certo senso async / await).Ecco perché voglio qualcuno con una laurea in Scienze Motorie.
"In altre parole, il linguaggio dell'informatica è la matematica, non il C ++. Se stavi cercando una formazione professionale sui computer, allora il CS è probabilmente una scelta inappropriata".Perfetta descrizione della differenza.Il mio * lavoro * è uno sviluppatore di software, quello che * sono * è uno scienziato.Uno scienziato informatico.
@Voo Esiste una scala di apprendimento nella direzione del CS "puro".Sì, puoi imparare molte di queste cose da solo, ma una laurea dovrebbe darti una convalida di livello base.Che tu sia un mago che ha iniziato a programmare da solo o qualcuno che ha iniziato dalla propria formazione universitaria, è necessario imparare le basi dell'ingegneria per essere un ingegnere efficace.Ho appreso queste informazioni durante la mia laurea in informatica, anche se non sono andate in profondità in quelle meccaniche.Ho imparato le basi dell'assemblatore e del funzionamento dell'elettronica.Era solo un sondaggio, insegnando principi e mi andava bene.
Boaty Mcboatface
2019-10-07 19:35:43 UTC
view on stackexchange narkive permalink

Ebbene, facevi parte di un dipartimento di scienza informatica e non di un dipartimento di ingegneria informatica. Sarebbe ragionevole aspettarsi che tu comprendessi i meccanismi fondamentali del "materiale informatico" e possibilmente continuassi i tuoi studi nella ricerca. Non sono uno scienziato informatico, quindi gli esempi potrebbero essere limitati qui.

  • crittografia: oltre alla comprensione degli schemi RSA ci sono molte aree di ricerca e applicazioni interessanti. Ad esempio, la crittografia a curva ellittica utilizza un livello matematico serio o la crittografia omomorfica utilizza schemi di crittografia che imitano un concetto matematico di morfismo per elaborare i dati crittografati senza decrittografia ( per esempio ordinare i numeri)
  • teoria delle comunicazioni: la teoria dei codici è fortemente matematica. Ha alcuni sottocampi che richiedono più di una comprensione di base dell'algebra lineare. Ho sentito che la ricerca sui codici di correzione degli errori non è affatto banale. La loro proprietà principale è rilevare e correggere eventuali errori di comunicazione. Questo è probabilmente molto utile per le applicazioni in cui è più probabile che le comunicazioni contengano errori. Considera l'esplorazione dello spazio, polare o dell'oceano profondo. Dal punto di vista teorico della teoria dei codici, notoriamente, qualcuno ha usato la geometria algebrica per mostrare che un limite superiore teorico per un invariante (non ricordo il suo nome) era il meglio che potevamo sperare. (Ciò significherebbe che ci sono codici che danno questo valore esatto per l'invariante come previsto dal limite superiore)
  • Anche il riconoscimento delle immagini e l'apprendimento automatico utilizzano livelli seri di algebra lineare. Serio nel senso che l'intuizione di spazi vettoriali tridimensionali e la capacità di moltiplicare alcune matrici non sarebbero sufficienti in quanto si confronterebbero spazi vettoriali di dimensioni grandi . Sono sicuro che una persona più istruita sarebbe più utile su questo punto.
  • Haskell è un linguaggio di programmazione basato su un linguaggio che i matematici chiamano teoria delle categorie. Non conosco i vantaggi dell'utilizzo di questo Haskell, ma alcune persone sembrano amarlo. Direi comunque che la teoria delle categorie non è banale. Direi che uno studente medio dopo aver completato una laurea in matematica ne avrebbe una comprensione molto basilare. È altamente concettuale e le sue origini e la maggior parte dei suoi esempi sono di solito materiale scolastico. Quindi sarebbe davvero utile avere una formazione matematica generale per mettere in relazione ciò che sta succedendo.
Oddio, ho lasciato un commento alla domanda principale, giusto per notare subito che la tua prima frase è fondamentalmente il mio commento, enfasi e tutto: D
@penelope succede al meglio di noi :)
Non capisco la tua prima frase.Pensi davvero che i diplomi di "ingegneria informatica" implichino * meno * matematica?Ciò non corrisponde alla mia esperienza né all'uso comune della parola "ingegneria".
@CarlLeth Computer Engineering è "ingegneria" nel senso del termine del XIX secolo, non del XXI secolo.
@alephzero cosa intendi specificamente con questo?(Personalmente nutro rancore nel chiamare ciò che la maggior parte delle persone fa ingegneria informatica, poiché le ripercussioni per il fallimento sono molto inferiori rispetto ad altri campi dell'ingegneria)
@alephzero: La maggior parte dei diplomi in Ingegneria Informatica che conosco sono nati dall'Ingegneria Elettrica (con più programmazione rispetto alla pura EE, spesso alcuni elementi di Informatica vera e propria), che è * fortemente * basata sulla fisica.Potresti non aver bisogno della teoria dei numeri, ma hai bisogno di * molta * matematica per gestire gli aspetti fisici di una laurea in ingegneria elettrica o informatica.L'ingegneria del software può richiedere meno matematica (ed è a malapena ingegneria nel senso normale della parola), ma l'ingegneria informatica non lo farebbe.
Nitpicking, ma almeno per la mia università, Computer Engineering non è ingegneria del software.Facendo eco a ShadowRanger, CE era molto più basato sull'hardware
@llama Penso che le ripercussioni dipendono dal campo / dal settore, come con altri tipi di ingegneria!
@llama anche me.Non ho mai capito perché ad alcuni programmatori di computer piace definirsi ingegneri.Forse è per sentirsi meglio con la professione scelta?O forse è per far pensare agli altri che la programmazione del computer è difficile e complicata?Continuerò a riferirmi ostinatamente a me stesso come un programmatore di computer, e ad infastidire gli autoproclamati "ingegneri del software" chiamandoli anche programmatori.
L'ingegneria è l'applicazione di principi scientifici a problemi pratici.Devi essere in grado di capire la scienza e fare i calcoli per applicarla.Questo è vero per l'informatica e l'ingegneria del software come lo è per la fisica e l'ingegneria meccanica o civile.Se non stai facendo matematica e scienze nel tuo lavoro al computer, probabilmente sei un programmatore piuttosto che un ingegnere del software.
Facendo eco agli altri, l'ingegneria informatica richiede molta matematica, quindi la prima frase è strana.Sono un EE e ho regolarmente ingegneri informatici nelle mie varie classi.Prendono meno matematica di un EE, ma sicuramente una discreta quantità, paragonabile anche a una laurea in informatica.Penso che, come altri hanno detto, ci sia un malinteso del termine.Gli ingegneri informatici sono per lo più EE ma con una maggiore attenzione al digitale.
@llama Consideri per favore cosa può accadere quando uno dei componenti fisici di un sistema semaforico si guasta rispetto a cosa può accadere quando il suo software fallisce?Ricorda che nel 2019 quasi tutto ciò che gli "altri" ingegneri costruiscono è controllato da software e le ripercussioni per il fallimento sono astronomiche.Inoltre, potresti [goderti questa lettura] (https://www.fastcompany.com/28121/they-write-right-stuff)
@Douwe quindi il "più".I sistemi embedded, medici e simili sono degni di questo titolo.Scrivere un'altra app per creare un mercato in cui non dovrebbe esistere e ignori tutti i problemi di sicurezza per indurre qualcuno a lanciarti mucchi di soldi non lo è.
@llama Non è che quelle applicazioni non debbano essere di alta qualità, affidabili, sicure e con garanzie.È solo che _non_, perché non sappiamo come farlo.Ma questo è l'intero ambiente di sviluppo del software;come sarebbero i ponti se fossero il risultato di un venditore che vende qualcosa di impossibile da fare, e anche il compromesso tecnicamente possibile avendo il decimo del budget di cui avresti bisogno, mentre dieci persone diverse spingono le proprie decisioni architettoniche globali nel bel mezzo del progetto, con la maggior parte delle persone che non sanno davvero che stanno costruendo un ponte?
@AaronF "Software Engineer" tende a pagare meglio di "modesto programmatore".Quindi, in linea di principio, sono d'accordo con te ... ma sul mio curriculum, è meglio credere di essere un "Senior Software Engineer"
@EvilDogPie C'è pochissima matematica o scienza nell'ingegneria del software.Sono abbastanza sicuro che il termine sia nato perché "ingegnere" suona più rigoroso di "costruttore".
@AaronF: Il senso più vero di "ingegnere" è qualcuno che usa la propria mente per creare o progettare.Molti dei corsi introduttivi di ingegneria meccanica e informatica sono stati sprecati perché avevo già avuto tutto ciò nell'ingegneria del software.L'ingegneria del software include la definizione del problema esatto, la separazione delle affermazioni del problema dalle soluzioni proposte che potrebbero fare schifo, la specifica esattamente del prodotto che fornirai al cliente, la prevenzione dell'inosservanza dei requisiti, ecc. Include anche il lavoro di squadra, la comunicazione con la direzione, l'apprendimento ad accettarepratiche stupide (err, diverse) su un progetto, ecc.
Data la regola che "qualsiasi cosa che si definisce una scienza probabilmente non lo è", il titolo del campo non promette di risolvere nulla qui.In generale, direi che i dipartimenti di informatica si sostengono insegnando ai programmatori (fondamentalmente tecnologi che gestiscono i macchinari secondo il suo manuale), in modo che possano perseguire idee divertenti come l'intelligenza artificiale e i videogiochi usando qualsiasi metodo matematico appropriato per le formulazioni matematiche dei loro problemi diinteresse.Di tanto in tanto sono in grado di annettere completamente gli argomenti di matematica dando loro nuovi nomi interessanti.
Michael Dai
2019-10-08 03:09:10 UTC
view on stackexchange narkive permalink

Ho commesso questo errore quando ho scelto la mia specializzazione al college. L'informatica non ha a che fare con i computer, allo stesso modo in cui le lezioni di matematica non riguardano davvero l'uso di calcolatrici o matite e carta.

I computer moderni sono solo uno strumento utilizzato per rendere i computer (il vero obiettivo scienza) più facile e veloce. Questo crea confusione perché le cose che calcoliamo sarebbero incredibilmente dispendiose in termini di tempo, o almeno incredibilmente noiose, da fare manualmente, quindi ricadiamo quasi sempre sulla programmazione dei computer per farlo per noi. Ciò significa che probabilmente farai un po 'di programmazione (forse molto) per una laurea in informatica, ma questa programmazione non ti preparerà necessariamente a creare e fornire software di alta qualità.

La mia laurea si è concentrata molto di più su studiare modelli di calcolo e algoritmi che su come produrre software. Questo è ancora utile nello sviluppo del software, poiché conoscere algoritmi efficienti per vari problemi è utile quando sei limitato dal tempo o dalla capacità di memoria. Tuttavia, significa che una laurea in CS non includerà necessariamente la formazione per lo sviluppo di software, in quanto non è l'obiettivo principale.

C'è una famosa citazione in uno dei più grandi libri di testo di programmazione di tutti i tempi, che l'informatica riguarda i computer più o meno come l'astronomia riguarda i telescopi.(Immagina, l'astronomia era chiamata "scienza dei telescopi".) L'analogia è ancora più appropriata di quanto alcune persone credano, perché (proprio come con i computer), gli astronomi non sono nemmeno quelli che stanno ricercando, progettando, ingegnerizzando, costruendo e studiandotelescopi.Quindi, se sei interessato ai * telescopi *, l'astronomia è il campo sbagliato per te, e la stessa cosa vale per i computer.
@JörgWMittag: La fonte più antica che posso trovare è "L'informatica non riguarda i computer nello stesso senso in cui la fisica non riguarda realmente gli acceleratori di particelle, e la biologia non riguarda i microscopi e le piastre di Petri" - Hal Abelson, 1986.
Vorrei davvero che spingessimo a rinominare il campo in "Computing Science".
@orlp Di solito viene chiamato "tecnologia informatica e informatica" da dove vengo :) Non che sia di grande aiuto, dato che è usato sia per la scienza che per l'ingegneria :)
La mia laurea (presso l'Università di Stirling, nel 1992) ERA chiamata "Informatica"!Il che ha perfettamente senso.Ero / sono solo nella media in matematica, ma alcune parti sono state preziose nella mia carriera di sviluppo software, ad es.I set di comprensione mi hanno aiutato immensamente a diventare molto bravo con i database.
@orlp Non penso che aiuterebbe.Primo, nessuno noterà la differenza tra informatica e informatica;secondo, suona troppo come l'informatica scientifica;terzo, ha ancora la parte "computer", quindi la gente la fraintende allo stesso modo;quarto, la parte "scienza" è per lo più sbagliata.
Marco13
2019-10-08 05:30:12 UTC
view on stackexchange narkive permalink

Qui in Germania, il campo "Informatica" è chiamato "Informatik", che, secondo l ' etimologia del termine "informatica", è una contrazione delle parole "informazione" e "automatico", o di "informazione" e "matematica" ...


Come altri hanno già sottolineato, ci sono molte connessioni dirette tra informatica e matematica, a diversi livelli:

  • L'algebra lineare è importante per molte forme di apprendimento automatico moderno: le reti neurali sono essenzialmente solo grandi matrici o, al contrario, un sistema di apprendimento automatico è solo un grande mucchio di algebra lineare ;-). Un altro campo (forse ovvio) è quello della computer grafica 3D: tutti gli effetti speciali nei film sono solo un mucchio di triangoli e la risposta alla domanda su cosa succede quando la luce colpisce una superficie
  • Il calcolo è essenziale per teoria della complessità (che analizza il tempo di esecuzione degli algoritmi), analisi numerica (necessaria per stimare l'errore delle approssimazioni) e molti altri argomenti
  • L'algebra generale (o "astratta") riguarda strutture e regole (o operazioni) all'interno di queste strutture. Esiste una forte (e, a mio parere, gravemente sottovalutata) connessione di questo alla programmazione orientata agli oggetti .
  • La logica è una base importante per quella che potreste chiamare programmazione "di basso livello", anche se la connessione tra la consapevolezza di poter attivare in sicurezza un if (! (a || b)) in un if (! a &&! b) e la logica proposizionale formale potrebbe non essere ovvia. Naturalmente, ben oltre questo, ci sono anche linguaggi di programmazione basati sulla logica come Prolog.
  • ...

Ce ne sono molti altri Connessioni dirette , il che significa che entri in contatto con una certa branca della matematica quando applichi l'informatica nella pratica.

Ma ci sono anche connessioni indirette : la matematica è un linguaggio per buone descrizioni. La matematica insegna una forma di chiarezza, rigore e precisione che è necessaria per gestire i complessi sistemi IT con cui abbiamo a che fare oggi. Ciò che può essere percepito come "pignoleria" altrove è fondamentale per assicurarsi che questi sistemi funzionino nel modo in cui ci aspettiamo che funzionino. Quando hai scritto qualcosa come una specifica del software e ti sei perso un caso d'angolo, allora sai: le persone troveranno quel caso d'angolo. E ti odieranno per averlo perso ...


Tuttavia, da un punto di vista pratico, sono totalmente d'accordo: le cose che la maggior parte delle persone con una laurea in informatica oggigiorno deve fare nel proprio lavoro sono totalmente estranei alla matematica (e anche totalmente estranei alla programmazione, del resto). Ed è in qualche modo un peccato immaginare che molti studenti abbandonino frustrati i loro corsi universitari (che potrebbero essere entrati con aspettative sbagliate sull'argomento) a causa dei loro brutti voti in matematica. Altrimenti queste persone avrebbero potuto essere bravissime in quello che effettivamente dovevano fare nel loro lavoro.


Il mio punto di vista qui potrebbe essere un po 'ristretto, perché conosco solo la situazione in Germania, anche se osservo gli sviluppi in quest'area da più di 20 anni. Ma hai fatto riferimento al Regno Unito, quindi quanto segue potrebbe essere ancora rilevante. L'ho letto un po 'di tempo fa e in qualche modo mi è rimasto in mente. È una citazione da un saggio "Sul fatto che l'Oceano Atlantico ha due lati", di Edsger W. Dijkstra (sì, questo Dijkstra ):

La prima serie di macchine, quella dei singleton, fu sviluppata principalmente negli Stati Uniti subito dopo la seconda guerra mondiale, mentre un'Europa continentale in rovina non aveva né la tecnologia né i soldi per iniziare a costruire computer: l'unica cosa che noi non poteva che pensare a loro. Non sorprende quindi che molti Dipartimenti di Informatica degli Stati Uniti siano figli di Dipartimenti di Ingegneria Elettrica, mentre quelli in Europa iniziarono (successivamente) dai Dipartimenti di Matematica (di cui spesso fanno ancora parte). Questa diversa eredità colora ancora i dipartimenti e potrebbe fornire una spiegazione accettabile del fatto che negli Stati Uniti la scienza informatica è vista in modo più operativo che in Europa.

Questo potrebbe spiegarlo, ad alcuni estensione, almeno ...

In spagnolo è "informática", come in "ciencias de la informatica" e, proprio come in tedesco, c'è anche una netta differenza.
Buffy
2019-10-07 19:51:31 UTC
view on stackexchange narkive permalink

Ci sono due aspetti di questo e uno di questi di solito viene dimenticato. La ragione comune è che alcune parti di CS dipendono dalla conoscenza della matematica e da come usarla. La risposta di Boaty Mcboatface ne menziona alcuni. Ma non tutto il CS è così e coloro che lavorano, diciamo, nello sviluppo di fattori umani o UI probabilmente usano la matematica che hanno imparato molto meno di quelli che studiano algoritmi o crittografia.

Ma anche l'altro aspetto è importante. Lo studio della CS è migliorato dalla conoscenza del modo in cui i matematici pensano e lavorano - il modo matematico di pensare - non solo dall'avere fatti a portata di mano. I matematici tendono ad essere analitici e precisi, a seconda di affermazioni chiare e dimostrazioni logiche. Questo modo di guardare ai problemi e di indicare le soluzioni è utile per un informatico.

Ma ci sono molte altre cose che sono importanti anche in CS, quindi è importante un'istruzione ampia, non solo un background di matematica. Dopo tutto, molti di noi cercano di risolvere i problemi per le persone, non solo per gli altri nel nostro campo. Quindi, mentre la matematica è spesso utile per aiutare a sviluppare il come di qualche soluzione, è meno utile per sapere perché un programma dovrebbe o non dovrebbe essere sviluppato.


I bravi matematici sono anche molto creativi, sebbene questa qualità sia ampiamente condivisa con persone di altri campi. Ma diventare bravo in matematica richiede un po 'di lavoro. Sono necessarie sia la profondità che l'ampiezza.

sp88
2019-10-08 08:01:21 UTC
view on stackexchange narkive permalink

L'informatica è lo studio dei computer e la teoria sottostante. Lo sviluppo di software è l ' uso dei computer per ... sviluppare software.

Questa teoria sottostante è in gran parte matematica ... quindi studiandola, stai essenzialmente studiando (una piccola sottosezione di) matematica. Pertanto, è coinvolta un'elevata percentuale di matematica.

Alla tua domanda di fondo, tuttavia, il mondo accademico è un luogo spesso confuso e incompreso.

Solo di recente Le persone hanno iniziato a rendersi conto che in molti casi una laurea non è necessaria e in effetti potrebbe essere dannosa per il tuo percorso professionale, in molti campi oltre alla semplice informatica. (ovvero 4+ anni di studio tangenzialmente correlato contro 4+ anni di esperienza lavorativa)

Per lo sviluppo del software in particolare, l'informatica è in realtà solo un campo correlato tangenzialmente.

Se CS 201 non era effettivamente necessario per CS 305, non sarebbe stato un prerequisito. Se non contenesse conoscenze utili, anzi probabilmente verrebbe rapidamente escluso dal curriculum, o relegato a una scelta elettiva. È certamente assurdo pensare che le università insegnerebbero cose inutili per un lungo periodo di tempo.

La matematica è molto utile in informatica, regolarmente meno nello sviluppo di software.

In realtà, direi che la matematica è usata costantemente nello sviluppo del software;è solo matematica sufficientemente sviluppata da essere utilizzata dalla maggior parte degli sviluppatori in modo intuitivo, anziché doverne avere una comprensione formale.La maggior parte dei programmi include almeno una funzione, ma una "funzione" è in realtà, come zero o numeri negativi, un'idea matematica abbastanza sofisticata, non qualcosa che le persone hanno sempre conosciuto e compreso.
Una "funzione" in senso matematico e una "funzione" in senso programmatico sono solo lontanamente correlate.Imparare le funzioni matematiche non aiuta davvero con le funzioni di programmazione.
@MartinBonner Non è così distante.Rendi la funzione immutabile (e se ti senti avventuroso, prendi un argomento) e sei d'oro.Per i punti bonus, aggiungi il lambda calcolo corretto.La differenza principale è che la maggior parte dei programmatori non fa nulla con le funzioni oltre a invocarle :)
@Luaan Ebbene sì, ma * la maggior parte * delle funzioni del computer non sono immutabili e hanno effetti collaterali.
@MartinBonner Sì, ma molti ingegneri del software ti diranno anche che è davvero una pessima idea: P È una di quelle cose che rende lo sviluppo del software molto meno affidabile e molto più complesso di quanto dovrebbe essere, essenzialmente senza alcun vantaggio: è un enormefonte di complessità accidentale.
@Martin Sì, ma qual è il rapporto tra i due?E come possiamo cambiare le funzioni del programma per essere più vicine alle funzioni matematiche?Questa è matematica.Perché dovremmo fare un tale cambiamento?Perché possiamo quindi utilizzare più dei nostri strumenti matematici per mostrare (a volte anche provare) che la funzione fa quello che speriamo che faccia.E questo affronta una parte fondamentale della programmazione: come possiamo assicurarci che i nostri programmi stiano facendo ciò che speriamo che facciano, cioè siano corretti?Tutto questo fa parte di un punto che Dijkstra stava facendo (non con tanto successo) quarant'anni fa.
@CurtJ.Sampson Le risposte alle tue domande sono, rispettivamente, "I programmatori non si preoccupano", "I programmatori non si preoccupano" e "Non lo faremmo, perché ai programmatori non importa" e "test".
@David Hai ragione sul fatto che quelle sono le risposte _common_.Spero che tu non stia dicendo che quelle sono _buone_ risposte!Per quanto riguarda l'ultimo, [Dijkstra ancora una volta] (https://github.com/dot-home/unfortunate/blob/master/share/fortune/dijkstra): "La prima morale della storia è che il test del programma può essere utilizzatomolto efficacemente per mostrare la presenza di insetti ma mai per mostrare la loro assenza. "(Siamo ormai solo un paio d'anni dal 50 ° anniversario di [EWD303] (https://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD303.html), ma ancora rifiutiamo di affrontare ilstessi problemi. Sigh.)
Non è una novità essere scettici sul valore di una laurea in informatica.È diventato particolarmente ovvio ogni volta che la tecnologia subisce rapidi cambiamenti e il contenuto del grado CS diventa obsoleto.Altre professioni come l'ingegneria sono molto più stabili.E lì le lezioni che insegnano le abilità necessarie richiedono anni di prerequisiti fondamentali (come anni di matematica che vanno dal livello base all'avanzato), mentre puoi seguire un corso di programmazione come matricola senza prerequisiti.
jamesqf
2019-10-08 07:25:53 UTC
view on stackexchange narkive permalink

Perché è SCIENZA informatica e praticamente tutta la scienza dipende dalla matematica. Certo, ci sono cose che puoi fare con i computer che non richiedono molta matematica (se ce ne sono), come (AFAIK) implementare qualcosa come StackExchange. E hai ragione sul fatto che una laurea in Informatica o qualcosa di simile probabilmente ti qualificherebbe per molti lavori, senza la necessità di imparare nulla oltre l'aritmetica di base.

OTOH, ci sono molti lavori ciò comporta l'applicazione (che cosa potrebbe essere dal tuo punto di vista) matematica abbastanza complicata. Ad esempio, quello che sto facendo in questi giorni implica l'applicazione di soluzioni numeriche a una particolare classe di equazioni alle derivate parziali ( https://en.wikipedia.org/wiki/Eikonal_equation). Probabilmente il 90% della mia carriera ha coinvolto livelli simili di matematica. Quindi sta tutto in quello che vuoi fare.

cjs
2019-10-08 11:39:38 UTC
view on stackexchange narkive permalink

Perché informatica scienza (vedi sotto) e persino programmazione informatica, è matematica applicata.

Ed Dubinsky, un insegnante di matematica che una volta era un programmatore professionista stesso, ha detto:

La conoscenza matematica di una persona è la sua tendenza a rispondere a certi tipi di situazioni problematiche percepite costruendo, ricostruendo e organizzando processi mentali e oggetti da usare per affrontare le situazioni.

A un livello leggermente meno generale, considera cos'è la matematica. Scegli o crei un linguaggio in cui puoi esprimere determinate idee e quindi la manipolazione simbolica secondo un insieme di regole che hai anche scelto o creato per creare dichiarazioni più valide in quella lingua secondo quelle regole. Se non stai attento a farlo correttamente, potresti uscire con affermazioni non valide. I risultati che ottieni possono avere una sorta di applicazione nel "mondo reale" (ad esempio, posso usare il linguaggio e le regole degli "interi" per tenere traccia di ciò che le persone mi devono e io devo loro) o possono essere solo un lavoro per aiutare capisci meglio come puoi usare il linguaggio e le regole e come possono esserti utili per un ulteriore utilizzo.

In molte parti della matematica usiamo simboli particolari chiamati "numeri" e abbiamo una vasta libreria di regole e linguaggi spesso condivisi in relazione a questo, ma ci sono altre aree della matematica che non usano affatto i numeri (ad esempio, la teoria delle categorie) o, sebbene possano essere applicate ai numeri, non riguardano realmente i numeri di per sé (teoria dei gruppi, strutture algebriche, molti altri).

Anche prima di entrare nello studio o nell'uso di algoritmi particolari e simili, scrivere un programma per computer è fondamentalmente quello che ho descritto sopra. Molti dei concetti "più semplici" nella programmazione di computer che utilizziamo ogni giorno, come l'idea di una funzione, sono concetti puramente matematici.

Ora, come hai visto, è perfettamente possibile attaccare il mondo reale problemi con questi strumenti matematici in modo non rigoroso e ottenere risultati utili. Tipicamente i risultati non saranno veramente corretti (cioè, i tuoi programmi avranno bug), ma saranno "abbastanza corretti" per svolgere il lavoro. (Per un programma ben scritto nell'industria, potresti non incontrare mai le situazioni che dimostrerebbero che non è corretto.) Questa è la disciplina dell'ingegneria: ottenere risultati che funzionano abbastanza bene nel mondo reale a costi accettabili.

Ma anche quando fai ingegneria, gran parte di ciò che fai funziona bene solo perché qualcuno è andato e ha fatto abbastanza sollevamento pesi matematici da darti concetti e strumenti che puoi usare per farlo. Potresti non avere una buona comprensione di cosa una funzione o una relazione è, ma il tuo linguaggio di programmazione o il tuo sistema di database funziona perché qualcuno ha capito quelli.

E le persone che hanno fatto quel lavoro sono gli scienziati informatici.

Tutto questo è stato conosciuto e seriamente contemplato da molto tempo. Penso che sia particolarmente ben dimostrato da un commento nel classico articolo di PeterLandin del 1966 ["The Next 700 ProgrammingLanguages"] [landin66]:

Il contributo più importante di LISP non era nell'elaborazione delle liste o nell'allocazione della memoria o notazione, ma nelle proprietà logiche che stanno dietro la notazione. qui ISWIM apporta pochi miglioramenti perché, a parte qualche piccolo dettaglio, LISP non ne ha lasciato nessuno da fare. Esistono due modi equivalenti per affermare queste proprietà.

(a) LISP ha semplificato le relazioni di equivalenza che determinano la misura in cui i pezzi di un programma possono essere scambiati senza influenzare il risultato.

(b) LISP ha portato la classe di entità che sono denotate da espressioni che un programmatore può scrivere più vicino a quelle che sorgono nei modelli di sistemi fisici e nei sistemi matematici e logici.

Se lo capisci (che probabilmente richiede una comprensione almeno intuitiva del lambda calcolo o simili), tu probabilmente rendiamo conto che molti dei problemi che affrontiamo oggi sono ancora gli stessi problemi fondamentalmente matematici che venivano indagati negli anni '60 quando stavamo studiando seriamente cosa sia e cosa significhi veramente un "linguaggio di programmazione". strong> Sui programmi di lavoro

Si può anche guardare a questo dal punto di vista più ristretto di "Voglio solo scrivere un programma e assicurarmi che funzioni". Anche qui questo diventa matematica se prendi come vincolo "Voglio davvero, nel miglior modo possibile, assicurarmi che funzioni". EWD303 di Dijkstra, "Sull'affidabilità dei programmi", espone questo argomento in dettaglio. Il suo riassunto:

I problemi di affidabilità ci costringono a limitarci a programmi gestibili intellettualmente. Questo ci pone di fronte alle domande "Ma come gestiamo intellettualmente una struttura complessa? Quali aiuti mentali abbiamo, quali modelli di pensiero sono efficienti? Quali sono i limiti intrinseci della mente umana che dovremmo rispettare meglio?" Senza la conoscenza e l'esperienza, sarebbe molto difficile rispondere a tali domande, ma fortunatamente la nostra cultura ospita una tradizione di secoli una disciplina intellettuale il cui scopo principale è applicare una strutturazione efficiente a complessità altrimenti intellettualmente ingestibili. Questa disciplina si chiama "Matematica". Se prendiamo l'esistenza dell'impressionante corpo della matematica come prova sperimentale dell'opinione che per la mente umana il metodo matematico è, in effetti, il modo più efficace per affrontare la complessità, non abbiamo più scelta: dovremmo rimodellare il nostro campo di programmazione in modo tale che i loro metodi di comprensione diventino ugualmente applicabili, poiché non ci sono altri mezzi.

Su "Informatica" contro "Informatica"

Alcuni di noi, inclusa l ' University of Alberta, trovano il nome più comune della disciplina leggermente fuorviante e invece preferisco chiamarlo Informatica Scienza. Come ha detto Keith Smillie in "Computing Science at the University of Alberta, 1957-1993":

La scelta del nome "informatica" invece del più comune "informatica" è stata deliberata per indicare che l'informatica piuttosto che i computer doveva essere il fondamento della disciplina.

Pensare a ciò con cui stiamo discutendo come "informatica" piuttosto che "computer "Way può aiutarti a ricordare che tutto il software in esecuzione nel mondo di oggi dipende molto più dagli strumenti matematici che utilizziamo per essere in grado di modellare in modo efficace e accurato i nostri problemi e il mondo che dall'hardware su cui gira.

E per aggiungere divertimento alla terminologia, abbiamo la società professionale per ricercatori e professionisti che si fa chiamare ** [Association for Computing Machinery] (https://www.acm.org/) **.(Nonostante il suo titolo, credo che la maggior parte dei suoi membri siano in realtà _ esseri umani_.)
@jeffB La principale differenza tra le macchine informatiche e gli esseri umani è che gli esseri umani sono più complessi e quindi più facilmente distratti.
internetofmine
2019-10-08 14:38:20 UTC
view on stackexchange narkive permalink

Qui in Polonia ci sono molti specialisti in matematica, ma pochissimi specialisti IT disponibili nelle università (a causa dell'orrenda differenza salariale immagino), quindi finisci per avere troppi matematici che hanno bisogno di qualcosa da fare e sovraccarichi gli studi IT con matematica, matematica grezza e non elaborata, senza mostrarti connessioni e usi nelle scienze informatiche.E dopo 5 anni di università ottieni studenti che hanno avuto 5 anni di analisi, 2 semestri di geometria, altri semestri di statistiche e riescono a malapena a programmare in c ++, Ada e alcuni java o python se sono fortunati.

Non vedo davvero il problema.Le competenze di informatico e programmatori C ++ si sovrappongono in una certa misura, ma sono tutt'altro che identiche.Sembra che alla Polonia manchi una formazione professionale in informatica.Non hai esattamente bisogno di un dottorato in CompSci per usare C ++.
@MSalters Ancora più importante, un dottorato in CompSci probabilmente non ti aiuta a usare C ++ così tanto (oltre forse ad avere l'idea sensata di scappare da C ++, velocemente: D).Ottieni molti vantaggi dai corsi avanzati di algoritmo e tutti i tipi di matematica, ma si applicano a tutti i linguaggi di programmazione allo stesso modo: si verificano a un diverso livello di astrazione.
Ian Sudbery
2019-10-14 21:49:48 UTC
view on stackexchange narkive permalink

Penso che la cosa fondamentale che manca qui sia il punto più ampio. Nella maggior parte dei casi, i diplomi universitari non forniscono formazione , forniscono istruzione . Quindi un diploma universitario insegna, in generale, non come fare un lavoro particolare, ma come pensare, analizzare e valutare la conoscenza.

La stragrande maggioranza di tutti gli studenti che studiano per una laurea non proseguirà un lavoro che utilizza direttamente le conoscenze insegnate in una laurea. Gli studenti con uno dei nostri diplomi potrebbero essere più occupabili come vantaggio collaterale, ma non è l'obiettivo principale della maggior parte dei gradi. (ci sono eccezioni a questo come la medicina o la legge).

New Alexandria
2019-10-13 19:13:29 UTC
view on stackexchange narkive permalink

Tutte queste risposte non riescono a descrivere qualcosa di essenziale:

La maggior parte dei lavori con la scrittura di codice sta facendo l'equivalente di fabbricazione , non ingegneria , e certamente non scienza .

Se questo non ha senso immediato, può aiutare a capire l'equivalente quando si lavora con materiali classici. Uno scienziato studierebbe la metallurgia e come creare nuove leghe. In ingegneria, si valuterà la dimensione di una trave che può essere realizzata dal materiale oi limiti di usura negli scenari. I fabbricanti riceverebbero il materiale sotto forma di tubi, che assemblano per adattarsi ai mezzi di cose come una cucina, un bagno o forse un'intera casa.

Un tecnico, come qualcuno che lavora HVAC o automobilistico, prenderebbe sottosistemi precostruiti e li adatterebbe insieme con un po 'di regolazione utilizzando la fabbricazione.

La maggior parte delle carriere che coinvolgono il codice si occupano di fabbricazione o lavoro tecnico. Sempre più spesso, i lavori software sono ruoli di tecnico. I lavori richiedono la consapevolezza continua di nuove librerie e framework e come garantire la loro facilità di assemblaggio e configurazione.

Ma non è questo ciò che le scuole di informatica possono insegnare. Non vai a Oxford o in qualsiasi altra università della Ivy League per imparare a essere un produttore . Se sei andato in una scuola del genere e hai imparato che non hai appetito o abilità per la scienza ..... questo è il dado.

La stessa cosa vale per le scuole di Belle Arti con curricula di base di concept studio.

Ciò non significa che i programmi che insegnano la scienza legittima dovrebbero fare di meno.

Mochi
2019-10-08 07:58:14 UTC
view on stackexchange narkive permalink

L'informatica implica un processo di risoluzione dei problemi efficiente, che può essere raggiunto attraverso corsi di matematica applicata. Almeno, questo è ciò che cercano datori di lavoro e reclutatori. Il più delle volte, i framework degli algoritmi sono basati sulla logica matematica. Se non hai intenzione di utilizzare la laurea in scienze informatiche come designer, ingegnere o altro approccio applicativo, non è necessario impiegare molta matematica.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...