Category Archives: CS-348

Agile Project Management

There is a video on YouTube from a channel called The Digital Project Manager about Project Management called, “Agile project management methodology explained (with burgers?!)”. This video talks about Project Management, a topic from our course, but more specifically, agile project management. I found this video particularly educational and informative because instead of explaining agile project management in typical terms, the methodology is described using burgers. The video explains that agile project management is all about flexibility and adaptability. The agile project management style runs through multiple cycles of project production and release, taking feedback and input from the customer and users after each release cycle. This is a very effective and efficient method of project management because it allows a smooth flow of progress while making a more accurate product based on the customers’ desires. The way that the video compared this method of project management to burgers is by suggesting that there could be a goal of making the world’s best burger and in order to do that the chef would have to make a burger, get feedback from those who try it, then make changes to the burger in order to improve it. Agile project management implies that after every round of changes, the product should (hypothetically) get better and better. This made me wonder, in a professional setting, how each of these phases of the project would be tested and improved. Further, at what point could the project/program be determined as complete and who has the authority to make that decision? Agile project management is also inherently iterative. This means that multiple iterations or cycles can be completed throughout the process of completing the project. This method is particularly successful with dynamic projects and environments such as game development and software development because the requirements for these types of projects tend to be constantly changing and developing. Agile project management is also a more flexible form of project management. Because multiple cycles of development will occur, not all of the planning for the project has to be done prior to the developing stage of the project. This allows for more flexibility and a more robust and high quality product to come out of the process. During agile project management, each sprint can be broken down into five parts: Define, Craft, Develop, Deploy, Evaluate. The evaluate phase is what allows for this method to be iterable and flexible to multiple rounds of work.

From the blog CS@Worcester – The Struggle of Being a Female Student in CS by Noam Horn and used with permission of the author. All other rights reserved by the author.

Software Licensing

I happened to stumble across a YouTube video by a channel called Licenseware by the title of, “A Brief History of Software Licensing – Why it exists, and why it is so important”. This video covered information about how software licensing came to be, how it is used, and why it is important in the world of software and coding. The video explains how our world has developed to become, ultimately, reliant on software for organizing and controlling everything from transportation to communication. Because of all of this, the software industry has gained many rules and regulations around when, where, why, and how software can be used. These rules and regulations are more commonly known as Software Licenses. Software Licensing is one of the topics we covered relatively early on in our course, going over the different types of licenses and their uses as well as when and in what scenarios they worked or didn’t work. The history of licensing stems from the history of copyright which came from The Copyright Act of 1710 (The Statute of Anne). This act, passed by the British Parliament, stated that authors had the right to publish and sell their work for a renewable period of time. This is relevant because Software Licensing falls under the category of Copyright Law. This is because software is ultimately seen as a type of literary work. The video goes on to talk about how the Free Software Foundation (FSF) introduced the concept of open source software which led to the development of the open source software movement and the creation of the General Public License. I found this video very interesting because, prior to watching it, I hadn’t realized to what extent and depth software licensing was similar to and fell under the umbrella of a legally documented copyright. This confusion came from the fact that open source software creates an atmosphere of open communication and sharing that doesn’t typically appear in other copyrighted pieces of work. I find it interesting that software seems to be the only field, at least to my knowledge, that has this type of sharing of information and work between other users and developers. The collaboration between maintainers, leaders, collaborators and users allows the field to expand and advance quicker and more efficiently than other fields. This video helped solidify my understanding of different licenses and the importance of not only having an active license in place but also the correct license in place. This also gave me a better concept of what to do in the future if I should choose to post any of my code online as open source material.

From the blog CS@Worcester – The Struggle of Being a Female Student in CS by Noam Horn and used with permission of the author. All other rights reserved by the author.

Coding Practices & Standards:

From the blog CS@Worcester – The Struggle of Being a Female Student in CS by Noam Horn and used with permission of the author. All other rights reserved by the author.

Love and hate relationship between clean code and Writing documentation

The blog explores the paradox faced by developers who prioritize the creation of clean code yet often neglect the critical need for documentation. Despite its essential role in software maintenance and the reduction of technical debt, documentation is frequently undervalued. Studies indicate that well-crafted documentation can substantially enhance productivity by minimizing the time needed for various tasks and improving code quality. A thorough meta-analysis encompassing over 60 academic publications has shown that effective documentation positively influences several aspects of software development.

