<?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: Steven Diamante</title>
    <description>The latest articles on DEV Community by Steven Diamante (@sdiamante13).</description>
    <link>https://dev.to/sdiamante13</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%2F448379%2Fa1b1bd0e-5722-401b-a058-1a9b0cfe94df.jpg</url>
      <title>DEV Community: Steven Diamante</title>
      <link>https://dev.to/sdiamante13</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sdiamante13"/>
    <language>en</language>
    <item>
      <title>The Most Underrated Skill in the AI Coding Era</title>
      <dc:creator>Steven Diamante</dc:creator>
      <pubDate>Sun, 08 Jun 2025 03:25:00 +0000</pubDate>
      <link>https://dev.to/sdiamante13/the-most-underrated-skill-in-the-ai-coding-era-f6</link>
      <guid>https://dev.to/sdiamante13/the-most-underrated-skill-in-the-ai-coding-era-f6</guid>
      <description>&lt;p&gt;It's 2025, and I'm advocating you learn how to &lt;strong&gt;identify code smells&lt;/strong&gt;, evaluate &lt;strong&gt;software design&lt;/strong&gt;, and &lt;strong&gt;refactor code safely&lt;/strong&gt;. It's 2025 and coding agents like &lt;strong&gt;Cursor&lt;/strong&gt;, &lt;strong&gt;Claude Code&lt;/strong&gt;, and &lt;strong&gt;Windsurf&lt;/strong&gt; are changing the coding landscape...and I'm talking about refactoring?&lt;/p&gt;

&lt;p&gt;Refactoring is the skill to learn in the age of Vibe Coding.&lt;/p&gt;

&lt;p&gt;These coding agents have been trained on poorly designed codebases filled with code smells. But here's what I've discovered after three years of deep study in refactoring: this makes refactoring skills more valuable, not less.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Gap Between Speed and Quality
&lt;/h2&gt;

&lt;p&gt;Coding agents definitely speed things up, but this profession has never been good at slowing down. Typing has never been the bottleneck. The real bottleneck? Design decisions.&lt;/p&gt;

&lt;p&gt;I've been teaching others about the power of improving code design through refactoring. Evolutionary design is at the heart of why I practice TDD. Test driven development gives me agility. I keep the design as simple as I need it to be. When new requirements are requested, I refactor the design of the code to easily fit in the new feature.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Give me six hours to chop down a tree and I will spend the first four sharpening the ax." — Abe Lincoln&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Your Design Taste is Your Superpower
&lt;/h2&gt;

&lt;p&gt;My taste in software design helps me evaluate its solutions. When Claude Code generates working code, I can quickly spot the Feature Envy, the duplicated logic, &amp;amp; the overly complex conditionals. More importantly, I know how to coach the agent to fix them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try this:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tell a coding agent to &lt;strong&gt;Replace Conditional with Polymorphism&lt;/strong&gt; and watch what happens. The new models understand refactoring vocabulary perfectly and execute it. They mostly get it right, but bring automated tests to give quick feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Refactoring as Communication
&lt;/h2&gt;

&lt;p&gt;Refactoring and code smells give us a shared language to talk about messy code and how to clean it up. When I'm pairing with another engineer—or coding agent—I may suggest we refactor to a Test Data Builders pattern or we can address the Feature Envy and Code Duplication in the current file.&lt;/p&gt;

&lt;p&gt;If you aren't familiar with the language of code design, you'll be less effective when working with others (including coding agents).&lt;/p&gt;

&lt;h2&gt;
  
  
  From just working to adaptable software
&lt;/h2&gt;

&lt;p&gt;The question isn't whether you need refactoring skills in the agentic era. &lt;/p&gt;

&lt;p&gt;The question is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you want to be a developer who can shape and improve code, or one who just accepts whatever the agent produces?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Coding agents give us working code. But working code isn't the same as well-designed code. The difference between the two? That's where your refactoring skills shine.&lt;/p&gt;

