<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	 xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>AI &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<atom:link href="https://nearshore-it.eu/pl/tag/ai-2/feed/" rel="self" type="application/rss+xml" />
	<link>https://nearshore-it.eu/pl/</link>
	<description>We are Nearshore Software Development Company with 14years of experience in delivering a large scale IT projects in the areas of PHP, JAVA, .NET, BI and MDM.</description>
	<lastBuildDate>Wed, 18 Jun 2025 10:27:14 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://nearshore-it.eu/wp-content/uploads/2023/01/cropped-inetum-favicon-300x300-1-32x32.png</url>
	<title>AI &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<link>https://nearshore-it.eu/pl/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Zod &#038; AI – schema validation w projektach AI – przewodnik TypeScript </title>
		<link>https://nearshore-it.eu/pl/artykuly/zod-ai-schema-validation/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/zod-ai-schema-validation/#respond</comments>
		
		<dc:creator><![CDATA[Mateusz Jerzyk]]></dc:creator>
		<pubDate>Wed, 28 May 2025 15:11:11 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/?p=37201</guid>

					<description><![CDATA[W pracy z AI największym wyzwaniem jest często… samo AI. Modele generują dane w różnym formacie, czasem brakuje klucza, czasem typ się nie zgadza – a nasz projekt musi cały czas działać bezbłędnie. Wystarczy drobna zmiana prompta, nowa wersja modelu albo niespodziewany fallback, by struktura danych zaczęła robić problemy w najmniej oczekiwanym momencie.  ]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Przejdź do:</p>
    <ol>
                    <li><a href="#Biblioteka-Zod">1.  Biblioteka Zod</a></li>
                    <li><a href="#Czym-jest-walidacja-danych-Zod">2.  Czym jest walidacja danych Zod i dlaczego jest tak ważna?  </a></li>
                    <li><a href="#Jak-używać-Zod-w-aplikacjach-opartych-na-AI?">3.  Jak używać Zod w aplikacjach opartych na AI? </a></li>
                    <li><a href="#Zastosowanie-Zod-w-preprocessingu-danych">4.  Zastosowanie Zod w preprocessingu danych  </a></li>
                    <li><a href="#Jak-Zod-usprawnia-deployment-modeli-AI?">5.  Jak Zod usprawnia deployment modeli AI?  </a></li>
                    <li><a href="#Kluczowe-cechy-Zod-w-JavaScript">6.  Kluczowe cechy Zod w JavaScript  </a></li>
                    <li><a href="#Jak-zaimplementować-walidację-formularza-z-użyciem-Zod?">7.  Jak zaimplementować walidację formularza z użyciem Zod?  </a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Biblioteka-Zod"><strong>Biblioteka Zod</strong>&nbsp;</h2>



<p>I właśnie tutaj dobrym rozwiązaniem jest Zod: lekka, szybka biblioteka do walidacji danych dla TypeScript, która pozwala jasno określić, jakich struktur oczekujemy od inputu. Zamiast zgadywać, czy odpowiedź będzie zgodna z oczekiwaniami, po prostu ją walidujemy. Jeśli coś się nie zgadza – dostajemy informację o błędzie i jasny komunikat. Jeśli wszystko gra – możemy bezpiecznie przetwarzać dane dalej. Mamy nad wszystkim kontrolę, jeszcze zanim przekażemy dalej dane do naszej logiki biznesowej.&nbsp;&nbsp;</p>



<p>Zod działa jak filtr bezpieczeństwa – pozwala odrzucić błędne odpowiedzi, zanim trafią do logiki aplikacji. Dzięki temu zyskujemy nie tylko większą kontrolę, ale też spokój ducha: <strong>nawet jeśli AI trochę „zbłądzi”, warstwa frontend to odpowiednio obsłuży i tego nie odczuje.&nbsp;&nbsp;</strong></p>



<h2 class="wp-block-heading" id="Czym-jest-walidacja-danych-Zod"><strong>Czym jest walidacja danych Zod i dlaczego jest tak ważna?&nbsp;</strong>&nbsp;</h2>



<p>Zod to biblioteka TypeScript / JavaScript, która umożliwia tworzenie schematów danych (schemas), wykorzystywanych zarówno do walidacji danych w czasie rzeczywistym, jak i do generowania typów w czasie kompilacji. Dzięki niej możemy opisać strukturę danych, której aplikacja oczekuje, i automatycznie sprawdzić, czy rzeczywiste dane, które przekazaliśmy do inputu spełniają wszystkie nasze założenia.&nbsp;&nbsp;</p>



<p>W kontekście AI – gdzie dane zwracane przez modele bywają nieprzewidywalne i często nie trzymają się jednej struktury, <strong>walidacja staje się wręcz obowiązkowa. </strong>Nawet drobna zmiana w odpowiedzi modelu może wywołać błąd w aplikacji, jeśli nasz kod zakłada konkretną strukturę danych. Zod pozwala temu zapobiec, sprawdzając zgodność danych, zanim trafią dalej do logiki biznesowej.&nbsp;&nbsp;</p>



<p><strong>Przeczytaj także:</strong></p>



<ul class="wp-block-list">
<li><a href="https://nearshore-it.eu/pl/artykuly/najlepsze-ai-for-coding-w-2025-roku-czego-uzywac-do-generowania-kodu/" data-type="post" data-id="34778">Najlepsze AI for coding</a></li>



<li><a href="https://nearshore-it.eu/pl/artykuly/github-copilot-asystent-ai/" data-type="post" data-id="34871">AI w programowaniu: Github Copilot </a></li>
</ul>



<p></p>



<h2 class="wp-block-heading" id="Jak-używać-Zod-w-aplikacjach-opartych-na-AI?-"><strong>Jak używać Zod w aplikacjach opartych na AI? </strong><strong>(validation in AI with Zod)</strong>&nbsp;</h2>



<p>Zod można zintegrować z dowolną aplikacją JavaScript, zarówno po stronie frontendu, jak i backendu. W kontekście AI najczęściej wykorzystywany jest do:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li>walidacji odpowiedzi z API (np. OpenAI),&nbsp;&nbsp;</li>



<li>generowania interfejsów dynamicznych,&nbsp;&nbsp;</li>



<li>utrzymywania spójnych kontraktów danych między frontendem a modelem.&nbsp;&nbsp;</li>
</ul>



<p>Dzięki helperowi zodResponseFormat w SDK OpenAI możemy łatwo powiązać schemat Zod z odpowiedzią modelu:&nbsp;&nbsp;</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const MathResponse = z.object({
  steps: z.array(z.object({
    explanation: z.string(),
    output: z.string(),
  })),
  final_answer: z.string(),
});

const completion = await client.beta.chat.completions.parse({
  model: 'gpt-4o',
  messages: [...],
  response_format: zodResponseFormat(MathResponse, 'math_response'),
});
</pre>



<p>Taka integracja sprawia, że odpowiedź modelu jest walidowana automatycznie i możemy bezpiecznie korzystać z jej zawartości w aplikacji.&nbsp;&nbsp;</p>



<p>Jeśli korzystamy z funkcji narzędzi (tool calls), możemy użyć zodFunction, by automatycznie zmapować argumenty na typy Zod:&nbsp;&nbsp;</p>



<p></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const queryArgs = z.object({ ... });

const completion = await client.beta.chat.completions.parse({
  model: 'gpt-4o',
  messages: [...],
  tools: [zodFunction({ name: 'query', parameters: QueryArgs })],
});
</pre>



<p>Zod daje nam kontrolę nad strukturą danych – zarówno tych zwracanych przez model, jak i tych przekazywanych do funkcji. Dzięki temu unikamy błędów wynikających z niespójności formatu i mamy większą przewidywalność działania aplikacji.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Zastosowanie-Zod-w-preprocessingu-danych"><strong>Zastosowanie Zod w preprocessingu danych&nbsp;</strong>&nbsp;</h2>



<p>Zod sprawdza się nie tylko po stronie odbioru danych z modelu AI, ale również wcześniej – podczas przygotowania danych wejściowych. Preprocessing to moment, w którym możemy upewnić się, że to, co wysyłamy do modelu, jest kompletne, poprawnie sformatowane i zgodne z oczekiwanym typem.&nbsp;&nbsp;</p>



<h3 class="wp-block-heading">Typowe zastosowania Zod w preprocessingu:&nbsp;&nbsp;</h3>



<ul class="wp-block-list">
<li>walidacja danych wprowadzanych przez użytkownika przed wysłaniem zapytania do AI,&nbsp;&nbsp;</li>



<li>konwersja typów, np. zamiana ciągów znaków (stringa) na daty,&nbsp;&nbsp;</li>



<li>czyszczenie i porządkowanie danych z zewnętrznych źródeł, jak API czy formularze.&nbsp;&nbsp;</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const dateSchema = z.string().transform(str => new Date(str));
const parsedDate = dateSchema.parse("2024-08-06"); // => obiekt typu Date
</pre>



<p>Dzięki funkcji <strong>.transform()</strong> możemy nie tylko sprawdzić, czy dane mają odpowiedni format, ale też przekształcić wprowadzone dane do postaci, która jest odpowiednio dostosowana do dalszego przetwarzania w aplikacji. To szczególnie przydatne, gdy dane mają służyć jako prompt lub parametr w zapytaniu do modelu AI.&nbsp;&nbsp;</p>



<p>Preprocessing z użyciem Zod to prosty sposób na zminimalizowanie błędów i zwiększenie kontroli nad danymi, zanim jeszcze trafią do modelu.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Jak-Zod-usprawnia-deployment-modeli-AI?"><strong>Jak Zod usprawnia deployment modeli AI?&nbsp;</strong>&nbsp;</h2>



<p>Zod to nie tylko narzędzie deweloperskie – jego zastosowanie ma realne przełożenie na jakość wdrożeń modeli AI w środowiskach produkcyjnych. Pozwala budować solidny bufor bezpieczeństwa pomiędzy często nieprzewidywalnym modelem AI a wymaganiami naszej aplikacji.&nbsp;&nbsp;</p>



<h3 class="wp-block-heading">Biblioteka Zod w procesie deploymentu pomaga:&nbsp;&nbsp;</h3>



<ul class="wp-block-list">
<li>Zwiększyć odporność aplikacji na zmiany – zmiana prompta, wersji modelu czy struktury danych nie musi oznaczać błędów, jeśli dane przechodzą przez schematy walidacyjne tworzone przez Zoda.&nbsp;&nbsp;</li>



<li>Szybciej debugować problemy – zamiast domyślać się, co poszło nie tak, dostajemy jasne, czytelne komunikaty o błędach.&nbsp;&nbsp;</li>



<li>Pisać testy jednostkowe – schematy Zod mogą pełnić funkcję walidatorów i źródła przykładowych danych wejściowych do testów.&nbsp;&nbsp;</li>
</ul>



<p>Zamiast więc opierać się na założeniu, że wszystko w końcowej fazie projektu działa, możemy zbudować system, który rzeczywiście przewiduje błędy i potrafi się przed nimi obronić.&nbsp;&nbsp;</p>



<p>Z perspektywy wdrożeniowej oznacza to mniej awarii, większą spójność danych i łatwiejsze utrzymanie całego pipeline’u – od prompta po końcowy interfejs użytkownika.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Kluczowe-cechy-Zod-w-JavaScript"><strong>Kluczowe cechy Zod w JavaScript&nbsp;</strong>&nbsp;</h2>



<p>Zod oferuje nowoczesne podejście do walidacji danych w JavaScript i TypeScript. Jego główne zalety to:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li>Deklaratywność – schematy są czytelne, przejrzyste i proste do napisania. Możemy z łatwością tworzyć złożone struktury bez nadmiaru kodu.&nbsp;&nbsp;</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const UserSchema = z.object({
  name: z.string().min(3),
  age: z.number().int().positive(),
  email: z.string().email(),
});
</pre>



<ul class="wp-block-list">
<li>Bezpośrednia integracja z TypeScriptem – Zod automatycznie wyciąga typy z definicji schematów (z.infer), dzięki czemu nie musimy pisać typów dwa razy.&nbsp;&nbsp;</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">type User = z.infer&lt;typeof UserSchema>;</pre>



<ul class="wp-block-list">
<li>Walidacja i transformacja w jednym miejscu – możemy nie tylko sprawdzać dane, ale też odpowiednio je przekształcać (np. string → Date, liczba → boolean, itp.).&nbsp;&nbsp;</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const DateSchema = z.string().transform(str => new Date(str));
const parsedDate = DateSchema.parse("2024-08-06");
</pre>



<ul class="wp-block-list">
<li>Obsługa błędów – metody safeParse i parse pozwalają wygodnie obsługiwać błędy. Pierwsza nie rzuca wyjątku, a druga daje pełną kontrolę nad błędami typu ZodError.&nbsp;&nbsp;</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const result = UserSchema.safeParse(userData);
if (!result.success) {
  console.log(result.error.format());
}
</pre>



<ul class="wp-block-list">
<li>Czytelne komunikaty walidacyjne – błędy można formatować, w pełni kontrolować, mapować i wyświetlać w aplikacjach frontendowych w sposób przyjazny dla użytkownika.&nbsp;&nbsp;</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function formatZodErrors(error: z.ZodError) {
  return error.errors.reduce((acc, err) => {
    const field = err.path.join(".");
    acc[field] = err.message;
    return acc;
  }, {} as Record&lt;string, string>);
}
</pre>



<ul class="wp-block-list">
<li>Rozszerzalność – dzięki metodzie <strong>.refine()</strong> możemy łatwo dodawać własne warunki i logikę walidacyjną.&nbsp;&nbsp;</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const PasswordSchema = z.string()
  .min(8, "Hasło musi mieć min. 8 znaków")
  .refine(val => /\d/.test(val), {
    message: "Hasło musi zawierać cyfrę",
  });
</pre>



<ul class="wp-block-list">
<li>Chaining – możemy łączyć wiele reguł walidacyjnych w łańcuchach co ułatwia tworzenie złożonych walidacji, np. <strong>.min(3).max(20).regex(&#8230;),.&nbsp;</strong>&nbsp;</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const NameSchema = z.string()
  .min(3, "Za krótkie")
  .max(50, "Za długie")
  .regex(/^[a-zA-Z\s]+$/, "Tylko litery i spacje");

</pre>



<ul class="wp-block-list">
<li>Użyteczność w całym stacku – Zod sprawdza się zarówno walidacji danych użytkownika w formularzach (React Hook Form), jak i walidacji odpowiedzi API czy typów w bazach danych&nbsp;&nbsp;</li>
</ul>



<h2 class="wp-block-heading" id="Jak-zaimplementować-walidację-formularza-z-użyciem-Zod?"><strong>Jak zaimplementować walidację formularza z użyciem Zod?&nbsp;</strong>&nbsp;</h2>



<p>Zod doskonale integruje się z popularnymi narzędziami do obsługi formularzy, takimi jak React Hook Form. Dzięki temu możemy w prosty sposób połączyć walidację danych z typowaniem w TypeScript i uzyskać czytelny kod oraz spójne komunikaty błędów.&nbsp;&nbsp;</p>



<p>Załóżmy, że tworzymy prosty formularz rejestracyjny. Najpierw definiujemy schema:&nbsp;&nbsp;</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">const RegisterSchema = z.object({
  name: z.string().min(3, "Imię musi mieć co najmniej 3 znaki"),
  email: z.string().email("Niepoprawny adres e-mail"),
  password: z.string()
    .min(8, "Hasło musi mieć co najmniej 8 znaków")
    .refine(val => /\d/.test(val), {
      message: "Hasło musi zawierać cyfrę",
    }),
});
</pre>



