CS 126: Software Design Studio

Slides:



Advertisements
Similar presentations
Version Control CS440 – Introduction to Software Engineering © 2014 – John Bell Based on slides prepared by Jason Leigh for CS 340 University.
Advertisements

Software Engineering.
Computer Science 162 Section 1 CS162 Teaching Staff.
CODING Research Data Management. Research Data Management Coding When writing software or analytical code it is important that others and your future.
G51FSE Version Control Naisan Benatar. Lecture 5 - Version Control 2 On today’s menu... The problems with lots of code and lots of people Version control.
Version Control with git. Version Control Version control is a system that records changes to a file or set of files over time so that you can recall.
The BCC-UCF Writing Center …because writers need readers.
GIT An introduction to GIT Source Control. What is GIT (1 of 2) ▪ “Git is a free and open source distributed version control system designed to handle.
Let’s Celebrate – Visual Basic 2008 Professor Corinne Hoisington.
Version control Using Git Version control, using Git1.
Drexel University Software Engineering Research Group Git for SE101 1.
…using Git/Tortoise Git
Information Systems and Network Engineering Laboratory II DR. KEN COSH WEEK 1.
Hipikat: A Project Memory for Software Development The CISC 864 Analysis By Lionel Marks.
1 CSCD 326 Data Structures I Software Design. 2 The Software Life Cycle 1. Specification 2. Design 3. Risk Analysis 4. Verification 5. Coding 6. Testing.
CS5103 Software Engineering Lecture 02 More on Software Process Models.
There are only 10 different kinds of people in the world: those who know binary and those who don't. - Anonymous.
ANU COMP2110 Software Design in 2003 Lecture 10Slide 1 COMP2110 Software Design in 2004 Lecture 12 Documenting Detailed Design How to write down detailed.
Information Systems and Network Engineering Laboratory I DR. KEN COSH WEEK 1.
Introduction to PAD2 Dr. Mark C. Lewis
Version Control Systems
Programming Languages Dan Grossman 2013
CS5220 Advanced Topics in Web Programming Version Control with Git
App Camp Gave written instructions for what we were doing and why.
CSC 222: Object-Oriented Programming
Git primer Landon Cox January 19, 2017.
Information Systems and Network Engineering Laboratory II
IST256 : Applications Programming for Information Systems
CSC 222: Computer Programming II
Discussion #11 11/21/16.
CSC207 Fall 2016.
Introduction Edited by Enas Naffar using the following textbooks: - A concise introduction to Software Engineering - Software Engineering for students-
Programming & Scratch.
Why We Refactor? Confessions of GitHub Contributors
Mastering Version Control with Git
A Simple Introduction to Git: a distributed version-control system
Version Control.
Discussion 11 Final Project / Git.
Version Control overview
Version control, using Git
CS5220 Advanced Topics in Web Programming Version Control with Git
CSC 222: Object-Oriented Programming
Version Control with Git and GitHub
Version Control Systems
Version Control with Git accelerated tutorial for busy academics
Distributed Version Control with git
Introduction Edited by Enas Naffar using the following textbooks: - A concise introduction to Software Engineering - Software Engineering for students-
Source Code Management
Design, prototyping and construction
Introduction to Programming 2
Introduction to Computer Programming
Design and Programming
Part 1: Editing and Publishing Files
Git and Jira Tutorials Kan Qi
Chapter 7 –Implementation Issues
Git CS Fall 2018.
CSE 331 Software Design & Implementation
CSE 403, Winter 2003 Software Engineering
CSE 331 Software Design & Implementation
Git started with git: 2018 edition
CS 240 – Advanced Programming Concepts
GitHub and Git.
Version Control with Git and GitHub
Naming & Code Reviews.
Java & Testing.
Git GitHub.
CS201 – Course Expectations
Design, prototyping and construction
The Software Development Cycle
Presentation transcript:

CS 126: Software Design Studio Prof. G Carl Evans

What is this class about? My goals for this class: Improve your programming productivity by >= 3x Build your self-sufficiency as a programmer Introduce you to modern computing environments Provide skills for getting internships / doing hack-a-thons Have you build a large project relating to your interests

What is this class NOT about? This is NOT a ‘Computer Science’ class This is a programming class (i.e., don’t hate CS even if you hate this class) But, this class will help you in your ‘Computer Science’ classes Alleviate the low-level programming struggles You can focus your attention on the big ideas!

What is Programming? (two views) “The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures.... Yet the program construct, unlike the poet's words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. […] The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be.” — Fred Brooks Pragmatically, programming is the tool that computer scientists use to collect, analyze, and visualize data, automate tasks, make products, mechanically prove theorems, and build tools. As lawyers write prose and architects build models, programming is the underlying tool of the computer scientist.

Programming is unique “The gap between the best software engineering practice and the average practice is very wide—perhaps wider than in any other engineering discipline” — Fred Brooks “The original study that found huge variations in individual programming productivity … studied professional programmers with an average of 7 years' experience and found that the ratio of initial coding time between the best and worst programmers was about 20 to 1; the ratio of debugging times over 25 to 1; of program size 5 to 1; and of program execution speed about 10 to 1.” — Steve McConnell

How much programming experience do you have? A. Six months or less B. Six to 12 months C. One to two years D. Two to six years E. More than six years

How do you get better at something? 1. Get lessons from experts 2. Practice 3. Get feedback 4. Metacognition

Course Textbook (part 1) A solid, concise book on software construction. Less than $30 on Amazon prime (or $16 for a Kindle version). Check out reviews on Amazon about how good this book is.

Code Reviews Groups of <=6 students + 1 moderator Meets 2 hours/week (arranged time) Present code that you’ve written in the past week Get feedback on your style & design See other possible designs (pick up ideas) Practice presentation & verbal communication skills

Meta-cognition (or Metacognitive Regulation) “Regulation of cognition" contains three essential skills: Planning: appropriate selection of strategies and the correct allocation of resources that affect task performance. Monitoring: refers to one's awareness of comprehension and task performance Evaluating: refers to appraising the final product of a task and the efficiency at which the task was performed. This can include re-evaluating strategies that were used.

Learning to help yourself Very few programs are written completely from scratch. Most rely heavily on libraries, APIs, and frameworks Existing code is person-made and arbitrary No one inherently knows how to interface to it Need to be able to read documentation Google and StackOverflow are your friend In this class, we’ll encourage you to help yourself Teach a person to fish, and you feed them for a lifetime.

What are we going to do this semester? style, refactoring, code reviews  layout, commenting, variable usage and naming, control structures test-driven development, testing frameworks, coverage   defensive programming, assertions, exception handling design, design of routines, object-oriented frameworks design patterns, event-driven programming, MVC tools: IDEs, source control, debugging, logging, Unix user interface design, prototyping, user testing

Course Infrastructure (1) Java is a relatively verbose language Having a good tool accelerates routine drudgery. IntelliJ IDEA is a really good tool (basis for Android Studio)

Course Infrastructure (2) Version control systems (VCS): A practice that tracks and provides control over changes to a collection of documents/files. Allows access to any prior version. Facilitates collaboration between multiple developers. Git: an industry-standard distributed VCS You’ll use this for developing/submitting your code. Very sophisticated tool; we’ll use a subset of features

VCS concepts Repository: A collection of files under version control, along with all of their previous (committed) versions. Checkout (verb): To make a working copy on your local machine for editing/testing. Commit (verb): To take a set of file modifications and add them to the repository, usually with a descriptive message. Commit (noun): The set of changes (a “diff”) along with its descriptive message resulting from a commit (verb).

Git concepts Local repository vs. remote repository: Git lets you have as multiple related repositories on different machines. Clone: Make a local repository from a remote repository. Staged: Files whose changes are to be committed. Push: Copying local commit to remote repository. Pull: Bringing changes from remote to local repository. Implemented by a “fetch” then a “merge”.

Version Control, why do we care? Single Developer: Most things worth doing are too big to do all at once. Break large projects into small steps: Design, implement, test, debug, commit each step. Have access to every working version through VCS If things stop working: Can inspect the differences between current and last working versions. Can always revert back to last working version (e.g., throw away changes) Multiple developers: Coordinate edits to a shared set of files

Things to have been doing Join UIUC CS 126 on Piazza Get an iClicker registered Get a GitHub account Install IntelliJ on your laptop (students can get the Ultimate version for free) Review course Policies: https://courses.engr.illinois.edu/cs126 Code Review Survey https://doodle.com/poll/bm9q2c5ip88qicaq 7 times as the poll instructions say Please use your netid not your name for the poll

Your friend offers to send you the code for the MP so you can hang out. Good Idea Bad Idea

Your friend is having difficulties starting the assignment, so you give them a general overview of what you did. Good Idea Bad Idea

Your friend is having difficulties starting the assignment, so you show them the first few methods you wrote. Good Idea Bad Idea

Your friend is having difficulties with the assignment, so you help them debug their code. Good Idea Bad Idea

Your friend just does NOT have time this week for CS 126 and they ask you to give them your code. Don't worry they'll change it up a little. Good Idea Bad Idea

You get stuck on how to do something on an MP, so you google it and copy ~30 lines from the very helpful first StackOverflow post. Good Idea Bad Idea

You get stuck on how to do something on an MP, so you google it and add a comment citing the code you took from StackOverflow. You can explain what the code does in code review. Good Idea Bad Idea

You get stuck on how to do something on an MP, so you google it and use code from an past student's incredibly handy GitHub repository! That student's intro programming assignment surely looks impressive to recruiters! Good Idea Bad Idea

You think you're smarter than course staff, so you "borrow" your friend's code and attempt to modify it enough so that you don't get caught. Good Idea Bad Idea