Ogni anno ci sono periodi in cui molti nuovi utenti arrivano nel forum.
Se sei uno di questi utenti, per favore, prenditi il tempo di leggere questo lungo post.
Non hai idea di quanto tempo risparmierai.
Se hai fretta... beh, e' meglio un'altro hobby. Non puoi imparare a programmare avendo fretta.
L'altro suggerimento e' di perdere un po' di tempo a leggere il forum. Sia le nuove discussioni, sia le vecchie.
C'e' tanta informazione gia' pronta. E si impara *tanto* a leggere. Pensare di leggere risposte solo alle proprie domande e' davvero ingenuo: si impara poco. Si imparano solo le cose che sono un pollice fuori dalla propria conoscenza... e che forse si sarebbero potute capire da soli.
Viceversa, leggere "tutto" da un'idea di quello che c'e' oltre: da un'idea di come sia la strada 1 metro, 100 metri, 3000 metri piu' oltre.
Gli utenti arrivano da background diversi, ma spesso non alcun background. Sono principianti assoluti.
E vogliono imparare a programmare.
La prima cosa che dovrebbero capire e' che programmare vuole dire essenzialmente "istruire il computer su come risolvere un problema".
La seconda e' cosa vogliono a lungo termine. E' inteso come hobby? E' parte di un corso universitario? Vogliono farne una professione?
Di per se, programmare, e' semplice. Davvero. Basta avere un po' di logica. Cosa che a molte persone, purtroppo manca.
La buona notizia e' che impegnandosi abbastanza, la logica la si impara. La cattiva notizia, e' che tutto questo *non serve a nulla*.
Oggi un sistema informatico e' una cosa assolutamente complessa. Operazioni *banali* che facciamo tutti i giorni da utenti coinvolgono una quantita' sorprendente di cose estremamente complicate. Vogliamo farci un'idea?
Trovo
questo post (che riporto) molto interessante.
You just went to the Google home page.
Simple, isn't it?
What just actually happened?
Well, when you know a bit of about how browsers work, it's not quite that simple. You've just put into play HTTP, HTML, CSS, ECMAscript, and more. Those are actually such incredibly complex technologies that they'll make any engineer dizzy if they think about them too much, and such that no single company can deal with that entire complexity.
Let's simplify.
You just connected your computer to www.google.com.
Simple, isn't it?
What just actually happened?
Well, when you know a bit about how networks work, it's not quite that simple. You've just put into play DNS, TCP, UDP, IP, Wifi, Ethernet, DOCSIS, OC, SONET, and more. Those are actually such incredibly complex technologies that they'll make any engineer dizzy if they think about them too much, and such that no single company can deal with that entire complexity.
Let's simplify.
You just typed www.google.com in the location bar of your browser.
Simple, isn't it?
What just actually happened?
Well, when you know a bit about how operating systems work, it's not quite that simple. You've just put into play a kernel, a USB host stack, an input dispatcher, an event handler, a font hinter, a sub-pixel rasterizer, a windowing system, a graphics driver, and more, all of those written in high-level languages that get processed by compilers, linkers, optimizers, interpreters, and more. Those are actually such incredibly complex technologies that they'll make any engineer dizzy if they think about them too much, and such that no single company can deal with that entire complexity.
Let's simplify.
You just pressed a key on your keyboard.
Simple, isn't it?
What just actually happened?
Well, when you know about bit about how input peripherals work, it's not quite that simple. You've just put into play a power regulator, a debouncer, an input multiplexer, a USB device stack, a USB hub stack, all of that implemented in a single chip. That chip is built around thinly sliced wafers of highly purified single-crystal silicon ingot, doped with minute quantities of other atoms that are blasted into the crystal structure, interconnected with multiple layers of aluminum or copper, that are deposited according to patterns of high-energy ultraviolet light that are focused to a precision of a fraction of a micron, connected to the outside world via thin gold wires, all inside a packaging made of a dimensionally and thermally stable resin. The doping patterns and the interconnects implement transistors, which are grouped together to create logic gates. In some parts of the chip, logic gates are combined to create arithmetic and bitwise functions, which are combined to create an ALU. In another part of the chip, logic gates are combined into bistable loops, which are lined up into rows, which are combined with selectors to create a register bank. In another part of the chip, logic gates are combined into bus controllers and instruction decoders and microcode to create an execution scheduler. In another part of the chip, they're combined into address and data multiplexers and timing circuitry to create a memory controller. There's even more. Those are actually such incredibly complex technologies that they'll make any engineer dizzy if they think about them too much, and such that no single company can deal with that entire complexity.
Can we simplify further?
In fact, very scarily, no, we can't. We can barely comprehend the complexity of a single chip in a computer keyboard, and yet there's no simpler level. The next step takes us to the software that is used to design the chip's logic, and that software itself has a level of complexity that requires to go back to the top of the loop.
Today's computers are so complex that they can only be designed and manufactured with slightly less complex computers. In turn the computers used for the design and manufacture are so complex that they themselves can only be designed and manufactured with slightly less complex computers. You'd have to go through many such loops to get back to a level that could possibly be re-built from scratch.
Once you start to understand how our modern devices work and how they're created, it's impossible to not be dizzy about the depth of everything that's involved, and to not be in awe about the fact that they work at all, when Murphy's law says that they simply shouldn't possibly work.
For non-technologists, this is all a black box. That is a great success of technology: all those layers of complexity are entirely hidden and people can use them without even knowing that they exist at all. That is the reason why many people can find computers so frustrating to use: there are so many things that can possibly go wrong that some of them inevitably will, but the complexity goes so deep that it's impossible for most users to be able to do anything about any error.
That is also why it's so hard for technologists and non-technologists to communicate together: technologists know too much about too many layers and non-technologists know too little about too few layers to be able to establish effective direct communication. The gap is so large that it's not even possible any more to have a single person be an intermediate between those two groups, and that's why e.g. we end up with those convoluted technical support call centers and their multiple tiers. Without such deep support structures, you end up with the frustrating situation that we see when end users have access to a bug database that is directly used by engineers: neither the end users nor the engineers get the information that they need to accomplish their goals.
Ecco... "noi", che facciamo questo di mestiere, abbiamo almeno una vaga idea di tutto questo. Potrebbe anche essere una tipica domanda fatta ad un colloquio di lavoro, per capirci. Ed e' anche qualcosa che uno che si va a laureare in Informatica dovrebbe provare vergogna a non sapere. Magari non abbiamo idea dettagliata di tutto... specialmente dei lati piu' bassi... dopotutto informatica ed elettronica sono discipline separate. Ma anche li...
La maggior parte delle cose interessanti da fare con un computer passano per qualcosa di simile.
Vuoi ancora imparare a programmare? Ottimo! Migliori auguri per i propri studi.
Ma se pensi che tutto questo sia "troppo", beh, questa e' la cosa. Non si scappa.