David Wyde

Intro-to-Programming Outline

This is a miscellaneous collection of notes about teaching programming to non-programmers.

Existing Resources

The first link is well-regarded, despite its intimidating title.

Introduction

Building blocks

Variables

age = 23
name = 'David'

Loops

Conditional expressions

Data types

Bits

Languages

Don’t Repeat Yourself

Security

Portability

Standards

Servers

Graphics

Text vs. binary

Data interchange, file formats

Coding style

Databases

Code quality

Scientific computing

Multi-tasking computers

Different kinds of memory

Algorithms, Data Structures

Computational complexity => actual performance

How to learn on your own

Piracy and privacy

The Cloud: buzzwords

Ads pay for free services like Google and Facebook

Abstractions

Impedance mismatch; i.e., square peg in a round hole

iPhone and Android apps, and app development

Making your own website

LaTeX: nice-looking typography

Domain-Specific Languages: slang, jargon, and concise representations

Embedded languages: Microsoft Excel’s VBA (Visual Basic for Applications)

Filesystems

Computer literacy

Intellectual property and software patents: technical and legal issues

OS services, daemons, and local servers

Software, hardware, firmware

Back up data to external media: DropBox, Google Drive?

User permissions

Multi-user vs. multi-process

Automation: re-run experiments “for free” (simulations)

Separation of concerns

Programming paradigms

Automated tests: unit, integration, usability tests

Learning and using legacy tools, and legacy code

Web browsers

Routers: packet sniffing, wireless passphrases, MAC filters

The network stack

Operating systems, kernels, and userland

What happens when you press the “Enter” key?

Cracking

Security updates and the software lifecycle

Sharing software

Version control systems

Software developer literacy

Licensing

Miscellaneous