As I am nearing the end of my software engineering course, I realized that the lessons and concepts that I learned extend far beyond simply just building web applications. When it comes to software development, there is much more to the field including the importance of collaboration and teamwork as well as the steps it takes to become a successful software engineer. I was able to develop a very strong foundation in software engineering that I can definitely apply in my future career. Among the many valuable concepts that I was able to explore, some of the most impactful include functional programming, coding standards, design patterns and open-source development. These lessons have not only enhanced my technical skills but also deepened my understanding of how much of a difference software can make in the world.
For instance, open source software development taught me the value of team collaboration and transparency when it comes to developing robust software. Contributing to open-source projects on platforms like GitHub requires using concepts such as coding standards and design patterns to ensure the code remains maintainable and understandable. GitHub has many features which enhance collaboration, such as pull requests, issue tracking, and collaborative workflows, fostering a productive environment for all developers enabling effective collaboration.
Agile project management is an approach to project management breaking down a very large overall project into smaller and more manageable parts. This method of project management is very flexible which is crucial as projects can be unpredictable and require changes to be made.For the project I am working on, ICStudy, which is a study buddy web application that allows user to create study sessions with other classmates and students, it was important to break the project down into smaller milestones with a deadline for each milestone. This is a method called Issue-Driven Project Management, a form of agile project management. As a team we identify issues that need solutions and create quality solutions to those issues. With IDPM, we can continuously monitor tasks, prioritize certain issues and everyone including the stakeholders can be informed of issues and the progress being made to address them.
Coding standards refer to the set of guidelines representing the best practices that developers should follow in order to write consistent, readable and maintainable code. These standards cover many aspects of software engineering whether it be naming conventions, indentation, code formatting and even documentation. By following these guidelines, it ensures that codebases are clean and organized, making it much easier for multiple developers to collaborate effectively.
My experience with coding standards was greatly shaped and reinforced by ESLint. Adapting to the demands of ESLint was a such a tedious task as I had to pay attention to details I had previously considered unimportant such as indentation, spaces and naming conventions. However, it built discipline and allowed my code to be much more understandable and maintainable which is crucial when it comes to collaboration. For collaborative environments, ESLint is an excellent quality control tool finding and marking significant divergences from established coding standards. This is wonderful, because it not only finds potential errors very early in the development process but also forces me, as a developer, to rethink and usually improve my construction of a more readable and maintainable structure.
Furthermore, I came to understand how ESLint’s role extends far beyond simply catching errors in my code; it actively promotes better coding practices. By following its suggestions, I learned to write not just cleaner code but more modular code, which reduced my debugging time and made my development process much smoother. While ESLint is primarily used in web application development, its principles carry over to many other types of projects, whether they’re frontend, backend, or something in between. Adapting to ESLint has improved my technical skills and also kindled a mindset in me to write professional-grade code that will remain functional and “as good as it gets” for the long haul.
The programming paradigm that is known as Functional Programming treats computation as something you get when you evaluate mathematical functions. In this view, you don’t have to change states, and you definitely don’t have mutable data to deal with. Functional programming emphasizes the use of pure and higher order functions that can lead to much more predictable and testable code. My experience with functional programming has required me to think much more declaratively, focusing on what to solve rather than how to solve it.
Although functional programming is mostly connected with web development such as JavaScript/TypeScript and React, it can also be used and beneficial in many areas. For example, when it comes to data science where you have to manage, analyze and transform data, functional programming can become a very powerful tool. By avoiding mutable states with functional programming, it allows you to transform complex data pipelines into much more predictable and reproducible data allowing for meaningful analysis.
Throughout my time learning software engineering, I have gained a very comprehensive understanding of the fundamental concepts that goes beyond just developing web applications. By exploring concepts such as Agile Project Management, Coding Standards or Functional Programming, I was able to learn how to manage projects more effectively, write higher quality and maintainable code which are crucial when it comes to becoming a successful software engineer. Additionally, the insights of open source collaboration highlights the importance of collaboration and community in creating innovative software. These lessons have equipped me with the skills and knowledge necessary to tackle diverse software engineering challenges and contribute meaningfully to the field. As I move forward in my career, I am confident that these foundational principles will guide me in creating impactful and sustainable software solutions.