Home

Much of the content below is historical, with some links that do not work. For archived reference material (whose links mostly do work!) see the WayBackMachine version of Reed's website.

See the topic outlines used in class for C++ Notes, Java Notes, and A Brief History of CS

Integrated Development Environments

To write code you need to use some development environment.

For recommendations on programming environments to use see here.

Alternatively if you want to program "in the cloud" without any installation, see here.

Getting Started

      1. Review of course web pages, including first reading assignment (for quiz!), first CodeLab assignment, first program.

      2. Modes of Learning: We remember:

10% of what we read (e.g. our text book)

20% of what we hear (eyes closed, listening in class)

30% of what we see (overhead or chalkboard)

50% of what we see and hear (lecture w/board

70% of what we discuss with others (class discussion, lab groups)

80% of what we experience personally (programming assignments)

90% of what we teach to someone else (lab groups)

-William Glasser

How much do you want to remember?

What's the Point of Learning CS, anyway?

Computer are increasingly being used to do things people used to do, freeing up people for other tasks. (e.g. measuring, counting, translating, communicating, conveying.)

Consider the following example (taken from Harvard's course cs50.) How can we efficiently count students in the room?

      • Simple way: Have one person stand in front of the lecture hall and point to each student once,saying “1, 2, 3, …” until each student has been counted.

      • This will take as many steps as there are students, say, 64

      • We can do better by counting in twos in just 32 steps. But even if we count by threes or fours,the number of steps will always be proportional to the number of students

      • Can we employ an algorithm that increases in speed as we increase the number of students?

We can count the number of students in the room by having each individual do the following:

1. Stand up

2. Assign yourself the number 1

3. Find someone that is standing up.

4. Add your number to that person’s number. The total is your new number.

5. One of you sit down.

6. If you are still standing, go back to step 3.

7. Algorithm finishes when there is one person standing. Her number is the number of students in the class.

Employing this algorithm, we might find that there are about 64 students in the room. How efficient is this?

      1. If there were 2 people, it would take one iteration of the above algorithm to count

      2. If there were 4 people, it would take two iterations

      3. Similarly, for n people, it would take log2n iterations

      4. For 64 people, it should take 6 iterations. Another way to think about it is that each “round” cuts the number of students still standing in half. So if there are about 64 students, it will require 6 rounds because we can halve 64 six times.

      5. If we graph this, we see that it takes a relatively long time for small numbers of students, but as the number of students grows, the algorithm seems to speed up

      6. For 4 billion students, it would take just 32 iterations!

      7. Graphing this looks like:

UNIX Reference

Free Books

For UIC students the library has free access to the online Safari CS books which includes Java and C++ programming books. I suggest:

For everyone:

Programming in C++ by Eric Roberts (2012 edition)

Also see the stackoverflow.com list of freely available programming books. (Thanks to George Lamperis) I suggest:

C: The C Book, by Banahan et. al.

C++: Thinking in C++, by Bruce Eckel

Java: Thinking in Java, by Bruce Eckel; How to Think Like a Computer Scientist, by Allen B. Downey

Online Courses and Tutorials

Courses

  • Coursera CS101 by Nick Parlante (Standford). Introduction to Computers for those who start with zero knowledge. Some programming in the browser using Javascript.

  • Udacity CS101 by Dave Evans (Virginia Tech). Select the "Start Free Courseware" button. Learn Python to build your own web crawler.

  • edX CS50X by David Malan (Harvard). Programming in C, PHP and Javascript. See also Malan's Extension School Intensive Introduction to Computer Science

  • edX 6.00.1x by John Guttag (MIT). Python Programming

See also the OpenCourseWare extensive list of online CS courses.

Tutorials

CodeAcademy.com (as of Oct 2012 has Ruby, Python, Javascript, Web development)

CodingBat.com (as of Oct 2012 has Java and Python, by Nick Parlante at Stanford)

Testing

Knowledge in software testing is one of the skills many employers ask for from graduating students. What does this mean in practical terms? Explore this on the testing page, learning about equivalency and boundary tests, with a hands-on exercise to test your skills.

Other

      • ASCII table, and another version

      • You may be interested in coding standards used at Bell Labs.

      • Consider using the following editors: Nedit (or XEmacs), or pico. Also check out the ddd debugger.

      • You can download the SSH program from the UIC ACCC pages (but I think you have to be at an on-campus machine). Another alternative for secure file transfer is Filezilla (under host use sftp://ernie.cs.uic.edu, and use port 22). Look here for PuTTY (secure terminal window, and command-line file transfer using PsFTP). Get SecureCRT and SecureFx through the university's site license through the e-sales software site (netid login required).

      • Consider using a Concept Map (pdf) to represent what you learn

      • Bits and Bytes are combined in internal binary representations of numbers and characters.