<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Volodymyr Obrizan</title>
    <description>The latest articles on DEV Community by Volodymyr Obrizan (@obrizan).</description>
    <link>https://dev.to/obrizan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1137232%2F265e6e98-00bc-47d4-960b-c535af8aa45c.jpg</url>
      <title>DEV Community: Volodymyr Obrizan</title>
      <link>https://dev.to/obrizan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/obrizan"/>
    <language>en</language>
    <item>
      <title>What is Functional Programming?</title>
      <dc:creator>Volodymyr Obrizan</dc:creator>
      <pubDate>Tue, 15 Apr 2025 09:14:35 +0000</pubDate>
      <link>https://dev.to/obrizan/what-is-functional-programming-4i4d</link>
      <guid>https://dev.to/obrizan/what-is-functional-programming-4i4d</guid>
      <description>&lt;p&gt;&lt;strong&gt;Functional programming (FP)&lt;/strong&gt; is a programming paradigm where computations are treated as the evaluation of mathematical functions rather than as a sequence of instructions that change state.&lt;/p&gt;

&lt;p&gt;At the heart of FP are pure functions, immutability of data, and the absence of side effects. This approach helps create code that is clear, predictable, and easy to test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features of Functional Programming
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pure Functions — A function always returns the same result for the same inputs and does not alter any external state.&lt;/li&gt;
&lt;li&gt;Immutability — Instead of modifying existing variables, new values are created.
3.First-Class Functions — Functions are treated as first-class citizens — they can be passed as arguments, returned from other functions, and assigned to variables.&lt;/li&gt;
&lt;li&gt;No Side Effects — Functions do not affect the external environment: no file writing, no global state changes, no console output.&lt;/li&gt;
&lt;li&gt;Recursion Instead of Loops — Recursion is often used instead of iterative constructs like for and while loops.&lt;/li&gt;
&lt;li&gt;Expression-Oriented Programming — Everything is an expression that returns a value, rather than just a sequence of instructions.&lt;/li&gt;
&lt;li&gt;Function Composition — Complex behavior is built by combining simple functions together.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where Is Functional Programming Used?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Big Data Processing — Due to its suitability for parallel computation, FP is popular in big data tools like Apache Spark (Scala).&lt;/li&gt;
&lt;li&gt;Financial and Scientific Applications — Where precision, predictability, and mathematical rigor are essential.&lt;/li&gt;
&lt;li&gt;Web Services and APIs — Used in languages like JavaScript or Elixir to build scalable reactive systems.&lt;/li&gt;
&lt;li&gt;Software Testing and Verification
FP simplifies unit testing due to the predictability of pure functions.&lt;/li&gt;
&lt;li&gt;Frontend Development — Libraries like React apply many functional programming concepts (e.g., pure components, immutable state).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  For my Ukrainian-speaking followers
&lt;/h2&gt;

&lt;p&gt;For anyone who wants to dive deeper into functional programming, I’ve translated the tutorial “Functional Programming in Python” (&lt;a href="https://first.institute/edu/course/functional/" rel="noopener noreferrer"&gt;Функціональне програмування на Python&lt;/a&gt;) into Ukrainian, made the examples interactive, and added knowledge quizzes. It’s online and free.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why Bitbucket Pipelines is Slow and How to Optimize</title>
      <dc:creator>Volodymyr Obrizan</dc:creator>
      <pubDate>Tue, 30 Jul 2024 12:26:42 +0000</pubDate>
      <link>https://dev.to/obrizan/why-bitbucket-pipelines-is-slow-and-how-to-optimize-48m1</link>
      <guid>https://dev.to/obrizan/why-bitbucket-pipelines-is-slow-and-how-to-optimize-48m1</guid>
      <description>&lt;p&gt;Bitbucket Pipelines can be slow due to poor CI infrastructure performance and the time-consuming process of installing dependencies for each build. Here's how to address these issues:&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance Issues:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure Delays&lt;/strong&gt;: Delays in provisioning and build setup can occur, with performance inconsistencies noted in monitoring projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency Installation&lt;/strong&gt;: Installing libraries, tools, packages, and third-party dependencies each time consumes significant build time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Optimization Approach:
&lt;/h2&gt;

