
Frequently asked questions about CSCI-4380
==========================================

**Instructor**: Sibel Adali

I put together some answers to common questions regarding
CSCI-4380 Database Sytems class in general. 

What are the prerequisites?
----------------------------

This is an upper level Computer Science course. As result, it assumes
a level of academic maturity appropriate for a student in their junior
or senior year. It requires a good working knowledge of data
structures and algorithms, and proficiency in Python or C++
(equivalent of CSCI 2300 Algorithms).

What book will we use?
----------------------

Database Systems: The Complete Book (2nd Edition), by Hector
Garcia-Molina, Jeffrey D. Ullman and Jennifer Widom, ISBN
978-0131873254. Note that this book is recommended, but not
required. You can use any recent database book to study the main
concepts. 


What are the basic skills I will learn in this class?
------------------------------------------------------

Database Systems will teach you a mix of three basic skills. First you
will learn about data modeling which will require some software design
principles and some knowledge of logic.

Then, you will learn programming. The majority of programming will be
SQL, which you will learn from scratch. There will be at least one
procedural programming assignment. The language for this assignment is
not yet decided, but if a high level programming language is required,
I will likely give an option between Python and C++. You must be
comfortable with programming to be in this class.

The final part of this class will go into more advanced concepts of
how the database management systems are designed. We will learn
algorithms behind the scenes and how these impact the design and
implementation of databases.

What will be the course format?
-------------------------------

You can expect regular homeworks, some programming, some involving
paper and pencil assignments. There will be a lot of discussion of
pros and cons of different design choices. This is a class that brings
together many different concepts from design, implementation to
storage options, and forces you to think how they all fit together.

Expect to use Postgresql extensively, work with multiple possibly
large and real data sets. Such data sets of come with lots of special
cases which shows you what DB programming is like in real life.

In my experience, students who do well in this class have the
following knowledge coming in: a basic understanding logic (your basic
boolean logic), data structures (binary tree implementation, hashing)
and some system level knowledge (like data pages being copied between
hard disk and main memory). Expect to get a lot better with logic at
the end of class. It is a much better idea to take this after both
Algorithms and Computer Organization.

Why should I care?
------------------

It is a super useful class for getting internships or jobs. Many
students pick up database knowledge on-the-fly, as SQL is an intuitive
looking programming language. But, it takes you a bit of time to
realize many bad design decisions you can make and the impact they
will have on performance.  Hopefully we will have plenty of time to
discuss those in this class.

If you love it and further your education to eventually become a DBA
(database administrator), you will be among the highest paid and most
sought after professionals in the computing field.
