Torna indietro   Hardware Upgrade Forum > Software > Programmazione > Corsi, Tutorial e FAQ

NVIDIA Blackwell B200: due chip in uno per rivoluzionare l'intelligenza artificiale
NVIDIA Blackwell B200: due chip in uno per rivoluzionare l'intelligenza artificiale
Due GPU (die) su un unico package per un totale di 208 miliardi di transistor: la nuova GPU Blackwell di NVIDIA nasce per accelerare l'innovazione nel campo dell'intelligenza artificiale come mai prima d'ora. La nuova proposta è accompagnata da 192 GB di memoria HBM3E per una bandwidth di 8 TB/s. A comporre la nuova offerta di NVIDIA troviamo tre soluzioni: B100, B200 e GB200.
HP Envy Move, un PC All-In-One con la batteria che si può spostare facilmente
HP Envy Move, un PC All-In-One con la batteria che si può spostare facilmente
HP Envy Move non è un PC all-in-one come tutti gli altri: si può spostare facilmente e usare lontano dalla presa di corrente. Lo schermo touch consente di usarlo anche come un grande tablet e può diventare un display aggiuntivo. Il tutto condito da un'attenzione all'ambiente grazie all'uso di materiali riciclati.
MSI MPG 321URX QD-OLED: un monitor completo per i giocatori
MSI MPG 321URX QD-OLED: un monitor completo per i giocatori
MSI MPG 321URX QD-OLED è un monitor completo, con diagonale da 32 pollici, risoluzione UHD, porte HDMI 2.1, frequenza di aggiornamento di 240 Hz e con un pannello OLED che offre diverse caratteristiche interessanti per il pubblico dei giocatori
Tutti gli articoli Tutte le news

Vai al Forum
Discussione Chiusa
 
Strumenti
Old 01-10-2003, 12:06   #1
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Programmazione F.A.Q.

Queste sono linee guida e consigli per chi si affaccia per la prima volta
nel meraviglioso mondo della programmazione.
Questi piccoli appunti nascono dalle continue richieste di newbies che intendono
affacciarsi per la prima volta timidamente in questo mondo. Pertanto quì sono state raccolte
delle piccole "Frequently Asked Questions" che chi vorrebbe imparare pone di solito.
Leggendo queste piccole F.A.Q. è possibile trovare subito una risposta al proprio
quesito (si spera) e ciò consentirà di snellire il forum, evitando il ricorrere di
quesiti molto frequenti e elementari, a volte frustranti per i più esperti, ma tanto importanti
per i newbies. Di seguito si presenteranno i seguenti argomenti:

Codice:
1) Linguaggi interpretati contro linguaggi compilati.
2) Che differenza c'è fra un compilatore e un IDE?
3) Vorrei imparare a programmare. Che linguaggio mi consigliate?
4) Voglio imparare C/C++/Java/Pascal/Delphi/Visual Basic!. Che tool mi consigliate?
5) Sono un duro. Voglio occuparmi di Assembly.
6) Che differenza c'è fra C e C++?
7) Cos'è la programmazione Object Oriented (OO programming)?
8) Ma se il C++ è a oggetti, perchè il C non è morto?
9) Che materiale posso usare per imparare (libri, tutorial)?
10) Io conosco già un linguaggio come C/C++, ma non riesco lo stesso
    a scrivere un programma che sia degno di questo nome.
11) Ho bisogno di scrivere un'interfaccia grafica. Qualche consiglio?
12) Il mio codice non lavora come dovrebbe. Che posso fare?
13) Voglio compilare il mio codice scritto in Windows sotto Linux o viceversa.
14) Sono uno che ragiona ad entita' e relazioni. Mi serve un database. Cosa c'e' in giro?
15) Mi servono notizie sulla libreria X per il linguaggio Y utilizzando Z. 
    Devo compilare il tutto con W ed effetturare il debugging con K. Deve girare su P. Consigli?