&lt;p&gt;Pre-configure Docker Image:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Dockerfile Creation: Move dependency installation commands to a Dockerfile.&lt;/li&gt;
&lt;li&gt;Build and Push Image: Use Docker Buildx to create an image and push it to Docker Hub.&lt;/li&gt;
&lt;li&gt;Update Pipeline: Modify bitbucket-pipelines.yml to use the new Docker image, eliminating repetitive setup steps.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example Dockerfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.11.7-slim-bullseye&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; build-essential postgresql postgresql-client curl
&lt;span class="k"&gt;RUN &lt;/span&gt;curl https://dl.min.io/client/mc/release/linux-amd64/mc &lt;span class="nt"&gt;--create-dirs&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; ~/minio-binaries/mc
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ~/minio-binaries/mc
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; requirements.txt .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--ignore-installed&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example Updated bitbucket-pipelines.yml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dntl/1l2c-backend-for-tests:latest&lt;/span&gt;
&lt;span class="na"&gt;pipelines&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;step&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;export PATH=$PATH:~/minio-binaries/&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;mc alias set testing-minio http://localhost:9000 root root-pass&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;mc admin user svcacct add --access-key "test_access_key" --secret-key "test_secret_key" testing-minio root&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;mc mb testing-minio/dean-testing&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PGPASSWORD=root psql -h localhost -p 5432 -U root postgres -c 'create database dean_unit_tests_db;'&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;python -m pytest . --test_application_name=dean --junitxml=./test-reports/dean_out_report.xml&lt;/span&gt;
        &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;postgres&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;elasticsearch&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;minio&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Results:
&lt;/h2&gt;

&lt;p&gt;Setup Time Reduction: Dependencies are pre-configured, reducing setup time from several minutes to less than 10 seconds.&lt;/p&gt;

&lt;p&gt;Overall Efficiency: Test execution time decreased significantly, saving valuable build minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion:
&lt;/h2&gt;

&lt;p&gt;By pre-configuring a Docker image, you can optimize Bitbucket Pipelines, ensuring faster and more reliable builds. This approach minimizes dependency on CI infrastructure performance and reduces the total build time.&lt;/p&gt;

&lt;p&gt;For more detailed information, visit the full article &lt;a href="https://www.ciperf.com/why-is-bitbucket-pipelines-slow-how-to-optimize-bitbucket-pipelinesyml-by-minimizing-build-steps.html?utm_source=dev.to"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>bitbucket</category>
      <category>ci</category>
      <category>docker</category>
    </item>
    <item>
      <title>Why Programmers Have a Tough Job</title>
      <dc:creator>Volodymyr Obrizan</dc:creator>
      <pubDate>Fri, 12 Jan 2024 08:44:42 +0000</pubDate>
      <link>https://dev.to/obrizan/why-programmers-have-a-tough-job-19kl</link>
      <guid>https://dev.to/obrizan/why-programmers-have-a-tough-job-19kl</guid>
      <description>&lt;p&gt;In one of the projects we're developing, 85% of the code volume is from third-party libraries. That is, these are the libraries that need to be installed in the project so that the other 15% of the code can work with something. There are a total of 93 such libraries.&lt;/p&gt;

&lt;p&gt;Since the software market is very large and attractive (hundreds of billions of dollars), there are many players, and the competition is frankly fierce.&lt;br&gt;
Players try to innovate, create new features for products, make improvements, in order to stand out favorably from their competitors. In most cases, all these improvements are essentially complete nonsensical nonsense.&lt;/p&gt;

&lt;p&gt;If you stop releasing new versions, you can quickly start losing market share. After all, a competitor will continue to vigorously imitate innovation every month, release versions, press releases, create news hooks, and speak at conferences.&lt;/p&gt;

&lt;p&gt;Programmers have to adapt. With the release of each new version, they need to see how it differs from the previous one and update their current project. As a result, a good part of a programmer's time is spent not on solving the task at hand, but on upgrading libraries, tools, services, and fixing all the inconsistencies in integration that arise from this.&lt;/p&gt;

&lt;p&gt;And this gets very tiresome quickly.&lt;/p&gt;

&lt;p&gt;Can you stop and not update libraries? I do not advise it. Over time, old libraries stop being supported by their manufacturers. First, it becomes impossible to compile the product. And then even the compiled ones stop working. The second aspect: the market demands specialists who can work with modern technologies, not with Algol 68 or Delphi (remember how hyped that technology was?).&lt;/p&gt;

&lt;p&gt;Yes, programmers are well paid. But if you consider motivation besides money, employees are also motivated by success: successfully completed projects, and in the short term - successfully closed tasks.&lt;/p&gt;

&lt;p&gt;And there is also a big problem with this: if you need to constantly integrate new libraries with which there is no experience, then both the estimation of labor costs and the reliability of the solutions obtained suffer greatly. A programmer is forced to constantly study the features of new libraries, adapt to them. And the fact that it is impossible to predict the outcome of a task in terms of labor costs and reliability is very demotivating. A modern programmer rarely leaves work happy: "I completed my tasks and I did the job well".&lt;/p&gt;

&lt;p&gt;This is one of the reasons why programmers burn out very quickly. It seems they are paid well, but the job is complete crap.&lt;/p&gt;

</description>
      <category>job</category>
      <category>programming</category>
      <category>burnout</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
