<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>AI Coding Assistants: Allies or Adversaries for Developers?</title>
		<atom:link href="https://infinum.com/blog/ai-coding-assistants/feed/" rel="self" type="application/rss+xml" />
		<link>https://infinum.com/blog/ai-coding-assistants/</link>
		<description>Building digital products</description>
		<lastBuildDate>Mon, 20 Apr 2026 15:02:32 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>35474https://infinum.com/uploads/2023/03/AI-coding-assistants-and-their-impact-on-the-work-of-developers-hero.webp</url>
				</image>
				<title>AI Coding Assistants – Developers’ Friends or Foes?</title>
				<link>https://infinum.com/blog/ai-coding-assistants/</link>
				<pubDate>Mon, 13 Mar 2023 13:41:05 +0000</pubDate>
				<dc:creator>Darko Kukovec</dc:creator>
				<guid isPermaLink="false">https://infinum.com/?p=35474</guid>
				<description>
					<![CDATA[<p>AI coding assistants can be useful tools, but make the most sense for more experienced developers who know what they're doing. </p>
<p>The post <a href="https://infinum.com/blog/ai-coding-assistants/">AI Coding Assistants – Developers’ Friends or Foes?</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-277"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-93">
	<p	class='typography typography--size-36-text js-typography block-typography__typography'
	data-id='es-94'
	>
	<strong>Although it may seem counterintuitive, AI tools can be of greatest help to those who already know what they’re doing.</strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-97'
	>
	Three engineers walk into a bar. Together, they have 25 years of experience, but 15 of those belong to one of them. How many years of experience do the other two engineers have?</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-99">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-100'
	>
	This seems like a typical question people are asking ChatGPT these days. After all, <a href="https://www.fastcompany.com/90819887/how-to-trick-openai-chat-gpt" target="_blank" rel="noreferrer noopener">outsmarting AI is the ultimate goal</a> – or is it?</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-102">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-103'
	>
	We asked three flesh-and-blood engineers about their experience of working with AI coding assistants GitHub Copilot and ChatGPT, and found out whether they recommend using them – and in what cases.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-105">
	<p	class='typography typography--size-20-text-roman js-typography block-typography__typography'
	data-id='es-106'
	>
	These are their stories. *tn tn*</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-110"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-108">
	<h2	class='typography typography--size-52-default js-typography block-typography__typography'
	data-id='es-109'
	>
	The flesh-and-blood engineers who participated in this experiment</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-113"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-111">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-112'
	>
	Marin Teskera, a junior developer fresh off of JavaScript course at Infinum Academy. He is at the beginning of his career and eager to learn the intricacies of programming.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-116"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-114">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-115'
	>
	Tomislav Habalija, a JavaScript engineer turned JavaScript team lead, who also wrote the Angular course curriculum for Infinum Academy and mentored Marin at the JavaScript course. He’s been in the biz for seven years.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-119"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-117">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-118'
	>
	Darko Kukovec, an experienced JavaScript and TypeScript engineer with +15 years of code writing under his belt. He is the head of frontend development.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-126"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<a	class="card-simple js-card-simple card-simple--is-ad block-card__card-simple card-simple--has-link js-card-simple-link card-simple__content-align--left"
	data-id="es-120"
	 href='https://infinum.com/artificial-intelligence/agent-development/'>

	
	
	<div class="card-simple__content">
		<div class="card-simple__heading-wrap">
			<h2	class='typography typography--size-24-text js-typography card-simple__heading'
	data-id='es-121'
	>
	As the pressure to implement AI grows, many businesses don&#8217;t know where to start. Our 14-day sprint helps you cut through the noise—turning early ideas into validated prototypes with clear logic, smart design, and real momentum. Learn how it works.</h2>		</div>

		<button	class="btn btn--color-infinum btn--size-small btn--width-default btn__icon-position--right card-simple__btn js-block-card-btn js-card-simple-link"
	data-id="es-123"
	 tabindex='-1'>
		<div class="btn__inner">
					<div	class='typography typography--size-none js-typography btn__label'
	data-id='es-124'
	>
	Learn more </div>		
		<i
	class="icon btn__icon icon--size-16 icon--scale-100"
	 aria-hidden='true' data-name='arrow-right-16' data-id='es-125'>
	<svg fill='none' height='16' viewBox='0 0 17 16' width='17' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><g stroke='currentColor' stroke-width='2'><path d='m.5 7.99999 14 .00001'/><path d='m9.23352 2.7251 5.97848 5.97852'/><path d='m9.23352 13.2744 5.97848-5.9785'/></g></svg></i>	</div>
	</button>	</div>
</a>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-129"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-127">
	<h2	class='typography typography--size-52-default js-typography block-typography__typography'
	data-id='es-128'
	>
	Where did AI code writing assistants prove to be useful?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-132"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-130">
	<h2	class='typography typography--size-36-text js-typography block-typography__typography'
	data-id='es-131'
	>
	Using a coding assistant for writing boilerplate code</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-135"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-133">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-134'
	>
	Nobody likes it, but boilerplate is always there. It’s a hassle to read and maintain it, so any kind of a helping hand is a godsend. Whether it’s lists of data or some repetitive code, types, or just long names of variables and functions, it’s easier to use an AI coding assistant to write it, and then check if everything is ok than to do the whole thing from scratch.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-138"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-136">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-137'
	>
	Also, as our Marin puts it, “doesn’t it feel great when the AI coding assistant recommends something you were going to write anyway?” #sanityCheck</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-141"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-139">
	<h2	class='typography typography--size-36-text js-typography block-typography__typography'
	data-id='es-140'
	>
	Using a coding assistant for writing documentation</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-144"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-142">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-143'
	>
	Sometimes you know exactly what you want to do, but you can’t fully remember the documentation for some API (e.g. DOM, or even your own code). The copilot might be able to autocomplete big chunks of the code without having to switch tabs or apps to check the docs.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-147"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-145">
	<h2	class='typography typography--size-52-default js-typography block-typography__typography'
	data-id='es-146'
	>
	What tasks did AI code writing assistants struggle with?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-150"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-148">
	<h2	class='typography typography--size-36-text js-typography block-typography__typography'
	data-id='es-149'
	>
	Using AI tools for learning something new</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-153"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-151">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-152'
	>
	With <a href="https://github.com/karimould/awesome-js-tooling-in-rust" target="_blank" rel="noreferrer noopener">a lot of JavaScript tooling being written in Rust </a>nowadays, Darko Kukovac decided to try out first-hand what all the fuss was about. He opted for Rust when solving the <a href="https://adventofcode.com/2022" target="_blank" rel="noreferrer noopener">2022 edition of advent of code</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-156"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-154">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-155'
	>
	“In preparation, I had just enough time to read the first six chapters of the Rust docs – not great, not terrible. This was enough to get familiar with the basic concepts, but without any practical knowledge, it would surely be quite annoying to google solutions for each trivial issue I encountered. After all, that’s what happened when I tried Kotlin a few years ago,” Darko said.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-159"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-157">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-158'
	>
	Copilot did its job and got Darko through the first few days with much less frustration than expected. Of course, he still had to google things, but mostly on the conceptual level and not syntax or trivial issues. After a few days, he noticed his understanding of the language got better, and he was able to better understand Copilot’s suggestions and assess if they were good solutions or not. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-162"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-160">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-161'
	>
	Looking back at the code that Darko wrote himself and the code where he trusted Copilot (almost) blindly, he concludes:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-165"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-163">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-164'
	>
	“The Copilot code is somewhat weaker because it adds extra steps or does some things in a less-than-ideal way. However, I do believe it can help engineers kickstart their learning experience, which is a plus.”</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-168"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-166">
	<h2	class='typography typography--size-52-default js-typography block-typography__typography'
	data-id='es-167'
	>
	<strong>Using code you don’t understand</strong></h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-171"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-169">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-170'
	>
	What happens when the AI helper recommends code you don’t understand?</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-174"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-172">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-173'
	>
	By just mindlessly pressing the tab key, developers who are still learning the ropes can miss the opportunity to learn by trial and error.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-177"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-175">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-176'
	>
	For example, in last year&#8217;s edition of Infinum Academy, our mentor Tomislav Habalija had a few students who were writing suspiciously clean code:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-180"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-178">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-179'
	>
	“I had a hunch something was going on until I realized they were using GitHub Copilot.” </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-183"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-181">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-182'
	>
	It is a tool, or as they say on their website – AI pair programmer, which speeds up your developing process by giving you suggestions on what to write next.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-186"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-184">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-185'
	>
	For example, let&#8217;s say you want to write a simple function that calculates average numbers. Just by writing the function calculateAverage and selecting the first GitHub Copilot example, you will get the correct implementation.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-188"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">calculateAverage</span><span class="token">(</span><span class="token">numbers</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token" style="color: #005cc5;">sum</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">numbers</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">reduce</span><span class="token">((</span><span class="token" style="color: #005cc5;">acc</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">number</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token" style="color: #005cc5;">acc</span><span class="token"> </span><span class="token" style="color: #d73a49;">+</span><span class="token"> </span><span class="token" style="color: #005cc5;">number</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">0</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  return</span><span class="token"> </span><span class="token" style="color: #005cc5;">sum</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token"> </span><span class="token" style="color: #005cc5;">numbers</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">length</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-192"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="blockquote block-blockquote__blockquote" data-id="es-189">
	
	<div class="blockquote__content">
		<i
	class="icon blockquote__icon icon--size-16 icon--scale-100"
	 aria-hidden='true' data-name='blockquote-24' data-id='es-190'>
	<svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path clip-rule='evenodd' d='m12 24c6.6274 0 12-5.3726 12-12 0-2.79685-.9568-5.37021-2.561-7.41062-.581.22951-1.0832.60583-1.5069 1.12898-.5132.60844-.7698 1.41969-.7698 2.43375v.07605h2.5789v5.59004h-5.6197v-5.01962c0-1.11547.154-2.06616.4619-2.85205.3336-.81125.757-1.48307 1.2702-2.01545.528-.52161 1.1175-.92155 1.7687-1.1998-2.0728-1.70651-4.7279-2.73128-7.6223-2.73128-6.62742 0-12 5.37258-12 12 0 6.6274 5.37258 12 12 12zm-3.53811-18.05347c-.30793.78589-.46189 1.73658-.46189 2.85205v5.01962h5.6197v-5.59004h-2.5789v-.07605c0-1.01406.2566-1.82531.7698-2.43375.5389-.63379 1.1804-1.05209 1.9245-1.2549v-2.28164c-.7441.07605-1.4626.25351-2.1555.53238-.6928.27887-1.3086.68449-1.84752 1.21688-.51321.53238-.9366 1.2042-1.27019 2.01545z' fill='currentColor' fill-rule='evenodd'/></svg></i><p	class='typography typography--size-24-text js-typography blockquote__quote'
	data-id='es-191'
	>
	This can be a great time saver for a senior developer who knows what they are doing but a big pitfall for junior developers. “By writing code from scratch, you are learning, and while using tools like this, you are just writing code,” says Tomislav. </p>
		<div class="blockquote__caption-wrap">
					</div>
	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-195"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-193">
	<h2	class='typography typography--size-36-text js-typography block-typography__typography'
	data-id='es-194'
	>
	<strong>Introducing bugs while you introduce “correct” code</strong></h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-198"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-196">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-197'
	>
	If you’re not that experienced, blindly trusting the coding assistant can result in using code that is plain wrong. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-201"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-199">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-200'
	>
	But even if the code is correct and it works, it doesn’t always follow best practices. It might also introduce errors that a beginner doesn’t know how to fix. That is really not ideal when working on a bigger project because when another programmer starts to work on the code, they may have a hard time following it.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-204"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-202">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-203'
	>
	Case in point: Tomislav Habalija tested this when he was writing a regular expression:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-207"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-205">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-206'
	>
	“I had to write a regex for removing query params from the string. Easy enough, right? So I asked the AI.”</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-210"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-208">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-209'
	>
	This was Tomislav’s prompt:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-212"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-highlighted-text">
	<p	class='typography typography--size-18-text js-typography block-highlighted-text__typography'
	data-id='es-211'
	>
	Write a regex for removing query params from the string using javascript.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-215"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-213">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-214'
	>
	And he received a correct response:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-217"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">removeQueryParams</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #005cc5;">url</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token" style="color: #005cc5;">url</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">replace</span><span class="token">(</span><span class="token" style="color: #d73a49;">/</span><span class="token">\</span><span class="token" style="color: #d73a49;">?</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #d73a49;">*</span><span class="token" style="color: #d73a49;">/</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-220"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-218">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-219'
	>
	This solved one case but added a bug to the rest of the code because the team was using templated links. ChatGPT couldn’t know that, as Tomislav did not mention it. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-223"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-221">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-222'
	>
	Back to the drawing board, Tomislav tried another prompt:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-225"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-highlighted-text">
	<p	class='typography typography--size-18-text js-typography block-highlighted-text__typography'
	data-id='es-224'
	>
	Write a regex for removing query params from the url that contains templated strings. Templated part starts with { and ends with }. Templated part must not be removed from the string.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-228"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-226">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-227'
	>
	This time, the answer was slightly better. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-230"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">removeQueryParams</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #005cc5;">url</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token" style="color: #005cc5;">url</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">replace</span><span class="token">(</span><span class="token" style="color: #d73a49;">/</span><span class="token">\</span><span class="token" style="color: #d73a49;">?</span><span class="token">(</span><span class="token" style="color: #d73a49;">?:</span><span class="token">[</span><span class="token" style="color: #d73a49;">^</span><span class="token">{</span><span class="token">]</span><span class="token" style="color: #d73a49;">*</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">)</span><span class="token" style="color: #d73a49;">?</span><span class="token">(</span><span class="token">[</span><span class="token" style="color: #d73a49;">^</span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;">]*)#?.*/, &#039;$1&#039;);</span><span class="token" style="color: #6a737d;">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-233"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-231">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-232'
	>
	“Regex is bigger, it should be correct, right? Right? I have tried it out in my code, and I was surprised when the tests started failing. The answer was still wrong,” Tomislav decided before giving AI one final chance.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-235"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-highlighted-text">
	<p	class='typography typography--size-18-text js-typography block-highlighted-text__typography'
	data-id='es-234'
	>
	The provided answer still removes the templated part. For example, regex should not remove &#8220;{?foo}&#8221; or &#8220;{?bar}&#8221; from &#8220;http://www.test.com{?foo}/bar{?bar}?first_param=1&amp;second=2&#8221;. Can you try again?</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-238"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-236">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-237'
	>
	AI’s response was &#8220;Here is a modified regular expression that will remove the query parameters from a URL string, while leaving any templated parts of the URL intact:&#8221;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-240"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">url</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">replace</span><span class="token">(</span><span class="token" style="color: #d73a49;">/</span><span class="token">\</span><span class="token" style="color: #d73a49;">?</span><span class="token">(</span><span class="token" style="color: #d73a49;">?:</span><span class="token">[</span><span class="token" style="color: #d73a49;">^</span><span class="token" style="color: #d73a49;">?</span><span class="token">{</span><span class="token">]</span><span class="token" style="color: #d73a49;">*</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">)</span><span class="token" style="color: #d73a49;">?</span><span class="token">(</span><span class="token">[</span><span class="token" style="color: #d73a49;">^</span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;">]*)(#?.*)/, &#039;$1$2&#039;);</span><span class="token" style="color: #6a737d;">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-243"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-241">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-242'
	>
	This answer was even worse than the one before. The answer Tomislav was looking for was:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-245"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">url</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">replace</span><span class="token">(</span><span class="token" style="color: #d73a49;">/</span><span class="token">(</span><span class="token">[</span><span class="token" style="color: #d73a49;">^</span><span class="token">{</span><span class="token">])\</span><span class="token" style="color: #d73a49;">?</span><span class="token">[</span><span class="token" style="color: #d73a49;">^</span><span class="token" style="color: #d73a49;">/</span><span class="token">]</span><span class="token" style="color: #d73a49;">+</span><span class="token" style="color: #d73a49;">/</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">$1</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-248"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-246">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-247'
	>
	And he couldn’t get AI to come up with that. At least not with the questions and descriptions he provided.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-251"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-249">
	<h2	class='typography typography--size-36-text js-typography block-typography__typography'
	data-id='es-250'
	>
	<strong>Privacy considerations</strong></h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-254"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-252">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-253'
	>
	Since both GitHub Copilot and ChatGPT use their servers to generate results, the question is what happens with the data entered. How is it used? This might be a very important question if you’re working on a project that is not open source.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-257"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-255">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-256'
	>
	In the case of Copilot, there’s <a href="https://github.com/settings/copilot" target="_blank" rel="noreferrer noopener">an option in settings</a> that allows it to use your code to train the AI – this doesn’t mean that someone will get your snippet of code, but someone might get a code snippet that was in part inspired by your code. If you’re working on code that is not open source or the license doesn’t allow this type of usage, you should disable this option.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-260"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-258">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-259'
	>
	On the other hand, ChatGPT doesn’t have such settings, and <a href="https://help.openai.com/en/articles/6783457-chatgpt-faq" target="_blank" rel="noreferrer noopener">all entered data</a> could be used to train the AI. That’s why you should always be careful what you enter into the system and obfuscate any information you don’t want to share with anyone.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-263"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-261">
	<h2	class='typography typography--size-52-default js-typography block-typography__typography'
	data-id='es-262'
	>
	Turns out, AI coding assistants are only as smart as the engineer using them</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-266"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-264">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-265'
	>
	Our engineers all agreed that using an AI coding assistant makes the most sense for more experienced developers who know what they are doing.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-269"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-267">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-268'
	>
	For people trying to learn, like our junior engineer Marin, using a tool like this brings the same benefits as for the experienced developer. However, they should be careful about using code they don’t understand because it can affect their learning curve, or they might even end up introducing the wrong functionalities. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-272"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-270">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-271'
	>
	Using AI coding assistants with a grain of salt can speed up development, but for now at least, it is not ready to take over the wheel.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-275"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-typography" data-id="es-273">
	<p	class='typography typography--size-16-text-roman js-typography block-typography__typography'
	data-id='es-274'
	>
	<em>If you are interested in utilizing AI in your digital product, see <a href="https://infinum.com/ai-business-solutions/" target="_blank" rel="noreferrer noopener">how we can help you on the way</a>.</em></p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/ai-coding-assistants/">AI Coding Assistants – Developers’ Friends or Foes?</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>