Considerazioni interessanti le tue, provo a dire la mia, riprendendo/quotando quanto scrivi.
Buongiorno, torno sul topic perché ultimamente ho iniziato a guardarmi qualche video (gentilmente offerti da voi qui sul forum) sulla programmazione generale e sul C.
Tuttavia mi sto rendendo conto che secondo me è l'approccio sbagliato. Mi spiego meglio: ritengo sia inutile imparare un linguaggio di programmazione quando non si ha mai studiato l'informatica e soprautto non si sia in grado di risolvere i problemi di logica. I linguaggi di programmazione si dovrebbero imparare solo quando si ha già in mente un progetto da realizzare e si necessita di un linguaggio per scriverlo.
Ni. Non so in realtà quanti di noi abbiano iniziato per necessità. Nel mio caso ho iniziato per il solo interesse nel riuscire a comprendere questi codici "incomprensibili" e riuscire "comunicare" con un PC (o meglio, scrivere qualcosa che fosse sotto il mio controllo).
Intendo dire che si inizia a studiare un linguaggio perchè si ha interesse in un linguaggio o in generale a voler imparare a programmare, non necessariamente perchè ti serve un software che non hai.
Concordo sulle considerazioni relative alla logica; ma anche qui non la vedo così netta. Nel senso che quando inizi e prendi dimestichezza con un linguaggio, inizi tu stesso ad usare la logica per risolvere un problema. La logica è una cosa che a parer mio andrebbe già insegnata a partire dalle scuole medie, cose che ovviamente non viene fatta, e che non avviene nemmeno alle superiori.
Nel mio caso ho iniziato dalla programmazione, e solo successivamente - quando ne avevo bisogno - ho approcciato le altre discipline (matematica in primis).
Così sto solo imparando a copiare quello che scrive il docente senza capire il processo logico che l'ha portato a scrivere ciò. Impari a fare il triangolo e quando ti viene chiesto il cerchio non sai farlo.
A quanto ho visto in questi anni, e mi rendo conto sia brutto da dire, si capisce subito quando uno ha già doti spiccate per la programmazione (anche se magari non è nemmeno il suo campo di interesse, nel panorama informatico).
Quando impari i costrutti condizionali (if/switch) e i cicli (while/for) e capisci a cosa servono, hai già una base per capire come affrontare un dato problema. Se hai capito cosa fà un ciclo, saprai quando ti serve e per fare cosa. Ho conosciuto persone che si sono laureate in altre discipline, e che loro malgrado avevano 1 esame di programmazione, e li ho visti letteralmente impazzire; persone che hanno anche ripetuto 4-5 volte l'esame, perchè non riuscivano di fatto a stendere in codice un algoritmo (e forse nemmeno a pensarlo in una pseudo codifica).
Per questo come penso sia sottinteso da quanto scrivi è importante non copiare del codice, ma mettersi direttamente in prima persona a scriverlo, prima di vedere la soluzione. Poi la soluzione può essere un modo per acquisire nuovi strumenti e "aprire la mente", vedere da un'altra prospettiva il problema, e capire come semplificare il proprio codice (ad esempio).
Quindi sono abbastanza convinto che le varie domande che la maggior parte della gente si pone quando approccia la programmazione, ovvero "da quale linguaggio inizio?" meritino una sola risposta: nessuno, devi prima imparare a risolvere i problemi, poi quando li sai risolvere, scegli tu qual è il linguaggio più adatto al tuo problema.
Anche qui sono parzialmente d'accordo: è vero che ci sono linguaggi adatti alla risoluzione di un problema, e altri invece adatti a risolverne altri.
Ma non mi trovo molto sull'altra parte: il fatto stesso che impari a risolvere problemi, e impari "la logica", non significa che sei in grado di scegliere il linguaggio migliore (anche perchè spesse volte non c'è 1 linguaggio migliore, ma ne puoi usare molteplici).
Per questo quando si impara è importante secondo me iniziare da un linguaggio: non importa quale, fatta eccezione casi estremi (vedi JavaScript per esempio), perchè l'importante è proprio imparare a risolvere problemi (problem solving); è il modo di pensare e ragionare che cambia.
Tutta sta pappardella semplicemente per chiedervi: posto che la matematica alle superiori viene spiegata malissimo, quale percorso mi consigliate per riniziare tutto da zero, come se fossi uno studente di prima superiore che nella vita vuole solo imparare a risolvere problemi scritti in linguaggi di programmazione? Ovvero come se esistesse un programma di studi di matematica solo per informatici.
Voglio riprendere in mano la matematica da zero, e studiarla con l'unico scopo per il quale è stata creata, non per passare esami scolastici.
Gradirei se qualcuno potesse spiegarmi il percorso da intraprendere suddiviso in capitoli e magari linkarmi qualche risorsa gratuita.
Sono pronto a riprendere in mano quaderno a quadri e matita e fare esercizi su esercizi, è una sfida che mi entusiasma parecchio.
Magari tra qualche anno inizierò con il mio primo linguaggio di programmazione.
Qui trovo sia difficile risponderti.
Se vuoi imparare a programmare ti direi: scegli un linguaggio che ti interessa - guardando le sintassi e altro - e inizia da quello. Se non fai così rischi di iniziare a studiare 200 cose diverse e tra 1 anno sei ancora li che aspetti, perchè ti sembra di non poter ancora iniziare a studiare il linguaggio. Il linguaggio è solo uno strumento alla fine.
La parte difficile è qui, la matematica: ci sono campi dove in realtà è sufficiente conoscere matematica base, dipende cosa vuoi andare a fare (o cosa vuoi studiare nello specifico). Se per esempio l'intento è studiare Machine Learning, allora la cosa cambia.
In merito a matematica ti direi che dovresti conoscere almeno i logaritmi; il resto lo integri quando ti serve.
Come argomenti, in generale, ti direi sicuramente "algoritmi e strutture dati". Ma anche qui, per le strutture dati, è probabilmente più semplice se hai già delle basi di programmazione (anche perchè puoi implementarle, ad esempio).
Per algoritmi intendo sia algoritmi di base, quelli di ricerca (che non userai mai), sia ricerca su grafi e alberi binari, sia l'analisi asintotica.
Poi come fa notare Ibernato, ci sono altri campi: Sistemi Operativi, architettura dei computer sono tra questi. Se usi un linguaggio compilato (C, C++, Go, Rust,....) avere un minimo di idea del processo di compilazione.
Come primissima cosa forse puoi iniziare a vedere la differenza tra linguaggi interpretati, linguaggi compilati e semi interpretati.
Ci sarebbero tante altre cose da aggiungere, ma rischio di essere ancora più dispersivo.
Nel mio caso non ho mai fatto diagrammi di flusso o altro tipo di diagramma; sin sai primi progetti ho tenuto tutto a mente, ho sempre usato l'immaginazione per "crearli" prima nella testa, e poi iniziare a stendere codice. Con il crescere del numero dei progetti e quando lavori in azienda... le cose cambiano; però continuo a non fare diagrammi, mi appunto solo i passaggi importanti diciamo (per avere su carta una "scaletta" delle cose da fare).
Cosa importante è: cosa vuoi che ti linkiamo? Perchè non c'è una guida su come diventare programmatore, in quanto come avrai notato, è un'insieme di tante cose (e matematica è solo una tra queste, e poi appunto, dipende molto dal settore specifico).
In
questo topic abbiamo una raccolta di materiali utili, suddiviso in varie sezioni. Non c'è un ordine specifico, ma quelli che puoi approcciare senza conoscere linguaggi, sono "architettura, OS e reti".
Puoi anche dare un occhio a quelli sul "come scrivere codice pulito", ma ci possono essere riferimenti a qualcosa di tecnico relativo al linguaggio in sè.
Una cosa che può essere utile sono i siti che contengono esercizi. Vuoi spaccarti un pò la testa su cose matematiche/logiche? Allora ti consiglierei di guardare il buon vecchio
Project Euler. Qui per risolverli non devi necessariamente usare il codice, puoi anche usare una calcolatrice o calcolarteli come meglio preferisci (certo, per alcuni senza codice è dura

e sono pensati per impegnarti nel pensare ad un algoritmo).
Spero di non essere stato troppo dispersivo.