</description>
      <category>llm</category>
      <category>refactoring</category>
      <category>xp</category>
    </item>
    <item>
      <title>Experiencing the behavior driven design of using TDD with React Testing Library</title>
      <dc:creator>Steven Diamante</dc:creator>
      <pubDate>Fri, 10 Sep 2021 04:28:50 +0000</pubDate>
      <link>https://dev.to/sdiamante13/experiencing-the-behavior-driven-design-of-using-tdd-with-react-testing-library-37op</link>
      <guid>https://dev.to/sdiamante13/experiencing-the-behavior-driven-design-of-using-tdd-with-react-testing-library-37op</guid>
      <description>&lt;h2&gt;
  
  
  TDD in React
&lt;/h2&gt;

&lt;p&gt;Test driven development (TDD) is a tool for breaking down complex problems into more manageable chunks. This post will explore my journey of applying a TDD approach to website development using React, Jest, and the React Testing Library. In this experiment, I didn't look at the browser for feedback at all. Instead I got all of my feedback from the automated tests. By focusing on the behavior of the components I'm building, I am able to get a working UI quickly and I'm able to change it's behavior while still verifying its accuracy. Also, I ignore all of the styling until I am happy with the behavior of the system. &lt;/p&gt;

&lt;h2&gt;
  
  
  The XP Way
&lt;/h2&gt;

&lt;p&gt;When I started programming professionally, I learned it in an XP way. For more info on Extreme Programming check out my article on &lt;a href="https://www.path-to-programming.tech/posts/xp-scrum-compared-pt1/"&gt;XP compared to Scrum&lt;/a&gt;. My career has always been more than a job. Any product I find myself on, I care deeply about the code, design, architecture, and prosperity of the product. One practice I learned and still continue to, was how to build software through the usage of TDD. Most people have the misconception that TDD is about enforcing tests in our code. But as you will see, it is much more than that. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why does TDD work?
&lt;/h2&gt;

&lt;p&gt;It is human nature to want to break down large problems into smaller problems. By focusing on the behavior you would like to create you step away from the larger problem at hand. Nowadays, there are many talented developers that are creating life changing software. The breadth and depth that our software products have is immense. By using TDD as a tool, we are about to break these gigantic problems into one question? What is the simplest thing I can do to make this test pass? We use tests to dream up a behavior that we wish our software would do. And then that dream becomes a reality. Some people call it red, green, refactor, but you could just as well call it dream, reality,  optimize. &lt;/p&gt;

&lt;h2&gt;
  
  
  Attempting TDD on Android
&lt;/h2&gt;

&lt;p&gt;When I was on an Android mobile app team early on in my career, I wasn't able to apply TDD enough on the app. Something about having the UI there always distracted me. I would lose that flow that us TDD practitioners love to be in. Too much context switching or long running phases of red will break this flow. On my team, we would always style, design, and add business logic all at the same time. It was way too much all at once. Over time I've learned to break down those different parts of the design process. We weren't using testing libraries that check for the behavior of the UI. Although, we did have some Espresso UI tests that are much like the React Testing Library, those were not a part of our everyday local development. For these reasons, our team, which was actively applying XP practices to a mobile product, was not able to achieve a high level of TDD compared to the backend teams in the portfolio. &lt;/p&gt;

&lt;h2&gt;
  
  
  Attempting TDD on React
&lt;/h2&gt;

&lt;p&gt;Recently I have been using TDD to generate websites using React and the React Testing Library. Instead of having a browser window open to view my changes, I just execute &lt;code&gt;npm run test:watch&lt;/code&gt; which executes &lt;code&gt;jest test --watch&lt;/code&gt;. Now, I have a quick feedback loop! And most importantly, LESS CONTEXT SWITCHING! I can dream up some magically behavior I want my UI to do and I can let my automated tests drive towards an optimal design. Most newcomers to the practice don't really understand that at the root of TDD it's all about design. By taking small steps, we only leave the danger zone for short amounts of times. The danger zone being that uncomfortable amount of time where your tests say that your dream and your reality are not aligned. Your software does not work the way you expect it to. &lt;/p&gt;

