170 likes | 195 Views
Software - How to make a computer useful. What is software really?. Software is the ”magic wand”, which transforms the computer from dead metal to a useful tool The function of a computer is almost entirely determined by the software
E N D
What is software really? • Software is the ”magic wand”, which transforms the computer from dead metal to a useful tool • The function of a computer is almost entirely determined by the software • For a DVD player, a specific movie is the ”software” for the player; we are not as such con-cerned about the player itself SWC1
What is software really? • More technical: Very accurate instructions to the computer, concerning how to react to various types of input • The input could be: • A mouse click or movement • Pressing keys on a keyboard • Data in a file • Data from the Internet • Various other sources SWC1
How to create software • Initially, we have some sort of idea about what the software is supposed to do • This must in turn be evolved to a very detailed specification concerning the functionality of the software • A specification will be a collection of rules defining the behavior of the software, in all possible scenarios • Formulating such rules may be quite hard in some situations… SWC1
How to create software • Example: Multiplication • Multiplying two (large) numbers may be hard for a human being, but the rules are quite clear • Quite easy to make a program, which can multiply two numbers • A computer can perform multipli-cation much faster than any human being SWC1
How to create software • Example: Chess • Chess is hard, even though the rules are precise! • What is hard about chess? To measure, if some specific move makes your position better, and by how much • If you can define a good measure for the ”quality” of a position, you just need to try a lot of them… • The best chess programs are fairly equal to the best human chess players SWC1
How to create software • Eksempel: Perception of emotions • Human beings are good – some better than others – at perceiving other peoples emotions just by looking at them • It is very hard to define precise rules for this – we ”just do it” • Even the best software – used e.g. in a robot – is much poorer at perceiving emotions than a human being SWC1
How to create software • If we are able to describe a set of rules for how to achieve a certain behavior, how do we then describe these rules to a computer!? • In what language do we describe the rules? • Recall that the computer can basically only do binary addition… • How do we bridge the gap, and find a way to describe the rules, so both we and the computer agree on the interpretation of the rules? SWC1
The long road… Idea Pro- gram Human language Programming language (Java) CPU- language (assembler) Micro- code 0’s and 1’s Human beings (Brain) Software (Compiler) Computer hardware SWC1
Human language • First step is to formulate the rules for the behavior in ordinary human language • Must be as concise as possible • Example (from chess): • If your king is in check, you must • Move your king to a position where it is not in check, or • Move another piece so that the king is no longer in check • If both 1 and 2 are impossible, you have lost • Problem: Ordinary language is not very precise, and filled with assumptions SWC1
Programming language • We must now formulate the rules in a different language, which another program can translate into a language which the computer understands • This language bridges the gap between humans and computer • A compromise between being logically concise, and being humanly understandable SWC1
Programming language if (myPieces.King.Status == Check) then { // NOTE: This is not precise Java if (board.noCheck(myPieces.King).exists ==true) then (myPieces.King.move()) else if (myPieces.avoidCheck().exists ==true) then (myPieces.avoidCheck().move()) else myGame.status = lost; } SWC1
The language of the CPU • The program, which translates from our programming language to the language of the CPU, is known as a compiler • The language of the CPU is often called assembler code • Humans can read assembler code, but it is quite hard, and requires lots of practice… SWC1
Assembler code MOV AH, 08 INT 21 CMP AL, 42 JZ 0116 MOV BH, 12 INT 32 NJZ 0100 Uhm… what!? SWC1
Micro-code • Assembler code is almost impos-sible to understand for humans, but the CPU understands! • The CPU makes yet another translation, to micro code • The part of the CPU which performs the actual calculation understands micro code • Extremely hard to understand SWC1
Micro code 0A B1 23 41 88 6C 12 92 CB 9A 88 2E 11 07 AE …or just 0010010101001001010 0101001101111011010 1001001010101111110 SWC1
0’s and 1’s • The CPU can process micro code instructions quite effectively • This is the realm of the transistors! • In terms of language, we have traveled a very long road, involving humans, other software, and the computer itself • Still quite hard to produce software, but (fortunately) much easier than at the dawn of computers SWC1