Course Syllabus

Please note that some links on the course syllabus page are only accessible to registered students.



 Hello! My name is Tim Alcon and I will be your instructor for CS 161 - Introduction to Computer Science I. Computer science is a fascinating field, full of interesting problems to work on, and it certainly doesn't hurt that computing skills are in high demand. Whatever your particular set of motivations for taking this course, it is my hope that you will gain knowledge and skills that will help you progress toward your goals.

There's a quote that "Computer science is no more about computers than astronomy is about telescopes." It can seem to those not familiar with computer science that it's only about how to program computers, but that's not the case. Computer science was being done before computers ever existed (Ada Lovelace and Alan Turing are notable examples). It spans a whole plethora of sub-disciplines including: bioinformatics, cryptography, computer networking, computer security, software development, robotics, artificial intelligence, algorithm analysis, database design, computer graphics, natural language processing, and cognitive science, among others. So what exactly do all these areas have in common? The key idea linking them is that of an algorithm. I'll let you look up the technical definition of "algorithm," but in essence, it's a pattern for how to manipulate and transform information, which is a common concern for each of those sub-disciplines. In fact the word for "computer science" in many other languages transliterates as "informatics," or the science of information.

So if computer science isn't just about programming computers, why is it that you start with a course on that topic? Because it gives you a language in which to express algorithms. Algorithms are not tied to any specific form of expression, but for a computer to read and execute our algorithms, we must use a mathematically precise grammar and syntax, i.e. a computer language. Such a language is also useful because it forces us to be very precise about how we want to manipulate or transform the relevant information - there is no room for ambiguity. This course currently happens to use C++, but it's not really about learning C++. It's about learning to think algorithmically. Since C++ is the vehicle we're using, you will naturally be learning that along the way, but once you get the hang of thinking algorithmically, programming in other computer languages will (mostly) just be a matter of learning some new syntax and conventions.

Computer science is a challenging discipline - it can be hard for many people to adjust to the highly analytical and detail-oriented style of thinking that is required - but I believe it's something almost anyone can learn given sufficient interest, dedication and practice. Do not be embarrassed to ask lots of questions along the way - that's what I and the TAs and tutors are here for.


Tim Alcon (instructor):

Office hours on Slack: TBD

TA assignments and contact information are provided in an announcement at the beginning of the term.

Piazza (a Q&A forum for help from the instructor and other students)

Slack (a forum for more informal interaction with other students, and also for office hours)


Ecampus Student Resources



Here are some tutorials to help introduce you to the tools we'll be using in this course.  Please let me know if you have any additional questions about any of these topics:


Canvas (which you are in currently) is the course management software used for this course, and contains most of the instructional material besides the textbook.  When searching for help on how to use Canvas, it helps to include the term "instructure" which is the name of the company that makes Canvas.

Canvas Basics Guide


TEACH is the website where you enable your ENGR account.  On the TEACH page there should be a link for you to "Create a new account (Enable your Engineering recouces)".   The login for your ENGR account is the same as your ONID login.


The Ecampus Exams and Proctoring Form is where you will tell us who your proctor will be for the exams.  Please see the module titled Proctored Exam Information.


PuTTY and Terminal are terminal emulators – they provide a window where you will interact with the OSU server ("flip"), using a command-line interface.  Terminal comes included on Macs. On Windows, you'll need to download PuTTY.  Note that where you are doing your work is on the school server ("flip") - a terminal emulator just connects you to that server.  After logging in (as demonstrated in the videos below), it will ask you for "terminal type".  The first time it asks, you can just hit <enter>.  If you already tried something else, then you can enter "xterm".


PuTTY tutorial video



Mac Terminal tutorial video 


