<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Leo D. Penrose</title>
    <description>The latest articles on DEV Community by Leo D. Penrose (@leodvincci89).</description>
    <link>https://dev.to/leodvincci89</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F199698%2Fe237a926-bf04-4789-ba8a-f1b37007b0a1.png</url>
      <title>DEV Community: Leo D. Penrose</title>
      <link>https://dev.to/leodvincci89</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leodvincci89"/>
    <language>en</language>
    <item>
      <title>Why I’m Scrapping "Genres" (For Now) and Betting on AI Instead</title>
      <dc:creator>Leo D. Penrose</dc:creator>
      <pubDate>Thu, 04 Dec 2025 20:06:17 +0000</pubDate>
      <link>https://dev.to/leodvincci89/why-im-scrapping-genres-for-now-and-betting-on-ai-instead-38bo</link>
      <guid>https://dev.to/leodvincci89/why-im-scrapping-genres-for-now-and-betting-on-ai-instead-38bo</guid>
      <description>&lt;h3&gt;
  
  
  Why I’m Scrapping "Genres" (For Now) and Betting on AI Instead
&lt;/h3&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/76fM_G2mNCg"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;I recently sat down to build a standard feature for my library app: &lt;strong&gt;Categories and Genres.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It seemed like a no-brainer. Every library app has genres, right? I wanted to be able to categorize my books so that if I searched for "textbook," "computer science," or "programming," everything relevant would pop up. The goal was classification—grouping books with similar attributes to make them easier to find.&lt;/p&gt;

&lt;p&gt;But as I started mapping out the logic, I hit a wall. I realized I was solving a problem I didn't actually have.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Problem with Specificity
&lt;/h4&gt;

&lt;p&gt;I started running through real-world scenarios. Let’s say I have 300 books in my library. Since I’m a software engineer, almost all of them are related to programming.&lt;/p&gt;

&lt;p&gt;If I implement a "Programming" genre and then search for it, 500 books are going to pop up. How useful is that? It’s just noise.&lt;/p&gt;

&lt;p&gt;There is a principle in organization that says eventually, &lt;strong&gt;more organization leads to less productivity.&lt;/strong&gt; You can push categorization to a limit where it becomes chaotic or just plain busy work. If I have to manually tag every book with "Java" or "Software," am I actually making my life easier? Or am I just doing something for the sake of doing it?&lt;/p&gt;

&lt;h4&gt;
  
  
  Defining the Real Use Case
&lt;/h4&gt;

&lt;p&gt;I had to stop and ask myself: &lt;em&gt;How do I actually use my library?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I realized that I don't "browse" my physical library for information. If I need to know about Rust data types, I don't walk over to my shelf and scan for a spine that looks promising. I go to Google. I ask an AI. I find the best resource &lt;em&gt;externally&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Once I know what book I need, my question becomes very specific: &lt;strong&gt;"Do I have this book?"&lt;/strong&gt; and &lt;strong&gt;"Where is it?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My primary use case is inventory management, not discovery.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Scenario:&lt;/strong&gt; I’m on Amazon or at a bookstore. I see a book.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Question:&lt;/strong&gt; "Do I already own this?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Action:&lt;/strong&gt; I search the ISBN or title.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Result:&lt;/strong&gt; Yes/No and Shelf Location.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For that workflow, genres are irrelevant. I don't need a "Non-Fiction" tag to tell me if I own &lt;em&gt;Clean Code&lt;/em&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Pivot: Organization vs. Search
&lt;/h4&gt;

&lt;p&gt;However, there is one area where categorization matters: &lt;strong&gt;The Physical Shelf.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Right now, my library is chaos. I have a biology textbook next to a self-help book, which is leaning against a Java manual. I eventually want a "Barnes &amp;amp; Noble" experience in my own home—biographies here, history there, math over there.&lt;/p&gt;

&lt;p&gt;This is where the feature set shifts. I don't need categories for &lt;em&gt;searching&lt;/em&gt; the app; I need categories for &lt;em&gt;organizing the room&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;But even then, manual categorization feels archaic. Why should I manually tag a book as "Algorithms" or "Puzzles"?&lt;/p&gt;

&lt;h4&gt;
  
  
  The Future: AI-Driven Shelf Organization
&lt;/h4&gt;

&lt;p&gt;This led me to the feature I &lt;em&gt;actually&lt;/em&gt; need to build. Instead of manual genres, I want to use AI for semantic clustering.&lt;/p&gt;

