Project Outcomes:

It seems only fair to try to articulate what I am hoping you will learn from this modeling/coding project. My intended outcomes for this part of the course fall into three (3) general catagories. There are the physics modeling outcomes -- can you create an appropriate numerical description of a physics process that is too complex for our basic analytic tools from calculus based physics. There are the actual coding skills I would like you to gain so that you aren't starting from scratch in the many places coding might well become part of your career. At a minimum you are likely to encounter applications like MATLAB during your academic career and that is coding as well. Finally I want to send you out into the world with documentation skills using LaTeX (or markdown languages in general) which are a common tool in creating technical documents in engineering and science.

Physics/Engineering Modeling:

As I often go on about, many of the really interesting problems in our modern world are too complex to be able to write a clean (analytic) mathematical solution for. Computational models are a typical way to address these meaningful but challenging problems. Finite Element Analysis (FEM) is one form of computational analysis. There are fluid flow models and applications like SPICE for electronics. It's literally everywhere. Here are the skills I intend for you to demonstrate through your project:

1) Simplification: Demonstrate that you can take a complex physics/engineering setting and reduce it to a very simple form without losing all relevance. Then write code to implement this simple model and validate it (check) against experiment or data.

2) Iterative Solutions: Demonstrate that you can attack a physics/engineering problem using an iterative model. This means you determine the characteristics of the system of interest at one moment or location in time and then predict where the system is a little later(further on). Repeat the analysis from the new state of the system and predict forward again.

3) Multiparameter dependence (optional):Demonstrate that you can begin to address the dependence of your model (almost always the case) on a range of parameters. The friction may range from 0.1 to 1.0, the initial speed or angle can vary, and the direction of the wind. A key value of numerical models is the ability to explore, with relative ease, solutions for a whole range of conditions.

Physics/Engineering Coding Skills:

Coding is exactly like learning a new langauge and like a language there are a variety of ways to learn it. One way is to take a series of courses and work your way through until you have some level of mastery. Works well. On the other hand, if you're going to Spain in a month that's not going to work so well. What do you do? Well, if you have a little experience with the language (you can read and write the words and pronounce them) you can figure out what you absolutely need to be able to say and just learn that. Not as useful as being fluent but it will work. To do the second solution you it sure helps to have some basic understanding of the sounds and letters. That's what we're actually trying to do here. Help you learn some of the very basic features of python (which is very similar to other coding languages) so that you can at least read code and have some understanding of it's structure. We're not aiming for fluent we're just want to be able to ask where the airport is and how much something costs. Here are the skills I intend for you to demonstrate through your project:

1) Accessing Libraries: In almost all coding languages somebody else or a team have developed a set of useful commands ease the burden of doing some family of operations like plotting or statistics. In python we will import various libraries that are typically used to create physics and engineering models. You will demonstrate that you know how to do this and which libraries are needed..

2) Basic Calculational Programming (Implement a simple algorithm): In the simple physics model you will create you will need to perform calculations like you have done in physics. Using a formula from kinematics or electrostatics to arrive at an answer. You will learn how to create variables and assign them values that are used in your calculation. You will learn how to communicate the result of those calculations to the user. You will demonstrate these skills in the first model you build for the project.

3) Loops, Vectors, and Iteration: The next coding tools you will learn have to do with the implementation of an iterative solution for your model. To redo the same calculation over and over again as your model moves through space or time requires the use of loops in some form and 'vectors' or lists which are an effective way of tracking the results of your repetitive calculations. You will demonstrate these skills in the second version of your model.

3) Debugging strategies: There are a host of metaphors that I'm tempted to use to explain why debugging the things that don't work in your code is the way it works for almost everyone. Construction metaphors, relationship metaphors, or cooking metaphors. Let's just say that when most of us code we always make mistakes. The greater question is how to notice those mistakes and then figure out what is actually wrong. Volumes have been written about debugging and I will introduce you to my very direct way of sorting out what I have done wrong. I wouldn't be surprised to learn some new strategies as we go though. You will demonstrate these skills in all of your Jupyter notebooks by leaving your debugging tools embedded in your code but commented out.

3) Plotting: Engineering and physics would be lost without plots. Another valueof having some coding skills is that you can produce plots that make Excel whimper in the corner. Once you start generating iterative data in your model it will make sense to be able to plot various features of your model. You will demonstrate the ability to plot data in the Jupyter notebook containing the iterative model for your project.

Documentation Skills:

I know I go on about it all the time but it's a real thing. We all work in environments where the work that do will be passed on to someone else in the future. It may seem like any fool could understand the fabulous engineering model you wrote but my experience is that I am often unsure of what my own code means a year after I wrote it. Documenting what your code is doing in language that is broadly understandable is just good practice. In the world of STEM that you are participating in this includes the need to be able to create beautiful documents with formulae and images and plots. Here are the skills I intend for you to demonstrate through your project:

1) Embedding Math: In each of the stages of your project you will need to represent the mathematical model you are using in the descriptive part of your notebook.

2) Embedding code: In each of the stages of your project you will need to discuss and describe the code you have written in your notebook. Describing the code is done in the markdown cells as well as in the actual python code.

3) The usual highly effective technical communication: Each of your notebooks will be evaluated against a ridiculous standard for good technical communication.