&lt;h3&gt;
  
  
  Let's break down my thought process
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;I want to add new behavior to my website&lt;/li&gt;
&lt;li&gt;This is my criteria for what will happen when 'x' happens&lt;/li&gt;
&lt;li&gt;DANGER! The software is not in a working state&lt;/li&gt;
&lt;li&gt;Do the simplest possible thing to get back to safety&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Jest test case
&lt;/h3&gt;

&lt;p&gt;Here's a test case I wrote for a task manager application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;it('should add new tasks when enter key is pressed', async () =&amp;gt; {
  renderComponent();
  addNewTask('Take out the trash');
  addNewTask('Write Blog Post');     
  screen.getByLabelText(/Take out the trash/i);      
  screen.getByLabelText(/Write Blog Post/i); 
}
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here are my helper methods so you understand what methods I'm using from the React Testing Library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const addNewTask = (taskName) =&amp;gt; {
  const taskInputField = getTaskInputField();    
  type(taskInputField, taskName);    
  pressEnter(taskInputField); 
}; 

const getTaskInputField = () =&amp;gt; {
  return screen.getByRole('textbox', { name: /Add New Task/i }); };

const type = (input, text) =&amp;gt; {
  fireEvent.change(input, { target: { value: text } });
}; 

const pressEnter = (domElement) =&amp;gt; {
  fireEvent.keyPress(domElement, { key: 'Enter', keyCode: 13 });
}; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As a user I want to add a task and I can accomplish that by typing my task into the input field and clicking the enter button. This test has that same behavior baked into it. After I wrote this test case I wrote the code necessary to make that happen. Here's a small snippet of the JSX for the Task Manager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return (
  &amp;lt;div&amp;gt;
    &amp;lt;h1&amp;gt;Task Manager&amp;lt;/h1&amp;gt;
    &amp;lt;div&amp;gt;
      &amp;lt;label htmlFor="task"&amp;gt;Add New Task&amp;lt;/label&amp;gt;             
      &amp;lt;input id="task" name="task" type="text" value={task.name} 
      onChange={handleChangeEvent} onKeyPress={handleKeyEvent}       
      /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;TaskList tasks={tasks} onCompleted={handleCheckBoxEvent} /&amp;gt;
&amp;lt;/div&amp;gt;
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Programming is fun with TDD
&lt;/h2&gt;

&lt;p&gt;For me, TDD gamifies programming. I love playing games and when I'm enforcing the practice of TDD it makes it feel like I'm playing a game. It makes programming fun! &lt;/p&gt;

&lt;h2&gt;
  
  
  Distracted by UI
&lt;/h2&gt;

&lt;p&gt;One reason why I wanted to try this was due to a problem I've been having lately. While working on building a website I am often getting distracted by wanting to style my content before I've even programmed the behavior of it. I'll always have a thought like "oh I want this part to be blue... and now let's make this App Bar perfect!" But hey hey wait, all of that stuff can wait! So I stop and ask myself... What is it that the user of this product wants it to do? How can my website achieve that behavior? This is where TDD in React really shines. By leaving the styling towards the end, we have guaranteed that the application works like we expect it to work. And now we can focus on all of the details of the UI, UX, and A11y, In my opinion, adding styling is more like visual refactoring. The definition of refactoring is restructuring the code to work in a better way without modifying the current behavior of the system. By adding styling to the components last, we are just restructuring the layout of the components that have already proved themselves to exhibit the behaviors we have designed for them. We are giving them color, depth, and space to harmonize amongst the other widgets, text, and buttons on the screen. After exploring TDD in React I discovered an even better way to do it. Outside-In TDD. Maybe next time!&lt;/p&gt;

</description>
      <category>react</category>
      <category>tdd</category>
      <category>javascript</category>
    </item>
    <item>
      <title>What are the benefits of writing automated testing?</title>
      <dc:creator>Steven Diamante</dc:creator>
      <pubDate>Thu, 13 Aug 2020 04:28:08 +0000</pubDate>
      <link>https://dev.to/sdiamante13/what-are-the-benefits-of-writing-automated-testing-4kal</link>
      <guid>https://dev.to/sdiamante13/what-are-the-benefits-of-writing-automated-testing-4kal</guid>
      <description>&lt;p&gt;TLDR; I am giving a presentation on unit testing and TDD. I would like to know your opinions and experiences with automated testing.&lt;/p&gt;

