//****************************************************************************// //************ 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