<?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: Moriam Akter Swarna</title>
    <description>The latest articles on DEV Community by Moriam Akter Swarna (@firebird).</description>
    <link>https://dev.to/firebird</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%2F1529850%2Ffb76a477-4e1f-4526-909d-b3dcce10d9a1.jpg</url>
      <title>DEV Community: Moriam Akter Swarna</title>
      <link>https://dev.to/firebird</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/firebird"/>
    <language>en</language>
    <item>
      <title>Understanding API and Fetch in JavaScript (Step by Step Explanation)</title>
      <dc:creator>Moriam Akter Swarna</dc:creator>
      <pubDate>Tue, 03 Mar 2026 04:08:24 +0000</pubDate>
      <link>https://dev.to/firebird/understanding-api-and-fetch-in-javascript-step-by-step-explanation-j4p</link>
      <guid>https://dev.to/firebird/understanding-api-and-fetch-in-javascript-step-by-step-explanation-j4p</guid>
      <description>&lt;p&gt;API, বা &lt;strong&gt;Application Programming Interface&lt;/strong&gt;, হলো দুটি অ্যাপ্লিকেশনের মধ্যে যোগাযোগের মাধ্যম। এটি একটি নির্দিষ্ট protocol ফলো করে অ্যাপ্লিকেশনগুলিকে একে অপরের সাথে ডেটা শেয়ার করতে সহায়তা করে।&lt;/p&gt;

&lt;p&gt;আমরা জানি, JavaScript একটি ওয়েব অ্যাপ্লিকেশনে প্রাণ সঞ্চার করে। আর API হচ্ছে সেই মাধ্যম যার মাধ্যমে একটি অ্যাপ্লিকেশন অন্য একটি সার্ভারের সাথে কথা বলে।&lt;/p&gt;

&lt;p&gt;এই লেখায় আমরা দেখবো:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API কিভাবে কাজ করে&lt;/li&gt;
&lt;li&gt;JavaScript দিয়ে API কল কিভাবে করতে হয়&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fetch()&lt;/code&gt; আসলে কী করে&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.then()&lt;/code&gt; কেন ব্যবহার করি&lt;/li&gt;
&lt;li&gt;Promise দিয়ে asynchronous behaviour কিভাবে handle হয়&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How API Works?
&lt;/h2&gt;

&lt;p&gt;ধরুন আপনি একটি ওয়েবসাইট তৈরি করছেন যা আবহাওয়ার তথ্য দেখাবে।&lt;/p&gt;

&lt;p&gt;আপনি সরাসরি আবহাওয়া অধিদপ্তরের database access করতে পারবেন না।&lt;br&gt;
তার পরিবর্তে, আপনাকে তাদের তৈরি করা API ব্যবহার করতে হবে।&lt;/p&gt;
&lt;h3&gt;
  
  
  Flowটা এমন:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;আপনার অ্যাপ্লিকেশন একটি &lt;strong&gt;request&lt;/strong&gt; পাঠায়&lt;/li&gt;
&lt;li&gt;সার্ভার request validate করে&lt;/li&gt;
&lt;li&gt;সার্ভার একটি &lt;strong&gt;response&lt;/strong&gt; পাঠায়&lt;/li&gt;
&lt;li&gt;আপনার অ্যাপ্লিকেশন সেই response ব্যবহার করে UI update করে&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;এই তথ্য আদান-প্রদানটাই মূলত API এর কাজ।&lt;/p&gt;


&lt;h2&gt;
  
  
  JavaScript দিয়ে API Implementation
&lt;/h2&gt;

&lt;p&gt;JavaScript-এ API কল করা খুব সহজ। আমরা &lt;code&gt;fetch()&lt;/code&gt; ব্যবহার করি।&lt;/p&gt;

&lt;p&gt;ধরি আমাদের API URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/weather&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন API call করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  এখানে আসলে কী হচ্ছে?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: fetch()
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি সার্ভারে একটি request পাঠায়।&lt;/p&gt;

&lt;p&gt;⚠️ গুরুত্বপূর্ণ বিষয়: &lt;code&gt;fetch()&lt;/code&gt; asynchronous।&lt;/p&gt;

&lt;p&gt;মানে — এটি request পাঠিয়ে পরের লাইনের কোড execute করা শুরু করে দেয়।&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: First &lt;code&gt;.then()&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সার্ভার থেকে response আসলে এটি একটি Response object দেয়।&lt;/p&gt;

&lt;p&gt;আমরা &lt;code&gt;.json()&lt;/code&gt; ব্যবহার করে সেটিকে JavaScript object এ convert করি।&lt;/p&gt;

&lt;p&gt;⚠️ এটিও asynchronous।&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Second &lt;code&gt;.then()&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন আমরা final JSON data পেয়ে যাই।&lt;br&gt;
এখানে আমরা চাইলে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI update করতে পারি&lt;/li&gt;
&lt;li&gt;Condition check করতে পারি&lt;/li&gt;
&lt;li&gt;DOM manipulate করতে পারি&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Example: API Response Based UI Update
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/weather&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;weather&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sunny&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;আজ আকাশ পরিষ্কার!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;আজ বৃষ্টি হতে পারে।&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  এখানে কী হলো?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;request পাঠানো হলো&lt;/li&gt;
&lt;li&gt;response আসলো&lt;/li&gt;
&lt;li&gt;JSON এ convert হলো&lt;/li&gt;
&lt;li&gt;condition check করা হলো&lt;/li&gt;
&lt;li&gt;DOM update হলো&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  তাহলে &lt;code&gt;.then().then()&lt;/code&gt; কেন?
&lt;/h2&gt;

&lt;p&gt;API call asynchronous।&lt;/p&gt;

&lt;p&gt;JavaScript একসাথে অনেক কাজ করতে পারে।&lt;br&gt;
তাই আমরা &lt;code&gt;.then()&lt;/code&gt; ব্যবহার করি —&lt;/p&gt;

&lt;p&gt;👉 "Response পাওয়ার পর এই কাজটা করো"&lt;br&gt;
👉 "JSON পাওয়ার পর এই কাজটা করো"&lt;/p&gt;

&lt;p&gt;এভাবে asynchronous code কে controlled flow তে চালানো হয়।&lt;/p&gt;




&lt;h2&gt;
  
  
  Promise কীভাবে কাজ করছে?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;fetch()&lt;/code&gt; একটি Promise return করে।&lt;/p&gt;

&lt;p&gt;Promise এর তিনটি state আছে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pending&lt;/li&gt;
&lt;li&gt;Fulfilled&lt;/li&gt;
&lt;li&gt;Rejected&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;.then()&lt;/code&gt; চলে যখন Promise fulfilled হয়।&lt;br&gt;
&lt;code&gt;.catch()&lt;/code&gt; ব্যবহার করা হয় error handle করার জন্য।&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;API হলো আধুনিক ওয়েব ডেভেলপমেন্টের backbone।&lt;br&gt;
JavaScript-এর &lt;code&gt;fetch()&lt;/code&gt; এবং Promise বুঝে ফেললে আপনি সহজেই:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;External data নিয়ে কাজ করতে পারবেন&lt;/li&gt;
&lt;li&gt;Dynamic UI তৈরি করতে পারবেন&lt;/li&gt;
&lt;li&gt;Real-world application বানাতে পারবেন&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Asynchronous flow পরিষ্কারভাবে বুঝতে পারলেই API নিয়ে কাজ করা অনেক সহজ হয়ে যায়।&lt;/p&gt;




&lt;p&gt;If this article helped you understand API &amp;amp; fetch more clearly, feel free to react and share your thoughts 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>api</category>
    </item>
    <item>
      <title>Array vs Object Destructure</title>
      <dc:creator>Moriam Akter Swarna</dc:creator>
      <pubDate>Sun, 01 Mar 2026 10:59:09 +0000</pubDate>
      <link>https://dev.to/firebird/array-vs-object-destructure-14dc</link>
      <guid>https://dev.to/firebird/array-vs-object-destructure-14dc</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%2Fi0382tjtj9xq0dpzoxcb.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%2Fi0382tjtj9xq0dpzoxcb.png" alt="Destructuring" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;জাভাস্ক্রিপ্টে ডেটা অ্যাক্সেস এবং ম্যানিপুলেশন একটি গুরুত্বপূর্ণ স্কিল। ES6-এর সাথে, ডেটা অ্যাক্সেসকে আরও সিম্পল এবং সহজ করার জন্য অ্যারে এবং অবজেক্ট Destructuring নামক একটি শক্তিশালী feature এসেছে। আজ আমরা এই Destructuring নিয়েই আলোচনা করবো।&lt;/p&gt;




&lt;h2&gt;
  
  
  জাভাস্ক্রিপ্টে ডিস্ট্রাকচারিং কি?
&lt;/h2&gt;

&lt;p&gt;ডিস্ট্রাকচারিং হলো একটি ES6 বৈশিষ্ট্য যা আপনাকে অ্যারে এবং অবজেক্টের উপাদানগুলিকে সরাসরি ভেরিয়েবলে extract করতে দেয়। এটি সাধারণ অ্যারে ইনডেক্সিং এবং অবজেক্ট প্রোপার্টি অ্যাক্সেসের চেয়ে স্বচ্ছ এবং কম এরর&lt;br&gt;
যুক্ত ।&lt;/p&gt;


&lt;h2&gt;
  
  
  কোডে ডিস্ট্রাকচারিং এর গুরুত্ব:
&lt;/h2&gt;