&lt;p&gt;I want to be able to scan a book and have the AI tell me where it belongs based on the topology of my current library.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If I buy a book on &lt;strong&gt;Puzzles&lt;/strong&gt;, I don't want to create a whole new "Games" section for one book.&lt;/li&gt;
&lt;li&gt;I want the AI to analyze the content and say: &lt;em&gt;"Hey, puzzles are conceptually similar to Algorithms. You should put this on the Algorithm shelf."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the dynamic, intelligent organization I’m looking for.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Roadmap Change
&lt;/h4&gt;

&lt;p&gt;So, do I need categories or genres right now? &lt;strong&gt;No.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But, I also realized I can't just start dumping books into the database yet. If I load 300 books now without an organizational system, I’ll just have to pull them all off the shelves and reorganize them later when I build the AI feature.&lt;/p&gt;

&lt;p&gt;I don't want to do double work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The new plan:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pause on mass data entry.&lt;/li&gt;
&lt;li&gt;Build the &lt;strong&gt;AI Shelf Organization&lt;/strong&gt; feature.&lt;/li&gt;
&lt;li&gt;Use the AI to organize the physical books as I enter them into the system.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It’s a different problem than I started with, but it’s a much more useful solution.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Understanding Expressions in Programming: Beyond Just Literals</title>
      <dc:creator>Leo D. Penrose</dc:creator>
      <pubDate>Tue, 15 Oct 2024 22:01:27 +0000</pubDate>
      <link>https://dev.to/leodvincci89/understanding-expressions-in-programming-beyond-just-literals-1oe8</link>
      <guid>https://dev.to/leodvincci89/understanding-expressions-in-programming-beyond-just-literals-1oe8</guid>
      <description>&lt;h2&gt;
  
  
  Understanding Expressions in Programming: Beyond Just Literals
&lt;/h2&gt;

&lt;p&gt;When we talk about &lt;strong&gt;expressions&lt;/strong&gt; in programming, it’s a common misconception to think they are always literals. While literals like &lt;code&gt;42&lt;/code&gt; or &lt;code&gt;"hello"&lt;/code&gt; are indeed the simplest forms of expressions, there’s a much broader range of what constitutes an expression in programming. Expressions can include operations, function calls, and complex combinations of variables and operators.&lt;/p&gt;

&lt;p&gt;Let’s dive into the various types of expressions you might encounter in programming.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Literals (Simple Expressions)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Literals are direct values that you can use in your code. Here are some common examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;42&lt;/code&gt; (numeric literal)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"hello"&lt;/code&gt; (string literal)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;true&lt;/code&gt; (boolean literal)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Arithmetic Expressions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;These expressions consist of numbers combined with operators, evaluating to a specific result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;         &lt;span class="c1"&gt;// Evaluates to 8&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;  &lt;span class="c1"&gt;// Evaluates to 4&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. &lt;strong&gt;Variable Expressions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The value of a variable itself serves as an expression:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;            &lt;span class="c1"&gt;// `x` is an expression that evaluates to 10&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. &lt;strong&gt;Function Call Expressions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When a function is invoked, it returns a value, making the function call an expression:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// Evaluates to 4&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. &lt;strong&gt;Logical Expressions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;These involve boolean operations such as &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; (and), &lt;code&gt;||&lt;/code&gt; (or), and &lt;code&gt;!&lt;/code&gt; (not):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;// Evaluates to false&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;          &lt;span class="c1"&gt;// Evaluates to false&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. &lt;strong&gt;Comparison Expressions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;These expressions compare values and yield a boolean result (&lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;         &lt;span class="c1"&gt;// Evaluates to true&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;         &lt;span class="c1"&gt;// Evaluates to false&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. &lt;strong&gt;Ternary (Conditional) Expressions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This is a compact form of conditional logic that acts as an expression:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Evaluates to "yes"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8. &lt;strong&gt;Object and Array Expressions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Expressions can also create objects or arrays:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;          &lt;span class="c1"&gt;// Array expression&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Leo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;    &lt;span class="c1"&gt;// Object expression&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  9. &lt;strong&gt;Complex Expressions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;More intricate expressions may combine several of the types mentioned above:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;isValid&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;While literals like &lt;code&gt;42&lt;/code&gt; and &lt;code&gt;"hello"&lt;/code&gt; are indeed expressions, it’s crucial to recognize that expressions can take on many other forms. Anything that produces a value in your code—whether it’s a literal, a variable, an operation, or a function call—is classified as an expression. This understanding can significantly enhance your programming skills, making your code more dynamic and functional. So next time you're coding, remember that expressions encompass a wide array of possibilities beyond just simple literals!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
