Musings, Courses, & Projects by Rob Marano

CS 102 - Section M - Intro to Computer Science

General Course Information

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

Weekly course notes

Course Description

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).

Course Prerequisites

Being a Cooper Union freshman engineering student serves as the minimum prerequisite. No prior programming experience required. Bring yourself, intellectual hunger, and attention.

Course Structure/Method

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:

  1. Types, Operators, Expressions; Basic Input / Output (I/O)
  2. Control Flow
  3. Program Structure and Functions
  4. Arrays and Pointers (C only)
  5. Data Structures
  6. Advanced I/O using the command-line interface (CLI) on Linux (console & ncurses)
  7. Linux OS Interface (file manipulation)
  8. Data Processing Libraries for Python 3 (Matplotlib and Numpy)

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

Course Learning Outcomes

Upon successful completion of this course, each student will be able to:

  1. Understand and use a working C development environment using the Linux operating system. This includes an introduction to CUCC’s Linux-based computer systems, including filesystems, command-line interface (CLI), text editors (VIM), compiling and executing code, even those written across multiple code files.
  2. Think and design solutions algorithmically in code: Relate source code to execution in memory and in speed, as well as debugging, verification, and error checking.
  3. Create programs of reasonable complexity, at least about 100 lines of code.
  4. Demonstrate working understanding of the main C mechanisms for in-memory data structures, computation, network communication, and external storage; for example,
    • Text and numerical data representation, variables, data types, expressions
    • Conditional statements, loops, arrays, pointers
    • Scope of variables and functions
    • Data storage, file I/O
    • Human-computer interaction (HCI), i.e., CLI-based data input and output
  5. Understand and demonstrate fundamental programming mechanisms of Python 3; for example,
    • Data types and expressions
    • Text and numerical data representation, variables, data types, expressions
    • Conditional statements, loops, arrays, pointers
    • Scope of variables and functions
    • Data storage, file I/O
    • Human-computer interaction (HCI), i.e., printing and plotting data
    • Basic intro to common science/engineering libraries, e.g., Numpy and Matplotlib
  6. Collaborative programming using git with GitHub for source code and project documentation, and if time allows, simple Kanban agile management.

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.

Communication Policy

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.

Course Expectations

Class Preparation

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.

Attendance

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.

Materials

Reference Books

Required access to these:

These are some other resources not required:

Software

All software used during this course will be open source-based.

Assessment Strategy and Grading Policy

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  

Final Projects MVPs

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:

Your Coding Portfolio

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!

Research, tinker, automate so you have more time for the fun stuff of life!

Enjoy the course.