Assignments.Assignments are due some Sunday nights at midnight. Programs must operate correctly on the student server. Two thirds of an assignment grade is correctness; two ninths is timeliness and one ninth is style. Source code or response text for each assignment must be submitted using the ~abrick/send program. Submissions and resubmissions after the assignment's due date cannot earn full timeliness credit, which diminishes linearly from 1 to 0 in the week after an assignment is due. No assignments at all are accepted after the due date of the semester's last assignment. If my systems or I are incapacitated or cannot receive student work, no lateness penalties will be assessed. Compare to exercises.
Caveats.All dates, scores, and texts published on this site are provisional. Please inquire if you think there may be an error.
Contact.I am always available to students by email and at my office hours. I generally respond to messages within three working days. You can make contact with me on LinkedIn when you pass one of my courses.
Enrollment.I offer add codes at my office to any students, wait listed or not, who need one during the first two weeks of a course that can accomodate them. You are responsible for dropping yourself if you decide to leave the class.
Exams.Expect two comprehensive exams per semester, each one hour in duration and consisting of five conceptual and technical problems. Books, notes, and computers are permitted. You will not be asked to compose complete programs. Students in my online classes must attend on-campus exams proctored by the instructor. Prepare for exams by reviewing the assigned reading. Late exams will not be given, but early ones can be taken at my office hours in advance of the exam date. Afterwards, you can also review your exam at my office hours or receive a copy of it in the mail by turning it in with a self-addressed stamped envelope. Ranked-choice voting assesses project success for scores in project courses.
Exercises.Exercises are ungraded work which need not be turned in. Compare to assignments.
Extra Credit.To earn extra credit while enrolled in my class, catch up on your homework assignments and propose to me an interesting or useful project you want to pursue. See also independent study.
Grades.Your current grades and detailed comments on your work will be published on this web page through the semester. Mouse over an italicized score to see details pop up in a tooltip. (If this does not work in your browser, one workaround is to read the page source.) Two thirds of the raw grade is homework; two ninths are exam(s) and one ninth is participation. These figures are half-curved against those of all other enrollees by taking the mean of the raw score and the percentile. A, B, C, and D grades represent scores in the first, second, third, and fourth deciles.
Help.We all need help, all the time. Every course has group discussion in a classroom or an online forum. The Academic Computing Resource Center in Batmale Hall offers orientations and peer tutoring. You may always come to the instructor's office hours with your questions and without making an appointment.
In-person classes.Studying in person, on campus, means having more personal interaction and interchange with your peers and instructor. This context is conducive to group discussion, but requires class attendance at certain hours, which is logistically challenging for many students. See also online classes.
Independent Study.I supervise independent study projects. They have to be useful, novel, and serious to be worth our time. Propose your project to me in person so that we can discuss it. See also extra credit.
Online classes.Online study is a learning experience suited for self-starters and remote learners. While doing the same readings and assignments as your peers in an in-person class, you will be expected to communicate with peers and instructor at least weekly in a message forum, and to attend two evening exams on campus per semester. There is always an optional evening orientation when the course begins. See also in-person classes.
Participation.Expect to participate by cooperating in work, asking questions, citing resources, and assisting your colleagues. Your participation in forums and classes will be assessed using secret, random participation tokens which you redeem using the ~abrick/send program. In-person classes may receive as many as one token per meeting; online classes as many as one token per week. Your participation in projects will be calculated based on your colleagues' collective judgment of your contribution.
Plagiarism.All students must do their own work. If you turn in plagiarized work, be prepared to receive a zero or even negative credit at the instructor's discretion. See the Rules of Student Conduct.
Services. You will need to access the student Linux server hills.ccsf.edu using an ssh client. On Linux and Mac systems one is preinstalled with the name ssh. On Windows you can try PuTTY and on Android, ConnectBot; any alternative is fine. Your hills username is the same as your CCSF email name: up to eight characters long. Your initial password is based on your birthday and first and last initials, in the form jan0188.fl. Passwords will not be shown as you type them, and you will have to change the default right away. If you mean to connect wirelessly on campus, the network to use is CCSF Student.
Style.Learning to program requires learning good style. A program earning a low style score might exhibit compilation or runtime errors; lack sufficient comments in the source code; violate norms of indentation, or name capitalization; or contain redundant, copy-and-pasted code. A program earning a high score will throw no errors, have copious comments, good indentation and capitalization, and be concise. In Python, triple-quoted strings, which are true objects, are excluded from the comment assessment.
- My Spring & Fall courses
- Web4 / WebSTARS
- WiFi Instructions
- Student email accounts
- Batmale 413 Linux machines
- Computer Usage Policy
- Computer Science department
- TechSF support programs at BAVC
- Disabled Students Programs & Services
- Academic Computing Resource Center
|Welcome||none||• Course policies|
|Server||8/23 orientation||• Kevin Heard's UNIX Tutorial 1-5|
|Programs||none||• Downey 1|
|Development||none||empty, due 9/11: Make a copy of /users/abrick/resources/empty.cpp and add a comment to it.||• Outspeaking's What is Programming|
• T.S. Nguyen's g++ Tutorial
|Output||none||• Downey 2|
|Integers||none||• Downey 3|
|Mathematics||none||countyfair, due 10/2: You are hired to make and sell 1000 cups of lemonade at the county fair. How much does it cost you to prepare each serving?||• David Kieras's Formatting Numbers with C++ Output Streams|
|Pseudorandomness||none||• Alex's Random number generation|
|Conditions||10/11 exam||• Downey 4|
|Loops||none||• Programiz's C++ while and do...while Loop|
|Arrays||none||lotteries, due 10/30: Extend last week's program so that it plays the lottery until it wins ten times and then calculates the average number of draws it took to win.||• C++ Arrays http://www.programiz.com/cpp-programming/arrays|
|Functions||none||• Downey 5 and 6.6 through 6.11|
|Strings||none||• Kurt McMahon's C strings and C++ strings|
• Downey 7
|Parameters||none||greetbyname, due 11/20: Make the greeting function require that the user's name be passed in so that she can be greeted by name.||• Tutorialspoint's C++ Functions|
|Input||none||• Lucia Moura's Command Line Arguments in C++|
|Files||none||• Downey 15|
|Text Analysis||none||stem, due 12/11: Write a program that shows all words in the dictionary /users/abrick/resources/american-english-insane starting with the first command line argument.||• What's the difference between college-level and corporate programming?|
|Welcome||none||• Course policies|
|Server||8/23 orientation||• Kevin Heard's UNIX Tutorial 1-5|
|Interpreter||none||name, due 9/4: Write a program that prints out your full name and the names of any natural or computer languages you have studied.||• Downey 1|
|Types||none||• Floating Point Arithmetic: Issues and Limitations|
|Math||none||• Downey 2|
|Containers I||none||reverse, due 9/25: Write a program that prints out its own command line arguments in reverse order from last to first.||• Downey 10 and 12|
|Containers II||none||• Downey 3 and 11|
|Flow||none||• Downey 5|
|Functions||10/11 exam||bits, due 10/16: Write a program that responds to a positive integer passed on the command line with the number of bits needed to express that number in binary. The number can be calculated either with a logarithm or by producing a binary representation and measuring its length.||• Downey 6|
|Object orientation||none||• Downey 18|
|Exceptions||none||• Aaron Maxwell's Exceptional Logging of Exceptions in Python|
|Files||none||stem, due 11/6: Write a program that shows all words in the dictionary /users/abrick/resources/american-english-insane starting with the first command line argument.||• Downey 14|
|Web service||none||• Marek Kubica's HOWTO Use Python in the web|
|Web client||none||• Mouse vs. Python's Python 101: An Intro to urllib|
|Regular expressions I||none||• A. M. Kuchling's Regular Expression HOWTO|
|Regular Expressions II||none||• Praveen Gollakota's Regular expressions in Python - the re module|
|Games||none||hangman, due 12/11: Implement a text-only version of hangman. The game should pick a random word from the dictionary using rules of your choosing. Give the user a series of chances to guess the letters in it. Show underscores for the letters not yet guessed. The game should end when either all the letters have been guessed (the user wins) or the user has made five incorrect guesses (the user loses).|
- Machtelt Garrels's Bash Guide for Beginners (2008, LDPL)
- Gareth Anderson's GNU/Linux Command-Line Tools Summary (2006, FDL)
- GNU Bash Reference Manual (2014, FDL)
- Course Outline of Record and SLOs
|Welcome & Server||8/13||• Course policies|
|Iteration & generation||8/20||• Jeff Knupp's Improve Your Python: 'yield' and Generators Explained|
|Community||8/27||newmodule, due 8/28: Find a module in the Python Standard Library that you've never seen before and write a skeleton useful program with it||• David Goodger's Idiomatic Python|
• Repositories related to the Python Programming language
• StackOverflow Tagged Questions: Python
• PEP 8
• The Hitchhiker's Guide to Python: The Community (2016)
• Trending Python projects
|Time||9/10||• Basic date and time types|
|Persistent stores||9/17||weather, due 9/18: Write a program that gets the current temperature at your location from the wunderground.com API.||• The ElementTree XML API|
• XML vulnerabilities
• Python object serialization
• PEP 3154: Pickle protocol version 4
• David Blank-Edelman's The 10-Minute XPath Tutorial - Automating System Administration with Perl
|Testing||10/8||• PEP 257 -- Docstring Conventions|
|(bye)||10/15 exam||converter, due 10/16: Write a program that converts areas from acres to square miles and vice versa. Use the Test Driven method (write the tests first) and accept only positive real numbers.|
|Functional programming||10/22||• A. M. Kuchling's Functional Programming HOWTO|
|Implementations||11/12||• David Beazley's Understanding the Python GIL|
• Nick Coghlan's Efficiently Exploiting Multiple Cores with Python
• Allison Kaptur's Python Bytecode: Fun With Dis (2013)
|Packages||12/3||pair, due 12/4: Create a web service and a matching client for login lookups on hills. The client should expect a command line argument and respond with any login names that contain that substring. Install your server and send in only the client program.||• Twisted Matrix's Python Packaging Is Good Now|
• PEP 427 -- The Wheel Binary Package Format 1.0
• PyPI Browse packages by category