Linux is the operating system used on flip (the school server you'll be using).  There are a lot of Linux commands, but the most important ones for you right now are: ls (list current directory), cd (change directory), mkdir (make a new directory), mv (move or rename a file), cp (copy a file), g++ (compile C++ programs), vim (a text editor you can use to write your C++ source files).

Guide to some common commands


FileZilla and Cyberduck are utilities you can use to transfer files between your computer and flip. You'll need to download and install whichever one you decide to use.


FileZilla tutorial 


Code editors provide an environment in which you can create and edit computer programs.   There are two main types: command-line editors and IDEs.

A command-line text editor such as vim or nano will let you edit files on the school server.   Even if you do much of your coding in an IDE, it's very useful to be able to use a command-line editor.  For one thing, it allows you to do some final debugging or other edits without having to transfer files back and forth.  Assignment 1 will have you use a command-line editor to create a simple C++ program.  If you enter "vimtutor" at the command-line on flip, it will start up a vim tutorial (in vim itself) that will help you learn the basics.  Also see this gamified tutorial.

An IDE provides a (for most people) more familiar graphical interface.  I recommend not using an IDE for this course, because since it takes care of certain details for you, you may not remember those details when you need to.  If you decide to use an IDE then for those of you with Windows, I recommend Visual Studio, which students can download free via DreamSpark.  For those of you with a Mac, I recommend Xcode, which you can install for free.   Both Visual Studio and Xcode allow you to compile and run your code in addition to editing it, however you must test your code on the school server ("flip").  As the syllabus mentions, C++ code that works in one environment may not work in a different environment.  Two common gotchas to watch out for are:

  • When creating a new project in Visual Studio make sure you select "Empty Project", not "Win32 Console Application".
  • Both Visual Studio and Xcode will sometimes automatically initialize the value of a variable or array (you'll learn what this means soon).  If you rely on that being done for you, then your code may fail when run on the school server.

XCode is available free through Apple's app store. 

Visual Studio is available to you free through Microsoft Azure.


Mimir is where you will submit your coding assignments.  You can login to Mimir by clicking on the link in the Start Here module titled "Mimir One-Click Login App".  From there, selecting an assignment and submitting your code should be straightforward.  Once you've submitted it, tests will automatically be run against it, typically some number of tests that are "hidden" and one that isn't.  For the test that isn't hidden, you'll be told whether your code passed or failed, and you can click on the gear icon for information about what went wrong, if anything.  The test that isn't hidden is provided so you can verify that you submitted your code correctly, that it compiles, and that there aren't any formatting issues.  Since the number of submissions is limited, make sure you don't waste them.  Your score for an assignment is based on how many tests your code passes.  If your code meets all of the assignment specifications, it will pass all of the tests.  If your code doesn't pass a test, then you will not receive the points for that test - partly because your code didn't meet the specification(s) being tested, and partly because you didn't test your code sufficiently to reveal the error.


Piazza is a Q&A discussion forum.  This is the place to post if you need an official answer on something.  You can access Piazza as a separate website or as a tool within Canvas.  You can enroll yourself in Piazza by following the link in the left sidebar.


Slack is a forum for more informal interaction with your fellow students.  It is also where TAs and I will hold office hours. Please connect to the Workspace - this is the central connection point for all OSU-oriented slack workspaces. You should then select the "Sign in with ONID" and be able to connect.

Here's how we'll use the Class Slack Workspace:

  • #announcements 
    The landing channel when you first join. We will use this for announcements specific to Slack.
  • #random
    Random chat among course members (students and teachers)
  • #general (You will have to join this channel manually to really get anything out of Slack)
    Class-specific discussions, office hours, etc.

On Slack you can:

  • Create your own channels
    For group-work or study-groups you can create your own (private or public) channels!
  • Create ad-hoc teleconference sessions 
    Click the "phone" icon next to the channel title and invite people to join you!
  • Engage with the TAs and Instructor during office hours
  • Engage with each other

OSU's primary motivation in providing this Slack experience is to give you, the student, a built-in mechanism for building relationships and collaborations among yourselves.


Course Summary:

Date Details Due