Software Engineering and đťť…

10 May 2023

Socrates

Humility

Socrates said, “The more I know, the more I realize I know nothing.” As a junior engineer who is only now beginning their journey through what I hope is a successful career, I am humbled by my limited knowledge. The wide range of capacities and skill sets found throughout engineering are as diverse as the depth of knowledge from which they draw their insights. Through my educational experience so far, the previously narrow definition of what I once considered to be software engineering has expanded. The discipline of being a “Professional Software Engineer” encompasses more than merely having proficiency in a particular programming language. Although strong coding skills are undeniably a component, software engineering also involves the myriad other tasks and details that make a project come together.

One Byte at a Time

Solving complex problems in software engineering requires a systematic and organized approach. By breaking down the problem into smaller, manageable parts, software engineers can better understand and address each component separately. This helps in identifying any potential issues or areas that need more attention. By taking it step by step, developers can avoid feeling overwhelmed and reduce the risk of getting stuck. Incidentally, breaking up a project like this also makes working with other developers on the project easier.

The Whole is Greater than the Sum of its Parts

When multiple people are involved in writing code for the same project, the need for close coordination quickly becomes apparent. Ensuring everyone’s contributions function correctly in the presence of everyone else’s code is central to the project’s overall success, and using some sort of configuration management to help in this task makes it much easier. As a project’s complexity increases it becomes necessary to find more effective ways of organizing everyone’s effort, and this is where project management comes in.

On-time Delivery

There are many schools of thought when it comes to project management style, but a popular one is Agile. This approach is best suited for small to medium-sized teams and emphasizes collaboration, iterative development, and the continuous stream of small incremental updates. Issue-driven development is another complementary style that involves keeping a backlog of issues from which a team can pull. Used in conjunction with agile in a hybrid between the two has proven to be an effective, less-formal method of getting everything done as a team. This workflow involved setting milestones and divvying up everything that needs to be done across all of the team members as issues.

The Bigger Picture

One of the more earnest points that my professors have attempted to impart upon their students is that being a professional engineer requires a serious consideration of how your work impacts the rest of the world. Being a professional engineer carries with it an implied responsibility to follow good ethics, hold safety paramount, and to minimize harm. Computers are so central to modern life that it is especially important for engineers who work in tech to be cognizant of the role they play in the world.