Category Archives: CS-348

Understanding Software Development Methodologies

The selection of an appropriate development methodology is important in every software project. The article “Top 4 Software Development Methodologies” by Mike McGuire provides a brief overview of the principles of Agile, Waterfall, RAD, and DevOps. Each methodology has unique strengths and challenges, making them suitable for different scenarios.

Summary of the Article

The article discusses four of the most commonly adopted methodologies in software development.

Agile Development Methodology: Agile emphasizes iterative development-release of functional software increments frequently for greater efficiency and customer satisfaction. While Agile is great in adapting to changing requirements, it requires high commitment and communication.

Waterfall Development Methodology: Waterfall is a traditional and linear approach that fits projects with clearly defined objectives and stable requirements. It’s easy to understand but can be slow and inflexible.

Rapid Application Development (RAD): This approach emphasizes rapid iterations with a minimum of overheads and hence is ideal for small to medium projects with well-defined objectives. RAD does, however, depend on experienced teams and well-defined user requirements.

DevOps Methodology: DevOps is rather a concept and culture than a methodology; it ensures collaboration across development, QA, and operations. It emphasizes automation and reliability, but challenges include adapting to continuous updates and regulatory constraints.

The article also introduces DevSecOps, which is a newer iteration of DevOps that integrates security in every step of development. This ensures that speed and safety go hand in hand in the production of software.

Reflection and Learning

Reading this article made it quite clear how much the development methodologies rely on the project’s aims and the team’s functioning style. For example, the very adaptability of Agile stresses its applicability in a strongly changing environment, while Waterfall’s structured approach is suited for projects with fixed requirements. This understanding helps me anticipate which methodology might be most effective in various situations.

What really caught my attention was DevSecOps, the integration of security into the development pipeline. This again highlighted the importance of embedding security practices early, as emphasized in some course works on secure software design. The move to collaboration and automation in DevOps and DevSecOps reflects changing demands in the software industry.

I have faced difficulties in projects where methodologies were not clearly defined, which resulted in wastes and miscommunication. This article shed light on how methodologies such as Agile and DevOps could minimize such occurrences. In the future, I will adopt the Agile practices in team projects to be more adaptive and productive. I also want to study DevSecOps in detail, as it aligns with my interest in developing secure and reliable software systems.

Application to Future Practice

Knowing such methodologies empowers me in informed decision-making while managing or taking part in software projects. I now know that while selecting Agile for its flexibility or Waterfall for clarity, I will understand how methodologies drive the outcomes of a project. The emphasis on security in DevSecOps inspires me to give top priority to secure coding practices in these present times when technology has gained center stage in our lives.

Citation

McGuire, M. (2024, March 24). Top 4 Software Development Methodologies. Link: https://example.com/top-4-software-development-methodologies

From the blog CS@Worcester – Maria Delia by Maria Delia and used with permission of the author. All other rights reserved by the author.

Core Principles of Clean Code

In software development, writing clean code is essential for creating maintainable, scalable, and efficient applications. The article “The Core Principles of Writing a Clean Code” by Arthur Coudouy provides valuable insights into the fundamental principles that contribute to clean coding practices.

The article emphasizes that clean code is easy to understand, simple to modify, and efficient to maintain. It highlights key principles for achieving clean code:

  • Simplicity: Avoid convoluted logic; clear and simple code is easier to maintain and scale.
  • Consistency: Use consistent naming and structuring to make code readable and predictable.
  • Clarity Over Cleverness: Optimize for readability; complex solutions should not come at the cost of clarity.
  • Code Review Automation: Utilize automated code review tools to enforce standards and maintain consistency across the codebase.

I selected this article because it aligns directly with our course material on best coding practices. Another reason I chose this topic is that being a programmer is not just about writing code. There are many important factors, such as debugging, making your code efficient, and ensuring it is easy for other programmers to understand. Understanding and applying clean code principles is crucial for developers to produce high-quality software and collaborate effectively within teams.

The article reinforced the importance of writing code that is not only functional but also easy to read and maintain. I learned that simplicity and consistency in code structure significantly enhance its scalability and efficiency. I also appreciated that the article provided examples of how the principles of clean code can be applied. The emphasis on clarity over cleverness resonated with me, as overly complex solutions can make understanding and make future modifications more challenging.

