<?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: Johan Maes</title>
    <description>The latest articles on DEV Community by Johan Maes (@placetobejohan).</description>
    <link>https://dev.to/placetobejohan</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%2F2758597%2F45653e48-72c4-487e-856c-18cfdaa1dd3a.png</url>
      <title>DEV Community: Johan Maes</title>
      <link>https://dev.to/placetobejohan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/placetobejohan"/>
    <language>en</language>
    <item>
      <title>With a little help from my peers</title>
      <dc:creator>Johan Maes</dc:creator>
      <pubDate>Thu, 10 Apr 2025 12:02:57 +0000</pubDate>
      <link>https://dev.to/placetobejohan/with-a-little-help-from-my-peers-418f</link>
      <guid>https://dev.to/placetobejohan/with-a-little-help-from-my-peers-418f</guid>
      <description>&lt;p&gt;&lt;em&gt;Lend me your eyes and read this article about the importance of code reviews.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In a recent job interview, I mentioned that I tend to be a bit of a nitpicker when reviewing pull requests, albeit in an ever-gentle manner. As a follow-up, I was asked why I thought code reviews were so important. Unfortunately, I only managed to blurt out a few phrases like &lt;code&gt;code quality&lt;/code&gt; and &lt;code&gt;knowledge sharing&lt;/code&gt; – job interviews bring out the best deer-in-the-headlights version of me. In this article, I'll try to elaborate on my out-of-tune answer.&lt;/p&gt;

&lt;p&gt;The most obvious reason to do code reviews is to catch errors, enforce codebase standards and suggest improvements related to efficiency, readability, or maintainability. To put it slightly more dramatically: unless it's part of a deliberate strategy to deliver quickly and refactor later, it's your last chance to stop technical debt from piling up. For some developers, that's all a code review is – a gatekeeper for &lt;strong&gt;quality&lt;/strong&gt;. But guess what? There's a lot more to it. Otherwise, this article would be ridiculously short.&lt;/p&gt;

&lt;h2&gt;
  
  
  Are you sad because you're on your own?
&lt;/h2&gt;

&lt;p&gt;Have you ever been on a team where everything grinds to a halt because the one VID&lt;sup id="fnref1"&gt;1&lt;/sup&gt; who knows how to fix the broken service is out? Yes, I'm certain that it happens all the time. Code reviews are a simple way to break down developer silos – though it might take a bit of patient persuasion to get that VID to open pull requests and tag reviewers.&lt;/p&gt;

&lt;p&gt;Whether it's about getting to know a project, dipping your toes into a new technology, or understanding an unfamiliar algorithm, I see every PR I review as a learning opportunity – and so should you. This, along with having backup developers, falls under the umbrella of &lt;strong&gt;knowledge sharing&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Could it be anybody?
&lt;/h2&gt;

&lt;p&gt;Code reviews can be a powerful &lt;strong&gt;democracy-enabler&lt;/strong&gt; within teams. There's often an imbalance between team members, whether due to seniority or codebase knowledge. This can lead to both conscious and unconscious beliefs that one opinion matters more than another&lt;sup id="fnref2"&gt;2&lt;/sup&gt;. While code reviews don't erase these hierarchical differences, they do help soften them.&lt;/p&gt;

&lt;p&gt;Reviewing also promotes &lt;strong&gt;shared ownership&lt;/strong&gt;: the quality of the work is the responsibility of both the author and the reviewer(s). This fosters better team collaboration, reduces finger-pointing and increases pride in the work. Dare I say it? Two (or more) brains working together are generally better than one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do you see when you turn out the light?
&lt;/h2&gt;

&lt;p&gt;Where pair programming is clearly the extrovert's playing field, the pull request is a natural habitat for &lt;strong&gt;introverts&lt;/strong&gt; (like me). While I see the value in occasionally working together on the same task, I think I'd find it rather stressful as a structural approach&lt;sup id="fnref3"&gt;3&lt;/sup&gt;. One could also argue that pair programming isn't a substitute for code reviews, since the setups are different: when you're pair programming, you might be biased towards your partner's view, while you normally approach a code review with a fresh perspective.&lt;/p&gt;

&lt;p&gt;In that light, I should also briefly mention tests. On the one hand, they are absolutely necessary and offer a certain degree of trust; on the other, they're still code that could contain bugs or fail to cover all use cases. To ensure a healthy codebase, you need both a comprehensive test suite and proper code reviews. Two things are true.&lt;/p&gt;

&lt;h2&gt;
  
  
  Would you believe in approval at first sight?
&lt;/h2&gt;

