References in a lecture series.

Lecture Reference

Turing’s Halting Problem:

  1. Wikipedia Link
  2. An article on the Scientific American on the Halting Problem
  3. Interesting question on the topic from Stack Exchange site


Week 7

Week 7 - Lecture 13

  1. Trees - Good article about trees in python.

  2. Working with tree data structures - Another good article with some visual examples.

  3. Depth first search - Very good explanation of this, with real world (chess) examples and visualization. Recommended.

  4. Breadth first search - Another good article with great explanation.

  5. Binary search tree) - Lots of explanations and technique examples.

  6. Decision Trees - Some basic explanations with sciescientific for the tree.

  7. Solving the knapsack problem - Explanation and another solution to the problem introduced in the lecture.

  8. How do I build a tree dynamically in Python - StackOverflow - Has some interesting answers and discussion.

  9. Recursion vs iteration for tree traversal in python - In the lecture we’ve seen examples for both, this article has some information on that.

  10. Graphs in Python - Thorough explanation with examples for this concept in Python.

Week 6

Week 6 - Lecture 12

  1. Everything Is an Object - Compact explanation of objects in Python with further reading material.

  2. Python Types and Objects - In depth overview of those important components of Python.

  3. Python class attributes: an overly thorough guide - Another good and thorough guide on class attributes.

  4. Python: lt() - explanation for the lt method.

  5. An introduction to classes and inheritance - Thorough article about inheritance and classes.

  6. How to detect whether a Python variable is a function? - StackOverflow - Simple explanation and an example of this method.

  7. Inheritance and substitution - Good and thorough chapter from a book about inheritance.

  8. What is the Liskov substitution principle? - StackOverflow - Insightful discussion with some important concepts and ideas.

  9. Python join, why is it string.join(list) instead of list.join(string)? - StackOverflow - Look at different answers for full understanding of the join method.

  10. Structuring Your Project - Article about abstraction.

  11. Why does python not have a mechanism for data hiding? - There are some good answers in this discussion.

  12. What does the yield keyword do in Python? - StackOverflow - Very important concept explained very good, recommended.

Week 6 - Lecture 11

  1. Python built-in data types - A reminder of the data types built in python.

  2. Lists - linked list - Explanation and implementation of this concept using python, very informative.

  3. What is a “method” in Python? - StackOverflow - Discussion with some short and simple answers.

  4. Object-oriented programming (OOP) definition - Short and simple definition.

  5. Why is Object-Oriented Programming Useful? - In depth explanation with an example from a game.

  6. Classes - good overview from the official Python documentation.

  7. Python init and self what do they do? - StackOverflow - If you got trouble understanding the strange init method this will help.

  8. What is the origin of foo and bar? - StackOverflow - For the curious.

  9. Python: difference between class and instance attributes - StackOverflow - Important difference to know and remember.

  10. Improve your Python: Python classes and object oriented programming - Good summery of this topic.

  11. A guide to Python’s magic methods - “underscore underscore methods” very informative and helpful guide for efficient programming in python.

  12. Abstraction Functions, Rep Invariants, and Equality - Article covering representation invariants.

Week 5

Week 5 - Lecture 10

  1. Software complexity: how do we bring order to chaos? - The only decent piece of information on that topic I found.

  2. How indirection can affect the behaviour of your code - A practical example of what indirection is and why you need to understand it.

  3. Searching- linear and binary search - Very good and long explanation on binary and linear search.

  4. What is amortized analysis of algorithms? - StackOverflow - Basic and simple explanation of what amortizing analysis is.

  5. Amortized analysis - Very in depth explanation of the topic.

  6. Why is binary search,which needs sorted data, considered better than linear search? - StackOverflow - Discussion answering why and when is sorting and searching better then simple linear search.

  7. The Selection Sort - Explanation and visual representation of the sort.

  8. The Merge Sort - Same site as above with good explanation and visualizition.

  9. Sorting, searching and algorithm analysis - Good article to sum up all the material above, with examples and exercises.

  10. What different sorting algorithms sound like - YouTube - Interesting visual and audio representation of different sort algorithms, recomended.

  11. Barack Obama - Computer science question - YouTube - Obama’s opinion on sort algorithms (bubble sort is similar to selection sort and is considered the least effective sort).

