ESAP Computer Science
Computer science, the study of computation, influences every aspect of our lives today in the information age. As such, it is an absolutely massive field spanning hardware, software, theory, and design, and it is growing every day. What is computer science? What are the core elements of computer science? And what are the essential lessons about computing that every one should know?
The computer science course of the Engineering Summer Academy at Penn (ESAP) is a three week crash course in the fundamentals of computer science. In this course, we will learn about the core skill shared by all computer scientists, computation thinking, and how to apply it towards computer programming, the primary way that we harness the power of computation. Along the way, we will survey the vast field of computer science and learn what it is like to pursue computer science as a profession. In addition to this, we will also explore how computation affects our lives and what what we need to understand about computing in order to be well-informed citizens of the information age.
People
- Instructor: Arvind Bhusnurmath, Email: bhusnur4 at seas dot upenn dot edu
- Course Staff: Sonali Deliwala, Elizabeth Powell, Karen Zheng, Hussein Khambalia, Brianna Karpowicz, Meri Kavtelishvili, Erik Mucollari, and Akhil Chandra.
Schedule
The class meets each day in Towne 217. The typical structure of each day of class is:
- 9:00 AM–11:30 AM: Session (A)
- 11:30 PM–1:00 PM: Lunch
- 1:00 PM–3:00 PM: Session (B)
- 3:00 PM–3:30 PM: Break
- 3:30 PM–5:00 PM: Session (C)
Sessions (A) and (B) will typically present new content. Session (C) will alternate between content presentations and time to work on the assigned labs for the day.
The day to day schedule is on Canvas.
Learning Goals
Even though ESAP lasts for only three weeks, the breadth of the course is comparable to Penn’s own introductory programming course, CIS 110. In particular, you will learn how to program in the small, i.e., write small programs to solve targeted tasks. In terms of programming, after this course, you will be able to:
- Use functions to decompose problems into manageable chunks and express solutions to problems in a clear, readable manner.
- Use recursion to capture the special case where a problem decomposes to a smaller version of itself.
- Predict the behavior of computer programs with a clear mental model of computation.
- Perform primitive computation using mathematical expressions.
- Model simple problems using primitive data types.
- Build up more complicated models of problems using basic aggregate data types (lists and records).
However, while programming is the primary activity of the course, it is not its sole learning goal. In addition to programming, you will also be able to:
- Articulate what computer science is and its role in the information age.
- Understand what a computer scientist does and what a typical computer scientist’s career path looks like.
- Assess whether computer science is a field of study that you would like to pursue in college.
Finally, as a college preparatory course, we also explicitly teach several “meta-skills” in this course—skills that will help you be a better college student. After this course, you will be set on the road to:
- Work effectively with a group to promote self-learning.
- Learn a new skill alone more effectively by understanding the value of targeted, focused practice.
Group Work
At least one session each day in this course will be conducted in groups, usually pairs randomly chosen for each day. While you will likely work slower with a partner than alone, you will (1) have a person to bounce ideas off of when you get stuck and (2) write higher quality code that is more correct than if you had written it alone. You are required to complete these labs with your assigned partner, no exceptions. If you are having difficulties working with your partner, please see a staff member to discuss the matter further.
Balancing Self-Learning and Getting Help
When learning how to program, you will inevitably get stuck, whether it is a nasty bug or you aren’t sure how to put together the concepts discussed in course together. An important skill to learn in this course is perseverance. In this context, perseverance is the ability to use what you currently know to systematically diagnose your problem and resolve the issue on your own. It may feel like you are wasting time going through this process, but in reality, these moments are the greatest learning opportunities in the course.
Of course, when you are starting out on your journey in computer science, you may not have the knowledge to persevere through a bug, and so it is natural to seek help. However, we want to ensure that every such question you have is a learning opportunity, so we require that if you do need help that you only consult your group or a course staff member. In particular, please do not discuss particulars of a lab or project solution with other groups as others may simply give you the solution to your problem rather than help you discover the solution for yourself.
The one thing we absolutely want to forbid for this course is usage of
anything other than the offical Python (or Python library) documentation
as an online resource. In particular, please do not just search online for
the
solution. If you are stuck, we are there to help. Trust us, you will learn far more through this process than through a readymade answer on the internet.
The official Python documentation is here. Since we are only going to be looking at a
small subset of Python, we will typically provide you a more
specific link to look at during the sessions.
Evaluation and Grades
This course features many labs and projects designed to help you become proficient at programming. In order to facilitate the course’s pace, we’ll employ a lightweight method for evaluating your work. After you have completed a lab or a project, you should hail down a member of the course staff to review your work. All members of your group must be present for the evaluation, no exceptions! The evaluation process should take approximately 5-10 minutes:
- In some cases, you will demonstrate your work, e.g., by running your program and briefly walking through your work with the staff member, explaining its design.
Afterwards, the staff member will evaluate the correctness and design of the work and grade it on the following three point scale.
- Not yet functional: fails major tests or otherwise has very obvious bugs.
- Functional but needs revisions: generally correct with minor bugs and/or stylistic problems with program design.
- Complete: correct both in terms of correctness and style.
In the first two cases, you should revise your work and re-present it to the same staff member to be reviewed again. In the third case, you are done—congratulations! Note that there are no strict deadlines in this course, but with the sheer amount of material we cover, you ought to finish the labs for any given day by the morning of the next class day. Projects(I might just call them HW) will frequently take you multiple days to complete and should be checked that weekend or at the beginning of the class the following week.
Your grade in this course is determined by the following scale:
- A: all labs and projects are marked complete.
- B: at most three labs/projects are marked functional; the remainder are complete.
- C: more than three labs/projects are marked functional; the remainder are complete.
- D: multiple labs are marked not yet functional; the remainder are functional or complete.
- F: there are unsubmitted pieces of work. You are expected to make an honest attempt for every single piece of work that is assigned to you in this course.
There are no intermediate grades, e.g., minus or plus grades. The criteria is purposefully binary because I expect everyone to complete every lab and project.