I was recently speaking with one of the members in my Discord server about the nuances of learning Engineering. The best way to learn Engineering as a discipline is quite different from traditional teaching methods. This is probably why so many people in America struggle with STEM. For the purposes of this post, we’ll be using Software Engineering as an example.
Before we get started I’m going to make a distinction between Software Engineering and Programming. Programming is the act of creating programs. Software Engineering is about discovering a problem, designing how to solve that problem, and delivering a solution to that problem in software form. Programming is a part of software engineering, but it is not the whole thing. Also, Engineering is more like a style of thinking than a subject.
Traditional Teaching Methods
Think back to your school days. How were classes taught? Most likely you had a teacher stand in front of the class and talk about a subject, right? I’m a Natural Language Processing enthusiast so let’s use language arts as an example. You may have also seen this called “English” or “Literature” or whatever language you learned.
Imagine you’re back in literature class trying to pay attention to what the teacher is saying. She’s talking about something like the Themes in the latest book that you’re reading. What is she saying? Probably something like “a theme is the central idea of a piece of writing.” Then what does she say? “You can find the theme by …” or maybe “Make sure your writing has a theme,” or maybe “Themes are important to literature because …”
Now imagine I’m teaching you software engineering skills in Python in the same way. Let’s say we’re learning about functions. “A function in Python is a block of code that performs a specific task” – great now we know what a function is. “Make sure your code has functions” – yeah, pretty straightforward. “Functions are important to software engineering because they help modularize your code,” etc. How much do you really know about functions at this point? You know what a function is and what it can do, but do you know when to apply it? How to apply it? Where to apply it? Nope. So, overall, it’s pretty useless until you can a) see some examples in action and b) apply it yourself to a problem.
Motivation to Use the Tools
Another thing about learning, in general, is that learning is hard. Most people don’t want to do something hard unless they have the right motivation to do it. Why do you think so many people start coding classes and never finish them? Because they’re CODING classes. There’s no motivation to learn how to code except “oh I want a job as a software engineer so I can make more money”. This is fine if you’re making near minimum wage, but studies have shown over and over again that making more money beyond a certain point doesn’t make you happier.
Teaching the concepts (such as themes or functions) at the beginning is useful to introduce the subject, but totally useless when it comes to actually learning it. What am I going to do once I know what a function is? Nothing. Many coding courses treat you like a child and teach you all the concepts such as types, loops, and conditionals for hours at a time as if you need to understand the concept fully the first go around. That’s not how engineering works at all. Imagine if I were to teach you mechanical engineering and talked to you about a screwdriver for an entire course. You’d be bored out of your mind. What you need to really learn a concept is to have examples of it and be motivated to apply it on your own. Now that we know that, how can we achieve that?
What Works for Engineering
Engineering is a difficult discipline. It requires some level of motivation to continue learning this stuff. It also requires you to understand when, how, where, and why to apply the concepts. The easiest way to do this is through project based learning. Project based learning requires you, the student, to explore the topic more than just a traditional approach. That’s why PythonAlgos has only a few pages on concepts, and tons of posts about projects. We have simple projects for people just learning Python like the Super Simple Python sequences to more complex projects like Finding the Most Common Phrases on the Front Page of YouTube.
Let’s go back to the mechanical engineering example. In that case, instead of showing you a screwdriver and telling you what it does, I would instead show you an engine and say let’s take it apart. What do we need to take it apart? Oh, a screwdriver. That’s how you learn when, why, and how to use a screwdriver and where to apply it. As we go through more examples of engineering things, such as cars, planes, or a steering wheel, you would learn more about the applications of a screwdriver. Do you really need to know what a screwdriver is to use it? Do you need to know that a screwdriver is a piece of metal in a specific shape that fits well into the head of a screw? I think not, but I’ll let you decide.
Now let’s bring it together. Let’s bring it back to software engineering and programming. Programming is an engineering technique used to solve the problem of creating software. Let’s go back to functions. When you see enough examples you’ll eventually see how to use a function. You’ll learn what goes into a function, what it outputs, when to use a function, and where to use a function. I could sit here all day and explain that functions are used for modularization and each function should perform one task, but you won’t know what that actually means. No seriously, what do you learn from knowing that concept? What’s a task? When do I use a task? How does a task fit into an entire program?
So, in engineering, we can’t just know the concepts. In fact, the concepts are complex enough that it’s almost totally useless to know any more than the basics of the concepts. The only way to truly learn programming and software engineering is to do it yourself. The best way to start being able to do it yourself is to see examples, have the examples explained to you, and replicate the examples. After seeing enough examples, you should be inspired to extend the examples, that’s why not all of the posts on PythonAlgos are totally complete, there’s always things that can be added, and I always note those in the posts. Once you’re able to extend other people’s examples, you will be able to start creating and engineering your own programs. Once you’re able to create your own programs, you’ll be ready to be a software engineer.
I run this site to help you and others like you find cool projects and practice software skills. If this is helpful for you and you enjoy your ad free site, please help fund this site by donating below! If you can’t donate right now, please think of us next time.