C++ o Java, quale percorso scegliere per migliorare?

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Premessa:
Java è stato il primo linguaggio di programmazione a cui mi sono affacciato, con il bellissimo IDE Eclipse, che ti correggeva di lettera in lettera. Peccato che seguivo solo quei "pseudo" di Tutorial su Youtube, dove insegnavano il solito "Hello World!1!1!", dove nemmeno l'autore capiva il significato di System.out.println(), figuriamoci il medio-utente che guarda il video...

Ora:
Solo ora, ho iniziato a capire e a scrivere linee di codice, dalle più semplici alle più medie. Questo non in Java, ma bensì in C++, in linguaggio che mi affascinava, non tanto dal nome, ma dalla sua semplicità (semplicità? Si, non ditemi che è difficile stampare a video una somma di due interi). Ho iniziato a leggere guide, capendo quasi tutto. Decisi, una settimana fa, di lasciare le guide online per passare ai libri di testo, completi e ben scritti (il libro in questione è C++ Fondamenti di programmazione di Deitel&Deitel).
In seguito alla difficoltà di apprendere gli array e la loro funzionalità, passai (solo per provare) a Java, ripetendomi che comunque l'utilità delle classi non la avrei mai capita, e che sarei rimasto fermo a System.out.println(). In realtà sono andato molto avanti, fino a capire bene l'utilità del paradigma orientato agli oggetti.

Quindi mi chiedo: continuare ad imparare Java fino alle gocciole, magari con l'ausilio di un (piccolo) libro, o imparare bene solo il concetto di 'orientato agli oggetti' in Java per poi passare ed usarlo in C++?

Ma perché questo dubbio?
Java è pulito, facile, sicuro, adatto agli sviluppi connessi ad Internet, mentre C++ è sinonimo di potenza, collegamento diretto all'Hardware, possibilità di controllare la memoria... ovvero quel che mi piace. Infatti C++ viene usato per sviluppare molti giochi, ma Java è molto più semplice (quindi mi rimangio la semplicità di C++).
Sapendo che la multi-piattaforma non mi interessa, cosa mi consigliate?


Grazie mille.
 
Ultima modifica:

BAT

Moderatore
Staff Forum
Utente Èlite
22,948
11,581
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Java "fino alle gocciole" non lo impari con un "piccolo libro", ne servono almeno 2 e belli grossi (intorno alle 1000 pagine ciascuno);
e comunque rimani su Java SE, se poi vuoi programmare lato server si passa a Java EE e lì sono lacrime e sangue, altro che semplice.

Detto questo, se passare a C++ o continuare con Java dipende essenzialmente da cosa vuoi fare;
se punti a trovare più occasioni di lavoro ti direi di continuare con Java, se hai altre intenzioni dipende.
Questa è solo l'ennesima riproposizione di una domanda sbagliata: è meglio Java, C++, Python, C, C#...?
Chiediti piuttosto: devo fare "questo progetto XYZ", cosa mi conviene imparare?
inutile dire che prima di tutto bisogna saper programmare (e bene), e comunque conoscere più di un linguaggio non ti farà male.
Potresti anche procedere con tutti e 2: fai gli stessi esercizi in entrambi i linguaggi e vedi quali sono vantaggi/svantaggi per i tuoi scopi.
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Java "fino alle gocciole" non lo impari con un "piccolo libro", ne servono almeno 2 e belli grossi (intorno alle 1000 pagine ciascuno);
e comunque rimani su Java SE, se poi vuoi programmare lato server si passa a Java EE e lì sono lacrime e sangue, altro che semplice.

Detto questo, se passare a C++ o continuare con Java dipende essenzialmente da cosa vuoi fare;
se punti a trovare più occasioni di lavoro ti direi di continuare con Java, se hai altre intenzioni dipende.
Questa è solo l'ennesima riproposizione di una domanda sbagliata: è meglio Java, C++, Python, C, C#...?
Chiediti piuttosto: devo fare "questo progetto XYZ", cosa mi conviene imparare?
inutile dire che prima di tutto bisogna saper programmare (e bene), e comunque conoscere più di un linguaggio non ti farà male.
Potresti anche procedere con tutti e 2: fai gli stessi esercizi in entrambi i linguaggi e vedi quali sono vantaggi/svantaggi per i tuoi scopi.

