Computer technology is evolving at a rapid pace. New and frightening terms appear regularly. Shall we spend time learning these ? If not, will we be left behind as "computer illiterate" ? How about the wise saying "Do not buy a new car the first year it comes out".
The following are my personal experiences with computer. I write it in the hope that it may to be useful to others. Hence you should know a little about me first, that I studied Maths at University, not computer science. I learned computer more than 26 years ago, all by myself.
In times past, nearly all programmers came from Mathematicians. Even those who invented computers were Mathematician, like John Von Neumann. It is because Mathematics demands logical clarity and precision, step-by-step proofs, and axioms. Thus training in Maths paves the way to learning computer, in fact, all engineering and science too.
I learned computer by reading books. FORTRAN, COBOL are the first two languages I learnt.
Later, in order to understand computer better, I learned Assembler language, and microprocessor hardware.
I also learnt Algol, Pascal, ...
The first language I used was COBOL, writing it for IBM 370. COBOL stands for Common Business Oriented Language, and was designed mainly for commercial purposes.
"Self-documentation" is the main design feature of COBOL. Variable names can be very long, and programmers chose names which are meaningful and serve documentation purposes (but to write the names is tedious, imagine writing names with twenty or thirty alphabets!)
Also, modularity (i.e. one module performs one specific function, like that of a black box, where input is fed at one end, and product comes out at the other end) is the strong point of COBOL. "perform" statement in COBOL functions much like "gosub" in Qbasic. And programmers made extensive use of "perform" statements.
Unfortunately, COBOL did not have such Qbasic statement like
print using "Wages for ##/##/## ~ ##/##/## **$#,###.##", m0, d0, y0, m1, d1, y1, wages
And printout with format is tedious coding - one has to write many lines just to print
little information.
Thus programmers were frustrated. He knows what he is going to do, but writing down the "instructions" - COBOL statements, was very time consuming. Moreover, the statements had to be punched onto cards!
One computer manufacturer saw this, and invented "Commercial FORTRAN". In FORTRAN (= Formula Translation), and also in "Commercial Fortran", printing out information is easy, much like C,
printf("Name : %s\n"
"Employer No : %d\n"
"Hours worked : %d\n"
"Wages : %8.2f\n\n", name, employno, hourworked, wages);
where one statement can generate a whole report.
"Commercial FORTRAN" also had "Indexed Sequential File Features".
For sequential file, records have to be accessed one by one sequentially.
For random file, we have to supply a "record number", then we may access information on that record.
For "Indexed Sequential File", we supply a "key", e.g. employer's name, and we can access that record.
Thus "Commercial FORTRAN" was much user-friendly than COBOL. A programmer who programs in "Commercial FORTRAN" can be 3 to 4 times as productive as one who programs in COBOL!
Then "BASIC", a very simple and easy to learn language was invented.
One has to study for months before one can program in COBOL or FORTRAN. But for "BASIC", one can start programming after a few hours' coaching.
When IBM produced PC, BASIC was the language of choice. And improvements were constantly made to it. Qbasic (Quick Basic) is the latest BASIC. (If your computer has old MSDOS, probably it has Qbasic).
One can do a lot with Qbasic : graphics, music, joy-stick, .... apart from the usual sequential file, random file. I think every new-comer to computer would find joy in programming Qbasic.
If you know Qbasic as well as C, you will find that it is much easier to program in Qbasic than in C. But C has many machine-like features not found in Qbasic, thus making it indispensable in some situations.
Hence not all computer languages are created equal. And productivity depends on the ease of use of that language.
In the old days, if one is to understand computer better, one must learn Assembler. Assembler is next to machine codes which are expressed in hexadecimal.
So I studied IBM 1604 Assembler, IBM 360 Assembler.
IBM 360 Assembler consists of mnemonic, e.g.
AR Add Register
A Add
AP Add Decimal
AH Add Halfword
ALR Add Logical Register
AL Add Logical
....
....
There are more than 100 mnemonics! (AR, A, AP, AH, ALR, AL, NR, N, NI, NC, BALR, BAL, BASR, BAS, BCR, BC, BCTR, BCT, BXH ,BXLE, CR, C, CP, CH, CLR, CL, CLC, CLI, CVB, CVD, DR, D, DP, ED, EDMK, XR, X, XI, XC, EX, HIO, IC, ISK, LR, L, LA, LTR, LCR, LH, LM, LMC, LNR, LPR, LPSW, LRA, MVI, MVC, MVN, MVO, MVZ, MR, M, MP, MH, OR, O, OI, OC, PACK, RDD, SPM, SSK, SSM, SLDA, SLDL, SLA, SLL, SRDA, SRDL, SRA, SRL, SIO, ST, STC, STH, STM STMC, SR, S, SP, SH, SLR, SL, SVC, TS, TCH, TIO, M, TR, TRT, UNPK, WRD ZAP)
"Load" and "Store" are two common instructions in computer. IBM 360 has the following instructions :
LR Load Register
L Load
LA Load Address
LTR Load and Test Register
LCR Load Complement Register
LH Load Halfword
LM Load Multiple
...
...
ST Store
STC Store Character
STH Store Halfword
STM Store Multiple
STMC Store Multiple Control
I found it very hard to learn, and began to doubt if I was so foolish that I couldn't learn that!
Years later, when microprocessors became more common, I bought some books on "Z80 Microprocessor" and started learning Assembler for Z80.
Guess what the following three Z80 Assembler statements do :
LD A, 100
LD A,(100)
LD (100), A
The first puts the value "100" in register A. The second loads the content in memory location "100" (100 = 64H in hexadecimal) into Register A. The third stores the content of register A to memory location "100".
Thus, for "Load" and "Store", we have only to remember one mnemonic, "LD". And whether we use direct addressing, or immediate addressing, or indirect addressing, or indexed addressing, or from short address, or from long address, ... we have only to remember one "LD".
Compared with more than 10 mnemonic for IBM 360, Z80 has only ONE, for "Load" and "Store".
I quickly learnt Z80 Assembler, and found it a joy to write.
Gradually, I found that different manufacturers have different designs, for their microprocessors, for their input/output chips. Some are elegantly and thoughtfully designed, and some are poorly designed.
The first operating system I used was IBM 360 "DOS/VS" (Disk Operating System with Virtual Storage), later, ICL (International Computer Limited, a British Firm) 1902, 1904S "George 3 Operating System", later Eclipse/Nova "DOS", later PDP 11 (I cannot remember the name now, something like "Real Time Disk Operating System" ?) Then Microsoft's MSDOS and Window, and now LINUX (UNIX clone).
As before, some operating systems are well-designed, e.g. "George 3 Operating System", "UNIX". Some are not user friendly. It all depends on how much thoughtfulness the designers have put into their designs.
Also, is UNIX perfect in its design ? "Client" and "Server" precepts gradually emerge as worthy precepts. For example, there are "file server", "mouse server". Is it possible to have also "serial port server", "parallel port server", "modem server", "keyboard server", ... and a CHIEF SERVER supervising all the "servers" ? Thus an operating system mimics our human system, where we request service from a chief servant, who oversees many servants ?
I remember many years ago, when "PL1" and "Pascal" were popular, many people learned those. But now, how many people would program with "PL1", or "Pascal" ?
Years ago, when Java first came out, it seemed to be the future standard in browser side automation (Java is a general purpose language, but it may be used for browser side automation). But soon afterwards, there came "Javascript" (Note that "Javascript" is not part of "Java". "Java" comes from Sun Microsystems, whereas "Javascript" comes from Netscape, they are TOTALLY DIFFERENT things), and VBscript (Visual Basic Script from Microsoft), and ....
WWW is to be used widely in e-commerce. Therefore server side programming becomes important. To program for server side automation, there are "Server Side Javascript", "Server Side VBscript", PERL, PHP, C, ... Which one shall we use ? Which will be orphaned in 5 to 10 years time ?
Word processing is also an important area of application. There are many commercial word processors using various forms of recording format. Also, there had been many softwares for online documentation (i.e. the computer manuals were put in computer files and not on paper for instant reference.) But now, there is HTML, and it makes many online documentation softwares obsolete.
About Object programming, e.g. C++, Java, ... Everything must be conformed into objects. And "step-by-step linear sequence of execution" is to be replaced by "random, interrupt-like manner of execution". Is "step-by-step linear sequence of execution" so obsolete ? Have "abstraction and generalization" no place in this world but "objects" ?
I suggest that we ask ourselves the following questions before accepting any :
|
| [Previous] | [Home] |