I want to be Software Engineer

06 May 2022

Throughout this semester I have learned that being a software engineer is not just if someone can code a good-looking website. This semester has allowed me to gain a glimpse of the many responsibilities and challenges that a software engineer goes through in their day-to-day lives, far from simply being a code monkey. Although knowing how to program will make you a good developer, understanding concepts such as version control tools and agile project management will make you a great developer.

Don’t be fast, be agile

When I was applying for software engineering internships I often saw “Experience working in Agile Project Management”, before taking my software engineering course I had no idea what it meant. Well, in short Agile Project Management puts an emphasis on producing apps efficiently. Instead of traditionally saying we expect x,y,z to be done by a certain date, agile project management essentially guarantees that something will be deliverable by the end of the date. These dates are typically split into “milestones” which can be anywhere from a week to two weeks. To accomplish this goal teams typically meet about once or twice a week in order to decide what the most important issues are and what issues need to be done to progress the project. Apart from learning a fancy new framework or programming language this was easily the most valuable lesson that I learned. It gave me an idea of what a job would be like as an engineer and gave me a newfound perspective on how to run projects in the future. Now, it’s not to say that agile project management is the one-stop solution to managing a team, after all each individual is different, customers needs can vary, and the type of project you are working on changes. However, I think this style of management will give you an idea of who is taking too long on tasks, who isn’t working on current tasks, and who is blocked from doing a certain task. One of the mistakes that I made while building a web application for my software engineering course was allowing some team members to work on tasks longer than they should have, slowing down the overall development of the project. I believe going forward I plan to timebox issues. These issues will be pushed within 3-4 days this way developers who may be too afraid or too prideful to ask for help or are busy that week can move onto other tasks that may fit their strengths.

Git’ting together

Collaboration is one of the most important parts of programming. Very rarely will you be working on projects alone in the real world. This means that we need to find some sort of way for us programmers to work together without stepping on each other’s toes. In comes Git, which seeks to solve exactly this problem. Git allows multiple people to simultaneously work on the same project. It does this by allowing teams to add (merge) code to the project. If there are conflicts between your changes and those of other team members, then it will notify you of merge conflicts. This is the single most important tool for a successful software engineer. Understanding this skill will allow you to also work on public projects. Git also allows you to upload projects to GitHub, which allows developers to show off interesting and unique projects to the world. I plan to use Git on not just programming projects but other non-programming-related projects as well, which will allow me to show them off to potential employers.

To be continued…

Now that this semester has ended I have gained the tools to program a nice looking web app using meteorJS, ReactJS, mongoDB, and CSS. However, I think that the most important takeaways were learning how to work effectively with other programmers. I believe that you can always learn a programming language or pick up a framework, but learning to work on different teams poses a larger challenge than one may expect. This was the first time I have ever worked on a team for a school project, and I can say that using Git and Agile Project Management made it go more smoothly than I was initially thinking. Git allowed our team to not overwrite each other’s code when different members were working on different versions of our project. Agile project management allowed us to know which team member was working on what task and we could easily determine which tasks needed to be completed first. Overall, I think that I will be taking a lot of the skills I learned in this course to not just my programming career, but I may also incorporate some of these skills into other group projects not related to programming.