&lt;p&gt;I practice test driven development(TDD) every day at my job. I am a part of an extreme programming (XP) team in a 70 year old company. Other teams outside of our portfolio practice scrum and lack the testing reflex that we all have. A colleague and I are giving a presentation next month to  our Java Community of Practice on unit testing. We will talk about its benefits and why developers should write tests. We will also talk about the benefits that writing tests first can have on your code quality. I know the benefits I gain from them, but I would like to hear from this community. If you have never written unit tests, then I would especially like to hear from you. What would you like to know about unit tests? If you dislike testing, what is it that you dislike? Feel free to share any opinions you have on the topic. Thanks in advance!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>testing</category>
      <category>tdd</category>
    </item>
    <item>
      <title>How I Learn</title>
      <dc:creator>Steven Diamante</dc:creator>
      <pubDate>Fri, 07 Aug 2020 03:39:59 +0000</pubDate>
      <link>https://dev.to/sdiamante13/how-i-learn-9mo</link>
      <guid>https://dev.to/sdiamante13/how-i-learn-9mo</guid>
      <description>&lt;h1&gt;
  
  
  Career Reflection
&lt;/h1&gt;

&lt;p&gt;I started my first software developer job two years ago. I've learned so much along the way and still have tons more to learn. In a career like this, the learning never stops as this is a continually evolving industry. I love new challenges and learning new things. In conversations with fellow developers they have been impressed in my ability to learn quickly and retain information. I've had several people ask me how I learn new technologies and keep my passion for software engineering so strong. In this article, I will talk about how I learn new skills and from what sources I draw this knowledge from. My approach to learning may not work for you since everybody has their own learning style, but hopefully it can give you ideas on how to learn.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cUYR02js--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m80axlik1lka296yys62.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cUYR02js--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m80axlik1lka296yys62.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  I Surround myself with programming
&lt;/h1&gt;

&lt;p&gt;I learn from a lot of different sources and mediums. Of course, I have other interests besides programming, but over the past few years programming has emerged as one of my favorite hobbies. I am lucky to be getting paid for what I love to do. I constantly read, watch, and listen to programming topics. By having different sources of information, I never get bored or feel like I'm over working my brain.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2KI3nPnT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/v9d16b6rgrmewt4jecbw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2KI3nPnT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/v9d16b6rgrmewt4jecbw.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  YouTube
&lt;/h3&gt;

&lt;p&gt;I subscribe to many software development content creators. Some present programming tutorials and others talk about soft skills. When I'm bored, I scroll through my subscriptions and add programming videos to my watch later list. Some are focused on technologies I've been wanting to learn and others are cool conference talks. Often times they correlate to one of my side projects or something I'm coding at work. I watch these videos with a purpose. If the video turns out to be boring, too difficult to understand, or disengaging for any reason then I stop watching it. If the content is not benefiting my learning I don't want to waste my time on it. If I still want to pursue the topic I find another video or seek out other resources on other websites.&lt;/p&gt;

&lt;p&gt;Some YouTubers speak too slowly for me and if the content is not extremely difficult to grasp I will speed up the video. In the settings of the video you can increase the video speed to up to 2.0x the original speed. I usually will set it to 1.25x or 1.5x and slow it back down for more difficult topics.&lt;/p&gt;

&lt;p&gt;I have started my own programming channel called &lt;strong&gt;Path To Programming&lt;/strong&gt;. I am starting with a video series on a Budget Tracker project I am developing. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8H1HaNx9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uctmmpwojzwwrzbmgis8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8H1HaNx9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uctmmpwojzwwrzbmgis8.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Teaching someone something that you just learned is the best way to retain information on a new subject. I want to make sure I am getting everything right so it requires me to do more research than I normally would do if I was just hacking away at some project. Publishing YouTube videos and blog posts have been crucial in my development as a software engineer. They also serve as a reference for myself. When stumbling back upon a technology I haven't used in a while I will just read one of my articles to remind myself of how to use it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/channel/UCxxHkYTfLe5EM7SpcLCIY0w"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BMdiHioX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/aanpuqqkwkhavpmy2q3k.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Medium
&lt;/h3&gt;