Week 5 - Lecture 9

  1. Computational complexity theory - Wikipedia - A wiki in depth article covering this topic.

  2. A random-access machine - RAM - Short explanation for this basic but important topic.

  3. Measuring Complexity - Overview of different complexity algorithms and ways to measure it.

  4. Big-O cheat sheet - Interesting sheet with a small explanation on big-O notation and examples for most popular algorithms.

  5. Examples of algorithms which has O(1), O(n log n) and O(log n) complexities - StackOverflow - Small discussion with examples for different algorithm classes.

  6. Software complexity and Big-O notation - Something with more examples for all

  7. Complexity of Python Operations - Explanations and examples of different complexity classes regarding python basic operations.

  8. Are there any O(1/n) algorithms? - StackOverflow - Very interesting discussion.

  9. Big O, how do you calculate/approximate it? - StackOverflow - Good discussion to close up the topic of approximating an algorithm complexity.

  10. Plain English explanation of Big O - StackOverflow - Discussion containing comparison between different cases of algorithm complexity.

Week 4

Week 4 - Lecture 8

  1. Exception handling - Wikipedia - Overview of the whole subject.

  2. How to use “raise” keyword in Python - StackOverflow - Little bit of explanation on raise and lots of examples and farther readings.

  3. Try/Except in Python: How do you properly ignore exceptions? - StackOverflow - Another stack discussion with good answers and more resources to read.

  4. Try and except in Python - Contains the list of different errors.

  5. Returns values from a for loop in python - StackOverflow - That’s something new concept and that explanation might help understanding it. (return [something for something in somethings]). See also “list comprehensions”, below.

  6. List comprehensions. While not yet officially presented in the course, they were used during the lecture ( getSubjectStats function: return [ element for element in list ] ). The python documentation for them is here

  7. Python exceptions handling - Exception handling explained.

  8. Using assertions effectively - Explanation and examples.

Short list for short lecture.

Week 4 - Lecture 7

  1. Testing your code - Very good explanation of the topic using python as an example.

  2. Python debugging tips - StackOverflow - Big discussion with tons of different tips, very recommended for all the level of knowledge.

  3. Documentation, testing, and debugging - Compact overview of those topics.

  4. Black box testing - Basic and easy to understand explanation.

  5. White box testing (aka glass box testing) - Similar to the one above, basic and clear.

  6. What is regression testing? - What is it, why we need it and how we can use it.

  7. How to investigate intermittent problems - Different techniques and concepts.

  8. Defensive programming - Explanation with examples in Python.

  9. Rubber duck debugging - YouTube - Best kind of debugging.

  10. Rubber Duck Debugging - Yep.

Week 3

Week 3 - Lecture 6

  1. Python Tuple - Very good and beginner friendly explanation of the tuple and all of its properties.

  2. Are there more ways to define a tuple with only one item? - StackOverflow - Different ways of making a singleton (tuple of one item).

  3. An introduction to Python lists - Good overview of lists and what you can do with them in Python.

  4. Immutable vs mutable types - Python - StackOverflow - Discussion with some good answers explaining what is mutable or not mutable in python.

  5. Python: aliases - Explanations and some interesting code to run by yourself.

  6. List Aliasing Conundrum - StackOverflow - Some important points about aliasing, I think this topic can confuse students so the more explanations the better.

  7. How do I copy an object in Python? - Short yet useful article about copying.

  8. Understanding the Map function. python - StackOverflow - Map is very useful and important function in python and understanding it will help a lot.

  9. Python Dictionary - Good and short overview of dictionaries and their functionality.

  10. Dictionary - python for beginners - More farther reading on dictionaries.

  11. Dictionaries - Yet another thorough explanation of the dictionary, recommended.

Week 3 - Lecture 5

  1. Google search recursion - Notice the suggested word google gives you :-)

  2. Recursive functions - Explanations with examples in Python.

  3. Recursion or iteration? - StackOverflow - Great discussion talking about the difference between the two.

  4. Iterative vs. recursive approaches - Comparison with examples.

  5. Base case in a recursive method - StackOverflow - Explanation on the recursive case, what is the right way to end recursion.

  6. Mathematical induction - Basic explanation if you didn’t get it in the lecture.

  7. Zero factorial - Numberphile - YouTube - Interesting video about the factorial concept, not related to the course but still interesting.

  8. Tower of Hanoi - Short overview of the tower of Henoi.

  9. Fibonacci numbers and nature - Good explanation of the topic and interesting examples from life.

  10. What is the use of “assert” in Python? - StackOverflow - Plain and simple, very good discussion about assert in Python.

  11. I don’t understand dot notation - Good explanation (though covers material we didn’t learn) of this very important topic.

  12. Global and local variables - Thorough comparison and explanation.

  13. Can every recursion be converted into iteration? - StackOverflow - 2 questions covers the comparison between iteration and recursion.

  14. Can all iterative algorithms be expressed recursively? - StackOverflow - 2 questions covers the comparison between iteration and recursion.

  15. Problem Solving with Algorithms and Data Structures Using Python - a more visual explanation of recursion