&lt;p&gt;Of course, you can't achieve any of the above if you don't take code reviews seriously. That means putting in the time and effort to run the code and understand the changes – always approving without comments quickly becomes suspicious. Everyone approaches them a little differently, but it's a good idea to define a baseline within your team – both for reviewing and creating pull requests. A few pointers on the latter: keep the PR size limited, make small and meaningful commits, and provide context when needed.&lt;/p&gt;

&lt;p&gt;As a curious end note, I've always wondered why the practice of reviewing is so ingrained in the world of software yet often absent in other fields. Wouldn't everyone benefit from a second pair of eyes checking their work? Either way, the next time they ask me this question in a job interview, my answer should be ever so slightly more robust.&lt;/p&gt;

&lt;p&gt;Gonna try,&lt;/p&gt;

&lt;p&gt;Johan&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;Very Important Developer. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;Unfortunately, I've worked in teams where only the lead or senior developers could review (or even merge) pull requests. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;To be clear, I've never done extreme programming, so the jury's still out on that one. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>softwaredevelopment</category>
      <category>culture</category>
      <category>workplace</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Mama, ooh, I am not AI</title>
      <dc:creator>Johan Maes</dc:creator>
      <pubDate>Sat, 22 Mar 2025 12:23:54 +0000</pubDate>
      <link>https://dev.to/placetobejohan/mama-ooh-i-am-not-ai-4aji</link>
      <guid>https://dev.to/placetobejohan/mama-ooh-i-am-not-ai-4aji</guid>
      <description>&lt;p&gt;&lt;em&gt;Why equating AI to a junior developer is misleading at best.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After listening to the latest &lt;a href="https://open.spotify.com/episode/7FgYUSosThl5d9np9vwGsk?si=5d23754f5c174477" rel="noopener noreferrer"&gt;Reqless episode with Kurt Schrader&lt;/a&gt; – insightful as ever – there’s one thing I need to get off my chest. I get why people compare AI to junior developers, but it doesn’t sit right with me. AI might be great at churning out code, but juniors bring something AI simply can’t: growth, reasoning, and the ability to develop real understanding over time. The comparison isn’t just misleading – it undervalues what junior developers actually bring to the table.&lt;/p&gt;

&lt;h2&gt;
  
  
  So you think you can stone me and spit in my eye?
&lt;/h2&gt;

&lt;p&gt;From the moment I started as a developer – though I wasn’t exactly a straight-out-of-school junior – I noticed a certain condescension toward junior developers in our industry. Sometimes it’s framed as a joke, but the underlying sentiment is still there.&lt;/p&gt;

&lt;p&gt;I’ve never quite understood why. Plenty of so-called senior developers occasionally write bad code or make poor decisions – myself included – while many juniors often produce great work – my former self included, I hope. A good engineering culture should foster growth, not diminish those who just starting out. Worse, this attitude skews how we mentor and hire developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is this the real life? Is this just fantasy?
&lt;/h2&gt;

&lt;p&gt;What even is a junior or senior developer? Usually it's tied to years of experience – whatever experience that may be. I won't dig too deep here; it's enough to say that a person is so much more than just their time in a specific field.&lt;/p&gt;

&lt;p&gt;I'm afraid these titles have more to do with sales and marketing than any real meaning. Another buzzword that never fails to send shivers down my spine – especially in consultancy – is &lt;em&gt;expert&lt;/em&gt;. But let's not open that can of worms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mama, just killed the junior developer
&lt;/h2&gt;

&lt;p&gt;While I’m not denying that there’s a difference between a junior and a senior developer, equating AI to a junior dev is misleading at best. AI lacks reasoning, intuition, and context awareness – essential traits of even a beginner developer. This comparison oversimplifies things and undervalues human learning and adaptability. AI is a tool, and like any tool, its effectiveness depends on how it’s used.&lt;/p&gt;

&lt;p&gt;Maybe I just have a knee-jerk reaction to the culture of dismissing juniors. The comparison might sound less like an insult if it simply means: work once given to a junior is now given to an AI agent. But if that’s the case, juniors can now take on other tasks – more than they used to. Bismillah! The end of the junior developer as we once knew them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goodbye, everybody, I’ve got to go
&lt;/h2&gt;

&lt;p&gt;Which brings me to what may be a surprising conclusion: AI could actually bridge the gap between junior and senior developers. We won’t have junior and senior developers any longer; we’ll only have superior developers, more powerful than ever now that they are supported by AI.&lt;/p&gt;

&lt;p&gt;Any way the wind blows, I’d love to hear your thoughts on this.&lt;/p&gt;

