**Course Description:** This course will be provided by Credit Suisse to give
students exposure to real-world software development. The course will consist
of a set of lectures and a large course project in which students will learn
and apply practical skills. The course project will be a financial application
similar to the systems used for pricing and risk calculations in Credit
Suisse. The students will have access to technical leaders at Credit Suisse
through the lectures and tutorials to learn from professionals who are
building business critical applications.
**Recommended Prerequisites:** Familiarity with object oriented programming
and computer science concepts is required for this course. Some exposure to C#
is recommended, but is not required for ambitious students. A useful course to
have taken prior to enrollment is **Windows Programming course**.
**Expected Workload:** The instruction time for this course will be 90 minutes
of lecture and 90 minutes of tutorial per week. We expect students to spend
4-6 hours per week outside instructional time on course work and assignments.
**Event Title & Presenter Description:**
* **Lecture 1: Course Introduction**
Introduction to Investment Banking and Enterprise Software:
* Differences between university / personal project and enterprise software (i.e. why are you taking this course): reliability, performance, scalability, long-term maintainability, documentation & analysis
* What is an Investment Bank and what does it do? Sales & Trading, Corporate Finance, Research, FO/MO/BO layering
* What are the basic financial markets and products? Stocks, Bonds, Commodities, and Forex
* High-level introduction to the kinds of systems: trade capture, market data, risk engines, pricing applications
* **Lecture 2: Introduction to C#**
An overview of the C# language:
* Visual Studio
* Hello World Console Example : methods, properties, variables, loops, input and output
* Conventions to follow for readable code
* Collections & Generics
* LINQ
* Extension Methods
* Lambda Expressions
* Anonymous Types
* Default & Named Parameters
* Dynamic Types
**Assignment:** set up dev environment and write an application to capture
names and addresses and sort them alphabetically.
**Tutorial:** Assignment help: Open office hours for any students to get some
help with Visual Studio or with assignment of the week
* **Lecture 3: How to model a random stock process**
Introduce random processes (Brownian motion) and discuss ways to simulate a
simple stock process (log-normal model). Technical depth of this lecture will
be tailored to the audience.
**Assignment:** students use this knowledge to implement a simple stock model
based on some provided code.
**Tutorial:** Assignment help: Help students with understanding the business
facts and/or implementation details of the stock model assignment
* **Lecture 4: How to price options**
Discuss what options are and why people might be interested in them. Walk-
through an example of how to compute price and risks for options in a log-
normal model.
**Assignment:** students use this knowledge to implement simple stock pricing
on log-normal model based on some provided code.
**Tutorial:** Assignment help: Help students with understanding the business
facts and/or implementation details of the stock pricing assignment
* **Lecture 5: Requirements Specification & Analysis **
This lecture will introduce the course project and the majority of the
requirements. Instead of providing a completely formed specification, the
lecture will explain how users needs are turned into requirements which are
then turned into a specification
Topics:
* Use case analysis; how to interview users and understand their process needs, and how to understand the difference between what a user says they want and what they actually need
* What is a requirement? Functional and non-functional requirements
* Use cases : what these are and how to specify them
* UML - High Level UML Diagram.
* Business Requirements Documents : what they are and why they matter
* Present a partial BRD for the course project
**Assignment:** The provided BRD is incomplete. The assignment is to fill in
specific sections.
**Tutorial:** Meet the users & assignment help: Open office hours for
students to get help with the assignment. They will be able to interview the
"users" for the assignment system to clarify the requirements.
* **Lecture 6: Networking & Dependency Injection**
This lecture will be the first of 2 introducing the main technologies that the
students will need to implement their server(s)
* Dependency Injection
* The concept of the pattern and why it's a good idea
* Implementing DI using Unity
* Networking
* Networking and Web Service Basics
* TCP
* HTTP
* REST & SOAP
* ASP.Net Web API
* Example of creating a web service
**Assignment:** Given the interface for the market data system, write a dummy
client and server using Web API that communicate via a REST web service.
**Tutorial:** Assignment tech help: Tech and debugging help with the week 's
assignment
* **Lecture 7 Threading**
This lecture will be the second of 2 introducing the main technologies that
the students will need to implement their server(s)
* Threading basics: Processes, Threads, Concurrency, etc.
* .Net Threading Primitives
* Lock, Mutex, Semaphore
* Example of creating a critical section
* Creating Threads
* Performance
* ThreadPool
* Locking is bad: Double-Check locking pattern
* TPL
* What is the task parallel library?
* Example of using it to run jobs in parallel
**Assignment:** Modify last week 's assignment so that the client creates
concurrent connections to the server and the server code is thread-safe
**Tutorial:** Assignment tech help: Tech and debugging help with the week 's
assignment
* **Lecture 8: Testing and QA**
This lecture will introduce the concepts of testing and the overall quality
process
Testing
* Black box testing vs. white box testing
* Integration tests vs. unit tests
* Mocking
* Examples using MSTest and RhinoMocks
Quality
* How QA and development teams work together
* Documents / artifacts that developers and QA use to communicate
* Examples of how to write a test case from a user story
**Assignment:**
1. Write unit tests for the market data server interface and a mock that allow the tests to pass.
2. Write test cases for some of the requirements
**Tutorial:** Assignment tech and documentation help: QA and developers on
hand to help the students with the assignment
* **Lecture 9: GUI Design and HTML5 introduction**
The lecture will be the first of 2 introducing the concepts that the students
will need to build their front-end applications
* Wireframing and practical demo using Balsamiq
* Using wireframes to validate use cases and GUI requirements
* Introduction to HTML5
* The basics of HTML5 and web layout
* Javascript and AngularJS
**Assignment:** Create wireframes for the UIs for their application
**Tutorial:** Meet the Users: Review wireframes with "users" to ensure the
teams have met the requirements
* **Lecture 10: HTML5 Design Patterns**
This lecture will help the students understand how to build loosely-coupled
data-driven UIs in HTML5
* MVVM and Why Code Behind is a bad thing
* AngularJS Deep Dive
**Assignment:** create the UIs for the main project
**Tutorial: **UI technical help: Students bring in their UIs for help from
HTML5 experts****
* **Lecture 11: End-user documentation**
This lecture will teach the students about the kinds of documentation that
should accompany production software, with examples
* System and feature documentation
* Version Release notes
* Developer and Support Documentation
**Tutorial:** Project Help: Experts available to the students to provide any
help they need to prepare for the final presentations
* **Lecture 12 & 13: Project Presentations**
Individual 15 minutes project presentations.