Although these benefits are evident, developers frequently place greater importance on other responsibilities rather than on documentation, especially when confronted with tight deadlines and a strong focus on producing operational code, a situation frequently encountered in Agile practices. This inclination leads to the creation of informal and outdated documentation, which can exacerbate technical debt. The lack of adequate documentation often results in misunderstandings, mistakes, and redundant work, thereby generating inefficiencies that impede the long-term success of projects.

I chose this blog for its significant relevance to my ongoing studies, as it aids in the practical application of theoretical concepts to my coding endeavors. As a student, I find the article on clean code and documentation to be particularly insightful, as it highlights the often overlooked yet essential role of documentation in software development. While many academic programs emphasize the importance of writing clean code, this article effectively explores the relationship between high-quality documentation and its advantages, such as promoting collaboration, reducing technical debt, and improving overall productivity. Additionally, it offers insights into real-world challenges, including tight deadlines and Agile methodologies, thus preparing students to effectively navigate the complexities of professional environments.

One significant insight from the blog is the importance of documentation in improving collaboration within development teams. Thorough documentation guarantees that knowledge is retained and readily available, which is crucial for team members operating in various time zones or entering projects at different stages. This promotes a more unified working atmosphere, enabling developers to leverage each other’s advancements without unwarranted interruptions. By ensuring that documentation is current and comprehensive, teams can enhance the onboarding experience for new developers and reduce the risks linked to employee turnover.

The blog ultimately emphasizes that clean code and thorough documentation are not opposing elements but rather integral parts of effective software development. By incorporating documentation into the development process, developers can foster the creation of projects that are more sustainable, scalable, and maintainable. This shift in perspective, from considering documentation as a secondary task to acknowledging it as a fundamental component of development, can greatly enhance both the long-term success of projects and the professional development of individuals in the field.

Blog: https://stackoverflow.blog/2024/12/19/developers-hate-documentation-ai-generated-toil-work/

From the blog CS@Worcester – Matchaman10 by tam nguyen and used with permission of the author. All other rights reserved by the author.

Literature in Computer Science

Engaging deeply with academic literature is essential for enhancing one’s comprehension of computer science, as it offers a more profound experience compared to merely watching tutorial videos. While tutorials focus on practical skills and specific tasks, academic papers explore the theoretical underpinnings that inform the discipline’s advancement. The “Papers We Love” initiative, led by Zeeshan Lakhani, Darren Newton, and David Ashby, demonstrates that individuals lacking formal training in computer science can greatly enrich their understanding by studying seminal research papers. This initiative highlights the transformative impact of immersing oneself in academic texts, which often clarify the progression of programming paradigms and foster innovative approaches to problem-solving.

The blog post titled “Papers We Love” presents an overview of four pivotal computer science papers that are strongly recommended for individuals seeking to enhance their comprehension of the field. The selected papers are “Communicating Sequential Processes” authored by Tony Hoare, “Dynamo: Amazon’s Highly Available Key-value Store,” “A Unified Theory of Garbage Collection,” and “Out of the Tar Pit.” Each of these seminal works delves into core principles that have significantly contributed to the evolution of computer science, providing readers with an opportunity to investigate the foundational ideas and progress of essential technologies and methodologies. For example, Hoare’s work on Communicating Sequential Processes (CSP) introduces a formal framework for articulating interaction patterns in concurrent systems, a notion that remains influential in contemporary distributed computing.

I selected this blog for emphasis because I am convinced that the field of computer science encompasses much more than merely consuming tutorial videos. Numerous aspiring programmers become ensnared in what is commonly referred to as “tutorial hell,” where they find themselves perpetually watching instructional videos without attaining a profound understanding of the underlying concepts. This blog promotes the idea of breaking free from that cycle by engaging with scholarly literature, which not only expands one’s intellectual perspective but also offers a solid theoretical framework that is frequently neglected in tutorials. By exploring research papers, programmers can discover invaluable insights that enhance their capacity to develop more efficient, innovative, and elegant solutions to intricate challenges.

