Newsgroup: it.comp.lang.c++
Titolo: Consigli

Salve a tutti.
Ho 16 anni e da circa due programmicchio in Visual Basic, partito dal 6 fino 
a .NET 2.0.
Adesso però sento che VB non mi soddisfa più di tanto, anche se come modello 
ho Francesco Balena però sento che le applicazioncine che mi sono fatto 
(minibrowser, client di invio posta ecc.) non hanno quel qualcosa in più.
E mi è venuto in mente di cambiare linguaggio.
Adesso, premettendo che Java è bandito da casa mia causa il brutto approccio 
avuto con esso, mi sono orientato verso la programmazione c-based, e la 
cerchia si è ristretta a tre linguaggi: C++ (standard, quello legato a 
Strousoup per intenderci) Visual C# o C++ rigorosamente 2005, perchè il .NET 
1.0 e 1.1 mi hanno fatto faticare non poco.
Pro e contro.
C++
Pro
Molto materiale
Molta gente con esperienza
Molto potente
Contro
Poco moderno
Piuttosto difficile
Visual C++ 2005
Pro
Basi solide
Potentissimo, sfrutta se non al 100% .NET al 90%
Proiettato al futuro
Molto flessibile
Contro
Più difficile del C++ standard
Non portabile
Visual C# 2005
Pro
Nuovissimo e potentissimo, .NET è praticamente nato per lui
Contro
Il fatto di essere così nuovo
Non portabile completamente (*)
Cosa fare?
Rimanere con Visual Basic?
A cosa passo?
Tenendo conto delle mie ambizioni lavorative (Sistemista Programmatore) e di 
produzione (un mio Sistema Operativo, oppure mettere le mani su ProjectOZ 
all'università...), qual'è il migliore a lungo termine?
Grazie per ogni aiuto che arriverà
(*) = Ogni riferimento a MonoProject NON è casuale! :-) 

 all'università...), qual'è il migliore a lungo termine?
Scusa, ma per "Sistemista Programmatore" intendi, come mi sembra piu' 
consueto, una persona in grado di fare sia l'amministratore di sistemi 
informatici che il programmatore di software applicativo, oppure intendi 
un programmatore di software di sistema (sistema operativo, driver, 
utility, interpreti, compilatori)?
Si tratta di due figure professionali notevolmente diverse.
Inoltre, sei piu' interessato al mondo Microsoft, al mondo Posix, o in 
egual misura?
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 egual misura?
Fondamentalmente Microsoft, usando Windows dal 3.1 (mamma mia mi viene la 
pelle d'oca a pensarci, i miei amici belli con win98 a giocare, io con 
Win3.1 a ottimizzare un 386 della Olivetti...) mi sono affezionato...
Scherzi a parte, ora come ora vedi sopra, ma per il futuro mi converrebbe 
imparare a programmare multipiattaforma, soprattutto per sfruttarli in un 
possibile ambito sistemistico.
Grazie per esserti interessato 

 possibile ambito sistemistico.
In tal caso, mi sentirei di sconsigliarti l'uso del C e del C++, che 
sono utilizzati soprattutto per il software di sistema o per grandi 
applicazioni distribuite a un gran numero di utenti. Tali linguaggi sono 
poco usati e lo saranno sempre meno per sviluppare applicazioni che 
verranno installate e utilizzate da uno o pochi committenti, che sono 
quelle sviluppate dai sistemisti programmatori.
In ambiente Windows, i linguaggi piu' usati dai sistemisti programmatori 
sono i file di comandi .BAT e il VBA per scrivere le macro di Office.
La Microsoft nel 1998 ha proposto il Windows Scripting Host, che 
supporta VBScript e JScript, ma mi sembra che sia stato ben poco 
utilizzato, se non per fare worm.
I sistemisti in ambiente Posix tendono a scrivere molti piu' script dei 
sistemisti in ambiente Windows. I linguaggi utilizzati esistono anche 
per Windows, anche se non si trovano preinstallati: shell script, awk, 
perl, python, ruby.


 python, ruby.
OK, quindi script per l'ambito sistemistico.
Ma quello programmativo?
Grazie mille 


Ovviamente intendevo non vincolato all'ambito sistemistico... 