1) Linguaggi interpretati contro linguaggi compilati.
Non tutti i linguaggi servono per assolvere allo stesso scopo. E non tutti funzionano
con lo stesso principio. I linguaggi interpretati vengono fatti girare da un altro programma
che si chiama interprete. L'interprete prenderà in pasto il vostro programma, eseguendo una per
una le istruzioni contenute nel file del vostro programma. Esempi di questi linguaggi erano il
basic o versioni preliminari del Pascal, fino ai moderni linguaggi come Ruby o Python.
I linguaggi compilati invece, non funzionano così. Essi vengono tradotti in linguaggio macchina
(una particolare sequenza di 1 e 0 leggibili dal vostro calcolatore) da un altro programma detto
compilatore. Una volta che il vostro programma sarà stato compilato, esso diverrà un file
"eseguibile" e non avrete piu' bisogno del compilatore per eseguire il vostro programma.
Quale dei due approcci è migliore? Difficile a dirsi e tutto dipende da ciò che dovete fare.
Per esempio uno script di una shell o uno script DOS sono programmi interpretati. L'interpretazione
in genere è parecchio + lenta nell'eseguire un programma rispetto ad uno compilato. Ma, poichè
i compilatori solo programmi estremamente complessi e sofisticati, molte volte non vale la pena
progettare un compilatore per linguaggi relativamente semplici. Esempi di linguaggi compilati
sono C/C++ e in parte Java. In parte perche' Java, effettivamente, merita un discorso a parte.
Strano a dirsi, ma è sia compilato che interpretato!
Uno dei principali obiettivi del team di Java era quello di rendere i programmi scritti in Java
eseguibile su macchine totalmente differenti fra loro (sapete quanto sono diversi un cellulare, un
ricevitore satellitare e un PC) e sistemi operativi differenti. Quelli di SUN allora hanno creato
una vera e propria astrazione dell'hardware, costruendo una "macchina virtuale" che si adattasse bene
su hardware totalmente differenti fra loro. Quando compilate un programma JAVA, esso verrà compilato
non nel linguaggio macchina della macchina che state usando, bensì in quello della macchina virtuale
(virtual machine). Successivamente per eseguire il programma basterà interpretare il programma appena
compilato con un interprete JAVA, che per eseguire il programma convertirà al volo il codice macchina
della macchina virtuale in quello del vostro elaboratore o in quello della macchina su cui si sta
eseguendo il programma. Ecco perchè anche con JAVA basterà compilare il programma una volta sola
ed eseguirlo ovunque vi troviate (il più delle volte) semplicemente con l'interprete JAVA.
Questo deriva dallo slogan Sun "Compile once, run anywhere". Non era proprio quello che si ottenne con
la versione 1.02 del JDK, una pratica derisa con il contro-slogan "Compile once, debug anywhere"

2) Che differenza c'è fra un compilatore e un IDE?
Un compilatore, come già detto, è un programma che si esegue dalla riga di comando e che ha
come scopo quello di tradurre il vostro file di codice in un altro programma eseguibile dal
computer. Un IDE (Integrated Development Environment - Ambiente di sviluppo integrato) è in
genere un software grafico che vi assiste nella creazione del codice sorgente. Un IDE quindi
richiederà un compilatore obbligatoriamente, non necessariamente l'inverso.
Esempi di IDE sono Visual C++, Delphi o JBuilder.

3) Vorrei imparare a programmare. Che linguaggio mi consigliate?
I linguaggi di programmazione sono piu' o meno differenti fra loro ma tutti hanno uno scopo
in comune: consentire lo sviluppo di un'applicazione. Questo ovviamente influisce sul tipo
di linguaggio da usare. E' bene notare che non esiste il linguaggio perfetto. Ognuno ha i suoi
vantaggi e svantaggi, limiti e virtu'. Per avvicinarsi alla programmazione, è necessario
impadronirsi di tutti quei concetti che sono comuni ai diversi linguaggi (es. array, puntatori, cicli, variabili, ecc)
ed è pertanto altamente consigliato cominciare con un linguaggio semplice che permetta di non
focalizzarsi troppo sugli elementi del linguaggio stesso, bensì su questi concetti.
Il linguaggio per l'apprendimento per eccellenza è il Pascal (oggi ne esistono diverse versioni
più o meno professionali, quali ad esempio Delphi di Borland), ma nulla ci vieta di cominciare con
C, C++ o Java. L'importante e impadronirsi dei concetti. Il resto sarà un naturale proseguio.
In linea di massima vi basti sapere che in genere il Pascal o il Visual Basic hanno una sintassi
semplice e delle funzioni molto potenti che vi consentiranno di sviluppare programmi più o meno
sofisticati senza troppe conoscenze. C e C++ sono linguaggi decisamente più criptici e vi
richiederanno sicuramente più sforzo, ma sappiate che attualmente la maggior parte di software
applicativo e di sistema scritto sui PC e le workstation/server utilizza C/C++.
Il Java merita un discorso a parte. Esso presenta una sintassi ereditata da Objective-C in primis
e da C++. Troverete non troppo ostica la sua sintassi rispetto a C/C++ e anche la sua libreria di
"funzioni" (che in Java si chiamano metodi) è molto ricca e adatta per ogni esigenza. C'è però un "ma".
Java è un linguaggio interpretato, quindi potrebbe essere troppo lento per alcuni compiti (specie
l'elaborazione numerica). Inoltre attualmente pochi tool applicativi sono scritti effettivamente
in Java puro. La vera potenza di Java si manifesta non tanto nella scrittura di software applicativo
quanto per la programmazione server side. La potenza dell'API di Java si nota infatti con la scrittura
di software di rete. Esistono poi librerie specializzate per assolvere ai compiti piu' disparati, come per
esempio la grafica 3D.

4) Voglio imparare C/C++/Java/Pascal/Delphi/Visual Basic!. Che tool mi consigliate?
Esistono una miriade di tool che aiutano nello sviluppo software indipendentemente dal linguaggio
che si intende utilizzare. In ogni caso vi servirà un compilatore.

-- C/C++ --
A parte quelli di Microsoft, esistono alternative gratuite e libere, come ad esempio:

MinGW - Ottimo compilatore C/C++ nativo Windows.
http://www.mingw.org

oppure

DJGPP
http://www.delorie.com/djgpp

Se invece volete un compilatore unito ad un IDE (vedi punto 2), c'è l'ottimo:

Dev-C++
http://www.bloodshed.net (scaricate la versione 5 e aggiornatela con VUpdate)

oppure il fantastico MinGW Developer Studio:
http://www.parinyasoft.com/
C'e' una versione che include anche MinGW.
Fantastica l'iscrizione sullo splash screen: "Not a member of the Visual Studio family products"

Con uno di questi strumenti avrete tutto il necessario per cominciare da subito a scrivere
programmi in C/C++.

Ovviamente potrete usare anche Microsoft Visual C++, ma considerate che è un IDE molto
complesso e professionale e potrebbe rendervi difficile l'apprendimento, se siete alle prime
armi assolute (e potrebbe anche svuotarvi il portafoglio, visto il costo ).

Se invece amate la quinta essenza della programmazione, decisamente consigliati gli editor
Emacs o Vi. Imparando uno di questi tool scoprirete che la parola "editor" non e' quella
che si intende generalmente, ma qualcosa che potrebbe vertere sul religioso

-- Java --
Per Java non avete grandissime scelte se non usare il Java Development Kit (JDK) ufficiale
di SUN (Ok, ci sono altre alternative, ma se state imparando questo è il meglio da usare, e non
solo per imparare). Ne esistono diversi tipi. Il J2SE (Standard Edition), il J2ME (Micro Edition)
e il J2EE (Enterprise Edition). Visto che state leggendo questa F.A.Q. quello che fa per voi e'
decisamente lo Standard Edition.

http://java.sun.com

Scaricate l'ultima versione del JDK (non del JRE). Badate che ne esistono due versioni. Quella con il
solo JDK e' quella che include anche l'IDE NetBeans. Scaricate l'una o l'altra a seconda che abbiate
bisogno di un'IDE o meno.
Il JDK è ciò che vi consentirà di compilare eseguire il codice, il JRE consente solo di eseguirlo
(inutile dire che il JDK include anche il JRE )
Se volete anche un'IDE che non sia il succitato NetBeans, potete scaricare TextPad (http://www.textpad.com)
oppure Jcreator. Alternativamente potete scaricare JBuilder di Borland. Molto potente, ma anche complesso.

-- Pascal/Delphi/Visual Basic --
Ottima scelta. Il linguaggio didattico per eccellenza non è mai stato così professionale ai giorni
d'oggi. Questo grazie a Delphi. Potete scaricare gratuitamente e per scopi non commerciali
l'ambiente delphi dal sito:

http://www.borland.com

Altrimenti potete optare per un compilatore free che gode di un'ottima fama, come ad esempio
il free pascal:

http://www.freepascal.org

Se invece optate per Visual Basic, sappiate che è un linguaggio proprietario Microsoft e non avete
altra alternativa che il costoso Visual Basic di Microsoft. Inoltre sarete legati indissolubilmente
all'ambiente Windows. Sono in sviluppo delle versioni free per questo linguaggio, ma sono ancora
in versione embrionale e pertanto se ne sconsiglia vivamente l'uso.