&lt;p&gt;Easy come, easy go,&lt;/p&gt;

&lt;p&gt;Johan&lt;/p&gt;

</description>
      <category>ai</category>
      <category>culture</category>
      <category>inclusion</category>
    </item>
    <item>
      <title>I Want to Ride My Bicycle (Stage 1)</title>
      <dc:creator>Johan Maes</dc:creator>
      <pubDate>Fri, 14 Feb 2025 10:45:43 +0000</pubDate>
      <link>https://dev.to/placetobejohan/i-want-to-ride-my-bicycle-stage-1-5a7k</link>
      <guid>https://dev.to/placetobejohan/i-want-to-ride-my-bicycle-stage-1-5a7k</guid>
      <description>&lt;p&gt;&lt;em&gt;This is part 1 of a write-up of my &lt;a href="https://github.com/placetobejohan/uci-road-races-map" rel="noopener noreferrer"&gt;practice project&lt;/a&gt;: displaying all 2025 UCI road cycling races on a map.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'm currently reinventing myself as a developer&lt;sup id="fnref1"&gt;1&lt;/sup&gt; and learning a bunch of new stuff: PostGIS, Python, Django, some AI shit &lt;sup id="fnref2"&gt;2&lt;/sup&gt;, etc. Since the best way to learn is by doing - and because I don't want to lose the joy I get from coding - I set out to find a suitable open-source project on Github.&lt;/p&gt;

&lt;p&gt;There are plenty of interesting ones out there, but getting started always feels a bit unnatural. Jumping into a project isn't easy, and it's often unclear which issues are actually up for grabs or truly wanted.&lt;/p&gt;

&lt;p&gt;I've never had any hobby projects to show off - free time is scarce with two little ones hopping and bopping around. But since the unemployed have &lt;a href="https://open.spotify.com/track/5Ff9pNmVotx5UMIg3YDblH?si=fe9cdc7a1a644a9f" rel="noopener noreferrer"&gt;all of the time in the world to kill&lt;/a&gt;, now seems like a good time to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prologue: Introduction to the project
&lt;/h2&gt;

&lt;p&gt;I'm just a farmer's son from Belgium&lt;sup id="fnref3"&gt;3&lt;/sup&gt;, which means I'm a huge cycling fan. I also happen to be a maps enthusiast, so why not combine these two passions into an IT project&lt;sup id="fnref4"&gt;4&lt;/sup&gt;? Let's display all the UCI road cycling races on a map!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://datasette.io/" rel="noopener noreferrer"&gt;Datasette&lt;/a&gt; seems like the perfect fit since it handles the heavy lifting of spinning up a website and even displaying items on a map. That means I can focus on getting the data ready: fetch it, clean it up, and normalize it.&lt;/p&gt;

&lt;p&gt;I didn't end up using all technologies and tools I'm currently learning&lt;sup id="fnref5"&gt;5&lt;/sup&gt; but I did put together an interesting list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://sqitch.org/" rel="noopener noreferrer"&gt;sqitch&lt;/a&gt; - database migrations&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://postgis.net/" rel="noopener noreferrer"&gt;PostGIS&lt;/a&gt; - geospatial data&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sqlfluff.com/" rel="noopener noreferrer"&gt;SQLFluff&lt;/a&gt; - SQL formatting and linting&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pgtap.org/" rel="noopener noreferrer"&gt;pgtap&lt;/a&gt; - testing&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://datasette.io/" rel="noopener noreferrer"&gt;Datasette&lt;/a&gt; - data visualization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see, these tools are all heavily focused on Postgres. I'll let the migthy, wise blue elephant be my guiding anchor on this adventure. On your marks! Get set! Go!&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 1. Fetch the data
&lt;/h2&gt;

&lt;p&gt;Your data is only as good as its source. When it comes to cycling data, the most complete website is definitely &lt;a href="https://www.procyclingstats.com/" rel="noopener noreferrer"&gt;ProCyclingStats&lt;/a&gt;. However, since the UCI&lt;sup id="fnref6"&gt;6&lt;/sup&gt; is the official governing body of cycling, I wanted to try getting the data from the &lt;a href="https://www.uci.org/" rel="noopener noreferrer"&gt;UCI website&lt;/a&gt; first.&lt;/p&gt;

&lt;p&gt;For my first attempt, I had Claude generate a &lt;a href="https://github.com/placetobejohan/uci-road-races-map/blob/json-data/01-fetch-races/fetch-and-store-races.py" rel="noopener noreferrer"&gt;Python script&lt;/a&gt;&lt;sup id="fnref7"&gt;7&lt;/sup&gt; that uses an XHR call from the &lt;a href="https://www.uci.org/calendar/road/2ruOnavHX0dMGTCRozdYAU?discipline=ROA" rel="noopener noreferrer"&gt;calendar page&lt;/a&gt; to fetch all World Tour races. I decided to start with the World Tour as a sample set.&lt;/p&gt;

&lt;p&gt;However, this &lt;a href="https://www.uci.org/api/calendar/upcoming?discipline=ROA&amp;amp;seasonId=989" rel="noopener noreferrer"&gt;API call&lt;/a&gt; was clearly designed specifically for their calendar page, and it left me unsatisfied for several reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It only returned upcoming races.&lt;/li&gt;
&lt;li&gt;The data structure made it a bit of a pain to extract what I needed.&lt;sup id="fnref8"&gt;8&lt;/sup&gt;
&lt;/li&gt;
&lt;li&gt;Key race details were missing, though there was a link to a UCI race page with more information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So there I was, digging through the details link and other API calls, trying to piece together the information, until I noticed the &lt;code&gt;DOWNLOAD SEASON&lt;/code&gt; button to download the entire road race calendar as an XLS file. D'oh!&lt;/p&gt;

&lt;p&gt;I first created a new database &lt;code&gt;pro_cycling&lt;/code&gt;, initialized sqitch with &lt;code&gt;sqitch init&lt;/code&gt;, and created a separate schema &lt;code&gt;uci_road_raw&lt;/code&gt; for the source data. Then I defined the raw races table as simple as possible - all text fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;uci_road_raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;races&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;date_from&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;date_to&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;venue&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;country&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;calendar&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;website&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And after converting the XLS file to CSV, &lt;code&gt;psql&lt;/code&gt; did the rest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="k"&gt;copy&lt;/span&gt; &lt;span class="n"&gt;uci_road_raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;races&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="s1"&gt;'/home/johan-maes/source/uci-road-races-map/data/UCICompetitions_ROA_2025.csv'&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FORMAT&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HEADER&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Talk about a sprint to the finish line! A quick inspection of the data showed 711 road races in the 2025 season - covering all classes (World Tour, Pro, etc.) and categories (Men, Women, etc.). Interestingly, it also includes 16 races from the end of 2024.&lt;/p&gt;

&lt;p&gt;That's it for part 1 of this trilogy in five parts&lt;sup id="fnref9"&gt;9&lt;/sup&gt;. Part 2 (aka Stage 2) will focus on creating the lookup tables to normalize the data. &lt;/p&gt;

&lt;p&gt;Thanks for reading - and apologies for the footnotes overload&lt;sup id="fnref10"&gt;10&lt;/sup&gt;.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;This is marketer speak for &lt;code&gt;I quit my IT consulting job and now have some time to explore what I would like to do next&lt;/code&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;There's no escaping it. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;I'm not actually a farmer's son. The phrase is a reference to Yves Lampaert's legendary post-race interview after he won the prologue in the 2022 Tour de France. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn4"&gt;
&lt;p&gt;Because every problem can be solved with IT, even the ones that don't exist yet. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn5"&gt;
&lt;p&gt;I'm a data person at heart. If I can do something in the database (and it's not completely stupid), I will. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn6"&gt;
&lt;p&gt;Union Cycliste Internationale - it was founded in France. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn7"&gt;
&lt;p&gt;See how fast I'm learning Python? ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn8"&gt;
&lt;p&gt;Even though the new PostgreSQL 17 &lt;a href="https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-SQLJSON-TABLE" rel="noopener noreferrer"&gt;JSON_TABLE feature&lt;/a&gt; proved to be &lt;a href="https://github.com/placetobejohan/uci-road-races-map/blob/json-data/sqitch/deploy/tables/races.sql" rel="noopener noreferrer"&gt;very effective&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn9"&gt;
&lt;p&gt;Not my joke: &lt;a href="https://www.goodreads.com/book/show/372299.The_Hitch_Hiker_s_Guide_to_the_Galaxy" rel="noopener noreferrer"&gt;https://www.goodreads.com/book/show/372299.The_Hitch_Hiker_s_Guide_to_the_Galaxy&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn10"&gt;
&lt;p&gt;Who reads footnotes anyway? ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>postgres</category>
      <category>data</category>
      <category>sql</category>
      <category>learning</category>
    </item>
    <item>
      <title>Hey Hey, AI (Into the Black?)</title>
      <dc:creator>Johan Maes</dc:creator>
      <pubDate>Thu, 30 Jan 2025 14:17:20 +0000</pubDate>
      <link>https://dev.to/placetobejohan/-hey-hey-ai-into-the-black-2ofo</link>
      <guid>https://dev.to/placetobejohan/-hey-hey-ai-into-the-black-2ofo</guid>
      <description>&lt;p&gt;&lt;em&gt;Is there more to the picture than meets the eye? How AI has affected my life as a backend developer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As developers, we've always used — and often enjoyed — productivity-boosting tools. I still remember the excitement back in my .NET days when we finally convinced our boss to buy us a ReSharper license. Bless its squiggly line suggestions, refactoring features, and enhanced code completion! Then along came AI, offering code completion on steroids and a seemingly infinite knowledge base. No other tool has impacted my work as a developer quite like this one.&lt;/p&gt;