Ciao,
premesso che siamo fuori tema in questo NG.
Se e` vero che hai 16 anni, i miei consigli sono questi:
1) Prendere almeno un diploma universitario in informatica.
2) Imparare l'inglese quasi bene.
3) Lavori di sistemista-programmatore non ci sono. Almeno non ne ho mai 
visti.
nel frattempo se proprio ti diverti a "smanettare" tieni d'occhio python.
a) E` multipiattaforma.
b) E` usato dai sistemisti per fare scripting.
c) E` usato dai programmatori (ti consiglio di seguire i post di alex 
martelli in it.comp.lang.python), per esempio, e` utilizzato 
diffusamente in google.
Se poi vuoi buttarti su C/C++ fallo pure, in rete esiste moltissimo 
materiale. Sappi pero` che con C/C++ costruire applicazioni non e` un 
lavoro semplice e secondo me non e` neanche un lavoro da autodidatta.
Spero che non si offenda nessuno ma la penso cosi`.
Cesare

 lavoro semplice e secondo me non e` neanche un lavoro da autodidatta.
Data la corsa a linguaggi più semplici e di livello più alto, anche la 
comunità del C++ ha sentito il bisogno di non rimanere indietro. Questo 
ha fatto sì che in C++ si possa praticamente fare tutto quello che si 
può fare in qualsiasi altro linguaggio scrivendo un numero di righe di 
codice non superiore. Il problema è che un tale framework deve essere 
assemblato a partire dalle mille librerie non standard con il 
conseguente rischio di rimanere isolati dal resto della comunità.
Per es. basta usare le librerie Boost per rendere il proprio codice 
incomprensibile ad almeno il 99% dei programmatori di C++.
Allora credo che in ambito commerciale (dove non si vuole rischiare 
troppo) non si desideri un linguaggio estensibile, ma un linguaggio che 
abbia già tutto ciò che serve per programmare ad alto livello. Ciò che 
non è standard viene solitamente scartato o avvicinato con molto timore.
Questa è l'idea che mi sono fatto leggendo forum, ng, ecc...
Kiuhnm

 Cesare
