Riflessioni sulla Programmazione

un ragionamento che mi torna sempre nella mente, ma con le nuove conoscenze si acuiscono:
già da quando ho iniziato a scrivere script in VBS per poi passare a Python, ho notato che
vengono messi a disposizione metodi/funzioni per aiutare nella compilazione dil codici
come nel creare un comando personalizzato con Py in Rh per fare un semplice Offset

import rhinoscriptsyntax as rs
obj = rs.GetObject("Select a curve", rs.filter.curve)
if rs.IsCurve(obj):
    rs.OffsetCurve( obj, [0,0,0], 1.0 )

quel “rs.OffsetCurve” in effetti si tratta di un metodo/funzione impostato per creare un Offset
quindi dietro a “rs.OffsetCurve” ci sono svariate righe di codice che permettono all’utente di fare ciò

facendo un paragone: rs.Command(“Offset”, False) e rs.OffsetCurve( rs.GetObject(), [0,0,0], 1.0 )
nel primo caso tramite il command richiamo il comando Offset come se l’avessi digitato nella barra Rhino
nel secondo esempio in Python scrivendo il codice tramite rs.OffsetCurve richiamo il metodo per fare ciò
quindi una funzione già scritta ed impostata per seguire determinate azioni come nel comando di prima.

questo ragionamento mi è sempre tornato nella mente, facendomi pensare se alla fine usando metodi già
adhoc sia una vera programmazione. . . no che mi voglia sostituire ai programmatori che fanno questo,
ma dopo le ultime conoscenze in C# venendo a sapere che dietro ad una funzione del tipo “DateTime”
ci sono oltre 5000 righe di codice, e chissa quindi per ogni costruttore - istanze - classi ecc che vengono richiamati molte volte quanto codice c’é dietro una riga, beh a questo punto mi chiedo se si possa ancora chiamare programmare oppure “magari” si dovrebbe chiamare in tutt’altro modo? (assemblare metodi)

Argomento interessante, e nello spirito delle feste di fine anno. :santa: :christmas_tree:
Lasciamo stare per un momento i problemi pratici e pensiamo in liberta’. Mi piace ! :slight_smile:

Forse e’ lo stesso ragionamento fatto quando si e’ passati in molti casi da dire “programmare” a dire “sviluppare”.
Suona piu’ generico e da’ piu’ l’idea di “costruire in qualche modo” … almeno a me … :confused: :wink:

Ma personalmente non mi sembra fuori luogo parlare di programmazione, anche se ci riferiamo ai nostri semplici script.
E’ pur sempre la costruzione/compilazione/stesura delle istruzioni utili a eseguire una certa azione (da parte di Rhino).
Anche quando imposto il termostato del riscaldamento a me sembra programmazione, almeno come la intendo io. :grinning:

Del resto costruire sfruttando (in senso positivo) cio’ che e’ gia’ stato fatto da altri e’ il nostro modo di vivere. Anche se spesso, per motivi vari, questo non succede, e di solito non e’ una buona cosa.

Poi, per giocare un po’, possiamo anche divertirci a decidere fin dove sia programmazione … :wink:
Scrivere la sequenza di “0” e “1” che costituisce ad esempio Rhino.exe e tutte le librerie che utilizza ?
( Per fortuna McNeel non ha seguito questa via, se no credo che staremmo ancora aspettando Rhino 1.0 :wink: ).
Utilizzare l’assembler ?
Ma anche cosi’ si sfrutterebbe il programma che lo traduce in linguaggio macchina … :thinking:
Passare al C++ (che credo sia quello che ha fatto McNeel, almeno per quanto scritto da loro) ?
Peggio ancora, facciamo lavorare il compilatore, inoltre usiamo diverse librerie scritte da altri. :thinking:

E, se vogliamo allargare il discorso, in fondo quello che interessa a noi e’ cio’ che si vede sullo schermo e cosa cosa c’e’ scritto nei files che otteniamo, a volte anche delle stampate su carta …
E per ottenere questo sfruttiamo i vari componenti elettronici, processore, memoria, ecc.

