\input ../GenCourseInfo/Front1.tex 
\input TitleDate50.tex
\input ../GenCourseInfo/Front2.tex

% \section{Important Dates and Deadlines}

\begin{itemize}

\item formation of Homework Groups: by October 4

\item Midterm Exam:  November 29

\item Group Quiz:  December 6

\item Group Project due:  December 12

\end{itemize}

\section{Required Course Materials}

\subsection{Textbook}
\label{text}

The textbook is my open source book, available at
\url{http://heather.cs.ucdavis.edu/~matloff/50/PLN/ECS50Fall2012.pdf}.

We will cover the entire book.  Note, though, that it is actually an
abridged version of 
\url{http://heather.cs.ucdavis.edu/~matloff/50/PLN/CompSystsBook.pdf},
shortened by removing chapters on advanced material.  I continually
revise the long version, and you may find that sometimes the revised
material is helpful, but it is NOT required.

You can print the book anywhere, say at Copyland on G Street and Davis
Copy Shop on 3rd St., but you may find it's cheaper elsewhere.  Cost,
including binding, should be between \$20 and \$30.  One student said
she got her book from Digital Copies on 3rd St. for just \$16.  (Note:
When you talk to a vendor on this, be sure to distinguish between {\it
pages} and {\it sheets}.)  Just bring the store a copy of the correct
PDF file, say on a memory stick.

{\bf PLEASE NOTE:}  Pagination matters!  Tests (which are open book)
will refer to specific pages in the book.  So you need
\underline{exactly} the particular file stated above.  

It is required that you have a hard copy of the book, as it will be used
during Tests.

\section{Course Content and Goals}

This course is a lot different from courses you've likely had
before---especially the way I teach it.

\subsection{It's NOT a Programming Course}

I know that you are thinking that ECS 50 is ``the assembly language
course," treating it as being devoted to learning just another
programming language like C or C++. {\bf THIS IS NOT TRUE.}  

We definitely will do a lot of programming in this course, but AS A
MEANS OF LEARNING ABOUT COMPUTER SYSTEMS, NOT AS THE MAIN GOAL.  The
main goal is to LEARN ABOUT COMPUTER SYSTEMS.

\subsection{So, What IS This Course About, Then?}

Instead of thinking of ECS 50 as ``the assembly language course," you
should think of it as follows:

\begin{itemize}

\item it's the ``Does this PC have enough cache memory?'' course

\item it's the ``What are the basics of device drivers?'' course

\item it's the ``What can I do when my machine won't boot up?'' course

\item it's the  ``What  can  I do when my program fails to link with a
library file?" course

\item (best of all) it's the ``What should I know so that I don't look
like an idiot when I interview for a job?'' course

\end{itemize}

{\bf This course is an introduction to computer systems:}

\begin{itemize}

\item {\it computer architecture}, i.e. high-level hardware structures

\item {\it system  software},  i.e. operating systems, linkers,
compilers and so on

\end{itemize}

Again: It is certainly true that you will do a large amount of assembly
language programming in this course, but it is a means to the above
goals, not an end in itself.

\subsection{What Is Different About My Version of ECS 50} 

All instructors of a given course are supposed to cover the material
listed in the Expanded Course Description (ECD) for the course.

However, there is still plenty of room left for individuality. My
version of ECS 50 differs from those of other instructors in that:

\begin{itemize}

\item As mentioned earlier, I require more programming work than other
instructors do in this course.

\item My course uses a real machine, rather than being
simulator-based. We will be working on PCs running Linux.  This is
hugely important.

\item Though I of course cover both computer architecture and systems
software as required in the ECD, I go into extra depth on systems
software (e.g.  how programs are loaded into memory).

\item I put a lot of emphasis on how the hardware and software interact
with each other. 

\end{itemize}

\subsection{Why Linux?}

There are several important reasons why the main computing platform in
our course will be Linux:

\begin{itemize}

\item I feel strongly that it is not enough to teach this course on a
simulator. Students learn much better on a real machine, i.e. real
hardware and a real operating system (OS).

\item Linux is open source, which means that all of its ``innards" are
visible to anyone who wants to look at them. This is perfect for us, as
{\bf ECS 50 is an ``innards" course}. We will for example look at
excerpts from the actual Linux source code, which we would not be able
to do with Microsoft Windows.

\item {\bf LINUX IS IMPORTANT FOR YOUR CAREER.}   See Section
\ref{machines}.

\end{itemize}

You are very strongly urged to install Linux on your home PC, if you
don't already have it there.  


\section{Workload}

There will be approximately five assignments, consisting mainly of
programming work.  

{\bf IN ORDER TO ACHIEVE A DECENT GRADE, PLAN TO SPEND SIGNIFICANT TIME
ON CAREFUL READING OF THE TEXT, AT LEAST FIVE HOURS PER WEEK.}

All in all, the number of hours per week you'll put in should be similar
to something like ECS 60.\footnote{I'm not assuming you've had that
course, but you may have heard about it.}  Note, though, that much of
this will be Group work.

\section{Prerequisites}

The required background is:

\begin{itemize}

\item The prerequisite for this course is ECS 40 or equivalent.  This
means you must have had a two-course programming sequence, with the
second course having you write more sophisticated programs than the
first, and that you know C and C++.  \textbf{Please note that
prerequisites are strictly enforced.}

\item You must have reasonable programming and debugging skills.

\end{itemize}

\input ../GenCourseInfo/Machines.tex
\input ../GenCourseInfo/SyllabusCore.tex

