UFFICIALE Imparare a Programmare

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Buongiorno, vorrei approcciarmi al mondo della programmazione e vorrei farlo cominciando da un linguaggio relativamente semplice anche se poco utile rispetto ad altri, che si studi in poco tempo e che riesca a farmi apprendere per lo meno i concetti fondamentali con uno sforzo ridotto. Questo non per sviluppare subito un sito, ma per entrare nel ottica di come ragiona un programmatore. Cercando su internet vedo che i linguaggi maggiormente consigliati per iniziare sono Javascript e il linguaggio c. Voi quale mi consigliate?
Ciao, i linguaggi citati sono diametralmente opposti.

C per quanto piccolo e facile da apprendere, è difficile da usare. Ti troverai però ad apprendere concetti che ti saranno utili quando vedrai linguaggi con astrazioni maggiori.
Per contro dovrai occuparti di cose che in altri linguaggi non sono un diretto problema del programmatore (come la gestione della memoria).

JavaScript ti direi assolutamente no per iniziare! È un linguaggio di scripting, viene interpretato dai web browser ed è quindi uno dei linguaggi lato clienti (assieme ad HTML e CSS, che sono appunto interpretati dal tuo browser).
Il brutto è che è troppo libero, e forse acquisiresti la logica, ma tanti altri aspetti saranno nuovi quando guarderai altri linguaggi. Inoltre in tal caso dovresti imparare un minimo di HTML, per poter mostrare i dati.

Piuttosto, se la tua esigenza è quella, puoi valutare Python.

C la trovo comunque una buona scelta, ed è molto probabile che andando all'Uni dovrai comunque impararlo (per vedere C, guarda i primi topic che vedi in Programmazione, un utente ha posto alcuni quesiti nei giorni scorsi).
 

Damian0

Bannato a Vita
122
6
Grazie, il mio obbiettivo finale é imparare python, mi consiglia di cominciare comunque da C o posso iniziare direttamente con python?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Grazie, il mio obbiettivo finale é imparare python, mi consiglia di cominciare comunque da C o posso iniziare direttamente con python?
In primis, dammi pure del tu, non essere formale ?

Python e C rimangono linguaggi differenti, quindi non devi necessariamente conoscerne uno per imparare l'altro. Puoi iniziare da quello che preferisci tu, se ti piace quello che studi farai sicuramente meno fatica a ricordare/apprendere nuovi concetti.

Considera comunque che ci sono cose del C che vedrai praticamente solo in C (fatta eccezione per C++); quindi il passaggio Python > C ti lascerà comunque un pò di cose da studiare e non da meno... cose con le quali dovrai fare i conti, abituandoti. Per dire, in Python hai le strutture dati pronte, in C no; in Python non ci sono problemi nel leggere le stringhe, in C il tipo di dato "stringa" non esiste. E altre cose ancora.
Evito di elencartele, in quanto non avendo basi sufficienti temo di aggiungere solo dubbi. Quanto detto oltretutto vale anche per il passaggio contrario, solo che riguardano le astrazioni aggiunte, piuttosto che concetti legati al "basso livello" (come puntatori, gestione della memoria etc).

