Thursday, October 20, 2022

CST 438 - Week 8

5 important things I learned in the course



Software Engineering is not programming


One of the questions I had coming into this course was how software engineering is different from software development. I was already aware of the controversy over calling oneself an "engineer" as a software developer. While that issue may never be resolved, and the titles are often used interchangeably, I do see how there is a difference from a regular programmer and one who applies engineering principles to software development. Software developers write code just like software engineers, but "software engineering is programming integrated over time" (Software Engineering at Google). Software engineering focuses on project sustainability, scale, trade-offs, and costs (financial, resource, personnel, societal, etc.). This means that software engineers have a greater responsibility than just writing code and follow a different set of "best practices" than your average software developer.

Agile Software Development


As stated in my previous blog post, Agile focuses on continuous releases and frequent customer feedback, allowing dev teams to be flexible and able to adapt to changing requirements. Some of the key Agile concepts include user stories, daily meetings, small teams, incremental development (each version builds upon the previous version), and iterative development (redesigning previous work). The Agile lifecycle repeats itself throughout the product's life span. One of the tools I was exposed to is Pivotal Tracker. It allows dev teams to easily create and track user stories and also to gauge their "velocity," or speed of development per iteration. 

Full Stack Web Development


Another concept that I was eager to learn about is what exactly "full stack" development entailed. Now I know that it just refers to developing both the front and back ends of a web application. Some people may specialize in one or the other, but a full stack developer is knowledgeable in developing both ends. This course provided some really good practice in this area, from the Spring Boot back end (and its use of JPA/Hibernate to communicate with the database) to the React front end. I had heard a lot about React but never knew exactly what it is. Now I know it is just a JavaScript library created by Facebook that allows for easy front-end development. It was also interesting to learn about service-to-service communication using tools like RabbitMQ.

Code Testing


Testing is one of the most important parts of development. Although writing tests can be time consuming, shipping broken code is embarrassing and can result in people losing faith in your software. There are different kinds of tests ranging from small to large scale. I think learning about unit tests (with JUnit and mocks) was a really important concept because I see a lot of job listings that require experience with them. However, I actually had a lot more fun with the large scale, end-to-end tests (with Selenium). 

System Requirements Specification (SRS)


Although we were only assigned an abbreviated SRS, I think it was still good exposure to documenting technical requirements. An SRS focuses on "what the software needs to do and how it must perform." One of the parts we focused on was providing the framework for our use cases. This turned out to be useful to me because I recently had to read a technical document for my internship that spelled out use cases for the system under development. My exposure to SRS writing made me feel much more comfortable when reading through and understanding the document.

No comments:

Post a Comment

CST499 - Week 8

The End? I made it. This is my final week in the CS Online program here at CSUMB. I still have one final hurdle in the form of a mock techni...