&lt;p&gt;About 6 months ago I started my Medium subscription. I primarily read articles about programming. This way most of the articles that show up in my feed are going to feed back into my learning. Whenever I'm sitting around the house, I like to browse and read programming articles. When I am working with a new technology I will search directly for it. I also enjoy reading Dzone, Baledung, and Mkyong articles. I highly recommend these blogs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IwHOz_BV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8r97vvlw6ftzdgjjadls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IwHOz_BV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8r97vvlw6ftzdgjjadls.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Podcasts
&lt;/h3&gt;

&lt;p&gt;I love listening to podcasts. They are a great source of information while on the go. I have a 45 minute commute in the morning and evening while traveling to work. I am able to utilize that time for my learning as well. My favorite train activity is to listen to podcasts. It may seem strange to listen to a podcast about coding, but it is actually very effective for learning the emerging trends in the software industry.&lt;/p&gt;

&lt;p&gt;Here's all of the podcasts I listen to ranked in order of personal preference:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CodeNewbie&lt;/li&gt;
&lt;li&gt;Fragmented&lt;/li&gt;
&lt;li&gt;Command Line Heroes&lt;/li&gt;
&lt;li&gt;Go Time&lt;/li&gt;
&lt;li&gt;The React Podcast&lt;/li&gt;
&lt;li&gt;Developer Tea&lt;/li&gt;
&lt;li&gt;Programming Throwdown&lt;/li&gt;
&lt;li&gt;Software Engineering Daily&lt;/li&gt;
&lt;li&gt;if/else&lt;/li&gt;
&lt;li&gt;Healthy Software Developer&lt;/li&gt;
&lt;li&gt;Talking Kotlin&lt;/li&gt;
&lt;li&gt;Weekly Dev Tips&lt;/li&gt;
&lt;li&gt;The Programmer Toolbox&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NZ4FrObp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qmd5pzff9lh4ogrq86wy.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NZ4FrObp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qmd5pzff9lh4ogrq86wy.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I recommend you check out at least the top 6. Browse the episodes and choose one that speaks to you. If you are interested in the history of computers and programming then checkout Command Line Heroes. Listening to this podcast gave me so much background on the world of software that came before I joined the industry. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jjAT6aa3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6yotpb6fnukh4tw2i2fi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jjAT6aa3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6yotpb6fnukh4tw2i2fi.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Twitter
&lt;/h3&gt;

&lt;p&gt;I am not the biggest user of social media, but I do browse Twitter from time to time. I don't publish many tweets, but I do read my feed which is mostly made up of software developers and advocates. This gives me information about technology trends, personal accounts from other devs, and access to new articles and videos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LQFx0eR0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/13bvdbn2kxt8g03wxy9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LQFx0eR0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/13bvdbn2kxt8g03wxy9a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Reddit
&lt;/h3&gt;

&lt;p&gt;Reddit is an interesting place to say the least. This serves as yet another source of information and public opinion I use to immerse myself in software development. Sometimes I answer programming questions and participate in discussions, but mostly I read articles and memes people have posted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B-AOLUtb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rmrm8joaajv2q4ecxdk9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B-AOLUtb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rmrm8joaajv2q4ecxdk9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are some of my favorite subreddits I follow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;r/java&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r/mongodb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r/ProgrammerHumor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r/programming&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r/Kotlin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r/softwaregore&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r/learnprogramming&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r/React&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Projects &amp;gt; Tutorials
&lt;/h1&gt;