Week 2

Week 2 - Lecture 4

  1. What does abstraction mean in programming? - StackOverflow - Very good explanation in the context of python, too.

  2. Defining functions of your own - In depth explanation with examples. Understanding how to define a function is very important for later in this course and in programming in general.

  3. Python fundamentals tutorial : functional programming - Very advanced explanation on different functions and how to use them. Useful only for the experienced programmers and can confuse beginners.

  4. Python and pointers - Another advanced material. Can confuse beginners and aimed at the experienced programmers.

  5. Naming and binding - You can find here information about local binding and naming in general.

  6. A beginner’s guide to python’s namespaces, scope resolution, and the LEGB rule - Good overview of scopes in Python.

  7. Improve your python: understanding unit testing - Article about testing your functions, written in a beginner friendly way thought covers topics we still didn’t learn in the course.

  8. What is the standard python docstring format? - StackOverflow - Discussion with good answers on how to write good function specification.

  9. Modules - In depth guide to modules in python, how to import files and how to use functions from them.

Not a lot of resources but every one of those (not the advanced links) are important to understand and will make it easier to progress with the course. -NotAlien

Week 2 - Lecture 3

  1. Iteration - Comprehensive guide for iteration in Python with examples.

  2. Iteration - source 2 - Another guide to complement the first one.

  3. The guess and check pattern - Youtube - Video explaining this concept.

  4. Bisection method - Wikipedia - Broad explanation.

  5. While statements - In depth guide for the while statements. Good for the beginner and for the experienced programmer.

  6. How to stop an infinite loop - (now that we learned the while loop…) Try CTRL + C If it doesn’t work, CTRL + C + ENTER or CTRL + Pause/Break.

  7. Loop with a Decrementing Counter - Little bit of explanation of decrementing function.

  8. Exhaustive enumeration - Explanation.

  9. Python loops - Clear representation of the concept and further reading links for the “for loop” and other loop related information.

  10. Floating point numbers - Youtube - Video explaining the Floating point subject.

  11. Why can’t decimal numbers be represented exactly in binary? - StackOverflow - Discussion on the subject. May help understanding the problem.

  12. Helpful video explaining floating point numbers. Quick and engaging video on the topic by Tom Scott.

  13. The Newton-Raphson method - Already the Babylonians knew how to approximate square roots, so you should, too.

Week 1

Week 1 - Lecture 2

  1. Levels of programming languages - Easy and short explanation of the subject. However, some of it may be misleading.

  2. High level vs. low level languages - Long discussion with different directions.

  3. Compiled and interpreted languages - Youtube - Short explanation video.

  4. Differences between compiled and interpreted languages - Detailed article with various examples and language comparisons.

  5. Shell - “Sometimes called command shell, a shell is the command processor interface. The command processor is the program that executes operating system commands. The shell, therefore, is the part of the command processor that accepts commands. After verifying that the commands are valid, the shell sends them to another part of the command processor to be executed.” Taken from Wedopedia

  6. Command-line interpreter - Explanation of the term including shell.

  7. Picking an Interpreter - Simple and easy to understand article about different interpreters for Python. (I believe canopy uses CPython but I can be wrong).

  8. Modular arithmetic - Video explaining the modulo concept. It can a challenging idea to understand at first, but it holds great power.

  9. Order of evaluation - Table lists the order of operation (precedence rules) for Python operators. Including advanced topics that will be helpfull later in the course.

  10. Python strings - A guide to using strings in python. Contains advanced material that may be usefull later in the course.

  11. Asking questions - Beginner guide for using raw_input and some good Q&A in the comment section.

  12. Efficient string concatenation in Python - Very in depth analysis of different methods for string concatenation. Might be useful very late in the course.

  13. How to properly comment your code - MIT’s quick guide for commenting code.

  14. Coding without comments - Advanced discussion on commenting more useful for experienced programmers.

  15. Indenting code - Simple beginner friendly guide.

  16. Readablity is critical for programing. You will write it only once, and read it MANY times. Some languages(C, Perl) have “conventions” that are most often ignored in the breach as it were. Others like Go pretty much reformat your code to enforce conventions. Python has Pep8, the mostly official stylie guide. It might be a bit more advanced, and might be a big confusing to beginners. I would use what you understand, and keep what you don’t understand tucked away in the back of your midn for when you do. See especially A Foolish Consistency is the Hobgoblin and Naming Conventions.

  17. If statements - Starting with basic explanation and examples and progress to very complicated scripts.

  18. Semantic and Syntax Errors - Good guide on differentiating between semantic errors and syntax errors.

