Programming Software is made by programmers • Computers need all kinds of software, from operating systems to applications • People learn how to tell the computers what to do so that the computers do useful things • Software on modern computers usually requires many instructions, millions sometimes so programmers work together in teams at software development companies Programming skills • Programmers need skills to write good programs • Some can be learned, some are innate • They need to be good communicators, both with machines and with people • They should enjoy logic and mental puzzles • Ideally they also have knowledge of the domain where their programs will be used Programming Languages • The first computer language was machine language, written in binary (first generation) • Humans found it very very tedious • Simple actions took hundreds of machine steps • Humans had to translate their desired steps into machine instructions and then punch them in or toggle switches to make it happen Assembly languages • Soon the computer operators wanted an easier language to use (second generation) • Assembly languages look a little like English – STO 4, X – JMP LAB1 – ADD 23, X – OUT X • Still lots of steps but a little more understandable Assembly languages • But assembly language programs had to be translated back to machine code to be useful • Machine code is the only language CPUs know • The translating program is called an assembler • There are still jobs for people who are good at assembly languages. Assembly is still used in game consoles, appliances, chips controlling machines, etc. Higher Level Languages • People still wanted easier languages to use, ones that were closer to how humans think instead of how computers work, more abstract (third generation, high-level languages) • FORTRAN was the first commercially successful high-level language (Formula Translator), done in the 1950’s Compilers • High-level languages also need translator programs – they are called compilers and interpreters • Other high-level languages are COBOL, Basic (all kinds of versions), C, C++, Java, Perl, Python • Some have free translators, some translators cost money How to Program • Any programmer will have a routine to follow when given an assignment or deciding what they want to program • UNDERSTAND THE PROBLEM – first! • Sometimes they work through it by hand, sometimes they have to ask the customer / manager / employer questions about the details How to, Part 2 • Make a plan! A test plan! – Involves thinking about how to test the program • Testing? It does not exist yet! But this early planning can give insights into how to solve the problem • Make a design = writing an algorithm in pseudocode • Pseudocode is a structured English, with no strict rules • It’s a way to write a rough draft of a program before it actually gets put into a programming language Test Plan Test Case Description Inputs Expected Outputs Normal score in A range 92 A Normal score in B range 84 B Normal score in C range 72 C Error due to wrong size of score -23 Error message about value Error due to wrong type of input A undetermined Actual Outputs Design in pseudocode • • • • • Open the file for reading Get all the data from the file into a list Close the file Start the total at zero For each item in the list – Add the value of the item to a total – If the value is larger than 75, display a message • Display the total Programming Languages • Languages (human and computer) have syntax and semantics • The rules you learned in grammar school about spelling, punctuation, subject/verbs, parts of speech, etc. were syntax rules for English • Programming languages have much stricter rules and will not work if you don’t follow them Semantics • The semantics of a human language is the meaning that the statements convey, the idea that you are trying to send from your brain to your listeners’ brains. • The semantics of a programming language is what does the computer do when the program is translated to machine code and run by the CPU • Syntax to a human is not strictly necessary, we can get meaning from a statement which does not have perfect syntax (things like Twitter messages and text messages, for example) • Syntax to a computer is required to be correct, so programmers have to have pretty good memories to remember the rules of the language Errors • When an English statement has an error, misspelling, wrong punctuation, wrong word, etc., we can usually figure out what is meant • When a program has a syntax error, it cannot be translated, so it’s useless. Programmers get good at fixing syntax errors • When a program has a semantics error, it is not doing what the programmer meant it to do (that’s called a bug) Debugging • Debugging (fixing mistakes in programs) is an art • Programmers have tools to help them do this, but it is difficult. That’s one reason software packages have various versions. Bugs get fixed and the fixes are released to the customers A career as a programmer • Many people are employed as programmers – They may create new programs for their boss – They may maintain programs which are already written, debugging, modifying, updating, etc. • Some people start their own companies to make the software they think will be useful or popular or profitable • Some are self-employed contractors, hiring out to do programming jobs for different companies