Algoritmi e Logica della Programmazione

Messaggioda MarcoCMC » 13/10/2017, 17:16

salve ragazzi,
chiedo a tutti voi, appassionati e studenti di informatica, un consiglio. Sono un ragazzo curioso, laureato in neuroscienze ma che si occupa di statistica e modellistica cognitiva. Programmo con il linguaggio R, e fino ad ora ho sempre adottato l'approccio "computazionale", soprattutto per ottimizzazione, probabilistic modeling, computational statistics. Il problema è che da un po' di tempo inizio a sentirmi sempre più annoiato, come se mi mancasse qualcosa. Mi spiego meglio: comincio a vedere questo approccio come fine a se stesso: utilizzare algoritmi matematici implementati in un codice serve certamente a risolvere problemi, ma non ti insegna a programmare, con la "P" maiuscola. Sento la necessità di accedere al livello successivo. Solitamente il mio percorso lo si affronta in maniera bottom-up, magari studiando informatica, e poi dedicandosi alla computazione applicata alla scienza. Io invece ho adottato un approccio decisamente top-down, imparando ad usare algoritmi per la necessità di risolvere problemi matematici, imparando contemporaneamente sia tali problemi, sia la logica della programmazione degli algoritmi numerici. Però vorrei qualcosa di più, vorrei davvero acquisire la forma-mentis del computer scientist. Stavo pensando di ripartire da zero, imparando la programmazione ad oggetti in C++, ma mi chiedo se non vi sia un modo per non buttare definitivamente l'esperienza che ho maturato con R. Secondo voi potrei affrontare la materia degli "Algoritmi", senza utilizzare java o C++? Oppure potrei rimanere su R? Cioè, secondo voi per acquisire questa forma-mentis che desidero, cosa dovrei fare a livello didattico? Sento che compilare "semplicemente" (ovviamente la matematica che c'è dietro non è affatto semplice) un algoritmo per risolvere problemi di modellistica a lungo andare ti lobotomizza soltanto (senza offesa per gli ingegneri biomedici, ambientali, chimici, elettronici).
MarcoCMC
Starting Member
Starting Member
 
Messaggio: 2 di 16
Iscritto il: 12/03/2017, 18:52

Re: Algoritmi e Logica della Programmazione

Messaggioda apatriarca » 13/10/2017, 18:25

Credo sinceramente che quello che stai cercando non esista. La programmazione non è diversa da quello che hai fatto fino ad adesso. Esistono linguaggi molto diversi tra di loro e ognuno di loro ha vantaggi e svantaggi con cui dovrai convivere, ma di certo non inizierai mai da zero imparandone uno nuovo. Le idee di base e la mentalità da programmatore l'hai già acquisita. La pratica della programmazione è fatta per lo più da attività abbastanza ripetitive e per lo più banali. È difficile finire ad affrontare un problema che sia veramente nuovo e quando succede si cerca comunque sempre di suddividerlo in problemi più piccoli, in molti casi già risolti in precedenza. Gli algoritmi sono inoltre qualcosa di per lo più accademico e nella pratica si prendono in considerazione algoritmi più avanzati solo quando necessario. Non è insomma diverso dal lavoro che può fare un ingegnere civile che deve progettare nuovi edifici.

C++ e Java non hanno comunque nulla a che fare con imparare gli algoritmi. Puoi usare qualsiasi linguaggio. Puoi addirittura studiare gli algoritmi senza implementarli in un vero linguaggio (anche se probabilmente sarebbe meno efficace). L'unica difficoltà che potresti affrontare nello studiare algoritmi in R è che potrebbero non esserci risorse disponibili per quel linguaggio e potrebbe essere necessario studiare da libri che usano altri linguaggi.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4859 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Algoritmi e Logica della Programmazione

Messaggioda MarcoCMC » 13/10/2017, 20:00