Armed with these insights, I plan to apply several strategies to improve my future coding practices. I will prioritize simplicity by writing straightforward code, avoiding unnecessary complexity to ensure maintainability. Maintaining consistency will also be a key focus; I will use clear naming conventions and structured code to make my work predictable and easier to understand. Additionally, I will emphasize clarity over cleverness, creating solutions that are easy to grasp and effectively communicate their purpose. Lastly, I intend to to use the automated code review tools to uphold coding standards and streamline the review process, fostering better collaboration and consistency within a team. By adopting these practices, I aim to contribute to the development of robust, efficient, and maintainable software for my future career as a software developer.

Sources:
The Core Principles of Writing a Clean Code

Citations:
Coudouy, Arthur. “The Core Principles of Writing a Clean Code.” Axolo Blog, Axolo, 31 Oct. 2024, axolo.co/blog/p/core-principles-of-writing-clean-code.  

From the blog CS@Worcester – CodedBear by donna abayon and used with permission of the author. All other rights reserved by the author.

Technical Debt As Maintenance

In another podcast from Stack Overflow again by Ben Popper with special guest Johnathan Schneider, discusses the nature of technical debt surrounding open-source projects. The main example used throughout the podcast is refactoring code, switching from java 7 to java 8. And in later examples sometimes java 8 to like java 17. As they explain the difficulty when switching, especially when more manual work is needed, talk about the ways technical debt is created. After more discussion around the software he made to help refactoring, goes into more detail about the nature of technical debt. We think of technical debt as something that we impose on ourselves. Like taking shortcuts or code that needs to be updated. One of the main points of this podcast is to think about technical debt more as maintenance. Obviously sometimes it is self-inflicted, but often it just comes with the territory. As new things come out, things will need to be updated. It’s easier to think of it as something that needs to be done for the sake of the health of the program. Rather than as something I did that I need to fix because of my own short sightedness. 

I chose this podcast because it is related to our discussions of technical debt and refactoring code. In class, we talked about the nature of technical debt and how often it is a code structure thing or maybe a breaking change. It is more thought of as something that comes as a result of not thinking ahead. While I think that is true in many cases. I think a lot of the time it can’t be avoided, like in the case of code versions. Thus it’s better to think of it as maintenance rather than something that could have been avoided. For me, mentally saying that this problem is something that couldn’t have been avoided is better. If I think it’s my fault then I feel like an idiot and get down on myself. Maybe it is just a mental thing, but it goes a long way for the mentality of a person or team. Another aspect of the podcast I think it is important to think about is how the open-source nature plays a part in this. Code is being worked on at all times, different people. So when the code is updated and your code no longer works. It’s important to realize that this isn’t your fault and just is the nature of things. The code not working is not your fault and just needs to be maintained so it works again.

Citations

https://the-stack-overflow-podcast.simplecast.com/episodes/open-source-ecosystem-reduce-tech-debt/transcript

From the blog CS@Worcester – Code Craft by Kyle Tucker and used with permission of the author. All other rights reserved by the author.

Ethics in Software Development

I read XAM’s blog post “The Ethics of Software Development: Balancing Business and Social Responsibility” this week. It discusses moral dilemmas that software developers face, as well as the importance of balancing social responsibility with corporate objectives.

Ethics is an important but sometimes overlooked aspect of software development, which is why I chose this website. Although CS-348 focuses heavily on software design and development techniques, the topics discussed do not necessarily address the moral implications of our decisions. I assumed that studying more about this subject would help me understand what this means in my profession as a software developer.

The blog post shows how designing software frequently requires challenging decisions when social or ethical considerations conflict with business goals. Engineers, for example, may face pressure to cut costs or launch software faster, putting inclusivity, user privacy, and quality at risk. The article emphasizes developers’ responsibility to promote moral behavior, even if it is not the simplest or most profitable alternative.

I was particularly interested in the post’s discussion of “building trust” and how making moral decisions is critical to earning the respect of end users and society as a whole. I could relate to the example of appropriately managing user data. In an age when data privacy is frequently violated, software developers must take proactive steps to protect sensitive data and maintain user rights.