… Che a loro volta usano una marea di altre conoscenze: elettricita’, materiali, fisica, matematica, logica ecc. ecc. :grinning:

Va be’ … sono partito un po’ per la tangente … sorry. :blush:
( Mi scuso per le inevitabili castronerie scritte … )

Secondo me si, ma a livelli differenti. Perché perdere tempo a reinventare la ruota se tante menti ci hanno ragionato e quella è la soluzione migliore? Si chiama progresso, ma non mi è nuova questa domanda.
Scendi più in profondità se non esiste già una soluzione diversamente fai un nuovo Step in più. C’è ancora tanto da scoprire e inventare o migliorare, affidandoci alle basi che ci hanno lasciato i predecessori.
C’è gente che si è ammazzata per rendere migliore la vita ai posteri e non dovere programmare il rendering di pagine web o di form desktop, penso a 11, XDM, KDE, XFCE,… Posix,…
e a tutte le interfacce progettate da team in decenni… Sarebbe uno spreco di tempo non sfruttarle e rifiutare una buona pietanza servita su piatti d argento.

Useremo l’ intelligenza e gli strumenti generosamente ereditati per costruire altra logica.

La società è costruita su ciò che hanno fatto gli altri.
Si, penso che non tolga genialità a nessuno e migliora la vita

3 Mi Piace

Tutte considerazioni giustissime, ma secondo me Salvio intende dire una cosa un po’ diversa che mi permetto di interpretare così (ma correggimi se sbaglio):

Quando ero piccolo il LEGO esisteva già.
I mattoncini erano di 20-30 tipi diversi e disponibili in pochi colori.
Potevi sbizzarrire la tua fantasia, trovare soluzioni personali e costruire tutto quello che potevi con i pezzi che avevi. Erano cose inventate da te di cui andavi orgoglioso.
Oggi si possono comprare delle confezioni di LEGO con tantissimi pezzi, di tantissime forme diverse e di tutti i colori (magari un pezzo di quella forma e colore c’è solo in quella scatola…).
Tutto pensato per costruire alla perfezione e senza troppi fastidi l’oggetto - e solo quello - che è stampato sul coperchio della confezione.

Evidentemente, questo è realizzato con l’intento di rendere la vita più facile a chi vuol solo assemblare i pezzi necessari per realizzare un oggetto esteticamente inappuntabile.

Dato per scontato che giocare col LEGO (così come programmare) è (era?) un divertimento senza pari, se mi regalassero una di queste “scatole di montaggio” e incominciassi a mettere insieme tutti i pezzi mi verrebbe spontanea la domanda “Ma sto ancora giocando col LEGO o questa è un’altra cosa?”

1 Mi Piace

Programmare.

Anche un “”“semplice”“”:
Print "Hello world"
In realtà include codice già programmato da altri.
E anche scendendo a livelli di C o assembly, in realtà starai usando le pipeline fisicamente programmate e quindi stampate col silicio per eseguire anche le istruzioni più semplici.
Dovremmo forse chiamare “programmatore” solo chi disegna i circuiti?
(vogliamo scendere alla chimica e agli atomi? …)


Chi oggi usa software come grasshopper o l’unreal engine (dove anche li puoi fare un gioco completo senza scrivere mezza riga di codice), lo definirei comunque “programmatore”.

1 Mi Piace

In attesa che Salvio possa spiegarci meglio … :slight_smile:

Lego e programmazione … classico ! :grinning:
Forse chi e’ piu’ giovane ha avuto occasione di appassionarcisi da subito ai computer e ha ‘saltato’ la fase Lego, non saprei …
Ma per i piu’ ‘grandicelli’ (:wink: ) mi sembra una accoppiata quasi inevitabile.
Almeno, a me sia scoprire i Lego che scoprire la programmazione (da semplice appassionato) ha dato la stessa sensazione … tipo “adesso ci divertiamo !!!”.
Ovviamente parlo del Lego classico, proprio quello che hai descritto tu, Diego.