Grazie di aver condiviso il tuo pensiero. In verità, il problema dello studiare la logica degli algoritmi su R me lo sono posto. Io non ho mai studiato sistematicamente "algoritmi", e avevo adocchiato il manuale "Introduction to Algorithms" di Cormen, che utilizza uno pseudocodice molto vicino ai linguaggi di programmazione di basso livello, lontani da R. Per quanto riguarda il tuo pensiero sul fatto che la mia sia già una programmazione sufficiente, e simile per forma e dinamica a quella di un informatico, non concordo. Io non so cosa tu studi, ma l'analisi numerica implementata su Matlab o R che si studia nelle ingegnerie è una finta programmazione. Infatti fino ad ora non ho mai incontrato un ingegnere (non informatico) che conosca la logica della programmazione e che sappia formulare uno script più lungo di 10 righe. La realtà è che ad esempio progettare un sito web altamente funzionale richiede più astrazione e abilità che progettare un curve fitting. Ovviamente parlo del mero livello di scrittura e progettazione del codice. Anche se spesso il lavoro del programmatore è banale e ripetitivo, invidio comunque chi ha una formazione informatica che induce ad introiettare un metodo di programmazione funzionale, pulizia del codice ed efficienza, cosa che non acquisisci imparando a fare quegli script da 40 righe che servono per implementare un calcolo scientifico seppur complesso. Il punto è che nel calcolo numerico, che sia stocastico o no, e nel machine learning usato in statistica, la programmazione diventa solamente una grezza calcolatrice, e la matematica diventa ovviamente protagonista. Quindi se non sei un matematico, puoi solo meramente implementare in un calcolatore qualcosa, assieme allo svolgere una soddisfacente attività di progettazione del setting di modeling in base alla disciplina di interesse, certo. Eppure continuo a ritenere la forma-mentis dell'ingegnere informatico la migliore, per attitudine al pensiero astratto, e per la capacità di problem-solving. Certo è che non ho né voglia né tempo di mettermi a studiare globalmente l'informatica "universitaria". Per questo ho chiesto consiglio qui. La domanda è: Io voglio salire di livello. Cosa potrei fare? Imparare OOP? Studiare Algoritmi? Pregare l'ave Maria tutte le notti per sei mesi? Tanto questo sentore di incompletezza non me lo tolgo di dosso Ahahahah
MarcoCMC
Starting Member
Starting Member
 
Messaggio: 3 di 16
Iscritto il: 12/03/2017, 18:52

Re: Algoritmi e Logica della Programmazione

Messaggioda apatriarca » 13/10/2017, 21:05

Io non so cosa tu studi, ma l'analisi numerica implementata su Matlab o R che si studia nelle ingegnerie è una finta
programmazione. Infatti fino ad ora non ho mai incontrato un ingegnere (non informatico) che conosca la logica della programmazione e che sappia formulare uno script più lungo di 10 righe.

Non sono uno studente, sviluppo software in ambito lavorativo da 5 anni e come hobby da quasi 20. Non metto in dubbio che quello che viene insegnato all'Università sia poco, ma non esiste alcuna "ricetta segreta" per passare da 10 righe a migliaia se non la volontà di farlo e l'esperienza. La "logica" della programmazione consiste spesso in idee molto semplici e una grande attenzione nei dettagli. Conosco artisti o ingegneri che hanno iniziato a programmare per necessità e che hanno finito per realizzare applicazioni anche molto complesse. Per fare un esempio. Nel mio precedente lavoro ho conosciuto un ingegnere che negli ultimi 15 anni ha realizzato un sistema per automatizzare le simulazioni fisiche all'interno della società per cui lavora. Il sistema permette a persone sparse per tutto il mondo (è una multinazionale) di progettare la simulazione attraverso una interfaccia web, gestire le licenze dei software di simulazione e fornire un feedback dei risultati (generando automaticamente un report). Il codice non è perfetto e in alcune parti non è particolarmente elegante o efficiente, ma funziona. Ho poi anche avuto modo di lavorare con un tesista di ingegneria meccanica che ha scritto un sacco di codice in Scilab per lo più in autonomia.

