//****************************************************************************//
//************ First Day of CS 2340 - August 21st, 2017 *********************//
//**************************************************************************//

- ECLIPSE DAY DARK DAY WHY ARE YOU IN CLASS!!!
- 7:52am, multiple children present, no sign of Prof. Waters...yup, it's the start of a brand new school year. HUZZAH!
--------------------------------------------------------

- "Right, so I had Mr. Microphone all setup for this morning, but I guess I forgot Mr. Microphone on my desk, so..."
- Professor Robert "Bob" Waters
    - Retired helicopter pilot for USAF (1975-1980; stationed in Berlin)
        -"As a side effect of being a Huey pilot for so long, my hearing is kinda shot; so, if I ask you to repeat a question 3 times, it's NOT just because I don't like you"
    - Later accepted to US Navy test pilot program
    - Later worked on upgrading / working on computer systems for several companies

- TOPHAT! Basically, it's our version of the "clickers" in other classes
    - There'll be questions throughout the class posted on TopHat, mostly to just check that you're attending/paying attention
        -Questions for this first week will NOT count for grades, so yeah 
- As usual, EVERYTHING will be posted to T-Square

- So, in CS 1331, you learned JAVA - but a lot of these assignments were "toy problems." You were just SOLVING problems in this class, but you didn't really have to DESIGN your solutions, or use any Object-Oriented design principles
    - There are OTHER design paradigms - top-down, functional, etc. - but in this class, we'll be focusing on OO
- So, the big goal of this class is to teach you OBJECT-ORIENTED DESIGN PRINCIPLES
- The SECOND big goal of the class is to teach you about best practices for programming: source control, building with Gradle, etc., not to mention developing the general skills you'll need (teamwork, solving problems, etc.)
- And the REST...well, you can read them on the syllabus, but those are the two big ones

- BOOKS! They should be available online (via the library); "Head-First Design Patterns" is nice and readable
    - Git book is WAYYYYYYY more in-depth than you need for this class, but obviously, the more you know...

- We WILL be designing apps for Android in this class, but you do NOT have to have an Android device (there are emulators available within the dev environment)
    - NO ANDROID EXPERIENCE IS NECESSARY; only Java knowledge is assumed, and we'll teach you everything else you need to know

- MOST OF THE HOMEWORK WILL BE DONE IN TEAMS OF 4-5 (how those teams are formed will be explained later)
    - Collaborating within your team is ABSOLUTELY ENCOURAGED, but you should NOT be collaborating with other teams (except at a VERY high level, like diagrams)
    -There will be 2-3 individual homeworks, though
- There'll be ~1 homework due every week

- There will be 2 exams; they are BOTH open-note
- The FINAL is actually a take-home test done with your team; you'll be given a description of a software design, and then asked questions on how to improve the design

- NOTABLE HOMEWORKS:
    - ZENHUB: you'll be using this in other classes; in THIS class, you'll only HAVE to use it for the 1st assignment
        -...there *might* be extra credit, though, if your team uses it for the rest of the project
    - In "M11", you'll swap projects with another team and do a code review of THEIR project
    - At the END of the project, you'll have peer evalautions (along with a "midterm" evaluation halfway through)
        - PREVIOUSLY, there would just be one BIG peer-review at the end of the semester, and then I would reduce people's grades if they hadn't been doing enough work
        - NOW, on EACH assignment, I will lower your grade if your team complains that you haven't been doing enough work, if Git commits show you've been seriously slacking, etc.; do your fair share, work hard, and you should be fine

- DEMOS: You can demo your project to a TA the week AFTER you've finished the homework
    -A LOT of teams fall 1 week behind because of this (e.g. working on week 4 stuff when the week 5 work has been released); this becomes a problem towards the end of the course, so PLEASE stay on schedule
    - You only need to have 1 team member represent your team; I'd recommend you go AS A TEAM, though, so that each team member can explain their own code if the TA has questions

- On the schedule:
    -FILES can be found in the "Resource" section of T-Square
    -The schedule is TENTATIVE; it will almost certainly be adjusted, but exam schedules WILL NOT BE CHANGED unless in truly EXTRAORDINARY circumstances (e.g. attack on campus, alien invasion, etc.)

- So, THE PROJECT: what is it?
    - We'll be designing a "Rat Sighting Reporting System" 
    - The DESCRIPTION of the project says EVERYTHING that would be in the real-world application; in this class, we will NOT be coding everything in the project description (e.g. won't be coding security)
        - Description should be finished and ready by Friday; you can find this page underneath the "Wiki" section on T-Square
-Extra credit IS AVAILABLE for the project; 
    - The WORLD RECORD we have is 400 extra points, because some crazy person made an iPhone version, coded ALL the optional parts of the project, created a functioning web app, shared the data between the differenet versions via a centralized database, etc.
        -...needless to say, this person didn't bother showing up for the final (and probably had no social life. Just sayin')

- SUSTAIN/ LEARN / SERVE
    - We aren't coding just to make money (although that's not a bad side effect...)
    - We also want to code to, hopefully, help the world a little bit along the way while we're learning; so, the hope is that some of the design work that we do on this project will be useful to our grad students working with the ACTUAL NY Sanitation Department

- At a high level, this class has 3 main parts:
    - OOA: OBJECT-ORIENTED ANALYSIS
        - Here, we're working within the "customer's DOMAIN," trying to understand the project from the customer's point-of-view (their "domain") to better understand their needs
        - This can even be something as simple as understanding the terminology of the field
            -e.g. if you're writing a missile-guidance software, you'd better understand what pitch, yaw, and roll are
        - In this class, we'll start this process off with "user stories"
        - THEN, we swap over to working in the "domain model," where we're trying to understand the project domain, what the project needs to do, etc.
    - OOD: OBJECT-ORIENTED DESIGN
        - NOW, we translate our analysis over into a high-level SOFTWARE DESIGN that will meet our problem constraints while allowing for modification, extension, etc., per good design principles
        - Here, we'll teach you about UML diagrams, software architecture, etc.
        - This category also includes Object-Oriented design principles like SOLID and GRASP, as well as DESIGN PATTERNS (command, observer, singleton, etc.)
    - and finally, OOP: OBJECT-ORIENTED PROGRAMMING
        - At last, we'll take our high-level code design and write the files that will turn it into an actual, implemented, working program
        - This includes the details of Java syntax, along with the nitty-gritty of Unit Testing, code reviews, etc.
- Undergirding all of this are the big principles of learning teamwork, AGILE development (to a certain point), and making you a better developer

- THURSDAY MORNING, I'll start assigning teams of 5
    - I've tried assigning ALL random teams...students hated it
    - I've tried telling THEM to form their own teams...they hated ME
- So, I've settled on a hybrid approach: If you want to work with someone, or NOT work with some people, send me a message; OTHERWISE, I'll assign the rest of your team randomly

- AND FINALLY...Enjoy the eclipse! We'll pick up class again on Wednesday