Allora, sull'inglese ci sono (Certificazione KET già in mio possesso).
Sul fatto che non esista il Sistemista Programmatore non so, ho trovato 
alcuni annunci con quella specifica mansione...
Pensando all'università, quanto posso guadagnarne acquisendo una laurea in 
Matematica?
Parlando di Python. Aspetto che sia completo su .NET perchè sono legato 
molto al framework, ed è una tecnologia giovane.
Sul fatto che non sia multipiattaforma, diamo tempo al tempo...
Grazie mille 

 Spero che non si offenda nessuno ma la penso cosi`.
Spero che tu non ti offenda se considero Python uno dei tre migliori 
linguaggi all-purpose esistenti, ma Ruby meglio di Python.

 non è standard viene solitamente scartato o avvicinato con molto timore.
Per linguaggi come il C e il C++ questo è vero.
Per linguaggi come Python, Perl, Smalltalk, Ruby etc. questo è molto 
meno vero (o meglio è vero solo in parte).
In particolare alcune librerie non standard ma molto ben scritte e 
assolutamente disponibili (nel senso che vengono spesso fornite insieme 
al linguaggio e/o che basta un comando fornito con il linguaggio per 
attivarle) vengono spesso considerate alla stregua di librerie standard.
Avviene quello che in C succede con funzioni come select, accept etc. 
che non sono standard (e quindi non sono al 100% portabili) ma che si 
considerano praticamente standard nei sistemi in cui esistono.
Solo che per quei linguaggi non si tratta solo di librerie per il 
networking, ma spesso di framework ben più complessi.

 Duck Typing con un linguaggio come Ruby e una libreria come ActiveRecord.
Funzionalità di così alto livello si possono ottenere usando template, 
preprocessore e un interprete in run-time. A questo punto però è meglio 
passare direttamente a Ruby. In C++ si vuole fare il più possibile in 
compile-time, ma se si è pronti a violare questo principio, allora si 
possono creare DSL a volontà. Gli script puoi passarli come se fossero 
dati e farli interpretare in run-time.
Per es. il preprocessore è IMHO molto sottovalutato. In queste ultime 
settimane ho realizzato un interprete in grado di generare codice C++ 
arbitrario. Ricorda un asm di alto livello:
#define GUNC_0	(SET, REG0, 500)
#define GUNC_1	(SET, REG1, 0)
#define GUNC_2	(WHILE, REG0 > 0)
#define GUNC_3		(SET, REG0, REG0-1)
#define GUNC_4		(SET, REG1, REG1+1)
#define GUNC_5		(VERBATIM)
#define GUNC_6			int CAT(var, REG0) = REG1;
#define GUNC_7		(ENDV)
#define GUNC_8	(ENDW)
#define GUNC_9	(END)	
Supporta valori in [-10^10-1, 10^10-1] e non pone praticamente limiti 
sul numero di iterazioni e sulla complessità/lunghezza del codice. 
Adesso non mi resta che ottimizzarlo.
Per es. quel codice impiega ben 15 secondi sul mio XP2800+ per essere 
eseguito, ma conto di ottimizzarlo notevolmente.
Il codice C++ generato è, come intuibile,
int var0 = 500;
int var1 = 499;
.
.
.
int var499 = 1;
Sono anche consentite espressioni del tipo:
(SET, REG0, (REG0*REG1 - REG12/(1+REG1)) > 0)
Non ci sono limiti a quello che si può fare, però bisogna scervellarsi 
un po'.
Kiuhnm

 un po'.
Quello che adoro dell'informatica è che a volte lo scervellarsi è più 
divertente del fare!

 La classica soluzione in cerca di un problema.
Veramente è la soluzione a un post di questo ng... e a un mio problema.
Per questioni di efficienza, ho un file cpp di 3000 righe estremamente 
ridondanti. Questa libreria risolverà una volta per tutte i miei problemi.
Kiuhnm

 Allora, sull'inglese ci sono (Certificazione KET già in mio possesso).
Direi che è troppo poco per poter dire di conoscere l'inglese 
sufficientemente bene! :-) 

 Questa è l'idea che mi sono fatto leggendo forum, ng, ecc...
E ci hai preso.
Ciao,
Cesare



 Sul fatto che non sia multipiattaforma, diamo tempo al tempo...
Scusa ma nel precedente post non hai detto che ti interessa programmare 
multipiattaforma?
Se vuoi programmare "alla moda" e` un'altro discorso.
Ciao,
Cesare

 che devo fare?".
Non bisogna pero' dimenticare che nell'equazione entrano anche
l'esperienza e la "forma mentis" del programmatore.
Ciao,
Nicola

 l'esperienza e la "forma mentis" del programmatore.
