There are multiple lab sections; check with BUSI for times. You must attend the lab session you are assigned to. There are too many students to deal with anyone switching sections. If you do not attend your s
ection, you won't get credit for the lab.
We will use Arduino UNOs for some labs. We will have some for use in lab, but you might want to buy one of your own to play with outside of class. They really are pretty cool, and cheap. You can find them for anywhere from about $5 to about $20 on-line. You may be able to pick up an Arduino from someone who took the class in a prior semester (there are a couple of earlier models; the Duemilanove should be fine). Amazon is a good place to get them. You can also look at Sparkfun, Adafruit, and NKC. You can also get them at Unicorn Electronics. The people at Unicorn Electronics are really nice; if you want to have a successful career in computer science, you should get used to the idea of tinkering with stuff and trying things out, in your spare time -- and Unicorn has lots of fun stuff to tinker with. Unicorn is good.
Three exams (25% each). Two during the semester, plus a final.
Lab attendance and participation. 15%
In-class quizzes: 10% total
There will be about 11 lab sessions; you can miss one of these. After that, the 15% will be reduced by the portion of labs missed (for example: suppose there are in fact 11 labs, and you miss two -- the first one does not impact you, but the second reduces the grade by 1.5%). If you are physically present in the lab, but your mind is not there, you will not get credit -- the TAs are the final authority on if you've put in the effort or not.
In-class quizzes are similar; you can miss two, and then they start knocking down your grade. Quiz sheets will be handed out at the start of class, and then if you're paying attention, you might notice some of the quiz questions are going to get worked on the board. Fill in the quiz, and hand it in at the end of class. The quizzes will be "graded" simply for a name check, and to see if you were paying a bit of attention. There's a good chance that questions on quizzes will also show up on the exams.
Don't worry about the letter grade too much -- the objective is to learn some useful material, and build the skills you'll need for a career in computer science. At some point, you may want to get a job, which will almost certainly involve an interview. If you don't know the material thoroughly, your GPA won't help you at all. A high GPA won't help you on the job either. The only thing that really matters is what you can do, and how you do it. If the grade is all you're worried about, I'd suggest pursuing a degree at Thunderwood College.
All exams are closed book/closed notes. No calculators, cell phones, pagers, CB radios, and so on. Bring a pen or pencil. There will be scratch paper available.
The in-class quizzes will happen roughly once a week, but won't be announced in advance. There are morning and afternoon sessions; they may not have quizzes on the same day. So, make your life easy: show up to class, and be paying attention. Part of the training for a career in computer science is learning how to show up on time and get work done. Being in class with your brain turned on is part of this training. The course grade is based on showing up and doing the work; having a good excuse does not remove this requirement. If there is a disaster of some sort which prevents you from attending class, you can withdraw; the University has policies in place to handle this. Lab Attendance is Required. Show up on time to lab, ready to work. The TAs are under strict orders to not give credit to anyone who shows up late. Do not use your cell phones or surf the web during lab; the TAs are also under orders to not give credit to those not focused on the work. You may miss or fail to complete one lab for any reason; after this, your final grade starts to drop.. You will not get credit for attending another lab, and there are no make-ups. Be in the right place, at the right time, and get the work done. There will be some homework problems; you will bring these to lab to have them checked, and you will be able to have the TA help you if needed. If you have a laptop or tablet, use it for taking notes, not playing games. Bring paper and pencil/pen. Take notes during class, and pay attention. The lecture format of instruction has been going on for thousands of years, for good reason -- if you listen, pay attention, and take notes, you'll learn something. If you don't, you won't. Office hours are available if you're having trouble keeping up in class, but if you don't have any notes, you won't get much sympathy during office hours. The point of the class is to learn the material, and to develop the skills you will need for a successful career in computer science. If you're not interested in the material, please find another profession, and go do that.
Grade ranges are typically [90-100%] = [A- to A], [80-90%]=[B- to B+], [70-80%]=[C- to C+], and so on. You don't want to be in the D to F range (the F range may start at 65%). Depending on the actual scores, the percentage range may change slightly. Don't worry about grades; focus on the actual material. A letter on a piece of paper has no particular value, and won't get you very far in your career.
If I catch anyone cheating (or helping someone cheat), they will fail the course. The Watson School Academic Honesty code is in effect, and I will not hesitate to apply it. There are lots of people who are trying to get into Watson, and we simply don't have the space; if you indicate that you're not interested in being a good computer scientist, please understand that we will swap you out for someone else. There will not be make-up dates for labs. Get things done on time.
Binghamton Information Technology Services. There are many machines on campus you can log into and use. In most places, you'll use your PODS password. What services are available, and where they are, are always changing. For this class, we'll be using machines maintained by the CS department. You can also use Bingsuns.
To log in to a remote machine, you can use ssh on a Mac or Linux box, or a tool like putty on a PC. Get used to doing this stuff. You'll be doing a lot of it.
Labs, Week of August 26th In lab, you'll log into the Linux machines, and write a few simple C programs. There are lots of text editors; find one you like, and get comfortable with it. Be able to use others if you have to. Emacs is a great editor; hard to learn, but very very powerful. Vi is a popular editor as well; lots of good programmers used to use vi before they became smarter, and switched to using emacs. Gedit is probably the easiest "starter" editor.
Labs, Week of September 2nd In lab, we'll write a little more C code, and use some integer arrays. Nothing tricky; just making sure we get people up to speed on C syntax, and using Unix editing and development tools.
October 24th Chapter 6. Assembly language. Memory accesses, labels, branches, and more. Plus, there's a secret quiz.
A very cool site to check out is Compiler Explorer, which will show you the assembly language version of your high level code, using a bunch of different assembly languages!
October 26th Chapter 6. Assembly language -- pointers, accessing arrays. array.s and sum_array.s
Week of November 4thLab: function calls, passing arguments, and using the stack. We'll start with the Logisim TinyProc2 processor, and you can hack on the assembler to add support for the subtract instruction. This should be easy. Here's a little bit of TinyProc2 assembly code. Write some code, run it through the assembler, and then be amazed when you load the code into the Logisim processor at it's ability to do computations!
After that, some fun time with Arduinos -- fire up the Arduino development environment, and write code to blink lights and make music. Whatever you do, don't Google "hot line bling Arduino."
November 5th. Chapter 6, local variables, the stack.
November 7th. Chapter 6, more on the stack. The stack is important, right? How about some little code examples, that might also make for good exam questions?
LAB: Week of December 2nd One more time with QtSPIM, and some exercises to work on the stack, and on converting from C to MIPS assembly. IMPORTANT: the solution is here on the web; give a real effort to do this, before looking at the solution. If you understand things better, you'll get the answers right on the final exam. Just loading in the code and hitting "run" won't help you on the exam.
Take a look at lab10.c, and run ito on the lab machines. How it works, and what it does, should be easy to understand.
Now the part where you do some work: convert the C code into MIPS assembly, and get it to run under QtSPIM. It should not be too hard. Use the stack to send arguments to the functions (and not registers). The goal of this assignment is to get you more familiar with the stack.
Single step through the MIPS code, and make sure it does what you think it does.
Here is lab10.s, a solution to the lab. If you run into trouble, take a look. If you think you've figured it out, take a look. But seriously, give a good effort into doing this on your own. That's what will help you do well on the final.
December 3rd Another quick look at the stack and function calls. func.sfunc-c.c
December 5th A quick look at pointers, and how things work with the stack, and why pointers are a good thing even if they hurt your brain. If we have time, very briefly some chapter 8, memory systems.