Ragionamenti su Python per ingegneria/fisica

di il
17 risposte

Ragionamenti su Python per ingegneria/fisica

Ciao a tutti!
In ambito ingegneristico/scientifico ci si ritrova spesso a dover scrivere del codice anche se non si è dei programmatori (proprio per niente nel mio caso).
Mi sono trovato a scrivere oscene righe di codice in Python, scelto perché semplice, open e con ottimo supporto, prima ancora di iniziare a studiarlo.
Dopo di questo però, mi sono riproposto di studiarlo alla prima occasione, e così ho iniziato a fare da poco!
Adesso inutile dire che mi sono innamorato
Vorrei discutere con voi se un linguaggio come Python possa, grazie alla sua curva di apprendimento meno ripida rispetto ad altri linguaggi, colmare il gap che paga in termini di velocità. Vorrei capire in altre parole se la maggior facilità del linguaggio, influenzando la qualità del codice che una persona come me è in grado di scrivere, porti ad un risultato finale più performante. Ho impressione che in settori particolari di nicchia, in cui a scrivere i codici di calcolo non sono informatici, ma persone che hanno imparato a 'scrivere' proprio per soddisfare le proprie necessità, un codice scritto in C++ non sia sempre la soluzione migliore. Che ne pensate?

ciao a tutti