&lt;p&gt;When learning a new library, framework, or programming language I like to start by reading an article or watching a YouTube video. When I want to deep dive into a subject I take a Udemy course. Most times I do not finish the entire Udemy course, but I always walk away learning a lot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AtudI7n---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b8adwlfkscnhnyfmzlqv.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AtudI7n---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b8adwlfkscnhnyfmzlqv.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FtQ_g43K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lk8aadgzn22xkeq2mau2.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FtQ_g43K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lk8aadgzn22xkeq2mau2.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One lesson I've learned is that programming tutorials must not be done in isolation. You need to approach these tutorials with a solid goal in mind. If you want to learn a brand new language you can't just watch someone else code in it. You need to practice writing code on your own. That doesn't mean just copying whatever they type. Pause the video and write the code on your own before watching how they do it. If you get stuck then by all means continue the video and you'll learn what you did wrong. This is how the learning sticks with you. When you have that experience of failure, you tend to remember that not by watching someone else continually succeed in a tutorial video.&lt;/p&gt;

&lt;h3&gt;
  
  
  Personal Projects
&lt;/h3&gt;

&lt;p&gt;I've built an E-Commerce website hosted on Heroku using Spring Boot and Thymeleaf. I built this project with a family member who was interested in transitioning to software engineering. One of the things I learned from this project was how to use Spring Security to enforce authentication via a JSON Web Token (JWT) from the backend Rest API. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5I_2XKUS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xkggnoc9v6c1zy4jxdu2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5I_2XKUS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xkggnoc9v6c1zy4jxdu2.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built an Android app for an employee management system. I used Kotlin, Firebase, Koin, AndroidX, and Mockk. I had never used any of those technologies before, but was able to work on the project while learning what I need to learn build the product.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s0LhUmM_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yg9hb421bzrj5pzx8cke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s0LhUmM_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yg9hb421bzrj5pzx8cke.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My current personal project is a budget tracking application using MongoDB and Spring Boot for the backend and React for the frontend. &lt;/p&gt;

&lt;p&gt;Working on a project would require me to dig just deep enough to get things working.  I would learn while trying to solve the business problems of the application. If I did not know how to do something I would watch videos, read articles, and investigate StackOverflow questions until I could solve the problem in front of me. &lt;/p&gt;

&lt;h1&gt;
  
  
  Programming Books
&lt;/h1&gt;

&lt;p&gt;Published books about programming can often be the best source of information. Books take time to write and are revised and fact checked thousands of times. I was recommended a few books that every developer must read.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pragmatic Programmer by Andy and Dave
&lt;/h3&gt;

&lt;p&gt;The first edition of Pragmatic Programmer came out in 2000. I preordered the second edition of Pragmatic Programmer last year. I have recently finished it and I know I have become a better developer because of it. This book is about how programmers should think and approach the world of software development. The writers encourage developers to be professionals and masters of their craft. I think I'll be reading this book the rest of my career. That's how useful this information is.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MIHQAXPr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tmiuo1svz1jwfyckyg52.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MIHQAXPr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tmiuo1svz1jwfyckyg52.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Clean Code by Robert C. Martin
&lt;/h3&gt;

&lt;p&gt;I have recently purchased this book so I cannot comment on the content, but I have heard from developers on how this book changed the way they wrote code. I already love writing clean and readable code so I am looking forward to learning how to do that even better.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LyydV-Sx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s96w35i2k928oyom2lrw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LyydV-Sx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s96w35i2k928oyom2lrw.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Extreme Programming Explained by Kent Beck
&lt;/h3&gt;

&lt;p&gt;This book was given to me when I first joined the company I work for. We use Extreme Programming (XP) so it is required that new developers read this book. Even if you don't use XP it is useful to see how other software disciplines operate. XP is more than just TDD and pair programming. There are values and beliefs that must be upheld in order to be effective in this discipline. Kent Beck has visited our company to talk about programming. He seems like a really nice person curious about learning about people and software.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SmAArR-p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7pk9hb9rxzb4hqo8jyqo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SmAArR-p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7pk9hb9rxzb4hqo8jyqo.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Multiple tracks of learning
&lt;/h1&gt;

