pkb contents > programming | just under 1492 words | updated 11/17/2017

1. What is programming?

1.1. ... as a profession?

1.1.1. What skills are required for programming?

Programmer competencies matrix

1.2. ... in relation to hardware?

Explain each of the following using an example of a human capability

1.3. Programming languages

1.3.1. What is an algorithm?

An algorithm is a step-by-step way of solving a problem. (1) The "steps" may be written as instructions for humans or for machines to follow. (2) There are many ways to solve a problem, so we need ways to evaluate and choose algorithms (the issues of algorithmic bias and algorithmic transparency).

1.3.2. What are major programming paradigms?

1.3.3. What are major types of programming by level of abstraction?

1.3.4. Which language for what task?

2. What are good programming practices?

These practices are meant to (1) maintain code quality and (2) manage code as an asset:

2.1. Types of programming errors and their corresponding solutions

Per Calvanese (2006), Wikibooks (n.d.), and SQA (2006):

Types of programming errors
Syntax Exceptions AKA semantic? Logical
Static Dynamic
Compile-time errors Run-time errors
Defenses against programming errors
Knowledge (in Python) try ... except Debugger

2.1.1. Debugging code

Per notes by Joseph Hellerstein at UW, debugging consists of:

Phase Action
Detection of problem Testing
Isolation of responsible code Thought
Logging e.g. with print
Debugging tool* e.g. pdb
Resolution (specific to problem)

* "I've probably used it a dozen times or so in five years of coding"

Similarly, Klahr and Carver (1988; referenced in Bransford et al., 2014, p. 60) describing debugging as "identifying the buggy behavior, representing the program, locating the bug in the program, and then correcting the bug".

2.1.2. Testing code

2.1.2.1. Raising errors

2.2. Readability and style

Per Beck (2017), readability is important because good code must be:

Style guides formalize conventions to support readability for a specific language --- things like naming conventions, line and character spacing, etc.

2.3. Reproducibility

See: paper notes from DSSG 2017, Valentina Staneva's tutorial.

2.3.1. Version control

2.3.2. Literate programming and notebooks

2.3.3. Documentation

2.3.3.1. Comments

Per Beck (2017):

2.3.3.2. READMEs

2.3.4. Software licenses

Important because:

[graphic from lecture notes based on Mark Webbink's work]

2.3.5. Accuracy = DESIGN

3. Software engineering

(These notes are based on a lecture by Joseph Hellerstein at the University of Washington.)

3.1. Software development lifecycle

See planning a project and overview of PM methodologies

3.1.1. Waterfall

3.1.2. Agile

... failure of this approach (in most cases, with a few important exceptions) led to the Agile approach, c. 2000, because "you don't know all the details until you've done it":

... in the context of homework:

3.2. Collaboration in software development

Common problems:

3.2.1. Code review template

Per Beck (2017):

Background:

Comment on:

3.2.2. Standups

3.3. Technology assessment template

Address:

Questions:

Research strategies:

4. Sources

4.1. Cited

Bransford, J., Brown, A. & Cocking, R. (2000). Learning and transfer. In How people learn: Brain, mind, experience, and school. Washington, DC: The National Academies Press. https://doi.org/10.17226/9854

Calvenese, D. (2006). Types of program errors. Retrieved from http://www.inf.unibz.it/~calvanese/teaching/ip/lecture-notes/uni10/node2.html

Beck, D. (2017). Lecture at University of Washington.

Scottish Qualifications Authority (SQA). (2006). Types of program error. Retrieved from https://www.sqa.org.uk/e-learning/SDPL03CD/page_04.htm

Wikibooks. (n.d.). Python_Programming/Errors. Retrieved from https://en.wikibooks.org/wiki/Python_Programming/Errors

4.2. References

4.2.1. General

4.2.2. Bash

4.2.3. Python

4.2.4. R

4.3. Read

4.4. Unread