Instructor: Prof. Rob Marano
Email: rob@cooper.edu
Semester of the course: Fall 2022
Dates of the course: 2 SEP 2022 – 16 DEC 2022 (15 sessions)
Room: 427 in NAB
Concepts in computer science are presented in the context of programming in C, with an introduction to Python. Topics include data representation, variables, conditional statements, loops, functions, data structures, pointers. Multiple programming projects are assigned, as well as homeworks and quizzes.
Problem solving, “algorithmic thinking” and proper methodologies for software development are emphasized throughout the course. This course serves as a prerequisite for ECE264 “Data Structures and Algorithms I” and prepares the student to develop and use software to solve computational problems in their respective majors.
2 credits. 2 hours per week (30 total hours).
Being a Cooper Union freshman engineering student serves as the minimum prerequisite. No prior programming experience required. Bring yourself, intellectual hunger, and attention.
Lectures and Live Coding Labs: This class meets in person (mostly on Fridays) on 09/02, 09/09, 09/16, 09/23, 09/30, 10/07, 10/14, 10/28, 11/04, 11/11, 11/18, 11/22, 12/02, 12/07, and 12/16, for a total of 15 sessions. Note: 10/21 we do not meet. The class meets from 3:00-5:00pm on all days. Office hours are held Fridays 5:00-6:00pm in the Engineering Adjunct’s Office on the 2nd floor of the NAB at 41 Cooper Square.
The course will use a comparative approach to learn the full basics of the C programming language as well as fundamentals of Python 3 on the Linux operating system. The following topic areas will be used in this approach:
Anticipated Schedule
Dates | Topic |
---|---|
9/2 | Tutorial Introduction |
9/9, 9/16 | Types, Operators, Expressions |
9/23, 9/30 | Control Flow |
10/7, 10/14 | Program Structure & Functions |
10/28, 11/4 | Arrays and Pointers |
11/11, 11/18 | Data Structures; Python Numpy & Matplotlib |
11,22, 12/21 | Advanced I/O; Python Numpy & Matplotlib |
12/7 | Linux OS Interface |
Upon successful completion of this course, each student will be able to:
Putting in the effort, you will develop the ability to identify, formulate and solve complex engineering problems by applying principles of engineering, science and mathematics by learning to put into practice computing tools and the foundational principles of computer science. You will learn how to apply engineering design to produce solutions that meet specified needs with consideration of public health, safety as well as economic factors by being able to write computer programs that achieve a certain goals (as opposed to, e.g., simply describing what a given segment of code accomplishes) and adjust for considerations of the quality of the solution, e.g., memory, speed, programming style (as being integral to the design of the program) – because another human will almost certainly extend and maintain the solution long after your contribution. Finally, you will learn how to develop and conduct appropriate experimentation, analysis and intepretation of resulting data, and use engineering judgment to draw the appropriate conclusions through the use of code testing and verification, as well as data visualization via plotting and other forms of formatted output for the user.
The best way to contact me is via email then by instant messaging on Microsoft Teams. I will do my best to respond within 24 hours. Communication and participation in class is not only encouraged, but required. I seek to understand your individual understanding of the material each class. Advocate for yourself, early and often.
Each session will consist of two components: discussion and in-class lab work on your computers, using your virtual environment. Come prepared with your laptop and the Linux environment as described in this CS-102 Development Environment repository on GitHub. Ensure you have access to cs102.cooper.edu via the instructions Jacob Koziej sent via email to each of you.
Each class discussion consists of a mix of lectures, programming examples, and question-driven group analysis of one or more large programming problems. Lab will consist of either group or individual work on exercises or projects. Questions arising during lab may be used to fuel additional discussion as time permits.
Success as a student begins with attendance. Class time serves not only for learning new concepts and skills but also for practicing what you have learned with active feedback. Some assignments and demos may be completed in class, but practice and study are required outside of class. Students are expected to attend classes regularly, arrive on time, and participate. I take attendance during every session, and it forms part of your grade. Students are encouraged to e-mail me when they are absent. Students are responsible for all academic work missed as a result of absences. It is at my discretion to work with students outside of class time in order to make-up any missed work.
Required access to these:
These are some other resources not required:
All software used during this course will be open source-based.
All assignments must be completed by the end of this course in order to receive at least a passing grade. Programming assignments, referred to as “HW{1..6}”, will be handed-in individually via your respective GitHub course respository that you will create and share with the professor. Quizzes will be held at the end of class as scheduled. On those days, offices hours will be canceled unless otherwise noted. Final projects will be handed-in via another GitHub respository per project. We will discuss in class how to create each repository.
Assessment | Title | Points | Given On | Due Date | Link to Solution |
---|---|---|---|---|---|
1 | HW 1 | 10 | 9/12 | 9/19 @ 11:59:59pm ET | Assignment 1 |
2 | HW 2 | 10 | 9/20 | 9/30 @ 11:59:59pm ET | |
3 | HW 3 | 10 | 10/4 | 10/14 @ 11:59:59pm ET | |
4 | Quiz 1 | 35 | - | 10/7 | |
5 | HW 4 | 10 | 10/18 | 11/4 @ 11:59:59pm ET | |
6 | HW 5 | 10 | 11/8 | 11/18 @ 11:59:59pm ET | |
7 | Quiz 2 | 35 | - | 11/22 | |
8 | HW 6 | 10 | 11/29 | 12/2 @ 11:59:59pm ET | |
9 | Python Final Mini-Project | 10 | - | 12/16 in class | |
10 | C Final Project | 60 | - | 12/16 in class |
Two final projects, one for C and one for Python, the former will be more complex in size and scope than the latter. The following items pertain only to the final C project:
The following expectations pertain to the final Python project:
Before you leave for break, ensure that you clean up your personal GitHub respository so that you can showcase the work you have developed. Like an artist, you know have a portfolio of software you have designed and implemented. No matter what you decide in your career, work and life is better through coding!
Enjoy the course.