La realtà è che ad esempio progettare un sito web altamente funzionale richiede più astrazione e abilità che progettare un curve fitting. Ovviamente parlo del mero livello di scrittura e progettazione del codice. Anche se spesso il lavoro del programmatore è banale e ripetitivo, invidio comunque chi ha una formazione informatica che induce ad introiettare un metodo di programmazione funzionale, pulizia del codice ed efficienza, cosa che non acquisisci imparando a fare quegli script da 40 righe che servono per implementare un calcolo scientifico seppur complesso.

Progettare un software di una certa complessità è come progettare una casa. Non è qualcosa che si fa da un giorno all'altro e richiede pazienza e dedizione. Ogni pezzo non è più complicato di quelle 40 righe, spesso è in realtà più semplice. Pulizia del codice ed efficienza vengono principalmente con l'esperienza ed è in realtà più un ideale che la realtà. Il più delle volte questi valori sono gli ultimi ad essere considerati e a volte ci si rende conto che soluzioni che nella nostra mente erano eleganti ed efficienti in realtà non lo sono affatto. Un software è inoltre molto variabile ed è spesso soggetto a riscritture o riorganizzazioni del codice. Quando si inizia a realizzare una nuova funzionalità si cerca di solito di farlo nel modo più veloce e semplice possibile e si aggiusta poi il codice in seguito in base a quello che si impara da questa prima implementazione/prototipo.

Eppure continuo a ritenere la forma-mentis dell'ingegnere informatico la migliore, per attitudine al pensiero astratto, e per la capacità di problem-solving. Certo è che non ho né voglia né tempo di mettermi a studiare globalmente l'informatica "universitaria". Per questo ho chiesto consiglio qui. La domanda è: Io voglio salire di livello. Cosa potrei fare? Imparare OOP? Studiare Algoritmi? Pregare l'ave Maria tutte le notti per sei mesi? Tanto questo sentore di incompletezza non me lo tolgo di dosso Ahahahah

Sinceramente una buona parte dei corsi di informatica che ho frequentato consistevano in qualcosa di simile a quello che vivi nello studio dell'analisi numerica. Il mio consiglio è quello di provare a realizzare qualcosa al di fuori dell'Università. Può essere realizzare un progetto personale o lavorare ad un qualche progetto open source o altro.. Non ha importanza. Se trovi che R è limitante, puoi provare a studiare un altro linguaggio. Le basi di quasi ogni linguaggio si possono imparare in pochi giorni. Lascia perdere la teoria sulla programmazione ad oggetti. E' per lo più considerata datata e cerca di importi un punto di vista attraverso cui analizzare il problema quando altri potrebbero essere migliori (o a te più congeniali). Lo studio degli algoritmi può essere utile, ma non fondamentale, e puoi sempre guardare queste cose in seguito.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4860 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Algoritmi e Logica della Programmazione

Messaggioda MarcoCMC » 13/10/2017, 22:12

Ti ringrazio per le osservazioni. Preciso comunque, anche se non è minimamente necessario, che non era mia intenzione spostare l'argomento sul confronto con i programmi didattici universitari. Anzi, io sono un autodidatta, e come me ce ne sono tanti che spesso e volentieri programmano molto meglio di chi ha una laurea in informatica. Saranno state le mie esperienze che forse mi hanno portato a deificare, o forse esacerbare, la figura del programmatore. Piuttosto perché nel mio ambito noto che nella ricerca scientifica i computer scientist riescono ad intrufolarsi praticamente in ogni campo: dalla fisica alla biologia computazionale, dalle scienze cognitive alla probabilità applicata. Ma certamente questo dipende dall'abilità delle singole persone, più che da un mero corso di studi. Credo che come dici tu, io abbia bisogno di dedicarmi ad un progetto esterno. Per quanto riguarda OOP, è interessante la tua opinione al riguardo, forse un po' controcorrente, o sbaglio?
MarcoCMC
Starting Member
Starting Member
 
