{"id":22,"date":"2025-01-15T04:16:27","date_gmt":"2025-01-15T04:16:27","guid":{"rendered":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/?p=22"},"modified":"2025-01-15T04:16:27","modified_gmt":"2025-01-15T04:16:27","slug":"the-art-of-clean-code-what-to-start-and-what-to-avoid","status":"publish","type":"post","link":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/2025\/01\/15\/the-art-of-clean-code-what-to-start-and-what-to-avoid\/","title":{"rendered":"The Art of Clean Code: What to Start and What to Avoid"},"content":{"rendered":"\n<p>When I revisited some code I wrote during my first year of college, I struggled to understand my own logic. It felt like deciphering a foreign language, even though I had written it myself. This experience highlighted the importance of clean code. Inspired by Robert Martin&#8217;s Clean Code: A Handbook of Aigle Software Craftsmanship and Martin Fowler&#8217;s Refactoring: Improving the Design of Existing Code, I explored the principles of clean code and the warning signs of bad practices known as code smells. Here, I&#8217;ll share one thing I plan to start doing more often and one thing I&#8217;ll strive to avoid, supported by examples and insights. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">One Thing to Start Doing: Meaningful Names <\/h2>\n\n\n\n<p>One key takeaway from my reading is the importance of using meaningful names. Robert Martin emphasizes that names should revival intent. Variables, functions, and classes should communicate their purpose without requiring additional context or comments. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why? <\/h2>\n\n\n\n<p>Meaningful names make code easier to read and maintain. They reduce cognitive load for both the original developer and others working on the code later. This practice fosters better collaboration and faster debugging. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Example of improvement<\/h2>\n\n\n\n<p>Bad Practice: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"139\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-1024x139.png\" alt=\"\" class=\"wp-image-23\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-1024x139.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-300x41.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-768x104.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image.png 1062w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Improved Practice: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"138\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-1-1024x138.png\" alt=\"\" class=\"wp-image-24\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-1-1024x138.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-1-300x40.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-1-768x103.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-1.png 1056w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>By adopting meaningful names, I&#8217;ll reduce ambiguity and make my code self-explanatory. This change ensures that I, or anyone else, can quickly understand the purpose of each variable without extensive documentation. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">One Thing to Avoid: Long Methods <\/h2>\n\n\n\n<p>From Martin Fowler&#8217;s discussion on code smells, I learned that long methods are a common sign of bad code. A function that tries to do too much becomes difficult to understand, test, and modify. <\/p>\n\n\n\n<p>Why? <\/p>\n\n\n\n<p>Long methods often violate the Single Responsibility Principle (SRP). They are harder to debug because a bug can be hidden anywhere in the lengthy code. They also discourage code reuse because the functionality is tightly coupled. <\/p>\n\n\n\n<p>Example of Refactoring: <\/p>\n\n\n\n<p>Best Practice: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"724\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-2-1024x724.png\" alt=\"\" class=\"wp-image-25\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-2-1024x724.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-2-300x212.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-2-768x543.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-2.png 1058w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Improved Practice: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-3-1024x683.png\" alt=\"\" class=\"wp-image-26\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-3-1024x683.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-3-300x200.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-3-768x512.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-3.png 1064w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>By breaking the method into smaller, more focused functions, I&#8217;ll make my code easier to read, test, and modify. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Applying Clean Code Principles to Advanced Projects <\/h2>\n\n\n\n<p>To deepen this discussion, let&#8217;s analyze a practical implementation: a Bloom Filter. This structure efficiently checks membership in a set and illustrates how clean code principles can enhance complex logic. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Code Implementation <\/h2>\n\n\n\n<p>Here&#8217;s an example of a Bloom Filter: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"1024\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-4-800x1024.png\" alt=\"\" class=\"wp-image-27\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-4-800x1024.png 800w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-4-234x300.png 234w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-4-768x983.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-4.png 1108w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"1024\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-5-872x1024.png\" alt=\"\" class=\"wp-image-28\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-5-872x1024.png 872w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-5-255x300.png 255w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-5-768x902.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/8197\/files\/2025\/01\/image-5.png 1076w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Clean Code Practices Illustrated<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Meaningful Names: Functions like load_bloom_filter and check_bit_array_saturation clearly describe their purpose, improving readability. <\/li>\n\n\n\n<li>Short Methods: Complex operations like password loading and testing are encapsulated in modular functions, adhering to the SRP. <\/li>\n\n\n\n<li>Comments and Documentation: Each method includes a brief docstring, ensuring clarity for future developers. <\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion <\/h2>\n\n\n\n<p>Clean code is not just about aesthetics; it&#8217;s about writing code that is easy to understand, maintain, and improve. By starting these practices and avoiding common pitfalls, I hope to make my code more professional and sustainable. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">References<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Martin, Robert C. <em>Clean Code: A Handbook of Agile Software Craftsmanship<\/em>. 1st edition, Pearson, 2008.<\/li>\n\n\n\n<li>Fowler, Martin. <em>Refactoring: Improving the Design of Existing Code<\/em>. 2nd edition, Addison-Wesley Professional, 2018.<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/ryanmcdermott\/clean-code-javascript\">Clean Code Concepts Adapted from Robert C. Martin<\/a><\/li>\n\n\n\n<li><a>Code Smells \u2013 Martin Fowler\u2019s Blog<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>When I revisited some code I wrote during my first year of college, I struggled to understand my own logic. It felt like deciphering a foreign language, even though I had written it myself. This experience highlighted the importance of clean code. Inspired by Robert Martin&#8217;s Clean Code: A Handbook of Aigle Software Craftsmanship and [&hellip;]<\/p>\n","protected":false},"author":14585,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-22","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/wp-json\/wp\/v2\/posts\/22","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/wp-json\/wp\/v2\/users\/14585"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/wp-json\/wp\/v2\/comments?post=22"}],"version-history":[{"count":1,"href":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/wp-json\/wp\/v2\/posts\/22\/revisions"}],"predecessor-version":[{"id":29,"href":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/wp-json\/wp\/v2\/posts\/22\/revisions\/29"}],"wp:attachment":[{"href":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/wp-json\/wp\/v2\/media?parent=22"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/wp-json\/wp\/v2\/categories?post=22"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/kristinsblog\/wp-json\/wp\/v2\/tags?post=22"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}