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

Schedule

The class meets each day in Towne 217. The typical structure of each day of class is:

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:

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:

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:

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:

Afterwards, the staff member will evaluate the correctness and design of the work and grade it on the following three point scale.

  1. Not yet functional: fails major tests or otherwise has very obvious bugs.
  2. Functional but needs revisions: generally correct with minor bugs and/or stylistic problems with program design.
  3. 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:

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.