&lt;p&gt;i. &lt;strong&gt;Clean code:&lt;/strong&gt; ডিস্ট্রাকচারিং কোডকে আরও clean এবং বোঝার জন্য সহজ করে তোলে।&lt;br&gt;
ii. &lt;strong&gt;Less error:&lt;/strong&gt; ডিস্ট্রাকচারিং দুর্ঘটনাবশত ভুল প্রোপার্টি অ্যাক্সেস করার সম্ভাবনা কমিয়ে দেয়।&lt;br&gt;
iii. &lt;strong&gt;Less code:&lt;/strong&gt; ডিস্ট্রাকচারিং কোডকে সংক্ষিপ্ত করতে পারে, বিশেষ করে যখন আপনি একাধিক মান অ্যাক্সেস করছেন।&lt;br&gt;
iv. &lt;strong&gt;Reduce repetition:&lt;/strong&gt; ডিস্ট্রাকচারিং ডেটা অ্যাক্সেসের জন্য একই কোড বারবার লেখার প্রয়োজনীয়তা হ্রাস করে।&lt;/p&gt;


&lt;h2&gt;
  
  
  Array Destructuring কি?
&lt;/h2&gt;

&lt;p&gt;Array Destructuring হলো জাভাস্ক্রিপ্টে একটি ES6 বৈশিষ্ট্য যা আপনাকে একটি অ্যারের element গুলিকে সরাসরি ভেরিয়েবলে extract করতে দেয়। এটি সাধারণ অ্যারে ইনডেক্সিংয়ের চেয়ে clean এবং কম ত্রুটিপূর্ণ।&lt;/p&gt;


&lt;h2&gt;
  
  
  Array Destructuring এর সিনট্যাক্স:
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;second&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;এই কোডে, array থেকে প্রথম দুটি উপাদান first এবং second ভেরিয়েবলে extract করা হয়েছে। ...rest ব্যবহার করে, অবশিষ্ট উপাদানগুলি rest নামক একটি অ্যারেতে সংরক্ষণ করা হয়েছে।&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%2Fngpwlbiq3fm4kg7ayrq6.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%2Fngpwlbiq3fm4kg7ayrq6.png" alt="Array Destructuring" width="745" height="224"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Array Destructuring এর ব্যবহার:
&lt;/h2&gt;
&lt;h3&gt;
  
  
  অ্যারের উপাদানগুলিকে ভেরিয়েবলে extract করতে:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;second&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// first = 1, second = 2&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`first= &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, second = &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;second&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;//first= 1, second = 2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  অ্যারে থেকে নির্দিষ্ট উপাদান বাদ দিতে:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;third&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// first = 1, third = 3 (skips second element)&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`first= &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, third = &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;third&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;//first= 1, third = 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  অ্যারের উপাদানগুলিকে নতুন নাম দিতে:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="nx"&gt;one&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;two&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// one = 1, two = 2&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`One= &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;one&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, two = &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;two&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;//One= 1, two = 2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  অ্যারের অবশিষ্ট উপাদানগুলি পেতে:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;bakiGulo&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// one = 1, two = 2&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`baki gulo= &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;bakiGulo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;//baki gulo= 3,4,5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ডিফল্ট মান ব্যবহার করে undefined মান হ্যান্ডেল করা:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;second&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Unknown&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// first = 1, second = "janina" (if second is not present)&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`first= &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, second = &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;second&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;//first= 1, second = janina&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  নেস্টেড অ্যারের মধ্যে ডিস্ট্রাকচারিং:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nestedArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;second&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nestedArray&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// first = [1, 2], second = [3, 4]&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`first= &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, second = &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;second&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;//first= 1,2, second = 3,4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;firstArr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;third&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fourth&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nestedArray&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// first = 1, third = 3, fourth = 4&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;`firstArray= &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;firstArr&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, third = &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;third&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, fourth= &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;fourth&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;//firstArray= 1,2, third = 3, fourth= 4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fkpfushepulv7puen6jsk.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%2Fkpfushepulv7puen6jsk.png" alt="Object Destructuring" width="768" height="415"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Object Destructuring কি?
&lt;/h2&gt;

&lt;p&gt;Object Destructuring হলো জাভাস্ক্রিপ্টের একটি ES6 বৈশিষ্ট্য যা আপনাকে একটি অবজেক্টের প্রোপার্টিগুলিকে সরাসরি ভেরিয়েবলে এক্সট্রাক্ট করতে দেয়। এটি সাধারণ ডট নোটেশন ব্যবহার করে প্রোপার্টি অ্যাক্সেস করার চেয়ে clean এবং কম ত্রুটিপূর্ণ।&lt;/p&gt;


&lt;h2&gt;
  
  
  Object Destructuring এর সিনট্যাক্স:
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;এই কোডে, object থেকে name এবং age প্রোপার্টিগুলিকে name এবং age ভেরিয়েবলে এক্সট্রাক্ট করা হয়েছে।&lt;/p&gt;


&lt;h2&gt;
  
  
  অবজেক্ট ডিস্ট্রাকচারিং এর ব্যবহার:
&lt;/h2&gt;
&lt;h3&gt;
  
  
  অবজেক্টের প্রোপার্টিগুলিকে ভেরিয়েবলে এক্সট্রাক্ট করতে:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// name = "John", age = 30&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Name: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, age: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  অবজেক্ট থেকে নির্দিষ্ট প্রোপার্টি বাদ দিতে:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sherlock Holmes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;221 B Baker Street&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// address is not extracted here&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Name: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, age: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;// name = "John", age = 30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  অবজেক্টের প্রোপার্টিগুলিকে নতুন নাম দিতে:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sherlock Holmes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;221 B Bekar Street&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;writerName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;writerAge&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Writer Name: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;writerName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, Writer age: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;writerAge&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;Writer&lt;/span&gt; &lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Sherlock&lt;/span&gt; &lt;span class="nx"&gt;Holmes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Writer&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ডিফল্ট মান ব্যবহার করে undefined মান হ্যান্ডেল করা:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sherlock&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;janina&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// age = "janina" (if age is not present)&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Age: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;//Age: janina&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  নেস্টেড অবজেক্টের মধ্যে ডিস্ট্রাকচারিং:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nestedObject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="na"&gt;person&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;city&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;New York&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;NY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;

&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;person&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nx"&gt;city&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nestedObject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// name = "John", age = 30&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Name: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; Age: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, address: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;city&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;//Name: John Age: 30, address: New York, NY&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Array / Object ডিস্ট্রাকচারিংয়ের benifits:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Easy Data Access:&lt;/strong&gt; কমপ্লেক্স অ্যারে স্ট্রাকচারের মধ্যে থেকেও নির্দিষ্ট মানগুলি অ্যাক্সেস করা সহজ করে তোলে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set default value:&lt;/strong&gt; যদি কোনো উপাদান না থাকে তাহলে ডিফল্ট মান সেট করা যায়, যা এরর এড়াতে সাহায্য করে।&lt;/p&gt;


&lt;h2&gt;
  
  
  অ্যারে এবং অবজেক্ট ডিস্ট্রাকচারিং এর মধ্যে পার্থক্য:
&lt;/h2&gt;
&lt;h2&gt;
  
  
  1. Access Element:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Array Destructuring:&lt;/strong&gt; অ্যারের ইনডেক্স অনুযায়ী এলিমেন্ট অ্যাক্সেস করা হয়।&lt;br&gt;
যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt;  &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="nx"&gt;firstNumber&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Object Destructuring:&lt;/strong&gt; অবজেক্টের প্রোপার্টি নাম অনুযায়ী এলিমেন্ট অ্যাক্সেস করা হয়।&lt;br&gt;
যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Order:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Array Destructuring:&lt;/strong&gt; অ্যারেতে element অর্ডার গুরুত্বপূর্ণ। যে ক্রমে/সিরিয়াল  আপনি ভেরিয়েবলে আনবেন সেই ক্রমেই অ্যারের উপাদানগুলি মিলিয়ে নেওয়া হবে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Object Destructuring:&lt;/strong&gt; অবজেক্টে প্রোপার্টির অর্ডার গুরুত্বপূর্ণ নয়। আপনি যে কোনো ক্রমে প্রোপার্টিগুলিকে ভেরিয়েবলে আনতে পারেন।&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Default Value:
&lt;/h2&gt;

&lt;p&gt;অ্যারে এবং অবজেক্ট ডিস্ট্রাকচারিং: উভয় ক্ষেত্রেই ডিফল্ট মান ব্যবহার করা যায় যদি কোনো উপাদান বা প্রোপার্টি অনুপস্থিত থাকে।&lt;/p&gt;




&lt;h2&gt;
  
  
  4. ব্যবহারের ক্ষেত্র:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Array Destructuring:&lt;/strong&gt; সাধারণত অ্যারের প্রথম কয়েকটি এলিমেন্ট বা নির্দিষ্ট ইনডেক্সের ভ্যালু আনার জন্যে ব্যবহৃত হয়।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Object Destructuring:&lt;/strong&gt; সাধারণত অবজেক্টের একাধিক প্রোপার্টি একসাথে আনার জন্যে ব্যবহৃত হয়।&lt;/p&gt;




&lt;p&gt;এই ছিল অ্যারে এবং অবজেক্ট Destructuring নিয়ে আজকের আলোচনা।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy coding 🎉🎉&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>What is JavaScript??</title>
      <dc:creator>Moriam Akter Swarna</dc:creator>
      <pubDate>Fri, 23 Jan 2026 07:55:49 +0000</pubDate>
      <link>https://dev.to/firebird/what-is-javascript-2j9p</link>
      <guid>https://dev.to/firebird/what-is-javascript-2j9p</guid>
      <description>&lt;h2&gt;
  
  
  JavaScript কি??
&lt;/h2&gt;

&lt;p&gt;JavaScript হচ্ছে একটা &lt;strong&gt;object oriented&lt;/strong&gt;, &lt;strong&gt;high-level&lt;/strong&gt;, &lt;strong&gt;dynamic&lt;/strong&gt; প্রোগ্রামিং ল্যাঙ্গুয়েজ যা ওয়েবসাইটকে interactive করতে ব্যবহার করা হয়। জাভাস্ক্রিপ্ট HTML এবং CSS কে আপডেট বা পরিবর্তন করতে পারে।  জাভাস্ক্রিপ্ট একটি client side scripting language অর্থাৎ এটি ব্যবহারকারীর ব্রাউজারে চলতে থাকে। &lt;br&gt;
JavaScript ওয়েবসাইটের কনটেন্টকে আপডেট করতে পারে, মাল্টিমিডিয়া ডাটা যেমন ভিডিও, ইমেজ, অডিও, অ্যানিমেশন ইত্যাদি কন্ট্রোল করতে পারে। জাভাস্ক্রিপ্ট সার্ভার সাইড এবং ক্লায়েন্ট সাইড উভয় দিকে কাজ করতে পারে। &lt;br&gt;
&lt;strong&gt;1995&lt;/strong&gt; সালে &lt;strong&gt;Brendan Eich&lt;/strong&gt;  প্রথম JavaScript আবিষ্কার করেন।&lt;/p&gt;


&lt;h2&gt;
  
  
  কেন JavaScript ব্যবহার করব??
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;১. Client side Interactivity:&lt;/strong&gt; JavaScript ডেভলপারদেরকে ক্লায়েন্ট সাইডে ইন্টারেক্টিভ এবং ডাইনামিক ইউজার ইন্টারফেস তৈরি করতে দেয়, যার ফলে user experience ভালো হয়। &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;২. Cross browser compatibility:&lt;/strong&gt; জাভাস্ক্রিপ্ট প্রায় সমস্ত প্রধান ব্রাউজার গুলোতে রান করতে পারে। যেহেতু সব ধরনের প্লাটফর্মে জাভাস্ক্রিপ্ট রান করতে পারে তাই এটি web application তৈরীর ক্ষেত্রে প্রধান পছন্দ হয়ে উঠেছে। &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;৩. Asynchronous Programming:&lt;/strong&gt; JavaScript asynchronous task হ্যান্ডেল করতে পারে কোন ধরনের ব্লক করা ছাড়ায় একাধিক কাজ একসঙ্গে করতে পারে। &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;৪.  Versatility:&lt;/strong&gt; জাভাস্ক্রিপ্ট যে শুধুমাত্র ওয়েব ডেভেলপমেন্ট এর ক্ষেত্রে ব্যবহার করা যায় এমন নয়। Node js উদ্ভাবনের পর থেকে জাভা স্ক্রিপ্ট সার্ভার সাইড ডেভেলপমেন্ট এর জন্য ব্যবহার করা যায়।  এছাড়াও mobile development এবং machine learning এর মত কাজেও জাভাস্ক্রিট ব্যবহার করা যায়। &lt;/p&gt;


&lt;h2&gt;
  
  
  জাভাস্ক্রিপ্ট এর Features:
&lt;/h2&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%2F1klansutybv0kb6adynu.jpg" 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%2F1klansutybv0kb6adynu.jpg" alt="Features of Javascript" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client-Side Technology:&lt;/strong&gt;  জাভাস্ক্রিপ্ট যেহেতু ক্লায়েন্টের ব্রাউজারে কাজ করে তাই এটি ডায়নামিক ভাবে কনটেন্ট দেখাতে পারে এবং ওয়েব পেজকে ইন্টারএকটিভ করতে পারে। &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Greater Control:&lt;/strong&gt; জাভাস্ক্রিপ্ট ইউসারের ব্রাউজারের ওপর কন্ট্রোল করতে পারে এবং ওয়েব পেজের এলিমেন্ট গুলোকে manipulate করতে পারে &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Detecting User Browser &amp;amp; OS:&lt;/strong&gt; ইউজার কোন ব্রাউজার ব্যবহার করছে এবং ইউজারের অপারেটিং সিস্টেম টা কি জাভাস্ক্রিপ্ট সেটা ডিটেক্ট করতে পারে এবং সে অনুযায়ী কনটেন্ট ডেলিভারি কাস্টমাইজ করতে পারে।&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performing Simple Calculation:&lt;/strong&gt; JavaScript  বেসিক ক্যালকুলেশন  করতে পারে। অর্থাৎ সার্ভারে কোন রিকোয়েস্ট করা ছাড়াই সিম্পল JavaScript arithmethic  operations গুলো যেমন- addition, subtraction, multiplication, division etc.  করতে পারে। যার ফলে সার্ভারের উপর লোড কমে যায় এবং পারফরম্যান্স ইমপ্রুভ হয়। &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Validating User’s Input:&lt;/strong&gt; ইউজারের ইনপুটগুলো এক্সপেক্টেড ফরমেটে আছে কিনা সেটা চেক করে দেখতে পারে। &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Handling Date &amp;amp; Time:&lt;/strong&gt; জাভাস্ক্রিপ্ট এর মাধ্যমে আমরা ডেট এবং টাইম কে ম্যানেজ করতে পারি, manipulate করতে পারি।&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generating HTML:&lt;/strong&gt; জাভা স্ক্রিপ্ট ডাইনামিক্যালি এইচটিএমএল কন্টেন্টকে জেনারেট করতে পারে যার ফলে আমরা ওয়েব পেজে রিয়েল টাইম আপডেট পেতে পারি। &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Semicolon Insertion:&lt;/strong&gt; যদি ডেভেলপাররা লাইনের শেষে সেমিকোলন ব্যবহার না করে জাভাস্ক্রিপ্ট অটোমেটিক সেমিকোলন insert করতে পারে।&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  জাভাস্ক্রিপ্ট এর সুবিধা সমূহ:
&lt;/h2&gt;

&lt;p&gt;১. জাভাস্ক্রিপ্ট ব্যবহার করে ডায়নামিক এবং রেস্পন্সিভ ইউজার ইন্টারফেস তৈরি করা যায়।&lt;/p&gt;

&lt;p&gt;২. জাভাস্ক্রিপ্ট শেখা অনেক সহজ, বিশেষ করে বিগিনারদের জন্য। জাভাস্ক্রিপ্ট এর সিমট্যাক্স অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ এর মতই। &lt;/p&gt;

&lt;p&gt;৩. জাভাস্ক্রিপ্টের অনেক বড় একটা কমিউনিটি রয়েছে এবং ডেভেলপারদের জন্য অসংখ্য documentation এবং রিসোর্স রয়েছে। অর্থাৎ কেউ যদি কোন সমস্যায় পড়ে অতি সহজেই বিভিন্ন রিসোর্স থেকে সাহায্য পেতে পারবে। &lt;/p&gt;

&lt;p&gt;৪. যেহেতু জাভাস্ক্রিপ্ট দিয়েই ক্লায়েন্ট সাইড এবং সার্ভার সাইড উভয়ের কাজ করা সম্ভব তাই একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ এর মাধ্যমেই ওয়েব অ্যাপ্লিকেশন তৈরি করা সম্ভব। &lt;/p&gt;

&lt;p&gt;৫. জাভাস্ক্রিপ্ট এর প্রচুর ফ্রেমওয়ার্ক ও লাইব্রেরি রয়েছে। যেমন- React, Angular, Vue, jQuery, Node js, Svelte, solid js etc.&lt;/p&gt;


&lt;h2&gt;
  
  
  জাভাস্ক্রিপ্ট এর কিছু অসুবিধা:
&lt;/h2&gt;

&lt;p&gt;১. সিকিউরিটির কারনে জাভাস্ক্রিপ্ট ক্লায়েন্ট মেশিনের ফাইল গুলোকে read বা write করতে পারেনা। &lt;/p&gt;

&lt;p&gt;২. যেহেতু জাভাস্ক্রিপ্ট Single threaded, অর্থাৎ জাভাস্ক্রিপ্ট এক সময়ে একটা কাজ করে।  তাই এটি multi-threading  সাপোর্ট করে না। Multi-threading মানে হচ্ছে একসাথে একাধিক thread এ কাজ করা। &lt;br&gt;
তবে modern JavaScript (বিশেষ করে Node.js) এখন—&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Child processes&lt;/li&gt;
&lt;li&gt;Worker threads&lt;/li&gt;
&lt;li&gt;Asynchronous &amp;amp; event-driven architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এর মাধ্যমে parallel execution হ্যান্ডেল করতে পারে।&lt;/p&gt;

&lt;p&gt;👉 অর্থাৎ JavaScript নিজে multi-threaded না হলেও,&lt;br&gt;
modern Node.js environment multi-threading support করে।&lt;/p&gt;

&lt;p&gt;৩. Browser-based JavaScript সরাসরি low-level network operations যেমন raw TCP/IP sockets ব্যবহার করতে পারে না।&lt;br&gt;
তবে Node.js ব্যবহার করলে socket, TCP, HTTP, WebSocket ইত্যাদি নিয়ে কাজ করা সম্ভব।&lt;/p&gt;


&lt;h2&gt;
  
  
  কিভাবে জাভাস্ক্রিপ্ট ব্যবহার করা যায়??
&lt;/h2&gt;

&lt;p&gt;আপনার প্রজেক্টে জাভাস্ক্রিপ্ট ব্যবহার করার জন্য HTML ডকুমেন্টে &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; ট্যাগ include করতে হবে। আপনার সব জাভাস্ক্রিপ্ট  কোড এই &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; ট্যাগ এর  ভিতরে থাকবে। এছাড়া আপনি চাইলে &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; ট্যাগ এর ভিতরে &lt;code&gt;src attribute&lt;/code&gt; এর মাঝে external JavaScript file link অ্যাড করতে পারবেন। &lt;/p&gt;

&lt;p&gt;*&lt;em&gt;উদাহরণস্বরূপ: *&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//internal JavaScript
&amp;lt;script&amp;gt;
  // Your JavaScript code goes here
&amp;lt;/script&amp;gt;

//adding external javaScript file 
&amp;lt;script src="scripts/main.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; ট্যাগ  মূলত এইচটিএমএল ডকুমেন্টের &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; ট্যাগের একেবারে শেষে ব্যবহার করব যাতে এইচটিএমএল কন্টেন্টগুলো জাভাস্ক্রিপ্ট কোডের আগে লোড হয়। &lt;/p&gt;




&lt;h2&gt;
  
  
  কেন JavaScript Dynamically Typed Language??
&lt;/h2&gt;

&lt;p&gt;জাভাস্ক্রিপ্ট একটা Dynamically Typed ল্যাঙ্গুয়েজ, এর মানে হচ্ছে যে জাভাস্ক্রিপ্টে আমরা একটা ভেরিয়েবলে বিভিন্ন ধরনের data রাখতে পারি। variable ডিক্লেয়ার করার সময় ডেটা টাইপ স্পেসিফাই করে দিতে হবে না, জাভাস্ক্রিপ্ট নিজেই data type ডিটেক্ট করতে পারে। &lt;/p&gt;

&lt;p&gt;*&lt;em&gt;উদাহরণ: *&lt;/em&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%2Fymp7hrqkxspsahlr1vfw.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%2Fymp7hrqkxspsahlr1vfw.png" alt="কেন JavaScript Dynamically Typed Language??" width="707" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;উপরের উদাহরণে, আমরা x নামের একটি ভ্যারিয়েবল ডিক্লেয়ার করেছি এবং  একটি সংখ্যা assign করেছি। পরবর্তীতে আমরা একই ভেরিয়েবলে অন্য ধরনের ডেটা টাইপ যেমন string এবং boolean value assign করেছি এবং এটা জাভাস্ক্রিপ্ট অনুমোদন দেয়।&lt;/p&gt;




&lt;h2&gt;
  
  
  জাভাস্ক্রিপ্ট কি  JIT Compiled এবং Interpreted Language??
&lt;/h2&gt;

&lt;p&gt;*&lt;em&gt;JIT Compiled: *&lt;/em&gt;&lt;br&gt;
জাভাস্ক্রিপ্ট কোড স্থানীয়ভাবে মেমোরি তে লোড হতে পারে এবং স্থানীয়ভাবে এক্সিকিউট হতে পারে কম্পাইল প্রক্রিয়ার মাধ্যমে। জাভাস্ক্রিপ্ট ইঞ্জিনের মধ্যে JIT কম্পাইলার থাকে, যা কোডটি রানটাইমে এক্সিকিউট হবার সাথে সাথে কোডটি কম্পাইল করে।&lt;br&gt;
প্রোগ্রাম রান হওয়ার আগে, কোডটি machine code এ কম্পাইল হতে পারে, যাতে প্রোগ্রামটি দ্রুত চলতে পারে।&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Interpreted Language: *&lt;/em&gt;&lt;br&gt;
জাভাস্ক্রিপ্ট একটি interpreted language. এটি&lt;br&gt;
Interpreters প্রোগ্রামের সাহায্যে প্রতিটা লাইন বাই লাইন কমান্ড read করে এবং execute করে এবং সেজন্য এটা ফ্লেক্সিবল এবং মডিফাই করা সহজ। &lt;/p&gt;




&lt;p&gt;এই ছিল আজকের জাভাস্ক্রিপ্ট এর বেসিক কিছু আলোচনা। পরবর্তীতে অন্য কোনদিন অন্য কোন টপিক নিয়ে হাজির হবো।  হ্যাপি কোডিং🎉🎉&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>K-Means Clustering Step by Step: Beginner-Friendly Bangla Guide</title>
      <dc:creator>Moriam Akter Swarna</dc:creator>
      <pubDate>Mon, 12 Jan 2026 08:42:35 +0000</pubDate>
      <link>https://dev.to/firebird/k-means-clustering-step-by-step-beginner-friendly-bangla-guide-4i8d</link>
      <guid>https://dev.to/firebird/k-means-clustering-step-by-step-beginner-friendly-bangla-guide-4i8d</guid>
      <description>&lt;p&gt;কল্পনা করো, তোমার টেবিলে হাজার হাজার এলোমেলো খেলনা ছড়িয়ে আছে। তুমি চোখ মুদে হাত বুলিয়ে বললে, “এগুলোকে রঙ অনুযায়ী গ্রুপ করে দাও!” — আর হুড়মুড় করে সব লাল একপাশে, নীল আরেকপাশে চলে গেল! এই জাদু করেই K-Means Clustering! নেটফ্লিক্স তোমার পছন্দের মুভি ঠিকনা করে, অ্যামাজন তোমাকে “এটা কিনলে এটাও কিনো” বলে — সবার পেছনে এই অ্যালগরিদমের খেলা।&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;১. Clustering কী জিনিস? (সহজ করে বলি)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Clustering মানে এলোমেলো ডেটাকে তাদের মিলের ভিত্তিতে দলে ভাগ করা।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;মেশিন লার্নিংয়ের ভাষায়:&lt;/strong&gt; এটি Unsupervised Learning-এর একটি পদ্ধতি।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supervised Learning:&lt;/strong&gt; যেখানে টিচার বা লেবেল থাকে (যেমন: ইনপুট = আপেল ছবি, আউটপুট = “আপেল”)।&lt;br&gt;
&lt;strong&gt;Unsupervised Learning:&lt;/strong&gt; এখানে কোনো লেবেল নেই। ডেটাগুলো এলোমেলো ছড়িয়ে থাকে। অ্যালগরিদমকে নিজে থেকেই প্যাটার্ন খুঁজে বের করতে হয়।&lt;/p&gt;
&lt;h2&gt;
  
  
  বাস্তব উদাহরণ :
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;কাস্টমার গ্রুপিং:&lt;/strong&gt; তোমার দোকানে কেউ সোনার গয়না কিনে, কেউ চিপস-বিস্কুট। K-Means বলবে, “এই ১০ জন ‘লাক্সারি ক্রেজি’, ওই ৫০ জন ‘বাজেট হান্টার’!”&lt;br&gt;
&lt;strong&gt;নিউজ সর্টিং:&lt;/strong&gt; হাজার নিউজ হেডলাইন মিশে আছে? এটা স্পোর্টস, ওটা পলিটিক্সে ভাগ করে দেয়।&lt;br&gt;
&lt;strong&gt;ইমেজ ম্যাজিক:&lt;/strong&gt; ডাক্তারের ছবিতে টিউমারটা আলাদা করে বের করে!&lt;br&gt;
Classification-এর সাথে পার্থক্য? Classification-এ আগে থেকে বলা “এটা আপেল বা কমলা”। Clustering-এ বলো না, “দেখি কী কী গ্রুপ বানায়!”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clustering vs Classification:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Classification:&lt;/strong&gt; আগে থেকেই জানি কী কী ক্লাস আছে (যেমন: স্প্যাম বা নট-স্প্যাম)।&lt;br&gt;
&lt;strong&gt;Clustering:&lt;/strong&gt; আমরা জানি না কয়টি গ্রুপ হবে বা তাদের নাম কী।&lt;/p&gt;
&lt;h2&gt;
  
  
  ২. Types of Clustering
&lt;/h2&gt;

&lt;p&gt;Clustering অ্যালগরিদম অনেক ধরনের হয়, তবে প্রধান ৩টি হলো:&lt;/p&gt;

&lt;p&gt;১. K-Means Clustering: এটি কেন্দ্রবিন্দু (Centroid) নির্ভর। সবচেয়ে জনপ্রিয় এবং দ্রুত।&lt;/p&gt;

&lt;p&gt;২. Hierarchical Clustering: এটি গাছের মতো শাখা-প্রশাখা (Dendrogram) তৈরি করে গ্রুপিং করে।&lt;/p&gt;

&lt;p&gt;৩. DBSCAN: এটি ডেটার ঘনত্ব (Density) এর ওপর ভিত্তি করে ক্লাস্টার তৈরি করে (যেকোনো শেইপের জন্য ভালো)।&lt;/p&gt;
&lt;h2&gt;
  
  
  ৩. K-Means কেন রাজা?
&lt;/h2&gt;

&lt;p&gt;Clustering-এর অনেক ধরন, কিন্তু K-Means সবচেয়ে জনপ্রিয় কারণ:&lt;/p&gt;

&lt;p&gt;সহজ, দ্রুত, বিশাল ডেটাতেও চলে।&lt;br&gt;
অন্যরা: Hierarchical (গাছের মতো ধীর), DBSCAN (ঘনত্ব দেখে, শেপ যাই হোক)।&lt;br&gt;
K-Means তোমার ডেটাকে Kটা দলে ভাগ করে, প্রতি দলের মাঝখানে একটা ‘লিডার’ (Centroid) রাখে।&lt;/p&gt;
&lt;h2&gt;
  
  
  ৪. Mathematical Foundation of K-Means
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Dataset Representation&lt;/strong&gt;&lt;br&gt;
ধরো, আমাদের n-টা ডেটা পয়েন্ট আছে:&lt;/p&gt;

&lt;p&gt;X = {x₁, x₂, …, xₙ}&lt;/p&gt;

&lt;p&gt;প্রতিটি xᵢ একটা ভেক্টর। যদি 2D হয় (বয়স, আয়):&lt;/p&gt;

&lt;p&gt;x₁ = (25, 50000), x₂ = (30, 75000), ইত্যাদি।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choosing K&lt;/strong&gt;&lt;br&gt;
আগেই ঠিক করো কয়টা গ্রুপ চাও: K = 3 (ধরি ৩টা ক্লাস্টার)।&lt;/p&gt;

&lt;p&gt;সঠিক K খুঁজতে Elbow Method ব্যবহার করব পরে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Centroid Definition&lt;/strong&gt;&lt;br&gt;
প্রতি ক্লাস্টারের একটা “লিডার” থাকে — Centroid (μ):&lt;/p&gt;

&lt;p&gt;C = {μ₁, μ₂, …, μₖ}&lt;/p&gt;

&lt;p&gt;উদাহরণ: μ₁ = (28, 60000) — প্রথম গ্রুপের “গড় মানুষ”।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Distance Calculation&lt;/strong&gt;&lt;br&gt;
Euclidean Distance (পিথাগোরাস সূত্র):&lt;/p&gt;

&lt;p&gt;d(x, μ) = √[ (x₁ — μ₁)² + (x₂ — μ₂)² + … + (x_d — μ_d)² ]&lt;/p&gt;

&lt;p&gt;কিন্তু K-Means-এ সাধারণত Squared Distance ব্যবহার করে (√ বাদ দেয়):&lt;/p&gt;

&lt;p&gt;||x — μ||² = (x₁ — μ₁)² + (x₂ — μ₂)² + …&lt;/p&gt;

&lt;p&gt;উদাহরণ: x=(3,4), μ=(1,1)&lt;/p&gt;

&lt;p&gt;||x — μ||² = (3–1)² + (4–1)² = 4 + 9 = 13&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cluster Assignment Step&lt;/strong&gt;&lt;br&gt;
প্রতিটি xᵢ কোন গ্রুপে যাবে?&lt;/p&gt;

&lt;p&gt;যে μⱼ এর কাছে সবচেয়ে কম দূরত্ব:&lt;/p&gt;

&lt;p&gt;||xᵢ — μⱼ||² ≤ ||xᵢ — μₖ||² (সব k ≠ j এর জন্য)&lt;/p&gt;

&lt;p&gt;অর্থাৎ: xᵢ যাবে সবচেয়ে কাছের centroid-এর গ্রুপে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Centroid Update Step&lt;/strong&gt;&lt;br&gt;
সবাই গ্রুপে জয়েন করার পর, নতুন লিডার = গ্রুপের গড়:&lt;/p&gt;

&lt;p&gt;μⱼ = (1/|Cⱼ|) × Σ{xᵢ | xᵢ ∈ Cⱼ}&lt;/p&gt;

&lt;p&gt;যেখানে:&lt;/p&gt;

&lt;p&gt;|Cⱼ| = j-তম গ্রুপে মোট সদস্য সংখ্যা&lt;/p&gt;

&lt;p&gt;Σxᵢ = সেই গ্রুপের সব পয়েন্টের যোগফল&lt;/p&gt;

&lt;p&gt;উদাহরণ: গ্রুপে ৩টা পয়েন্ট — (2,3), (4,5), (1,1)&lt;/p&gt;

&lt;p&gt;μ = [(2+4+1)/3, (3+5+1)/3] = (7/3, 9/3) = (2.33, 3)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Objective Function&lt;/strong&gt;&lt;br&gt;
K-Means এর মেইন গোল: WCSS কমানো&lt;/p&gt;

&lt;p&gt;J = Σⱼ₌₁ᴷ Σ₍ₓᵢ∈𝒞ⱼ₎ ||xᵢ — μⱼ||²&lt;/p&gt;

&lt;p&gt;Intuition: প্রতিটি পয়েন্ট তার নিজ গ্রুপের centroid-এর&lt;/p&gt;

&lt;p&gt;যত কাছাকাছি থাকবে, J তত ছোট হবে = ক্লাস্টারিং তত ভালো!&lt;/p&gt;

&lt;p&gt;J কমতে কমতে স্থির হলে → Algorithm Stop!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Algorithm Flow&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;র‍্যান্ডম K-টা centroid বেছে নাও (μ₁, μ₂, …, μₖ)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WHILE (J পরিবর্তন হচ্ছে বা max iteration &amp;lt; 100):&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;a. ASSIGNMENT: প্রতিটি xᵢ → সবচেয়ে কাছের μⱼ&lt;/p&gt;

&lt;p&gt;b. UPDATE: নতুন μⱼ = গ্রুপ Cⱼ-এর গড়&lt;/p&gt;

&lt;p&gt;c. J calculate করো&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;J স্থির হলে STOP → Final clusters + centroids&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Example &amp;amp; Implementation:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Formula:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Press enter or click to view image in full size&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iteration ১: Initial Centroids&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;𝜇1=(1,1) 𝜇2=(2,1)&lt;/p&gt;

&lt;p&gt;**&lt;br&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%2Fvzr93o705mww0ao9mzbi.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%2Fvzr93o705mww0ao9mzbi.png" alt="K-Means clustering visual showing three colored clusters and centroids"&gt;&lt;/a&gt;**&lt;/p&gt;

&lt;p&gt;Clusters: C1: {A}, C2: {B,C,D}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update Centroids:&lt;/strong&gt;&lt;br&gt;
New m1: যেহেতু শুধু A আছে, তাই (1, 1)।&lt;/p&gt;

&lt;p&gt;New m2: B, C, D এর গড়।&lt;/p&gt;

&lt;p&gt;x-avg: (2+4+5)/3 = 3.67&lt;br&gt;
y-avg: (1+3+4)/3 = 2.67&lt;br&gt;
New m2 = (3.67, 2.67)&lt;br&gt;
WCSS: 26.0&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iteration ২: Continue&lt;/strong&gt;&lt;br&gt;
নতুন 𝜇1=(1,1)), 𝜇2=(3.67,2.67)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Distances:&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%2Fzl8xzi5ll9k2hq2t9xuj.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%2Fzl8xzi5ll9k2hq2t9xuj.png" alt="Distributions Step-1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clusters: C1: {A,B}, C2: {C,D}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update Centroids:&lt;/strong&gt;&lt;br&gt;
𝜇1=(1+22,1+12)=(1.5,1)&lt;br&gt;
𝜇2=(4+52,3+42)=(4.5,3.5)&lt;br&gt;
WCSS: 4.78 (আগের থেকে অনেক কম!)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iteration ৩: Convergence&lt;/strong&gt;&lt;br&gt;
নতুন centroids দিয়ে assign করলে clusters একই থাকে। Centroids আর বড় পরিবর্তন নেই, WCSS ~4.5-এ স্থিতিশীল। Stop!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pseudocode&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Initialize μ = random K points from X 
2. While not converged:

a. For each x_i in X:

cluster[i] = argmin_j ||x_i — μ_j||²

b. For j=1 to K:

μ_j = mean({x_i | cluster[i]=j})

c. If centroids unchanged or J &amp;lt; epsilon: break

3. Return clusters, μ

এটা লুপ চালিয়ে WCSS minimize করে।
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;৫. Scratch Implementation&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%2Ffsl2337hegtghg2g0hb1.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%2Ffsl2337hegtghg2g0hb1.png" alt="Distribution step-2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Output: Final centroids: [[1.5 1. ] [4.5 3.5]], Labels: [0 0 1 1], WCSS: ~4.5।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;৬. সঠিক K কীভাবে খুঁজব? Elbow Method! 🏃‍♂️&lt;/strong&gt;&lt;br&gt;
K=1 থেকে 10 চালিয়ে WCSS প্লট করো। গ্রাফটা কনুইয়ের মতো বাঁক নেবে — সেখানেই সেরা K!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;৭. ভালো-খারাপ দিক + কখন ফেল করে?&lt;/strong&gt;&lt;br&gt;
✅ সুপারহিরো পাওয়ার: দ্রুত, সহজ, বিশাল ডেটায় চলে।&lt;/p&gt;

&lt;p&gt;❌ দুর্বলতা:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;আউটলায়ারে টলে যায়,&lt;/li&gt;
&lt;li&gt;শুরুর লিডার ভুল হলে খারাপ রেজাল্ট,&lt;/li&gt;
&lt;li&gt;শুধু গোল-গোল ডেটায় ভালো। (রিং-আকারে ফেল করে!)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Implementation of K-means Clustering
&lt;/h2&gt;

&lt;p&gt;🔹 &lt;strong&gt;সেকশন ১: লাইব্রেরি ইমপোর্ট করা&lt;/strong&gt;&lt;br&gt;
K-Means এর জন্য আমাদের ডেটা হ্যান্ডলিং (Pandas), ম্যাথমেটিক্যাল ক্যালকুলেশন (NumPy), ভিজ্যুয়ালাইজেশন (Matplotlib, Seaborn) এবং মেশিন লার্নিং টুলস (Scikit-learn) প্রয়োজন।&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

from sklearn.cluster import KMeans

from sklearn.preprocessing import StandardScaler

from sklearn.metrics import silhouette_score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;🔹 &lt;strong&gt;সেকশন ২ ও ৩: ডেটাসেট লোড ও এক্সপ্লোর করা&lt;/strong&gt;&lt;br&gt;
এখানে আমরা গ্রাহকদের বার্ষিক আয় এবং খরচ করার স্কোর (Spending Score) ব্যবহার করবো।&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# ডেটা লোড করা

url = “https://raw.githubusercontent.com/mwaskom/seaborn-data/master/mall_customers.csv"

df = pd.read_csv(url)

# ডেটা দেখা

print(df.head())

print(df.shape)

print(df.columns)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;🔹 &lt;strong&gt;সেকশন ৪ ও ৫: ফিচার সিলেকশন ও স্কেলিং&lt;/strong&gt;&lt;br&gt;
K-Means অ্যালগরিদম ইউক্লিডীয় দূরত্বের (Euclidean distance) ওপর ভিত্তি করে কাজ করে। যদি একটি ফিচারের মান অনেক বড় (যেমন: আয়) এবং অন্যটির মান ছোট হয়, তবে বড় মানটি ফলাফলকে প্রভাবিত করবে। তাই StandardScaler দিয়ে সব ফিচারকে একই স্কেলে আনা জরুরি।&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        
          &lt;span class="mr-2"&gt;#&lt;/span&gt;
          

        
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;p&gt;🔹** সেকশন ৬: Elbow Method (সঠিক ‘k’ খুঁজে বের করা)**&lt;br&gt;
আমরা জানি না কয়টি ক্লাস্টার করলে সবচেয়ে ভালো হবে। তাই আমরা ১ থেকে ১০ পর্যন্ত ক্লাস্টার সংখ্যা দিয়ে পরীক্ষা করবো এবং Inertia (ক্লাস্টারের ভেতরের দূরত্বের যোগফল) বের করবো।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;inertia = []``

K_range = range(1, 11)

for k in K_range:

kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)

kmeans.fit(X_scaled)

inertia.append(kmeans.inertia_)

# প্লট করা

plt.figure(figsize=(8, 5))

plt.plot(K_range, inertia, marker=’o’, linestyle=’ — ‘)

plt.xlabel(‘Number of Clusters (k)’)

plt.ylabel(‘Inertia’)

plt.title(‘Elbow Method to find Optimal k’)

plt.show()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔹 &lt;strong&gt;সেকশন ৭ ও ৮: মডেল ট্রেইনিং ও ভিজ্যুয়ালাইজেশন&lt;/strong&gt;&lt;br&gt;
সাধারণত এলবো প্লটে যেখানে গ্রাফটি হঠাৎ বাঁক নেয় (কনুইয়ের মতো), সেটিই সেরা k। ধরুন আমাদের ক্ষেত্রে এটি ৫।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# k=5 ধরে মডেল তৈরি

kmeans = KMeans(n_clusters=5, random_state=42, n_init=10)

clusters = kmeans.fit_predict(X_scaled)

# অরিজিনাল ডেটাফ্রেমে ক্লাস্টার লেবেল যোগ করা

df[‘Cluster’] = clusters

# ভিজ্যুয়ালাইজেশন

plt.figure(figsize=(10, 6))

sns.scatterplot(x=’annual_income’, y=’spending_score’, hue=’Cluster’, data=df, palette=’viridis’, s=100)

plt.title(‘Customer Segments (K-Means)’)

plt.show()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔹 &lt;strong&gt;সেকশন ৯: এভালুয়েশন (Silhouette Score)&lt;/strong&gt;&lt;br&gt;
সিলুয়েট স্কোর বলে দেয় ক্লাস্টারগুলো একে অপরের থেকে কতটা আলাদা। এর মান ১ এর যত কাছে হবে, ক্লাস্টারিং তত ভালো হয়েছে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;score = silhouette_score(X_scaled, clusters)

print(f”Silhouette Score: {score:.2f}”)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  মন্তব্য: সাধারণত ০.৫ এর উপরে স্কোর থাকলে সেটি ভালো ক্লাস্টারিং হিসেবে ধরা হয়।
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🔹 সেকশন ১০: Reflection Questions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;১. কেন স্কেলিং বাধ্যতামূলক?&lt;/p&gt;

&lt;p&gt;K-Means দূরত্বের ওপর নির্ভর করে। স্কেলিং না করলে যে ফিচারের মান বড় (যেমন ১,০০,০০০ টাকা আয়), সেটি ছোট মানের ফিচারের (যেমন ১-১০০ স্কোর) চেয়ে বেশি প্রাধান্য পাবে, যা ভুল ফলাফল দেবে।&lt;/p&gt;

&lt;p&gt;২. k এর মান খুব বেশি হলে কী হবে?&lt;/p&gt;

&lt;p&gt;যদি k খুব বড় হয় (যেমন ডেটা পয়েন্টের সমান), তবে প্রতিটি পয়েন্ট নিজেই একটি ক্লাস্টার হয়ে যাবে। একে Overfitting বলে। এতে ডেটার আসল প্যাটার্ন বোঝা যায় না।&lt;/p&gt;

&lt;p&gt;৩. K-Means কি সব ডেটাসেটের জন্য উপযোগী?&lt;/p&gt;

&lt;p&gt;না। এটি কেবল গোলাকার (spherical) ক্লাস্টার এবং সমান ঘনত্বের ডেটার জন্য ভালো কাজ করে। যদি ডেটা খুব জটিল বা আঁকাবাঁকা (Non-linear) হয়, তবে K-Means ভালো ফলাফল দেয় না।&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>clustering</category>
      <category>kmeansclustering</category>
    </item>
    <item>
      <title>What Is Vibe Coding? A Practical Guide to AI-Assisted Development</title>
      <dc:creator>Moriam Akter Swarna</dc:creator>
      <pubDate>Sun, 28 Dec 2025 07:26:07 +0000</pubDate>
      <link>https://dev.to/firebird/what-is-vibe-coding-a-practical-guide-to-ai-assisted-development-3e9e</link>
      <guid>https://dev.to/firebird/what-is-vibe-coding-a-practical-guide-to-ai-assisted-development-3e9e</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A few months ago, I got stuck on a very small feature.&lt;/p&gt;

&lt;p&gt;Nothing fancy.&lt;br&gt;
Just a form, some validation, and a clean UI.&lt;/p&gt;

&lt;p&gt;I knew exactly &lt;strong&gt;what&lt;/strong&gt; I wanted to build.&lt;br&gt;
But my brain felt tired.&lt;/p&gt;

&lt;p&gt;I kept switching tabs—documentation, Stack Overflow, old projects.&lt;br&gt;
Everything felt slow.&lt;/p&gt;

&lt;p&gt;Then I tried something different.&lt;/p&gt;

&lt;p&gt;Instead of writing code, I wrote &lt;strong&gt;what I wanted&lt;/strong&gt; in simple English.&lt;br&gt;
I pasted it into an AI tool.&lt;/p&gt;

&lt;p&gt;The code came back.&lt;br&gt;
And surprisingly—it worked.&lt;/p&gt;

&lt;p&gt;That moment didn’t make me feel replaced.&lt;br&gt;
It made me feel… relieved.&lt;/p&gt;

&lt;p&gt;That’s where &lt;strong&gt;vibe coding&lt;/strong&gt; started to make sense.&lt;/p&gt;

&lt;p&gt;Not as magic.&lt;br&gt;
Not as cheating.&lt;/p&gt;

&lt;p&gt;But as a new way of thinking about development.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Is Vibe Coding?
&lt;/h2&gt;

&lt;p&gt;Vibe coding is a &lt;strong&gt;workflow&lt;/strong&gt;, not a tool.&lt;/p&gt;

&lt;p&gt;It means you focus on your &lt;em&gt;idea and intent&lt;/em&gt;, and let AI help translate that into code.&lt;/p&gt;

&lt;p&gt;You’re not writing every line by hand.&lt;br&gt;
You’re &lt;strong&gt;guiding&lt;/strong&gt; the code.&lt;/p&gt;

&lt;p&gt;Think of it like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Traditional coding: “I write code, then test.”&lt;br&gt;
Vibe coding: “I explain my idea, then refine the code.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You still control the logic.&lt;br&gt;
AI just helps with execution and speed.&lt;/p&gt;


&lt;h2&gt;
  
  
  A Simple Example
&lt;/h2&gt;

&lt;p&gt;Traditional approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Think about the layout&lt;/li&gt;
&lt;li&gt;Write HTML&lt;/li&gt;
&lt;li&gt;Add CSS&lt;/li&gt;
&lt;li&gt;Fix spacing&lt;/li&gt;
&lt;li&gt;Debug responsiveness&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Vibe coding approach:&lt;/p&gt;

&lt;p&gt;You write:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Create a responsive landing page with a navbar, hero section, and footer using clean HTML and modern CSS.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI gives you a starting point.&lt;/p&gt;

&lt;p&gt;Now you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read the code&lt;/li&gt;
&lt;li&gt;Modify it&lt;/li&gt;
&lt;li&gt;Improve it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’re still coding.&lt;br&gt;
Just faster and with less mental pressure.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Developers Are Adopting Vibe Coding
&lt;/h2&gt;

&lt;p&gt;Most developers don’t struggle with logic.&lt;/p&gt;

&lt;p&gt;They struggle with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Getting started&lt;/li&gt;
&lt;li&gt;Writing the same boilerplate again and again&lt;/li&gt;
&lt;li&gt;Remembering syntax&lt;/li&gt;
&lt;li&gt;Mental fatigue after long sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vibe coding helps maintain &lt;strong&gt;momentum&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you’re in flow, you code manually.&lt;br&gt;
When you’re stuck, AI helps you move forward.&lt;/p&gt;

&lt;p&gt;It’s like having a junior developer who never gets tired.&lt;/p&gt;


&lt;h3&gt;
  
  
  Example: Boilerplate Fatigue
&lt;/h3&gt;

&lt;p&gt;Instead of manually writing this every time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Project&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"style.css"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Create a basic HTML boilerplate for a responsive webpage.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You save time &lt;strong&gt;without skipping understanding&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Real Coding Workflow Example (Todo App)
&lt;/h2&gt;

&lt;p&gt;Let’s say you want to build a simple &lt;strong&gt;Todo App&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of jumping straight into code, you start with intent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Describe the idea
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“I want a simple todo app using HTML, CSS, and JavaScript. Users can add, delete, and mark tasks as completed.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 2: Review the output
&lt;/h3&gt;

&lt;p&gt;AI generates something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"taskInput"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"New task"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"addBtn"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Add&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"taskList"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;taskInput&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;taskList&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;addBtn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;li&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;li&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;li&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;li&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don’t stop there.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Refine
&lt;/h3&gt;

&lt;p&gt;You ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Refactor this using event delegation and add delete support.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now you’re learning while building.&lt;/p&gt;

&lt;p&gt;That’s vibe coding.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Mistakes Beginners Make
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Mistake 1: Trusting AI Blindly
&lt;/h3&gt;

&lt;p&gt;AI can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Miss edge cases&lt;/li&gt;
&lt;li&gt;Use outdated patterns&lt;/li&gt;
&lt;li&gt;Overcomplicate simple logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works—but for beginners, it’s unnecessary.&lt;/p&gt;

&lt;p&gt;Clear is better:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Always ask &lt;strong&gt;why&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Mistake 2: Skipping Fundamentals
&lt;/h3&gt;

&lt;p&gt;AI won’t save you if you don’t understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Semantic HTML&lt;/li&gt;
&lt;li&gt;CSS box model&lt;/li&gt;
&lt;li&gt;JavaScript basics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vibe coding &lt;strong&gt;amplifies skill&lt;/strong&gt;.&lt;br&gt;
It doesn’t replace it.&lt;/p&gt;


&lt;h3&gt;
  
  
  Mistake 3: Writing Vague Prompts
&lt;/h3&gt;

&lt;p&gt;Bad prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Make a website.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Good prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Create a responsive blog layout with a sidebar and main content area using Flexbox.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Clear input produces better output.&lt;/p&gt;


&lt;h2&gt;
  
  
  Myths Around Vibe Coding
&lt;/h2&gt;
&lt;h3&gt;
  
  
  “AI Will Replace Developers”
&lt;/h3&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;AI replaces &lt;strong&gt;tasks&lt;/strong&gt;, not &lt;strong&gt;thinking&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Companies hire people who understand systems—not people who type fast.&lt;/p&gt;


&lt;h3&gt;
  
  
  “Junior Developers Shouldn’t Use AI”
&lt;/h3&gt;

&lt;p&gt;Wrong.&lt;/p&gt;

&lt;p&gt;Junior developers should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use AI&lt;/li&gt;
&lt;li&gt;Learn faster&lt;/li&gt;
&lt;li&gt;Ask better questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key is learning, not copying.&lt;/p&gt;


&lt;h3&gt;
  
  
  “It Kills Creativity”
&lt;/h3&gt;

&lt;p&gt;It actually removes boring parts.&lt;/p&gt;

&lt;p&gt;You spend more time on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UX decisions&lt;/li&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;li&gt;Problem solving&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That &lt;em&gt;is&lt;/em&gt; creativity.&lt;/p&gt;


&lt;h2&gt;
  
  
  Practical Tips for Effective Vibe Coding
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Start With Intent, Not Code
&lt;/h3&gt;

&lt;p&gt;Before opening your editor, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What am I building?&lt;/li&gt;
&lt;li&gt;Who is it for?&lt;/li&gt;
&lt;li&gt;What should it do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then write the prompt.&lt;/p&gt;


&lt;h3&gt;
  
  
  2. Break Problems Into Small Prompts
&lt;/h3&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Build a full-stack app”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Design the database schema”&lt;/li&gt;
&lt;li&gt;“Create REST API endpoints”&lt;/li&gt;
&lt;li&gt;“Build frontend UI”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Smaller prompts give better control.&lt;/p&gt;


&lt;h3&gt;
  
  
  3. Always Refactor AI Code
&lt;/h3&gt;

&lt;p&gt;Ask yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this readable?&lt;/li&gt;
&lt;li&gt;Is this necessary?&lt;/li&gt;
&lt;li&gt;Can I simplify it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI output is a &lt;strong&gt;draft&lt;/strong&gt;, not the final version.&lt;/p&gt;


&lt;h3&gt;
  
  
  4. Use AI as a Code Reviewer
&lt;/h3&gt;

&lt;p&gt;Paste your own code and ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Review this JavaScript code and suggest improvements for readability.”&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;isLoggedIn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;showDashboard&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You learn modern patterns through review.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Keep a Prompt Journal
&lt;/h3&gt;

&lt;p&gt;Save good prompts.&lt;/p&gt;

&lt;p&gt;They become reusable tools.&lt;/p&gt;

&lt;p&gt;Over time, your prompts improve—just like your code.&lt;/p&gt;




&lt;h2&gt;
  
  
  When You Should NOT Use Vibe Coding
&lt;/h2&gt;

&lt;p&gt;Avoid AI when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learning syntax for the first time&lt;/li&gt;
&lt;li&gt;Practicing algorithms&lt;/li&gt;
&lt;li&gt;Preparing for interviews&lt;/li&gt;
&lt;li&gt;Debugging deep logical bugs&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;reverseString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That struggle matters.&lt;/p&gt;

&lt;p&gt;Use AI &lt;strong&gt;after&lt;/strong&gt;, not before.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Vibe Coding Changed My Learning
&lt;/h2&gt;

&lt;p&gt;I don’t feel blocked anymore.&lt;/p&gt;

&lt;p&gt;If I don’t know something:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I ask&lt;/li&gt;
&lt;li&gt;I test&lt;/li&gt;
&lt;li&gt;I adjust&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I build more projects.&lt;br&gt;
I experiment more.&lt;/p&gt;

&lt;p&gt;And most importantly—I &lt;strong&gt;finish&lt;/strong&gt; things.&lt;/p&gt;

&lt;p&gt;Finished projects matter more than perfect code.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Future of Vibe Coding
&lt;/h2&gt;

&lt;p&gt;This isn’t a trend.&lt;/p&gt;

&lt;p&gt;It’s a shift.&lt;/p&gt;

&lt;p&gt;Just like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IDEs replaced text editors&lt;/li&gt;
&lt;li&gt;Git replaced zip files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI-assisted development will become normal.&lt;/p&gt;

&lt;p&gt;The best developers will be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong in fundamentals&lt;/li&gt;
&lt;li&gt;Clear in communication&lt;/li&gt;
&lt;li&gt;Comfortable guiding AI&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  An Honest Conclusion
&lt;/h2&gt;

&lt;p&gt;Vibe coding won’t make you a developer overnight.&lt;/p&gt;

&lt;p&gt;But it will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce fear&lt;/li&gt;
&lt;li&gt;Increase momentum&lt;/li&gt;
&lt;li&gt;Speed up learning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use it wisely.&lt;/p&gt;

&lt;p&gt;Learn deeply.&lt;br&gt;
Build honestly.&lt;br&gt;
Question everything.&lt;/p&gt;

&lt;p&gt;If you treat AI as a partner—not a crutch—you’ll grow faster than ever.&lt;/p&gt;

&lt;p&gt;And that’s what really matters.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Transaction Rollback in MongoDB: What Actually Happens When Things Go Wrong</title>
      <dc:creator>Moriam Akter Swarna</dc:creator>
      <pubDate>Wed, 17 Dec 2025 10:45:44 +0000</pubDate>
      <link>https://dev.to/firebird/transaction-rollback-in-mongodb-what-actually-happens-when-things-go-wrong-24g</link>
      <guid>https://dev.to/firebird/transaction-rollback-in-mongodb-what-actually-happens-when-things-go-wrong-24g</guid>
      <description>&lt;p&gt;The first time I tried to “rollback” data in MongoDB, I thought it would work like SQL.&lt;br&gt;
Something fails → database magically goes back to the previous state. Simple, right?&lt;/p&gt;

&lt;p&gt;Wrong.&lt;/p&gt;

&lt;p&gt;I had already updated two collections.&lt;br&gt;
The third operation failed.&lt;br&gt;
Now my data was half-updated and half-broken.&lt;/p&gt;

&lt;p&gt;That was the day I learned how MongoDB &lt;em&gt;really&lt;/em&gt; handles transactions and rollbacks.&lt;/p&gt;