17 Risposte

  • Re: Ragionamenti su Python per ingegneria/fisica

    Ogni linguaggio di programmazione ha un suo ambito di utilizzo.
    Python e' un linguaggio di scripting buono per piccole cose.

    Non e' certamente un linguaggio adatto ad applicazioni complesse o per applicazioni che richiedano performance, a meno di usare librerie gia' pronte, scritte in C, ma utilizzabili in python.

    Python ha una curva di apprendimento piu' ripida (cioe' e' piu' facile da imparare) SOLO perche' e' un modello semplificato di programmazione. E tale semplificazione va a scapito di performance e potenza espressiva.

    E' come confrontare una station vagon con cambio automatico ed una macchina da corsa: la sv va benissimo per la casalinga che deve andare a fare la spesa, inutile se la devi usare in pista.
  • Re: Ragionamenti su Python per ingegneria/fisica

    Grazie mille per la risposta. Mi pare chiaro il tuo ragionamento. Quindi potrei concludere che, nel caso in cui chi si ritrovi a scrivere del codice sia in grado di raggiungere il suo obiettivo soltanto attraverso Python, ovviamente non ci siano alternative. Detto questo e prendendo spunto da una tua frase su librerie in C utilizzabili in Python, una idea potrebbe essere quella di 'isolare' la parte strettamente computazionale del software avendo così la possibilità di riscrivere con un linguaggio più performante questa parte.
    Tutto questo non per eludere quelle che sono le tue considerazioni che purtroppo capisco essere ineccepibili, ma per cercare la soluzione migliore quando ci si ritrova in una situazione come quella che ho prospettato in partenza.
  • Re: Ragionamenti su Python per ingegneria/fisica

    1) NON ESISTE il concetto "raggiungere il suo obiettivo soltanto attraverso Python, ovviamente non ci siano alternative":
    ESISTONO SEMPRE alternative.
    La devi vedere in questo modo: se si raggiunge l'obiettivo in Python e si e' soddisfatti, NON VALE LA PENA cercare alternative

    2) Si, esattamente, COMUNQUE,scrivere librerie in C per Python NON E' BANALE (alias, bisogna essere programmatori esperti oltre a conoscere PIU' linguaggi di programmazione e le problematiche relative all'integrazione CROSS linguaggio) e comunque ci sono alternative, come Cython (con gli stessi problemi indicati precedentemente)

    In ogni caso, al momento; l'approccio che devi considerare e': per migliorare le performance dell'applicazione
    a) bisogna capire se l'IMPLEMENTAZIONE in Python e' sbagliata, nel senso che sono state fatte scelte progettuali sbagliate, come ad esempio aver scritto in Python codice per il quale ESISTE GIA' l'equivalente nella libreria standard del linguaggio, oppure ESISTONO tecniche PIU' SOFISTICATE di programmazione che possono essere sfruttate (ad esempio le lambda espressioni)
    b) bisogna trovare una libreria Python PIU' PERFORMANTE

    Quella di scrivere in C pezzi di codice, e' l'ULTIMISSIMISSIMA soluzione
  • Re: Ragionamenti su Python per ingegneria/fisica

    Grazie mille per le tue considerazioni. Capisco il tuo discorso.
    Le mie domande iniziali nascono dalla mia esperienza per cui mi trovo a vedere script Matlab che girano solo in una versione di Matlab appunto, che vengono utilizzati per cose importantissime, o software importanti che hanno problemi del tipo: se hai spuntato una opzione e vuoi deselezionarla prima di lanciare il calcolo devi chiudere e riavviare perché va in crash tutto.
    Sto parlando di un settore, quello aerodinamico, in cui a quello che vedo i software li scrivono gli ing. aerospaziali. Volevo contestualizzare meglio la mia domanda di partenza. Al netto di queste criticità che immagino per uno programmatore sono inaccettabili, è per questo che facevo un discorso del tipo:
    converrebbe concentrasi su un linguaggio che si ha tempo (dal momento che non ci si può dedicare solo a quello altrimenti si prenderebbe uno sviluppatore nel team) di imparare a un buon livello, piuttosto che programmare male in un linguaggio che magari sarebbe più adatto?
    Il top ovviamente sarebbe affiancare a un ing. uno sviluppatore...ma da quello che vedo essendo davvero una nicchia non accade quasi mai.
    Grazie mille per la spiegazione su come migliorare le performance! Chiara e utile!
  • Re: Ragionamenti su Python per ingegneria/fisica

    Saper programmare BENE e' TOTALMENTE INDIPENDENTE dal linguaggio di programmazione.

    E' un po' come saper scrivere un racconto: la genialita' del racconto, e' indipendente dalla lingua (italiano, inglese oppure urdu) utilizzata per scriverlo.

    Il linguaggio di programmazione ti puo' solo semplificare un po' la vita, ma in ogni caso

    - un BUON programmatore sa programmare BENE in QUALUNQUE linguaggio di programmazione, anche con uno che non conosce
    - nessun OTTIMO linguaggio di programmazione puo' migliorare un programma scritto da un PESSIMO programmatore.

    Un'ulteriore conferma che gli ingegneri dovrebbero SOLO GUARDARE la tastiera di un computer

    Spannometricamente, imparare un LINGUAGGIO DI PROGRAMMAZIONE (la sintassi) e' questione di giorni/mesi.
    Imparare la libreria a corredo, richiede mesi/anni (quella di Java e' immmensa, conoscere TUTTE le classi e' impensabile)
    Il problema NON E' LI!

    Imparare a PROGRAMMARE (che non centra NULLA con il linguaggio di programmazione) richiede ANNI e tanta pratica.
  • Re: Ragionamenti su Python per ingegneria/fisica

    uichilix ha scritto:


    converrebbe concentrasi su un linguaggio che si ha tempo (dal momento che non ci si può dedicare solo a quello altrimenti si prenderebbe uno sviluppatore nel team) di imparare a un buon livello, piuttosto che programmare male in un linguaggio che magari sarebbe più adatto?
    sì.
  • Re: Ragionamenti su Python per ingegneria/fisica

    Mi sono messo a ridere leggendo che gli ingegneri dovrebbero solo 'guardare' la tastiera! ahahahah hai ragione!
    A questo punto però mi interesserebbe avere da te un consiglio: data la situazione che ti ho descritto e che purtroppo è così a prescindere da ciò che pensiamo io e te, quale è il consiglio che mi daresti? Studiare UML e Design pattern?
    Sarebbero queste le conoscenze di base trasversali ai vari linguaggi di programmazione no?

    @dvaosta: quindi diciamo che per te la mia idea non era assurda no? Poi ripeto capisco che la soluzione ottimale sia che gli ing non scrivano codice ma la realtà è tanto diversa purtroppo!
  • Re: Ragionamenti su Python per ingegneria/fisica

    Io sono un ingegnere informatico, e mi rendo conto che, se in un mondo ideale ognuno dovrebbe occuparsi solo di ciò di cui è esperto, nel mondo reale le risorse sono limitate e bisogna arrangiarsi. D'altronde, gli stessi informatici, per i motivi succitati, sconfinano spesso in altre discipline (es.: economia, biologia, linguistica...) pur non essendone esperti. Talvolta si fanno aiutare da esperti del settore, ma più spesso si arrangiano.
  • Re: Ragionamenti su Python per ingegneria/fisica

    uichilix ha scritto:


    Mi sono messo a ridere leggendo che gli ingegneri dovrebbero solo 'guardare' la tastiera! ahahahah hai ragione!
    A questo punto però mi interesserebbe avere da te un consiglio: data la situazione che ti ho descritto e che purtroppo è così a prescindere da ciò che pensiamo io e te, quale è il consiglio che mi daresti? Studiare UML e Design pattern?
    Sarebbero queste le conoscenze di base trasversali ai vari linguaggi di programmazione no?
    Non credo s'intenda solo questo, in realtà io partirei dalla programmazione di algoritmi con la relativa analisi formale, c'è una serie di libri scritta da Donald Knuth ( The Art of Computer Programming: ) che mi sentirei di raccomandare a chiunque voglia cominciare a scrivere del codice non banale, ma dipende dalle tue necessità.
    Capisco che sia scoraggiante come cosa ma se non hai mai programmato in vita tua e/o non hai idea di cosa sia la complessità computazione di un algoritmo io partirei dalle basi, senza buttarsi a testa bassa su concetti che forse non riusciresti neanche ad apprezzare correttamente.
  • Re: Ragionamenti su Python per ingegneria/fisica

    @IfNotFalseTrue, i TAOCP sono testi ALTAMENTE specialistici, assolutamente inutili per un principiante.

    Un buon punto di partenza e' questo:

    https://www.amazon.it/dp/0262533057/ref=asc_df_026253305752474826/?tag=googshopit-21&creative=23394&creativeASIN=0262533057&linkCode=df0&hvdev=c&hvnetw=g&hvqmt=

    E un testo da STUDIARE sicuramente e'



    UML e' un formalismo di rappresentazione: da studiare anche questo, ma e' utile SOLO se accompagnato dall'uso di tool per la modellazione.
    Altrimenti, non serve a molto.
  • Re: Ragionamenti su Python per ingegneria/fisica

    Nella prefazione del volume 1 in realtà Knuth dice "the reader should have written and tested at least, say, four programs for at least one computers".
    Ed ancora: "A knowledge of elementary calculus will suffice for most of the mathematics in these books since most of the other theory that is needed is developed herein". Non sono certo i prerequisiti di un testo "altamente specializzato".
    L'OP è un ingegnere che ovviamente ha conoscenze di Analisi ed Algebra e penso abbia scritto i famosi 4 programmi indicati da Knuth visto che ha affermato di aver già scritto del codice in Python per cui, almeno secondo l'opinione dell'autore, i libri sono adatti a lui, che poi valga la pena leggerseli proprio tutti non è detto ma il volume 1 è certamente valido per uno che è già stato introdotto alla programmazione.
  • Re: Ragionamenti su Python per ingegneria/fisica

    @IfNotFalseTrue: oltre a leggere la prefazione, dovresti provare a leggere/studiare anche il resto.
    Tu li hai mai aperti/consultati?

    Il volume 1, in 450 pagine (le altre 200 contengono le risposte agli esercizi), tratta giusto le 4 operazioni ed alcune semplici strutture dati (liste ed alberi).
    Il volume 2, in 500 pagine (piu' le solite 200 per le risposte agli esercizi), tratta SOLO generatori di numeri casuali e l'aritmetica in precisione arbitraria
    Il volume 3, in 500 pagine (piu' le solite 200), tratta SOLO ricerca ed ordinamento.

    In pratica, in 1500 pagine (piu' altre 600) vengono trattai 6 argomenti: in un libro introduttivo di algoritmi e strutture dati, vengono risolti in forse qualche centinaio di pagine!

    E' come sparare ai passeri con un obice da 105mm (https://it.wikipedia.org/wiki/OTO_Melara_105_mm_M5)

    Sono testi SPECIALISTICI di analisi di algoritmi.
    NON un testo INTRODUTTIVO ad algoritmi e strutture dati, cosa piu' che sufficiente per uno che deve imparare a programmare.
  • Re: Ragionamenti su Python per ingegneria/fisica

    migliorabile ha scritto:


    @IfNotFalseTrue: oltre a leggere la prefazione, dovresti provare a leggere/studiare anche il resto.
    Tu li hai mai aperti/consultati?
    Sì, le mie conoscenze pregresse in materia quando li ho letti consistevano in un esame di informatica di base ed APA e mi hanno aperto gli occhi su una marea di cose per cui vista la mia esperienza mi sono sentito di dare un consiglio, perché di questo si tratta alla fine.

    Ed ho sempre preferito un libro esauriente, che è diverso da specialistico ma è la mia opinabile opinione e ci mancherebbe, ad uno introduttivo. Ma non è detto che l'approccio con cui mi trovo bene io debba valere per gli altri.
  • Re: Ragionamenti su Python per ingegneria/fisica

    Ciao a tutti.
    Mi pare di capire che la prima cosa sia studiare gli algoritmi, sintetizzo brutalmente! Ammesso poi che la parola sintetizzare si possa usare, visto che prendendo i TAOCP sono 1500 pagine i prime tre (su sei), mentre Introduction to algorithms sono comunque 1200 pagine.
    Poi Design Pattern...vorrei chiedervi un'altra cosa: in Design Pattern so che ci sono esempi scritti in determinati linguaggi di programmazione, è un problema non conoscere quello specifico linguaggio?
    Ad ogni modo grazie per tutti i consigli che mi state dando!
Devi accedere o registrarti per scrivere nel forum
17 risposte