Ergo, Python per iniziare è un buon compromesso. Se studi seriamente, in 3-4 mesi inizerai a produrre qualcosa quasi certamente (qualche piccolo giochino, tipo Tic Tac Toe o Snake o anche un'applicazione).
 

giammo82

Utente Attivo
1,210
526
Io non mi farei tante domande su dove iniziare, tanto alla fine il concetto principale è uguale per tutti i linguaggi di programmazione , poi cambia la sintassi ed altre cose ma quelle verranno più avanti …

Io ho iniziato con il Pascal poi sono passato al C poi al C++ ed infine al C#

Il concetto importante è sapere cosa si vuol fare con il linguaggio di programmazione, si vuol fare sistemi operativi? Si vuol fare motori e fisica in videogiochi? Si vuol fare applicazioni OS? Ecc ecc

Io sono amante dei motori dei videogiochi ed quindi ho intrapreso la scelta del C in poi..

Python è molto usato in applicazioni,intelligenza artificiale e machine learning , non lo consiglio per i videogiochi visto che è un linguaggio interpretato ed è poco prestante.

Inviato dal mio iPhone utilizzando Toms Hardware Italia Forum
 
  • Mi piace
Reazioni: DispatchCode

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Io non mi farei tante domande su dove iniziare, tanto alla fine il concetto principale è uguale per tutti i linguaggi di programmazione , poi cambia la sintassi ed altre cose ma quelle verranno più avanti …

Io ho iniziato con il Pascal poi sono passato al C poi al C++ ed infine al C#

Il concetto importante è sapere cosa si vuol fare con il linguaggio di programmazione, si vuol fare sistemi operativi? Si vuol fare motori e fisica in videogiochi? Si vuol fare applicazioni OS? Ecc ecc

Io sono amante dei motori dei videogiochi ed quindi ho intrapreso la scelta del C in poi..
Io ad esempio iniziai da Java. Poi ne ho utilizzati altri, C# un minimo di C++, C, PHP, (Assembly ?) e ne uso, più o meno bene altri, come JS.
Bene o male un linguaggio è circoscritto a un settore, anche se ormai esistono così tante tecnologie che alcuni li si può usare in diversi contesti.

Python è molto usato in applicazioni,intelligenza artificiale e machine learning , non lo consiglio per i videogiochi visto che è un linguaggio interpretato ed è poco prestante.
Aggiungo una cosa, visto che detto così potrebbe lasciare qualche dubbio, in quanto sembrano esserci cose in contrasto (machine learning e Python): Python è usato anche per lib matematiche, come Numpy. Perchè viene usato, se è poco prestante (come giustamente dice giammo)? Viene usato e vengono uate quelle lib perchè in realtà sono lib native, non sono scritte in puro Python.
 
  • Mi piace
Reazioni: Damian0

LitterallyWho

Utente Attivo
164
46
Buonasera.

Stavo cercando una buona risorsa che spieghi in maniera chiara e concisa il linguaggio assembly x86(intel). Ho girato per qualche ora in rete, ma i risultati che ho trovato non mi hanno soddisfatto molto. So che, necessariamente, dovrò imparare anche la base dell'architettura del processore, ma cercavo una risorsa che mi spiegasse le varie parti del linguaggio tramite esercizi step by step
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Buonasera.

Stavo cercando una buona risorsa che spieghi in maniera chiara e concisa il linguaggio assembly x86(intel). Ho girato per qualche ora in rete, ma i risultati che ho trovato non mi hanno soddisfatto molto. So che, necessariamente, dovrò imparare anche la base dell'architettura del processore, ma cercavo una risorsa che mi spiegasse le varie parti del linguaggio tramite esercizi step by step

Ciao, dovresti decidere se iniziare da 8086 (16bit) o un superiore. Ti consiglierei di stare su x86 ma a 32bit ormai... anni fa ti avrei consigliato diversamente.

La seconda scelta è l'OS, da Windows a Linux c'è molta differenza.

Come libri ce ne sono un po' https://www.amazon.it/gp/product/9352869184/?tag=tomsforum-21&linkCode=ogi
Oppure https://www.amazon.it/dp/1484240626/?tag=tomsforum-21&linkCode=ogi che tratta anche alcune estensioni.

Online trovi le informazioni sulle istruzioni, ma è raro trovare guide complete del livello di questi testi (anzi, non ne conosco proprio, fatta eccezione che per 8086).
Da pc più tardi guardo se ho qualcosa nei segnalibri.

Comunque solitamente tutti i testi di asm danno anche le basi sull'architettura.
 
  • Mi piace
Reazioni: LitterallyWho

LitterallyWho

Utente Attivo
164
46
Ciao, dovresti decidere se iniziare da 8086 (16bit) o un superiore. Ti consiglierei di stare su x86 ma a 32bit ormai... anni fa ti avrei consigliato diversamente.

La seconda scelta è l'OS, da Windows a Linux c'è molta differenza.

Come libri ce ne sono un po' https://www.amazon.it/gp/product/9352869184/?tag=tomsforum-21&linkCode=ogi
Oppure https://www.amazon.it/dp/1484240626/?tag=tomsforum-21&linkCode=ogi che tratta anche alcune estensioni.

Online trovi le informazioni sulle istruzioni, ma è raro trovare guide complete del livello di questi testi (anzi, non ne conosco proprio, fatta eccezione che per 8086).
Da pc più tardi guardo se ho qualcosa nei segnalibri.

Comunque solitamente tutti i testi di asm danno anche le basi sull'architettura.
La mia intenzione era di iniziare su ambiente Windows a 32 bit. Oltre a masm, di cosa ho bisogno? Purtroppo, sotto questo aspetto, non ho le cose molto chiare.
 
  • Mi piace
Reazioni: DispatchCode

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
La mia intenzione era di iniziare su ambiente Windows a 32 bit. Oltre a masm, di cosa ho bisogno? Purtroppo, sotto questo aspetto, non ho le cose molto chiare.
Hai bisogno praticamente solo di MASM.
Puoi scaricarti MASM32 o forse in modo più conveniente utilizzare quello che hai già quando scarichi Visual Studio, che è sicuramente all'ultima versione disponibile.
Puoi fare riferimento a questo https://docs.microsoft.com/en-us/cpp/assembler/masm/ml-and-ml64-command-line-reference?view=msvc-170

Non hai bisogno di altro. Puoi anche usare ml.exe da command line e avvalerti di qualsiasi editor di testo, ovviamente.
In MASM è già presente anche il linker.

Il vantaggio di MASM è che puoi scriverlo inline e compilarlo con MSVC (Microsoft Compiler C/C++); ovviamente non sarà portabile però. GCC supporta asm inline ma la sintassi è molto diversa. Con MSVC è praticamente un blocco in MASM così come lo scriveresti in un file.asm.

Per qualsiasi domanda (assembly o setup/assemblaggio con MASM etc) apri pure un topic al riguardo ?
 
  • Mi piace
Reazioni: LitterallyWho

LitterallyWho

Utente Attivo
164
46
Hai bisogno praticamente solo di MASM.
Puoi scaricarti MASM32 o forse in modo più conveniente utilizzare quello che hai già quando scarichi Visual Studio, che è sicuramente all'ultima versione disponibile.
Puoi fare riferimento a questo https://docs.microsoft.com/en-us/cpp/assembler/masm/ml-and-ml64-command-line-reference?view=msvc-170

Non hai bisogno di altro. Puoi anche usare ml.exe da command line e avvalerti di qualsiasi editor di testo, ovviamente.
In MASM è già presente anche il linker.

Il vantaggio di MASM è che puoi scriverlo inline e compilarlo con MSVC (Microsoft Compiler C/C++); ovviamente non sarà portabile però. GCC supporta asm inline ma la sintassi è molto diversa. Con MSVC è praticamente un blocco in MASM così come lo scriveresti in un file.asm.

Per qualsiasi domanda (assembly o setup/assemblaggio con MASM etc) apri pure un topic al riguardo ?
Grazie di cuore ;)
 
  • Mi piace
