Programming

The emphasis here is on the fundamentals of programming but there are also plenty of links to tutorial material for particular languages. There is considerable duplication of content within items so be selective!


Computer programming (often shortened to programming or coding) is the process of writing, testing, debugging/ troubleshooting and maintaining the source code of computer programs. Its purpose is to create a program, written in a programming language, that results in some desired computer behavior. Programming often requires expertise in many different subjects, including knowledge of the applications, specialized algorithms and formal logic. - based on Wikipedia.

Teach Yourself Programming in Ten Years

- Peter Norvig's (Director of Research at Google) brief but authoritative article - learning to program is fun but real expertise can take years. (Translations of this article are available in several languages.)

"The key is deliberative practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and correcting any mistakes. Then repeat. And repeat again."

How to be a Programmer: A Short, Comprehensive and Personal Summary

- Interesting and openly subjective 55 page essay by Robert L Read (Samizdat Press) -

" .... attempts to summarize the non-technical things that I wish someone had explained to me at the beginning of my career as a professional programmer. It is primarily concerned with social situations and team relationships that occur in typical software development."

Programming Fundamentals - A Modular Structured Approach using C++

- Written by Kenneth Leroy Busbee of Houston Community College, Texas, this course from Connexions covers 3 divisions of programming fundamentals: Modular/Structured, Object Oriented and Data Structures.

Topics include: Introduction to Programming; Program Planning & Design; Data & Operators; Often Used Data Types; Integrated Development Environment; Program Control Functions; Specific Task Functions; Standard Libraries; Character Data; Structured Programming; Selection; Loops; String Class, Unary Positive and Negative; Conditional Operator and Recursion; Introduction to Arrays; File I/O and Array Functions; Typedef; Pointers; Arrays & Compiler Directives; OOP & HPC; Review Materials

Programming Methodology

- As well as 28 videoed lectures this course by Mehran Sahami of Stanford Engineering includes handouts, software and assignments and exams with solutions -

"Topics focus on the introduction to the engineering of computer applications emphasizing modern software engineering principles: object-oriented design, decomposition, encapsulation, abstraction, and testing. Programming Methodology teaches the widely-used Java programming language along with good software engineering principles. Emphasis is on good programming style and the built-in facilities of the Java language. The course is explicitly designed to appeal to humanists and social scientists as well as hard-core techies."


Programming Abstractions

- A course by Julie Zelenski of Stanford Engineering following on from 'Programming Methodology' (above) but covering more advanced topics and assuming familiarity with good programming style and software engineering issues. 27 videoed lectures are available as well as notes, handouts, practice exams and assignments including solutions.

Topics include: Abstraction and its relation to programming; Software engineering principles of data abstraction and modularity; Object-oriented programming (fundamental data structures and data-directed design); Recursion and recursive data structures; Introduction to time and space complexity analysis; Uses C++ covering its basic facilities.


Programming Paradigms

- And following on again, this more advanced course by Jerry Cain, also of Stanford Engineering, deals with programming and problem solving at the programming abstractions level. Prospective learners should know a reasonable amount of C++, be able to write well-decomposed, easy-to-understand code and understand the value of good variable names, short function and method implementations and thoughtful, articulate comments.

Topics are: Advanced memory management features of C and C++; Differences between imperative and object-oriented paradigms; Functional paradigm (using LISP) and concurrent programming (using C and C++); Brief survey of other modern languages such as Python, Objective C, and C#.

Programming Language Comparison

- By Jason Voegele, software engineer for Terracotta

" .... my personal evaluation and comparison of many popular programming languages. It is intended to provide very high-level information about the respective languages to anyone who is trying to decide which language(s) to learn or to use for a particular project. You can find similar comparisons from Google Directory"

Programming Language Tutorials

The following items link to some of the best tutorials for languages commonly used for learning purposes. There is much duplication of content - find the style and level of presentation that suits you!

C and C++

Java

Python

Language Tutorials - Listings