Week 1 - Lecture 1

  1. Instructions per second - Wikipedia > “Instructions per second (IPS) is a measure of a computer’s processor speed… The term is commonly used in association with a numeric value such as thousand instructions per second (kIPS), million instructions per second (MIPS), Giga instructions per second (GIPS), or million operations per second (MOPS).

  2. How computers work: computation - Youtube - Youtube video explaining some topics covered in the lecture.

  3. The history of digital storage - Interesting infographic illustrating the evolution of digital storage.

  4. Is there a perfect algorithm for chess? - StackOverflow - Insightful discussion.

  5. What is cryptography? - A basic explanation of cryptography and a more advanced explanation why some encryption is too hard to crack.

  6. Impossible programs - Not so basic explanation of the impossible program.

  7. Declarative and imperative knowledge - “The contrast between function and procedure is a reflection of the general distinction between describing properties of things and describing how to do things, or, as it is sometimes referred to, the distinction between declarative knowledge and imperative knowledge.” (-SICP)

  8. Methods of computing square roots - Wikipedia

  9. Real proper custard - Custard recipe.

  10. The baby: the world’s first stored-program computer

  11. A learning model of simple computing machine architecture - Scientific article about basic machine architecture.

  12. Alan turing six primitives: > - “Right: Move the Machine’s head to the right of the current square” > - “Left: Move the Machine’s head to the left of the current square” > - “Print: Print a symbol on the current square” > - “Scan: Identify any symbols on the current square” > - “Erase: Erase any symbols presented o the current square” > - “Nothing: Do nothing

  13. What is a turing machine? > “A Turing machine is an idealised computing device consisting of a read/write head (or ‘scanner’) with a paper tape passing through it. The tape is divided into squares, each square bearing a single symbol–‘0’ or ‘1’, for example. This tape is the machine’s general purpose storage medium, serving both as the vehicle for input and output and as a working memory for storing the results of intermediate steps of the computation.

  14. Turing machines explained - Turing Machines are the basis of modern computing, but what actually is a Turing Machine? Assistant Professor Mark Jago explains.

  15. Semantics - For a deeper understanding of the term.

  16. In terms of programming, what do semantics mean? - StackOverflow - Easy to understand explanation of syntax, semantics, and static semantic defenitions.

  17. Defensive programming - Advanced article about defensive programming in software development process.

  18. “Approximate timing for various operations on a typical PC” Taken from Teach Yourself Programming in Ten Years

execute typical instruction 11,000,000,000 sec = 1 nanosec
fetch from L1 cache memory 0.5 nanosec
branch misprediction 5 nanosec
fetch from L2 cache memory 7 nanosec
Mutex lock/unlock 25 nanosec
fetch from main memory 100 nanosec
send 2K bytes over 1Gbps network 20,000 nanosec
read 1MB sequentially from memory 250,000 nanosec
fetch from new disk location (seek) 8,000,000 nanosec
read 1MB sequentially from disk 20,000,000 nanosec
send packet US to Europe and back 150 milliseconds = 150,000,000 nanosec

Interesting and Useful Links

The links are not in any particular order and can be useful for users with any amount of knowledge.

Online books, tutorials and reading materials

Other useful links.

  • stackoverflow - Great site with great community all about helping others. Almost every question you will have is already asked and answered on this website. (Make sure you search thoroughly before asking questions).

  • /r/learnprogramming - A growing reddit community about learning programming.

    • The Wiki - Very detailed wiki with tons of information for the beginning programmer.
    • The FAQ - General questions a new programmer can have that might be not answered in the lectures.
  • geekviewpoint - Great compact website with a lot of examples for basic and complex problems solved using Python.

  • Computer language chart - Very interesting representation of the different languages of the past and the present.

  • Teach Yourself Programming in Ten Years - Good article about the philosophy of learning new subjects and particularly programming.

    (Apparently the site is down and I guess we are partially involved. Be sure to check it out when it’s back online)
  • Koans of unit tests You get a set of failing unit tests that you must fix. Starts very basic and goes up to OOP and then some. Useful if you want extra practice with Python and works well with this class (so far - week 4).

  • Free Programming Books Github community maintained list of links to free programming books for Python.