I will be available Wednesdays from 12-2pm and by appointment via our Google Plus community.
We’ll have a series of programming professionals come in and discuss their experiences and their personal relationships to the topics we’re covering. A selection of speakers who have confirmed (but not yet scheduled):
Eric Martindale, CTO of Coursefork
Karen Cranston, co-PI, Open Tree of Life Project
Julia Elman, Front-End Developer and Designer, Cactus
Alan Dipert, (Currently) Freelance Programmer
Jeff Heard, Senior Researcher, RENCI
Key Questions
What is Text?
What is a Computer?
How Can Text Control Computers?
Wednesday Aug 21st Readings:
In-Class: Get set up on Google Plus
In-Class: Get set up on Github
In-Class Exercise: Modify the class blog
Key Questions
How do I use the command line?
How do I make a fork on Github?
How do I make a branch on git or Github?
How do I open a pull request?
Monday Aug 26th Readings:
Github Flow: This is an article about the basic workflow we’ll be using to write our blog together. You won’t understand everything in this article, which is fine because we’ll re-read it later in the class. This is perhaps the most important content of the course, so pay attention.
Github Flow in the Browser: Recently Github has released features to allow the entire Github flow to happen in the browser (i.e. without using your command line on your computer).
Jekyllrb.com: Read over the site’s documentation and see how much of it you can understand. Pay particular attention to the section on writing posts- this is what you’ll spend the most time doing.
In-Class Exercise: Write an initial blog post
In-Class Exercise: Open your first issue
In-Class Exercise: Close your first issue
Note: As we’ll learn, git
is an open source command line version control system. Github.com is the fastest growing git
repository on the internet. This distinction isn’t always immediately apparent.
Wednesday Aug 28th Readings:
Comoyo: How we built our company blog - Evidence that what we’re doing isn’t totally out of left field. For bonus points, dig into some of the source code of their site.
Software Carpentry: Computational Thinking - This is intended as a wrap-up essay but I often find it useful to ‘start at the end’. Use the essay to orient yourself to concepts that we’ll be learning.
In-Class Exercise: Write a simple post with syntax highlighting
In-Class Exercise: Open your first pull request
In-Class Exercise: Close your first pull request
In-Class: Pair up with your merging partner.
In-Class: Set up VirtualBox Ubuntu. Extra credit for helping peers install outside of class.
Key Questions:
What do Processors do?
How do programming languages interact with processors?
How do I read a program?
Monday Sept 2: No Class
Wednesday Sept 4 Readings:
Chapter 1 ThinkPython: The Way of the Program
Wikipedia: Assembly Language paragraph only
Linux Info Project: Machine code definition
Homework: Vocab show & tell
In-Class Exercise: Hands on with Code
In-Class Exercise: Blog about the relationship between Assembly and Python
In-Class: VirtualBox check-in.
Key Questions:
How can I read code for understanding?
How is data treated in programs?
Why do data structures matter to programmers?
"Programs must be written for people to read, and only incidentally for machines to execute."
- Abelson & Sussman, SICP, preface to the first edition
Monday Sept 9th Readings: Reading Code
Hitchhiker’s Guide to Python: Code Style - There will be lots in here that may not make sense to you. Practice your skimming/vocab learning skills.
ThinkPython Ch. 2: Variables, expressions, and statements
Homework: Vocab show & tell
Guest Observer: Jaime Arguello
In-Class Exercise: Explain a program with comments and documentation
In-Class Exercise: Complete a program that has only comments
Wednesday Sept 11th: Python primitive data structures
Sparkfun: Intro to binary
ThinkPython 2.1: Values and Types
Software Carpentry: Python Basics
Homework: Vocab show & tell
In-Class Exercise: Data conversions in the interactive shell
Post: From data to binary and back
What is pseudocode?
How can I solve problems with pseudocode?
Simple data: Strings, numbers, and conditionals
Monday Sept 16th: Read about strings and numbers
Paul Graham: Hackers and Painters A counterpoint to what we'll be doing in class. Instead of pseudocode, Graham advocates writing real code first. Read at least the first half.
Review ThinkPython Ch. 2: Variables, expressions, and statements
Wednesday Sept 18th: Read about conditionals
Paul Graham: Hackers and Painters Finish.
ThinkPython Ch. 5: Conditionals and Recursion
What more complex structures are available?
What is the flow of control?
Complex data: Lists, loops, and flow of control
Monday Sept 23rd: Read up on lists and dicts
ThinkPython: Lists
Software Carpentry: Lists
ThinkPython: Dicts
Software Carpentry: Data Storage: Sets and Dicts
In-Class: Slicing & dicing data. Codingbat.com
In-Class: Solve a problem in comments, then implement. Pair programming
Post: Why lists and Dicts?
Wednesday Sept 23rd: Read up on loops
PythonTutor: Flow of Control Visualization - Visualize some simple programs to see how they work.
Review ThinkPython Ch. 5: Conditionals and Recursion
Software Carpentry: Flow of Control
In class: Looping over lists. Codingbat.com
In-Class: solve a problem with comments, then implement. Pair programming.
Extra-Credit Exercises: ThinkPython: Using data structures An extra point on your final grade for a Github post with exercises 1-4 completed. Due Friday.
Check-in: Meetups
Self-contained, reusable bits of code.
Monday Sept 30th - I/O and intro to Libraries
Software Carpentry - Input/Output
Revisit Hitchhiker’s Guide to Python: Code Style
Skim over some intro docs for popular Python Web Frameworks: Pyramid, Flask, and Django. Django is the most in-depth of these, and the most robust.
In-Class: Input/Output exercise
In-Class: Command line: pip. Review some common python libraries. Focus on documentation, initial testing, beginning use
Wednesday Oct 2nd: Libraries, Catch up, Synthesis
Software Carpentry: Libraries
Looking for post ideas? Check out the Useful Modules list on the Python wiki. See if you can get a sense of how well used or maintained the modules are.
In-Class exercise: Contribution Guidelines for our class website.
In-Class exercise: Command line git commiting
Post: Exciting libraries or frameworks you might want to use
Monday Oct 7th: Terminal Text Editors - Nano, Vim, and Emacs
Reading: Vim after 11 years
Reading: My Emacs Workflow
In class: Use and customize Nano
In class: Use and customize Vim
In class: Use and customize Emacs
In class: More command line git
Wednesday Oct 9th: Graphical Text Editors - IDLE, SublimeText, Eclipse, others?
In-Class: Voluntary demos
In-Class: Picking your favorite text editor
In-class: More command line git
Guest Speaker: Eric Martindale
Problem solving with code, but better. Guests.
Monday Oct 14th:
Pygame
Locally build Jekyll
Homework: Library show & tell
Wednesday Oct 16th:
A little history and a lot of hands on with the Open Source Community. Guests.
Monday Oct 21st: Your first open source contribution
Reading: Skim PyPI for how to package programs so others can install them
Reading: testpypi test server details
Guest speaker: Alan Dipert, talking about fearlessness in tech
In-class: Open an issue or fork and fix one. Aim small.
Wednesday Oct 23rd: Other languages and technology: Ruby, Java, HTML, CSS, Javascript
Reading: Paul Graham - Succintness is Power
Reading: Guido van Rossum - Python's Design Philosophy
Reading: Interview with Yukihiro Matsumoto - Ruby's Design Philosophy
Reading: Interview with Bjarne Stroustrup - Elegance and other Design Ideals. Stroustrup invented C++ in the 70s and 80s.
Guest Speaker: Jeff Heard, RENCI
In-class: Brainstorm 3 project ideas & lightning talks
Connecting computers and accessing remote computers. Guests.
Monday Oct 28th: Local SSH
In-Class Exercise: Bash scripting for simple data transformations
Extra Credit: Raspberry Pi
Wednesday Oct 30th: Remote SSH
isis.unc.edu
scp & rsync
Check-in: Meetups
Key Questions:
What is an operating system?
How do I make basic windowed interfaces?
Monday Nov 4th Readings:
Operating system basics: TBD (still looking for open resource)
Begin Reading: In the Beginning there was the Command Line through page 28 or so.
Check out Levenez.com: The UNIX and Linux Timeline
In-Class Exercise: Tinkering with window managers
Assignment: Project Lightning talks
Wednesday Nov 6th:
Finish Reading: In the Beginning there was the Command Line Written in 1999, but still contains an amazingly good account of the major players. A key passage: "There is no reason why a sufficiently dedicated coder could not start from nothing with every project". The ways in which and reasons why they don’t are very important. The section starting on page 29 is a first-person account of how operating systems have changed computing.
Set up Arch Linux from scratch
Revisit project ideas. Lightning talks
Check-in: Meetups
Version control and social coding. Guests.
Monday Nov 11th: Game hacking revisited: Feature Branches
Reading: ProGit Ch. 3.1 What a Branch Is
Reading: ProGit Ch. 3.4 Git Branch Workflows
In-class: games and feature branches
Wednesday Nov 13th: Game hacking: upstream remotes. Intro to rebasing. Hooks
Reading: ProGit Ch. 5.1 Distributed Workflows
Optional Reading: ProGit Ch 6.4 Re-writing History (amend, rebase, split)
Optional Reading: ProGit Ch 7.3 Hooks
Revisit: Github Flow
In-Class: Distributed teams & feature implementation
In-Class: Extra credit for explaining amend, rebase, split and hooks
Project proposal due
How to give back or start a project. Guests.
Monday Nov 18th: Documentation. Project updates
Wednesday Nov 20th: Code Refactoring and Cleanup
Tactical help from me or peers on final projects.
Monday Nov 25th:
Wednesday Nov 27th: No Class
Presentation and discussion of projects. A roadmap for where students want to go next.
Monday Dec 2: Presentations
Wednesday Dec 4: Presentations; wrap-up
Final projects due Weds, December 11th, 11:59pm.