5) Sono un duro. Voglio occuparmi di Assembly.
Assembly/assembler e' il nome che si da ad un'astrazione del linguaggio macchina vero e proprio. Viene indicato
indistintamente con questi due nomi, anche se, ad essere piglioli, il "linguaggio" dovrebbe
chiamarsi "assembly" mentre il suo "compilatore" dovrebbe chiamarsi "assembler". Anche se a bassissimo livello,
l'assembly non e' ancora il livello piu' basso possibile. Difatti possiamo considerare il linguaggio
assembly come una corrispondenza "uno a uno" del linguaggio macchina vero e proprio (la sequenza di 1 e 0
che nelle macchine elettroniche costituiscono l'informazione). Cosa significa cio'? Significa che ad
ogni singola sequenza di 1 e 0 possiamo associare una singola istruzione in linguaggio assembly. I compilatori
per i linguaggi di programmazione tradizionali effettuano una vera e propria traduzione di quello che avete
scritto in linguaggio assembly. Ecco perche' il compilatore assembly in realta' si chiama assemblatore (assembler).
Proprio perche' non effettua alcuna traduzione, ma "assembla" cio' che avete scritto in un formato binario
leggibile dalla macchina e dipendente dal sistema operativo. Il tutto equivale a dire che il codice scritto e'
totalmente dipendente dalla macchina e quindi non portabile. Con l'assembly il concetto di architettura hardware
diventa l'unico punto di incontro fra informatica e elettronica, ragionando in termini di strati.
Perche' allora programmare in linguaggio assembly? I motivi principalmente sono tre.
Per programmare in assembly e' necessaria la conoscenza dell'architettura hardware sottostante (nei casi
avanzati non soltanto del processore). Imparare per bene un'architettura hardware, infatti, significa saper
effettuare dei programmi in assembly. Per desiderio di conoscenza, quindi. Ma non solo! Difatti delle routine
in assembly ben codificate possono risultare decine di volte piu' efficienti dell'equivalente scritto in un qualsiasi
linguaggio di programmazione compilato e centinaia di volte di uno interpretato. Applicazioni la cui velocita' di
esecuzione e' critica, contengono ancora routines codificate in assembly (si veda per esempio il dispatcher di un
sistema operativo). Il terzo motivo e' che alcune cose possono essere fatte comunque e solo in assembly, come ad esempio
la programmazione al piu' basso stato possibile (gli esempi sono molteplici ma si pensi alla simulazione software di un
processore o al codice di boot di un boot loader). Se la cosa non vi spaventa mi vi affascina, bene... avete bisogno
di un assemblatore. Ne esistono molteplici, ma la maggiorparte sono di difficile reperibilita' oppure sono molto vecchi.
Gli unici due ad essere veramente aggiornati sono lo GNU Assembler (as, anche detto gas) e Nasm (Netwide Assembler).
Il primo e' fortemente sconsigliato per una programmazione assembly pura. Ha un controllo degli errori minimale. Infatti
e' stato progettato per assemblare l'output dei compilatori. Ma proprio per questo e' il piu' consigliato quando si deve
incapsulare codice assembly in linguaggi di piu' alto livello come C o C++. NASM invece e' considerato dai piu' come
l'apoteosi dell'assemblatore per codifica manuale. Non vi sembrera' infatti di possedere un assemblatore, ma un compilatore
vero e proprio! Ha una gestione degli errori veramente degna di nota, inoltre supporta l'assemblaggio in diversi formati
binari (tra cui il COFF, l'ELF e via dicendo). La sua sintassi inoltre e' pulita e semplice da capire (per quanto semplice
si possa definire la sintassi di un linguaggio assembly, ovviamente ). Anche la documentazione in rete non e' male.
In ultimo, e' disponibile sia per Windows che per sistemi Unix. Nasm lo trovate qui':
http://nasm.sourceforge.net mentre 'as' lo trovate all'interno del pacchetto MinGW (vedi punto 4 sezione C/C++).

Per l'apprendimento consiglio vivamente il libro:

Jeff Duntemann
Assembly language step by step
- Programming with Dos and Linux -
John Wiley & Sons.


Vi dara' dapprima una buona preparazione sui vari tipi di numerazione (binaria, esadecimale e ottale) per poi descrivervi
l'architettura di un calcolatore (in maniera semplice ma ancora rigorosa) per poi passare alla programmazione vera e propria.
Scoprirete inoltre che i computer sono macchine estremamente stupide e vi renderete conto realmente che cosa si puo' fare
con dei numeri e il concetto di somma e sottrazione. Vi sorprenderete che un programma intero puo' essere rappresentato con
un numero e che altro non e' che l'attivazione di una serie di segnali elettrici in una determinata sequenza. I piu'
profondi noteranno una certa correlazione fra numero, macchina ed entita' divina

Se invece siete di poche pretese e soprattutto non volete spendere una lira (ops, un centesimo ), potete orientarvi
sul tutorial del dott. Paul Carter:

dott. Paul Carter
PC Assembly Language

reperibile all'URL:
http://www.drpaulcarter.com/pcasm/

Entrambi coprono la sintassi di NASM. Ovviamente il tutto copre livelli introduttivi (non preoccupatevi, introduttivo
per l'assembly significa che dovrete sudare sette camicie. Difatti e' l'unico linguaggio ad avere la caratteristica
che "l'introduttivo" e' piu' complesso dell'"avanzato"). Gli sforzi, tuttavia, saranno ampiamente ripagati e potrete
entrare a far parte di quella categoria di programmatori il cui nome viene denotato con 3lit3 (elite).

6) Che differenza c'è fra C e C++?
Contrariamente a quanto pensano molti, non sono lo stesso linguaggio. Il linguaggio C è il
cosiddetto linguaggio "strutturato" mentre il C++ consente il supporto per la programmazione
OO (che non sono due palle, bensì significa Object Oriented ). E' importante notare che i due
linguaggi, in ogni caso presentano aspetti molto comuni, e utilizzando un appropriato sottoinsieme
comune ai due linguaggi, è possibile compilare un programma C come uno C++ e viceversa. Tuttavia
è sempre bene tenere in mente il punto dove finisce il C e dove comincia il C++ e viceversa.

7) Cos'è la programmazione Object Oriented (OO programming)?
La programmazione a oggetti è una tecnica sviluppata presumibilmente per consentire a chi programma
di avere un mezzo con cui aumentare la complessità dei propri programmi. E' l'altro lato della
programmazione strutturata. Attualmente tutti i più moderni linguaggi di programmazione hanno il
supporto per la OO programming.

8) Ma se il C++ è a oggetti, perchè il C non è morto?
Perchè non tutti i programmi hanno bisogno della OO. Inoltre la Object Oriented Programming
introduce nuovi concetti che portano un notevole "overhead" in termini di prestazioni (avete presente
KDE? ).
Laddove si richieda software dalle prestazioni estreme, è preferibile usare C anzichè C++ (per
esempio tutti i nuclei (kernel) dei sistemi operativi presenti sul mercato sono scritti in C)
Inoltre non bisogna commettere l'errore comune che la OO sia una caratteristica di un linguaggio.
Essa è semplicemente una tecnica. E' possibile scrivere programmi Object Oriented in C. Ovviamente
linguaggi OO nativi vi daranno un supporto nativo e non dovrete scrivervi da soli funzioni per la
gestione degli oggetti o per l'ereditarieta'/polimorfismo ecc. ecc. Importantissimo sapere che
conoscere C++ NON SIGNIFICA conoscere C. Avrete sicuramente molti concetti applicabili sia all'uno
che all'altro linguaggio ma e' opportuno sapere che come C++ ha dei concetti applicabili solo a se stesso,
cosi' anche C ha dei concetti che non funzionano in C++. Questo e' maggiormente evidente anche dopo
l'ultima revisione del comitato di standardizzazione del C (il cosiddetto C99), che presenta costrutti
e regole sintattiche totalmente sconosciute al C++. Sembra infatti che i comitati di standardizzazione
vogliano procedere per la via della divergenza fra i due linguaggi.

