Discussione: Programmazione F.A.Q.
View Single Post
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