Academic publications in the field of computer science often form the foundation for technological advancements. They present innovative algorithms, introduce new frameworks, and analyze complex systems, many of which ultimately become integral to industry standards. While the terminology in these publications may initially appear intimidating, the time spent understanding them is highly beneficial. Developers and researchers who engage with academic literature acquire a competitive advantage, remaining abreast of new developments and enhancing their analytical capabilities to address contemporary challenges. Additionally, this engagement promotes critical thinking and cultivates the intellectual curiosity essential for driving technological progress.

Engaging with academic literature is essential for individuals committed to enhancing their knowledge in the field of computer science. This practice serves to connect theoretical frameworks with practical implementation, thereby promoting a comprehensive grasp of the subject. Regular interaction with seminal works enables programmers and developers to sharpen their technical competencies while establishing themselves as influential figures who can make meaningful contributions to the wider technological community. In a discipline characterized by constant change and innovation, the skill to locate and analyze academic research becomes a vital resource, profoundly influencing both personal career paths and the evolution of the industry at large.

Blog: https://stackoverflow.blog/2022/12/30/you-

From the blog CS@Worcester – Matchaman10 by tam nguyen and used with permission of the author. All other rights reserved by the author.

Clean Code Naming

Almost any young programmer’s first programs look the same. 1. 2. This is all well and good in the beginning, however, non-descriptive variable names pose an issue as time goes on. When your programs get more complex and you work in teams, naming conventions become incredibly important. A lack of naming conventions decreases code clarity […]

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

(Week-15) GitHub and the Basics 

GitHub has become an extremely important platform for developers, designers, and entire companies or teams to collaborate on projects of all sizes. At its core, GitHub leverages Git, a version control system, to help manage and track changes in code. Whether you are building a personal project, contributing to an open source project, or collaborating on an enterprise level application, GitHub offers amazing tools to make the development process as seamless as possible.  GitHub simplifies the complex workflows of modern development, making it an essential tool for anyone in tech. Whether you’re a beginner or a seasoned developer, understanding repositories is the first step to mastering GitHub.

What is a Repository?

A repository (or repo) is a centralized location where all the files, code, and documentation for a project are stored. It acts as a project’s home. A repository on GitHub can be public (accessible to anyone) or private (restricted to select users) based on the liking of the owner. Public repositories are particularly popular in open-source communities, because of how they are enabling developers worldwide to contribute, report issues, and suggest improvements to better the source.

Repositories also keep a detailed history of every change made, making sure the owner can track and revert changes if needed.

Key Components of a Repository

  1. Commits: A commit is a snapshot of changes in a repository. Developers use commits to save their progress and include important messages describing the changes made.
  2. Branches: Branches are alternate versions of the repository. The main branch (often called main or master) is the central working version, while developers create separate branches to work on features or fixes without disturbing the main codebase.
  3. Pull Requests: When work in a branch is ready to be merged back into the main branch, developers create a pull request. It’s an easy way to propose changes, invite feedback, and review the code before it gets integrated.
  4. Issues: Issues act as a task tracker within a repository. Developers and contributors can log bugs, suggest features, or discuss implementation details.
  5. README Files: A README file is usually the first thing a visitor sees. It provides an overview of the project, instructions for usage, and contribution guidelines.

How GitHub Works

To use GitHub effectively, you typically:

  1. Create a Repository: Start a new project or upload an existing one.
  2. Clone the Repo: Download the repository to your local machine using Git commands or GitHub Desktop.
  3. Make Changes Locally: Modify files, add new features, or fix bugs.
  4. Commit and Push: Save your changes locally and push them to GitHub.
  5. Collaborate: Use pull requests, issues, and discussions to collaborate with others.

“What is GitHub?” is an official video from the GitHub YouTube channel.  The video is informative, as well as very well put together with amazing graphical effects and editing.  It is a great way to learn about GitHub quickly, while also being mesmerized by great video editing skills.  Check out the video to get a quick grasp and introduction on GitHub

Link to Resource:   https://www.youtube.com/watch?v=pBy1zgt0XPc

From the blog CS@Worcester – Elliot Benoit's Blog by Elliot Benoit and used with permission of the author. All other rights reserved by the author.

Pausing Agile?

