Instructor: Rahul Dave (IACS, mailto:firstname.lastname@example.org )
TFs: Head TF: Michael Lackner, Fuk Yeung, Sarah Mohammed, Sonu Mehta
Mondays 2.30pm - 4pm Lecture. Compulsory to attend. Pierce 209.
Wednesdays 2.30pm - 4pm Lecture. Compulsory to attend. Pierce 209.
Fridays 3pm - 4.30pm Lab. Compulsory to attend. Pierce 301.
How onerous is it?
What is this class about?
Computation has long been an important tool for scientists, but the past two decades have seen a true revolution in the practice of science. Computation, in the form of both simulation and analysis, has joined theory and experimentation as the oft-quoted “third pillar” of science.
This is an applications course highlighting the use of software engineering and computer science in solving scientific problems. You will learn the fundamentals of developing scientific software systems including abstract thinking, algorithmic development, the handling of data, and assessment of computational approaches: all in the context of good software engineering practices.
Why take this class?
If you are a scientist, data, physical, or social, this course will will expose you to key topics from language design and use, algorithms and data structures, and software engineering. You'll write better quality software, and be able to choose which technologies you ought to use on any given project, from its computing aspects to its data handling aspects.
If you are a computer scientist, this course will introduce you to good software engineering practice, especially in the context of scientific software development.
You should take this class if you want to be a good programmer or programming-capable member of your "company"'s data science team. Seriously, if you are not, you will be at a disadvantage compared to others.
Expected Learning Outcomes
After successful completion of this course, you will be able to:
Use Python, including its advanced features to write scientific programs
understand what features of Python (or for that matter any programming language) make up its language execution model and how these features impact the code you write: e.g. how modularity, abstraction, and encapsulation can be used to solve problems
write these programs with good software engineering practices
code data management techniques to store data, staring from a good understanding of data structures.
combine these techniques together to write large pieces of software (you will do a group project for this), working in a team of scientists, programmers, etc.
Be able to hit the road running as a scientist in a startup or other company, or for that matter in academia: you will be able to evaluate and test software to see which one your group ought to use. You will also be a capable unicorn: able to contribute on both the science and software engineering sides of things.
Who should take this class?
The prerequisite for this class is programming knowledge, in Python, at the level of CS50 and CS 109 (or above). Besides this, you should have interest or investment in scientific computing.
What is the structure of the class?
There will be three modules running concurrently, each focusing on an important area. These modules are "System and Software Engineering" (SSE), Language(LANG), and Data Structures and Algorithms(DSA). You will form groups and work on a project to write a time series analysis library and a time series website and database through the semester. This effort will exercise all three modules.