Transcript
Page 1: Programming Languages and Software Engineering

Programming Languages and Software Engineering

Page 2: Programming Languages and Software Engineering

Topics

• discuss some of the underlying commonalities and differences among programming languages

• explain what there is to learn about software engineering beyond programming

Page 3: Programming Languages and Software Engineering

Learn Programming in Ten Years(Peter Norvig)

• it takes time/practice/experience to learn to become a good programmer

• you can learn syntax in one semester (or from a book), but...

• need to built up a repertoire of problems you have previously solved, so when you face a new problem, you can draw upon your prior experience, you’ve seen it before – “design patterns”

Page 4: Programming Languages and Software Engineering

• Norvig’s suggestions:– Get interested in programming, and do some

because it is fun..– Program. The best kind of learning is learning by

doing.– Talk with other programmers; read other programs. – Work on projects with other programmers. – Work on projects after other programmers. – Learn at least a half dozen programming

languages. – Remember that there is a "computer" in "computer

science". Understand how it works. – Get involved in a language standardization effort.

Page 5: Programming Languages and Software Engineering

• In CSCE 121, we teach C++ because it is widely used for large industrial applications.– Many additional computational concepts are

introduced in this course, such as how compilers work, object-oriented design, etc.

• There are many other languages - do you need to learn them all?

Page 6: Programming Languages and Software Engineering

• Assembler• Fortran, Pascal, COBOL, Basic• Ada, Modula, PL/1, Simula, MatLAB• Haskell, LISP, Scheme• C, C++, C#, Objective-C• Smalltalk, Java, Javascript• PERL, PHP, TCL, Python, Ruby• csh, awk, sed• Prolog – a logic-based language for making

inferences from knowledge bases• Postscript – a stack-based language for printers

Page 7: Programming Languages and Software Engineering

source: http://calvinx.com/tag/programming-languages/

Page 8: Programming Languages and Software Engineering

Two Interesting Questions

• Why are there such a bewildering array of languages? – historical artifact – some languages evolved into, or

inspired, other languages– some languages started out as experiments to test

new ideas or features, like OO and message-passing in Smalltalk

– some languages are more suited for certain applications, like Fortran for numerical computing, or PERL/Python for processing text files

– there are special-purpose languages like Postscript (or MatLAB, Simula) that are custom-designed for certain tasks (printing, simulations...)

Page 9: Programming Languages and Software Engineering

Two Interesting Questions

• Isn’t C++ overkill for writing low-level code like drivers/controllers/firmware? wouldn’t C be much more efficient with less overhead?– this is a common misconception– by this reasoning, why not use assembler?– modern C++ compilers have many optimizations that

make code fast/competitive– most importantly, C++ allows code to be expressed in

a more comprehensible (generic, factored) way that facilitates maintainability and long-term use of code over many years

• these issues often outweigh a few extra microseconds• the original programmer might be long gone, and someone

else has to find and fix a bug

Page 10: Programming Languages and Software Engineering

import sysif __name__==“__main__”:

a = int(sys.argv[1]) b = int(sys.argv[2])

if a<b: b,a = a,b while b>0:

r = a%b a,b = b,r print “GCD is”,a

#include <stdio.h>void main(int argc,char*argv){ int a,b,temp; sscanf(argv[1],”%d”,&a); sscanf(argv[2],”%d”,&b);

if (a<b) { temp=a; a=b; b=temp; } while (b>0) { int r=a%b; a=b; b=r; } printf(“GCD is %d\n”,a);}

public class GCD { public static void main(String[] args) { int a,b,temp;a=Integer.parseInt(args[0]);b=Integer.parseInt(args[1]);

if (a<b) { temp=a; a=b; b=temp; } while (b>0) { int r=a%b; a=b; b=r; } System.out.println( "GCD is "+a); } }

Programming• The same algorithm can be implemented in

many programming languages.in C in Python in Java

• Point #1: Once you understand the general principles (which you will learn in CSCE 314), you just have to learn the “syntactic variations” in each language