Reazioni: DispatchCode

pabloski

Utente Èlite
2,868
916
La mia intenzione era di iniziare su ambiente Windows a 32 bit. Oltre a masm, di cosa ho bisogno? Purtroppo, sotto questo aspetto, non ho le cose molto chiare.

Tieni presente, qualora ti trovassi ad avere a che fare con altri assembler, che alcuni implementano feature di "alto livello", tipo macro, procedure, ecc... E lo fanno in maniera diversa gli uni dagli altri. Possono dare l'idea che quasi l'assembly di una certa famiglia di micro non sia univoco, ma non è così. Le istruzioni dell'ISA restano quelle e si comportano allo stesso modo.

Altra cosa per potresti incontrare nei vari tutorial, è l'uso della sintassi AT&T al posto di quella Intel. Anche in questo caso, sembra di avere a che fare con un altro mondo, ma è solo una differenza sintattica.

E vorrei consigliare, invece di partire in quarta con i manuali Intel o AMD, di dare una lettura ad un vecchio libro ( ma semplice da capire e utile per comprendere le basi della programmazione in linguaggio macchina ) di James Coffron dal titolo "8086 - 8080 Programmazione".

Lo puoi trovare qui https://archive.org/details/80868088programmazione

E' vecchissimo ed è scaduto pure il copyright, quindi si può scaricare.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
MASM mette a disposizione svariate macro ad esempio.
Per 8086 c'è anche la guida di Ramsoft. Ma appunto è 8086, non so quanto convenga visto che il 50% almeno dei concetti non è più valido dopo.
 
  • Mi piace
Reazioni: LitterallyWho

LitterallyWho

Utente Attivo
164
46
Tieni presente, qualora ti trovassi ad avere a che fare con altri assembler, che alcuni implementano feature di "alto livello", tipo macro, procedure, ecc... E lo fanno in maniera diversa gli uni dagli altri. Possono dare l'idea che quasi l'assembly di una certa famiglia di micro non sia univoco, ma non è così. Le istruzioni dell'ISA restano quelle e si comportano allo stesso modo.

Altra cosa per potresti incontrare nei vari tutorial, è l'uso della sintassi AT&T al posto di quella Intel. Anche in questo caso, sembra di avere a che fare con un altro mondo, ma è solo una differenza sintattica.

E vorrei consigliare, invece di partire in quarta con i manuali Intel o AMD, di dare una lettura ad un vecchio libro ( ma semplice da capire e utile per comprendere le basi della programmazione in linguaggio macchina ) di James Coffron dal titolo "8086 - 8080 Programmazione".

Lo puoi trovare qui https://archive.org/details/80868088programmazione

E' vecchissimo ed è scaduto pure il copyright, quindi si può scaricare.
Ti ringrazio!
 

pabloski

Utente Èlite
2,868
916
Ti ringrazio!

Ho dimenticato di aggiungere un paio di cose. Una riguarda il libro "Programming from the Ground Up" di Jonathan Bartlett. Molto pratico, breve e si capisce bene. I problemi sono: usa le syscall Linux e la sintassi AT&T.

L'altra cosa importante che dimenticavo è che, per programmare in Assembly, è importante scegliere la piattaforma. Se parti con Windows, sarai giocoforza costretto ad usare le API Win32, alcune a basso livello ( quelle che in genere vengono usate dal runtime C ). E questo può aggiungere parecchio carico di studio.

L'alternativa sarebbe optare per un ambiente emulato o virtualizzato molto semplice, tipo il vecchio DOS. Dosbox è un emulatore che potresti usare. Ovviamente andresti a scrivere programmi assembly a 16 bit.

Con Windows puoi sempre far riferimento a MSDN. E inoltre c'è The Art of Assembly in versione Windows, che puoi usare per acquisire info su come impostare l'ambiente runtime del programma, ecc... O potresti usare la libc di Windows ( ucrt è quella raccomandata da Windows 10 in poi ) https://docs.microsoft.com/en-us/cpp/windows/universal-crt-deployment
 
  • Mi piace
Reazioni: LitterallyWho

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili