Software engineering is about more than just the language. They come in all shapes and sizes.
What is Software Engineering?
Software is about helping people. Without people, software is useless.
Businesses are in the business of providing value for their customers, and value for their shareholders.
Therefore they want the process of building software to be as efficient as possible.
But what does this mean?
Time ⇔* Money
* Logical equivalenceExcept a year from now when you tried to change something and it brought down your entire production environment. 🤷
That old thing you said you would fix up real soon that led to a bug in production.
fn call_api(params) -> Result<bool, Error> {
// TODO make this work
unimplemented!()
}
Things such as:
Are process inefficiencies, mitigated by adhering to a process such as Scrum. But more on this later.
Facts of Life in Software:
Write software that someone with absolutely no experience with the code can quickly and confidently understand and modify.
Keep It Simple, Stupid
Probably one of the most crucial guarantees an engineer has that his/her time has produced something of value.
All with their own unique pros and cons.
#[test]
fn it_works() {
assert_eq!("Hello", "Hello");
}
Testing a single unit of code. Usually a single function. Very cheap for both developer and execution overhead.
Tests integration between two modules of code. Usually requires some external dependencies and/or services to be running.
Gives you good assurance. Medium time/maintenance cost.
Performs an entire test of the system from beginning to end. Usually follows critical paths that must be assured for the software to be considered functional.
Quite brittle.
The goal of source control is to simplify multiple developers working on the same codebase.
Includes features such as:
Valuable feedback, important to get a second or third opinion on implementation.
A must have when working with software with multiple people. I have personally not worked on a single project without using Git in some capacity.
Go sign up for free.
Software moves fast. Getting it to the customer should be the same.
Deploying code should be as pain free as possible.
Won't spend much time, basically a combination of the above, with more soft skills.
Then why do we do it?
Agile Methodologies: Scrum, Kanban, extreme programming
Agile Practices: TDD, BDD, Pair programming
And, that's about it!
If you're able to nail those things within your organization, you're well on your way to building reliable, maintainable software, without spending a lifetime, nor an arm or a leg doing it! 👍
Software is fun, challenging, and you will be constantly learning.