In CS-348, I covered many developmental practices and strategies, from the use of  development environments to software design practices. In exploring increment.com I came across an article about the repetitive nature of agile development and how it can lead to burnout and fatigue. The article resonated with me because I will soon be entering the workforce and experiencing agile for the first time. The article’s focus on pausing drew me in to read on. The article’s title is Planning For Pause by Romello Goodman.

The article begins by defining how the agile approach emphasizes speed, flexibility, and continuous iteration by building software incrementally with each sprint. This approach works well for early-stage products but the author points out that the method doesn’t always account for late-stage software. The author identifies that teams can fall into the trap of endlessly adding small, insignificant features rather than working on more meaningful or impactful projects. This leads to a sense of busywork, where the development process feels like it’s stuck in an endless loop of minor updates, creating burnout and dissatisfaction. The author then introduces the concept of milestones, which is defined as an idea borrowed from the waterfall method. These milestones bring structure and pauses into the development process. Unlike agile’s continuous sprint cycle, milestones give teams a moment to stop and reflect on their progress. These breaks allow for a more complete and comprehensive review of the work completed and help realign goals for the next phase of development. The author compares milestones with retrospectives, which can be often overlooked or rescheduled in agile processes. One practical example the author shares is from their team at The New York Times, where they use a two-week cooldown period every six weeks to step back, address technical debt (identified in another blog of mine), and plan future work. By incorporating these breaks into the agile cycle, the author advocates for teams to prevent burnout, improve long-term productivity, and build better software with a pause style. 

I found this article very interesting and pertinent to a big change coming in my life. As I prepare to leave university, I will be experiencing an entirely new mode of software development and teamwork in general. By preparing for the positives and negatives I will have a more complete understanding of how agile works and its potential alternatives. I will continue to read more into the actual development practices I will be actively experiencing.

https://increment.com/planning/milestones-and-agile-development/

From the blog CS@Worcester – WSU CS Blog: Ben Gelineau by Ben Gelineau and used with permission of the author. All other rights reserved by the author.

Love and hate relationship between clean code and Writing documentation

The blog examines the contradiction in which developers emphasize the importance of writing clean code while frequently overlooking the necessity of documentation, even though documentation plays a vital role in software maintenance and in mitigating technical debt. Research demonstrates that high-quality documentation significantly boosts productivity by reducing the time required for tasks and enhancing the quality of code. A comprehensive meta-analysis of more than 60 scholarly articles revealed that effective documentation has a beneficial effect on multiple facets of software development.

Despite these advantages, developers often prioritize other tasks over documentation, particularly when faced with stringent deadlines and an emphasis on delivering functional code, a common scenario in Agile methodologies. This tendency results in informal and outdated documentation, which can contribute to an increase in technical debt.

I selected this blog due to its relevance to my current studies, as it facilitates the application of concepts to my own coding practices. As a student, I find this article on clean code and documentation particularly valuable because it underscores the frequently neglected but crucial importance of documentation in the realm of software development. Although many educational programs prioritize clean code, this article effectively addresses the connection between quality documentation and its benefits, such as fostering collaboration, minimizing technical debt, and enhancing overall productivity. Furthermore, it provides perspectives on real-world challenges, including stringent deadlines and Agile methodologies, thereby equipping students to navigate the intricacies of professional settings.

A significant insight gained was the impact of documentation on fostering collaboration and minimizing technical debt elements that are closely tied to my group projects and individual coding endeavors. The discussion surrounding AI-enhanced documentation highlighted the transformative potential of automation in optimizing development processes. This revelation has motivated me to investigate tools that can facilitate documentation in both my ongoing and upcoming projects. As I progress, I intend to adopt improved documentation practices within my coding routine, acknowledging that such efforts not only enhance my comprehension but also render my work more approachable for others.

Blog: https://stackoverflow.blog/2024/12/19/developers-hate-documentation-ai-generated-toil-work/

From the blog CS@Worcester – Matchaman10 by tam nguyen and used with permission of the author. All other rights reserved by the author.

To Scrum or Not to Scrum

This semester, we spent plenty of time learning about and discussing Agile and Scrum. We learned about the framework and how it can be implemented in teams, as well as the performance advantages of teams that use it. However, just as not every tool is right for every job, it is just as important to […]

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