Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fse 2024 fall #120

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ expect from the core classes from the ECE and CS programs at CMU.
- [18-640: Hardware Arithmetic for Machine Learning](electives/18640.md)
- [18-647: Computational Problem Solving for Engineers](electives/18647.md)
- [18-652: Foundations of Software Engineering](electives/18652.md)
- [18-656: Functional Programming in Practice](electives/18656.md)
- [18-660: Optimization](electives/18660.md)
- [18-661: Introduction to Machine Learning for Engineers](electives/18661.md)
- [18-665: Advanced Probability & Statistics for Engineers](electives/18665.md)
Expand Down
13 changes: 7 additions & 6 deletions electives/18652.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
| Project | 8 |
| Exams | 4 |

The course is taught by Professor Cécile Péraire and Professor Hakan Erdogmus. It is the core course of MS in Software Engineering program. The course focuses on software engineering practices and has a semester-long course project. The course is project-based, which intends to give you a good understanding of how software engineer works. To be specific, you will learn lots of practices for software engineering, which then you will apply to your group project. It is going to involve a lot of collaboration. The requirements are given every fortnight. It is going to be very time consuming. This course will provide you a good foundation to take Software Engineering Methods and Software Design and Architecture in your future semesters. Having good communication skills and time will make your life easier. :)
The course is taught by Professor Cécile Péraire and Professor Hakan Erdogmus. It is the core course of MS in Software Engineering program and taught in-person in the Silicon Valley campus. The course focuses on software engineering practices and has a semester-long course project. The course is project-based, which intends to give you a good understanding of how software engineer works. To be specific, you will learn lots of practices for software engineering, which then you will apply to your group project. It is going to involve a lot of collaboration. The requirements are given every fortnight. It is going to be very time consuming. This course will provide you a good foundation to take Software Engineering Methods and Software Design and Architecture in your future semesters. Having good communication skills and time will make your life easier. :)

## Topics covered

Expand Down Expand Up @@ -34,9 +34,9 @@ There are (videos or readings) and a quiz every week, a Final, and a group proje

## What to expect

- **Ramp-up Project**: There is a small individual project required before the start of the semester. The project is mandatory in order to be enrolled in the course. You are required to build a FSE chat room and get yourself familiar with the tech stacks to be used in the later project. Tech stacks requirements: ES6, Express (a node.js backend framework), frontend frameworks are forbidden (libraries are allowed).
- **Ramp-up Project**: There is a small individual project required before the start of the semester. The project is mandatory in order to be enrolled in the course. You are required to build a FSE chat room and get yourself familiar with the tech stacks to be used in the later project. Tech stacks requirements: ES6, Express (a node.js backend framework), frontend frameworks are forbidden (libraries are allowed). This project willl be worth 5% of your final grade.

- **Project**: The requirements of the projects are almost fixed: you are required to build a web service (Emergency Social Network) in a group of 3-5 (almost random team placement). There are 5 iterations in the project and each iteration requires 2 demos with the TA. Different software engineering practices are required in each iteration. The project takes up a large part of the grade (the percentage might be different every year) and this grade will be peer-evaluated.
- **Project**: The requirements of the projects are almost fixed: you are required to build a web service (Emergency Social Network) in a group of 3-5 (almost random team placement). There are 5 iterations in the project and each iteration requires 2 weekly demos with the TA. Different software engineering practices are required in each iteration. The project takes up a large part of the grade (45% as of 2024) and this grade will be peer-evaluated.

- **Video Lectures**: The course takes a flipped classroom format, which means that you are required to watch the corresponding video lectures before the in-class live session.

Expand All @@ -47,12 +47,13 @@ There are (videos or readings) and a quiz every week, a Final, and a group proje
## How to do well

