YSP Course 2012
Course Title: Essentials of Scientific Computing

Location: Dirac Science Library 152 (DSL152)

Schedule: MWF 8:30am-10:50pm

Website: http://www.mathnathan.com

Instructor: Nathan Crock

Email: mathnathan@gmail.com

Phone: (727) 460-6353

Office Hours: MWF 11:00am-1:00pm or by appointment

Location: Visualization Lab, Department of Scientific Computing

Introduction

This course will focus on instilling the core principles of computing into its students. Rather than approach the programming structure from a theoretical level, we will learn programming through an immersive and intuitive framework. Even from the very first day of class we will get our hands dirty, and after understanding the purpose behind our programs we will pull the curtains back and tackle the details involved in the examples. The C++ programming language will be used to explore the fundamentals behind computer science and in applying them to scientific programming. The primary objective in this course will be to learn the underlying principles involved in programming in an effort to understand how to learn on your own - learning new languages, new libraries, new algorithms, etc. We want you to see the big picture.

This will be a very dynamic course. We will have certain concepts to cover each lesson, and examples to help illustrate them - but from there we will just play with code! After all, we learn the best when we're having fun.

Pair Programming

From the first day of class we will be split into pairs. During our play time the class will break into these pairs, and you will develop your programs together as a team. Pair programming has been shown to be very helpful in introductory courses and for beginner programmers. Not only will you work to make programs as a team, but your grades will also be influenced by your teamwork.

Textbook

THE INTERNET (most anything you'll want to know is out there)

Class Structure

Each class will consist of intermittent lecturing and hands-on programming. Some lectures will come from me, and some will come from you. Sometimes you will work on programs with your partner, and sometimes we'll all work together as a class to make a program. There are concepts that I will ensure we cover each lesson, but beyond that it is my hope that our adventure in learning scientific programming will be very organic.

Homeworks/Projects/Stuff to Grade

The point of this course is for you all to learn! Unfortunately you need to receive a grade at the end of the semester, so this is how it will be done. Instead of everyone doing the same assignments/homeworks and turning them in some day before midnight, we're going to do something much more interesting, something that matters. Everyone in the class will have a blog - if you already have one, great, if not we'll get you set up with one - and your assignments will be to write tutorials on key tools, skills, and components critical to scientific computing. You will complete your tutorials as a team, you and your pair programmer will jointly create a full tutorial between both of your blogs. How you do it is up to you, but ideally you will split the material into components and each member will write sections on their own blog, and link to and from each other's site. Have you ever been at home studying and after mulling over a concept you finally look at it in the right light and BAM! It just makes sense to you? This is your chance to save everyone the struggle you went through by sharing your experiences and telling the world what worked for you. You never know how many people you will help! I will be giving each team a list of bullet points that your tutorials must cover to help you in your educational design. How does this fit into the rest of the course? Everyone else will be responsible to learn the material covered by all of the other team's tutorials! Each consecutive week everything each team worked on will all become required to move on to the new material, it will all fit together! I will keep a compiled list of all the teams tutorials on the course website for you to view during the course, and for you to share with your friends, family, and possible employers. I will keep it up for as long as I own a server so we can share all of our work with the world and contribute to its technological development.

Exams

There will be no written exams. There will however be one oral/practical exam. You will be expected to answer programming questions, and give examples/explanations on the fly to support your answers. The exams will all be 5-10 minutes scheduled individually, throughout one class period at the end of the course. You will come to the classroom at your scheduled time, you will have the exam in front of me and any other faculty who wish to participate, and then you will leave. There will be no other students in the class. You will have a list of concepts that you will be expected to demonstrate proficiency in, and after the exam you will receive a detailed review of your performance and your grade based on a uniform grading scale.

Learning Objectives

By the end of the course we will expect our students to have proficiency in the following areas:

  • Datatypes, variables, operators
  • Logic structures
  • Pointers, dynamic memory
  • Functions
  • Library utilization, linking
  • Researching skills
  • Working in teams

They will also be familiar with the following programming tools and skills:

  • Navigating the shell, or DOS
  • Text editors, Vim
  • Build system, Make, CMake
  • Classes, object oriented design
  • Integrated Development Environments
  • Scripting in the Shell

Grading

Your final grade will be calculated as follows:

Tutorials: 50%

Practical Examination: 25%

Class Participation: 15%

Teammate Review: 10%

How will your tutorials be graded? It will be a weighted average between the rest of the teams' grades and my own. My grade will be based on the rubrics which I give you, and the rest of the teams' grades will be based on how useful they found your tutorial. The teams which get the highest scores each week will get first choice (in descending order) as to which topic they cover the next week.

Class participation will be graded based on your attendance, and how involved you are in the class discussions.

Your teammate's review will be based on their opinion of your contribution to the in class programming assignments, and your involvement in the design/construction of your tutorials.

Your letter grade will be decided according to this scale:

  • 100 - 93.0 - A
  • 92.9 - 90.0 - A-
  • 89.9 - 87.0 - B+
  • 86.9 - 83.0 - B
  • 82.9 - 80.0 - B-
  • 79.9 - 77.0 - C+
  • 76.9 - 73.0 - C
  • 72.9 - 70.0 - C-
  • 69.9 - 67.0 - D+
  • 66.9 - 63.0 - D
  • 62.9 - 60.0 - D-
  • 59.9 - 0 - F

Note: I'm the president of the class and I reserve to right to veto any final grades.