9) Che materiale posso usare per imparare (libri, tutorial)?
Di questo la rete è ricchissima. Basta saper cercare su motori di ricerca tradizionali.
In linea di massima per C/C++ si consigliano gli ottimi testi di Bruce Heckel

http://www.mindview.com

rispettivamente "Thinking in C++" - versione italiana, grazie a Luc@s, nd cionci - e "Thinking in Java". Sono liberamenti scaricabili come versioni
HTML e PDF dal sito sopraelencato.
Per il Pascal, ottimo il testo:


Jim Welsh, John Elder
Introduzione al Pascal
Masson Editore


Questo testo copre il Pascal standard (ANSI/ISO DIS 7185) che è un insieme minimale per il Pascal.
Fatevi le ossa con questo. Avrete tutto il materiale per poi passare ad altri linguaggi dalla
sintassi anche molto diversa.

Per qualsiasi altro riferimento, Google è un ottimo amico. Date pure uno sguardo su manuali.it

10) Io conosco già un linguaggio come C/C++, ma non riesco lo stesso
a scrivere un programma che sia degno di questo nome.

Questo perchè pensavate di aver terminato il vostro studio ed era già il tempo di fregiarvi col
famigerato nome di "programmatore", eh? . Bene le cose non stanno proprio così. E' necessario
impadronirsi di ulteriori tecniche, come ad esempio la conoscenza della gestione di alcune strutture
dati basilari. Dipendentemente dal linguaggio, potrebbe essere necessario imparare ad usare altre
librerie che assolvano a determinati scopi. Poichè i casi vanno valutati per ogni esigenza,
cioè volete continuare a imparare o invece produrre subito senza troppe storie, è ora
di postare una domanda sul forum. Ricordatevi che non sempre la seconda opzione è meglio della
prima

11) Ho bisogno di scrivere un'interfaccia grafica. Qualche consiglio?
Probabilmente non state usando nè Java nè Visul Basic nè Delphi. State usando C/C++ e avete
comunque questa esigenza. Come fare? Avete bisogno di un GUI Toolkit. Ne esistono molti. Anche quì
non c'è il toolkit migliore, dipende tutto da quello che si deve fare.

Per il linguaggio C c'è GTK+, liberamente scaricabile da
http://www.gtk.org
E' un toolkit multipiattaforma, disponibile sia per ambienti Windows che Unix. Sinceramente
parlando, il mio preferito. Esistono anche wrappers per altri linguaggi diversi da C (come per
esempio C++, C#, Pascal, Ada e Tom).
Se volete poi un'interfaccia nativa Windows (2000 o XP) potete scaricare Gtk Wimp per assolvere
allo scopo.

Oppure una implementazione libera di Motif (chiamata Lesstif). Molto a basso livello, molto
sconsigliata a meno che non siate degli hackeracci veri e propri (solo ambienti Unix):
http://www.lesstif.org

Per il C++ abbiamo:
Le fantastiche QT di trolltech:
http://www.trolltech.com
Per i sistemi Unix esiste una versione FREE molto aggiornata, per i sistemi Windows vengono
rilasciate Free esclusivamente le versioni vecchie (messaggio subliminale: passate a Linux )
Le usano i maggiori produttori di software, come ad esempio Adobe. Dicono che Trolltech
con queste QT li abbiano liberati dal tormento delle MFC (le librerie grafiche di Windows).
Come dargli torto.

Le librerie wxWindows
http://www.wxwindows.org
Molto complete e con un look and feel nativo (le vostre applicazioni avranno la stessa interfaccia
del vostro tanto amato Windows, almeno fino al 2000, per ora ) Per conferire il look nativo, queste
librerie si appoggiano su altri toolkit considerati tipici della piattaforma (MFC su Windows,
GTK+ e Motif sotto Unix).

Per la documentazione relativa a questi toolkit, e' sufficiente guardare sui siti ufficiali.
Tutti presentano un proprio tutorial piu' o meno completo.

12) Il mio codice non lavora come dovrebbe. Che posso fare?
Molti sono i post che chiedono aiuto con spezzoni di codice semplice che compila perfettamente
ma non hanno il comportamento aspettato. Questo perche' il programma e' sintatticamente corretto,
ma evidentemente ha problemi semantici. Il miglior modo di trovare problemi semantici non e' quello
di sedersi delle ore di fronte il codice a cercare di trovare una soluzione. Il miglior modo e' quello
di imparare ad usare un debugger. L'approccio richiedera' del tempo aggiuntivo, ma sappiate che nella
maggior parte dei casi smetterete una volta per tutte di fare questo tipo di domande. Un debugger vi
consentira' di ispezionare il contenuto di variabili e di tracciare l'esecuzione del programma, riga per riga.
Tutto questo si traduce nella maggior parte dei casi che risolverete il problema in 5 minuti netti, anziche'
cecarvi su del codice che non funziona. Non e' possibile allo stato attuale delle cose, inoltre, scrivere
qualsiasi cosa abbia una complessita' non banale senza l'ausilio di un debugger. Personalmente utilizzo
lo GNU Debugger (gdb) per C/C++, un debugger testuale potentissimo, che si integra alla perfezione anche con Emacs.
Lo trovate all'URL: http://www.gnu.org/software/gdb nella versione sorgenti. Se avete MinGW come compilatore,
probabilmente lo avete gia' installato e pronto da usare. Per Java il JDK offre JDB (Java Debugger). Sinceramente
non e' tutto questo spettacolo, ma potete usare debuggers molto sofisticati anche per Java e comunque per rilevare
piccoli problemi semantici sara' piu' che sufficiente. Per gli altri linguaggi, quali Delphi e Visual Basic, dovrete
usare quelli integrati nell'ambiente di sviluppo. Ricordatevi che imparare l'uso di un debugger non e' tempo perso
o tempo sottratto all'apprendimento della programmazione. Infatti oltre a togliervi tantissimi mal di testa,
l'uso di un debugger aumentera' la vostra esperienza nella scrittura di codice corretto ed elegante.
Molto meglio che postare chiedendo "Questo codice non funziona. Perche'?", soprattutto in vista di una
probabile non risposta.

