Prof. Matthew Hertz WTC 207D /
Objectives Met in CSC212 Develop solution over entire software lifecycle Implement & test computational solutions Describe which data structure to use & explain why Describe execution of fundamental data structures Know theoretical foundations of computing Trace & analyze algorithms Identify & describe limits of computational power
High-level Objectives Become programmers, not just “code monkeys” Working on your own, develop solutions from scratch Explain your decisions and why they were best choice Learn common real-world development techniques
High-level Objectives Become programmers, not just “code monkeys” Working on your own, develop solutions from scratch Explain your decisions and why they were best choice Learn common real-world development techniques
High-level Objectives Become programmers, not just “code monkeys” Working on your own, develop solutions from scratch Explain your decisions and why they were best choice Learn common real-world development techniques Master basic tools needed for all future work Will cover topics from about 50% of GRE subject test “Data structures are critical for good performance” Have fun
High-level Objectives Become programmers, not just “code monkeys” Working on your own, develop solutions from scratch Explain your decisions and why they were best choice Learn common real-world development techniques Master basic tools needed for all future work Will cover topics from about 50% of GRE subject test “Data structures are critical for good performance” Have fun
High-level Objectives Become programmers, not just “code monkeys” Working on your own, develop solutions from scratch Explain your decisions and why they were best choice Learn common real-world development techniques Master basic tools needed for all future work Will cover topics from about 50% of GRE subject test “Data structures are critical for good performance” Have fun
Expectations of Me Lectures prepared and organized Give interesting, thoughtful, fun problems Be (reasonably) available to answer questions Be honest and forthright
Expectations of Me Lectures prepared and organized Give interesting, thoughtful, fun problems Be (reasonably) available to answer questions Be honest and forthright
Why Most Classes Suck
Teaching Style
Adult Learning Students read material before class Answer initial questions at start of class (Short) lecture explains key ideas Provides 2 nd opportunity to see material Also will limit long, boring droning Students work in teams to solve problems Make sure you actually understand material Easy to correct mistakes if caught at the start
Expectations of You Work hard Come to class prepared Support & help all your teammates Ask for help early and often Let me know what you are thinking
Attendance Attendance is mandatory Talk to me when you know you must miss class You are responsible for every class Missing class is never acceptable excuse Best way to earn a poor grade: skip class
Deadlines Have 2 virtual “extensions” Each used to get 1 day extension on assignment Can use both on single assignment for 48-hour delay Late work not accepted without extension If you know you cannot make a deadline, talk to me Earlier we talk, the better the chance solution possible
Grading Philosophy Grades reflect student's demonstrated ability Not a competition where grades are relative I will quite happily give A to entire class, if all earn it A not automatic just because score is highest in class Remain fair for students past, present, & future When in doubt, I consider what most equitable Hard work alone insufficient to raise a score Working efficiently important life skill to be rewarded
Grading Philosophy Doctor Who Cures YouDoctor Who Works Hard Would you rather have:
Course Grading Midterms24% Final25% Quizzes10% Projects18% Weekly Assignments11% Daily Activities6% Program Portfolio6% Grades available via Angel Midterms given on Oct. 3 rd & Oct. 31 st 3 programming projects during semester
Course Grading Goals Learn & build skills used by “real” programmers Develop understanding needed for future work Catch and correct problems early Many ways presenting material during the term Increases chances that all students can “get it”
Course Grading Goals Learn & build skills used by “real” programmers Develop understanding needed for future work Catch and correct problems early Vary way presenting material to help others I am mean & like watching students suffer
Weekly Assignments Posted on web/Angel each week Usually due by 5PM following Tuesday Virtual extensions okay to use on all but first one Before submitting, ask me questions you still have Several goals for these assignments Provide additional programming opportunities Reinforce material from each lecture Questions should seem easy & take under 10 min. Means you are doing well
Programmer’s Notebook Take notes on readings’ important details Main Angel page links to helpful templates to use Notes written by you so easy to understand (Don’t care where you get information from) Use notebooks during labs & tests Without notebook, no answers to related questions Can also use book, but book less useful than own notes
PowerPoint Slides Students need to take notes on their own Writing increases odds of remembering ideas Really, really bad idea to not take notes Trapped me into specific way of lecturing Limited opportunities to use clever memory tools Lectures often resembled
Students During Lecture
Workings of My Slides Slides contain many pictures, little text Lectures interesting & fun (or at least better) Provides you with good way to reinforce lessons suck Will suck as actual notes Print handout & take notes on the side Write down what the steps animated on the slide Slides (with notes) usable on tests, labs, class… Win-win proposition (Except for the lazy ones of you…)
Collaboration Fellow students are a great resource Provides multiple viewpoints & understandings Get together, discuss material, and study Can have them answer lingering questions Clarify assignment and what it requires Learn and practice some basic social skills
Collaboration Work you submit must be done by you When discussing homework or projects Leave conversation with memories only Wait 15+ minutes before starting on your own Solutions always unique after waiting Once started, each student should work alone When in doubt, ask me
Coding Help Will work on testing & debugging skills To get debugging help in CSC212 Method(s) must be commented (javadoc) Must use a trace or similar to look for bug Students find own solution once they start doing this If problem not fixed, gives us starting point to work Learn to fix your own errors & not rely on the Professor
Textbooks Goodrich & Tamassia, Data Structures and Algorithms in Java, 5 th Edition, Wiley, GT Readings from book listed as " GT " in schedule Available at bookstore & online (Amazon, etc.) Will cover about 50% of the textbook CSC213 looks at other half of the book Only new textbook for the year
Textbooks Horstmann Readings listed as “ Horstmann " in schedule Textbook from CSC111 last Spring Early in term used to review CSC111 concepts Few Java concepts introduced as we go along, also But this is your choice, new concepts also in textbook
Course Website Pages for course found on Angel Handouts, slides, assignments posted before class Can also find solutions after work is due May not include everything said in class Better than nothing, but worse than being here!
Ever Have A Bug? At some point, everyone must fix bug in code What should you do first after discovering the bug?
Ever Have A Bug? At some point, everyone must fix bug in code What should you do first after discovering the bug?
Ever Have A Bug? At some point, everyone must fix bug in code What should you do first after discovering the bug?
Ever Have A Bug? At some point, everyone must fix bug in code What should you do first after discovering the bug?
Ever Have A Bug? At some point, everyone must fix bug in code What should you do first second after discovering it?
Fixing Bugs Three common ways students fix bugs: Guess where error is and make random change Use Eclipse debugger to run program & find source Get out your pencil & paper and draw a memory trace
Normal Method of Debugging Also called "debugging-via-drunken-walk" SMALL Can work for SMALL programs with limited choices Guessing for millions of lines of code harder Not at all effective at actually fixing errors Entire point is to avoid understanding bug's cause "Fix" may cause other errors later on in program Cannot prevent future errors using this approach
Better Method of Debugging Could use Eclipse debugger to find and fix bug Set breakpoints to stop program where bug likely Use step filters to walk through the program bit by bit Spend a few hours learning how to make it work Can get to root of problem once it is executed But requires executing entire program to trigger bug Cannot work backward to try and understand why
Best Method of Debugging Generating memory trace has many benefits Could check algorithm – don’t need any code to try Can make up situations and just trace a method Look back through trace to see root cause of bug Trace code by running it like you were computer DON’T SKIP STEPS DON’T SKIP STEPS – easy to (wrongly) assume things As you go along update variables’ values GIGO effects limit tracing’s effectiveness
Best Method of Debugging Generating memory trace has many benefits Could check algorithm – don’t need any code to try Can make up situations and just trace a method Look back through trace to see root cause of bug Trace code by running it like you were computer DON’T SKIP STEPS DON’T SKIP STEPS – easy to (wrongly) assume things As you go along update variables’ values GIGO effects limit tracing’s effectiveness
Benefits of Heap Traces Draw what actually occurs in memory Pictures used to debug rather than bare text Much easier to understand what a method does Excellent way to learn new programming topics Past studies found improves student grades Debugging time decreased greatly at same time Greater support for these traces in Eclipse Drawing of static trace integrated with debugger Over this term should see tools improve
Starting a Heap Trace Paper holds 3 areas separated by vertical lines Program stack drawn on left part of page Right side of page holds the program heap Program output shown outside the stack & heap Objects allocated during run drawn in the heap Will discuss how this is done next week Draw frame on top of stack each method call Fancy name for box labeled with method name Each parameter & local variable needs space in box
Data Types 8+1 primitive data types Examples: boolean, byte, char, int, double, String * Only types that work with Java operators Operators include: +, -, %, &&, ||, >=, <, ! Primitives used natively by computers Means using them is very quick Implies greater support within the language
Primitive Types Primitive variables are simple to use Each variable is “xerox” holding a value Assignment copies value Update assigned variable only; changes not reflected
Starting a Heap Trace public static void main(String[] args) { String s = “”; for (int i = 0; i < 5; i+=2) { s = s + i; System.out.println(s); } }
Announcements Interested in joining programming team? Register for CSC299 (0-credit course) & learn more! Relaxed & ungraded “class” meets Wed. 4:30 – 5:30 CSC tutoring center starting to ramp up Starting next week (or so) tutors available in WTC 206 May have limited openings if you know HTML or C++
For Next Lecture Mourn summer’s end & start of homework Weekly assignment problems start today For 1 st week of classes, will be due before each lecture Help you review your Java and get rust out of system There is reading for Wednesday From Horstmann text (book used in CSC111) Chapters listed on Angel & in syllabus