After reading this blog post, I had to reflect on my own responsibility as a prospective software developer. I understand that every decision I make has an impact on other people’s lives, even if it is tempting to focus solely on meeting deadlines or fixing technical challenges. For example, I might be assigned to create a feature that collects user data. I must ask myself: Is this information required? What will they do with it? Have we ensured the user is informed? These studies must become a critical part of my personal development.

I also realized that ethical software development requires effective communication with all parties involved, including employers, coworkers, and users. Even if it means going against established or short-term economic goals, developers must be willing to promote morally just solutions. As the post makes clear ethical behavior is critical for long-term success and trust.

I will take the time to explore the ethical implications of my work, whether I am working on a class project or in a professional setting. To ensure that I make wise and responsible decisions, I plan to further my education on topics such as data privacy, accessibility, and security.

Moving forward, I plan to incorporate this ethical attitude into my own development process. To summarize, this resource provided me with valuable insights on how software development balances social responsibility and profitability. It noted the idea that developers have an important role in creating technology that improves society while adhering to moral ideals, as well as fixing problems. I believe that taking this stance will help me become a more caring and accountable software engineer !!

From the blog CS@Worcester – Just A Girl in STEM by Joy Kimani and used with permission of the author. All other rights reserved by the author.

Performing a Sprint Retrospective

A sprint retrospective is an event that occurs at the end of a sprint where the team meets to discuss improvement for the next sprint. This is to say, the team gets together and looks back at the sprint completed and looks for areas of improvement that they can adjust for the next sprint.

Following the theme of my last few blog posts, I will be manning a one-man scrum team (which is an odd sentence). How exactly will a sprint retrospective look for me and by extension how would it look for someone following a similar journey through scrum?

A great place to start is knowing what’re the right questions to ask, thankfully Rodrigo Ribeiro has provided us with these questions is his blog, “How to Run a Sprint Retrospective 101: The Essential Guide”. Now, this blog was written with an entire scrum team in mind so let’s take a look at the four major questions he poses for a retrospective and look at them in our scenario.

“What did you like in the sprint?”

This is a simple question, but it may have more significance to our situation than you would think. As Ribeiro notes this section is mainly for giving credit where credit is due to your team members and making sure to thank them for their efforts. Well for us we are our team members, but that doesn’t mean we don’t deserve credit or appreciation for our effort. Taking a moment to pat yourself on the back for completing your sprint and telling yourself you did a good job can really improve your attitude and confidence when looking towards the next sprint.

“What is puzzling you right now?”

This question is an opportunity for your team to ask for clarification about roles in the team, as well as technical and functional purposes. For us, roles are not relevant as we are assigned all of them. As for technical and functional purposes, as the product owner we already know what the purpose of our product is, both technical and functional as we’ve designed the backlog. With this being said, maybe this question is better omitted from out one person retrospective.

“What didn’t work so well?”

This is the time for the team to express their feelings about the project. In our instance, this is the perfect opportunity to be fully honest with ourselves about our current feelings towards the project as well as our feelings about that last sprint. Were there issues with backlog items? Did we move the project towards completion in the same direction we set out product goal? These are very important questions to ask ourselves and to be fully honest about as we’re the only input.

“What are your improvement ideas?”

This is the section where you, of course, should ask your team for solutions to issues you’ve been having as well as general ideas for project improvement. So how does this relate to us? After the end of our previous sprint, with certain backlog items finished and maybe even some scrapped, some adjusted, and some still alluding a solution, we can take a minute to reassess our current situation and decide our next steps. Were some of the completed backlog items not completed to our standard, or in the direction we wanted to move our project? Are some backlog items unable to be completed now irrelevant or should a new way of looking at them be implemented. Without the input of others during a sprint it can be hard not to be one track minded and tunnel visioned so this is a great opportunity to take a breather, relax, and try to search for a new angle. Maybe write down some solutions, think them through, and try again with new tasks and backlog items for the next sprint.

It’s important as a one-man scrum team to be incredibly flexible, and getting held up on one backlog item can really stagnate progress and burn out a single developer. Asking these questions in the middle of the sprint will only lead to complicating something that’s already complicated navigating as one person. It’s better to do what you can during the sprint and assess and reevaluate with yourself after. From there you can make changes and move forward in the direction of your choosing.

