CS257 Software Design Monday, 31 March 2025 + Welcome! - I'm Jeff. Olin 301A. jondich. - Office hours posted on course website - Meet each other + What makes software good? --- Student responses --- Well commented Features that do what I want Easy to find the features Able to be maintained well documented well styled Accessible Layout in code and UI Security Efficient performance Doesn't have unintended consequences Pretty Open source ------------------------- + Examples of real software that - Makes people's lives better - Texting - Password manager - FaceTime - Photos - TurboTax [JO has doubts] - Excel - Makes people's lives worse - Tracking people for ad targeting - Confusing UIs (e.g., the Mayo Clinic app & website) - Workday - (whose lives?) + Go back through that list Example 1: Apple Photos, Google Photos - Who is this software for? people with the right hardware Jo Average people who can see photos shareholders? workers? programmers? - Does the software serve everyone equally well? people with fancier hardware get fancier photos need internet access/broadband to use cloud storage money for storage Apple Photos tries to drive you towards more Apple purchases; Google similarly automatic face recognition still recognizes lighter-skinned faces better than darker etc. + Software engineering vs. programming - Programming - ? - Software engineering - code is part of a larger system - teams - many stakeholders whose needs/demands are relevant - safety, security ... - 1960s - Fred Brooks, IBM's System 360 - Margaret Hamilton, NASA's Apollo program - ...many others... - (be wary of attempts to identify "the person" who invented a thing) + This course - Focus your design and implementation of software on the needs of human beings - Improve your ability to build high-quality software (and to understand what that even means) - Improve your independence as a programmer - get more comfortable with essential tools - get more comfortable with essential processes - practice solving day-to-day programming problems - Some of your concrete tasks - set up and maintain your development system - work with a team - design and build a data-driven web application - incorporate ethical analysis into your designs and implementations throughout + Logistics - Quick tour of the course website - No Moodle - Laptops in classroom strongly encouraged - Different backgrounds + This week - Get set up - Brainstorm needs and possible applications - Meet Unix, git, and GitHub + Next week - Command-line interface design and implementation - Test-driven development and unit tests + The elephant in the room: LLMs - My stance and experience (so far) - What do you think? (so far) - We need to collaborate + First job - Initial setup for your computer (see ASSIGNMENT due tomorrow) ========= Jeff's short list - Correct - Meets the needs of people it's intended for - Maintainable ==== Fall 2022 students: what makes software good? ==== - Readability of source code - Documentation - Ethical purpose - Easy to debug - Functionality - Efficiency - Easy-to-use UI - Fills an actual need - Functionality for edge cases - Security - [don't let users mess with code] - Transparent: what is this sw doing?