190 likes | 206 Views
Stay updated on team assignments and milestone 1 coding tutorial sessions for ECE 297. Learn about API performance optimization, memory management, and coding tips for clean code. Get insights into team formation stages and characteristics of high-performing teams.
E N D
Administrative Items ECE 297
Teams & Tutorials • Team: CI + meeting room, TA + lab room • See Team_ta_ci_and_room • No team? • Dr. Tallman will assign in tutorial next week • Mon., Jan 21,1-3 pm, BA B025 • Mon., Jan 21,4-6 pm, OI 8220 • Tues., Jan 22, 10 - noon, GB 405 • Random: usually better to pick your teammates • Optional milestone 1 coding tutorial • In 2nd hour only of tutorial • Mon., Jan 21, 2-3 pm, MY 360 • Mon., Jan 21, 5-6 pm, BA 1220 • Tues., Jan 22, 11 am - noon, GB 405
Milestone 1 Overview & APIs Continued
API Performance • Most functions tested for • Correct results • Performance • How to set performance target? • Low-level API: don’t know / can’t check what end user needs • STL-like approach: as fast as possible! • Required performance • load_map can be O(N) or slightly higher • Other calls must use data structure/algorithm that leads to minimum or near minimum O() • ece297exercise tests it is no more than 3X slower than our (fairly good) implementation
Performance Example std::vector<int> find_all_street_intersections(intstreet_id); • StreetsDatabaseAPI can • Return the number of StreetSegments • Return the intersections on each endof a StreetSegment • Tell you the street_id of a StreetSegment • Just call these: O(NStreetSegments) find_all_street_intersections () • Fastest possible? • O(NumIntersectionsOnStreet) • Store data in load_map to enable!
Clean Up main.cpp (made by unit tests) // Load anything you want here load_map (“toronto.bin”); intinter_id = find_closest_intersection (my_position); if (inter_id != 22333) { <your code failed the test, record it> } // lots more tests // clean up here; all memory should be de-allocated close_map(); ece297exercise runs valgrind on a load_map(), use, close_map() test Must free all memory or will lose marks
Automatic Memory Checking • Memory checking: valgrind slowdown ~10x • Testing: want fast & thorough • Small test case: almost as thorough as big • St. Helena
load_map How Do I Get Its Data? main.cpp (made by unit tests) // Load anything you want here load_map (“toronto.streets.bin”); intinter_id = find_closest_intersection (my_position); if (inter_id != 22333) { <your code failed the test, record it> } // lots more tests // clean up here; all memory should be de-allocated close_map(); ? global variable
But Aren’t Global Variables Bad? • Yes, if you overuse them • E.g. could pass argument but use global variable to avoid typing! • But almost all programs have some • Or something very similar • Limit their number • Group related data into classes (e.g. StreetGraph?) organizes data and avoids lots of namespace pollution StreetGraph find_closest_intersection (my_position); load_map() close_map()
Global Variable Pitfalls • Undisciplined use hard to determine function inputs and outputs StreetGraph find_closest_intersection (my_position); find_ … Only read global variables here! load_map() close_map() Only change global variables in load & close More coding / milestone 1 tips in 2nd hour of tutorial this week
Team Formation & Performance ECE 297
Four Stages of a Team • By Bruce Tuckman, Psychology Professor • Forming • Picking team, getting to know each other • Storming • Figuring out who does what & how, often contentious • Norming • Members understand and accountable for their roles • Performing • Only high-performance teams reach this stage; continuous improvement, open discussion, high trust You are here! Want to get here (or beyond)
Social Norms of Effective Teams • NY Times: Google Research on Teams • Equal speaking • Over day, members speak roughly equally • All engaged, all feel valued 2. On average, high social sensitivity • Can read emotions of other team members • Can tell when someone feeling left out, …
What Makes an Effective Team • What are your top 3 characteristics? • Same goal • Team members feel valued • Clear roles • Proper organization, how things will be done (accountability) • Effective communication & problem solving • How do you interpret the Google study? • Why equal speaking in good teams?
My Top 4 for High-Performing Teams • Open discussion • Tell it like it is! • Don’t let things fester • But be constructive • Accountability • Take responsibility for your part of the project • Own your mistakes, delays, etc. and find a solution • Transparency • If you’re behind or some of your code doesn’t work, say so clearly • Don’t hide or evade • Trust • Helped by all the above • Plus spend time working together (in person!)
Team Status Meeting • Two per week: 1 with CI & 1 with TA • Typical industry practice: weekly team meeting • With written status (usually wiki) • Good meetings help make good teams • Show transparency and accountability • Concise statement of what is done and not done • Clear (single person) ownership of various tasks • With a target completion date • Leverage the CI & TA’s expertise • Mentors are valuable ask questions
Team wiki • Team’s memory and to-do list • Key data • What’s next, with target date & owner for each • What’s done, and what was reassigned / delayed • Can have lots of detailed data • If so, add a summary for weekly CI & TA meeting • Should have received email with initial password • Change it! • Your wiki: for your team, TA and CI • Wiki Quick Start Guide
Sample Wiki • Comments?
Wiki: Try #2 • Measurable milestones, with owners & target dates