- The project takes a huge part of this course, so arrange yourself enough time and be proactive for the project. Also remember to be professional as the random team placement will make the team's working environment similar to the real work place.
- Your project grade will be based on peer evaluations, so be nice to your teammates and contribute your fair share to the project. The survey is conducted twice, both mid-semester and at the end of the project. If you go far and beyond based on your team member reviews, you will get extra points.
- Prepare as much as you can in the ramp-up project. The timeline for the course project is pretty tight and it helps to learn the required tech stacks before the course start.
- Don't miss any part of the course (video lectures, quizzes, activities...).
- Attend every class. Make sure you do every quiz. There are quizzes in the class and outside the class.
- Prepare your mind to work in team. Try to develop positive relationships with your teammates. Have empathy for your teammates. There will be a lot of decisions to make in the project so there can be disagreements and frustration, so it is better to prepare your mind to be willing to collaborate with others.
- Try to keep your code clean because requirements will be more and more difficult, so if your code is unorganized it will be twice as heavy.
- Around Week 7, there will be a paired programming project, where you are not allow to write code by yourself for your group project. You need to partner with one of your teammates, and perform pair programming.
- Around Week 9, you will have to design and implement your own feature, which will be graded individually. There are a couple of challenges here. Your teammates are not allowed to help. Several people will work on the same code base which is extending divertly, because everyone has their own features. Later on you also need to merge the diverging code back together.
- The Final exam will be about topics you learn in class, lots of software design, and lots of UML drawing.
- Tip: Be nice with your TA. They will have to review your project every week.
- Around Week 9, you will have to design and implement your own feature, which will be graded individually (worth 15% of your final grade as of 2024). There are a couple of challenges here. Your teammates are not allowed to help. Several people will work on the same code base which is extending divertly, because everyone has their own features. Later on, you also need to merge the diverging code back together.
- The Final exam will be about topics you learn in class, lots of software design, and lots of UML drawing. Pretty much everything included.
- Tip: Be nice with your TA. They will have to review your project every week.
26 changes: 26 additions & 0 deletions electives/18656.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# 18-656: Functional Programming in Practice

| Category | Difficulty |
|:-: | :-: |
| Assignments | 5 |
| Exams | 5 |
| Project | 7 |

This course is taught in-person in Silicon Valley campus by professor Rafal Wlodarski as of 2024. It's one of the core courses for MS Software Engineering program. This course is an excllent choice if you need a pradigm shift from imperative languages to functional or want to undestand functional programming fundamentals and applications. The language used in the course is F# and since dotnet framework is cross-platform, you won't need Windows OS. It'll be a bit challenging at the start to adapt your problem solving approach from imperative to functional, especially if you don't have any prior functional programming experience.

## What to expect

- **Assignments:** There are 3 indivisual assignments which combined are worth 10% of your final grade. The assignments themselves are not that difficult if you adapt your thinking to functional. One major challenge to achieve this, is that you are not allowed at any point during this course to use general conditional statements like if-else statements or loops, but rather you need to use functional constructs. Violating this, has a penalty and causes you to lose points on the assignement.

- **Exams:** The mid-term exam is going to be more difficult than the final, carrying 25% weight of the final grade. The materials after mid-term are excluded for the final exam and preparation for the final shouldn't take you more than half-a-day. The final exam will be worth 15% of your final grade and may contain tricky questions.

- **Project:** By mid-term, you should've mastered the functional programming fundamentals and ready to tackle the proejct. The project is a team effort (3-4 people) and you will be able to choose your team members. The project is about identifying arbitrage opportunities in the context of crypto currency exchange and is done in 4 iterations of two-weeks long. Each iteration deliverable is called a milestone. The milestone 1 is the project's detailed design document using Domain Driven approach. Milestones 2-4 are pure programming and in each iteration, you need to deliver a major functionality of the sytem. As usual, you are not allowed to use imperative control flows such as if-else or loops. The last milestone will be about performance and your team's project is rated in relation to the fastest team. The project will be worth 40% of final grade and also at the end of the course, there will be peer review survey which can afftect your score based on your contribution to the project.

- **Individual Persentation:** Every student will have to do a presentation on a related topic for 4-7 minutes. It'll be worth 5% of your grade.

## How to do well

- As usual, start early. However, this course in general won't take too much of your time so would be a good choice to balance your schedule if you have taken heavy courses.
- Be active in the class, the instructor will ask lots of questions during lectures. The course has a maximum of 4% participation bonus, so take advantage of it.
- Setup your environment properly from the start and get familiar with organizing your project in the context of namespaces and modules. For individual assignments, this is easy to neglect but
it'll save you valuable time during the final project.