Welcome to the Software Engineering mini-course!
There are tons of resources out there to learn high level concepts of design or coding but surprisingly few when it comes to understanding the basic practice of software engineering. It's the kind of information that's typically stored in the heads of hundreds of university professors and scattered across thousands of professional blogs but rarely seen roped together in one place. Most resources are either far too brief or much too deep for beginners to digest so they often learn to code without developing even a baseline understanding of engineering itself.
We want to make sure that you get the tools to be successful as a developer whether your goal is to build the next Google or just organize your dog-walking schedule online. That's why, in this mini-course, we're going to give you an understanding of the workflows, best practices, and problem solving techniques used by teams of professional engineers.
Learning these things will make you more effective as a developer regardless of either the type of project you're working on or the particular technology you happen to be using.
So what exactly is "engineering" anyway? In its most basic form, it's technical problem solving. With a few more words (as Wikipedia put it ):
Engineering (from Latin ingenium, meaning "cleverness" and ingeniare, meaning "to contrive, devise") is the application of scientific, economic, social, and practical knowledge in order to invent, design, build, maintain, and improve structures, machines, devices, systems, materials and processes
Software Engineering, more specifically, is the study and application of engineering to the design, development, and maintenance of software. Web applications are, of course, just a form of software!
During the coming lessons, we'll teach you the basics of software engineering in the context of broader engineering principles and then we'll show you how they are applicable to your work as a web developer.
We'll start by taking a look at the history of software engineering and some of the high level approaches and best practices that engineers use to solve problems of all sorts.
Then we'll dive into the processes that engineers use to manage real world software projects, especially those pioneered by the "Agile Development" movement to help make software development more responsive to customer needs. Understanding these things will make you a more effective teammate (if you'd like to step onto the job as an engineer) or help you to better structure and lead your own software projects (as a freelancer or entrepreneur).
Finally, we'll show you how to "logic" your way through problems using pseudocoding techniques (e.g. "whiteboarding") and how to use modular design and engineering best practices to structure effective solutions. Even if you already know how to code, approaching and solving problems this way will save you all kinds of headache in the long run and you should find some of these principles helpful.
As usual, our goal isn't to make you an overnight expert in software engineering but to give you what you need to apply the concepts effectively in the real world. We've mixed discussions of theory with lots of real-world examples and given you a chance to apply it yourself through assignments and a final project.
So, wait, why are we bothering to learn this stuff instead of just diving straight into the code?
Hopefully that's becoming clear -- engineering contains the kinds of concepts that extend beyond just code and into every other facet of product development, project management, programming and computer science. More importantly, you'll gain the tools that allow you to actually solve the software problems you'll face and then implement the solutions. At that point, turning them into code is the easy part!
If you're fired up to get started with your engineering education, check out "9 Things I Learned As A Software Engineer (that I wish I had known when I started grad school)" by Manuel Ebert via Medium. It's a useful set of epiphanies covering both software engineering in general and what it's like being a professional software engineer. The article should be motivating before you learn a bit more about what this mini-course will cover in the next lesson.