Certo concordo sul fatto che le moderne ‘scatole di montaggio’ della Lego siano una cosa diversa, a meno forse di non curarsi dell’oggetto previsto e usare i vari mattoncini ecc. per farci tutt’altro. :confused:

E senza voler criticare ovviamente la tua opinione, ma solo per il piacere di chiacchierare un po’ … :slight_smile:
Personalmente parlando degli strumenti di scripting/automazione di Rhino, direi che solo RhinoScript in VBScript e di conseguenza rhinoscriptsyntax in Python mi danno in effetti una leggera impressione di ‘scatola di montaggio’ in quanto cio’ che ci si puo’ fare e’ relativamente limitato.
RhinoCommon invece non mi sembra che soffra di questi limiti.
Su Grasshopper non ho un’opinione chiara, non lo ‘capisco’ abbastanza … :blush:

… programmare open - no copyrights … importante è saperlo …

… non ho capito :sweat_smile: … in che senso open?
Mi pare si possano usare entrambi sia con target open che closed… no?

Perché altrimenti ti pende la spada di damocle sulla testa?
Cioè arriva il concorrente di turno che acquisisce il tuo fornitore per metterti in croce togliendoti il motore che sta alla base del tuo software/prodotto?

Emilio già sei proiettato per le feste. . . ai voglia di argomenti per fine anno, ci vuole ancora tempo :wink:

Diego con i lego hai centrato il discorso perfettamente (anche se non li ho mai comprati, ma lo farò)

ovviamento anch’io condivido quello che avete detto, tipo non bisogna ogni volta reinventare la ruota,
oppure anche dietro ad un print esiste un codice impacchettato che ti permette di stampare un testo

però proprio come i lego inizialmente che come dice Diego erano solo quelli i pezzi, ed eri tu che poi dovevi dare forma a quei mattoncini per lo stesso discorso faccio un paragone con un libro che comprai insieme a quelli di Vb e Access per imparare a programmare in Cobol dove il linguaggio per scrivere il codice era su un floppy-disk da 1.4 la pagina che ti trovavi davanti era tipo blu quasi verde e ti dovevi scrivere anche i numeratori di riga 001 002 003 ecc e se da un punto del codice volevi saltare ad un’altra parte del codice dovevi indicare con GoTo a quale riga volevi andare. ora anche in Cobol c’erano istruzioni che ti permettevano di fare determinate azioni ma erano solo quelle addirittura se ricordo bene come cicli non c’era nemmeno il For ma soltanto il When con End When. per carità non voglio dire di imparare il linguaggio macchina con le combinazioni 0 1 e nemmeno assembly ma credo che comunque non si possa non dire che questi nuovi strumenti aiutano moltissimo nella programmazione non credete?

facendo un paragone con la formula uno, i piloti di oggi sarebbe in grado di guidare auto di 30 anni fa?

(bah chissà forse anch’io se per scrivere un codice per fare un Offset avrei dovuto scrivere
centinaia di righe forse ci avrei ripensato più volte per poi dire; ma chi me lo fa fare. . .)

ps comunque resta il fatto che per una funzione in C# come DateTime dietro ci siano oltre 5000
cinquemila righe di codice io sapevo che era un lavoraccio ma non credevo così esagerato. . .

Ciao Salvio,
credo che lo stesso ragionamento tu lo possa applicare a qualsiasi lavoro.
Pensa negli ultimi 50 anni che impennata ha avuto la tecnologia, in tutti i campi, dalla medicina alla meccanica all’edilizia alla ricerca…
Qualsiasi persona, a tutti i livelli, sta utilizzando nel suo lavoro degli strumenti che gli semplificano la vita rispetto al passato.
Alcuni lavori sono spariti lasciando spazio a delle nuove professioni, altri sono rimasti simili ma comunque migliorati sotto il punto di vista dell’ergonomia o della sicurezza ma possiamo comunque definirli “lavorare” e l’importante è farlo bene.
Credo che lo stesso valga per la programmazione: conta il risultato, non il numero di righe o il tipo di linguaggio.