From the blog CS@Worcester – DPCS Blog by Daniel Parker and used with permission of the author. All other rights reserved by the author.

Development with Dev Containers in Visual Studio Code

The blog post “Introduction to Dev Containers” on the Versent Tech Blog provides an insightful look into the benefits and use cases of Dev Containers in Visual Studio Code (VS Code). Dev Containers are an advanced feature that allows developers to define their development environment as a container. This ensures consistency across different environments and allows developers to collaborate without worrying about “it works on my machine” issues. In this blog post, the author explains how Dev Containers help in streamlining development workflows and how to set them up using VS Code.

The article starts by addressing a common pain point in software development: ensuring that the development environment is consistent across all team members. This is especially important in teams where developers use different operating systems or have varying configurations. By using Docker containers, VS Code’s Dev Containers allow teams to define a common development environment that can be replicated on any machine, avoiding discrepancies caused by mismatched dependencies or configurations.

The post explains how to configure a Dev Container in VS Code using a file called devcontainer.json, which specifies the operating system, programming languages, and dependencies required for the project. It also highlights how to use VS Code extensions within the container and how to work with the integrated terminal, which runs inside the containerized environment. The author emphasizes the simplicity of setting up Dev Containers, noting that once configured, developers can spin up the same environment across different machines with ease.

One of the key advantages of Dev Containers is that they provide a fully reproducible environment, which is a critical feature in team collaborations. Developers no longer need to manually install dependencies or worry about whether their local setup matches the production environment. Everything required for development is neatly packaged within the container. This aligns perfectly with the principles of modern DevOps and containerization, both of which have become integral to software development practices.

I chose this blog post because it directly relates to the topics we’ve been covering in our course, particularly around containerization and software environments. Our course has touched on tools like Docker and container management, and this article provided a clear, hands-on demonstration of how containers can be used in practice to simplify development workflows.

Reading this blog post gave me a deeper understanding of how Dev Containers can save time and prevent issues in team-based development. The ability to define and share development environments as code is powerful—it ensures that everyone on the team is using the same dependencies and settings. I also learned that by leveraging Dev Containers, teams can avoid the classic “works on my machine” problem, where a project may run fine on one developer’s computer but fail on another’s due to environmental differences.

In conclusion, the blog post “Introduction to Dev Containers” offers valuable insights into how Dev Containers can revolutionize the development process by providing consistency, portability, and ease of use. This tool is an excellent way for teams to improve collaboration and productivity. I look forward to implementing Dev Containers in my own development workflow.

Read the full blog post here.

From the blog SoftwareDiary by Oanh Nguyen and used with permission of the author. All other rights reserved by the author.

Anas Salman, Senior Engineer Manager at Uber, on Team Management

Hi class,

For this blog post I decided to choose the topic of team management. Team management. https://www.youtube.com/watch?v=BtBQdMWlpbQ

Anas Salman, who is a senior engineer manager at Uber, goes on to talk when meeting with a new engineer he will be very hands on with the said engineer in his career growth. When looking at growth for his engineers, Anas’ success is not if your engineer gets a promotion, but rather building skills and filling gaps in the engineers’ experience. Anas stresses a promotion is less important than doing great work, which a side effect would be a promotion.

Patrick acknowledges that people’s personalities and skills are different and vary, which as manager can sometimes be hard to find a good fit for the team. Anas agrees with this of which he has a baseline foundation of all incoming engineers/software developers. They must have a thorough understanding of the basics of coding.

Patrick begins the podcast by stating there can be a lot of processes set in place within team management, some of which can be tedious. Anas takes a different approach rather than looking at processes as simply that. As a manager, you must look at the processes and know three key aspects: to understand why it’s there, what’s the purpose, and the value. This will help your engineers not just do a process to do it, but understand it on a deeper level. 

Patrick states that as a manager, you need to have a motivated team, and sometimes it can be hard for engineers to find passion. Anas agrees with this. He says as a manager you need to align their passion with the needs of the team. This makes them more aware that this can lead to great growth in career and personal development. 