<p>Następnie łączymy schema z formularzem:&nbsp;&nbsp;</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';

const form = useForm({
  resolver: zodResolver(RegisterSchema),
});

const { register, handleSubmit, formState: { errors } } = form;
</pre>



<p>W JSX podpinamy pola i wyświetlamy błędy:&nbsp;&nbsp;</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;form onSubmit={handleSubmit(formDetails => console.log(formDetails))}>
  &lt;input {...register("name")} placeholder="Imię" />
  {errors.name &amp;&amp; &lt;p>{errors.name.message}&lt;/p>}

  &lt;input {...register("email")} placeholder="Email" />
  {errors.email &amp;&amp; &lt;p>{errors.email.message}&lt;/p>}

  &lt;input {...register("password")} placeholder="Hasło" type="password" />
  {errors.password &amp;&amp; &lt;p>{errors.password.message}&lt;/p>}

  &lt;button type="submit">Zarejestruj się&lt;/button>
&lt;/form>
</pre>



<p>Taka integracja daje nam:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li>automatyczną walidację pól,&nbsp;&nbsp;</li>



<li>pełne typowanie danych,&nbsp;&nbsp;</li>



<li>spójne i konfigurowalne komunikaty błędów,&nbsp;&nbsp;</li>



<li>prostą integrację z istniejącym kodem Reacta.&nbsp;&nbsp;</li>
</ul>



</style><div class="promotion-box promotion-box--image-left "><div class="tiles latest-news-once"><div class="tile"><div class="tile-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2025/02/Code-Faster-Tlo-2.jpg" alt="Code Faster Tlo 2" title="Zod &amp; AI – schema validation w projektach AI – przewodnik TypeScript  1"></div><div class="tile-content"><p class="entry-title client-name">AI w programowaniu | bezpłatny e-book</p>
Zautomatyzuj kodowanie z AI! Pobierz darmowy e-book i odkryj nowe możliwości
<br /><br />
<a class="btn btn-primary" href="https://www.engage.inetum.com/ebook-code-faster-build-smarter/" target="_blank" rel="noopener">Pobierz teraz!</a></div></div></div></div>



<h2 class="wp-block-heading"><strong>Podsumowanie&nbsp;</strong>&nbsp;</h2>



<p>W świecie, gdzie <strong>dane generowane przez AI są dynamiczne i często nieprzewidywalne, </strong>warto zadbać o silne fundamenty naszych projektów. Zod może pełnić rolę warstwy ochronnej – zapewniając <strong>walidację, transformację i typowanie danych </strong>w jednym miejscu. To nie tylko techniczny dodatek, ale kluczowy element architektury, który pozwala budować odporne, stabilne i łatwe w utrzymaniu integrację z modelami AI.&nbsp;&nbsp;</p>



<p>Zod to solidna biblioteka z rosnącą społecznością i aktywnym wsparciem, którą z powodzeniem można wykorzystać nie tylko w integracjach z wykorzystaniem AI, ale także w codziennych projektach frontendowych – od formularzy po obsługę API.&nbsp;&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/zod-ai-schema-validation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AI w programowaniu – jak sztuczna inteligencja wspomaga automatyzację? </title>
		<link>https://nearshore-it.eu/pl/artykuly/ai-w-programowaniu-automatyzacja/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/ai-w-programowaniu-automatyzacja/#respond</comments>
		
		<dc:creator><![CDATA[Mateusz Mirecki]]></dc:creator>
		<pubDate>Mon, 14 Apr 2025 12:36:25 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/?p=34914</guid>

					<description><![CDATA[Temat sztucznej inteligencji od dawna rozpala ludzką wyobraźnię, stając się obiektem fascynacji oraz źródłem pytań o granice ludzkiego poznania. Jednym z przykładów niech będzie książka autorstwa Stanisława Lema – “Golem XIV”, w której przedstawia on wizję hiperrozwiniętej AI, przewyższającej człowieka pod względem intelektualnym i filozoficznym. ]]></description>
										<content:encoded><![CDATA[
<p></p>



<p>I choć treść książki ma pesymistyczne wybrzmienie, może stanowić źródło inspiracji na temat drogi rozwoju sztucznej inteligencji w dalekiej przyszłości i zmusić do refleksji nad kierunkiem podążania przez współczesne algorytmy. Chociaż obecne możliwości AI nie są jeszcze aż tak rozwinięte (w porównaniu do przytoczonego Golema), to już mają istotny wpływ na cyfrową transformację, przekształcając świat na wielu płaszczyznach.&nbsp;</p>



<div class="table-of-contents">
    <p class="title">Go to:</p>
    <ol>
                    <li><a href="#AI-w-programowaniu">1.  AI w programowaniu  </a></li>
                    <li><a href="#korzyści-z-użycia-AI-w-procesie-tworzenia-oprogramowania">2.  Korzyści z użycia AI w procesie tworzenia oprogramowania </a></li>
                    <li><a href="#AI-w-praktyce-Tworzymy-prompty-do-testowania">3.  Tworzymy prompty do testowania</a></li>
                    <li><a href="#sztuczna-inteligencja-w-testach">4.  Sztuczna inteligencja w testach</a></li>
                    <li><a href="#najlepsze-narzędzia-AI-dla-programistów-i-testerów">5.  Najlepsze narzędzia AI dla programistów i testerów </a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="AI-w-programowaniu-">AI w programowaniu&nbsp;&nbsp;</h2>



<h3 class="wp-block-heading">Generowanie kodu&nbsp;&nbsp;</h3>



<p>Od jakiegoś czasu narzędzia sztucznej inteligencji rewolucjonizują wiele obszarów, nie pomijając procesu tworzenia oprogramowania. Wprowadzają nowe możliwości zwiększające nie tylko produktywność, ale też dokładność i innowacyjność, przyspieszają również sam proces tworzenia oprogramowania. W tym momencie należy wyróżnić przede wszystkim generatywną sztuczną inteligencję (GenAI – uogólniając, to AI potrafiąca tworzyć nowe treści), która usprawnia cały proces poprzez automatyzację istotnych kroków – generowania pomysłów, gromadzenia wymagań, a także kodowania oraz jego nieodłącznego procesu testowania.&nbsp;</p>



<h3 class="wp-block-heading">Wsparcie prac programistycznych&nbsp;</h3>



<p>AI szybko staje się integralną częścią oprogramowania wykorzystywanego w developmencie aplikacji, będąc jednym z elementów cyfrowej transformacji przedsiębiorstw. Zespoły deweloperskie dostosowują swoje środowiska, integrując narzędzia sztucznej inteligencji, zapewniając nie tylko interoperacyjność, ale również stawiają czoła nowym wyzwaniom, jak choćby bezpieczeństwo danych. Rosnąca rola AI w tym obszarze podkreśla jej potencjał do zrewolucjonizowania metod tworzenia oprogramowania.&nbsp;</p>



<h3 class="wp-block-heading">Wykorzystanie algorytmów w automatyzacji&nbsp;</h3>



<p>Obecnie mamy do dyspozycji wiele narzędzi, za pomocą których znacząco można przyspieszyć prace nad projektem. Interpretują opisy tworzone w języku naturalnym (prompty) i generują sugestie, kod, zasoby potrzebne do testów i wiele innych, przydatnych rzeczy – zależnie od potrzeb. Zaawansowane algorytmy analizują środowisko, kod, optymalizując rozwiązania i wspomagając zespoły w codziennej pracy. Umożliwiają również analizę ogromnych zbiorów danych, wspierając optymalizację wydajności aplikacji oraz przewidywanie potencjalnych problemów. Ma to znaczący wpływ na szybkość tworzenia kodu, redukcję ludzkich błędów, przyczynia się do poprawy bezpieczeństwa, a przede wszystkim pozwala programistom skupić się na realizowaniu bardziej złożonych i kreatywnych zadań.&nbsp;</p>



<h2 class="wp-block-heading" id="korzyści-z-użycia-AI-w-procesie-tworzenia-oprogramowania-">Jakie są korzyści z użycia AI w procesie tworzenia oprogramowania&nbsp;</h2>



<p>Korzyści w ujęciu ogólnym przedstawiłem we wstępie, więc w tej sekcji postaram się zwięźle opisać kilka konkretnych przykładów, które moim zdaniem zasługują na szczególną uwagę:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Przewidywanie błędów</strong> – poprzez analizę wzorców w repozytoriach projektu narzędzia AI mogą pomóc wykryć potencjalne błędy, luki lub podatności.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Testowanie</strong> – odpowiednio przygotowane wymagania i kryteria akceptacji mogą posłużyć za bazę do stworzenia scenariuszy testowych, dzięki czemu znacznie skraca się czas, potrzebny zwykle na wymyślanie ich od podstaw. W asyście AI można także pokusić się o refaktoryzację już istniejących przypadków testowych, co może pomóc w ich optymalizacji i zwiększeniu pokrycia testów.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Generowanie kodu</strong> – dzięki narzędziom AI programiści mają możliwość korzystania z pomocy wirtualnego asystenta, który wspomaga ich w codziennej pracy. Na podstawie danych wejściowych pisanych w języku naturalnym, asystent AI zasugeruje fragment kodu lub wygeneruje całą funkcję, co przyspiesza pracę i może automatyzować rutynowe działania (np. pisanie prostych, schematycznych skryptów). <br></li>



<li><strong>Optymalizacja i refaktoryzacja</strong> – łączy się z powyższym. Z pomocą AI można optymalizować istniejący kod, dzięki czemu aplikacja może być stabilniejsza, bezpieczniejsza, wydajniejsza, a więc i bardziej niezawodna.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Bezpieczeństwo</strong> – z pomocą narzędzi AI można pokusić się o próbę zidentyfikowania potencjalnych luk bezpieczeństwa, a w przypadku ich znalezienia – AI zasugeruje poprawki. Narzędzia te pozwalają również analizować zachowanie uzytkowników i wykrywać nietypowe działania, wskazujące na przykład na próby ataku lub potencjalne przejęcie konta klienta. &nbsp;<br>&nbsp;<br>Tak działa na przykład <a href="https://bank.pl/plebiscyt-bity-2021-pierwsze-miejsce-dla-weryfikacji-behawioralnej-z-systemu-moje-ing/)" target="_blank" rel="noreferrer noopener">weryfikacja behawioralna banku ING.</a> Algorytmy AI na bieżąco uczą się zachowania użytkownika poprzez analizowanie jego interakcji z aplikacją banku, co zwiększa prawdopodobieństwo zablokowania dostępu do konta w przypadku przejęcia go przez przestępcę. Innym przykładem niech będzie sytuacja <a href="https://www.forbes.com/sites/daveywinder/2024/11/05/google-claims-world-first-as-ai-finds-0-day-security-vulnerability/" target="_blank" rel="noreferrer noopener">opisana przez Google</a> –&nbsp; dzięki sztucznej inteligencji udało się znaleźć błąd 0-day (nieznana podatność lub luka, mogąca zostać wykorzystana do przeprowadzenia ataku). &nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Zarządzanie</strong> – można i w tym procesie zaprzęgnąć sztuczną inteligencję i wykorzystać ją w celu zautomatyzowania planowania i zarządzania zasobami. Mając historyczne dane, narzędzia AI mogą zasugerować potencjalny czas trwania nowych etapów tworzenia oprogramowania i pomóc w odpowiedniej alokacji zasobów w celu optymalnego ich wykorzystania.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Tworzenie dokumentacji</strong> – wielu programistów nie przepada za sporządzaniem dokumentacji. Jest to czasochłonny proces, który można by poświęcić między innymi na rozwój i utrzymanie kodu. I w tym aspekcie sztuczna inteligencja wyciąga pomocną dłoń – jest doskonałym narzędziem do prowadzenia dokumentacji projektowej, odciążając programistów. Na podstawie kodu aplikacji tworzy opis i zapewnia stałą aktualizację dokumentacji.&nbsp;&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Projektowanie UX</strong> – można wykorzystać AI do wspomagania projektowania doświadczenia użytkowników. Przykładowo – prowadząc testy A/B i wykorzystując dane z nich zgromadzone, AI może zasugerować odpowiedni interfejs bądź funkcjonalność. Odpowiednie polecenia w&nbsp; narzędziu AI generującym obrazy pomogą wygenerować szablon UI, mogący stanowić bazę pod ostateczny wygląd aplikacji.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Pomoc w tworzeniu bardziej inteligentnych aplikacji</strong> – wprowadzając zaawansowane funkcje AI do tworzonego programu (na przykład rozpoznawanie mowy, czat) można podnieść wartość i atrakcyjność aplikacji, dzięki czemu będzie ona wyróżniała się na tle konkurencji i może zwiększyć liczbę jej użytkowników.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Analiza danych użytkowników</strong> – AI może analizować dane użytkowników w celu poprawy doświadczeń podczas korzystania z aplikacji. Szczególne korzyści może przynieść to branży e-commerce, gdzie AI wspiera&nbsp; tworzenie algorytmów rekomendacji, dzięki czemu klienci mogą widzieć reklamy i sugestie produktów najbardziej pasujące do ich potrzeb.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Wspomaganie DevOps i CI/CD</strong> – z pomocą AI można analizować systemowe logi, raporty, historie wdrożeń, aby wykrywać anomalie i przewidywać potencjalne awarie. Narzędzia takie jak Datadog czy Splunk wykorzystują uczenie maszynowe do monitorowania aplikacji i infrastruktury w czasie rzeczywistym. Wdrożenie AI w <a href="https://nearshore-it.eu/pl/tag/devops/" data-type="post_tag" data-id="566">DevOps</a> i CI/CD pozwala zespołom programistycznym i operacyjnym na bardziej efektywne zarządzanie cyklem życia oprogramowania.&nbsp;</li>
</ul>



<h2 class="wp-block-heading" id="AI-w-praktyce?-Tworzymy-prompty-do-testowania">Jak korzystać z narzędzi AI w praktyce? Tworzymy prompty do testowania&nbsp;</h2>



<p>Poniżej zaprezentuję prosty przykład wykorzystania AI jako asystenta w programowaniu. Bazę stanowi kod Playwright dostępny bezpośrednio po zainstalowaniu narzędzia. Znajduje się w nim plik z przykładowymi testami, w którym utworzę jeden dodatkowy test z wykorzystaniem GitHub Copilot. Test jest prosty: polega na otwarciu strony domowej Playwright, kliknięciu przycisku<strong> ‘Get Started’ </strong>i asercji przekierowania na stronę <strong>&#8217;https://playwright.dev/docs/intro&#8217;</strong> poprzez zweryfikowanie poprawności adresu URL i tekstu wyświetlonego na niej nagłówka (Installation).&nbsp;</p>



<ol start="1" class="wp-block-list">
<li>Prompt opisujący test:&nbsp;</li>
</ol>



<p><strong>Write a test that navigates to 'https://playwright.dev/&#8217; page and clicks 'Get started&#8217; button. Then verify that user has landed on 'https://playwright.dev/docs/intro&#8217; page by verifying page header text that should be 'Installation&#8217;.</strong>&nbsp;</p>



<ol start="2" class="wp-block-list">
<li>Odpowiedź wygenerowana przez Copilot:&nbsp;</li>
</ol>



<p>Here’s the Playwright test that navigates to the 'https://playwright.dev/&#8217; page, clicks the 'Get started&#8217; button, and verifies that the user has landed on the 'https://playwright.dev/docs/intro&#8217; page by checking the page header text:&nbsp;</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import { test, expect } from '@playwright/test'; 

test('navigate to Get Started and verify Installation page', async ({ page }) => { 

  // Navigate to the Playwright homepage 

  await page.goto('https://playwright.dev/'); 

  // Click the 'Get started' button 

  await page.getByRole('link', { name: 'Get started' }).click(); 

  // Verify the URL is correct 

  await expect(page).toHaveURL('https://playwright.dev/docs/intro'); 

  // Verify the page header text is 'Installation' 

  await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible(); 

});</pre>



<p>Copilot stworzył test, dodatkowo opatrując komentarzem każdą znajdującą się w nim akcję. Poniżej zamieszczam zrzut ekreanu z VS Code, na którym widać UI z wykorzystaniem czatu AI.&nbsp;</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1937" height="1051" src="https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-1.png" alt="ai w programowaniu " class="wp-image-34937" title="AI w programowaniu – jak sztuczna inteligencja wspomaga automatyzację?  2" srcset="https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-1.png 1937w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-1-300x163.png 300w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-1-1296x703.png 1296w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-1-768x417.png 768w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-1-1536x833.png 1536w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-1-495x269.png 495w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-1-1320x716.png 1320w" sizes="(max-width: 1937px) 100vw, 1937px" /></figure>



<p>Następnie poprosiłem Copilota o małą refaktoryzację stworzonego przez niego kodu – aby zaktualizował go poprzez przeniesienie hardkodowanych wartości do zmiennych w celu poprawy czytelności kodu.&nbsp;</p>



<p>&nbsp;<br>1. Prompt:&nbsp;&nbsp;</p>



<p><strong>Refactor the proposed code by moving hardcoded values to variables, in order to make the code more readable.</strong>&nbsp;</p>



<p>2. Odpowiedź:&nbsp;</p>



<p>Here’s the refactored code with hardcoded values moved to variables for better readability:&nbsp;</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import { test, expect } from '@playwright/test'; 

test('navigate to Get Started and verify Installation page', async ({ page }) => { 

  // Define reusable variables 

  const baseUrl = 'https://playwright.dev/'; 

  const getStartedLinkName = 'Get started'; 

  const expectedUrl = 'https://playwright.dev/docs/intro'; 

  const expectedHeader = 'Installation'; 

  // Navigate to the Playwright homepage 

  await page.goto(baseUrl); 

  // Click the 'Get started' button 

  await page.getByRole('link', { name: getStartedLinkName }).click(); 

  // Verify the URL is correct 

  await expect(page).toHaveURL(expectedUrl); 

  // Verify the page header text is 'Installation' 

  await expect(page.getByRole('heading', { name: expectedHeader })).toBeVisible(); 

});</pre>



<p>Zgodnie z przewidywaniem Copilot poradził sobie z tym zadaniem poprawnie, identyfikując parametry mogące być przypisane do zmiennych i tworząc je.&nbsp;</p>



<p>Na koniec poprosiłem o stworzenie dokumentacji testu:&nbsp;</p>



<p>&nbsp;<br>1. Prompt:&nbsp;<br><br><strong>Write and apply a description of the test that could be used as documentation.</strong>&nbsp;</p>



<p>2. Odpowiedź:&nbsp;<br>&nbsp;<br>Test Description:&nbsp;</p>



<p>Test Name: Navigate to Get Started and Verify Installation Page&nbsp;</p>



<p>This test verifies the navigation flow on the Playwright documentation website. It performs the following steps:&nbsp;<br>&nbsp;</p>



<ol start="1" class="wp-block-list">
<li>Navigates to the Playwright homepage (https://playwright.dev/).&nbsp;</li>
</ol>



<ol start="2" class="wp-block-list">
<li>Clicks the &#8222;Get started&#8221; link on the homepage.&nbsp;</li>
</ol>



<ol start="3" class="wp-block-list">
<li>Verifies that the user is redirected to the &#8222;Introduction&#8221; page (https://playwright.dev/docs/intro).&nbsp;&nbsp;</li>
</ol>



<ol start="4" class="wp-block-list">
<li>Confirms that the page header text is &#8222;Installation&#8221;.&nbsp;</li>
</ol>



<figure class="wp-block-image size-full"><img decoding="async" width="1937" height="1051" src="https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1.png" alt="ai w programowaniu " class="wp-image-34934" title="AI w programowaniu – jak sztuczna inteligencja wspomaga automatyzację?  3" srcset="https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1.png 1937w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-300x163.png 300w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-1296x703.png 1296w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-768x417.png 768w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-1536x833.png 1536w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-495x269.png 495w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2025.04.10_screen_1-1320x716.png 1320w" sizes="(max-width: 1937px) 100vw, 1937px" /></figure>



<p></p>



<h2 class="wp-block-heading" id="sztuczna-inteligencja-w-testach">Nie tylko programowanie – sztuczna inteligencja w testach&nbsp;</h2>



<p>Testowanie to krytyczny etap w wytwarzaniu oprogramowania. Ma kluczowe znaczenie w gwarantowaniu jakości kodu, niezawodności, wiarygodności i bezpieczeństwa tworzonego systemu. Obecnie testowanie napotyka na swojej drodze różne trudności. Rosnąca złożoność struktur oprogramowania sprawia, że przetestowanie wielu potencjalnych ścieżek mogących zawierać błędy staje się po prostu skomplikowane.&nbsp;Narzędzia technologii AI znajdują zastosowania i tutaj – za ich pomocą tester może zoptymalizować swoją pracę w zakresie:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>generowania przypadków testowych,</strong> które można w dalszym etapie modyfikować, gdy zajdzie taka potrzeba;&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>wspomagania generowania skryptów automatycznych</strong> – z wykorzystaniem narzędzi typu Copilot;&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>automatyzacji powtarzalnych zadań</strong> – co pozwala zaoszczędzić czas i skupić się na bardziej istotnych lub skomplikowanych zadaniach;&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>analizowania i tworzenia raportów testowych</strong> – dzięki asyście przy analizie i tworzeniu raportów można uzyskać bardziej szczegółowe dane na temat wyników testów, co pozwala na uzyskanie jakościowych informacji na temat stanu oprogramowania i ewentualnych błędów;&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>tworzenia danych testowych</strong> – AI może analizować wymagania aplikacji oraz specyfikację systemu, aby automatycznie generować odpowiednie dane testowe, które będą używane w różnych scenariuszach testowych. Dane mogą być bardzo różnorodne, co przekłada się na ich lepszą reprezentatywność dla rzeczywistych przypadków użycia aplikacji. Również przypadki brzegowe (edge cases), które bywają trudne do przewidzenia, mogą zostać zidentyfikowanie przez AI i odpowiednio pokryte danymi wejściowymi. Dzięki temu z pozoru rzadkie, ale ważne scenariusze, mogące mieć wpływ na stabilność aplikacji, mogą zostać zidentyfikowane i odpowiednio zaadresowane. Zwiększa to również pokrycie testów, pomagając w wykrywaniu potencjalnych problemów, które mogłyby umknąć tradycyjnym metodom testowania;&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>tworzenie dokumentacji testowej</strong> – AI można wykorzystać do tworzenia i utrzymywania dokumentacji testowej.&nbsp;</li>
</ul>



<h2 class="wp-block-heading" id="najlepsze-narzędzia-AI-dla-programistów-i-testerów">Jakie są najlepsze narzędzia AI dla programistów i testerów&nbsp;</h2>



<p>Na rynku istnieją już setki, jeśli nie tysiące narzędzi wykorzystujących sztuczną inteligencję. Możliwości tych innowacyjnych rozwiązań z powodzeniem&nbsp; mogą być wykorzystywane przez programistów i testerów. Wybór odpowiednich rozwiązań może jednak stanowić wyzwanie, dlatego warto skupić się na tych, które rzeczywiście zwiększają efektywność pracy, automatyzują powtarzalne zadania i pomagają unikać błędów. Wśród dostępnych narzędzi znajdują się zarówno inteligentni asystenci wspomagający pisanie kodu, jak i zaawansowane systemy do testowania, analizy błędów oraz optymalizacji <a href="https://nearshore-it.eu/pl/artykuly/automatyzacja-ci-cd/" data-type="post" data-id="30743">procesów CI/CD. </a></p>



<p>W tej sekcji krótko omówię kilka narzędzi, których wykorzystanie może usprawnić codzienną pracę w projekcie.&nbsp;</p>



<h3 class="wp-block-heading">GitHub Copilot&nbsp;</h3>



<p><strong>To obecnie jedno z najpopularniejszych narzędzi wspomagających pisanie kodu.</strong> Za jego pomocą można pisać kod efektywniej i szybciej, dzięki czemu programiści mogą więcej czasu poświęcić na rozwój oprogramowania w szerszym kontekście – współpracy w zespole czy skupieniu się na problemach związanych z logiką w aspekcie całościowym aplikacji. Słowem – zwiększa produktywność i przyspiesza wytwarzanie oprogramowania.&nbsp;</p>



<p>Narzędzia takie jak GitHub na bieżąco w trakcie pisania kodu sugerują rozwiązania, można też użyć funkcji czatu w celu uzyskania pomocy dotyczącej pisanego kodu. Istnieje też możliwość korzystania z niego przez CLI.&nbsp;</p>



<p>Dodatkowo w wersji Enterprise oferuje opcję generowania opisu pull requestów oraz tworzenie i zarządzanie dokumentacjami repozytoriów w formie baz wiedzy (knowledge bases), które stanowią kontekst dla czatu Copilot. Dzięki temu <a href="https://docs.github.com/en/enterprise-cloud@latest/copilot/customizing-copilot/managing-copilot-knowledge-bases" target="_blank" rel="noreferrer noopener">Copilot</a> przeszukuje bazę wiedzy pod kątem odpowiednich informacji i zwraca zsyntezowaną odpowiedź. &nbsp;</p>



<p><strong>Doskonale sprawdza się jako narzędzie do uzupełniania kodu, </strong>w szczególności dla przypadków, w których zwykle poszukujemy inspiracji w internecie, np. na StackOverFlow. Często zdarza się, że podobny problem, nad którym pracujemy, został już kiedyś napotkany i opisany, więc analiza danego wątku pozwala na zaimplementowanie rozwiązania w swoim kodzie. Dzięki Copilotowi można pominąć ten etap i za pomocą odpowiedniego prompta sprecyzować, czego potrzebujemy. Z dużym prawdopodobieństwem wygenerowany zostanie odpowiedni kod, nie zawsze idealny, ale wystarczający, żeby po niewielkich modyfikacjach otrzymać działającą funkcję.&nbsp;</p>



<p>Jego zaletą jest też możliwość zintegrowania go z najpopularniejszymi IDE – Visual Studio, Visual Studio Code, JetBrains.&nbsp;</p>



<h3 class="wp-block-heading">Cursor&nbsp;</h3>



<p>Cursor, w przeciwieństwie do GitHub Copilota, nie jest jedynie rozszerzeniem, <strong>ale pełnym IDE korzystającym z narzędzi AI. </strong>Został zaprojektowany w celu zwiększenia produktywności programistów poprzez integrację zaawansowanych funkcji sztucznej inteligencji bezpośrednio ze środowiskiem kodowania. Warto wiedzieć, że powstał na bazie VS Code (jest jego forkiem), a więc zachowuje interfejs i ekosystem VS Code, co ułatwia ewentualne przejście na ten edytor.&nbsp;</p>



<p>Posiada opcje takie jak generowanie, przewidywanie i uzupełnianie kodu oraz automatyczne poprawianie.&nbsp;</p>



<p>Jego kluczową cechą jest sposób “rozumienia” przez niego kodu – <strong>analizuje cały kontekst projektu.</strong> Oferuje kilka dodatkowych funkcji, dzięki którym asystent AI może działać jeszcze dokładniej. Jest to na przykład indeksowanie bazy kodu (które jest włączone domyślnie), każdy nowo dodany plik zostanie zaindeksowany i włączony do kontekstu aplikacji. Oprócz indeksowania plików, oferuje również tworzenie reguł dostosowujących działanie AI: globalnie oraz z ograniczeniami w ramach konkretnego projektu.&nbsp;</p>



<h3 class="wp-block-heading">ChatGPT&nbsp;</h3>



<p>To jedno z najpopularniejszych narzędzi AI dostępne w internecie, może być również z powodzeniem wykorzystane w inżynierii oprogramowania. Jest uniwersalne zarówno dla programistów jak i testerów – za jego pomocą można tworzyć między innymi kod, skrypty, dane testowe, scenariusze – i tak dalej. Dzięki wszechstronności może być wykorzystany jako asystent służący dobrą radą w wielu aspektach.&nbsp;</p>



<p>Oprócz czata GPT można w tym celu wykorzystać również inne narzędzia ogólnego przeznaczenia bazujące na LLM, jak Gemini czy Microsoft Copilot.&nbsp;</p>



<h3 class="wp-block-heading">Applitools&nbsp;</h3>



<p>To narzędzie służące głównie do testowania, monitorowania i zarządzania wizualnym aspektem aplikacji. Wykorzystuje sztuczną inteligencję do wykonywania testów wizualnych, <strong>skutecznie identyfikując wizualne błędy w aplikacjach, </strong>na przykład przez analizę elementów wyświetlanych w interfejsie – czy nie nakładają się na siebie, są w jakiś sposób niewidoczne, wychodzą poza swój obszar. Swoje testy może wykonywać na wielu przeglądarkach i platformach. Można za jego pomocą sprawdzać również pliki PDF. Applitools można zintegrować z popularnymi narzędziami do automatyzacji testów, takimi jak Selenium, Playwright, Appium, Cypress.&nbsp;</p>



<h3 class="wp-block-heading">Amazon CodeGuru&nbsp;</h3>



<p>To narzędzie wspierające przegląd kodu. Dzięki wykorzystaniu uczenia maszynowego i zautomatyzowanego procesu “rozumowania” pomaga zidentyfikować luki w kodzie, dostarcza zalecenia dotyczące sposobu ich naprawienia i śledzi ich status aż do momentu ich zamknięcia. Można je zintegrować na dowolnym etapie wytwarzania oprogramowania, włączając je w proces CI/CD. Twórcy dodatkowo zapewniają, że <strong>nie jest konieczne wykorzystywanie dodatkowych maszyn wirtualnych</strong> w celu jego uruchomienia – wystarczy zintegrować CodeGuru z wykorzystywanymi już narzędziami, a w zależności od obciążenia będzie samoczynnie skalowany w górę lub w dół.&nbsp;</p>



<h3 class="wp-block-heading">Testcraft&nbsp;</h3>



<p>To bezpłatne i otwartoźródłowe rozszerzenie przeglądarki, wykorzystujące sztuczną inteligencję do wspomagania testowania. Jego kluczową cechą jest <strong>możliwość generowania pomysłów na testy w oparciu o elementy widoczne na stronie internetowej.</strong> Pozwala również na automatyczne generowanie skryptów testowych dla popularnych frameworków automatyzacji – Playwright, Cypress, czy biblioteki Selenium. Skrypty można wygenerować w wielu językach programowania, znajdzie więc miłośników zarówno wśród testerów manualnych, jak i automatyzujących.&nbsp;</p>



<h2 class="wp-block-heading">Podsumowanie: Wykorzystanie AI w programowaniu i testowaniu&nbsp;&nbsp;</h2>



<p>Dobrze zaimplementowana sztuczna inteligencja może odegrać kluczową rolę w rozwoju oprogramowania, znacząco przyspieszając i usprawniając procesy na różnych etapach tworzenia oprogramowania. Dzięki AI można automatyzować pisanie kodu, testowanie, debugowanie oraz zarządzanie procesami CI/CD, co prowadzi do <strong>zwiększenia efektywności, redukcji kosztów i minimalizacji liczby błędów.&nbsp;</strong></p>



<p>Jednak należy pamiętać o drugiej stronie medalu. Sztuczna inteligencja, choć pozwala oszczędzać czas i ułatwia wykonywanie powtarzalnych zadań, nie zawsze generuje poprawne lub optymalne rozwiązania. Mając na uwadze fakt, że nowoczesne aplikacje często składają się z wielu modułów, są zintegrowane z wieloma zewnętrznymi usługami i systemami, sztuczna inteligencja, mimo że stanowi potężne wsparcie, nie zawsze jest bezbłędna, zwłaszcza w tak złożonych środowiskach.&nbsp;&nbsp;</p>



<p>AI dobrze radzi sobie z podstawowymi i średnio zaawansowanymi zadaniami, ale <strong>może mieć trudności z bardziej skomplikowanymi zagadnieniami, </strong>np. optymalizacją wydajności w dużych systemach, ze specyficznymi wzorcami projektowymi czy zaawansowanym debugowaniem. Nie można pominąć również potencjalnych zagrożeń w kwestii bezpieczeństwa.&nbsp;</p>



<p>Ostatecznie, <strong>AI powinna być traktowana jako wsparcie, </strong>a nie całkowite zastępstwo dla ludzkiej wiedzy i doświadczenia. Skuteczność automatyzacji opartej na AI zależy od jej mądrego wykorzystania. W połączeniu z kompetencjami specjalistów może ona stać się potężnym narzędziem wspierającym rozwój i utrzymanie wysokiej jakości oprogramowania.&nbsp; Jednak wymaga świadomej kontroli i odpowiedzialnego wdrażania w procesy technologiczne.&nbsp;&nbsp;</p>



<p>Choć obecne systemy AI, w tym narzędzia wspierające programistów i testerów, nie osiągnęły jeszcze poziomu przedstawionego przez Lema w “Golem XIV”, to ich rola w cyfrowej transformacji staje się coraz bardziej widoczna. Sztuczna inteligencja zyskuje na znaczeniu, automatyzując powtarzalne procesy, optymalizując kod oraz wspomagając analizy danych w czasie rzeczywistym. Współczesne algorytmy, choć bardzo zaawansowane, nie są jeszcze pozbawione błędów i ograniczeń, szczególnie w kontekście złożonych aplikacji oraz integracji z innymi systemami. To, co dziś oferuje sztuczna inteligencja, to jedynie przedsmak tego, co może się wydarzyć w przyszłości.&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/ai-w-programowaniu-automatyzacja/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Jak używać narzędzia GitHub Copilot – asystenta AI w programowaniu? </title>
		<link>https://nearshore-it.eu/pl/artykuly/github-copilot-asystent-ai/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/github-copilot-asystent-ai/#respond</comments>
		
		<dc:creator><![CDATA[Maciej Woźnica]]></dc:creator>
		<pubDate>Fri, 04 Apr 2025 12:03:15 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/?p=34871</guid>

					<description><![CDATA[To narzędzie daje deweloperom nowe, ogromne możliwości, m.in. poprzez generowanie, optymalizację oraz pomoc przy refaktoryzacji kodu. W tym artykule sprawdzimy, jak efektywnie wykorzystać GitHub Copilot w codziennych zadaniach programistycznych.  ]]></description>
										<content:encoded><![CDATA[
<p></p>



<p><br>Według badań firmy <a href="https://www.mckinsey.com/industries/technology-media-and-telecommunications/our-insights/navigating-the-generative-ai-disruption-in-software" target="_blank" rel="noreferrer noopener">McKinsey</a> rozwiązania AI i low-code mogą pozytywnie wpłynąć na produktywność deweloperów, zwiększając ją nawet o 45%. Jednym z cenionych narzędzi bazujących na sztucznej inteligencji jest GitHub Copilot, który zmienia oraz usprawnia proces programowania. </p>



<div class="table-of-contents">
    <p class="title">Przejdź do:</p>
    <ol>
                    <li><a href="#Jak-korzystać-z-GitHub-Copilot-w-codziennym-programowaniu?">1.  GitHub Copilot w codziennym programowaniu</a></li>
                    <li><a href="#Jakie-możliwości-funkcji-GitHub-Copilot-oferuje-programistom?">2.  Możliwości funkcji GitHub Copilot</a></li>
                    <li><a href="#GitHub-Copilot---pomoc-w-rozwiązywaniu-problemów-z-kodem">3.  GitHub Copilot &#8211; pomoc w rozwiązywaniu problemów z kodem</a></li>
                    <li><a href="#Jakie-są-opinie-użytkowników-na-temat-narzędzia-GitHub-Copilot?-(wady-i-zalety)">4.  Opinie użytkowników, wady i zalety rozwiązania</a></li>
                    <li><a href="#Gdzie-dowiedzieć-się-więcej-o-GitHub-Copilot?">5.  Gdzie dowiedzieć się więcej o GitHub Copilot? </a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Jak-korzystać-z-GitHub-Copilot-w-codziennym-programowaniu?">Jak korzystać z GitHub Copilot w codziennym programowaniu?&nbsp;</h2>



<p>Aby rozpocząć korzystanie z GitHub Copilot, musimy spełnić kilka prostych warunków. </p>



<p>Po pierwsze – jeśli nie posiadamy konta na github.com – musimy je założyć. Będzie to niezbędny krok do aktywowania subskrypcji naszego asystenta. Jeśli to mamy już za sobą, logujemy się na swoje konto, wybieramy pakiet, który odpowiada naszym potrzebom. Dostępnych mamy kilka wariantów – od planu darmowego służącego do nauki po plan dla profesjonalistów.&nbsp;</p>



<p>Kolejnym krokiem, jaki musimy podjąć, jest uruchomienie naszego ulubionego edytora kodu i instalacja wtyczki. Następnie łączymy swoje konto GitHub z IDE i nasz osobisty asystent jest gotowy do pracy. Od tej pory GitHub Copilot analizuje kod w naszych plikach!&nbsp;</p>



<p>Dzięki analizie Copilot jest w stanie podpowiedzieć nam kolejne linie, metody oraz algorytmy. W chwili, gdy zaczynamy pisać kod, asystent proponuje autouzupełnienie – możemy je zaakceptować, wciskając klawisz Tab, lub odrzucić.&nbsp;</p>



<p>Różnica pomiędzy autouzupełnianiem kodu, jaką znamy z popularnych IDE (VSC lub JetBrains), jest taka, że edytory udzielają nam podpowiedzi, bazując na wcześniej zadeklarowanych klasach, zmiennych, metodach oraz zasadach składni. <br> <br>Copilot idzie nieco dalej. Wykorzystuje AI oraz modele językowe do przewidywania całych bloków kodu. Nie jest ograniczony jedynie składnią &#8211; sugeruje gotowe metody, a nawet algorytmy; podpowiedzi są dużo bardziej zaawansowane niż w przypadku tradycyjnego autouzupełniania. </p>



<pre class="wp-block-code"><code>// Create a function to validate an email address 
function isValidEmail(email: string): bBoolean{...}

</code></pre>



<figure class="wp-block-image size-full"><img decoding="async" width="756" height="213" src="https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2024.04.02_graphic_1.png" alt="ai in coding - validate email" class="wp-image-34899" title="Jak używać narzędzia GitHub Copilot – asystenta AI w programowaniu?  4" srcset="https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2024.04.02_graphic_1.png 756w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2024.04.02_graphic_1-300x85.png 300w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2024.04.02_graphic_1-495x139.png 495w" sizes="(max-width: 756px) 100vw, 756px" /></figure>



<p>Skuteczne okazuje się również generowanie kodu na podstawie komentarzy. Przykładowo, gdy chcemy napisać metodę, możemy po prostu opisać ją jako komentarz, a Copilot zaproponuje gotową implementację: <br>  </p>



<p>Kolejnym sposobem na skuteczną komunikację z Copilotem jest też funkcja czatu. Wystarczy, że wciśniemy kombinację klawiszy CTRL + I i pojawi się okienko, w którym możemy zadawać pytania naszemu asystentowi.&nbsp;</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="756" height="130" src="https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2024.04.02_graphic_2.png" alt="nearshore 2024.04.02 graphic 2" class="wp-image-34905" title="Jak używać narzędzia GitHub Copilot – asystenta AI w programowaniu?  5" srcset="https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2024.04.02_graphic_2.png 756w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2024.04.02_graphic_2-300x52.png 300w, https://nearshore-it.eu/wp-content/uploads/2025/04/nearshore_2024.04.02_graphic_2-495x85.png 495w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure>



<h2 class="wp-block-heading" id="Jakie-możliwości-funkcji-GitHub-Copilot-oferuje-programistom?">Jakie możliwości funkcji GitHub Copilot oferuje programistom?&nbsp;</h2>



<p>Asystent AI może wspierać nas na różnych etapach rozwoju oprogramowania:&nbsp;</p>



<p></p>



<ul class="wp-block-list">
<li><strong>Generowanie kodu w czasie rzeczywistym</strong> – analizuje nasze poczynania i sugeruje zmiany – od pojedynczych sugestii po całe klasy lub funkcje. </li>
</ul>



<ul class="wp-block-list">
<li><strong>Tworzenie całych struktur kodu</strong> – gdy poprosimy Copilota o wygenerowanie całego komponentu, np. w <a href="https://nearshore-it.eu/pl/artykuly/pojedynek-gigantow-react-vs-angular/" data-type="post" data-id="29169">React / Angularze</a>, modułu w Nest.js lub zapytań SQL – bez problemu zareaguje wygenerowaniem odpowiednich linii kodu.&nbsp;</li>
</ul>



<pre class="wp-block-code"><code>// Create a service to connect to the API&nbsp;<br>&nbsp;&nbsp;</code></pre>



<ul class="wp-block-list">
<li><strong>Tworzenie testów jednostkowych</strong> – ogromną zaletą Copilota jest możliwość autotworzenia UT. Jest w stanie wygenerować testy, np. w znanych frameworkach, jak Jest czy Jasmine. Na podstawie analizy implementacji funkcji podpowiada nam odpowiednie przypadki testowe.&nbsp;</li>
</ul>



<pre class="wp-block-code"><code>// Create a UT for getUsers function.&nbsp;<br>&nbsp;&nbsp;</code></pre>



<ul class="wp-block-list">
<li><strong>Optymalizowanie oraz refaktoring kodu</strong> – któż z nas nie widział mnóstwa powtarzających się metod lub niewydajnych rozwiązań? Copilot bierze ten ciężar na siebie i sugeruje <s> </s>alternatywy – bardziej wydajne i zgodne z najlepszymi zasadami.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Generowanie dokumentacji kodu</strong> – Copilot może pomóc w generowaniu użytecznych komentarzy w formacie JSDoc lub Markdown, dzięki czemu ułatwimy innym programistom pracę nad naszym kodem – nie tracąc czasu na ręczne pisanie komentarzy.&nbsp;</li>
</ul>



<pre class="wp-block-code"><code>/**&nbsp;<br>* Gets user data based on user ID&nbsp;<br>* @param userId – user ID&nbsp;<br>* @returns User object or null&nbsp;<br>*/&nbsp;<br>&nbsp;&nbsp;</code></pre>



<h2 class="wp-block-heading" id="GitHub-Copilot---pomoc-w-rozwiązywaniu-problemów-z-kodem">Jak GitHub Copilot może pomóc w rozwiązywaniu problemów z kodem?&nbsp;</h2>



<p>Poza standardową pomocą w codziennych czynnościach związanych z kodem Copilot zapewnia także wsparcie w debugowaniu i naprawianiu błędów. Jest w stanie przeanalizować kod pod kątem potencjalnych bugów, np.:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Nieodpowiednia składnia</strong> – brak nawiasu, średnika czy innego elementu składniowego.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Naprawa nieprawidłowych typów</strong> – np. próba przypisania nieodpowiedniego typu do zmiennej.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Błędne / nieistniejące nazwy zmiennych lub funkcji.&nbsp;</strong></li>
</ul>



<p>Jeśli mamy problem z działaniem metody – wystarczy, że zakomunikujemy to naszemu pomocnikowi:&nbsp;</p>



<pre class="wp-block-code"><code>// The following function is not working properly, fix it&nbsp;<br>function getUserData(id: number) {&nbsp;<br>&nbsp; return fetch(`/api/user/${id}`).then((res) =&gt; res.json());&nbsp;<br>}&nbsp;<br>&nbsp;&nbsp;</code></pre>



<p>Otrzymamy poprawiony kod:&nbsp;</p>



<pre class="wp-block-code"><code>async function getUserData(id: number) {&nbsp;<br>&nbsp; try {&nbsp;<br>&nbsp;&nbsp;&nbsp; const response = await fetch(`/api/user/${id}`);&nbsp;<br>&nbsp;&nbsp;&nbsp; if (!response.ok) throw new Error("data download error");&nbsp;<br>&nbsp;&nbsp;&nbsp; return await response.json();&nbsp;<br>&nbsp; } catch (error) {&nbsp;<br>&nbsp;&nbsp;&nbsp; console.error(error);&nbsp;<br>&nbsp;&nbsp;&nbsp; return null;&nbsp;<br>&nbsp; }&nbsp;<br>}&nbsp;<br>&nbsp;&nbsp;</code></pre>



<p>Jakie są najlepsze praktyki podczas korzystania z GitHub Copilot?&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Zawsze sprawdzaj wygenerowany kod.</strong> Copilot generuje kod, który na pierwszy rzut oka wygląda dobrze, ale może zawierać błędy.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Stosuj precyzyjne prompty i opisy funkcji.</strong> Im dokładniejszy opis, tym lepsze wyniki.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Zwracaj uwagę na bezpieczeństwo.</strong> Unikaj generowania kodu zawierającego wrażliwe dane.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Wykorzystuj Copilota jako narzędzie edukacyjne.</strong> Można go używać do nauki nowych wzorców czy technologii.&nbsp;</li>
</ul>



<h2 class="wp-block-heading" id="Jakie-są-opinie-użytkowników-na-temat-narzędzia-GitHub-Copilot?-(wady-i-zalety)">Jakie są opinie użytkowników na temat narzędzia GitHub Copilot? (wady i zalety)&nbsp;</h2>



<p>Według ogólnodostępnych badań:&nbsp;&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li>Deweloperzy korzystający z Copilota byli w stanie ukończyć zadania nawet o <a href="https://github.blog/news-insights/research/research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/" target="_blank" rel="noreferrer noopener"><strong>55% szybciej</strong></a><strong> </strong>niż ci, którzy z niego nie korzystali.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><a href="https://github.blog/news-insights/research/research-quantifying-github-copilots-impact-in-the-enterprise-with-accenture/" target="_blank" rel="noreferrer noopener"><strong>70% deweloperów</strong></a><strong> </strong>deklarowało znacznie mniejszy wysiłek umysłowy przy wykonywaniu powtarzalnych zadań.&nbsp;</li>
</ul>



<p><strong>Tyle statystyki, a jak to wygląda w praktyce?</strong> Copilot rodzi bardzo mieszane uczucia wśród użytkowników. Z jednej strony, usłyszymy głosy, że jest to rewolucja w wytwarzaniu oprogramowania, a narzędzie poprawia produktywność i ułatwia rozwiązywanie problemów. Z drugiej zaś strony są też nie do końca pozytywne opinie, które wskazują na przykład na jakość generowanego kodu oraz zagrożenia dotyczące bezpieczeństwa.&nbsp;<br>&nbsp;<br>Moje doświadczenie potwierdza te obserwacje. W moim środowisku Copilot cieszy się dużym zainteresowaniem – programiści doceniają przede wszystkim to, że mogą zaoszczędzić czas na pisaniu kodu czy testów jednostkowych. Ale z drugiej strony podchodzą do narzędzia sceptycznie, zwracając uwagę na błędy, które popełnia, lub nieefektywne rozwiązania.&nbsp;</p>



<p><strong>Przeczytaj także: <a href="https://nearshore-it.eu/pl/artykuly/najlepsze-ai-for-coding-w-2025-roku-czego-uzywac-do-generowania-kodu/">The best AI for coding &#8211; czego używać w 2025 roku?</a></strong></p>



<h3 class="wp-block-heading"><strong>Zalety tworzenia oprogramowania z GitHub Copilot:&nbsp;</strong></h3>



<ul class="wp-block-list">
<li>Zwiększenie produktywności.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>Wsparcie dla Junior Developerów i osób uczących się nowych technologii.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>Obsługa wielu języków programowania.&nbsp;</li>
</ul>



<h3 class="wp-block-heading"><strong>Wady tworzenia oprogramowania z GitHub Copilot:</strong>&nbsp;</h3>



<ul class="wp-block-list">
<li>Możliwość generowania błędnego kodu.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>Czasem proponuje przestarzałe rozwiązania.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>Ograniczona wersja darmowa – pełna funkcjonalność wymaga opłaty.&nbsp;</li>
</ul>



<h2 class="wp-block-heading" id="Gdzie-dowiedzieć-się-więcej-o-GitHub-Copilot?">Gdzie dowiedzieć się więcej o GitHub Copilot?&nbsp;</h2>



<p>Najlepszym miejscem jest <strong>oficjalna dokumentacja</strong>. Warto też sprawdzić kursy na YouTube:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Traversy Media </strong>– przegląd Copilota i jego możliwości.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Fireship </strong>– szybkie wprowadzenie w kilka minut.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>The Primeagen </strong>– krytyczna analiza Copilota w praktyce.&nbsp;</li>
</ul>



<p>Poza darmowymi materiałami warto odwiedzić:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Udemy</strong> – kursy dla różnych języków.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Pluralsight</strong> – kursy dla profesjonalistów.&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Coursera</strong> – akademickie podejście do AI w programowaniu.&nbsp;</li>
</ul>



<h2 class="wp-block-heading">Podsumowanie: AI w programowaniu&nbsp;</h2>



<p>Narzędzia bazujące na sztucznej inteligencji stają się coraz lepsze i dzięki temu odciążają programistów już chyba w każdym projekcie IT. Możemy programować szybciej, oszczędzając czas na powtarzalnych zadaniach, takich jak pisanie testów jednostkowych czy przeglądanie dokumentacji. Z drugiej jednak strony – wymagają uważności, czujności i świadomości ograniczeń tej technologii. Wykorzystanie takich narzędzi jak GitHub Copilot wymaga od nas ciągłego poszerzania wiedzy w zakresie możliwości AI, do czego was zachęcam!&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/github-copilot-asystent-ai/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Najlepsze AI for coding w 2025 roku: czego używać do generowania kodu?</title>
		<link>https://nearshore-it.eu/pl/artykuly/najlepsze-ai-for-coding-w-2025-roku-czego-uzywac-do-generowania-kodu/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/najlepsze-ai-for-coding-w-2025-roku-czego-uzywac-do-generowania-kodu/#respond</comments>
		
		<dc:creator><![CDATA[Paweł Adamowicz]]></dc:creator>
		<pubDate>Thu, 27 Mar 2025 13:36:37 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/?p=34778</guid>

					<description><![CDATA[Odkryj najlepsze AI do programowania w 2025 roku! Których narzędzi używać, a których unikać, by uzyskać najlepsze efekty w programowaniu.]]></description>
										<content:encoded><![CDATA[
<p>W dzisiejszym artykule przyjrzymy się tematowi, który jest obecnie bardzo na czasie, a mianowicie AI w programowaniu. Sztuczna inteligencja jest coraz bardziej powszechna wśród programistów na różnych etapach tworzenia oraz rozwoju oprogramowania. Kiedy pierwszy raz widziałem AI w akcji, byłem zaskoczony jej możliwościami. Nie było to narzędzie doskonałe, ale mimo wszystko zrobiło na mnie wrażenie.&nbsp;</p>



<p>Na chwilę obecną posiadamy wiele narzędzi, modeli AI oraz bardzo dużo integracji z oprogramowaniem, z którego korzystamy na co dzień, więc każdy znajdzie coś dla siebie. Nieważne, czy programujesz, zajmujesz się marketingiem, czy grafiką – AI jest obecne wszędzie… Zapraszam was do dalszej części artykułu, gdzie porozmawiamy o tym, jak AI w codziennej pracy pozwala programistom przyspieszyć wydajność oraz poprawić jakość i czytelność naszego kodu.&nbsp;</p>



<div class="table-of-contents">
    <p class="title">Quick links</p>
    <ol>
                    <li><a href="#AI-for-coding:-najlepsze-narzędzia-AI-do-programowania-w-2025-r.">1.  AI for coding: najlepsze narzędzia AI do programowania w 2025 r. </a></li>
                    <li><a href="#Jakie-są-najlepsze-AI-do-generowania-kodu?">2.  Jakie są najlepsze AI do generowania kodu?</a></li>
                    <li><a href="#Które-narzędzia-AI-są-darmowe?">3.  Które narzędzia AI są darmowe?</a></li>
                    <li><a href="#Jakie-są-dostępne-funkcje-AI-w-edytorach-kodu,-takich-jak-VS-Code?">4.  Jakie są dostępne funkcje AI w edytorach kodu, takich jak VS Code?</a></li>
                    <li><a href="#Jak-AI-wpływa-na-jakość-kodu">5.  Jak AI wpływa na jakość kodu</a></li>
                    <li><a href="#Jak-AI-może-pomóc-w-code-review">6.  Jak AI może pomóc w code review</a></li>
                    <li><a href="#Najlepsze-praktyki-używania-AI-do-poprawy-jakości-kodu">7.  Najlepsze praktyki używania AI do poprawy jakości kodu</a></li>
                    <li><a href="#Korzyści-użycia-AI-w-programowaniu">8.  Korzyści użycia AI w programowaniu</a></li>
                    <li><a href="#Potencjalne-pułapki-z-AI-w-programowaniu">9.  Potencjalne pułapki z AI w programowaniu</a></li>
                    <li><a href="#Różnice-między-różnymi-asystentami-AI">10.  Różnice między różnymi asystentami AI</a></li>
                    <li><a href="#Porównanie-różnych-modeli-AI-do-programowania">11.  Porównanie różnych modeli AI do programowania</a></li>
                    <li><a href="#Co-wyróżnia-Gemini-Code-Assist-spośród-innych-narzędzi?">12.  Co wyróżnia Gemini Code Assist spośród innych narzędzi?</a></li>
                    <li><a href="#Najnowsze-trendy-w-obszarze-AI-for-coding-w-2025-roku">13.  Najnowsze trendy w obszarze AI for coding w 2025 roku</a></li>
                    <li><a href="#Najlepsze-praktyki-korzystania-z-AI-w-programowaniu">14.  Najlepsze praktyki korzystania z AI w programowaniu</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="AI-for-coding:-najlepsze-narzędzia-AI-do-programowania-w-2025-r.">AI for coding: najlepsze narzędzia AI do programowania w 2025 r.</h2>



<p>Czy wiesz, że <strong>już nawet 76% osób </strong>zajmujących się programowaniem korzysta lub planuje używać narzędzi związanych z AI w swojej codziennej pracy? Albo że użytkownicy Copilota wykonywali zadania <strong>o około 55% szybciej niż bez AI?</strong> Tak wynika z przeprowadzonej przez <a href="https://stackoverflow.blog/2025/01/28/how-engineering-teams-can-thrive-in-2025/" target="_blank" rel="noreferrer noopener">Stack Overflow</a> w 2024 roku ankiety.&nbsp;&nbsp;</p>



<p>Na chwilę obecną narzędzia AI są już tak zaawansowane, że nie tylko kod generują, ale również wspierają cały cykl tworzenia oprogramowania.&nbsp;</p>



<h2 class="wp-block-heading" id="Jakie-są-najlepsze-AI-do-generowania-kodu?">Jakie są najlepsze AI do generowania kodu?</h2>



<p>Część z was pewnie ma już swoje ulubione narzędzia, z których korzysta na co dzień. Obecnie najbardziej popularne narzędzia, o których pewnie słyszała większość osób w branży, to GitHub Copilot, ChatGPT (OpenAI) i Amazon CodeWhisperer.&nbsp;</p>



<p>Ta wymieniona trójka to pionierzy wśród asystentów i chatbotów AI, ale na rynku są też inne narzędzia, o których opowiem za chwilę.&nbsp;</p>



<ul class="wp-block-list">
<li><strong>GitHub Copilot</strong>&nbsp;</li>
</ul>



<p>Zacznijmy od GitHub Copilota – pioniera wśród asystentów AI, który korzysta z modeli OpenAI. Możemy go zintegrować z popularnym VS Code, dzięki czemu podczas pisania kodu będziemy mieli podpowiedzi bezpośrednio w edytorze.&nbsp;</p>



<ul class="wp-block-list">
<li><strong>ChatGPT</strong>&nbsp;</li>
</ul>



<p>Kolejnym ciekawym narzędziem, o którym pewnie słyszała większość z was, jest ChatGPT. Chat ten korzysta z modeli OpenAI, czyli tak samo jak Copilot, ale z tą różnicą, że nie jest on zintegrowany z edytorami. Pomoże ci napisać fragmenty kodu albo rozwiązać jakiś problem związany z kodem.&nbsp;</p>



<ul class="wp-block-list">
<li><strong>CodeWhisperer</strong>&nbsp;</li>
</ul>



<p>Z topowej trójki zostaje nam jeszcze CodeWhisperer od Amazon. Jest to swojego rodzaju asystent do programowania z użyciem usług takich jak AWS i nie tylko, więc jeśli zajmujesz się tematyką chmurową, to myślę, że warto go sprawdzić!&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Tabnine</strong>&nbsp;</li>
</ul>



<p>Poza tymi, które wymieniłem, są jeszcze inne narzędzia. Zacznijmy od Tabnine. Narzędzie to jest oparte na autouzupełnianiu i, co najważniejsze, może działać jako self-hosted, gwarantując, że nasz kod nigdzie nie wypłynie.&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Codeium</strong>&nbsp;</li>
</ul>



<p>Możliwe, że część użytkowników słyszała o darmowej alternatywie dla Copilota, a mianowicie Codeium. Użytkownicy bardzo chwalą narzędzie, że działa całkiem przyzwoicie jako alternatywa, zapewnia automatyczne uzupełnianie i sugestie kodu, które wcale nie ustępują komercyjnym rozwiązaniom.&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Gemini Code Assist</strong>&nbsp;</li>
</ul>



<p>Ostatnim z popularnych AI, tym razem od Google, jest Gemini Code Assist. Narzędzie to potrafi zrobić nawet code review, więc jeśli szukasz AI, które wstępnie sprawdzi twój kod, to może warto spróbować?&nbsp;</p>



<p>Jak widzisz, mamy tutaj całkiem sporo narzędzi i ciężko jest jednoznacznie stwierdzić, które narzędzie będzie dla ciebie odpowiednie, a jeszcze trudniej wskazać, które będzie najlepsze z nich wszystkich. Każdy z nas oczekuje czegoś innego. Jedni będą pracować z technologiami AWS i wybiorą CodeWhisperer, a ktoś inny postawi na privacy-first i wybierze Tabnine. Znajdą się też osoby, dla których wystarczy chatbot, i wybiorą ChatGPT. W mojej ocenie każde z tych narzędzi na pewno pomoże ci w codziennej pracy.&nbsp;</p>



<h2 class="wp-block-heading" id="Które-narzędzia-AI-są-darmowe?">Które narzędzia AI są darmowe?</h2>



<p>Z narzędzi wymienionych do generowania kodu mamy dostępnych kilka opcji, ale zawsze trzeba zwracać uwagę na to, czy będziemy z nich korzystać hobbystycznie, czy realizując projekt komercyjny.&nbsp;</p>



<p>Większość narzędzi jest darmowa dla użytkowników indywidualnych, a za lepsze wersje lub dodatki trzeba po prostu zapłacić.&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Google Gemini Code Assist</strong> – udostępnia darmowy plan z bardzo wysokimi limitami zapytań i, według mnie, jest to najlepsza alternatywa spośród wszystkich wymienionych.&nbsp;</li>



<li><strong>Amazon CodeWhisperer</strong> – ma plan darmowy, ale tylko dla użytkowników indywidualnych, więc jeśli tworzysz projekt dla siebie w technologiach np. AWS, warto go sprawdzić.&nbsp;</li>



<li><strong>Codeium</strong> – dla użytkowników indywidualnych jest całkowicie darmowy, oferuje nielimitowane podpowiedzi kodu i wspiera wiele języków programowania. Według mnie to bardzo ciekawy wybór.&nbsp;</li>



<li><strong>ChatGPT</strong> – tak jak wspominałem na początku i pewnie nie skłamię, pisząc, że większość osób w branży IT słyszała o tym chatbocie. W wersji bezpłatnej pomoże ci wygenerować np. komponent w React albo zrobić refaktoryzację kodu, jeśli oczywiście wpiszesz odpowiedni prompt. Jednak za wersję premium trzeba już zapłacić.&nbsp;</li>
</ul>



<p>Są też inne narzędzia wymienione wcześniej takie jak <strong>GitHub Copilot, Tabnine,</strong> które są co prawda bezpłatne w podstawowej wersji i będą nam generowały kod, ale jeśli oczekujemy od nich czegoś więcej, to trzeba wykupić pełny plan lub specjalną subskrypcję, więc nie są w pełni darmowe.&nbsp;</p>



<p>Tak naprawdę, jeśli tworzymy coś hobbistycznie i w mniejszej skali, to większość tych narzędzi będzie dla nas dostępna za darmo (z większymi lub mniejszymi limitami). Wszystko zależy więc od licencji, i od tego, do czego użyjemy danego narzędzia. Pamiętajmy też o tym, że to, co w momencie pisania artykułu jest darmowe, za miesiąc może już nie być, bo licencja się zmieni, więc warto sprawdzić to na własną rękę przed instalacją.&nbsp;</p>



<h2 class="wp-block-heading" id="Jakie-są-dostępne-funkcje-AI-w-edytorach-kodu,-takich-jak-VS-Code?">Jakie są dostępne funkcje AI w edytorach kodu, takich jak VS Code?</h2>



<p>Większość narzędzi, które wcześniej wymieniałem, posiada integracje z popularnymi edytorami np. (VS Code) lub IDE. Github Copilot może zostać włączony bezpośrednio w VS Code, dzięki czemu możemy się cieszyć podpowiedziami w kodzie właściwie od razu.&nbsp;</p>



<p>Copilot Chat pozwala za to zadawać pytania o kod, a Copilot w trybie „agent” wykonuje już złożone polecenia, np. uruchamia unit testy.&nbsp;</p>



<p>Tak jak widzimy, mamy cały wachlarz możliwości – od chatu w VS Code, poprzez autouzupełnianie kodu,&nbsp; na uruchamianiu unit testów czy modyfikowaniu całych plików kończąc. Dodatkowo pamiętajmy, że z powyżej wymienionych mamy narzędzia, które nie wysyłają kodu na zewnętrzne serwery, więc nawet przy projektach o wysokich wymaganiach bezpieczeństwa nasze zespoły security będą zadowolone, a dzięki temu będziemy mogli korzystać z AI.&nbsp;</p>



<h2 class="wp-block-heading" id="Jak-AI-wpływa-na-jakość-kodu">Jak AI wpływa na jakość kodu</h2>



<p>AI to nie tylko generowanie kodu komponentów i rozwiązywanie codziennych problemów w kodzie. Na chwilę obecną AI potrafi przeanalizować istniejący kod w poszukiwaniu błędów lub celem sugerowania innych usprawnień. Powiem więcej, zrobi refaktoryzację i code review! Możemy ustawić takie narzędzie AI jako dodatkowego „recenzenta” naszego kodu, który wykrywa np. podejrzany kod marnej jakości, czyli tzw. „code smells”, a nawet luki w bezpieczeństwie.&nbsp;</p>



<h2 class="wp-block-heading" id="Jak-AI-może-pomóc-w-code-review">Jak AI może pomóc w code review</h2>



<p>Dla przykładu, Gemini Code Review wykona analizę pull requesta i podkreśli fragmenty, na które warto zwrócić uwagę i ewentualnie je poprawić.&nbsp;</p>



<p>Jeśli korzystasz z GitHuba i jego rozwiązań, to Gemini Code Assist wyłapie nawet niespójności w konwencji kodowania i sprawdzi, czy ich przestrzegasz.&nbsp;</p>



<p>Tak jak widzisz, temat jest bardzo rozległy, i jeśli dobrze dobierzemy narzędzia AI, to możemy uniknąć wielu roboczogodzin przy sprawdzaniu tego typu rzeczy podczas rozwoju oprogramowania. AI wyłapie te niuanse za nas, a my będziemy mogli skupić się na innej pracy.&nbsp;</p>



<h2 class="wp-block-heading" id="Najlepsze-praktyki-używania-AI-do-poprawy-jakości-kodu">Najlepsze praktyki używania AI do poprawy jakości kodu</h2>



<p>1. Sprawdzaj&nbsp;</p>



<p>Zasada numer jeden, której według mnie należy przestrzegać, to ta, że AI ma ci pomóc w „nakierowaniu” na rozwiązanie twojego problemu. Pamiętaj, aby zweryfikować wszystko, co podpowie ci AI, bo nie zawsze odpowiedzi, które otrzymasz, będą prawidłowe. Jeśli już zastosujesz się do powyższej zasady, to możemy przejść dalej.&nbsp;</p>



<p>Słyszałem już od wielu osób, że AI bardzo pomaga w pisaniu testów jednostkowych, przynajmniej we frontendzie. Pisanie testów jednostkowych do najprzyjemniejszych nie należy, a w wielu przypadkach trzeba napisać bardzo dużo powtarzającego się kodu typu boilerplate. AI wygeneruje ci unit testy bardzo szybko i zaoszczędzisz przy tym sporo czasu na development, ale pamiętaj – zawsze weryfikuj to, co dostarcza ci AI.&nbsp;</p>



<p>2.  Postaw na iteracyjną refaktoryzację&nbsp;</p>



<p>Kolejną rzeczą, do której według mnie AI sprawdzi się na co dzień, jest iteracyjna refaktoryzacja i ulepszanie twojego kodu. Wiesz, jak wygląda kod, w którym ktoś dopisał kawałek kodu w pośpiechu, bez większego zastanowienia, aby tylko działało? Czasami taki kod jest zupełnie nieczytelny, albo dochodzi do wielu zagnieżdżeń i tzw. <em>ifologii</em>. W takim przypadku AI poprawi to za ciebie i zasugeruje ci optymalne rozwiązanie. Pozbędziesz się w ten sposób mało czytelnego kodu, a twoje funkcje będą bardziej przejrzyste, kod ładnie sformatowany, a pull request dla osób robiących ci review – przyjemniejszy do czytania.&nbsp;</p>



<p>3. Bądź elastyczny&nbsp;&nbsp;</p>



<p>Pamiętaj, że AI nie zwalnia z samodzielnego myślenia, a najlepsze efekty osiągniesz, gdy będziesz weryfikować, ale i stosować pomysły, które według ciebie sprawdzą się w danym projekcie.&nbsp;</p>



<p>Tutaj trzeba wybrać, co jest odpowiednie w danej chwili.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Korzyści-użycia-AI-w-programowaniu">Korzyści użycia AI w programowaniu</h2>



<ul class="wp-block-list">
<li><strong>Oszczędność czasu</strong>&nbsp;</li>
</ul>



<p>Ja osobiście dostrzegam tutaj dwie główne korzyści – oszczędność czasu na prostych i powtarzalnych zadaniach oraz zwiększenie produktywności. AI świetnie sprawdza się przy generowaniu powtarzalnego i żmudnego kodu typu boilerplate, więc możemy ten czas poświęcić na coś bardziej kreatywnego. </p>



<ul class="wp-block-list">
<li><strong>Większa produktywność&nbsp;</strong>&nbsp;</li>
</ul>



<p>Druga rzecz to produktywność – taki asystent może sprawić, że zajmiemy się trudniejszymi zadaniami, a te proste oddamy AI, więc będziemy też bardziej produktywni.&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Łatwiejsze wyszukiwanie&nbsp;</strong>&nbsp;</li>
</ul>



<p>Ważną i niedocenianą rzeczą jest też fakt, że AI dobrze radzi sobie z dokumentacjami. Nie musimy już walczyć z przeszukiwaniem internetu czy dokumentacji, aby znaleźć jakieś informacje – AI zrobi to dużo szybciej. Dzięki temu możemy poświęcić się pracy bardziej kreatywnej, czyli skupić się np. na architekturze aplikacji, a nie na powtarzalnej i nudnej „drobnicy”.&nbsp;</p>



<h2 class="wp-block-heading" id="Potencjalne-pułapki-z-AI-w-programowaniu">Potencjalne pułapki z AI w programowaniu</h2>



<ul class="wp-block-list">
<li><strong>Halucynacje AI</strong>&nbsp;</li>
</ul>



<p>Jednym z największych problemów związanych z AI jest to, że doświadczają tzw. halucynacji. To, co czasami wydaje się na pierwszy rzut oka poprawne, po głębszej analizie może (ale nie musi) zawierać błędy logiczne, albo może robić coś zupełnie innego, niż oczekujemy.&nbsp;</p>



<p>Jeśli porcja kodu, którą dostaliśmy od AI, jest duża, to może zdarzyć się, że będzie to trudne do wykrycia. Jeśli nie masz dobrych unit testów, to możesz nawet nie zdawać sobie sprawy, że AI właśnie dodało ci błąd w kodzie, albo, co gorsza, wprowadzić podatność bezpieczeństwa, z której nawet nie zdajesz sobie sprawy.&nbsp;</p>



<ul class="wp-block-list">
<li>Brak rozwoju kompetencji programistycznych&nbsp;</li>
</ul>



<p>Kolejną pułapką jest spadek umiejętności osób, które korzystają z AI na co dzień. Jeśli będziemy zdawali się wyłącznie na AI i jesteśmy na początkującej drodze, to nasze kompetencje mogą ulec zanikowi albo nie zrobimy takiego progresu, jaki byśmy chcieli. Nie oszukujmy się, ale jeśli ktoś dostaje gotowe rozwiązanie, to jest duża szansa, że nie nauczy się tego na własną rękę i nie będzie potrafił wyjaśnić logiki działania wygenerowanego kodu. Nie mówię tutaj tylko o AI, ale generalnie o tzw. gotowcach. Krótkoterminowo raczej nikt na tym nie ucierpi, ale zastanowiłbym się, czy przy długofalowym korzystaniu z tego narzędzia nasze umiejętności rozwiązywania problemów nie spadną drastycznie.&nbsp;</p>



<p>Zalecałbym szczególnie juniorom, aby analizowali kod i pisali go samodzielnie, a to, co wygeneruje AI, traktowali bardziej jak odpowiedź na Stack Overflow, czyli bardziej jako sugestię i materiał do dalszego researchu.&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Kwestie prawne</strong>&nbsp;</li>
</ul>



<p>Na koniec pamiętajmy też o kwestiach prawnych. Nie od dzisiaj wiadomo, że chatboty i inne generatory kodu uczą się na „cudzym” kodzie, który jest np. publicznie dostępny. Zawsze sprawdzajmy i czytajmy polityki prywatności i licencje, aby wiedzieć, co udostępniamy AI, ale jednocześnie też uważajmy na to, co samo AI nam dostarcza, aby nie otrzymać kodu łudząco podobnego do jakiegoś fragmentu z np. open source. Pamiętajmy też o aspektach security i polityce firmy, bo chyba nie chcemy, aby nasze poufne hasła czy klucze API krążyły w sieci, bo były przez nas używane w promptach, a co za tym idzie, mogły zostać użyte do trenowania modeli, prawda?&nbsp;</p>



<h2 class="wp-block-heading" id="Różnice-między-różnymi-asystentami-AI">Różnice między różnymi asystentami AI</h2>



<p>Ilość narzędzi AI oraz różnego rodzaju asystentów potrafi przytłoczyć, a podejrzewam, że to dopiero początek. Spróbujemy zaraz porównać kilka modeli AI oraz narzędzi, które posłużą nam do programowania i codziennej pracy z kodem.&nbsp;</p>



<h2 class="wp-block-heading" id="Porównanie-różnych-modeli-AI-do-programowania">Porównanie różnych modeli AI do programowania</h2>



<p>Obecnie na rynku mamy sporo popularnych modeli AI oraz asystentów programowania, ale generalnie ich cel jest zbliżony – mają <strong>ułatwić i przyspieszyć pisanie kodu.</strong> Jeśli chodzi o główne różnice, to za wszystkim stoją różne modele językowe i firmy, które nad nimi pracują.&nbsp;</p>



<p>Przykładowo, GitHub Copilot korzysta z OpenAI, CodeWhisperer od Amazon jest trenowany na kodzie źródłowym open-source, a inne narzędzia korzystają z własnych modeli, które możemy uruchomić lokalnie (Tabnine), więc mamy tutaj alternatywę dla usług chmurowych.&nbsp;</p>



<p>I teraz pewnie część z was się domyśli, że OpenAI będzie nam płynnie odpowiadał w wielu językach, a CodeWhisperer będzie z kolei lepszy w kontekście AWS, bo na takich danych był trenowany. Tak właśnie jest z tymi narzędziami – takie są subtelne różnice między nimi.&nbsp;</p>



<p>Różnice, które dostrzegamy gołym okiem, będą dla nas widoczne <strong>w integracjach i ekosystemie. </strong>Mamy z jednej strony chatboty bez możliwości wejścia w kontekst projektu (chociaż są pluginy pod ChatGPT, które integrują go z edytorem), a z drugiej strony mamy Tabnine, CodeWhisperer i Gemini jako wtyczki bezpośrednio pod IDE, które dają podpowiedzi na żywo w kodzie.&nbsp;</p>



<p>Warto też zwrócić uwagę na licencję i koszty, i tutaj, jak się pewnie domyślacie, mamy dużą rozpiętość – od darmowych po bardzo drogie. Jeśli chodzi o mnie, to chyba poleciłbym któreś z tych darmowych i najbardziej dostępnych AI – Gemini lub Codeium. Dają praktycznie nieograniczone możliwości korzystania z AI bez opłat, co może być decydującym czynnikiem w niektórych przypadkach.&nbsp;&nbsp;</p>



<p>Z drugiej strony firma może chcieć wykorzystać narzędzie, które będzie zgodne z politykami wewnętrznymi i wtedy trzeba będzie zapłacić więcej (np. Tabnine on-premise ze względów bezpieczeństwa).&nbsp;</p>



<p>Jak widzicie, mamy tutaj spore różnice, jeśli chodzi o modele, narzędzia, pluginy oraz modele subskrypcji i licencji. Generalnie, jeśli chodzi o samą funkcjonalność, to jest ona bardzo podobna – dostajemy wygenerowany kod na podstawie prompta, ale czasami mamy możliwość skorzystania z dodatkowych funkcjonalności, takich jak np. agent mode w Copilot.&nbsp;</p>



<p>W trybie agent mode AI nie tylko podpowiada nam kod, który chcemy dodać, ale też może modyfikować całe pliki projektu i wykonywać dodatkowe czynności, np. uruchamiać komendę do unit testów. Ciekawe, prawda?&nbsp;</p>



<h2 class="wp-block-heading" id="Co-wyróżnia-Gemini-Code-Assist-spośród-innych-narzędzi?">Co wyróżnia Gemini Code Assist spośród innych narzędzi?</h2>



<p>Wyobraź sobie, że masz pod ręką wirtualnego asystenta, który robi również np. code review. Właśnie tak w skrócie działa <strong>Gemini Code Assist.</strong> Jeśli tworzysz projekt hobbistyczny, jest on dostępny od Google całkowicie za darmo, a do tego oferuje bardzo wysokie limity miesięczne, których raczej w standardowej sytuacji nie będziesz w stanie wykorzystać.&nbsp;</p>



<p>Google zadbało również o to, aby dostroić asystenta do zadań stricte programistycznych, ponieważ był trenowany na rzeczywistych przypadkach kodowania. Wyróżniającą cechą jest także fakt, że Gemini potrafi czytać bardzo duży kontekst naraz. Oznacza to, że można mu przekazać cały kod źródłowy do analizy, co stanowi bardzo duży krok naprzód w porównaniu do innych narzędzi.&nbsp;</p>



<p>Jeśli szukasz wsparcia w pisaniu kodu w edytorze za pomocą AI, chcesz, aby asystent zrobił code review i podał sugestie, co poprawić (nawet pod względem code guide w obecnym projekcie), warto zainteresować się Gemini.&nbsp;</p>



<h2 class="wp-block-heading" id="Najnowsze-trendy-w-obszarze-AI-for-coding-w-2025-roku">Najnowsze trendy w obszarze AI for coding w 2025 roku</h2>



<p>Na chwilę obecną widać <strong>gwałtowne przyspieszenie rozwoju narzędzi typu AI for coding.</strong> Duże firmy technologiczne, takie jak Microsoft, Amazon czy Google, prześcigają się we wprowadzaniu AI do swoich produktów.&nbsp;&nbsp;&nbsp;</p>



<p>Ostatnio widziałem, że AI nie tylko generuje kod, ale potrafi stworzyć taska w Jira nawet na podstawie treści nieczytelnej dla człowieka (np. z logów błędu na AWS). Mało tego – rozpisuje odpowiednie subtaski w bardzo ciekawy sposób, więc nie tracimy już cennego czasu na takie prace. Wystarczy, że wkleimy kawałek kodu i zweryfikujemy to, co nam podpowiada AI. Wydaje mi się, że AI będzie coraz bardziej wspierać tworzenie dokumentacji, testów, konfiguracji np. CI/CD czy analizę wymagań w oparciu o przyjętą architekturę projektu.&nbsp;</p>



<h2 class="wp-block-heading" id="Najlepsze-praktyki-korzystania-z-AI-w-programowaniu">Najlepsze praktyki korzystania z AI w programowaniu</h2>



<p>AI, tak jak każde inne narzędzie, potrafi pomóc, ale też trzeba uważać na pewne pułapki. Przedstawię kilka propozycji w kolejności od tych najważniejszych według mnie, które są warte przeczytania i zastosowania, kiedy będziesz korzystać z AI na co dzień w swojej pracy z kodem.&nbsp;</p>



<ol start="1" class="wp-block-list">
<li>Zasada numer jeden – dbaj o prywatność swojego kodu i zasady panujące w danym projekcie (lub, jeśli pracujesz dla kogoś – w danej firmie lub organizacji). Warto upewnić się, czy korzystanie z AI w tym przypadku jest zgodne z umową lub polityką firmy/organizacji. Sprawdź też dodatkowo, czy można wyłączyć trenowanie modeli na twoim kodzie i nigdy nie wrzucaj danych, które są tajemnicą przedsiębiorstwa, do prompta. Jeśli już musisz, to zanonimizuj kod tak, aby nie zawierał danych wrażliwych, unikalnych projektowo nazw funkcji czy zmiennych, a kodu nigdy nie dało się powiązać z danym klientem/projektem/firmą czy czymkolwiek. Mam nadzieję, że wiesz, o co mi chodzi.&nbsp;</li>



<li>AI ma ci pomagać, a nie wyręczać cię w codziennej pracy. Ma być bardziej pomocnikiem przy generowaniu powtarzalnego kodu, np. unit testów, lub nakierować cię na jakieś rozwiązanie. Sprawdź zawsze kod, który dostarcza ci AI. Przeanalizuj i zrozum, w jaki sposób AI dodało np. funkcję w kodzie. Taka refleksja nad kodem będzie ćwiczyła twój umysł, a dzięki temu umiejętności pozostaną na wysokim poziomie.&nbsp;</li>



<li>Przy pisaniu testów jednostkowych stosujemy zasadę nr 2, ale dodatkowo uruchamiamy testy. Zobaczmy, czy rzeczywiście sprawdzają to, co trzeba, sprawdźmy, czy testowane są np. przypadki brzegowe. Zmuś się do analizowania tego kodu, tak jak by to był zwykły pull request na repozytorium do sprawdzenia. Błędy się zdarzają, więc zawsze sprawdzaj dwa razy.&nbsp;&nbsp;</li>



<li>Warto wykorzystać technologię AI do robienia rzeczy, które wychodzą jej lepiej od innych, a te bardziej złożone – lepiej robić na własną rękę. Jeśli masz do wyboru wygenerowanie np. unit testów, zrobienie konwersji jednego formatu na drugi lub optymalizację już istniejącej funkcji, to AI sprawdzi się tutaj dużo lepiej, niż miałaby stworzyć to od podstaw. Skomplikowaną architekturę oraz funkcje zostaw sobie na start, a jeśli poziom skomplikowania się zwiększy lub potrzebujesz refaktoryzacji – wtedy udaj się z pytaniem do AI po sugestie. Nie zaniedbuj szkolenia się w danej dziedzinie. Wiem, że AI potrafi nas odciążyć i trochę zwolnić z myślenia, ale to nie powód, aby nie doszkalać się z danej dziedziny. Unikaj szczególnie “metody Copy’ego Paste&#8217;a”, czyli kopiowania i wklejania treści kodu bez przeczytania i zrozumienia, co się tam dzieje.&nbsp;</li>
</ol>



<h2 class="wp-block-heading">Podsumowanie&nbsp;</h2>



<p>Tak naprawdę, jeśli zastosujemy te zasady w naszej codziennej pracy, to będzie się nam pracowało dużo lepiej, a jednocześnie zapewnimy większe bezpieczeństwo naszego kodu. Nasze umiejętności pozostaną na wysokim poziomie, a efektywność będzie rosła dzięki wsparciu AI.&nbsp;</p>



<p>Temat, który dzisiaj omówiliśmy, jest bardzo rozległy i dynamiczny, ale mam nadzieję, że zaciekawiłem was nim i odpowiedziałem na parę nurtujących pytań. Na koniec powiem jeszcze chyba najważniejszą rzecz odnośnie AI. Ostatecznie to my dostarczamy kod i się pod nim podpisujemy, nie AI. Trzeba o tym pamiętać i zachować po prostu zdrowy rozsądek – tak jak we wszystkim.&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/najlepsze-ai-for-coding-w-2025-roku-czego-uzywac-do-generowania-kodu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Python i AI, Float i nie tylko – czyli jak produktywniej pracować z Pythonem? </title>
		<link>https://nearshore-it.eu/pl/artykuly/python-i-ai/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/python-i-ai/#respond</comments>
		
		<dc:creator><![CDATA[Patryk Fiedorowicz]]></dc:creator>
		<pubDate>Tue, 11 Feb 2025 12:08:19 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/?p=34615</guid>

					<description><![CDATA[Jak zwiększyć efektywność pracy w Pythonie i zadbać o czysty kod? Jak asystenci AI wspierają codzienną pracę programistów? Przeczytaj artykuł i odkryj, jak programować efektywniej dzięki narzędziom AI i Machine Learning! ]]></description>
										<content:encoded><![CDATA[
<p>Podczas konferencji Python Summit 2024 zorganizowanej przez społeczność PyData i PyWaw w Warszawie w grudniu ubiegłego roku, miałem możliwość zapoznania się z prelekcjami na temat generatywnej sztucznej inteligencji, uczenia maszynowego, inżynierii danych, technologii webowych, cyberbezpieczeństwa, testowania, architektury systemów czy dobrych praktyk pisania czystego kodu. W pamięć zapadły mi szczególnie dwie prelekcje, które zainspirowały mnie do napisania tego artykułu. Pierwsza z nich dotyczyła produktywnej pracy z Pythonem (prelegent: Sebastian Buczyński, Software Architect / Consultant / Trainer z Bottega IT Minds), natomiast druga obejmowała temat liczb zmiennoprzecinkowych Float w Pythonie (Konrad Gawda, Cloud Evangelist z Orange Polska).</p>



<p>Zrozumienie poruszonych aspektów pozwala odpowiedzieć na istotne pytania. Jakie struktury wykorzystywać, by uniknąć krytycznych błędów? Jak zwiększyć efektywność pracy w Pythonie i zadbać o czysty kod? Jak asystenci AI wspierają codzienną pracę programistów?</p>



<div class="table-of-contents">
    <p class="title"></p>
    <ol>
                    <li><a href="#przykłady-problemów-z-liczbami-zmiennoprzecinkowymi">1.  Przykłady problemów z liczbami zmiennoprzecinkowymi</a></li>
                    <li><a href="#Float-–-liczby-zmiennoprzecinkowe-w-Pythonie">2.  Float – liczby zmiennoprzecinkowe w Pythonie</a></li>
                    <li><a href="#Developer-Experience-–-jak-mierzyć-efektywność-developera?">3.  Developer Experience – jak mierzyć efektywność developera?</a></li>
                    <li><a href="#Narzędzia-do-efektywnej-pracy-w-Pythonie">4.  Narzędzia do efektywnej pracy w Pythonie</a></li>
                    <li><a href="#Asystenci-AI-jako-wsparcie-produktywnej-pracy">5.  Asystenci AI jako wsparcie produktywnej pracy</a></li>
                    <li><a href="#Podsumowanie">6.  Podsumowanie</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="przykłady-problemów-z-liczbami-zmiennoprzecinkowymi">Trochę historii na początek – przykłady problemów z liczbami zmiennoprzecinkowymi</h2>



<h3 class="wp-block-heading">Błąd systemu obrony przeciwrakietowej Patriot&nbsp;</h3>



<p>Podczas wojny w Zatoce Perskiej w 1991 roku system nie zadziałał prawidłowo i nie przechwycił rakiety Scud, która uderzyła w koszary wojskowe w Dhahran w Arabii Saudyjskiej, zabijając 28 osób. Przyczyną był błąd w obliczeniach czasu. System śledził czas za pomocą liczby całkowitej reprezentującej liczbę taktów zegara, przy czym każdy takt odpowiadał za około 0.1 sekundy. Aby obliczyć dokładny czas, liczba całkowita była mnożona przez 0.1, która w pamięci była reprezentowana jako liczba przybliżona ze względu na ograniczenia formatu IEEE 754. Z każdym kolejnym cyklem zegara błąd się kumulował, przez aż 100 godzin od uruchomienia systemu, ostatecznie narastając do około 0.34 sekundy. Ta różnica spowodowała, że system obliczył błędne położenie rakiety Scud i nie zadziałał na czas. Po incydencie wprowadzono aktualizację oprogramowania, która resetowała zegar systemowy częściej, zmniejszając wpływ kumulacji błędów. Ta tragiczna w skutkach historia amerykańskiego systemu obrony rakietowej Patriot to jeden z klasycznych przykładów błędu wynikającego z ograniczeń liczb zmiennoprzecinkowych. Ta historia pokazuje, że w tak istotnych obliczeniach należy unikać stosowania przybliżeń i używać precyzyjniejszych typów danych.&nbsp;&nbsp;</p>



<h3 class="wp-block-heading">Wybory parlamentarne w Schleswig-Holstein&nbsp;</h3>



<p>Innym przykładem są wybory parlamentarne z 1992 r. w niemieckim Schleswig-Holstein. W tym, jak i w większości niemieckich landów, obowiązuje system proporcjonalny, w którym partie muszą uzyskać co najmniej 5% głosów, aby otrzymać mandaty w parlamencie. Wyniki wyborów były prezentowane w procentach, a zaokrąglenia miały miejsce na różnych etapach obliczeń. Partia Zielonych uzyskała 4.97%, ale na etapie prezentacji wyników wartość została zaokrąglona do 5%, a więc próg został spełniony, co całkowicie zmieniło rozkład mandatów w parlamencie. Doprowadziło to do wielu kontrowersji i publicznej debaty, jednak mimo to wyniki zostały uznane za wiążące. W systemie nie przewidziano procedury na wypadek błędu zaokrąglenia.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Float-–-liczby-zmiennoprzecinkowe-w-Pythonie">Float – liczby zmiennoprzecinkowe w Pythonie</h2>



<p>W tym kontekście bardzo ciekawą prelekcją z mojej perspektywy była ta o typie Float, czyli liczbach zmiennoprzecinkowych w Pythonie.&nbsp;&nbsp;</p>



<p>Liczby te można tworzyć na różne sposoby, poprzez dosłowne przekazanie liczby, czyli np. 1.0, używając klasy tj. float(1) lub poprzez działania matematyczne takie jak 1/1.&nbsp;</p>



<h3 class="wp-block-heading">Standard IEEE 754 binary64&nbsp;</h3>



<p>Z dokumentacji Pythona dowiadujemy się, że we wszystkich znanych implementacjach interpretera Pythona float zdefiniowany jest jako double. Bardziej szczegółowo typ ten jest opisany według standardu IEEE 754 binary64 i wygląda to następująco:&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="150" src="https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_1.png" alt="Python i AI" class="wp-image-34637" title="Python i AI, Float i nie tylko – czyli jak produktywniej pracować z Pythonem?  6" srcset="https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_1.png 756w, https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_1-300x60.png 300w, https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_1-495x98.png 495w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Patrząc po kolei od lewej:&nbsp;</p>



<ul class="wp-block-list">
<li>1 bit jest poświęcony na znak (liczba dodatnia lub ujemna).&nbsp;</li>



<li>11 bitów wyraża wykładnik potęgowy.&nbsp;</li>



<li>52 bity wyrażają ułamek.&nbsp;</li>
</ul>



<p>A wszystko to można przedstawić za pomocą poniższego wzoru:&nbsp;</p>



<p>(-1)^sign x 2^(exp-1023) x 1.fraction&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="160" src="https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_2.png" alt="Python i AI" class="wp-image-34640" title="Python i AI, Float i nie tylko – czyli jak produktywniej pracować z Pythonem?  7" srcset="https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_2.png 756w, https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_2-300x63.png 300w, https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_2-495x105.png 495w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Według omówionego standardu poniżej kilka przykładów reprezentacji binarnej:&nbsp;</p>



<p><strong>a) Liczba 0.0&nbsp;</strong></p>



<p>0 (sign) 00000000000 (exponent) </p>



<p>(0).0000000000000000000000000000000000000000000000000000 (fraction)&nbsp;</p>



<p><strong>b) Liczba 1.0 = 1 x 1.0 = 2^0 x 1.0 = 2^(1024-1024) x 1.0&nbsp;</strong></p>



<p>0 (sign) 01111111111 (exponent) </p>



<p>(1).0000000000000000000000000000000000000000000000000000 (fraction)&nbsp;</p>



<p><strong>c) Liczba 3.0 = 2 x 1.5 = 2^1 x 1.5 =2^(1025-1024) x 1.5&nbsp;</strong></p>



<p>0 (sign) 10000000000 (exponent) </p>



<p>(1).1000000000000000000000000000000000000000000000000000 (fraction)&nbsp;</p>



<h3 class="wp-block-heading">Precyzja typu Float&nbsp;</h3>



<p>Powyższe przykłady są dość proste z punktu widzenia reprezentacji binarnej, jednak problem pojawia się przy liczbach niecałkowitych, ponieważ nie zawsze jesteśmy w stanie zapisać je w pamięci z pełną precyzją. Można to zaobserwować, używając w Pythonie metody as_integer_ratio(), aby sprawdzić, jakie liczby są użyte do dzielenia, by uzyskać oczekiwany wynik. Jak widać na poniższym przykładzie, dla liczby 0.1 nie ma liczb 1 i 10, jak byśmy tego oczekiwali, tylko 3602879701896397 i 36028797018963968. Są to liczby, które dają najbardziej precyzyjne przybliżenie do 0.1 i możliwe do zapisu w pamięci według omawianego standardu. Natomiast to, że wywołując print() na obliczeniu 1/10 otrzymujemy 0.1, wynika wyłącznie z tego, że print() automatycznie zaokrągla nam do najkrótszego zapisu dziesiętnego, który się mieści w ramach ostatniego bitu precyzji.&nbsp;&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="54" src="https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_3.png" alt="Python i AI" class="wp-image-34644" title="Python i AI, Float i nie tylko – czyli jak produktywniej pracować z Pythonem?  8" srcset="https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_3.png 756w, https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_3-300x21.png 300w, https://nearshore-it.eu/wp-content/uploads/2025/02/nearshore_2025.02.05_graphic_3-495x35.png 495w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Inną przydatną metodą w Pythonie, pozwalającą zyskać więcej informacji na temat floatów, jest <strong>sys.float_info. </strong>Dzięki niej możemy się dowiedzieć, że float pozwala na przechowywanie do 15 cyfr znaczących (dodatkowo ewentualnie znak plus-minus i/lub przecinek).&nbsp;&nbsp;</p>



<p>To wszystko może sprawić, że zaczniemy się zastanawiać nad tym, jak dużo ucieka nam precyzji podczas używania typu float. Do tego przydatna jest metoda <strong>math.ulp() </strong>(czyli Unit in the Last Place), co w praktyce zwraca nam różnicę pomiędzy podaną liczbą a następną, którą jesteśmy w stanie zapisać w tym formacie w pamięci. W przypadku małych liczb te różnice są bardzo marginalne, jednak przy takiej liczbie jak 2^52 ta różnica wynosi już równo 1.0. Oznacza to, że właściwie od tej liczby wzwyż całkowicie tracimy części ułamkowe. Idąc dalej, przy 2^53 różnica ta wynosi już 2.0. Zatem ważnym wnioskiem jest, by tak dużych liczb, nawet całkowitych, nie przechowywać jako float, ponieważ tylko liczby parzyste w tym przypadku zachowałyby swoją precyzję.&nbsp;</p>



<h3 class="wp-block-heading">Symbole specjalne&nbsp;</h3>



<p>W standardzie IEEE 754 przewidziano również miejsce dla specjalnych symboli. Jeśli 11-bitowa część exponent jest cała wypełniona jedynkami, a 52-bitowa część wyrażająca ułamek wypełniona zerami, to mamy do czynienia z reprezentacją binarną nieskończoności. Zapełniając zerem bit odpowiedzialny za znak otrzymujemy plus nieskończoność, a jedynką minus nieskończoność.&nbsp;</p>



<p>Z kolei mając również 11-bitową część exponent wypełnioną jedynkami, ale także część wyrażającą ułamek wypełnioną jedynkami, otrzymujemy symbol NaN (Not a Number). Wszelkie operacje porównujące takie jak =, &gt;, &lt; z udziałem NaN zwracają False, co może być problematyczne w różnych okolicznościach. Zwłaszcza kiedy użytkownik ma braki w danych i sądzi, że porównywana jest faktyczna liczba, a nie pusta reprezentacja w postaci NaN.&nbsp;&nbsp;</p>



<h3 class="wp-block-heading">Zaokrąglenia&nbsp;</h3>



<p>Co jednak, jeśli nie jest potrzebna nam aż taka dokładność i chcemy uprościć jakieś obliczenia? Odpowiedzią są zaokrąglenia i należy wiedzieć, że uzyskać je można na różne sposoby. Co istotne, nie różnią się jedynie nazwy funkcji, ale ich implementacje mają odrębne podejścia. W prezentacji podczas Python Summit 2024 przedstawiono następujące metody:&nbsp;</p>



<ol start="1" class="wp-block-list">
<li><strong>Funkcja round() </strong>– zaokrągla zadaną liczbę do najbliższej liczby z określoną liczbą miejsc po przecinku, domyślnie do liczby całkowitej. Natomiast szczególnym przypadkiem jest sytuacja, gdy liczba jest równo w połowie i w obie strony jest taka sama odległość. Wtedy najmniej znacząca cyfra zaokrąglana jest do liczby parzystej, co według statystyków minimalizuje skumulowany błąd podczas wykonywania wielu operacji zaokrąglania. Czyli przykładowo zarówno 1.5, jak i 2.5 zostaną zaokrąglone do 2, jeśli interesuje nas liczba całkowita. Co ciekawe, w przypadku takich liczb jak 1.15 i 1.25 również obie powinny zostać zaokrąglone do 1.2, gdyby chcieć zachować dokładność do jednego miejsca po przecinku. Jednak tylko 1.25 zwróci poprawnie 1.2, a dla 1.15 zostanie zwrócone 1.1. Wynika to właśnie z tego, że liczby 1.15 nie da się precyzyjnie przechować w pamięci według standardu IEEE 754, a będzie to 1.1499999999999999. Czyli nie jest to de facto równo w połowie, a więc zaokrągli w dół do 1.1.&nbsp;</li>
</ol>



<ol start="2" class="wp-block-list">
<li><strong>int() lub math.trunc()</strong> – co prawda nie są to funkcje zaokrąglające, tylko obcinające liczbę, ale ich efekt działa tak, jakbyśmy zaokrąglali liczbę w kierunku 0. Czyli przykładowo 1.9 zostanie ucięte (zaokrąglone) do 1, natomiast -1.9 zostanie sprowadzone do -1.&nbsp;&nbsp;</li>
</ol>



<ol start="3" class="wp-block-list">
<li><strong>math.floor() lub x // 1</strong> – pierwsza z nich po prostu zaokrągla w dół, w kierunku –nieskończoności. Natomiast druga to dzielenie bez reszty, przy czym dzieląc przez jeden, uzyskamy ten sam efekt co w przypadku pierwszej funkcji. Przykładowo dla obu z nich -1.9 zostanie zaokrąglone do -2, a 1.9 do 1.&nbsp;</li>
</ol>



<ol start="4" class="wp-block-list">
<li><strong>math.ceil() </strong>– zaokrąglanie w górę, w kierunku + nieskończoności. Używając tego samego przykładu -1.9 zostanie zaokrąglone do -1, natomiast 1.9 zaokrągli do 2.&nbsp;</li>
</ol>



<h2 class="wp-block-heading" id="Developer-Experience-–-jak-mierzyć-efektywność-developera?">Developer Experience – jak mierzyć efektywność developera?</h2>



<p>W przeszłości na różne sposoby próbowano mierzyć efektywność developerów. Jedną z bardziej popularnych, a zarazem nietrafionych metod, było mierzenie efektywności poprzez liczbę napisanych linii kodu. Podczas drugiej z wspomnianych prezentacji przytoczono koncepcję, która nie tyle pozwala na mierzenie produktywności, co pomaga zadbać o efektywne środowisko pracy. Mowa tutaj o DevEX (Developer Experience), które wyróżnia 3 filary:&nbsp;</p>



<ol start="1" class="wp-block-list">
<li><strong>Stan przepływu (Flow state)</strong> – z punktu widzenia developera jest to stan głębokiego skupienia, w którym jesteśmy w stanie spokojnie pracować. Jeśli cele nie są jasno doprecyzowane, może wystąpić konieczność przerwania zadania, by ustalić nieścisłości.&nbsp;</li>



<li><strong>Pętle zwrotne (Feedback loops) </strong>– oznacza, ile czasu mija, zanim developer się dowie, że kod nie działa. W przypadku testów jednostkowych ten feedback jest bardzo szybki, ale w przypadku code review na feedback trzeba zaczekać dłużej.&nbsp;</li>



<li><strong>Ładunek kognitywny (Cognitive load)</strong> – oznacza wysiłek umysłowy wymagany do skutecznego pisania kodu. Jeśli programista spotyka się z projektem o innej strukturze niż zwykle albo nie ma do dyspozycji dokumentacji, do której zawsze miał dostęp, ten ładunek będzie wyższy.&nbsp;</li>
</ol>



<h2 class="wp-block-heading" id="Narzędzia-do-efektywnej-pracy-w-Pythonie">Narzędzia do efektywnej pracy w Pythonie</h2>



<p>Wielu programistów rozpoczyna przygodę z Pythonem, gdyż zachęca ich intuicyjna składnia i wszechstronność zastosowań tego języka w analizie danych. W miarę rozwoju umiejętności w naturalny sposób poszukujemy narzędzi pozwalających zwiększyć efektywność pracy i ułatwiających życie. Podczas kolejnej prezentacji, w której miałem okazję brać udział w trakcie Python Summit 2024, zostały omówione takie narzędzia:&nbsp;</p>



<ol start="1" class="wp-block-list">
<li><strong>Formatery&nbsp;</strong>&nbsp;</li>
</ol>



<p>Formatowanie kodu to bardzo istotny aspekt, ponieważ to od tego głównie będzie zależało, czy programiście wygodnie się czyta oraz pisze kod. Jednak każdy z nas może mieć nieco inne preferencje, przyzwyczajenia, dlatego najlepiej, aby został przyjęty jeden ściśle określony sposób formatowania. Zaleca się korzystanie ze standardu PEP 8. Jest to dość długi dokument, dlatego dbanie samodzielnie o każdy szczegół mogłoby być bardzo czasochłonne – ładunek kognitywny rośnie. Dodatkowo podczas code review to byłaby rzecz, na którą trzeba zwracać uwagę, zatem przekłada się to na dodatkowy czas poświęcony po stronie zespołu, a i pętla zwrotna się wydłuża. I tutaj z pomocą przychodzą formatery kodu, które mogą wykonać całą pracę za nas. Przykładowe formatery kodu w Pythonie to:<strong> black, isort, ruff, yapf.</strong>&nbsp;</p>



<ol start="2" class="wp-block-list">
<li><strong>Lintery</strong>&nbsp;</li>
</ol>



<p>Są to narzędzia do statycznej analizy kodu, dzięki którym możemy dowiedzieć się o niektórych błędach jeszcze przed uruchomieniem kodu. Ponadto lintery są w stanie naprawiać za nas takie błędy jak np. literówki powstałe poprzez użycie nieistniejącej zmiennej. Inne kwestie, które mogą być sprawdzane automatycznie, to ilość znaków w każdej linii, długość nazw funkcji, zmiennych, ilość argumentów do funkcji itp. Przykłady linterów w Pythonie to: <strong>pylint, flake8, ruff.</strong>&nbsp;<br>&nbsp;</p>



<ol start="3" class="wp-block-list">
<li><strong>Adnotacje typów i type checkery</strong>&nbsp;</li>
</ol>



<p>W kwestii typów zmiennych Python jest bardzo liberalny, ponieważ mamy tu do czynienia z typowaniem dynamicznym. Mimo to określanie typów, jakie przewidujemy dla danych zmiennych, jest postrzegane jako dobra praktyka w Pythonie. Jest to funkcja, która została wprowadzona od wersji Pythona 3.5. Należy mieć na uwadze, że adnotacje typów są jedynie komentarzem i nie są uwzględniane przez program, o ile nie ma zewnętrznej biblioteki, która by je interpretowała. Używając jednak PyCharma, jednego z najpopularniejszych IDE dla Pythona, możemy odnieść korzyści z adnotacji typów natychmiastowo. PyCharm posiada wbudowany type checker, dzięki czemu będziemy widzieć różne podpowiedzi dotyczące typów. Inne popularne zewnętrzne type checkery to: <strong>mypy, pyright </strong>czy też<strong> pyre.</strong>&nbsp;</p>



<p>Rekomendacja dotycząca omówionych narzędzi bardzo przypadła mi do gustu. Według prelegentów Python Summit 2024 dobrym wyborem będzie <strong>ruff</strong>, ponieważ świetnie sprawdza się zarówno jako formater, jak i linter. Zastępuje inne narzędzia oraz jest bardzo szybki. Dodatkowym argumentem, by się bliżej przyjrzeć tej bibliotece, jest to, że w planach jest rozszerzenie jej funkcjonalności również o type checker. Jednak na ten moment należy korzystać ze sprawdzonych i popularnych narzędzi do sprawdzania typów, takich jak <strong>mypy </strong>oraz <strong>pyright.&nbsp;</strong>&nbsp;</p>



<h2 class="wp-block-heading" id="Asystenci-AI-jako-wsparcie-produktywnej-pracy">Asystenci AI jako wsparcie produktywnej pracy</h2>



<p>Na koniec temat, bez którego trudno obecnie wyobrazić sobie przyszłość programowania – mianowicie narzędzia sztucznej inteligencji. Poza wspomnianymi tradycyjnymi narzędziami do usprawniania pracy w Pythonie podczas konferencji w prezentacjach osobną część poświęcono nowoczesnym podejściom do tworzenia oprogramowania wykorzystującym asystentów AI.&nbsp;&nbsp;</p>



<p>O ile obecnie raczej nie ma co liczyć na to, że napiszą za nas cały program, o tyle mogą świetnie się sprawdzić jako usprawnienie pracy. Zainstalowanie takiej wtyczki jak chociażby Copilot może przyspieszyć proste operacje czy też tworzenie komentarzy dzięki trafnym podpowiedziom.&nbsp;&nbsp;</p>



<p>Jeśli nie pamiętamy składni, argumentów biblioteki etc., sprawdzanie dokumentacji może okazać się już zbędne. Asystenci AI mogą również przyspieszyć pisanie prostych testów jednostkowych. Warto jednak najpierw napisać kilka z nich samodzielnie, by asystent mógł lepiej rozpoznać poprawny wzór.&nbsp;</p>



<p>Poniżej kilka przykładów najbardziej popularnych narzędzi programistycznych.&nbsp;&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li><strong>GitHub Copilot</strong> – narzędzie analizuje kontekst kodu i pozwala zautomatyzować, a tym samym przyspieszyć uzupełnianie fragmentów kodu. Przydatny w tworzeniu i przeglądzie dokumentacji oraz wyszukiwaniu konkretnych rozwiązań.&nbsp;</li>



<li><strong>Supermaven</strong> – sugeruje zależności i poprawki w kodzie, eliminując błędy i optymalizując wydajność aplikacji. Narzędzie może zasugerować użycie najlepszej biblioteki pod kątem danego projektu, co skraca czas analizy i przyspiesza proces wdrażania nowych rozwiązań.&nbsp;</li>



<li><strong>Cursor AI</strong> – usprawnia pracę programistów Python dzięki inteligentnemu autouzupełnianiu, generowaniu kodu na podstawie języka naturalnego oraz możliwości szybkiego refactoringu.&nbsp;</li>



<li><strong>Tabnine </strong>– pozwala uzupełniać kod w czasie rzeczywistym, co zwiększa produktywność i pomaga unikać błędów składniowych, a także eliminuje powtarzalność zadań związanych z pisaniem kodu.&nbsp;</li>



<li><strong>S</strong><strong>ourcegraph Cody</strong> <strong>– </strong>sprawdza się świetnie w<strong> </strong>zaawansowanym przeszukiwaniu kodu. Pozwala na zrozumienie zależności w projektach oraz – dzięki kontekstowej analizie całej bazy kodu – na szybkie odnajdywanie i poprawianie błędów.&nbsp;</li>
</ul>


</style><div class="promotion-box promotion-box--image-left "><div class="tiles latest-news-once"><div class="tile"><div class="tile-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2025/02/Code-Faster-Tlo-2.jpg" alt="Code Faster Tlo 2" title="Python i AI, Float i nie tylko – czyli jak produktywniej pracować z Pythonem?  9"></div><div class="tile-content"><p class="entry-title client-name">AI w programowaniu | bezpłatny e-book</p>
Zautomatyzuj kodowanie z AI! Pobierz darmowy e-book i odkryj nowe możliwości
<br /><br />
<a class="btn btn-primary" href="https://www.engage.inetum.com/ebook-code-faster-build-smarter/" target="_blank" rel="noopener">Pobierz teraz!</a></div></div></div></div>



<h2 class="wp-block-heading" id="Podsumowanie">Podsumowanie</h2>



<p>Mnogość dostępnych technologii w świecie IT potrafi przyprawić o zawrót głowy. Samo określenie roli w projekcie IT jeszcze nie determinuje wyboru narzędzi, z których będziemy korzystać. Decydować o tym będą w głównej mierze wymagania systemu. Czy powinien być nastawiony na wydajne przetwarzanie dużych ilości danych, czy może bardziej istotna jest prostota w implementacji i szybkie wdrożenie rozwiązania kosztem niższej wydajności? Odpowiedzenie sobie na te pytania czasem nie wystarczy, ponieważ bywa, że kilka technologii spełnia wszystkie wymagania i wybór sprowadza się do względów czysto estetycznych i preferencji osobistych.&nbsp;&nbsp;</p>



<p>Na szczęście są społeczności i organizacje, które skupiają ludzi zainteresowanych określoną tematyką i pomagają odnaleźć się w gąszczu wiedzy oraz poszerzać horyzonty, by być na bieżąco. Dla osób związanych zawodowo z językiem programowania Python takim miejscem jest właśnie konferencja Python Summit. Prelekcje dostępne w trakcie Python Summit 2024 i zagadnienia, które omówiłem, stanowią tylko mały wycinek wiedzy, jaki można było wynieść z tego spotkania. Zapewniam, że każdy znalazłby coś dla siebie, nawet jeśli wybrane przeze mnie tematy nie są w centrum zainteresowania danego programisty.&nbsp;</p>



<p>Przeczytaj także nasze artykuły dotyczące bibliotek Python:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://nearshore-it.eu/pl/artykuly/numpy-wstep-do-biblioteki-python/" target="_blank" rel="noreferrer noopener">NumPy</a>&nbsp;</li>



<li><a href="https://nearshore-it.eu/pl/artykuly/biblioteka-matplotlib/" target="_blank" rel="noreferrer noopener">Matplotlib</a>&nbsp;</li>



<li><a href="https://nearshore-it.eu/pl/artykuly/biblioteki-python-pandas/" target="_blank" rel="noreferrer noopener">Pandas</a>&nbsp;</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/python-i-ai/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