1 Mi Piace

Semplicemente intendo che laddove la tua idea in quanto basata su strumenti
di terze parti può essere oggetto di rivalsa … ma a me non interessa. Cerco di
dare semplici spunti per tutelare la propria idea.

ciao Lucio, certo, infatti questo ragionamento l’ho fatto anche, e non so se sia proprio così, ma la mia risposta a ciò e che credo che come noi tornare indietro sarebbe complicato anche per i più bravi di un tempo sarebbe non facile adattarsi a lavorare come lavoriamo noi (che dite?) puoi essere il miglior chirurgo della storia il più preciso di tutti, ma non sarebbe mai più preciso di un braccio robotico, ma lo stesso chirurgo poi sarebbe in grado di far funzionare quel braccio robotico? (“magari forse” anche si ma tanti suoi colleghi altrettanto bravi anche sarebbero tutti in grado di farlo? questo non credo) scusate lo sfogo ma il fatto di queste 5000 righe per un DateTime mi ha scioccato, sarà che a parte i metodi usati per Rhino, nella pratica io ho sempre usato solo i cicli for&each/do loop il print ed altre minime cose varie, ovviamente anche funzioni per le date l’orario i giorni della settimana ecc ma in questi pochi giorni con C# ho visto cose che credevo fossero utilizzare a ben più alti livelli ed invece se già vengono usate per queste cose mi chiedo ma alla fine (è vero che gli script me li faccio per me) ma non si possono nemmeno paragonare è un’altra galassia, nel mio caso non posso nemmeno dire che stavo giocando, perché anche nel giocare ci vuole un certo impegno che confrontandolo è insignificante.

faccio un esempio giusto per dare un parametro di proporzione:
motivazione; ho deciso finalmente di approcciarmi al C# è la motivazione finale è stato il fatto che con il libro Python consigliatomi tempo fa non sono riuscito a capire come funzionassero bene le classi, osservando che i linguaggi come C# ne fanno un largo uso ho pensato fosse un buon modo per cercare di capirne di più. ma la spinta iniziale mi era già partita da quel fatidigo file RVB che ho riaperto dopo un po di tempo per rimetterci mano sapendo che aveva varie cose che non mi andavano bene già all’epoca in cui l’avevo scritto; come ad esempio in alcuni passaggi uso il Command per richiamare i comandi Rhino essendo che non ci sono metodi preposti per tali comandi come ad esempio il CurveBoolean a quel punto mi dico mah già questo file RVB in varie parti si dovrebbe ottimizzare meglio il codice, poi converrebbe spezzettare il codice anche con funzioni separate in modo da gestirlo più semplicemente ed infine ci sono questi comandi richiamati con il Command che non mi sono mai piaciuto essendo che mi danno una sensazione di una non vera programmazione. poi però scopro che se in quelle poche righe di codice da me scritto con all’interno il comando CurveBoolean richiamato con Rhino.Command lo voglio sostituire scrivendo il codice in C# solo per replicare quel comando ci vuole un codice di oltre 100 righe.

I tipi di classi diventano man mano più complessi.
Partendo da cose semplici come int, double, string, bool, gli sviluppatori di rhino hanno creato le loro classi “base” che derivano direttamente da quelle, come i punti o vettori (entrambi un piccolo array di 3 double).
I piani, un punto abbinato a 3 vettori.
La linea, un piccolo array di 2 punti.
La polilinea, simile ma con n punti.
E fin qua, “robetta”.
Le mesh, lista di punti con “gruppetti” di int per definire le faccie. Più complesso, ma ancora comprensibile da tutti.

Poi le Nurbs, curve e superfici… robe ben più complesse…
E così via…