• Point #2: There are some unique language differences/features including: user-created types, polymorphism, list comprehension, exceptions, function objects...

Page 11: Programming Languages and Software Engineering

• In CSCE 314, you will learn the structure of languages and what unites them, so you can eventually learn to program in any of them

• major classes of languages– imperative/procedural languages (“block-structured”)

• Pascal, Fortran, C, Ada...

– functional languages (“expression evaluation”)• Scheme, LISP, Haskell...

– object-oriented (encapsulation, “message passing”)• Smalltalk, Java, Objective-C, C++

– logic-programming• Prolog

– (of course, some languages blur these distinctions)

Page 12: Programming Languages and Software Engineering

• I already showed examples of procedural programming• here is the functional version of factorial and GCD

written in LISP:– (this is an interactive command line I typed into)

>(defun fact (n) (if (<= n 1) 1 (* n (fact (- n 1)))))FACT

>(fact 10)3628800

>(defun gcd (x y) (if (< x y) (gcd y x) (if (= y 0) x (gcd y (mod x y)))))GCD

>(gcd 112 40) // “running a program” is done by “evaluating an expression”8

Page 13: Programming Languages and Software Engineering

• interpreted vs. compiled languages– interpreters – read in lines and execute directly– compilers

• convert source code to low-level language (.exe, assembly language, executable CPU instructions)

• have to learn about regular expressions, parsing, syntax and semantics, optimization...

– compare Python and C• block structure

– think how the “body” of a for loop or if statement is marked in different languages (“}”, “endfor”, change of indentation)

• type systems– can users define new “types” and operations on them? like

structs and classes, example: Complex #s• object-oriented languages

– classes, inheritance, polymorphism...• extensions for: concurrency, exception-handling, real-

time applications...

Page 14: Programming Languages and Software Engineering

R: h=3,w=4

• Here is an example of an object-oriented definition of Rectangles in Java

public class Rectangle { int height,width; // interval variables

// initializer public Rectangle(int a,int b) { height=a; width=b; }

int area() { return height*width; }}

static Rectangle BoundingBox( Rectangle A,Rectangle B){ int h=max(A.height,B.height); int w=max(A.width,B.width); Rectangle C=new Rectangle(h,w); return C;}

public static void main(String[] args) { Rectangle P=new Rectangle(3,2); Rectangle Q=new Rectangle(1,4); Rectangle R=BoundingBox(p,q);

System.out.println( “P:(3,2) area="+P.area()); System.out.println( “Q:(1x4) area="+Q.area()); System.out.println( “R:(3x4) area="+R.area()); }

27 sun> java local/testRectanglep:(3,2) area=6q:(1x4) area=4r:(3x4) area=12

Q: h=1, w=4

P: h=3, w=2

Page 15: Programming Languages and Software Engineering

Learning Unix (part of CSCE 312/Systems)

• why learn this? is it necessary?• many command-line development tools

– (compared to IDEs like MS Visual Studio)

• Unix has well-defined concepts and principles– executables, flags, pipes, streams, sockets... – multitasking

• many powerful tools for software development:– editors like Emacs– compilers like g++– make files (for multi-file projects)– debuggers like gdb– source-code control like CVS or SVN

Page 16: Programming Languages and Software Engineering

Software Engineering (CSCE 431)• software engineering usually involves working in teams• requirements gathering/writing specifications (with customer)• UML (Unified Modeling Language)

– diagram out how your modules work and interact• libraries – reuse of code

– e.g. APIs for image processing, network access, speech recog...– large projects have many dependencies

• testing – defining test cases as important as writing code• documentation

– explain how things work, why it was designed that way, ASSUMPTIONS, alternatives, limitations...

• version control – issue new number with each change to file, e.g. v3.0.12– critical so you can identify and undo mistakes

• life-cycle models– waterfall, rapid prototyping, extreme programming (partners)...– metrics for tracking/estimating number of bugs over time


Top Related