13) Voglio compilare il mio codice scritto in Windows sotto Linux o viceversa.
Benvenuti nel mondo della programmazione cross platform. Bhe' l'argomento e' decisamente piu' complesso
che prendere un programma e semplicemente compilarlo (ancora questo dipende dal linguaggio).
In linea generale qualsiasi programma ben scritto che usa solo caratteristiche del linguaggio standardizzate,
richiedera' una semplice compilazione. Tuttavia se avete usato delle estensioni proprietarie di un linguaggio
o avete usato delle librerie proprietarie non disponibili sull'una o sull'altra piattaforma, bhe' ... nella
maggior parte dei casi dovrete riscrivere il programma. Se volete portare sotto Windows programmi scritti sotto
Linux che utilizzano la GNU C Library (come ad esempio socket, pipe, processi o threads) c'e' ancora una chance,
anche se non del tutto libera, elegante e performante: cygwin (http://www.cygwin.com)
Cygwin fornisce un'ambiente di compilazione compatibile con Unix sotto Windows. Si basa su una libreria che implementa
un layer di compatibilita' Unix. Tuttavia questa libreria non puo' essere ridistribuita con il vostro programma
liberamente e non e' detto che risolva tutti i problemi. Inoltre e' un modo di programmare abbastanza "sporco".
Se invece volete compilare programmi per Windows e volete utilizzare un qualsiasi Unix, potete compilarvi da voi
stessi un compilatore cross platform in maniera nativa. Un cosiddetto cross compiler. Ricompilare un cross-gcc non
e' cosa semplice (anche perche' non sarebbe l'unica cosa da ricompilare). Alternativamente e come ultima chance
il caro Delorie ne fornice uno gia' pronto all'uso:
http://www.delorie.com/djgpp specificando nello zip picker che volete compilare programmi DOS sotto Linux.
Non l'ho mai usato, quindi prendete quel termine "DOS" come codice a 16 bit ...

14) Sono uno che ragiona ad entita' e relazioni. Mi serve un database. Cosa c'e' in giro?
Il parco dei database presenti in commercio e' ampio e adatto a soddisfare ogni esigenza.
Tuttavia la difficolta' potrebbe essere proprio quella di effettuare una scelta oculata e mirata alle
proprie esigenze. Difatti i database sono tipi di software adattabili a diverse necessita' e cio' puo'
influire sul costo o sulla gestione/apprendimento dello stesso.
Se avete esigenze di gestione principalmente orientate al WEB, il database mySQL e' la risposta (http://www.mysql.com).
Piccolo, veloce e gratuito. Tuttavia lo standard SQL a cui aderisce non e' dei piu' completi e questo, sebbene non sia
affatto un limite per il target a cui si rivolge, potrebbe costituire un limite per chi cerca qualcosa di elaborato.
Il database FireBird, per esempio, unisce la vera potenza di un vero database relazionale alla liberta' di un database
aperto. Esso e' basato sul codice sorgente di Interbase 6 rilasciato nel 2000 dalla Borland (allora Inprise) e pertanto
ha tutte le caratteristiche di un "fully fledged Relational Database Management System", rendendo, di fatto,
l'acquisto di Interbase stesso una scelta discutibile. Lo trovate su http://firebird.sourceforge.net
Ottime anche le opzioni PostgreSQL (http://www.postgresql.org). Tutti sono corredati da una documentazione di
prima classe. Se cercate qualcosa che invece detta le leggi di mercato in ambito database c'e' poco da discutere.
Oracle la fa da padrone, essendo di fatto il primo implementatore di nuove tecnologie in ambito database. La potenza
ovviamente costa, sia in termini pecuniari che di richieste di sistema che di difficolta' di gestione/amministrazione.
Tuttavia per scopi didattici (o comunque non commerciali) e' gratuito: http://www.oracle.com

Per quanto riguarda la parte dei tool di progettazione di un database, siamo veramente messi male.
Non ancora esistono tool liberi e multipiattaforma che giustifichino la sostituzione della carta e della penna per
la progettazione logica e concettuale di un database. Quelli commerciali validi sono veramente costosi.
Se pero' i database sono la vostra passione (beati voi ) e avete (parecchio) denaro da spendere, potete optare
per Embarcadero ErWin (http://www.embarcadero.com - solo per Windows). In ogni caso vi conviene postare sul forum.

15) Mi servono notizie sulla libreria X per il linguaggio Y utilizzando Z.
Devo compilare il tutto con W ed effetturare il debugging con K. Deve girare su P. Consigli?

Certo. Quale miglior consiglio che non quello di frequentare:
http://www.google.it

Ultima modifica di cionci : 07-10-2005 alle 07:50.
mjordan è offline  
Old 01-10-2003, 12:11   #2
monkey72
Senior Member
 
L'Avatar di monkey72
 
Iscritto dal: Dec 2001
Messaggi: 1381
a me saranno sicuramente utili, me le stampo e leggo subito!
tnks
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km"
monkey72 è offline  
Old 02-11-2003, 13:26   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Tutorial VBA

Per chi cerca info sul VBA, Verloc ha trovato questo tutorial della Microsoft:
http://download.microsoft.com/downlo...-US/Auto97.exe
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline  
Old 24-11-2003, 13:42   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Java: contributi

Segnalazioni di vari utenti riguardanti il Java; la discussione originale è questa:
http://forum.hwupgrade.it/showthread...hreadid=557945



Da CN73

Pensavo di scrivere col vostro aiuto una piccola guida
introduttiva al JAVA, sottolineando alcuni concetti basilari senza i quali è impossibile anche eseguire un semplicissimo programma.
Questo è il mio contributo iniziale.

Per prima cosa è necessario scaricare ed installare il JRE (Java Runtime Enviroment) o meglio ancora il JSDK (Java Source Developement Kit) che fornisce oltra al JRE alcuni strumenti per facilitare la realizzazione degli applicativi.

A questo link: http://java.sun.com/j2se/1.4.2/download.html troverete i download per le varie piattaforme.

A quest'altro: http://java.sun.com/docs/ troverete moltissimi documenti indispensabili, praticamente tutto quello che serve!

Consiglio specialmente di scaricarsi il Tutorial: http://java.sun.com/docs/books/tutorial/index.html e la documentazione sulle Api: http://java.sun.com/api/index.html .

alcuni esempi di codice li trovate invece qui:http://developer.java.sun.com/developer/codesamples/.

Supponiamo ora di avere installato il nostro JRE (Java Runtime Enviroment) nella cartella c:\jdk1.4.2. Nel nostro PATH di ambiente dovremmo aggiungere la directory c:\jdk1.4.2\bin che contiene fra gli altri gli eseguibili javac (per compilare) e java (per eseguire). Meglio mettere tutto in un file batch, che potrebbe avere questa struttura:

Codice:
REM ----installazione jdk
SET PATH=%PATH%;C:\jdk1.4.2\BIN
SET APP_HOME= ...
set CLASSPATH=.;%APP_HOME%

Il CLASSPATH indica al compilatore dove trovare le classi per risolvere le dipendenze...è un concetto fondamentale, sia per compilare che per eseguire!
Se la nostra classe che compiliamo utilizza una classe appartenente a un diverso package, o contenuta in un JAR (archivio che comprende n package/classi), dobbiamo necessariamente dire al compilatore dove si trovano queste classi!
Se ad esempio nella nostra cartella abbiamo un semplice programmino java

Codice:
import import mypackage.MyClass; 

class Prova {

		public static void main(String[] args){
			MyClass myobj = new MyClass(...)
			....
			
		}
}
nel CLASSPATH andrà aggiunto il percorso del package mypackage (che altro non è che una directory).

A questo punto compilare è banale...ricordarsi che il nome del file java deve essere uguale (case sensitive) a quello che diamo all'interno della nostra classe.

Apriamo una sessione DOS o una shell Linux e lanciamo il nostro batch (o script) per settare le variabili di ambiente. Poi semplicemente:
Codice:
javac Prova.java
si ottiene un file Java.class, il famoso bytecode che poi la JVM (Java Virtual Machine) si occuperà di interpretare (da qui la pecca forse principale del JAVA, la sua proverbiale lentezza, almeno rispetto ad altri linguaggi.Il vantaggio principale però è che questo bytecode è indipendente dalla architettura, perciò qualunque JVM di versione uguale o superiore può tranquillamente interpretarlo!).
Codice:
java Prova
Ricordiamo poi che la maggior parte dei browser integrano una JVM, per fare girare le famose applet java. Purtroppo quella della Microsoft fornita di default con Internet Explorer si è fermata a parecchi anni fa, e non fornisce il supporto ad esempio alle SWING, il famoso package per realizzare interfacce grafiche complesse. Poco male, una volta installato il JSDK, il nostro browser si appoggerà direttamente alla JVM SUN

Faccio seguire un esempio di applet e uno di applicazioncina a scopo didattico:

la prima è il classico giochino snake, il serpentello che mangia le mele:
scarica (32K)


Il secondo è un applicativo banale che però esemplifica alcuni concetti basilari e da una idea di cosa sia una GUI (Interfaccia Grafica):
cercafiles.zip

Concludo con alcuni dei miei link preferiti:
esempi di programmazione

Free Electronic Book: Thinking in Java, 3rd Edition

www.mokabyte.it

http://www.codeguru.com/

E ovviamente il mitico www.google.com !




da Recoil

EDITOR Java gratuiti:

http://www.jcreator.com/ versione freeware o shareware, per windows

http://www.jedit.org/ scritto in java quindi va in win, linux e mac

http://www.eclipse.org/

http://www.jext.org/ idem come jedit

http://java.sun.com/j2se/1.4.2/download.html potete scaricare NetBeans insieme a J2SE oppure nella stessa pagina trovate JRE e SDK oltre alla documentazione



da VICIUS
Java Developement Enviroment For Emacs http://jdee.sunsite.dk/
Emacs Code Browser http://ecb.sourceforge.net/

Se ad alcuni interessa qui ci sono le lezioni dei corsi che ho frequentato all'universita in formato pdf.

Fondamenti di informatica L-A: http://www.ingce.unibo.it/~mviroli/...A2002/index.htm

Fondamenti di informatica L-B: http://www-lia.deis.unibo.it/corsi/.../FONDINF-LB-CE/
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline  
Old 06-02-2004, 13:35   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53963
Dagli utenti xybercom e ri:

http://www.icce.rug.nl/documents/cplusplus/

Un ottimo link per "ripassarsi" gli argomenti principali del C++

Altri link interessanti:
http://www.gametutorials.com/Tutorials/tutorials.htm (C,C++, OpenGL, Direct3D ed altro)
http://cplus.about.com/c/esntl.htm?PM=ss10_cplus (Corso C e C++ ed altri interessanti tutorial)

Ultima modifica di cionci : 13-02-2004 alle 11:55.
cionci è offline  
Old 12-02-2004, 14:45   #6
MM
Senior Member
 
L'Avatar di MM
 
Iscritto dal: Nov 1999
Città: Pistoia
Messaggi: 37437
Re: Programmazione F.A.Q.

Quote:
Originariamente inviato da mjordan
10) Io conosco già un linguaggio come C/C++, ma non riesco lo stesso
a scrivere un programma che sia degno di questo nome.

