A115 Software Engineering

Bespoke cloud-based software platforms powering UK commerce since 2010

Re-introduction to Python - part 0. What makes a good software engineer?

As with any other skill, it is not possible to master software engineering with Python in a few lessons. Learning typically takes years of dedication and practice, as you encounter different situations and gain confidence along the way in your ability to relate a new problem or challenge to something you already know.

The purpose of this training is to provide a fast-paced, hands-on exploration of modern software engineering with the Python programming language. Some basic familiarity with programming concepts and Python itself is assumed, although most concepts are introduced in beginner terms. Even if you have more substantial experience with Python, the beginner perspective offered here will be beneficial, because it places (or "re-introduces") common programming concepts in the context of a much broader framework of software engineering principles for structuring large-scale, production-quality code. So please, do not get offended when you run into material that you already know. Try to approach it with a beginner mindset and learn it afresh. It is so important to master the basics.

You will be doing a fair amount of independent learning and research, as part of this course, while the text points the way and gives you some context from the point of view of industry experience.

By the end of this training, regardless of how much you actually learn about Python itself, you will have a foundation and a good measure of clarity on how to go about expanding your knowledge and your skills in the directions that matter to you.

Good software engineers are rarely made. The ones I've worked with tend to be self-made. They are good because they are curious. They are driven from within to ask questions, to explore, to try new things, to build, to create and to take things apart just for kicks. The like to improve, to automate, to simplify, to generalise, to avoid repetition, to save time. You won't often see them memorising complex algorithms or the answers to common interview questions. But you will hear them talk about the "elegance" of a solution, or the "beauty" of a piece of code. These concepts are, of course, subjective - but once you have done a certain amount of solution-finding on your own, you will find yourself with your own natural feel for what "beauty" and "elegance" mean in this context.

Good software engineers are more like artists than other engineers. While they do know their stuff, they also tend to be a little lazy.. which turns out to be a good thing, because it drives them to always strive to automate things, to reuse and repurpose existing tools and solutions, so they don't have to do much manual work over and over again.

But most importantly - even when they don't have the answer or the solution - they feel confident that they know where to look for it.

In school, perhaps you were encouraged to work independently and not to copy other people's work. I kind of want you to forget that for now. Ask questions. Talk to people. Study their work. Copy it. Adapt it. Make it your own. Share yours. Get feedback. Find great solutions online and reuse those. But also do your best to understand how they did what they did and why it works. And always ask yourself - could there be a better way of doing that?

There is rarely one perfect, ultimate solution. In practice, you will find that your problems (or your clients' problems) are so unique and specific that once you understand all the constraints and requirements, you may be able to find various shortcuts or modifications to common solutions that fit better or are easier to implement. The key to doing that is understanding what actually matters in each case. How important is speed for this particular situation? How important is resource utilisation (e.g. memory usage)? How important is it for your solution to address all possible inputs, as opposed to a certain subset of inputs? The answers to questions like these vary greatly and they end up guiding your approach more effectively than textbook patterns and algorithms.

In the first part, we are going to dive straight into the essence of what computer programming is all about, exploring data types and variables.

You will notice each lesson has questions and exercises at the end. These are as important, if not more important than the actual text of the lesson. Make sure to do your best to answer all the questions and complete all exercises to the best of your ability - working either individually or in a team. In later lessons, you will also notice that there is less text and more questions. This is to encourage you to do your own research and build up your confidence.

Make sure you are having fun! It is the best way to learn (or to do anything, really.) And here is one more tip: the best way to make sure you understand something is to explain or teach it to others. So if you can, help someone out.