Patrick says the goal at the first meeting of the project all the way to the end of the project to his team and himself. By doing this, everyone on the team will be aligned with the shared goal. This will generate new motivation to start the project, coming up with new ideas and active discussions about how to reach the goal. 

My personal comments about this is that I like the way Anas thinks a lot about team management. If you’re in a team environment and you made a mistake and/or hit a challenge, he encourages this to happen, “Challenges are not usually bad things… I see them as gifts.” Anas says mistakes/challenges will be the accelerator for your career growth. Furthermore, he is showing his team that these are learning opportunities; I like that a lot and personally face challenges in and out of coding, by which adapting this mindset can only help me as an overall person and programmer, where simply doing will result in a greater outcome than seeking.

From the blog CS@Worcester – Programming with Santiago by Santiago Donadio and used with permission of the author. All other rights reserved by the author.

Improving Code Reviews

In this blog post, I will be talking about the various ways one can make their code reviews better. The blog that I am referencing is titled “How to Make Good Code Reviews Better” and is published on the Stack Overflow blog. The blog post outlines multiple strategies for people to improve their code reviews. These strategies include maintaining a respectful tone, offering specific and constructive feedback, and trying to focus specifically on high-impact areas. Furthermore, the importance of maintaining a balance between efficiency and thoroughness is highlighted in the blog, as balancing those two is very important if you want to ensure that reviews don’t become a barrier for your team during the development process.

I chose this blog because I thought that it would be a resourceful blog to read through, as these strategies can definitely help in the future for my professional career. This also relates to what we learned in class, as the blog heavily focuses on collaboration which can be tied back to our discussions about agile development.

This blog made me realize that code reviews should not be harsh critiques, but rather helpful conversations that provide insight on what should be improved in your code. It shouldn’t feel like a negative conversation, it should be supportive and friendly which creates a better working environment. For me, it also brings encouragement, as workers will feel more encouraged to improve upon their code if their coworkers are actively supporting them. Code reviews should be focused on the “what” and “how” rather than just listing all of the flaws of the code.

The blog also mentions how people should be reviewing for the future by providing insights that extend beyond the immediate fixes in order for the code to have better maintainability. The reviews should, of course, fix the immediate problems, but should also set up the program for better and for consistent success in the future. It should be focused on the sustainability of the code rather than just fixing all the short-term problems but not addressing how it will look in years. In general, every line of code that one writes should be written with the long-term impact of said code in mind.

Going forward, I am planning on applying these strategies of good code review in my professional career as well as my current academic career. If I am reviewing the code of a peer, I will aim to give constructive feedback that makes it feel encouraging rather than simply telling someone all the problems with their code. Doing this creates a better workplace environment where people feel comfortable with expressing their thoughts and opinions about things, creating a better team atmosphere and promoting teamwork and collaboration. I will also welcome feedback from peers about my work, as it is important to listen to the feedback of your peers, as in the end we are all working together towards a common goal.

Link: https://stackoverflow.blog/2019/09/30/how-to-make-good-code-reviews-better/

From the blog CS@Worcester – Coding Canvas by Sean Wang and used with permission of the author. All other rights reserved by the author.

AI Revolutions in Large-Scale Application Development

The advent of Artificial Intelligence (AI) is changing the software development landscape, making the creation of big project and their related application code faster, smarter, and more efficient. From automating repetitive tasks to optimizing code and enabling predictive analysis, AI empowers developers to achieve more with less effort. This blog explores how AI actual facilitated in normal coder and tester related workers and their tangible benefits give more reliable outcomes without any more works.

               AI acts as a force multiplier in software development, streamlining workflows, reducing errors, and enhancing productivity. Before AI the possibilities of traditional works are very lengthy and so much effort of manual strategy, particular for large projects. By using machine learning, natural language processing, and advanced algorithms, AI tools and platforms help developers at every stage of the application lifecycle, thus easing those challenges.

Key Areas where AI Growing:

Code Generation: In GitHub Copilot AI tools helps developers by generating raw codes, suggesting snippets, and writing full code according to their descriptions.

