Guest 6

Lecture 20 - February 28th, 2017

Guest Lecture

By Daniel German

Programming Languages

What is programming:

  • SQL:

select * from books

  • HTML:
<html>
    <head>
        <title>Hello World</title>
    </head>
    <body>
        <h1>Hello!</h1>
    </body>
</html>
  • Prolog:
playsAirGuitar(jody). 

?-  playsAirGuitar(jody).

Are some programming languages better than others?

Two Criteria:

  1. Can our language allow us to program the computer to do anything our computer can do?
  2. Can ou computer do anything that our program can express?

Turing Machine

  • Entscheidungsproblem
    • Does there exist an algorithm for deciding wether or not a specific mathematical assertion does or does not have a proof?
  • Church-Turing Thesis
    • A function on the natural numbers is computable in an informal sense if and only if it is computable...
  • Lambda-Calculus = Turing Machine = Pencil and Paper

Turing Complete

  • A programming language that can used to simulate a turing machine
  • Any turing machine can be simulated with a program in such language
  • Any program in such language can be converted to a turing machine

BrainFuck

  • http://www.muppetlabs.com/~breadbox/bf/
  • Language is Turing Complete

Therefore not all TC languages are very useful.

What is a good programming language?

Answer: The one that gets you a job?

How to learn how to program

Answer: Not in your CS courses!

"Quote" - Alan Perlis

The five features you must learn

  • The Syntax
  • The Semantics
  • The Libraries
  • The Idioms
  • The Tools

Additional Reading: What makes a great software engineer? By Oaul Luo Li, Andrew J. Ko, and Jiamin Zhu

Skills of a good programmer

  • Curious
  • Hardworking

My recommendations?

  • Be great at
    • one programming language
  • Be good at
    • one statically typed language
    • one dynamincally type language
    • one functional language
  • Master:

    • Typing
    • Debugging
    • One Programming Environment
    • Version Control
    • A Configuration Management Tool (cmake)
    • Testing
  • Select your jobs carefully

  • Do side-projects
  • And keep learning