Ci stavo pensando di imparare entrambi, ma qualcosa mi ferma e non so che. A dirti, non ho nemmeno l'idea di cosa potrei fare con le mie conoscenze... applicazione per le banche e cose simili? Ovviamente Java, ma un gioco potente o comunque un'applicazione che deve lavorare velocemente? C++...

Ma poi? Riuscirò a farcela?

Per ora, continuerò in Java, sfoglierò il libro che tra poco mi arriverà riguardo il C++, poi vedrò se Java mi soddisfa e, in ogni modo, torno al C++.

Grazie per la risposta.
 

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Non ci sono linguaggi necessariamente più "semplici" e più "difficili". Ci sono semplicemente linguaggi più espressivi e meno espressivi. Il C e il C++ lo sono moderatamente, Java un po' meglio, Python è molto espressivo e permette di fare in 3 righe quello che in C fai in 30. Non per questo programmare in Python è necessariamente più facile, semmai direi più "veloce". La difficoltà del programmare sta nel pensare all'algoritmo, stenderlo bene, renderlo sicuro, efficiente e scrivere codice leggibile.
C, C++, Java, Python... sono solo linguaggi...
Se poi parliamo del discorso "performance", che il C++ permetta di ottenere prestazioni mediamente superiori è assodato, quello che non è (per niente) garantito è che il programmatore sia capace di sfruttarlo. Per esempio io ora per la tesi di laurea sto lavorando nel machine learning, che prevede l'uso di algoritmi anche molto complessi e pesanti, e lo faccio in Python, perchè ci sono librerie ben fatte (e veloci) che ne giustificano la scelta rispetto a linguaggi come C++, con i quali, a fronte di qualche secondo in meno a runtime (che in questo contesto non è fondamentale), mi prenderebbe 10 volte il tempo in sviluppo.

Come detto da BAT, tipicamente si imparano più linguaggi, non serve conoscerli a menadito, i programmatori lavorano con i manuali (una volta cartacei) dei linguaggi a fianco del monitor. Poi per ogni progetto il programmatore sceglie quello con cui si trova meglio nel contesto in cui lavora.
Java è molto usato per applicativi di piccola e media dimensione che devono girare su piattaforme diverse, ha una immensa libreria standard ben documentata ed è type safe. C++ è usato per applicativi più grossi dove serve un maggior controllo o interazione con l'hardware, ma ci si deve spesso affidare a librerie di terzi e non essendo type safe è molto più prono a bug e leak di memoria; inoltre deve essere compilato per ogni piattaforma.
Hai un progetto che deve girare distribuito su più nodi (per es un cluster)? Magari un linguaggio come Scala (molto carino, funzionale e gira su JVM) o Ada (per applicazioni realtime molto critiche, per es gestione traffico aereo) ti risulta molto più utile...
E via dicendo...
 
Ultima modifica:
  • Mi piace
Reazioni: Alfonso Syn

javaprogrammer

Nuovo Utente
26
13
Premetto che non conosco il C++ e che ti parlerò da sviluppatore Java.

