If you are interested in the computer information systems (CIS) major or computer applications minor, you should enroll in CIS 166.
Students majoring in the sciences or interested in a career that have some technical design or programming component should enroll in CMP 167.
They are the same course. CMP 230 was officially renumbered to be CMP 167 in Spring 2014. The course appears as CMP 167 in some official documents and will appear on transcripts and CUNYFirst with the new number as of Spring 2015.
No, you should not take both. We are happy you would like to join us for multiple semesters. However, the courses have significant overlap in the material covered. It would not be the best use of your time or the limited number of courses you can take for your undergraduate degree. In addition to being a bad use of your time, it looks terrible to future employers: they can (and do) read our course descriptions and syllabi.
If you are enjoying programming, join us for another course! You will learn new skills, and we would love to have you. We offer a second semester programming course in Java (CMP 326) which can be followed by an internet programming course (CMP 342) or data structures and algorithms course (CMP 338). Many students also enjoy our survey of the internet course which includes HTML, CSS, and JavaScript (CIS 228) and the various network courses.
Enrollment is via the CUNYFirst system. See the College Registrar for more details.
Maybe. It is possible to take courses at other CUNY campuses via the e-Permit system. Enrollment is via epermit.cuny.edu using your portal credentials. While colleges use a common system to request e-Permits, each department and each college has its own rules and preferences about allowing students to take a course at a different campus. You must apply via your home institution who may require you to take the equivalent course (albeit in another programming language) there. Also, host institutions often give their students priority in enrollment over e-Permit students. If you want to e-Permit a course, start the process early.
It takes about 24 hours from time of registration for you to be added to a course roster on Blackboard. If it has been more than a day and the course does not appear, check your course list in your CUNYFirst account to make sure that your registration has been processes and you are officially enrolled. If you are enrolled, contact Blackboard Support in the Information Technology Division.
If you are enrolled, contact Blackboard Support in the Information Technology Division. You can also visit the Help Desk in the Computer Center (first floor, Carman Hall) in person. They can reset passwords and help with simple Blackboard issues.
Yes. Attending class in an integral part of the learning process. Further, in-class quizzes are offered every class and make up a significant part of your final grade.
Most students spend 4-8 hours a week outside of class hours. Federal guidelines state that 12 credit hours is considered full time enrollment. Given a nominal 40 hour work week, this translates to an expected (40-12)/12 = 2 to 3 hours a week per credit hour of outside class time. As a 3 credit course, your expected time is about 6 to 9 hours of out-of-class work per week.
A way to manage the time commitment is to set aside a daily period of time to work on this course. Like learning a foreign language, learning a programming language is easier (and takes less work) if you work on it in smaller pieces on a regular basis. Set aside an hour a day for this course. During that hour, complete the upcoming programming assignment and review your course notes and recent labs to prepare for the in-class quizzes. If you finish that early, go on to the next program. We encourage students to work ahead on the programs!
Yes. We use Blackboard almost every class, and you will need regular access to submit the 50 programming assignments, view your grades, access information about the final exam, and receive announcements for the class.
No. Programming assignments must be submitted by the 11:59pm on the day due. To allow for emergencies that arise over the semester, we drop the lowest 3 grades from the Programming total.
We use Python Programming: An Introduction to Computer Science (second edition) by John Zelle (ISBN 1887902996). The approximate price is $40 (available on-line from Amazon & Powells). It is also available for $20 as an e-book.
The book is required for the course, and you may use the book during in-class Blackboard quizzes (but you may not share someone else's book during the quiz).
Python is freely available from python.org. For this course, we use Python 3 (any stable version). Note that there are large changes between Python 3 and previous versions, so, if your computer has Python 2.7 (included as the default in the MacIntosh OS X operating system), you will also need to add Python 3.
Yes. If you do not have a computer at home, there are computers available on-campus with Python.
Python 3 is available on computers in:
Yes! The college offers free peer tutoring for introductory programming in Gillet 222. The hours are usually Monday-Thursday afternoons and early evenings and Saturday afternoons. In addition, the college offers regular workshops in academic skills such as test taking and time management.
Yes, all instructors are knowledgable in the content for both classes, and you are welcome and encouraged to attend any of office hours (see class pages for a listing of current office hours).
Yes. Priority for seating and computer space is given to students enrolled in the section, but if you would like to attend another section or attend multiple sections to hear the material presented in different ways, you are welcome. If you do attend multiple sections, you will only be able to take the in-class quiz once. Our goal is that you learn the material (and then get a paid internship, an awesome job, and hire future Lehman students as interns). If attending more often helps, we encourage you to do so.
On Blackboard, the column "Current Grade" gives a running total of your grade for the course. It includes all programming assignments and in-class quizzes that have been graded to date.
No. As suggested by the name, only in-class quizzes taken in class count towards your grade. Quizzes taken outside of class will be sanctioned with a grade of 0 and reported to the Office of Student Affairs. Repeated quizzes taken outside of class will result in a failing grade as well as sanctions, as outlined in the CUNY Academic Integrity Policy.
They don't. The programming assignments contribute to your final grade in three ways. First, submitting assignments to Blackboard count 15%. We assess if you have mastered the material on the assignments via written programming in-class quizzes. About a third of the in-class quizzes are directly based on the submitted assignments and count for 16% of your grade. Additionally, about half of the questions on the final exam are directly based on submitted assignments and contribute another 17% to your overall course grade.
Yes. All undergraduate courses at Lehman College are required to have final examinations offered during finals week.
The final examination is cumulative and passing it shows that you have mastered all of the learning objectives of the course.
An essential component to programming and technical work is presenting and communicating ideas concisely to others (without the use of a search engine or the Python shell). The communicating of technical information is so important to many companies that they include a paper or oral quiz (no computer allowed) on key concepts during the interview. Companies hire you for your analytic reasoning and programming skills, not your ability to google answers (since they want employees who can also solve novel problems whose solutions aren't already available via a search engine). Some go beyond just key concepts and ask for you to sketch solutions for novel questions and situations during the interview (the most famous is the Google engineering interview).
While having a combination of oral and written examinations would be a better preparation for communicating technical information (and better for future jobs and job interviews), many beginning students find oral exams terrifying. As such, we focus just on written exams and include (ungraded) group work in class to provide practice in presenting ideas to others. In future courses, class presentations are incorporated to help with fluency in communicating challenging material.
The final examination times are announced by the Registrar's Office. We allow students to take the exam during any of the time periods assigned to our class. Those times are listed at the bottom of the course pages. We will also send out a survey about 3 weeks before finals week to find out you preferred time (so that we can ensure enough desks and space for everyone at each time).
No. We are happy that you are doing well in your other courses, but we are required to treat all students equally and base your grade on the work submitted for this course.
Over the last decade, the programming language used in introductory programming nationwide has moved from primarily Java and C/C++ to Python. Python is now the most popular introductory teaching language at top U.S. universities. Python is an excellent first programming language (for more details, see here, here, and here).
The standard argument of why teach introductory programming in Python is the simplicity of the syntax. If you want to write a program to say "Hello World", it is:
In Python: | In Java: |
---|---|
print("Hello World") |
public class Hello{ public static void main(String[] args){ System.out.println("Hello World"); } } |
For both languages, a typo anywhere will keeps the program from running. In Python, there are very few places to make errors. But, in Java, the required syntax, for even this short example, can easily overwhelm the novice programmer, often making the focus on syntax instead of analytic reasoning and problem solving.
We moved from teaching Java to teaching Python in Spring 2011 (we still use Java for the second and third semester courses in the programming sequence). Our introductory programming courses serve both future computing majors, as well as students majoring in mathematics and the sciences. The sciences and our interdisciplinary graphical design program (joint between art and computer science) wanted their students to learn Python, since it is easy to use and applicable to future courses in those majors. Since there was wide agreement that computing majors should learn more than one programming language, we now start with Python (for all the reasons linked to above) and move into Java for the second and third semester courses in the programming sequence (taken primarily by computer science majors and minors).
Another reason: learning Python will increase the diversity of jobs for which you can do. It is a key language for the some of the highest paid tech fields: data analytics and machine learning.
The traditional way to teach introductory programming is to give 10 long assignments for the semester, long enough so that students often 'pull all-nighters' to finish, to simulate what programming would be like at a start-up company. While solving authentic challenges with minimal guidance does mimic some jobs (though most employers prefer well-rested employees due to the drop-off in cognitive performance with lack of sleep), students (who have not been exposed to programming previously) master the analytic reasoning and language skills faster and in more depth when given strong instructional guidance (see GeorgiaTech Professor Mark Guzdial's CACM posts, starting with this one).
These studies apply across STEM (Science, Technology, Engineering, & Mathematics): for novice learners, discovery-based learning is not as effective as strongly guided approaches. The story changes for students with previous experience: if you have programmed before, having longer, more challenging programs are fine. But, unlike many college-level programming courses, we assume no previous programming experience. As such, we have designed the course to build the skills of beginners by focusing on smaller challenges throughout the semester.
Having in-class quizzes every day are very effective at improving retention as well as grades for students in STEM courses (overview, details). Grades improved the most for students who were first generation of their family to attend college. The study did not examine why this change was so effective, but the authors hypothesize that students attended class more and kept up with the material (instead of just cramming to learn the material before midterms). Testing has been shown to be a more effective way to master material than just reviewing; by actively using knowledge on an exam, your brain's ability to retain and use that knowledge again increases (details).
In this course, in-class quizzes have made a large increase in the number of students passing the course. It had small, but not significant, effect on the number of students earning A's, suggesting that this technique has less effect on students that already have strong study skills (they do well either way).
Puzzling out questions on novel material guides how you learn that material and increases mastery. While it seems counter-intuitive, pre-testing seems to give a "mental scaffold" to store the material when learned in the future, that is "pretesting serves to prime the brain, predisposing it to absorb new information". We do not grade your pre-tests. By adding these to the structure of the class, our goal is to give students who have not previously programmed similar (though not as deep) advantages as students who have already seen the concepts.
Active learning increases student performance. Instead of passively listening or watching someone else write or type programs, it is much more effective to have active discussions, work together in pairs or small groups, and other activities that emphasize higher-order learning. It also provides an excellent avenue to practice explaining technical ideas to others-- a skill you will need for future STEM courses and future jobs in technical fields.