Vero.
Ma sono fermamente convinto che per costruirsi una "forma mentis" da 
programmatore bisogna studiare. Spesso sembra che conti solo 
l'esperienza nel nostro mondo. Non dico che progettare software sia come 
progettare i ponti, pero` io non metterei un autodidatta a scrivere il 
codice di un sistema di monitoraggio di una centrale nucleare.
Ciao,
Cesare

 dal C/C++ non scappi.
Questo non è propriamente vero.
Saluti  Manlio Perillo

 Questo non è propriamente vero.
Si va bene... esistono telefonini o pda in cui si puo` programmare in java.
Forse esistono pure in cui si puo` programmare in python, ma non sono 
molti questi sistemi embedded e in generale sono per il mercato consumer.
C/C++ sono assolutamente predominanti nel settore dei sistemi reattivi 
che richiedono prestazioni in tempo reale, uptime lunghissimi, risorse 
scarse.
Ciao,
Cesare

 
Non che abbia esperienza di sistemi di controllo industriali, ma magari
non è detto che uno debba implementare la logica dell'applicativo *sul*
sistema embedded.
Puoi implementare in C il protocollo di comunicazione (sul server) e in
Python il client.
Saluti  Manlio Perillo


Quoto al 100%

"antuantuan" <ant...@TOGLIMIlibero.it> ha scritto nel messaggio 
news:YZC6g.109702$A83.2...@twister1.libero.it...

Ma non solo quella. Parlo quotidianamente inglese con i miei parenti in 
Australia, mi vedo la TV e leggo giornali in inglese, e anche articoli 
tecnici (MSDN Magazine and so on...) 


Probabilmente mi sono espresso io male.
Al momento il multipiattaforma non mi interessa più di tanto, ma mi 
interesserà (probabilmente) in futuro se da sistemista dovrò usare sia 
Windows che Unix-like.
Fermo restando che VOGLIO saper svolgere anche il mestiere di programmatore, 
che è la mia ambizione principale. 


Questo e' un newsgroup dedicato al C++ standard.
Per discutere dalla programmazione in generale, rivolgiti al gruppo 
it.comp.programmare.
Per quanto riguarda il C++, posso dire quanto segue.
In passato, quando i computer avevano meno memoria ed erano piu' lenti, 
il C++ era poco indicato per scrivere software di sistema e software 
embedded (per i quali erano indicati l'assembly e il C), mentre era 
indicato per scrivere applicazioni desktop (videoscrittura, CAD, ecc).
Oggi che i computer hanno piu' memoria e sono piu' veloci, le 
indicazioni sono cambiate, nel senso che e' diventato consigliabile 
scrivere il software di sistema e il software embedded in C++ invece che 
in C, ed ed e' diventato consigliabile scrivere il software desktop in 
linguaggi di livello piu' altro del C++, come Java e C#.
Tuttavia, l'utilizzo effettivo non e' molto cambiato a causa 
dell'inerzia, cioe' per l'esistenza di software da manutenere e per 
l'esperienza dei programmatori.
Comunque, sia in passato che nel presente e nel futuro, il C++ e' 
indicato per grandi applicazioni, cioe', diciamo, per applicazioni il 
cui sviluppo richiede oltre cinque anni-uomo, ed e' indicato per 
applicazioni CPU-intensive, cioe' per elaborazioni che sfruttino 
intensamente il processore.



Mi spiace ma non l'ho mai visto fare.
Se hai delle deadline di millisecondi da rispettare senno il robot ti 
rovina un pezzo la logica deve stare sul sistema embedded.
Se hai un router ad alta capacita` che deve far girare algoritmi di 
routing che consumano molta CPU, questi devono stare sul sistema embedded.
Certo un client python che si collega ad uno di questi sistemi per, 
magari, configurarlo, si puo` sempre fare pero` da qui a dire che col 
python si fanno i sistemi embedded ce ne corre.
Ciao,
Cesare

 
Ed infatti in Python *non* si farebbero comunque i sistemi embedded.
Comunque era giusto una curiosità.
Saluti  Manlio Perillo

 Python su questi dispositivi.
Ad ogni modo esistono :)
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.

 Ma quello programmativo?
Python, Ruby.


 linguaggi all-purpose esistenti, ma Ruby meglio di Python.
Questione di gusti direi. Nel vero sense del termine. Regolarmente
quando lavoro in Ruby ci sono un paio di cosette di Python che mi
mancano e viceversa ci sono i blocchi e un'altro paio di cosette di Ruby
che mi mancano.
Alla fine credo di preferire Python per ragioni "storiche", ma capisco
benissimo la tua posizione.
Il terzo sarebbe il C++?


 oscenamente OT? :)
Ad esempio su it.comp.lang, assumendo che il suo moderatore sia ancora
in ascolto...
Ciao,
Nicola

 Il terzo sarebbe il C++?
No. Il C++ è il linguaggio che amo di più e che ho usato di più (e che 
conosco meglio, al pari di C che chi conosce il C++ non fa fatica a 
conoscere altrettanto bene).
Ma non lo considero un linguaggio general purpose.
Credo che potenzialmente ci metterei Smalltalk fra i primi tre. Ma forse 
anche un qualche linguaggio funzionale (quando ho scritto "i primi tre" 
non avevo in mente una classifica).

 non avevo in mente una classifica).
Beh, si Haskell. OCaml pure... non credo in una classifica *assoluta*.
Per quanto mi riguarda Haskell lo conosco di vista, e OCaml meno. Le mie
esperienze funzionali si sono fermate al Lisp, in buona sostanza.
Preferisco adottarne il paradigma in alcuni idiomi python. Dicevo,
conoscendoli solo superficialmente non potrei davvero metterli in un
ipotetica classifica, classifica poi che avrebbe un senso solo
personale, a livello del "mi piace il cioccolato più della pizza".
