Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/parrt/cs601

USF CS601 lecture notes and sample code
https://github.com/parrt/cs601

Last synced: 17 days ago
JSON representation

USF CS601 lecture notes and sample code

Awesome Lists containing this project

README

        

CS601 Principles of software development
=====
University of San Francisco

[Terence Parr](http://parrt.cs.usfca.edu)

# Description

There is more to being a professional developer than learning the syntax and libraries of a programming language--that part is easy. You must learn how to use the myriad of programming tools, how to write robust code, how to produce a simple design, how to interact with team members, How to use the latest development tools, and how to cope with a constantly moving target. Furthermore, you must learn how the network, computer, operating system, and your software operate as a unit to provide a useful service. To do this, you must acquire skills traditionally associated with system hardware and software administration. This class provides a survey of real-world programming mechanics and introduces you to the latest object-oriented software development strategies. You might be surprised that you're more than just a developer: you are the customer and also the quality assurance team!

My primary goal is to prepare you for a productive programming and research life while in graduate school at USF. Furthermore, I intend to give you a taste of the technologies, strategies, and problems you will encounter as a professional programmer. Most importantly, I want to teach you to how to learn new concepts and technologies, solve your own problems, and do your own research. As a programmer, you must constantly struggle to keep up with the latest advances or you and your skills will become obsolete in a few years.

# Administrivia

**ROOM.** Lo Schiavo Science 307.

**TIME.** MWF 12:45pm - 2:30pm, Jan 27 (Tue) - May 14 (Thur).

**EXAMS.** There will be 2 exams but no final exam as your final project will count as the final exam.

**SPRING BREAK.** March 16 - March 20. No class.

# Lectures

[See CS601 lectures at github](https://github.com/parrt/cs601/tree/master/lectures)

#### Instruction format

Class periods of 1:45min each 2 times per week for 15 weeks. Instructor-student interaction during lecture is encouraged. All programming will be done in the Java programming language.

### Books

There is no textbook for this class.

### Grading

| Artifact | Grade Weight | Due date |
|--------|--------|--------|
|Graph| 5%| Feb 15|
|Proxy| 10%| Mar 10 |
|RingBuffer | 5%| Mar 26 |
|Webmail | 25%| May 14 (last day of class) |
|Quizzes | 5%| sporadic |
|Exam 1| 25%| Mar 31 |
|Exam 2| 25%| May 14 |

*No final exam, gmail project counts as the final but we do have a second exam on the last day of class.*

*I expect to see proper git commit messages and github usage so I can track your development.*

I consider an "A" grade to be above and beyond what most students have achieved. A "B" grade is an average grade for a graduate student or what you could call "competence" in a business setting. A "C" grade means that you either did not or could not put forth the effort to achieve competence. An "F" grade implies you did very little work or had great difficulty with the class compared to other students.

Projects that do not run exactly as specified will lose 10% of the total points. Make sure that you do not have hardcoded files/directories in your code, remember that UNIX is case-sensitive as is Java, file names and class names must be correct, specified method signatures must be correct, etc...

Code quality counts. Even if you have perfect functionality, I will deduct points for poor and sloppy coding.

*I will be very strict and set a high standard in my grading*, but I will work hard to help you if you are having trouble. You some of you may not get the grade you were hoping for in this class, but I will do everything I can to make sure you learn a lot and have a satisfying educational experience!

Unless you are sick or have a family emergency, I will not change deadlines for projects nor exam times. For example, I will not give you a special final exam just because you want to fly home early. Consult the university academic calendar before making travel plans.

**SOFTWARE.** Students can use any Java development environment they want, but I will be testing projects under OS X (or Linux) so make sure that your projects work on a UNIX box. The community edition of Intellij is the best Java development environment in my opinion. Projects will be submitted through github.com.

For help with git, I suggest you download [sourcetree](http://www.sourcetreeapp.com/). Intellij knows how to deal with git directly as well. You might also find the [Google Chrome extension Github Tree](https://chrome.google.com/webstore/detail/github-tree/ljoidanknjnfhcefkjbhjpmpccgmnobo) useful.

**ABOUT ME.** My name is Terence Parr and I’m a professor in the computer science department. Please call me Terence (the use of “Terry” is a capital offense). For more information on me, see http://parrt.cs.usfca.edu.

**TARDINESS.** Please be on time for class. It is a big distraction if you come in late.

**ACADEMIC HONESTY.** You must abide by the copyright laws of the United States and academic honesty policies of USF. You may not copy code from other current or previous students. All suspicious activity will be investigated and, if warranted, passed to the Dean of Sciences for action. Copying answers or code from other students or sources during a quiz, exam, or for a project is a violation of the university’s honor code and will be treated as such. Plagiarism consists of copying material from any source and passing off that material as your own original work. Plagiarism is plagiarism: it does not matter if the source being copied is on the Internet, from a book or textbook, or from quizzes or problem sets written up by other students.

The golden rule: **You must never represent another person’s work as your own.**

My policy is as follows:

* The first observed incident of cheating will result in a zero on the quiz or the assignment (for example). It will be reported to both the CS chair and the CS program assistant for tracking.
* The second observed incident of cheating after the initial incident will result in a failing grade for the course.

If you ever have questions about what constitutes plagiarism, cheating, or academic dishonesty in my course, please feel free to ask me. I’m happy to discuss the issue in a forthright manner.

Official text from USF: ``As a Jesuit institution committed to *cura personalis*—-the care and education of the whole person-—USF has an and will you take great way to say will you will you fail in with the Leica and you and I and you and is and you will so it's by his death I believe you are David is in a supervised soft as a whisper is well respected and everybody knows everything is going in and you what this person cares about that person care about Satan knows exactly how you and never even though you and I is is is going as wellobligation to embody and foster the values of honesty and integrity. USF upholds the standards of honesty and integrity from all members of the academic community. All students are expected to know and adhere to the University's Honor Code. You can find the full text of the code online at http://www.usfca.edu/catalog/policies/honor.''

**ON DISABILITIES.** If you are a student with a disability or disabling condition, or if you think you may have a disability, please contact USF Student Disability Services (SDS) at 415/422-2613 within the first week of class, or immediately upon onset of the disability, to speak with a disability specialist. If you are determined eligible for reasonable accommodations, please meet with your disability specialist so they can arrange to have your accommodation letter sent to me, and we will discuss your needs for this course. For more information, please visit http://www.usfca.edu/sds/ or call 415/422-2613.

# Syllabus

* [Administrative details](https://github.com/parrt/cs601/blob/master/lectures/admin.pdf)
* [Introduction](https://github.com/parrt/cs601/blob/master/lectures/intro.pdf)
* [Software licensing lecture](https://github.com/parrt/cs601/blob/master/lectures/software-licensing.md)

## Tools

* [Compiling and Running Simple Java Code](https://github.com/parrt/cs601/blob/master/lectures/javac-jar.md)
* [UNIX command line](https://github.com/parrt/cs601/raw/master/lectures/linux.pdf)
* [Git on command-line](https://github.com/parrt/cs601/blob/master/lectures/git-basics.md) (See https://github.com/USF-CS601-S15/parrt-doublekey)
* [Team collaboration tools](https://github.com/parrt/cs601/blob/master/lectures/github-dev.md)
* [Java I/O, unicode](https://github.com/parrt/cs601/blob/master/lectures/javaio.md)
* [Sockets, protocols](https://github.com/parrt/cs601/blob/master/lectures/sockets.md)

## Network programming
* [DNS](https://github.com/parrt/cs601/blob/master/lectures/dns.md)
* [POP/SMTP](https://github.com/parrt/cs601/blob/master/lectures/email.md)
* [http protocol](https://github.com/parrt/cs601/blob/master/lectures/http.md)
* [proxy servers](https://github.com/parrt/cs601/blob/master/lectures/proxies.md)

## Concurrent programming in Java

[Thread synchronization; barriers, thread communication; Volatile, AtomicInt, Java's memory model, lockless data structures](https://github.com/parrt/cs601/blob/master/lectures/threads.md)

## Web architecture
* [web app architecture](https://github.com/parrt/cs601/blob/master/lectures/webapp.md), [old client-server notes](https://github.com/parrt/cs601/blob/master/lectures/client-server.md)
* [Servlets](https://github.com/parrt/cs601/blob/master/lectures/servlets.md); services/REST
* [cookies](https://github.com/parrt/cs601/blob/master/lectures/cookies.md)
* [sessions](https://github.com/parrt/cs601/blob/master/lectures/sessions.md)
* [web page generation](https://github.com/parrt/cs601/blob/master/lectures/page.generation.md)
* [StringTemplate](https://github.com/parrt/cs601/blob/master/lectures/stringtemplate.md)

## Databases

[SQL, schema, sqlite, group by, joins, Java + SQLLite](https://github.com/parrt/cs601/blob/master/lectures/db.md)

## Principles

* [Why writing software is not like engineering](http://blog.parr.us/2014/12/29/why-writing-software-is-not-like-engineering/)
* [Project management](lectures/project-mgmt-intro-grabbag.md)
* [Agile development](lectures/agile.md)
* [Design patterns](lectures/patterns.md)
* OO concepts, [OO Worksheet](lectures/oo-worksheet.md)
* [Top-down-design](lectures/top.down.design.md)
* [jGuru case study](lectures/jguru.md)
* [The Essentials of Debugging](http://blog.parr.us/2014/11/17/the-essentials-of-debugging/)
* [Refactoring](lectures/refactoring.md)
* [Software testing](lectures/testing.md)
* [Mythical Man month](lectures/mythical-man-month.md)
* [Little Nybbles of Development Wisdom](http://parrt.cs.usfca.edu/doc/devnybbles.html)
* [Software licensing](lectures/software-licensing.md)
* Maintenance and dynamically typed languages, language adoption
* http://sns.cs.princeton.edu/docs/asr-oopsla13.pdf
* http://www.slideshare.net/lmeyerov/oopsla-talk2
* http://programmers.stackexchange.com/questions/221615/why-do-dynamic-languages-make-it-more-difficult-to-maintain-large-codebases/221658#221658