&lt;p&gt;I like to have multiple tracks of work which I can bounce back and forth on. I get bored of doing the same thing all the time. I'm not the kind of person that can watch a tutorial series on a new subject every day for a month. I don't follow any kind of schedule with these things. It's more of an impulse. I never want to feel like I am forced to learn or do something related to programming. If you feel like you are hitting a road block while learning something. Try finding something new to learn. Try reading about system design or practicing algorithms or writing out a TDD Kata. Just find something that reignites that passion and see where it takes you next.&lt;/p&gt;

&lt;h1&gt;
  
  
  Learn from mistakes
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kn3WRH85--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z547hlhut5ckj4f4j0f2.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kn3WRH85--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z547hlhut5ckj4f4j0f2.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have made many mistakes in my career as a software engineer. I have learned a valuable lesson from everyone of them. I will make more mistakes. The most important thing is that they should be low risk mistakes. If your Software Development Life Cycle (SDLC) is setup in a way that you can make mistakes in lower environments (like Acceptance or Staging) and fix them quickly then you won't be as afraid to try new things and take risks. &lt;/p&gt;

&lt;p&gt;I look back at myself from 6 months ago and think about how much I didn't understand. Some code I wrote one year ago will most likely drive me to refactor it, because it's not written well. &lt;/p&gt;

&lt;p&gt;I want to be better than I was yesterday. To do this, I accept that I will make mistakes and that is okay. I will share my mistakes with others so they can learn from my failures as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  Post mortem
&lt;/h3&gt;

&lt;p&gt;A post mortem is a meeting where a group of people reflect on a major malfunction that happened in their product. My only post mortem was a year into my career when I was an anchor on an API team using a MySQL database as their datasource. &lt;/p&gt;

&lt;p&gt;One morning our database crashed and we were not prepared on how to handle it. We did not know the proper people to contact to fix the problem and we were not even sure on the exact location of our database to tell those people where to look. Not knowing that there were better solutions, we as a group decided we would start up a brand new database and start our ETL process to load data (50 million records) from our centralized DB2 datasource. This process took over 4 days to complete. Our Staging application was not functioning for that whole time, which blocked other teams using our API from testing their new feature changes.&lt;/p&gt;

&lt;p&gt;During the post mortem, we talked about very detailed events and times that happened during the crisis. The PCF Platform team that manages the database were also there. It gave us a chance to build a working relationship with them and learn from all of our mistakes. By putting everything out there we were able to learn the correct course of action the next time this happens. Our database crashed a month later in production and we were able to get it restarted in less than an hour. Later, we identified the root cause and upgraded our storage capacity. As a result, the crashes stopped happening.&lt;/p&gt;

&lt;h1&gt;
  
  
  Learn from other developers
&lt;/h1&gt;

&lt;p&gt;I cannot write this article without giving credit to developers that I have worked with. In my portfolio, we pair program everyday and rotate teams frequently. This has given me the ability to work with many different developers. I always ask questions when I don't understand something or see something new they have done. I've picked up a lot of techniques, coding styles, and much more from working with other developers. If you have not tried pair programming, I encourage you to seek out a developer more experienced than you and pair with them on a project. Who knows...? You might teach them something new.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qtQzzgXZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pyrbv1lf38jf48wq4kxb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qtQzzgXZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pyrbv1lf38jf48wq4kxb.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;StackOverflow is a website I frequently find myself coming across. When a challenging bug, error message, or library shows itself I will google it and there is StackOverflow with the answer in most cases. But how often have you answered a question on StackOverflow? I found myself always taking from the community so I decided to start giving back. I usually search for Java, Spring, Mockito, Kotlin, and JUnit. I scroll through the questions until I find one that I'm confident I can answer. Even if I don't know the answer right away, a little research or debugging their problem in my IDE usually gives me enough to help them out. At first it can be hard to do anything on StackOverflow, because of their ranking system. Look for a really easy questions in the beginning and make sure you are the first one answering. Eventually you will be given more freedom to comment, rate others' questions and answers, and do other things like post bounties. Seeing how other people are using technologies and writing code helps me become a better developer as well. I am able to learn from their mistakes or see a bug I had never seen before.&lt;/p&gt;