A me sembra che tu stia prendendo il tutto un tantinello sottogamba...
La programmazione è una disciplina piuttosto complessa, per usare un eufemismo. Sembra quasi che un giorno tu ti sia svegliato e tac, abbia deciso di fare il programmatore. Tac, hai deciso di imparare il Java. Tac, sei passato al C++. Tac, sei tornato al Java. Tac, hai imparato il Java. Tac, vorresti sviscerarlo in ogni sua singola virgola con l'ausilio di un PICCOLO libro...
Non fraintendermi, non metto in dubbio le tue capacità, né sto dicendo che non diventerai un programmatore con due balls così, però...
Ci sono passato, ascolta la mia umile opinione: un conto è studiarsi due o tre nozioni teoriche su un libro per capire cosa siano classi e oggetti, mentre un conto è poi scontrarsi con il mondo del lavoro con annessi e connessi, passando (come già detto correttamente da altri) da Java SE a Java EE, ritrovandosi a combattere con front end (JavaScript, jQuery, Ajax e altri) e back end (Spring, Struts, JSF, Hibernate, iBATIS, JPA e altri). Un bagno di sangue. Rimpiangerai i giorni in cui cercavi di capire cosa fosse una classe.
In un campo come quello dello sviluppo software, essere preparati da un punto di vista teorico è condizione necessaria ma assolutamente non sufficiente. Studiare come un matto sui libri ti consente solo di superare un quiz su Java SE, ma quando poi entri in ufficio, ti siedi sulla tua sedia e apri un'applicazione web o enterprise, raramente riesci a scrivere più di mezza riga di codice se non sei uno che già da qualche anno lavora e scrive, scrive, scrive, scrive, trova problemi, trova problemi, trova problemi, trova problemi, ci sbatte la testa, ci sbatte la testa, ci sbatte la testa, ci sbatte la testa.
Insomma, studiare da autodidatta va bene fino ad un certo punto. Se vuoi diventare veramente bravo, cerca qualche società che ti faccia fare uno stage o qualcosa di simile. Se non ti spacchi la testa sbattendola contro VERI progetti aziendali, concluderai poco o niente.

Quale percorso scegliere? Come detto, non conosco il C++, quindi non ti do consigli che non sarebbero affidabili. L'unica cosa che posso dirti è che se scegli di voler fare di un linguaggio di programmazione il tuo strumento di lavoro, non arriverà mai il giorno in cui non incontrerai più difficoltà o non dovrai più studiare. Quel giorno sarà quello della pensione. YouTube e i piccoli libri puoi tranquillamente metterli da parte. ;)
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,441
11,502
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
da laureato in informatica a programmatore ora presso una azienda ti posso garantire che la programmazione non è un gioco che si studia sui libri.
Anche io non conosco il C++ e quindi non posso dire fai quello o fai quell'altro.
Io ho Java tra le mie conoscenze perchè all'università oramai insegnano quello. E dire che non riesci a capire che cos'è una classe o sottoclasse etc non è un problema e come ti hanno già detto puoi leggere 8milioni di libri ma sul mondo del lavoro qualsiasi programma usi qualisasi linguaggio tu usi hai sempre da studiare per apprendere nuove cose.
Ti consiglio vivamente a mio parere di iniziare ad apprendere il Java nei suoi concetti piu semplici( utilizzando il libro Java mattone su mattone) ed iniziare a capire bene a cosa serve come funziona etc e quali tipi di applicazioni puoi sviluppare in Java.
Java come ti hanno già detto si può interfacciare a Jquery, Ajax, Mustache etc e può essere utilizzato per programmare applicazioni client-server con socket ed RMI non propriamente intuitivo e di semplice appendimento.
Come già detto devi essere sempre predisposto ad apprendere qualcosa di nuovo.
Le nozioni Java poi ti possono servire per programmare in Android(perchè android è scritto in Java)
Per essere un progammatore completo occorre una predisposizione ad apprendere sempre

spero di esserti stato d'aiuto
 
  • Mi piace
Reazioni: Alfonso Syn

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
@Skills07, cavolo, il C++ non lo conosce nessuno! Tra poco mi arriva il libro, quindi dovrò studiarlo per forza.

Ma "Java Mattone per Mattone" non è un po' vecchio?
 
Ultima modifica:

Skills07

Head of Development
Staff Forum
Utente Èlite
35,441
11,502
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
@Skills07, cavolo, il C++ non lo conosce nessuno! Tra poco mi arriva il libro, quindi dovrò studiarlo per forza.

Ma "Java Mattone per Mattone" non è un po' vecchio?


non è che non lo conosce nessuno è che viene usato in altri ambiti probabilmente...
per apprendere i concetti va bene come manuale
 
  • Mi piace
Reazioni: Alfonso Syn

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili