<?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: Alhousseïni Mohamed</title>
    <description>The latest articles on DEV Community by Alhousseïni Mohamed (@al-sori).</description>
    <link>https://dev.to/al-sori</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%2F3808280%2Fe7bd4d15-3e20-4345-b86c-33c77303ade5.jpg</url>
      <title>DEV Community: Alhousseïni Mohamed</title>
      <link>https://dev.to/al-sori</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/al-sori"/>
    <language>en</language>
    <item>
      <title>Understanding Linux Network Namespaces: How Containers Isolate and Connect Networks</title>
      <dc:creator>Alhousseïni Mohamed</dc:creator>
      <pubDate>Tue, 24 Mar 2026 07:49:29 +0000</pubDate>
      <link>https://dev.to/al-sori/understanding-linux-network-namespaces-how-containers-isolate-and-connect-networks-3m81</link>
      <guid>https://dev.to/al-sori/understanding-linux-network-namespaces-how-containers-isolate-and-connect-networks-3m81</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fed6fnsh9j91rmakxtrgu.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fed6fnsh9j91rmakxtrgu.webp" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Modern container technologies like Docker and Kubernetes rely heavily on Linux kernel features to provide isolation and security. One of the most fundamental, yet often misunderstood of these features is the network namespace.&lt;/p&gt;

&lt;p&gt;Network namespaces are what give containers the illusion of having their own network stack: their own interfaces, IP addresses, routing tables, and ARP tables; completely isolated from the host and from other containers.&lt;/p&gt;

&lt;p&gt;In this article, we’ll break down how network namespaces work, why they are essential for container networking, and how Linux connects isolated namespaces together using virtual Ethernet (veth) interfaces. Through concrete commands and examples, you’ll see how containers are isolated from the host and how they can still communicate with each other when needed.&lt;/p&gt;

&lt;p&gt;By the end, you’ll have a clear mental model of what happens under the hood when a container gets network access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. How does networking work in case of containers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzlyesedpt0i1epqjd1z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzlyesedpt0i1epqjd1z.png" alt="Routing and ARP table inside a namespace"&gt;&lt;/a&gt;&lt;br&gt;
          Routing and ARP table inside a namespace&lt;/p&gt;

&lt;p&gt;By default, a host wich is connected to a LAN has it owns routing table and ARP table and we would like to seals them all from the container. When we create a container, we create it’s own Network Namespace. So, it gets it’s own virtual interface, routing and ARP table.&lt;/p&gt;

&lt;p&gt;To create a new Network Namespace on a Linux host we run this command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns add &amp;lt;new namespace name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, let’s say you wanted to create a namespace called “blue”. You’d use this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns add blue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To verify that the network namespace has been created, use this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see your network namespace listed there, ready for you to use.&lt;/p&gt;

&lt;p&gt;To be sure that your virtual network can be seen by the host, but inside the namespace your container can’t see the host virtual network run those commands :&lt;/p&gt;

&lt;p&gt;First on the host ( Your should see your host virtual interface and the one sed by your container ) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then from inside the Network Namespace ( You should only see your container interface, not your host one. ) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;blue ip &lt;span class="nb"&gt;link&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NB : The same goes for the ARP table and Route table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The tricky part&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20xk60721shbpzm74vjn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20xk60721shbpzm74vjn.png" alt="Connecting two networks namespaces virtual interfaces"&gt;&lt;/a&gt;&lt;br&gt;
      Connecting two networks namespaces virtual interfaces&lt;/p&gt;

&lt;p&gt;Let say we create two Network Namespaces, but then how do we make so that they are connected ?&lt;br&gt;
Creating the network namespace is only the beginning; the next part is to assign interfaces to the namespaces, and then configure those interfaces for network connectivity.&lt;br&gt;
Virtual Ethernet interfaces are an interesting construct; they always come in pairs, and they are connected like a tube — whatever comes in one veth interface will come out the other peer veth interface. As a result, you can use veth interfaces to connect a network namespace to the outside world via the “default” or “global” namespace where physical interfaces exist.&lt;/p&gt;

&lt;p&gt;Let’s see how that’s done. First, you’d create the veth pair:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link &lt;/span&gt;add veth0 &lt;span class="nb"&gt;type &lt;/span&gt;veth peer name veth1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I found a few sites that repeated this command to create veth1 and link it to veth0, but my tests showed that both interfaces were created and linked automatically using this command listed above. Naturally, you could substitute other names for veth0 and veth1, if you wanted.&lt;/p&gt;

&lt;p&gt;You can verify that the veth pair was created using this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link &lt;/span&gt;list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see a pair of veth interfaces (using the names you assigned in the command above) listed there. Right now, they both belong to the “default” or “global” namespace, along with the physical interfaces.&lt;/p&gt;

&lt;p&gt;Let’s say that you want to attach the veth1 interface to the blue namespace. To do that, you’ll need to use this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link set &lt;/span&gt;veth1 netns blue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PS : You do the same for the veth0 interface to attach it to your second namespace.&lt;/p&gt;

&lt;p&gt;You then assign an ip to each namespace using this command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nt"&gt;-n&lt;/span&gt; blue addr add 192.168.10.1 dev veth1

  The same goes &lt;span class="k"&gt;for &lt;/span&gt;tyour second namespace :

ip &lt;span class="nt"&gt;-n&lt;/span&gt; second_namespace addr add 192.168.10.2 dev veth0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command assign the ip 192.168.10.1, to the namespace blue using the veth1 interface.&lt;/p&gt;

&lt;p&gt;To finish, you then bring up the interface using the IP link command, on each one of the respective namespace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nt"&gt;-n&lt;/span&gt; blue &lt;span class="nb"&gt;link set &lt;/span&gt;veth1 up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your namespace can now reach each other !&lt;/p&gt;

&lt;p&gt;You can check this, by looking at one of your network namespace :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;blue arp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will show the second namespace ARP table, that is connected to the blue namespace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Network namespaces are a core building block of Linux containerization. They provide strong isolation by giving each container its own network stack — including interfaces, routing tables, and ARP tables — while still allowing the host full visibility and control.&lt;/p&gt;

&lt;p&gt;On their own, namespaces are completely isolated. The real magic happens when we connect them using veth pairs, which act like virtual network cables. By attaching each end of a veth pair to different namespaces and assigning IP addresses, we can enable controlled communication between containers while preserving isolation.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>containers</category>
      <category>security</category>
      <category>docker</category>
    </item>
    <item>
      <title>Understanding Linux Network Namespaces: How Containers Isolate and Connect Networks</title>
      <dc:creator>Alhousseïni Mohamed</dc:creator>
      <pubDate>Tue, 24 Mar 2026 07:49:29 +0000</pubDate>
      <link>https://dev.to/al-sori/understanding-linux-network-namespaces-how-containers-isolate-and-connect-networks-1ja2</link>
      <guid>https://dev.to/al-sori/understanding-linux-network-namespaces-how-containers-isolate-and-connect-networks-1ja2</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fed6fnsh9j91rmakxtrgu.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fed6fnsh9j91rmakxtrgu.webp" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Modern container technologies like Docker and Kubernetes rely heavily on Linux kernel features to provide isolation and security. One of the most fundamental, yet often misunderstood of these features is the network namespace.&lt;/p&gt;

&lt;p&gt;Network namespaces are what give containers the illusion of having their own network stack: their own interfaces, IP addresses, routing tables, and ARP tables; completely isolated from the host and from other containers.&lt;/p&gt;

&lt;p&gt;In this article, we’ll break down how network namespaces work, why they are essential for container networking, and how Linux connects isolated namespaces together using virtual Ethernet (veth) interfaces. Through concrete commands and examples, you’ll see how containers are isolated from the host and how they can still communicate with each other when needed.&lt;/p&gt;

&lt;p&gt;By the end, you’ll have a clear mental model of what happens under the hood when a container gets network access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. How does networking work in case of containers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzlyesedpt0i1epqjd1z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzlyesedpt0i1epqjd1z.png" alt="Routing and ARP table inside a namespace"&gt;&lt;/a&gt;&lt;br&gt;
          Routing and ARP table inside a namespace&lt;/p&gt;

&lt;p&gt;By default, a host wich is connected to a LAN has it owns routing table and ARP table and we would like to seals them all from the container. When we create a container, we create it’s own Network Namespace. So, it gets it’s own virtual interface, routing and ARP table.&lt;/p&gt;

&lt;p&gt;To create a new Network Namespace on a Linux host we run this command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns add &amp;lt;new namespace name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, let’s say you wanted to create a namespace called “blue”. You’d use this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns add blue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To verify that the network namespace has been created, use this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see your network namespace listed there, ready for you to use.&lt;/p&gt;

&lt;p&gt;To be sure that your virtual network can be seen by the host, but inside the namespace your container can’t see the host virtual network run those commands :&lt;/p&gt;

&lt;p&gt;First on the host ( Your should see your host virtual interface and the one sed by your container ) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then from inside the Network Namespace ( You should only see your container interface, not your host one. ) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;blue ip &lt;span class="nb"&gt;link&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NB : The same goes for the ARP table and Route table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The tricky part&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20xk60721shbpzm74vjn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20xk60721shbpzm74vjn.png" alt="Connecting two networks namespaces virtual interfaces"&gt;&lt;/a&gt;&lt;br&gt;
      Connecting two networks namespaces virtual interfaces&lt;/p&gt;

&lt;p&gt;Let say we create two Network Namespaces, but then how do we make so that they are connected ?&lt;br&gt;
Creating the network namespace is only the beginning; the next part is to assign interfaces to the namespaces, and then configure those interfaces for network connectivity.&lt;br&gt;
Virtual Ethernet interfaces are an interesting construct; they always come in pairs, and they are connected like a tube — whatever comes in one veth interface will come out the other peer veth interface. As a result, you can use veth interfaces to connect a network namespace to the outside world via the “default” or “global” namespace where physical interfaces exist.&lt;/p&gt;

&lt;p&gt;Let’s see how that’s done. First, you’d create the veth pair:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link &lt;/span&gt;add veth0 &lt;span class="nb"&gt;type &lt;/span&gt;veth peer name veth1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I found a few sites that repeated this command to create veth1 and link it to veth0, but my tests showed that both interfaces were created and linked automatically using this command listed above. Naturally, you could substitute other names for veth0 and veth1, if you wanted.&lt;/p&gt;

&lt;p&gt;You can verify that the veth pair was created using this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link &lt;/span&gt;list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see a pair of veth interfaces (using the names you assigned in the command above) listed there. Right now, they both belong to the “default” or “global” namespace, along with the physical interfaces.&lt;/p&gt;

&lt;p&gt;Let’s say that you want to attach the veth1 interface to the blue namespace. To do that, you’ll need to use this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nb"&gt;link set &lt;/span&gt;veth1 netns blue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PS : You do the same for the veth0 interface to attach it to your second namespace.&lt;/p&gt;

&lt;p&gt;You then assign an ip to each namespace using this command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nt"&gt;-n&lt;/span&gt; blue addr add 192.168.10.1 dev veth1

  The same goes &lt;span class="k"&gt;for &lt;/span&gt;tyour second namespace :

ip &lt;span class="nt"&gt;-n&lt;/span&gt; second_namespace addr add 192.168.10.2 dev veth0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command assign the ip 192.168.10.1, to the namespace blue using the veth1 interface.&lt;/p&gt;

&lt;p&gt;To finish, you then bring up the interface using the IP link command, on each one of the respective namespace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nt"&gt;-n&lt;/span&gt; blue &lt;span class="nb"&gt;link set &lt;/span&gt;veth1 up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your namespace can now reach each other !&lt;/p&gt;

&lt;p&gt;You can check this, by looking at one of your network namespace :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip netns &lt;span class="nb"&gt;exec &lt;/span&gt;blue arp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will show the second namespace ARP table, that is connected to the blue namespace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Network namespaces are a core building block of Linux containerization. They provide strong isolation by giving each container its own network stack — including interfaces, routing tables, and ARP tables — while still allowing the host full visibility and control.&lt;/p&gt;

&lt;p&gt;On their own, namespaces are completely isolated. The real magic happens when we connect them using veth pairs, which act like virtual network cables. By attaching each end of a veth pair to different namespaces and assigning IP addresses, we can enable controlled communication between containers while preserving isolation.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>containers</category>
      <category>security</category>
      <category>docker</category>
    </item>
    <item>
      <title>Why AI Might Be the WORST Thing That Could Have Happened to Us</title>
      <dc:creator>Alhousseïni Mohamed</dc:creator>
      <pubDate>Thu, 05 Mar 2026 16:08:04 +0000</pubDate>
      <link>https://dev.to/al-sori/why-ai-might-be-the-worst-thing-that-could-have-happened-to-us-j1o</link>
      <guid>https://dev.to/al-sori/why-ai-might-be-the-worst-thing-that-could-have-happened-to-us-j1o</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fasrgm5kvqlg8y56lg4ob.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fasrgm5kvqlg8y56lg4ob.webp" alt=" " width="720" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before we dive into this topic, let me ask you two simple questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When was the last time you did an addition, subtraction, or multiplication with two-digit numbers… in your head — without reaching for a calculator?&lt;/li&gt;
&lt;li&gt;And when was the last time you wrote a full paragraph without your autocorrect saving you from spelling mistakes?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don’t worry, I’m not judging you.&lt;/p&gt;

&lt;p&gt;I’m asking because I asked myself the same questions, and I didn’t like the answers.&lt;/p&gt;

&lt;p&gt;Actually, even writing this article is a perfect example of the problem: I’m using AI to help me write in English, because it’s not my first language. And yes, I know I’ll make mistakes. AI fixes them instantly.&lt;/p&gt;

&lt;p&gt;Convenient? Absolutely, but also… kind of scary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI doesn’t just help us. It slowly replaces our brain habits.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s be honest: AI is amazing.&lt;/p&gt;

&lt;p&gt;It writes emails, fixes grammar, summarizes long documents, generates code, explains concepts, and gives you “the perfect answer” in seconds.&lt;/p&gt;

&lt;p&gt;But here’s the thing:&lt;/p&gt;

&lt;p&gt;The more AI helps us think, the less we actually practice thinking. And like a muscle… if you don’t use it, you lose it.&lt;br&gt;
At first, you use AI to save time. Then you use AI because it’s faster.&lt;br&gt;
Then you use AI because you can’t be bothered.&lt;br&gt;
And one day, you realize you’re not really learning anymore.&lt;/p&gt;

&lt;p&gt;You’re just… &lt;strong&gt;prompting&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Everything is moving too fast now. And humans are not built for that.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me give you my context.&lt;/p&gt;

&lt;p&gt;I’m currently a student, in my last year of an IT Expert / DevOps degree.&lt;br&gt;
Which means I’m still learning, still growing, still building experience.&lt;/p&gt;

&lt;p&gt;Before AI, I already knew what Docker was used for…&lt;br&gt;
but I didn’t fully understand how it relies on Linux networking concepts behind the scenes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I learned about CI/CD pipelines…&lt;br&gt;
but writing complex bash scripts from scratch? Still difficult.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then I discovered Kubernetes. Kubernetes is wonderful. It’s powerful. It’s the future. But it’s also… a foggy mountain of concepts.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I understand why it exists. I’ve used containers. I’ve used Docker Compose. So I clearly see the value. But mastering Kubernetes takes time.&lt;/p&gt;

&lt;p&gt;And time is exactly what we don’t have anymore. Because now, people look at you like: &lt;strong&gt;“Oh you don’t know Kubernetes? Just ask ChatGPT.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS? Great. Also… WHY ARE THERE 500 SERVICES?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then I started learning AWS. And my God… there are so many services.&lt;br&gt;
Do I really need to know them all? I mean yes, I need a VM, some networking and security with IAM.&lt;br&gt;
But then you open the AWS console and it feels like walking into a supermarket where every aisle is a different universe.&lt;/p&gt;

&lt;p&gt;Honestly, respect to AWS engineers…they really thought about everything 😅.&lt;/p&gt;

&lt;p&gt;But still, learning it takes time. And now the expectation is: &lt;strong&gt;“AI can explain AWS in 10 minutes, so you should be productive by tomorrow.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then comes Infrastructure as Code… and suddenly I’m the Dev AND the Ops team&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now here comes IaC.&lt;/p&gt;

&lt;p&gt;Terraform. Ansible. Kubernetes manifests. Helm charts. GitOps. Secrets management. Monitoring. Logging.&lt;br&gt;
It’s interesting. It’s powerful. But I’m thinking: &lt;strong&gt;Why do I have to do the Ops team’s job too?&lt;/strong&gt;&lt;br&gt;
I already have a lot to learn. And now the world wants developers who can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;code&lt;/li&gt;
&lt;li&gt;deploy&lt;/li&gt;
&lt;li&gt;secure&lt;/li&gt;
&lt;li&gt;monitor&lt;/li&gt;
&lt;li&gt;automate&lt;/li&gt;
&lt;li&gt;document&lt;/li&gt;
&lt;li&gt;scale&lt;/li&gt;
&lt;li&gt;optimize costs&lt;/li&gt;
&lt;li&gt;and still deliver fast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile AI can generate half of it instantly…&lt;/p&gt;

&lt;p&gt;So the new standard becomes: &lt;strong&gt;“If AI can do it fast, you should too.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The real problem isn’t AI. It’s what people expect because of AI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI isn’t the enemy, the real problem is what happens next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;learning becomes optional&lt;/li&gt;
&lt;li&gt;understanding becomes “too slow”&lt;/li&gt;
&lt;li&gt;effort becomes “inefficient”&lt;/li&gt;
&lt;li&gt;and speed becomes more valuable than mastery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’re turning into a generation of people who can produce results, without fully knowing how they were produced. And that’s dangerous.&lt;/p&gt;

&lt;p&gt;Because when something breaks at 3AM in production :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI won’t feel stress.&lt;/li&gt;
&lt;li&gt;AI won’t panic.&lt;/li&gt;
&lt;li&gt;AI won’t be accountable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&amp;gt; You will.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI is a cheat code. But life still has a skill tree.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I love AI. I use it every day. But I’m also trying to remember this:&lt;br&gt;
AI can accelerate your learning, but it can also replace it.&lt;br&gt;
So maybe the real challenge today is not “learning faster”.&lt;br&gt;
It’s learning deeply, while the world is screaming “faster”.&lt;/p&gt;

&lt;p&gt;Because the future won’t belong to the people who use AI to avoid thinking.&lt;br&gt;
It will belong to the people who use AI to think better.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>machinelearning</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
