This describes Introduction to Computing, sometimes known as CSCI 1300, at the University of Colorado, Boulder. The course home page is actually a GitHub repository located here:
https://github.com/johnsogg/cs1300
Instructor: Gabe Johnson - [email protected]
TAs:
- Frank Di Natale - [email protected]
- Halley Profita - [email protected]
- Jaeheon Jeong - [email protected]
- Jing Zheng - [email protected]
- Mahnaz Roshanei - [email protected]
LAs:
- Matthias Sainz - [email protected]
- Noelle Renee Beaujon - [email protected]
- Roberto Kingsley - [email protected]
- Taylor Kohn - [email protected]
- Alec Thilenius - [email protected]
Office Hours are kept up-to-date on the Google Calendar
Where: Math 100 When: M-W-F 1:00--1:50pm
The purpose of this class is to give everybody the opportunity to learn how to program. This is not a "weed out" class where we run you through the computer science gauntlet, causing sleep deprivation or setting you off on strange mental marathons. (No guarantees about subsequent courses, however.)
No, the goal here is to give everybody the chance to learn how to program and decide if this is a profession/skill/avocation that they want to pursue. Computer programming is often seen as an impenetrable craft practiced exclusively by mad geniuses. I can assure you this is not the case.
Computer programming, and the more general idea of computational thinking, is rapidly becoming a basic literacy skill. By the end of this course (even if you don't continue with more advanced computer science courses) you should be able to pick up new languages, tools, technologies, and make them do tricks. You will also be able to have more intelligent, informed conversations with professional software engineers, interaction designers, and hackers.
There are three components to your final grade: Homeworks, tests, and the final project. Each is worth 1/3 of your grade. Homeworks are due and tests are given on Fridays (except for the one test immediately before Spring Break, proving I do have a heart). Check the schedule.
There are nine homework assignments. Each is 10 points, for a total of 90 points. Homeworks are due at 6pm. After they are late, you may only receive a maximum of 5 points. You may use RetroGrade to turn in your assignment as often as you like. Keep in mind that if you turn it in after it is due, it will cap your score at 5/10.
Many assignments can be completed in several languages, though you are only required to complete it in one. Happily, you can turn in assignments in the other available langauges and earn up to 10 extra credit points.
At the end of the semester, provided you received at least 5/10 on all homework assignments, extra credit will be aded to your total homework grade. This means it is possible to get well over 100% on your homework grade. This is meant to lure you into programming the same general idea in several languages to give you a sense of how the languages differ.
Collaboration on homework assignments is strongly encouraged. If you work together or find a web site with code that you learn from, you must indicate the relevant people and web sites in the source code you submit. Further, if you do work with other people, or find code on other web sites, you must type all the code yourself. Obviously I can't police copy/paste, so please realize this is for your own good. Trust me, I've been around the block once or twice.
Homework assignment descriptions and file downloads will appear in the course GitHub repository over time. I will try to make them available far in advance so you can work ahead if you like.
There are three tests that happen during normal lecture periods. They are all given before spring break. Anything that has been covered in class before the test is given is fair game. So this means if there was something tricky covered on the first test, it might make an appearance on the second or third test.
Tests are not collaborative. The Eye of Sauron will be watching. So will I. Do not cheat.
Specific information about tests will appear in the course GitHub repository about a week before they happen.
Programming is a practical art. The project gives you a chance to do something fun, interesting, epic, or all of the above. We realize that having 1/3 of your grade come at the very end is nerve-wracking. Therefore, grading for the project will be fairly lenient.
The only requirements for choosing a project are that it (1) must involve programming computers, and (2) must be awesome. That second part is really a matter of perspective, so make sure it is awesome to you.
Students who focus on C++ at the end of the course (by getting at least 5 points on all C++ assignments) are exempt from doing the project. They may still do a project if they choose, and will be considered extra credit.
Students who do the project will also turn in weekly summaries. The summaries count towards the homework score. This is separate from the project score, which is entirely based on a final submission on the day of the last lecture (May 3). Turn in summaries to RetroGrade. Upload a file called 'summary.txt' to the current week's assignment, and you will be given credit. You also have to send a copy to the group's TA, as discussed in class.
What to turn in: make an archive with all your materials. Everything in the archive should unpack into a directory. Inside the archive, include the following:
- Source code.
- A file 'group.txt' including:
- The name of the group
- Names and student IDs of people involved.
- A file 'introspection.txt' that describes (as a group):
- What you set off to achieve
- What you actually achieved
- What you learned
- What was the hardest aspect of the project
The final project will be submitted to both the group TA and to
Gabe. The subject line of this email must be [1300] YourProjectName
(obviously, edit to reflect your project's actual name). Send your
archive along as an attachment.
You might be interested to know that this is a thing. Remember to type your own homework assignments and attribute any collaborators or source web sites.
There is no required book for this course. Textbooks are absurdly expensive, and there are a number of high-quality introductory texts (and videos!) available online. Learning to program is best done by writing lots and lots of code. So: I will suggest readings from these books throughout the course, but none of it will sink in unless you write code to convince yourself that you know what you are doing.
There are probably thousands of programming languages. For any given task one language may be superior to another. One of the main goals for this class is that you learn how to learn programming languages. Therefore, we will program in not one, not two, but three languages: Python, Java, and C++. You are encouraged to take it upon yourself to learn six more. That would be awesome. But it isn't required.
The links below are all extensive texts on these languages. They are all freely available on the web, but in some cases you can give the author money if you want a nicer version.
Learn Python the Hard Way
:: http://learnpythonthehardway.org/
thenewboston's YouTube Python Tutorials (thanks Sean for the tip)
:: http://www.youtube.com/course?list=ECEA1FEF17E1E5C0DA
C++ Language Tutorial
:: http://www.cplusplus.com/doc/tutorial/
Learn C The Hard Way
:: http://c.learncodethehardway.org/
Think Java (How To Think Like A Computer Scientist)
:: http://greenteapress.com/thinkapjava/
The Command Line Crash Course
:: http://cli.learncodethehardway.org/
Sometimes I find interesting web sites or little toys that might be appealing to beginning CS students. Here are some refs to cool things.
Project Euler
:: http://projecteuler.net/ These are little puzzles that can be solved with math and little programming hacks. Challenge yourself! (Thanks to Will Holden for finding it.)
Here are the general topics we will cover in CS 1300:
-
What programming is (and is not) about
-
Programming languages, tools, IDEs, and application domains
-
Shell interaction (command line interfaces)
-
Programming communities and you
-
Syntax and Semantics
- Keywords
- Operators
- Operands
- Statements
- Variables
- Literals
-
Expression Evaluation
- Operator precedence
- Functions evaluate inline
-
Data types
- Bits and bytes
- Integers, shorts, longs
- Floating point numbers (float, double)
- Boolean
- Characters and strings
- Comparing, combining
-
Execution
- Loops
- Flow control (conditional execution)
-
Functions
- Writing and calling functions
- Function parameters and return values
- Relate high-level constructs to low-level code
-
Strings
- Make, manipulate and use character strings
- Keyboard-based interaction
-
Files
- Create
- Read
- Write
-
Data Structures and Algorithms
- How to use collections
- Use search algos to find specific or extreme members of collections
-
The Art of Defensive Programming
- Two programming activities: debugging, or bugging
- Top-down design
- Programming with pencils
- Collaboration
- Use common program plans
- Find and fix bugs
- Good programming style
If you qualify for accommodations because of a disability, please submit to me a letter from Disability Services in a timely manner so that your needs may be addressed. Disability Services determines accommodations based on documented disabilities. Contact: 303-492-8671, Willard 322, and http://www.Colorado.EDU/disabilityservices.
Disability Services' letters for students with disabilities indicate legally mandated reasonable accommodations. The syllabus statements and answers to Frequently Asked Questions can be found at http://www.colorado.edu/disabilityservices.
Campus policy regarding religious observances requires that faculty make every effort to reasonably and fairly deal with all students who, because of religious obligations, have conflicts with scheduled exams, assignments or required attendance. In this class, {{insert your procedures here}} See full details at http://www.colorado.edu/policies/fac_relig.html
Students and faculty each have responsibility for maintaining an appropriate learning environment. Those who fail to adhere to such behavioral standards may be subject to discipline. Professional courtesy and sensitivity are especially important with respect to individuals and topics dealing with differences of race, culture, religion, politics, sexual orientation, gender variance, and nationalities. Class rosters are provided to the instructor with the student's legal name. I will gladly honor your request to address you by an alternate name or gender pronoun. Please advise me of this preference early in the semester so that I may make appropriate changes to my records. See polices at http://www.colorado.edu/policies/classbehavior.html and at http://www.colorado.edu/studentaffairs/judicialaffairs/code.html#student_code.
All students of the University of Colorado at Boulder are responsible for knowing and adhering to the academic integrity policy of this institution. Violations of this policy may include: cheating, plagiarism, aid of academic dishonesty, fabrication, lying, bribery, and threatening behavior. All incidents of academic misconduct shall be reported to the Honor Code Council ([email protected]; 303-725-2273). Students who are found to be in violation of the academic integrity policy will be subject to both academic sanctions from the faculty member and non-academic sanctions (including but not limited to university probation, suspension, or expulsion). Other information on the Honor Code can be found at http://www.colorado.edu/policies/honor.html and at http://www.colorado.edu/academics/honorcode/.
The University of Colorado at Boulder policy on Discrimination and Harassment http://www.colorado.edu/policies/discrimination.html, the University of Colorado policy on Sexual Harassment and the University of Colorado policy on Amorous Relationships applies to all students, staff and faculty. Any student, staff or faculty member who believes s/he has been the subject of discrimination or harassment based upon race, color, national origin, sex, age, disability, religion, sexual orientation, or veteran status should contact the Office of Discrimination and Harassment (ODH) at 303-492-2127 or the Office of Judicial Affairs at 303-492-5550. Information about the ODH and the campus resources available to assist individuals regarding discrimination or harassment can be obtained at http://www.colorado.edu/odh