Poi ci sono i metodi che fan “comunicare” tra loro più classi, come ad esempio gli “intersector”, che cercano/calcolano le intersezioni tra le geometrie.
Metodi per calcolare se un punto è interno o no ad una curva. ecc ecc
Già solo qua, per valutare tutte le eccezioni, filtrare/prevedere gli errori senza mandare in blocco il programma, di quante righe di code parliamo? Migliaia, probabilmente, anche per il più semplice dei metodi.
Metodi che richiamano metodi, e così via.

Così che tu possa avere un “CurveBoolean” che sia versatile e accessibile “sia da UI che da API” (per così dire). Una unica classe/metodo che contiene all’interno un BOTTO di roba, il che rende semplice per noi l’utilizzo.


Il DateTime da 5000 righe, non so in specifico a cosa ti riferisci, ma non mi stupirei se anche li tu abbia visto una classe che contiene molti altri metodi, verifiche, varianti, ecc…
Tipo, data e ora… ok, ma con che timezone? Solare o legale? Della macchina o da internet?

Probabilmente ricavare l’ora e data a bassissimo livello usa un metodo molto più corto. Farlo da un livello più alto è normale che venga fatto con metodi più grossi ed esaustivi , versatili.


Ogni singolo pixel del tuo schermo viene aggiornato a 60Hz e a ogni frame potrebbe dover cambiare il suo unico e specifico colore tra le 256x256x256 possibili combinazioni.
Variabilissimo, ma probabilmente ogni volta che lo fa il “segnale” ha attraversato ben più di 5000 righe di codice.

Il tuo programmare una singola riga di codice, solo per “esistere su schermo” ha mosso una infinità di altra roba!


Il nostro scriverci tramite internet?
Quante “righe di codice” ha attraversato ogni carattere che ci scriviamo? (tra pc, reti, server…)

… È tutto normale! Non ti scioccare! :rofl:
Ciò che hai in tasca è molto più spaventoso.

3 Mi Piace

Screenshot 2022-12-16 at 02-31-28 buco nero - Ricerca Google

ahahahah :rofl: :rofl: :joy:

1 Mi Piace

Concordo.
E poi, l’ora e la data sono tra le cose più critiche per i conputers collegati in rete.
Ci sono un sacco di problemi di sincronizzazione se due macchine dialogano con orari sballati.
Basti pensare che terrore avevano tutti del millennium bug… poteva verificarsi l’apocalisse…
Quindi le righe di codice non sono mai abbastanza se devi tenere in considerazione tutti i casi possibili.

1 Mi Piace

Le informazioni che arrivano ai nostri cellulari sono corrette dai satelliti che implementano le relazioni di Einstein per la sincronizzazione oraria.

1 Mi Piace

Scusa Salvio, puoi specificare meglio a cosa ti riferisci ?
Dove e’ scritto ? :slight_smile:

ciao Emilio, lo sentii alcuni giorni fa mentre stavo seguendo i tutorial sul C#
se ho capito bene, si dovrebbe trattare di una routine .Net scritta da Microsoft

sto cercando di intercettare il video nel quale se ne parlava, appena ci riesco te lo indico :+1:

Emilio e che ce voluto ahahahah

:sweat_smile: :sweat_smile:

al min 3.15 spiega che l’utente Giovanni de Rosa (collaboratore per altri tutorial) ha fatto questa ricerca

ho girato tutto il pomeriggio tra la metà della 30ina e la 40ina per poi trovarlo alla fine tra i videi 49/50/51
(c’é uno sfasamento tra il numeratore di Youtube e quello del titolo essendo che è stato aggiunto un bis)

comunque proprio all’inizio del video nel link postato viene spiegato questo famigerato codice DateTime
alla fine debbo dire che dal video #37 sono tutti argomenti che credo riterresti interessanti anche tu :wink:
(ovviamenti io ho cercato semplicemente di seguire il discorso ma sono già argomenti avanzati per me)

ps

@luca.filippone ma sei tu?

1 Mi Piace