Bug Detection and Fixing: AI tools like Deep Code analyses coders code and give accurate and deeper result so it gives actionable recommendations in real bugs and fixes their uses in just one click.

Automated Testing: Machine learning algorithms can generate large scale test on minimum time so it actual carry the whole process testing in their application so workers can get time and effortless comprehensive testing.

Real-World Examples of AI in Action

  1. GitHub Copilot: This AI coding assistant generates suggestions in real time, helping developers write efficient and accurate code faster. It makes big projects easier to handle by lowering the amount of manual labor required for repetitive coding chores.
  2. Chatbots for DevOps: AI-powered chatbots doing multiple things automatically like server deployment, monitor application health, and resolve issue in one time so human interventions growth reduced.

Challenges and Limitations is also part of this AI skills. AI-generated code may require careful validation so might be Accuracy Dependence is requirement in project-specific parts. It may be necessary to make an initial training expenditure in order for developers to comprehend how to use AI tools efficiently. Using AI in proprietary projects brings up issues related to biassed algorithms and intellectual property so ethical issue is also fixed it our terms and modifications.

               As AI continues to evolve, its role in software development will expand further. Innovations such as generative AI for full-stack applications, intelligent debugging systems, and adaptive learning platforms will redefine what’s possible in large-scale application development. In conclusion, AI is not just a tool for coders; it is one robot which give accurate result without any further large skills task. Diverse controlling in AI based application is sometime give innovation and creativity and every computer fields.

Citations:

  1. GitHub Copilot Documentation. (n.d.). https://github.com/features/copilot
  2. Amodei, D., Olah, C., et al. (2016). Deep Learning in AI Systems. OpenAI Research Papers.
  3. Applitools AI Testing Tools. (n.d.). https://applitools.com
  4. How AI is Revolutionizing Software Development [YouTube Video]. (2023). Available at: https://www.youtube.com/watch?v=IGQChbLYFqY

From the blog CS@Worcester – Pre-Learner —> A Blog Introduction by Aksh Patel and used with permission of the author. All other rights reserved by the author.

Git Tricks For the New Dev

I just recently finished learning about git in a classroom setting, so every step from forking to cloning to branching and staging then committing into pushing ending with pulling. All the parts to get the gist of git, but nothing in the way of advanced use. Enter this article written by Gitlab.

As its title suggests, “15 Git tips to improve your workflow” has 15 total tips in regards to git, so lets go through some of them together.
1. Git aliases; amazing function, to think that rather than checkout, branch, or commit I could use a custom name. This is, in my opinion, great for new devs since once they grasp the concept of what a command does they can alias it to something that makes sense to them.
2. Visualizing repo status with git-prompt.sh; needs to be downloaded but definitely a useful tool for people like me who benefit from a more visual experience.
3. Command line commit comparisons; definitely more of a practical command that is helpful to see your workflow. Definitely going to be using this one to help me track what I actually worked on and might even download the Meld tool they mentioned.
4. Stashing commits; another practical command that makes sense just for a dev to know. If you have to push a sudden fix in the middle of adding a feature you can stash the changes made for the feature, commit the fix and then just pop the stash to get back all the previous work.
5. Pull frequently; nothing to add.
6. Auto-complete commands; tab to automatically finish a word is also applicable in search engine prompts as well. So useful for a new dev since if they forget the command but remember the first letter they can just flick through the commands until they find what they were looking for.
7. Set a global .gitignore; create a list of files to remove from commits and put it on the exclusion list, nice and simple.
8. Enable autosquash by default; had to look this up, apparently the squash command merges commits into one big commit. Personally not too sure of the use case so will have to test it out at a later date.
9. Delete branches locally that remote removed when fetching/pulling; as part of fetch, there is a prune attribute that will work this functionality and it just needs to be set to true.

Obviously there are 6 more tips and they are: Use Git blame more efficiently, Add an alias to check out merge requests locally, An alias of HEAD, Resetting files, The git-open plugin, and The git-extras plugin. I will not go over them here but definitely give the article a read if you are interested.

Link:
https://about.gitlab.com/blog/2020/04/07/15-git-tips-improve-workflow/

From the blog CS@Worcester – Coder's First Steps by amoulton2 and used with permission of the author. All other rights reserved by the author.