Programming Concepts [Please switch off your phone] (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 1 Programming Languages Earliest form of computer language • In 1822, Charles Babbage designed a difference engine. • The engine could be made to complete tasks only by changing the gears that executed the calculations. • This earliest form of computer language is based on physical motion. • The engine requires a series of instructions to perform a specific task. This is known as a programming language. Demonstration for the Difference Engine I Created by Charles Babbage's son, Henry Babbage [Source: http://www.virtualtravelog.net/projects/ComputerHistory/index.html] (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 2 Programming Languages Overview • Computer programs are written in programming languages. • If a program contains even a very small error, the computer cannot understand it. • A programming language is an artificial language based on a set of grammar rules. • We use a programming language to convert an algorithm into a computer program to enable the computer to solve the problem. • There are hundreds of programming languages: - some are general-purpose - some are specific-purpose, such as business programs or scientific programs (eg. APL) - see more here: http://www-users.cs.york.ac.uk/~susan/cyc/p/prog.htm • Very often, more than one programming language may be suitable for a task. (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 3 Programming Languages Examples of program codes in C and Pascal (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 4 Programming Languages Generations of Programming Languages The development of programming languages is classified in "generation". 1GL – machine language 2GL – assembly language 3GL – procedural language 4GL – declarative language First-generation language (1GL) • Machine language: a string of 0s and 1s. • Example, add EAX and EBX registers and store the result back to EAX: 03 C3 • Instructions in machine languages are numbers stored as bytes. • Can be understood by a computer at once. • But it is hard to read and understand by us. Difficult to learn. • Each type of computers understands its own machine language only: machine-dependent. Therefore, the programs are not portable. (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 5 Programming Languages Second-generation language (2GL) • Assembly language. • Stored as text. • Example: to add EAX and EBX registers and store the result back to EAX: add EAX, EBX • Each assembly instruction represents exactly one machine instruction. • Assembler is needed to convert assembly language programs into machine code so that they can be executed. • Each type of computers understands its own assembly language only. ie. also machine-dependent. • We may have to learn a new assembly language when we use another type of computer. (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 6 Programming Languages Third-generation language (3GL) • Also called Procedural language: solves a problem by executing a sequence of steps (ie. how). • Examples: Java, C, Pascal Fourth-generation language (4GL) • Also called declarative language: specifies what needs to be done without going into the details. • Often used to access databases. • Example: Structured Query Language (SQL) SELECT * FROM RECORDS WHERE NAME = "CHAN" Question: Which generation does JavaScript belongs to? (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 7 Programming Languages Low-level and High-level Programming Languages Programming languages can also be classified as high-level and low-level. Low-level programming languages: Machine language and Assembly language High-level programming languages: 3GL and 4GL • Instructions are English-like. • A single instruction can be written to define many operations at the machine level. • Converted to machine languages before they can be executed. • Machine-independent. • Example: the same C program can be compiled to run in (1) Personal computer running windows XP – using the compilers provided by some programming software like the Borland C and Microsoft Visual Studio etc.. as well as (2) Unix machine – using the Unix C compilers (eg. gcc, cc) (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 8 Programming Languages Microsoft Visual Studio Borland C (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 9 Programming Languages Microsoft Visual Basic (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 10 Programming Languages 3 types of translators: Assembler, Compiler, and Interpreter • Computers can only read their machine languages, so translators are required to convert programs into machine codes. Assembler: • A special program that reads a text file with assembly instructions and converts them into machine codes. Compiler: • A special program that converts the statements written in a high-level programming language and turns them into machine codes. • Typically, we type program code using an editor (eg. Microsoft Visual Studio). The editor often has an Integrated Development Environment (IDE), which contains a compiler. • The file written by the programmer is called the source program. • A program may be composed of several source programs, eg. each stores some functions. Each source program is compiled to form an object file (containing the machine codes). The object files are then linked to form the final executable file. The whole process is called building (including compilation and linking). (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 11 Programming Languages Interpreter • A special program that translates and executes each source statement at run-time, before translating and executing the next statement. • Example: the web page browsers. • A program that relies on an interpreter to translate and run is called a script. The language is called scripting language. Advantage of using interpreters (eg. for html / javascript) • After typing the source code, we can run the program at once. Do not need to compile the whole source code into an executable file first. • If the language is recognized by webpage browsers, then it is very portable. Advantage of using compilers (eg. for c, c++, java) • No source program is required during the execution of the program. (We need not pass the source code to the user) • The program needs to be translated once only. Then it can be executed again and again. • Execution time is shorter (no translation is needed during run-time). • Syntax errors (eg. typing mistakes) are checked already during compilation. Less run-time mistakes will be made. (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 12 Problem Solving Concepts Basic concepts on problem solving by programming • If a complicated task is to be handled by programming, we need a systematic way of problem solving. Example: update all student records and print their reports • a lot of data • a lot of calculations • a lot of results to check easy to get lost or miss out some jobs • Step by step of development of a program: • Keep track of what we have done • Keep track of what we are doing • To know what we still have to do • In addition, we need to pay attention to debugging and maintaining a program. • The one who debugs and maintains the program may not be the one who develops it. • Therefore, a program developed in a systematic way can help to make debugging maintenance easy afterwards. (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 13 Problem Solving Concepts Problem Solving Procedures: Problem Identification Identify what the problem actually is. Problem Analysis Break down the problem into subproblems. Algorithm Design Design the step-by-step procedures of solving a problem. Program Development Implement the algorithm as a computer program. Debugging and Testing Find out and remove all possible errors in the solution. Documentation (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong Prepare documents that describe the solution. http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 14 Problem Solving Procedures 1. PROBLEM IDENTIFICATION To clarify and define the problem so that we know exactly what should be done. Example: Check whether a student passes a subject, based on the rule: The final mark (exam + test, weighed 70% and 30%) should be at least 40. What is the problem? What do we need to solve? What should the program provide? (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong Does any constraint affect the solution of the problem? http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 15 Problem Solving Procedures 2. PROBLEM ANALYSIS • For a complicated problem, it is difficult to solve as a whole. Therefore we need to analyze the problem and break it down into smaller parts. • Basically to find out the inputs, outputs, and processing of the problem. • Stepwise refinement is a common problem analysis method of breaking down a problem level-by-level. Example: First level refinement: 1. Get scores 2. Check whether the student obtains a pass or a fail 3. Output result The problem is divided to more easily handled sub-problems, Each sub-problem can be developed and tested one at a time, or even by different people at the same time. Second level refinement: 1. Get scores 1.1 Get test score 1.2 Get examination score 2. Check whether the student obtains a pass or a fail 2.1 Calculate the final score 2.2 Check if the final score is sufficient for a pass or not 3. Output result (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 16 Problem Solving Procedures The refinements can also be shown with a structure diagram: level 0 Pass or Fail 1 Get Scores 1.1 Get Test Score 1.2 Get Exam Score (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong 2 Check Pass/Fail 2.1 Calculate Final Score 3 Output Result 2.2 Check Final Score Status http://www.cs.cityu.edu.hk/~helena level 1 refinement level 2 refinement 8. Programming Concepts - 17 Problem Solving Procedures 3. ALGORITHM DESIGN • An algorithm is a set of step-by-step procedures which solves a specific problem. • We can also apply stepwise refinement to design an algorithm. Example: Previous 2.2 Check Final Score Status can be refined as the steps below: if FinalScore >= 40 Set Status to Pass else Set Status to Fail • The above English-like statements are called Pseudocode, that can be translated to program statements in next stage. • The complete pseudocode of the algorithm: Input TestScore Input ExamScore FinalScore = TestScore x 0.3 + ExamScore x 0.7 If Finalscore >= 40 Set Status to Pass else Set Status to Fail Output Status (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 18 Problem Solving Procedures Flowchart • A graphical representation of an algorithm (c.f. pseudocode that's verbal in nature) Flowchart Symbols Explanation Example Beginning / End of Algorithm Start Input TestScore Process / Assignment Input ExamScore Selection FinalScore = TestScore x 0.3 + ExamScore x 0.7 Input / Output False There must be : - one single Beginning point and - (CS1301) oneIntroduction singletoEnd point Computer Programming http://www.cs.cityu.edu.hk/~helena True Status = "Pass" Status = "Fail" Flow City Univ of HK / Dept of CS / Helena Wong FinalScore >=40 Output Status End 8. Programming Concepts - 19 Problem Solving Procedures Flowchart Exercise 1: The following flowchart contains a loop. Start Study it and explain what it does. input n i=1 False End i<=n True Output i*i i = i+1 (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 20 Problem Solving Procedures Flowchart Exercise 2: Start • Revise the previous flowchart so that it checks whether the user inputs a valid value (1-100), input n and repeat the input until it is valid. i=1 False End i<=n True Output i*i i = i+1 (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 21 Problem Solving Concepts 4. PROGRAM DEVELOPMENT After designing the algorithm, we realize the algorithm by practical means – programming. In program development, lower level refinements (pseudo-codes, detailed structure diagrams, flowcharts) may be changed or added along. Top down approach: • Develop the main code and major functions first. These code may contain statements that call lower-level functions that do not exist yet. • The lower-level functions may be developed later. • At the moment of developing each function, the requirements are already very clear. eg. what to pass as parameters and what to return, what processing is needed (eg. need to check the input number is negative or not). Bottom-up approach: • Develop the lower-level functions first so that they are available already when the higherlevel functions are written and need to call the lower-level ones. • Bottom-up approach is often used when the detailed requirements of each function are obtained with confidence in the design stage. (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 22 Problem Solving Concepts 5. DEBUGGING AND TESTING • Debugging means detecting, tracing, and correcting errors (bugs) in a program. • There are 3 types of programming errors: Syntax error: An error occurs when an instruction that does not follow the syntax rules of the programming language. Example: wrong spelling of keywords, eg. if If Easy to identify -- the computer just refuses to run the statement and gives out message about the program statement. Run-time error: An error occurs only when a program statement is running. Example: The statement attempts to use a property of an html element that doesn't exist. var id="applle"; … document.getElementById(id).innerHTML The statement causing the run-time error may not be the source of error. Logic error: An error is caused by the logic design of the program. Example: Q1 of week 10 lecture exercise (The wrong isPrime function) (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 23 Problem Solving Concepts • Testing is the process of showing the presence of errors, not their absence. "even a program has passed many test cases, nobody can conclude that there is no error". White-box testing Test all cases such that every program statement is tested. The term white box indicates that testing is done with a knowledge of the code used to execute certain functionality. For this reason, a programmer is usually required to perform white box tests. Black-box testing The tester test runs the program according to the available features visible to him (or told in the user manual) The code of the program is not examined by the tester. For this reason black box testing is not normally carried out by the programmer. (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 24 Problem Solving Concepts Notes on Debugging - Debugging time probably more than writing first version of your program - Solve errors: NOT by trial-and-error Should be based on clear understanding of what the code is supposed to do!! - Look into why the program runs incorrectly for some unsuccessful test cases. But not to look into why it works for some successful cases. - Focus on the simplest unsuccessful test case first. - You should learn from each chance of debugging: Should have clear idea of why it was wrong and the correct approach to fix it. Then your programming skill will be improved significantly. (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 25 Problem Solving Concepts 6. DOCUMENTATION Program documentation consists of: - A user's guide - A hard copy of a sample test run of the program - A source program listing - A concise requirement specification - Descriptions of problem inputs, expected outputs, formula, special conditions, processing steps - Structure diagram / step-wise refinement results - Pseudocodes or flowcharts Documentation of a program is important. Because: - We are likely to use the program again sometime in the future. - We should provide documentation to the client as he or she will need information about it. - Other programmers may be assigned to maintain the program or make additions to it. - We may eventually discover some errors and need to correct them. (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 26 Summary Introduction to programming languages 1GL to 4GL 3 types of translators: Assembler, Compiler, and Interpreter Problem Solving Procedures (CS1301) Introduction to Computer Programming City Univ of HK / Dept of CS / Helena Wong http://www.cs.cityu.edu.hk/~helena 8. Programming Concepts - 27