&lt;p&gt;I joined the party a little late. In early 2023, I was mentoring an intern who used ChatGPT for almost everything — right down to drafting emails to me in an excessively formal tone and crashing the application he was working on with AI-generated code he didn’t fully understand. Behold the dangers of AI! But he also introduced our team to this new tool. It wasn’t nearly as good as it is now, but it could already do some pretty impressive things. Clearly, it was time for us to start experimenting with it in our daily work.&lt;/p&gt;

&lt;p&gt;Since then, I've been using AI for solving well-defined, small tasks — whether it's adding a new function, tweaking a few lines, or debugging an issue. Most importantly, it’s become my go-to for asking all those “stupid” questions I might hesitate to ask a colleague. It’s like having a senior developer at my constant disposal — without the intimidation or embarrassment that can come with talking to a real person.&lt;/p&gt;

&lt;p&gt;Do we need to learn new skills to get good results? Yes and no. You need to know when to stop iterating on a problem and turn to good old Stack Overflow or a classic search — or when not to start at all. Giving clear instructions is also a skill that takes practice. The good news? There’s always room for correction (unless you’re out of quota). What hasn’t changed is the need for a critical eye when using AI-generated code — thoroughly reviewing and understanding it. Fortunately, I enjoy this part of being a developer. Skepticism comes naturally to me, and I had already honed this skill long before AI entered the picture.&lt;/p&gt;

&lt;p&gt;Once you learn to navigate it, AI makes it much easier to dive into a new project or pick up a new language. It doesn’t just boost my productivity — it also improves the overall quality of my work, something that’s often overlooked. After all, you’re tapping into the collective knowledge of thousands of developers — how could that not lead to better code?&lt;/p&gt;

&lt;p&gt;Am I worried that AI could take my job or change it beyond recognition? Of course — and we all should be. As developers, we like to think we’re special, but why would we be any different from other professions where AI has been introduced to support or even replace humans? Optimization is happening everywhere.&lt;/p&gt;

&lt;p&gt;I like to think AI will reduce the need for so-called "experts". As Paul Ford puts it in the excellent &lt;a href="https://open.spotify.com/show/2cXcHONoHrL4P1wvOXloHu?si=da1821c1e5804e84" rel="noopener noreferrer"&gt;Reqless podcast&lt;/a&gt;:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;... so there is a pleasure in replacing consultants that maybe there isn't in replacing other kinds of roles.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Who hasn’t had an external consultant parachute into a project, do little more than write a report repeating what you've been saying for the past five years — while getting paid five times more?&lt;/p&gt;

&lt;p&gt;However, with the rise of AI, a new breed of consultants is emerging: the AI/low-code consultant. As we speak, low-code solutions are being force-fed to developer teams far and wide. I’m not saying these tools have no value — the real issue is using them in the right context and for the right reasons. Not just to cut developer headcount or because a big tech firm wooed you with a free team-building day and catered lunch.&lt;/p&gt;

&lt;p&gt;Of course, many developers are hesitant to embrace AI-driven platforms for building applications. Developers have feelings too: we don’t want to become drag-and-drop monkeys, we want to touch and feel the code. In my view, bridging the gap between developers and business expectations remains one of the biggest challenges in our industry. Nothing new there.&lt;/p&gt;

&lt;p&gt;To complete my Neil Young analogy: while AI has (sort of) come out of the blue, it remains to be seen — hence the question mark in the title — whether it will go into the black or into the red. Meanwhile, developer rock and roll can never die, but it will definitely change (and already has). Let’s just hope we don’t skip the classic rock era and dive straight into the abyss of reggaeton and the like.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>learning</category>
      <category>careerdevelopment</category>
    </item>
  </channel>
</rss>