&lt;h1&gt;
  
  
  Algorithms
&lt;/h1&gt;

&lt;p&gt;Solving algorithms on &lt;a href="https://leetcode.com/"&gt;LeetCode&lt;/a&gt; or &lt;a href="https://www.hackerrank.com/"&gt;HackerRank&lt;/a&gt; is like a game to me. It makes development fun and challenging. It allows me to improve my skills in recursion, dynamic programming, and on what data structures to use. It is also a useful skill to have when interviewing for top tier software companies.&lt;/p&gt;

&lt;h1&gt;
  
  
  More than Code
&lt;/h1&gt;

&lt;p&gt;Not all of my learning revolves around code. Software development is not always about the code we write. As software developers we are building solutions to business problems that our stakeholders have. During my learning, I've improved my knowledge on software architecture, system design, and soft skills. &lt;/p&gt;

&lt;h3&gt;
  
  
  Software Architecture
&lt;/h3&gt;

&lt;p&gt;Understanding the building blocks of software is a critical part of any software engineer's knowledge base. Not only should we know how to apply the abstract solutions designed by software architects, but we should be able to understand them as well. Even better we should learn what makes a good architecture solution for the given use case. What types of building blocks are available to use? I am no software architect, but I have been paying attention to different software architectures. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p5OBVI1x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dxtmaof5j4ob4s7fv99i.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p5OBVI1x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dxtmaof5j4ob4s7fv99i.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  System Design
&lt;/h3&gt;

&lt;p&gt;In some interviews, you may be asked a System Design question. For example, how would you build Twitter? What kind of databases would you use? What about load balancers, resilience, caching? One design does not fit all of the problems out there. One must understand why to use a NoSQL datastore as opposed to a SQL datastore. How much uptime do we need? What about the maximum transaction response time? Is a messaging queue appropriate for this system? I'm not going to talk about any of this in detail, but below is a great resource I highly recommend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/donnemartin/system-design-primer"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rHGxUg1a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mkit05a8z4cbv4lqbenr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Soft Skills
&lt;/h3&gt;

&lt;p&gt;Soft skills are any non-technical skills you bring with you to your profession. These are just as important as technical skills and should be studied just the same. Some people already have these skills strongly developed and others require more focus in these areas. Examples of soft skills include communication, collaboration, the ability to learn, creativity, a healthy ego, accountability, critical thinking, empathy, flexibility, and passion. Not all of these are required, but they go along way in connecting with others and being a great team member. Just as with all technical topics, if you need to improve these skills there are resources out there to help you. After that you must practice, improve, and learn from your mistakes.&lt;/p&gt;

&lt;h1&gt;
  
  
  Notes &amp;amp; Goals
&lt;/h1&gt;

&lt;p&gt;I know of some people that make a daily log of things they work on for their job and/or on their own time. This is a very effective way to learn and reflect on one's growth. I never did this and don't plan to, but I do have other approaches to this. &lt;/p&gt;

&lt;p&gt;Whenever I see an interesting library or framework or I get an idea of a new project to work on, I make a note of it in my phone's Notes app. I recently have transferred that list to a Trello board and I have been working through it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZLEXhPCV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/w0j5tze0o209xhuawxb8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZLEXhPCV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/w0j5tze0o209xhuawxb8.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As for technical notes, I always use Github to store my spikes and technical learnings. That way I can always refer back to them. Writing a blog post is also a great way to make the learning stick and serves as documentation you can visit in the future. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;What's better than learning from yourself, right!?&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;There's many approaches to learning and everyone has their own way. As you can see I take a hybrid approach and always maintain multiple tracks of work. I love learning new things and in the world of software development there's always something new to learn. Don't be overwhelmed by the amount of information there is. Take it step by step and enjoy the journey. Once you find yourself not having fun, stop and try something else or take a break for a while. It will be there when you're ready to come back. &lt;/p&gt;

</description>
      <category>career</category>
      <category>learning</category>
      <category>motivation</category>
      <category>softskills</category>
    </item>
  </channel>
</rss>