Questo perchè pensavate di aver terminato il vostro studio ed era già il tempo di fregiarvi col
famigerato nome di "programmatore", eh? . Bene le cose non stanno proprio così. E' necessario
impadronirsi di ulteriori tecniche, come ad esempio la conoscenza della gestione di alcune strutture
dati basilari. Dipendentemente dal linguaggio, potrebbe essere necessario imparare ad usare altre
librerie che assolvano a determinati scopi. Poichè i casi vanno valutati per ogni esigenza,
cioè volete continuare a imparare o invece produrre subito senza troppe storie, è ora
di postare una domanda sul forum. Ricordatevi che non sempre la seconda opzione è meglio della
prima

Scusate se mi intrometto: a questa ottima esposizione della problematica dell'inizio della programmazione, manca solo la frase finale risolutiva:

Una cosa è conoscere le regole del gioco, altra cosa è saper giocare...
MM è offline  
 Discussione Chiusa


NVIDIA Blackwell B200: due chip in uno per rivoluzionare l'intelligenza artificiale NVIDIA Blackwell B200: due chip in uno per rivol...
HP Envy Move, un PC All-In-One con la batteria che si può spostare facilmente HP Envy Move, un PC All-In-One con la batteria c...
MSI MPG 321URX QD-OLED: un monitor completo per i giocatori MSI MPG 321URX QD-OLED: un monitor completo per ...
realme 12 Pro+ 5G: un potente mid-range con teleobiettivo sotto i 400 euro. La recensione realme 12 Pro+ 5G: un potente mid-range con tele...
Fujifilm Simulazione Pellicola – Guida all'uso Fujifilm Simulazione Pellicola – Guida all'uso
Dell amplia la collaborazione con NVIDIA...
Elon Musk parla nuovamente delle future ...
Comedy Wildlife Photography Awards: Niko...
realme: il 2024 è l'anno della co...
Salesforce: è iniziata la migrazi...
Sony Xperia 1 VI: addio al display 4K e ...
Il proprietario di Epic Games insult&ogr...
iliad aggiunge il roaming gratuito negli...
Amazon svende alcuni NAS decisamente int...
Hertz cambia rotta: il CEO dell'azienda ...
Microsoft promette: 'Copilot sarà...
ASUS annuncia la disponibilità in...
HPE GreenLake for File Storage si aggior...
Sony avrebbe interrotto la produzione di...
Ecco una wallbox completa e versatile, a...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:52.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Served by www2v