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.

Monoliths and Microservices

Students often focus on code with a singular program as the goal. However, there are many different software architectures to consider based on the scope and specifications of a software. The article linked below gave a detailed comparison of two major architectures types: monolithic and microservices. A monolithic architecture is like the all-in-one software solution. […]

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

UML Diagrams

Unified Modeling Language (UML) is an important tool in software development that helps developers visualize, design, and document the structure of their systems. It allows developers, project managers, and stakeholders to communicate with a medium that is easier to digest and explain. This week, I found a blog that introduces UML diagrams, “What is a UML Diagram?” from Miro. Miro gives an in-depth view of the types, benefits, and when to use UML diagrams.

Early in our course, we discussed and modeled Sequence and Class Diagrams. I chose this resource because of that foundation and because it is a great starting point for beginners. It also explained more diagram types than presented in class.

The blog explains that UML is a standardized modeling language used to visually represent a system’s design in a understandable way. It highlights two main types of diagrams, each with their own subtypes.

  1. Structural Diagrams: These visualize the components in the system and their relationships. Some examples include:
    • Class Diagram: The static structure of a system showing classes, attributes, and relationships.
    • Package Diagram: Shows how packages and their dependencies are organized within the system
    • Deployment Diagram: Shows how software and hardware interact
  2. Behavioral Diagrams: These visualize the system’s behavior over time. It is the dynamic behavior of the system. Some examples include:
    • Activity Diagram: Visualized the flow of activities within a system.
    • Sequence Diagram: Shows how objects interact over time.
    • Use Case Diagram: Shows the functionality of the system from the user’s perspective.

The post then describes the benefits of UML diagrams, such as simplifying complex ideas/code and improving team collaboration. It finishes by explaining the best practices and when to use UML diagrams.

This post helped me shore up my lacking knowledge of UML diagram types. I was unaware of most diagram types discussed, so it was nice to see what they were and how they were properly used. The site also provided a link to a diagram maker with some of the types which could be useful in the future.

The benefits were also insightful. The main takeaway was that the UML diagrams keep everyone on the same page. From the technically inclined to those lacking knowledge, you can communicate the system’s functions effectively. This seems especially true for those working in teams with different specialties. Having a roadmap for the system’s functions with a standard notation that everyone can understand allows the team to work more efficiently. In the future, I will use UML diagrams to keep everyone involved in our projects on the same page so we can collaborate to make our software more effective.

Resource: https://miro.com/diagramming/what-is-a-uml-diagram/#1.-simplifies-complex-ideas-and-systems

From the blog CS@Worcester – KindlCoding by jkindl 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.

SemVer or CalVer: When to Use

Understanding Versioning: SemVer vs. CalVer Most software, libraries, games, etc… will come with a version number attached. Often times, it is easy to just gloss over this and not pay much attention, however that number can reveal important information. The article linked below compares 2 types of versioning you may encounter. Semantic Versioning (SemVer) – […]

From the blog CS@Worcester – CurrentlyCompiling by currentlycompiling 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.