Learning Computers And Science?
Why do you want to know this and what do you want to be able to do with the knowledge?
The problem is that there is a number of systems involved and you don't necessarily need to know the details of all the systems to work with one of the others. For example, most software developers don't know much about how computer hardware works (and they don't really need to).
Roughly, there are these four levels that build on each other:
1) Hardware (keyboard and other periphery, mainboard, CPU, memory ...)
2) BIOS (sort of an abstraction layer between Hardware and operating system)
3) Operating system (e.g. Windows or Linux)
4) Application software (e.g. Word or Firefox)
Your question touches on all of these subsystems, so you might need to know:
- how does your keyboard register key presses, how does it send it to the computer (e.g. USB), how does the mainboard register the keypress, how does the CPU work, how does the display work? (if you're interested in hardware)
- how does the operating system handle key presses? (if you want to know about the OS)
- how does an application process input, how do I write source code to handle input? (if you want to know about software development)
You can take any of these topics and will find there is a lot of complexity there, the deeper you go, the more details there are to know about.
Why do you want to know this and what do you want to be able to do with the knowledge?
The problem is that there is a number of systems involved and you don't necessarily need to know the details of all the systems to work with one of the others. For example, most software developers don't know much about how computer hardware works (and they don't really need to).
Roughly, there are these four levels that build on each other:
1) Hardware (keyboard and other periphery, mainboard, CPU, memory ...)
2) BIOS (sort of an abstraction layer between Hardware and operating system)
3) Operating system (e.g. Windows or Linux)
4) Application software (e.g. Word or Firefox)
Your question touches on all of these subsystems, so you might need to know:
- how does your keyboard register key presses, how does it send it to the computer (e.g. USB), how does the mainboard register the keypress, how does the CPU work, how does the display work? (if you're interested in hardware)
- how does the operating system handle key presses? (if you want to know about the OS)
- how does an application process input, how do I write source code to handle input? (if you want to know about software development)
You can take any of these topics and will find there is a lot of complexity there, the deeper you go, the more details there are to know about.
To be honest its just kind of my personality to want to know why and how things work.
_________________
Keniichi
I so identify with this.
I have just started learning Python, with my nearly 13 year old son, and we are also doing some reading around "Computer Science" ... ( lots of Wiki and "How Stuff Works" for the moment :lol ).
.. because it just reached that point, after several years of my using the net, and several years of my son playing video games, and creating/designing his own on paper including all the myriad complex stats/values for the gameplay in them, and joining game creation sites/MMORPGs like Atmosphir and Sploder etc, and trying and failing to understand how to use the Construction Kits that came with Crysis, Morrowind, etc ...
... if there was one main burning crucial reason why my son should continue home-un-schooling ( apart from the fact that it takes less than 20 hours a week to cover "school-subjects" for the end of year "control/tests", rather than the 40+ hours in/at/on school/college plus homework ), then it had to be his learning at least one programming language and about how computers work, ( because game-creation is pretty much all that interests him ) ... and so I would have to find out too!! ! :lol ...
And the Python is coming along nicely, ( we're following a book bought from Amazon and referring to a couple of free online Python tutorials at same time for back-up/different "models" of explanation ) ... and we're picking up some info about operating systems, and motherboards, and RAM, and some history about it all, punch tapes/cards, ancient calculating machines, bits/bytes and the holes in the punch cards etc etc etc ...
... but we too still don't understand how holes in a punch card or zeros and ones are turned into programming language and vice-versa.
We have read a bit about ALGOL and the way programming language was broken up into language to the user, language to the computer, and reference language, etc ... and are beginning to see what syntax is about etc ... BUT I've begun to feel frustrated that the Python language tutorials don't explain or include the programming for "print", or "input" or "int" or all the other "functions" etc, all the various "sort-of-modules" like that, which we keep "calling"/typing/"paste"-ing into programming statements ... .
What is the actual *program* for "print" for instance ... and what are the programs for all the individual statements which make up *those* "lesser/lower" programs, and the programs behind those and and ... ??? How did the first ever program start? What *was* the first ever program? How many lines was it? Did it consist simply and solely of lots of 0's and 1's? What did it 'program"/make the computer do? ...
I realise that the first program(s) might in a sense simply be a circuit board ... with a string/sequence of electrical logic gates ... but would like to read/see an example of the first bit of *language* based on that?
Last edited by ouinon on 03 Jun 2012, 12:15 am, edited 1 time in total.
I realise that the first program(s) might in a sense simply be a circuit board ... with a string/sequence of electrical logic gates ... but would like to read/see an example of the first bit of *language* based on that?
.
http://sourceware.org/git/?p=glibc.git; ... ed6aa9b19a
http://sourceware.org/git/?p=glibc.git; ... ed6aa9b19a
http://hostilefork.com/2010/03/14/where ... -the-road/
The connection between the logical gates and this code is a translation from C to machine language (which are binary 32 bit or 64 bit numbers that can be directly interpreted by the CPU, e.g. adding two numbers that are held in registers), which is done by the compiler.
To be honest, I think you should start with an imperative programming language before anything else. It's not that assembly languages are bad, after all everything was written in them not too long ago, but the scope of what you can learn to do without serious dedication is rather limited compared to a high level language. I had a program once that emulated a stack and ram where it was possible to write short and simple programs with the most basic instructions. I can't recall its name though.
Imperative programming languages can be translated to assembly code rather easily, so seeing the relation between the code written and the instructions required is pretty linear (for very simple programs).
Here's a link to a an article about IJVM, which was made by the author of Structured Computer Organization. http://en.wikipedia.org/wiki/IJVM
At the bottom there are several links to IJVM simulators. IJVM stands for Integer Java Virtual Machine, which is a stripped down version of the JVM. It has much fewer instructions, but it can be used to create simple programs. It's not in actual use anywhere, but it might be a slightly less harsh intro to assembly language than starting with IA-32, which is Intel's 32 bit instruction set. It will probably take quite a bit of googling commands before you're able to get IA-32 to run, and a lot more to write code that works, but it's worth it if you want to understand.
In Tannenbaum's book there's also a decent introduction to micro assembly language, which is what takes care of executing the instructions. You likely won't ever have to write micro programs, but understanding them lets you know how much time the individual instructions take. There are several processor architectures that are purely fictional, but provide the basic of how numbers are passed around in the control unit, when things are calculated, and how the control unit communicates with the RAM. Real life processors such as Intel or AMD's are vastly more complicated, and I don't think it's possible to write your own micro code for them without hacks that don't just involve software (though of course I could be wrong).
Also, while you're at it, you might want to take a look at binary logic. I'm sure there are lots of emulators for that, if not then you can do most things in Minecraft. The logic gates are what make things happen at the lowest level of architecture. The arithmetic logic unit (ALU), the pipelines for moving stuff around, the RAM, the registers, the micro code executer, everything is run by solid state logic units made from silicon transistors.
...but yeah, start with basic high level programming and work downward. High level languages were invented for a reason. It will give you ideas of how calculations should be made and teach you how to think when it comes to problem solving. After that you can work your way down.
Thanks you all for the replies and information and such. Im trying some basic assembly language and somce C. Im starting to like some of it however I still struggle with applying the math parts. I get the definitions like I always have with math I just have trouble applying them. I seem to make alot of mistakes. Is this common with someone with NVLD(a horrible visual spatial ability compared to most aspies who dont have this issue. repeat MOST).
A bit more help would be needed with the math parts to programming(like integers)
_________________
Keniichi
Im not good at applying math I make mistakes same with programming. If you test me mentally or ask me what the words mean Ill be able to answer a 100 percent but I cant seem to get the answers and applying the theory right down on paper. I make mistakes even though in my head the answers right. Get what Im saying?
This includes computers, science and math. All 3 are related.
_________________
Keniichi
Applying Math specifically to integers and such things.
_________________
Keniichi
Can you give a more detailed explanation please, as it's not clear what you mean. Integers are (whole) numbers and presumably you know how to, e.g. add or subtract them. If what you're asking is how, for example, to solve equations in a program, you want to learn about "numerical methods". The book Numerical Recipes is a standard text on that sort of stuff and you can find older editions available for free on their website http://nr.com.
_________________
If my username is annoying to type, shorten it (e.g. z3n)!
Last edited by zxy3cpn on 03 Jun 2012, 11:40 am, edited 1 time in total.
And have just been reading a wee bit about logic gates, binary etc. Very interesting and helpful, even if is still mostly abstract for me.
Thank you for that.
.
Learn Java. It is a simple and probably the most useful programming language nowadays. Don't learn C++, Objective-C or C, these languages are too "deep level" and you really would be frustrated. I know it.
Edit: Other simple languages are Python, Ruby and C#, but as I said - Java is the most useful language, it probably has a 50% share on the market. And some languages are "more math" than others. For an example Haskell is an academic math language, but Java is rather more engineering than math language. You create in Java, you don't do math.
I so identify with this.
I have just started learning Python, with my nearly 13 year old son, and we are also doing some reading around "Computer Science" ... ( lots of Wiki and "How Stuff Works" for the moment :lol ).
.. because it just reached that point, after several years of my using the net, and several years of my son playing video games, and creating/designing his own on paper including all the myriad complex stats/values for the gameplay in them, and joining game creation sites/MMORPGs like Atmosphir and Sploder etc, and trying and failing to understand how to use the Construction Kits that came with Crysis, Morrowind, etc ...
... if there was one main burning crucial reason why my son should continue home-un-schooling ( apart from the fact that it takes less than 20 hours a week to cover "school-subjects" for the end of year "control/tests", rather than the 40+ hours in/at/on school/college plus homework ), then it had to be his learning at least one programming language and about how computers work, ( because game-creation is pretty much all that interests him ) ... and so I would have to find out too!! ! :lol ...
And the Python is coming along nicely, ( we're following a book bought from Amazon and referring to a couple of free online Python tutorials at same time for back-up/different "models" of explanation ) ... and we're picking up some info about operating systems, and motherboards, and RAM, and some history about it all, punch tapes/cards, ancient calculating machines, bits/bytes and the holes in the punch cards etc etc etc ...
... but we too still don't understand how holes in a punch card or zeros and ones are turned into programming language and vice-versa.
We have read a bit about ALGOL and the way programming language was broken up into language to the user, language to the computer, and reference language, etc ... and are beginning to see what syntax is about etc ... BUT I've begun to feel frustrated that the Python language tutorials don't explain or include the programming for "print", or "input" or "int" or all the other "functions" etc, all the various "sort-of-modules" like that, which we keep "calling"/typing/"paste"-ing into programming statements ... .
What is the actual *program* for "print" for instance ... and what are the programs for all the individual statements which make up *those* "lesser/lower" programs, and the programs behind those and and ... ??? How did the first ever program start? What *was* the first ever program? How many lines was it? Did it consist simply and solely of lots of 0's and 1's? What did it 'program"/make the computer do? ...
I realise that the first program(s) might in a sense simply be a circuit board ... with a string/sequence of electrical logic gates ... but would like to read/see an example of the first bit of *language* based on that?
For some reason I only learn from and reallylike the Colleges Computer Sceince classes/books. I HAVE tried everything else and have generally gotten not very far, As I wrote Im not the best at Math, or antyhing visual Spatial. Ithink its because the books are more of demonstations and involve hands on works to explain whats going on?
Oh my! You sound just like me!
_________________
Keniichi
Why do you want to know this and what do you want to be able to do with the knowledge?
The problem is that there is a number of systems involved and you don't necessarily need to know the details of all the systems to work with one of the others. For example, most software developers don't know much about how computer hardware works (and they don't really need to).
Roughly, there are these four levels that build on each other:
1) Hardware (keyboard and other periphery, mainboard, CPU, memory ...)
2) BIOS (sort of an abstraction layer between Hardware and operating system)
3) Operating system (e.g. Windows or Linux)
4) Application software (e.g. Word or Firefox)
Your question touches on all of these subsystems, so you might need to know:
- how does your keyboard register key presses, how does it send it to the computer (e.g. USB), how does the mainboard register the keypress, how does the CPU work, how does the display work? (if you're interested in hardware)
- how does the operating system handle key presses? (if you want to know about the OS)
- how does an application process input, how do I write source code to handle input? (if you want to know about software development)
You can take any of these topics and will find there is a lot of complexity there, the deeper you go, the more details there are to know about.
I like computer science classes at school, unfortuneately I cant afford the whole program(I get the joy of having sample classes as result of helping those who are disabled with life). I also seem to like networking and cisco and a tad bitof Assembly, unfortuenetaly I only seem to really get the computer science programs classes used in classes.(see my reply to ouinon)
_________________
Keniichi
