01. Practical Programming for Engineers - Lesson 1.01: PhilosophyHello, welcome to practical programming for engineers, a course presented by SAGA Wisdom and myself, Derrick Turk, founder and president of Terminus Data Science LLC. We'll begin with Chapter I: Philosophy and Praxis. In this chapter, we'll discuss the philosophy and goals of the course as well as some of the practical matters we need to attend to in order to begin programming the way professional programmers do. In the first lesson, Lesson 1.1, we'll cover the course philosophy.
02. What's this course about?What is this course about? This is, in fact, a course about programming, but not a course about computer science. It's an important distinction; computer science is the academic discipline which studies computing, programming, the possibilities of computing in the physical universe, in other words, what sorts of problems we can solve with computers in the study of algorithms, data structures, programming languages from a theoretical standpoint. This is a course about programming, rather, as an engineering discipline; the problem of designing software to accomplish real-world tasks. This is furthermore a course about practical programming for engineers. The sorts of programs we are going to write in this course pertain to realistic engineering problems. It is a course about seeing these engineering problems as programming problems, and in turn, understanding the problem of programming as fundamentally an engineering design problem. So in this course, we will use these principles to begin programming like an engineer. This is not a class about the Python programming language, but you will learn some Python and in fact, some computer science along the way. It's important to understand that this is not an introductory programming course. If you've never programmed in Python before, or especially if you've never programmed in any programming language before, this may not be the course for you, but I would encourage you to stick through the first couple of lessons and see how you feel. We will be doing some amount of Python review and in fact, we'll be reframing the basics of Python in a way you may not be familiar with, even if you have taken a previous course.
03. There is no magic, only engineeringThe mantra for this course is the following: there is no magic, only engineering. Too often we teach programming or computer science as a feel that is magical. We memorize arcane incantations like wizards, learning a spell book, but we don't develop a proper understanding of how and why we write programs the way in which we do. The goal of this course is to deconstruct some of the magic to demystify programming and reveal that it is just an engineering problem underneath.
04. About meA little bit about me: I'm a mechanical engineer by training, I have worked prior to becoming a consultant in reservoir engineering for most of my career and a programmer and data scientist by choice. My business, Terminus Data Science LLC, helps organizations solve challenging problems using data-driven techniques. The goal is to turn the data that we are all accumulating into information that drives better business decisions. Sometimes that means using machine learning, sometimes that means developing custom software to automate engineering tasks, and sometimes it means advising the client to look at the problem in an entirely different way. More salient to this course I've built software systems, many, many software systems across the years in many different languages for many different platforms and in several different industries, everything from traditional E&P to pure technology. I've worked on things ranging from economics simulations to decline curve analysis, to completion optimization, to the design of custom programming languages. I am also very, very reliable at betting on the wrong horse technologically. So you'll catch me at some points during this class making prognostications about the future, which you should absolutely take with the grain of salt. This is an opinionated course; that's just the way I think this has to be. I view programming as a craft as much as it is a science and so part of the fun of it is that there is a bit of personal taste in opinion that gets to creep in.
05. My goals for this courseMy goals for this course: so I truly believe that one of the defining features of engineering in the 21st century will be the requirement to make use to the fullest possible extent of the digital computer. That sounds like a funny thing to say in the year 2020 when the PC era has been going on for a solid 40 years or so in engineering. But the truth is I believe that most engineers still do not make full use of the capabilities of general-purpose computing. In particular, they don't embrace programming as an engineering discipline. The entire point of the general-purpose computer, it's right there in the name. It's a general-purpose machine; it can solve any computable problem, right? We can write a program to do anything on our laptop that you can do as far as we know, in any formal system, any computing machine, anywhere in the universe. That's pretty remarkable when you think about it and I feel that engineers don't fully embrace that. So in this course, I hope you discover the utility of programming for practical problem-solving. I hope you discover a new way to look at problems and solutions. And I hope you see a little bit of both the art and the science of software engineering. Most of all, I hope you lead this course with the ability and desire to learn more. This is a broad and a deep feel and we can only scratch the surface in the short course.
06. Boring 'course objectives' for you bossOK, all that said, if you've got to give a list of bullet points to justify your participation in this course, here we go. This is all true and these are very boss-appropriate course objectives. So in this course, we're going to learn to apply software engineering skills to business problems and engineering challenges. We'll understand software engineering as a proper engineering discipline and programming as a tool for engineers. We're going to learn to create reliable and robust software solutions to engineering problems. And we'll learn how to share our engineering knowledge with others in the form of reusable code libraries. This will involve using the tools of professional programming and software engineering, including tools like type checkers and automated testing for helping us ensure the correctness of our programs before we run them. We'll also learn to manage complexity, the greatest enemy of software engineers, through techniques like functional decomposition and data-driven design. And we'll also deal with some of the nitty-gritty practical aspects of writing fast and robust code to solve numerical problems which we face in engineering.
07. Your role in this courseYour role in this course is just to learn, so please let us know if that's not happening for any reason. Respect fellow students, the instructor, and yourselves, and most of all, have fun, don't stress, and take things at your own pace.
Founded in 2013, terminus provides consulting, custom software, workflow automation, and training for the energy and investment communities.
We enable our clients to achieve maximum return on investments by understanding complex relationships embodied in data and extracting critical understanding that will drive better decisions.