&lt;p&gt;If you’re coming from MySQL or PostgreSQL, MongoDB transactions can feel confusing at first.&lt;br&gt;
This post is for that exact confusion.&lt;/p&gt;


&lt;h3&gt;
  
  
  What rollback means in MongoDB (in plain words)
&lt;/h3&gt;

&lt;p&gt;In simple terms, &lt;strong&gt;rollback means undoing changes if something fails&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In MongoDB, rollback only works &lt;strong&gt;inside a transaction&lt;/strong&gt;.&lt;br&gt;
Outside a transaction, MongoDB will &lt;strong&gt;not&lt;/strong&gt; undo anything automatically.&lt;/p&gt;

&lt;p&gt;So this is important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;MongoDB does NOT support rollback for normal single operations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Rollback happens only when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You start a transaction&lt;/li&gt;
&lt;li&gt;Something fails&lt;/li&gt;
&lt;li&gt;You abort the transaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you don’t use transactions, rollback is your responsibility.&lt;/p&gt;


&lt;h3&gt;
  
  
  When do you actually need transactions?
&lt;/h3&gt;

&lt;p&gt;MongoDB is document-based.&lt;br&gt;
Many times, one document update is enough.&lt;/p&gt;

&lt;p&gt;But transactions matter when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You update &lt;strong&gt;multiple documents&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Or update &lt;strong&gt;multiple collections&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;And all changes must succeed together&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real-life example:&lt;/p&gt;

&lt;p&gt;You are building a payment system.&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deduct money from user wallet&lt;/li&gt;
&lt;li&gt;Create an order&lt;/li&gt;
&lt;li&gt;Update product stock&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If step 2 fails, step 1 must be undone.&lt;br&gt;
That’s where transaction rollback comes in.&lt;/p&gt;


&lt;h3&gt;
  
  
  Important requirement most beginners miss
&lt;/h3&gt;

&lt;p&gt;Before jumping into code, one hard truth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;MongoDB transactions only work on replica sets or sharded clusters&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They &lt;strong&gt;do NOT work on standalone MongoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Even on localhost, you must run MongoDB as a replica set.&lt;/p&gt;

&lt;p&gt;Many “transaction not working” issues come from this mistake.&lt;/p&gt;


&lt;h3&gt;
  
  
  Basic transaction flow in MongoDB
&lt;/h3&gt;

&lt;p&gt;The transaction flow is always the same:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start a session&lt;/li&gt;
&lt;li&gt;Start a transaction&lt;/li&gt;
&lt;li&gt;Do database operations&lt;/li&gt;
&lt;li&gt;Commit if everything is OK&lt;/li&gt;
&lt;li&gt;Abort if something fails (rollback)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Think of it like writing on a whiteboard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commit = make it permanent&lt;/li&gt;
&lt;li&gt;Abort = erase everything you wrote&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  Simple rollback example (Node.js)
&lt;/h3&gt;

&lt;p&gt;Let’s use a simple example.&lt;/p&gt;

&lt;p&gt;We will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deduct balance from a user&lt;/li&gt;
&lt;li&gt;Create an order&lt;/li&gt;
&lt;li&gt;Rollback if anything fails
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startSession&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startTransaction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;updateOne&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;$inc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;balance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;commitTransaction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endSession&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Transaction successful&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abortTransaction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endSession&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Transaction rolled back&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If &lt;strong&gt;any line inside try fails&lt;/strong&gt;, MongoDB rolls back everything.&lt;/p&gt;

&lt;p&gt;Balance deduction? Undone.&lt;br&gt;
Order creation? Gone.&lt;/p&gt;

&lt;p&gt;That’s rollback.&lt;/p&gt;


&lt;h3&gt;
  
  
  What actually happens during rollback?
&lt;/h3&gt;

&lt;p&gt;MongoDB does not “reverse” each query.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It keeps all changes isolated inside the transaction&lt;/li&gt;
&lt;li&gt;Nothing is written permanently until &lt;code&gt;commitTransaction()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;abortTransaction()&lt;/code&gt; simply throws everything away&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So rollback is fast and safe.&lt;/p&gt;

&lt;p&gt;This also means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Other users cannot see half-done data&lt;/li&gt;
&lt;li&gt;Either everything happens or nothing happens&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  Single document updates don’t need rollback
&lt;/h3&gt;

&lt;p&gt;This is a common misunderstanding.&lt;/p&gt;

&lt;p&gt;MongoDB guarantees &lt;strong&gt;atomicity at document level&lt;/strong&gt;.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;updateOne&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;$inc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;balance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This update is already atomic.&lt;br&gt;
It will either fully succeed or fully fail.&lt;/p&gt;

&lt;p&gt;No transaction needed.&lt;br&gt;
No rollback needed.&lt;/p&gt;

&lt;p&gt;Use transactions &lt;strong&gt;only when multiple operations are involved&lt;/strong&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  Common mistakes and myths
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Myth 1: MongoDB auto-rollbacks failed queries
&lt;/h4&gt;

&lt;p&gt;False.&lt;/p&gt;

&lt;p&gt;If you run multiple updates without a transaction, MongoDB will not rollback anything.&lt;/p&gt;


&lt;h4&gt;
  
  
  Myth 2: Transactions make MongoDB slow always
&lt;/h4&gt;

&lt;p&gt;Not true.&lt;/p&gt;

&lt;p&gt;They add overhead, yes.&lt;br&gt;
But used correctly, they are fine for critical operations.&lt;/p&gt;

&lt;p&gt;Just don’t wrap every query in a transaction.&lt;/p&gt;


&lt;h4&gt;
  
  
  Mistake 1: Forgetting to pass &lt;code&gt;session&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This is very common.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;updateOne&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;_id&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;// ❌ no session&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That query is &lt;strong&gt;outside&lt;/strong&gt; the transaction.&lt;/p&gt;

&lt;p&gt;Rollback will NOT affect it.&lt;/p&gt;

&lt;p&gt;Every query inside a transaction must include &lt;code&gt;{ session }&lt;/code&gt;.&lt;/p&gt;




&lt;h4&gt;
  
  
  Mistake 2: Using transactions on standalone MongoDB
&lt;/h4&gt;

&lt;p&gt;If your MongoDB is not a replica set, rollback simply won’t work.&lt;/p&gt;

&lt;p&gt;Always check your setup first.&lt;/p&gt;




&lt;h3&gt;
  
  
  Rollback vs manual compensation
&lt;/h3&gt;

&lt;p&gt;Sometimes transactions are not possible.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;You are calling a payment API&lt;/li&gt;
&lt;li&gt;You update MongoDB after payment success&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You cannot rollback an external API call.&lt;/p&gt;

&lt;p&gt;In those cases, you use &lt;strong&gt;manual compensation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Example logic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If order creation fails&lt;/li&gt;
&lt;li&gt;Call refund API&lt;/li&gt;
&lt;li&gt;Update database again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Transactions are great, but they don’t solve everything.&lt;/p&gt;




&lt;h3&gt;
  
  
  Practical tips from real projects
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Tip 1: Keep transactions short&lt;/strong&gt;&lt;br&gt;
Don’t do heavy logic inside a transaction.&lt;br&gt;
Read, write, commit, exit.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tip 2: Handle retries&lt;/strong&gt;&lt;br&gt;
MongoDB may throw transient errors.&lt;br&gt;
Retry the whole transaction if needed.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tip 3: Log aborted transactions&lt;/strong&gt;&lt;br&gt;
Rollback is not a failure.&lt;br&gt;
But repeated rollbacks indicate a design issue.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tip 4: Don’t fear rollback&lt;/strong&gt;&lt;br&gt;
Rollback is a safety net.&lt;br&gt;
Design assuming things will fail.&lt;/p&gt;




&lt;h3&gt;
  
  
  A mental model that helps
&lt;/h3&gt;

&lt;p&gt;Think of a MongoDB transaction like a Git branch.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You make changes&lt;/li&gt;
&lt;li&gt;Nothing affects main branch&lt;/li&gt;
&lt;li&gt;Commit merges changes&lt;/li&gt;
&lt;li&gt;Abort deletes the branch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once I started thinking this way, transactions became simple.&lt;/p&gt;




&lt;h3&gt;
  
  
  When NOT to use transactions
&lt;/h3&gt;

&lt;p&gt;Avoid transactions when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You update only one document&lt;/li&gt;
&lt;li&gt;You can tolerate small inconsistencies&lt;/li&gt;
&lt;li&gt;Performance is extremely critical&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MongoDB is flexible.&lt;br&gt;
Not every problem needs rollback.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final honest advice
&lt;/h3&gt;

&lt;p&gt;MongoDB transactions are powerful, but they are not magic.&lt;/p&gt;

&lt;p&gt;Rollback works only when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You explicitly use transactions&lt;/li&gt;
&lt;li&gt;Your setup supports it&lt;/li&gt;
&lt;li&gt;You pass the session correctly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are a beginner:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First understand document-level atomicity&lt;/li&gt;
&lt;li&gt;Then move to transactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use rollback as a tool, not a habit.&lt;/p&gt;

&lt;p&gt;Once you respect its limits, MongoDB becomes a very reliable database.&lt;/p&gt;

&lt;p&gt;And yes, I still forget to pass &lt;code&gt;{ session }&lt;/code&gt; sometimes.&lt;br&gt;
It happens to all of us.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>database</category>
      <category>mongodb</category>
      <category>mongoose</category>
    </item>
  </channel>
</rss>
