CSC301 Course Notes
CSC301 Course Overview
Introduction
- Brief introduction of the instructor.
- Overview of course structure and expectations.
Instructor Background
- Experience in Distributed Systems:
- Scalability for 1 billion devices.
- Storage solutions for petabytes of information.
- Background in Security, Compilers, and Kernels.
- Work experience in Silicon Valley, both at large corporations and startups.
Course Overview
- What is CSC301?
- Introduction to agile development methods for medium-sized teams.
- Focus on rapidly-moving projects.
Syllabus Highlights
- Key Components:
- Deliverables and their weights:
- Assignments (A1, A2)
- Individual and group work dynamics.
- Course Location & Instructor Information:
- Instructor: Andi Bergen.
- Office: DH-3084.
- Office Hours: Tuesday (3-4 PM), Wednesday (11 AM-noon).
- Email: andi.bergen@utoronto.ca.
- Course website: https://q.utoronto.ca
Learning Outcomes
- Gain a strong foundation in software engineering:
- Apply best practices for complex software systems.
- Analyze, design, evaluate, and adapt software processes.
- Implement software solutions in real-life scenarios.
- Work with enterprise design patterns.
- Develop digital business models and evaluate impacts of digitalization.
Assignments
- Assignment 1 (A1):
- Deliverable: Proof of Concept (PoC).
- Focus on changing requirements.
- Assignment 2 (A2):
- Build upon A1 and scale it up.
Project
- Term Project:
- Collaborative project in teams of 5-7.
- Agile development methodology: incorporates TDD, XP, and Scrum.
- Emphasis on improving coding and team workflow.
Coding Skills Improvement
- Code Quality:
- Measurement in terms of code readability and maintainability.
- Focus on realistic environments and user-centered designs.
- Essential tools used include:
- Version Control (Git), Project Management (Trello, GitHub).
- Continuous Integration/Continuous Deployment (CI/CD) tools (e.g., Jenkins).
- IDEs suitable for the project needs.
- Various databases: Relational, NoSQL, GraphDBs.
Project Management Techniques
- Highlights:
- Employ Agile planning and review techniques.
- Regularly evaluate project priorities and progress.
Product Management Techniques
- Define objectives, target audience, and planning methods:
- Use personas, user stories, and mockups.
- Define minimum viable products (MVPs) clearly;
- Use iterative feedback for product improvement.
Agile Development Principles
- Agile Manifesto:
- Focus on individuals and interactions over tools.
- Deliver working software over extensive documentation.
- Introduction of frameworks:
- Extreme Programming (XP), Test Driven Development (TDD), Scrum.
Development Methodologies
- Waterfall Model:
- Linear approach with defined phases: requirement analysis, design, implementation, testing, and maintenance.
- Advantages: documentation, clarity, and fixed requirements handling.
- Disadvantages include rigidity and inflexibility.
- Agile Methodologies:
- Tackle changing requirements with quick iterations and user feedback cycles.
Scrum Framework
- Structure of Scrum:
- Sprints of 1-4 weeks with defined goals.
- Daily standup meetings for progress reporting.
- Flexibility to adapt to evolving requirements based on stakeholder feedback.
Key Takeaways
- Communication of complex ideas effectively is crucial for project management.
- Emphasis on real-world applications of theories learned in class.
- Encourage collaboration, individual accountability, and use of best coding practices.
- Explore various technologies and frameworks throughout the course.
Plagiarism Policy
- All submissions must be original work.
- Collaboration on project drafts must be done within the team only.
- Use of AI tools permitted for building skill sets.
Conclusion
- Aim for continuous learning and skill development.
- Open invitation for student questions during lectures or office hours.