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.

Software Tools

  • 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.