Messaggio: 4 di 16
Iscritto il: 12/03/2017, 18:52

Re: Algoritmi e Logica della Programmazione

Messaggioda apatriarca » 15/10/2017, 17:32

La figura del computer scientist non è poi alla fine molto diversa da quella di un matematico. Si infilano ovunque semplicemente perché le abilità acquisite sono indipendenti dal particolare settore e generalmente utili in quasi ogni settore. Questo ovviamente non significa che si possono sostituire a persone con un background più settoriale: ho programmato nel campo ingegneristico ma non sono in grado di fare il lavoro di un ingegnere meccanico.

Il momento d'oro del OOP è passato da almeno 5-10 anni. Alla fine degli anni '90 e inizio del nuovo millennio era considerata la panacea che avrebbe risolto tutti i mali della programmazione, ma con gli anni si è resi conto che non era così. Il principale problema dell'OOP è che non è particolarmente adatto a sviluppare applicazioni che debbano girare su più core/processori/computer in parallelo. Almeno non nella forma con cui è stata portata avanti nello scorso decennio. Personalmente non l'ho mai amata, anche se riconosco che ci sono situazioni in cui ha i suoi vantaggi (ma lo stesso vale per ogni altro paradigma come quello funzionale).
apatriarca
Moderatore
Moderatore
 
Messaggio: 4864 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Algoritmi e Logica della Programmazione

Messaggioda MarcoCMC » 16/10/2017, 10:17

Interessante, immagino tu intenda il functional programming, che ho sempre pensato non fosse un vero e proprio paradigma, ma più un modo "accessorio" di programmare all'occorrenza. Ora che controllo meglio devo dire che le cose si fanno interessanti. Direi che dopo questa conversazione abbandonerò la fissazione per l'OOP, e credo che inizierò a dedicarmi alla parte functional di R, di cui ho letto qualcosa. Grazie Ahahah
MarcoCMC
Starting Member
Starting Member
 
Messaggio: 5 di 16
Iscritto il: 12/03/2017, 18:52

Re: Algoritmi e Logica della Programmazione

Messaggioda apatriarca » 16/10/2017, 10:48

Non parlo necessariamente del paradigma funzionale.. Ne esistono tantissimi.. ;) (Paradigma di programmazione). Ogni paradigma ha un suo ruolo e puoi imparare molto da ognuno di essi, ma il mio messaggio non era di lasciare perdere il OOP e guardare altrove. Più che altro di non preoccuparti eccessivamente della teoria e delle idee di questi paradigmi. Alla fin fine quello che conta è creare un programma che funzioni, il metodo non è così importante.

Sinceramente, se vuoi imparare gli algoritmi, la maggior parte di loro sono implementati usando un approccio iterativo e non funzionale (a meno che non sia espressamente indicato diversamente). Proverei quindi ad imparare un linguaggio che ti permetta di implementare tali algoritmi, come C, C++, Java, Python.. Ma vedi tu.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4869 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Algoritmi e Logica della Programmazione

Messaggioda MarcoCMC » 16/10/2017, 13:05

Guarda, io avevo bisogno di una distrazione, un passatempo che però aumentasse le mie skill di programmazione. Voglio acquisire un "modo" di programmare. Credevo che lo studio degli algoritmi mi accendesse qualche lampadina. Però non so se era tua intenzione o no, ma ora sono rimasto incuriosito al functional programming come modo di pensare. Ho letto che R è adatto per questo tipo di programming. Quindi magari leggo qualche manuale sul functional programming in R, poi vedrò anche oop magari.
MarcoCMC
Starting Member
Starting Member
 
Messaggio: 6 di 16
Iscritto il: 12/03/2017, 18:52


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite