Practical Programming for Engineers

The 21st century petroleum engineer faces new and extraordinary challenges. They must learn to do more with less, solving ever-more-difficult problems with limited resources, in the face of a highly dynamic industry and market. The skillful use of our era's most defining invention---the general-purpose computer---is the most powerful force multiplier an individual engineer can bring to bear. This means embracing computer programming as an engineering discipline and a core competency.
Engineers and other petroleum technical professionals are uniquely well-equipped to learn programming skills, the same way as any other engineering discipline: from the fundamentals. In addition to empowering the individual engineer, programming is also the first step on the path to learning data science, machine learning, AI, and other emergent disciplines at the intersection of engineering, statistics, and computing.
In this course, students will advance their existing programming skills to a more sophisticated level by tackling challenging real-world case studies, in which we'll solve engineering and business problems together by designing and building useful and robust software systems. This is a course about programming as an engineering discipline. Students will learn how to translate business challenges into programming problems, and in turn solve these as engineering problems. This is not a Python language class or a theoretical computer science class, but students will learn some advanced skills in these areas along the way.
This is a practical, goal-oriented class. The overall objective is to teach engineers how to take their software design and development skills to the next level, working the way professional programmers work, primarily through case studies and instructor-led coding sessions. Among other case studies, we'll automate tedious engineering calculations, develop flexible tools for decline-curve analysis, and construct a sophisticated system for probabilistic assessment of project economics.
Upcoming course. Stay tuned by joining our Mailing List.
Chapter 1 – Philosophy and Praxis
1.01 Philosophy
1.02 Praxis I: The Command Line
Quiz
1.03 Praxis II: Version Control
1.04 Praxis III: Text Editors
1.05 Praxis IV: Python
1.06 Praxis V: Python II
Chapter 2 – Python Review & Programming Like and Engineer
2.01 Python Review
2.02 Functional Python
2.03 Programming Like An Engineer I: Games For Computers
2.04 Programming Like An Engineer II: Types in Python
2.05 Programming Like An Engineer III: Testing in Python
Chapter 3- Functional Decomposition
3.01 Case study introduction: volumetric reserves estimation
3.02 Functional decomposition
3.03 Case study live coding I
3.04 Python miscellany: I/O, iterators, "code sandwiches"
3.05 Case study live coding II
Chapter 4 – Numerical Code in Python
4.01 Batteries Not Included
4.02 Numpy in a Numpshell
4.03 Live coding: volumetrics with numpy
Chapter 5 – Data-Driven Design
5.01 Case study introduction: Monte Carlo economic analysis
5.02 Dumb Code, Smart Data
5.03 Case study live coding I
5.04 Arboriculture 101 & Intro to Fake Randomness
5.05 Case study live coding II
Chapter 6 - Interfaces Over Implementations
6.01 Case study introduction: decline-curve analysis
6.02 (Runtime) Polymorphism and the Essence of Object-Oriented Programming
6.03 Case study live coding I
6.04 Generics are Cheaper: Static and Dynamic Polymorphism
6.05 Case study live coding II
Chapter 7 - Language-Oriented Programming & Parting Thoughts
7.01 Case study introduction: querying our economic simulation
7.02 Parsing, Hyper-abridged
7.03 Live coding I: a minimalist parser combinator library
7.04 Designing a DSL
7.05 Live coding II: build a DSL parser
7.06 Live coding III: interpret the DSL
7.07 Parting Thoughts I: The Python Ecosystem
7.08 Parting Thoughts II: Programming Beyond Python
7.09 Parting Thoughts III: Everything That Rises Must Converge (The Future of Data Science, ML, Programming, and Engineering)
Chapter 1 – Philosophy and Praxis
1.01 Philosophy
1.02 Praxis I: The Command Line
Quiz
1.03 Praxis II: Version Control
1.04 Praxis III: Text Editors
1.05 Praxis IV: Python
1.06 Praxis V: Python II
Chapter 2 – Python Review & Programming Like and Engineer
2.01 Python Review
2.02 Functional Python
2.03 Programming Like An Engineer I: Games For Computers
2.04 Programming Like An Engineer II: Types in Python
2.05 Programming Like An Engineer III: Testing in Python
Chapter 3- Functional Decomposition
3.01 Case study introduction: volumetric reserves estimation
3.02 Functional decomposition
3.03 Case study live coding I
3.04 Python miscellany: I/O, iterators, "code sandwiches"
3.05 Case study live coding II
Chapter 4 – Numerical Code in Python
4.01 Batteries Not Included
4.02 Numpy in a Numpshell
4.03 Live coding: volumetrics with numpy
Chapter 5 – Data-Driven Design
5.01 Case study introduction: Monte Carlo economic analysis
5.02 Dumb Code, Smart Data
5.03 Case study live coding I
5.04 Arboriculture 101 & Intro to Fake Randomness
5.05 Case study live coding II
Chapter 6 - Interfaces Over Implementations
6.01 Case study introduction: decline-curve analysis
6.02 (Runtime) Polymorphism and the Essence of Object-Oriented Programming
6.03 Case study live coding I
6.04 Generics are Cheaper: Static and Dynamic Polymorphism
6.05 Case study live coding II
Chapter 7 - Language-Oriented Programming & Parting Thoughts
7.01 Case study introduction: querying our economic simulation
7.02 Parsing, Hyper-abridged
7.03 Live coding I: a minimalist parser combinator library
7.04 Designing a DSL
7.05 Live coding II: build a DSL parser
7.06 Live coding III: interpret the DSL
7.07 Parting Thoughts I: The Python Ecosystem
7.08 Parting Thoughts II: Programming Beyond Python
7.09 Parting Thoughts III: Everything That Rises Must Converge (The Future of Data Science, ML, Programming, and Engineering)
© 2021 SAGA Wisdom