<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های متین ابراهیمی</title>
        <link>https://virgool.io/feed/@matinebrahimi</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 08:08:26</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/47038/avatar/FhBv1U.jpg?height=120&amp;width=120</url>
            <title>متین ابراهیمی</title>
            <link>https://virgool.io/@matinebrahimi</link>
        </image>

                    <item>
                <title>چه اشتباهاتی باعث می‌شوند که ایندکس‌ها در MySQL کار نکنند؟</title>
                <link>https://virgool.io/@matinebrahimi/%DA%86%D9%87-%D8%A7%D8%B4%D8%AA%D8%A8%D8%A7%D9%87%D8%A7%D8%AA%DB%8C-%D8%A8%D8%A7%D8%B9%D8%AB-%D9%85%DB%8C-%D8%B4%D9%88%D9%86%D8%AF-%DA%A9%D9%87-%D8%A7%DB%8C%D9%86%D8%AF%DA%A9%D8%B3-%D9%87%D8%A7-%D8%AF%D8%B1-mysql-%DA%A9%D8%A7%D8%B1-%D9%86%DA%A9%D9%86%D9%86%D8%AF-gntlmukizwc5</link>
                <description>اگر این نکات را ندانید، احتمالاً ایندکس‌هایی که تعریف کرده‌اید به درستی عمل نمی‌کنند!اینا مواردی هستند که مطمئنم خیلی از توسعه دهنده ها این موارد رو رعایت نمی‌کنند. در این پست به چند اشتباه رایج در نگارش کوئری‌ها می‌پردازم که باعث نادیده گرفته شدن ایندکس‌ها (Index Obfuscation) می‌شوند و راهکارهایی برای رفع آنها ارائه می‌دهم.❌ ۱. استفاده نادرست از Wildcardها در LIKE🔍 مشکل: وقتی از عملگر LIKE همراه با علامت % در ابتدای رشته استفاده کنید، ایندکس‌های MySQL کار نمی‌کنند. به مثال زیر توجه کنید:SELECT * FROM people WHERE email LIKE &#039;%matin@example.com%&#039;;ایندکس روی ستون email نادیده گرفته می‌شود، زیرا % در ابتدای رشته مانع از استفاده از جستجوی مبتنی بر ایندکس (Index Seek) شده و MySQL مجبور میشود کل جدول را اسکن کند (Full Table Scan).✅ راه حل: ۱️⃣ اگر امکانپذیر است، از % فقط در انتهای مقدار جستجو استفاده کنید: ; این کار به MySQL اجازه می‌دهد از ایندکس استفاده کند.SELECT * FROM people WHERE email LIKE  &#039;matin%&#039;۲️⃣ در برخی موارد، می‌توانید از ستون های تولیدشده (Generated Columns) برای بهینه‌سازی جستجو استفاده کنید. به عنوان مثال، اگر بخواهید کاربران را بر اساس دامنه ایمیل فیلتر کنید:ALTER TABLE people ADD COLUMN email_domain VARCHAR(255) AS (SUBSTRING_INDEX(email, &#039;@&#039;, -1)); 

ALTER TABLE people ADD INDEX (email_domain); 

SELECT * FROM people WHERE email_domain = &#039;example.com&#039;;🔹 در این روش، MySQL می‌تواند از ایندکس روی email_domain استفاده کند و جستجو سریعتر انجام شود.❌ ۲. اشتباه در استفاده از ایندکس‌های ترکیبی (Composite Indexes)ایندکس‌های ترکیبی (Multi-column یا Composite Indexes) یکی از ابزارهای قدرتمند در بهینه‌سازی کوئری‌ها هستند، اما اگر به درستی طراحی نشوند، ممکن است عملکردشان آن‌طور که انتظار دارید نباشد!❌ ۱. ترتیب ستون‌ها در ایندکس مهم است!🔹 MySQL ایندکس‌های ترکیبی را از چپ به راست بررسی می‌کند. اگر اولین ستون ایندکس در شرط WHERE نباشد، MySQL نمی‌تواند از ایندکس بهینه استفاده کند.📌 مثال: فرض کنید ایندکس ترکیبی زیر را داریم:ALTER TABLE people ADD INDEX multi (first_name, last_name, birthday);ایندکس بالا ستون‌ها را به این ترتیب در خود نگه می‌دارد: first_name -&gt; last_name -&gt; birthday🔹 حالا این دو کوئری را بررسی کنیم:✅ کوئری زیر از ایندکس استفاده می‌کند، چون شامل اولین ستون ایندکس (first_name) است:EXPLAIN SELECT * FROM people WHERE first_name = &#039;Matin&#039;;❌ اما این کوئری ایندکس را نادیده می‌گیرد، چون first_name در شرط وجود ندارد:EXPLAIN SELECT * FROM people WHERE last_name = &#039;Ebrahimi&#039; AND birthday = &#039;1999-02-21&#039;;📌 نکته: اگر فقط قسمت اول ایندکس در شرط باشد، ایندکس کار می‌کند. اما اگر قسمت‌های میانی یا انتهایی بدون قسمت اول استفاده شوند، ایندکس نادیده گرفته می‌شود!✅ راه‌حل: همیشه ترتیب ستون‌ها را بر اساس نحوه استفاده در شرط‌های WHERE انتخاب کنید.❌ ۲. توقف در اولین شرط رنج (&lt;, &gt;, BETWEEN)🔹 اگر در یک ایندکس ترکیبی، یک شرط رنج (&lt;, &gt;, BETWEEN) روی یک ستون اعمال شود، MySQL فقط تا همان ستون از ایندکس استفاده می‌کند و ستون‌های بعدی ایندکس نادیده گرفته می‌شوند.📌 مثال:EXPLAIN SELECT * FROM peopleWHERE first_name = &#039;Matin&#039; AND last_name &lt; &#039;Ebrahimi&#039; AND birthday = &#039;1999-02-21&#039;;در این کوئری:✅ MySQL از first_name استفاده می‌کند.✅ MySQL از last_name هم استفاده می‌کند، ولی به دلیل شرط رنج (&lt;)، پردازش ایندکس متوقف می‌شود.❌ birthday نادیده گرفته می‌شود!✅ راه‌حل: اگر مرتباً از شرط‌های &gt; و &lt; استفاده می‌کنید، ممکن است نیاز باشد ایندکس‌های جداگانه‌ای برای برخی ستون‌ها تعریف کنید تا عملکرد بهتری داشته باشید.🔥 چگونه ایندکس ترکیبی را بهینه طراحی کنیم؟1️⃣ اولویت با ستون‌هایی است که بیشتر در WHERE با = استفاده می‌شوند.2️⃣ از شرایط رنج (&lt;, &gt;, BETWEEN) در انتهای ترتیب ایندکس استفاده کنید.3️⃣ اگر کوئری‌های شما نیاز دارند که روی ستون‌های میانی ایندکس جستجو انجام شود، ممکن است نیاز به ایندکس‌های جداگانه‌ای برای آن‌ها داشته باشید.4️⃣ از EXPLAIN برای بررسی عملکرد کوئری‌ها و استفاده از ایندکس کمک بگیرید.۳. استفاده از توابع یا اعمال تغییرات روی ستون‌هایی است که ایندکس دارند❌ مشکل: تغییر مقدار ستون در شرط WHERE🔹 اگر در قسمت WHERE یک عملیات ریاضی، متنی یا تابعی روی یک ستون ایندکس‌شده انجام دهید، MySQL دیگر نمی‌تواند از ایندکس استفاده کند.📌 مثال:SELECT * FROM film WHERE length / 60 &lt; 2;در اینجا: ❌ ستون length دارای ایندکس است، اما به دلیل تقسیم (/ 60)، ایندکس نادیده گرفته می‌شود. ❌ MySQL مجبور می‌شود همه سطرها را بررسی کند (Full Table Scan).✅ راه‌حل: عملیات را به مقدار ثابت منتقل کنید تا ستون دست‌نخورده باقی بماند:SELECT * FROM film WHERE length &lt; 2 * 60;🔹 در این روش، مقدار length بدون تغییر باقی می‌ماند، و MySQL می‌تواند از ایندکس استفاده کند.📌 خطاهای مشابه در استفاده از توابع و نحوه رفع آن‌ها🛑 استفاده از توابع متنی روی ستون ایندکس‌شده❌ این کوئری ایندکس را نادیده می‌گیرد:SELECT * FROM users WHERE LOWER(username) = &#039;john_doe&#039;;✅ راه‌حل: مقدار ورودی را تبدیل کنید، نه مقدار ستون:SELECT * FROM users WHERE username = BINARY &#039;john_doe&#039;;یا اگر case-insensitive search نیاز دارید، از COLLATE utf8mb4_general_ci استفاده کنید.🛑 استفاده از DATE() روی ستون‌های تاریخ❌ این کوئری باعث می‌شود که MySQL نتواند از ایندکس استفاده کند:SELECT * FROM orders WHERE DATE(order_date) = &#039;2024-02-15&#039;;✅ راه‌حل: بازه‌ی تاریخ را در شرط قرار دهید:SELECT * FROM ordersWHERE order_date &gt;= &#039;2024-02-15 00:00:00&#039;AND order_date &lt; &#039;2024-02-16 00:00:00&#039;;🔥 چگونه از این اشتباهات جلوگیری کنیم؟✅ همیشه مقدار ستون ایندکس‌شده را تغییر ندهید، بلکه مقدار مقایسه‌ای را تنظیم کنید. ✅ اگر نیاز به پردازش روی مقادیر دارید، از Generated Columns استفاده کنید. ✅ با استفاده از EXPLAIN بررسی کنید که آیا MySQL از ایندکس استفاده می‌کند یا نه.</description>
                <category>متین ابراهیمی</category>
                <author>متین ابراهیمی</author>
                <pubDate>Sun, 16 Feb 2025 16:52:33 +0330</pubDate>
            </item>
                    <item>
                <title>ایندکس در پشت صحنه چطور باعث سریع تر شدن کوئری میشه؟</title>
                <link>https://virgool.io/@matinebrahimi/%D8%A7%DB%8C%D9%86%D8%AF%DA%A9%D8%B3-%D8%AF%D8%B1-%D9%BE%D8%B4%D8%AA-%D8%B5%D8%AD%D9%86%D9%87-%DA%86%D8%B7%D9%88%D8%B1-%D8%A8%D8%A7%D8%B9%D8%AB-%D8%B3%D8%B1%DB%8C%D8%B9-%D8%AA%D8%B1-%D8%B4%D8%AF%D9%86-%DA%A9%D9%88%D8%A6%D8%B1%DB%8C-%D9%85%DB%8C%D8%B4%D9%87-kh7nqrmgww1t</link>
                <description>معنی اینکه هر ایندکس یک ساختار داده جدا تشکیل میده چیه؟در این پست، به بررسی موارد زیر می پردازم:✅ چگونگی عملکرد ایندکسها✅ ساختار داده‌های آنها (درخت B+)✅ نحوه به‌روزرسانی هنگام درج، حذف یا تغییر داده🏗️ ایندکس چیست و چگونه ساخته میشود؟وقتی یک ستون را ایندکس میکنید، MySQL یک ساختار داده جداگانه (معمولاً یک درخت B+) ایجاد میکند که شامل مقدارهای آن ستون و آدرس (Pointer) ردیفهای متناظر در جدول اصلی است.مزیت اصلی ایندکس این است که به‌جای جستجوی خطی در کل جدول، MySQL میتواند داده‌های موردنظر را بسرعت از طریق این ساختار پیدا کند.🎯 مثالجدولی با اطلاعات کاربران را در نظر بگیرید:با اجرای دستور زیر، یک ایندکس روی ستون name ایجاد میکنیم:CREATE INDEX idx_name ON users(name);در این حالت، MySQL یک درخت B+ برای مقادیر ستون name ساخته و از آن برای جستجوی سریع استفاده میکند.🔍 ساختار درخت B+ و نحوه جستجو در آندرخت B+ یک ساختار داده متوازن است که سه نوع گره دارد:گره ریشه (Root Node): نقطه شروع جستجوگره‌های میانی (Internal Nodes): مسیر مناسب را مشخص میکنندگره‌های برگ (Leaf Nodes): شامل مقادیر ایندکس شده و اشاره‌گر به ردیف‌های اصلی🎯 مثال تصویریفرض کنید ایندکس ما به این صورت ذخیره شده باشد:اگر بخواهیم مقدار &quot;ژاکان&quot; را جستجو کنیم:1️⃣ از گره ریشه [روژان, هیوا] شروع میکنیم.2️⃣ چون &quot;ژاکان&quot; از &quot;روژان&quot; بزرگتر ولی از &quot;هیوا&quot; کوچکتر است، به گره میانی مربوطه میرویم.3️⃣ مقدار &quot;ژاکان&quot; را در گره برگ پیدا کرده و به ردیف اصلی جدول (ردیف با id=3) مراجعه میکنیم.مزیت این روش: ✅ بجای جستجوی خطی در تمام ردیف‌ها، فقط چند مقایسه انجام میشود. ✅ پیچیدگی جستجو O(log N) است که بسیار سریعتر از O(N) در جستجوی خطی است.🔄 به‌روزرسانی ایندکس‌ها هنگام تغییر داده1️⃣ درج داده جدیدهنگامی که یک مقدار جدید به جدول اضافه شود، مقدار مربوط به ستون ایندکس شده نیز در درخت B+ درج میشود.مثال:INSERT INTO users (id, name, email, age)

VALUES (6, &#039;متین&#039;, &#039;matin@example.com&#039;, 29);🔹 مقدار &quot;متین&quot; در محل مناسب درج میشود. 🔹 اگر یک گره پر شود، عملیات تقسیم (Split) انجام می‌شود تا درخت متعادل بماند.2️⃣ حذف دادهمثلاً اگر داده زیر را حذف کنیم:DELETE FROM users WHERE name = &#039;روژان&#039;;🔸 مقدار &quot;روژان&quot; از درخت B+ حذف می‌شود. 🔸 درخت به‌صورت خودکار مجدداً سازماندهی شده تا تعادل خود را حفظ کند.3️⃣ به‌روزرسانی دادهاگر مقدار یک ستون ایندکس شده تغییر کند، فرایند به‌روزرسانی معمولاً به‌صورت حذف + درج مجدد انجام میشود.مثلاً تغییر &quot;هیوا&quot; به &quot;هستی&quot;:UPDATE users SET name = &#039;هستی&#039; WHERE id = 4;✅ ابتدا مقدار &quot;هیوا&quot; از ایندکس حذف میشود.✅ سپس مقدار جدید &quot;هستی&quot; در مکان مناسب درج میشود.🔹 نتیجه: این فرآیند ممکن است کمی سربار ایجاد کند، به همین دلیل باید ایندکس‌ها را هوشمندانه انتخاب کنیم.⚡ چرا استفاده از ایندکس مهم است؟🔻 بدون ایندکس: MySQL مجبور است تمام رکوردها را بررسی کند (Full Table Scan) که برای جداول بزرگ، بسیار کند است.✅ با ایندکس: MySQL از درخت B+ برای پیدا کردن مقدار استفاده می‌کند، که زمان جستجو را از O(N) به O(log N) کاهش میدهد.🔸 مزایا: ✔ افزایش سرعت جستجوها ✔ کاهش تعداد مقایسه‌ها🔹 معایب: ❌ ایندکسها در هنگام درج/حذف/بهروزرسانی، سربار دارند. ❌ استفاده بیش از حد از ایندکس‌ها میتواند کارایی عملیات نوشتن را کاهش دهد.📌 نتیجه‌گیری ✔ ایندکسها ساختار دادهای جداگانه (مثل درخت B+) هستند که مقادیر یک ستون و آدرس ردیفهای متناظر را ذخیره میکنند. ✔ استفاده از ایندکس باعث بهبود سرعت جستجو میشود، اما هزینه‌هایی برای عملیات درج، حذف و به‌روزرسانی دارد. ✔ باید از ایندکسها بهینه و هوشمندانه استفاده کنیم تا تأثیر مثبتی بر عملکرد پایگاه داده داشته باشند.💬 نظر شما چیست؟ اگر شما هم از چالشهای خودتون در این زمینه بنویسید برای همه ارزشمند است.منبع اصلی این پست ها دوره های Aaron Francis است.با تشکر از ارون عزیز!</description>
                <category>متین ابراهیمی</category>
                <author>متین ابراهیمی</author>
                <pubDate>Wed, 12 Feb 2025 14:29:27 +0330</pubDate>
            </item>
                    <item>
                <title>آیا ایندکس‌هایی که تعریف کردی، واقعاً کار می‌کنند؟!</title>
                <link>https://virgool.io/@matinebrahimi/%D8%A2%DB%8C%D8%A7-%D8%A7%DB%8C%D9%86%D8%AF%DA%A9%D8%B3-%D9%87%D8%A7%DB%8C%DB%8C-%DA%A9%D9%87-%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-%DA%A9%D8%B1%D8%AF%DB%8C-%D9%88%D8%A7%D9%82%D8%B9%D8%A7%D9%8B-%DA%A9%D8%A7%D8%B1-%D9%85%DB%8C-%DA%A9%D9%86%D9%86%D8%AF-ppmfgfh1khrs</link>
                <description>مطمئنی کوئریت درست و بهینه اجرا می‌شه؟ درسته که فریم‌ورک در نهایت کوئری رو برات می‌نویسه، اما تو هنوز در قبال کوئریت مسئولی! هر توسعه‌دهنده‌ای باید این سؤال و سؤالات مشابه رو از خودش بپرسه. به نظر من، یکی از بهترین راه‌های یادگیری عمیق در هر مبحث، طرح سؤالات چالش‌برانگیز و دقیق درباره اون موضوعه. این روش کمک می‌کنه نقاط ضعف رو شناسایی کنیم و دنبال پاسخ‌های علمی، دقیق و کاربردی برای سؤالاتمون باشیم تا سطح دانش فنی خودمون رو ارتقا بدیم.در این مدت که داشتم خودم رو برای مصاحبه‌های فنی آماده می‌کردم و دانش فنی‌ام رو Level Up می‌کردم، از هوش مصنوعی برای طراحی سؤالات دقیق در حوزه‌های مختلف مهندسی نرم‌افزار کمک گرفتم. این کار باعث شد درک عمیق‌تری از مفاهیم پیدا کنم، نقاط قوت و ضعفم رو بهتر بشناسم، و دقیق‌تر روی یادگیری مباحثی که باید بدونم تمرکز کنم.در این پست و پست‌های آینده، سؤالاتی که طراحی کردم، نکاتی که یاد گرفتم، دوره‌هایی که گذروندم، و تجربیاتی که کسب کردم رو به اشتراک می‌ذارم؛ شاید برای دیگران هم مفید باشه و مسیرشون رو روشن‌تر کنه.چرا بهینه‌سازی کوئری‌ها مهمه؟مدیریت دیتابیس، بهینه‌سازی کوئری‌ها و هر چیزی که به دیتابیس مربوط باشه، یکی از چالش‌برانگیزترین حوزه‌های مهندسی نرم‌افزار محسوب می‌شه. اگر در این بخش دانش کافی نداشته باشیم، دیتابیس می‌تونه به Bottleneck اصلی سیستم تبدیل بشه و عملکرد کلی رو مختل کنه. برای همین، قراره با مباحث دیتابیس و تکنیک‌های بهینه‌سازی کوئری‌ها شروع کنم (چون بهش علاقه دارم) و در آینده (اگر بتونم!) به **مباحث پیشرفته‌تری مثل Database Scaling هم بپردازم.🔥 سؤالات چالش‌برانگیز برای بهینه‌سازی دیتابیس📌 ایندکس‌ها و بهینه‌سازی کوئری‌هاآیا مطمئنی ایندکس‌هایی که تعریف کردی، اجرای کوئری‌ها رو بهینه می‌کنند؟آیا عملکردشون رو با ابزارهایی مثل EXPLAIN بررسی کردی؟چطور می‌تونی اطمینان حاصل کنی که ایندکس‌ انتخاب‌شده در عمل هم درست کار می‌کنه؟Index Obfuscation چیه و چرا اتفاق می‌افته؟چطور می‌شه Pagination رو روی دیتاست‌های بزرگ چند برابر سریع‌تر کرد؟برای افزایش کارایی کوئری‌ها، چه تکنیک‌هایی برای بهینه‌سازی ایندکس‌ها وجود داره؟ترتیب ستون‌ها در ایندکس‌های ترکیبی (Composite Index) چقدر مهمه؟ساختار داخلی ایندکس‌ها چطوری کار می‌کنه و چرا استفاده از B+Tree باعث سرعت بیشتر در اجرای کوئری‌ها می‌شه؟چه عواملی باعث می‌شه که ایندکس در Wildcard کار نکنه؟محدودیت‌های ایندکس شدن برای BLOB، TEXT، JSON و STRING چیه؟📌 تحلیل اجرای کوئری‌هاExecution Plan چیه؟EXPLAIN ANALYZE چه اطلاعاتی از عملکرد کوئری به ما می‌ده؟Composite Primary Key چیه و چه زمانی می‌تونه به عملکرد بهتر کمک کنه؟دستور DESCRIBE چه اطلاعاتی در مورد ساختار جدول به ما می‌ده؟در چه شرایطی VISIBLE و INVISIBLE کردن ایندکس‌ها مفید خواهد بود؟📌 بهینه‌سازی JOIN و ترتیب داده‌هاترتیب ایندکس‌ها چطور روی عملکرد JOIN تأثیر می‌ذاره؟استفاده از Prefix String در ایندکس‌ها چه مزایایی داره؟در چه شرایطی Subquery، Semi Join یا Anti Join عملکرد بهتری از JOINهای معمولی دارن؟CTE (Common Table Expressions) چیه و چطور به ساده‌سازی کوئری‌های پیچیده کمک می‌کنه؟تفاوت UNION ALL و UNION چیه؟Backward Index Scans چیه و چطور در بعضی سناریوها باعث بهینه‌سازی می‌شه؟آیا ایندکس‌های Covering برای جداول بزرگ همیشه بهترین گزینه هستن؟📌 نوشتن (Write) و مدیریت داده‌هاچطور نوشتن (Write) در دیتابیس تحت تأثیر ایندکس‌ها قرار می‌گیره؟چگونه ترتیب (Sort Order) نتایج و تأثیر آن روی ORDER BY بهینه می‌شه؟استفاده از COUNT، IF و Window Functions در SQL چه نکاتی داره؟مقایسه NULL و SPACE در اپراتورهای مقایسه‌ای در دیتابیس چگونه است؟Collation در MySQL (مثلاً ai_ci) چیه و چطور روی عملکرد و ترتیب داده‌ها اثر می‌ذاره؟چطور Primary Key و Secondary Key رو مدیریت کنیم تا بهترین عملکرد رو داشته باشیم؟Full Text Search چطوری کار می‌کنه و چه مزایایی نسبت به روش‌های جستجوی سنتی داره؟🔹 این سؤالات رو لطفا دقیق بررسی کن و به جواباش فکر کن! 🚀#DatabaseOptimization #SQLPerformance #MySQL #Indexing #QueryOptimization #BackendDevelopment #SoftwareEngineering  #PerformanceTuning #DataEngineering #TechInterview  #Laravel #Database #Query</description>
                <category>متین ابراهیمی</category>
                <author>متین ابراهیمی</author>
                <pubDate>Mon, 10 Feb 2025 16:04:48 +0330</pubDate>
            </item>
                    <item>
                <title>آیا درست است که می گویند همه باید کد نویسی یاد بگیرند؟</title>
                <link>https://virgool.io/coderlife/%D8%A2%DB%8C%D8%A7-%D8%AF%D8%B1%D8%B3%D8%AA-%D8%A7%D8%B3%D8%AA-%DA%A9%D9%87-%D9%85%DB%8C-%DA%AF%D9%88%DB%8C%D9%86%D8%AF-%D9%87%D9%85%D9%87-%D8%A8%D8%A7%DB%8C%D8%AF-%DA%A9%D8%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%DB%8C%D8%A7%D8%AF-%D8%A8%DA%AF%DB%8C%D8%B1%D9%86%D8%AF-xjl7psxztybf</link>
                <description>آیا این حرف درسته؟چرا باید کسایی که شغلشون به طور مستقیم به برنامه نویسی ربط پیدا نمی کند وقت خودشون رو برای یادگیری برنامه نویسی هدر بدن؟باید برنامه نویسی یاد بگیریم یا کد نویسی اصلا فرق برنامه نویسی با کد نویسی چیه؟این ها سوالاتی هستند که می خواهیم توی این پست با هم به جوابشون برسیم.اگر بخواهیم با یک منطق ساده و درست به این قضیه نگاه کنیم می فهمیم که لازم نیست و اصلا درست نیست که همه کد نویس بشوند  چون اساسا همه استعداد و علاقه ی لازم برای این حرفه رو ندارند.من یک آینده نگر نیستم.ولی هوش زیادی هم لازم نیست تا متوجه این نکته بشیم که تکنولوژی چه نقش بزرگی در بیشتر خلاقیت ها و شغل ها و رشته های مختلف امروزی دارد.پس شما هر شغلی داشته باشید به نوعی به تکنولوژی و مسایل مربوط به برنامه نویسی و مسایل نرم افزاری مرتبط هستید.چه بهتر که اگر شرایطی پیش اومد و خودتون خواستید فعالیتی در این زمینه داشته باشید و یا با متخصصان این حوزه همکاری داشته باشید اگر آگاهی در این زمینه داشته باشید بتونید بهتر و سریع تر و کم هزینه تر به هدفتون برسید مخصوصا کسانی که در شرکت ها و یا تیم ها کار می کنند و خواه نا خواه با کسانی که حرفه شون برنامه نویسی و یا حالا حرفه ای که به جوری به برنامه نویسی مرتبط باشه رو دارند.اما به نظر من مهمترین و بهترین دلیلی که می شود ذکر کرد برای اینکه یک نفر بخواهد برنامه نویسی را به غیر از بحث درآمدی و شغلی یاد بگیرد روش فکر کردنی هست که برنامه نویسی به ما یاد می دهد.منظورم از این حرف چیه؟ شاید یه کم خنده دار باشه و بگید من برم برنامه نویسی یاد بگیرم که بهتر فکر کنم!!!یعنی چی؟اگر با برنامه نویسان حرفه ایی و با تجربه صحبت کنید و از آنها بخواهید که برنامه نویسی رو توی یک جمله برای شما تعریف کنند قطعا به شما خواهند گفت که برنامه نویسی یعنی حل مسئله و یک از مهمترین مولفه های یک برنامه نویس خوب توانایی حل مسئله است و اینکه بتواند با ساده ترین راه حل و کم ترین خط کد(کمترین خط کد منظور جلوگیری از نوشتن کد های تکراری و غیر ضروری است نه اینکه همه ی مسئله ها باید با چند خط مشخص  حل بشوند) حل بکنند. خیلی ها هستند که کد نویسی انجام می دهند اما برنامه نویس نیستند فقط یک سری کد های یک زبان مشخص برنامه نویسی را حفظ کرده اند و انها را تکرار می کند این افراد کسانی هستند که پیشرفت خاصی در حوزه کاری خودشون نمی کنند.اما چرا هدف نهایی حل مسئله است و یک  برنامه نویس خوب چطوری باید این طرز فکر رو بدست بیاورد و چرا باید همه ما در پی یافتن این الماس گرانبها باشیم؟واقعیت اینه که ما توی دنیایی زندگی می کنیم که مسائل و مفاهیم و رابطه هایمان بر خلاف درس ریاضی که توی مدرسه یاد گرفتیم فقط یک جواب و  راه حل ندارند بلکه کاملا به هم ربط دارند و بر یکدیگر تاثیر می گذراند(پیشنهاد می کنم اگر علاقه دارید اثر پروانه ای رو مطالعه کنید) و مسائل زنجیره ای و متوالی هستند.از قضا توی مسايل برنامه نویسی همه راه حل ها به صورت زنجیره ای و متوالی حل می شوند و برنامه نویس را مجبور می کنند که این شکلی فکر کنند.”اول اینطوری میشه بعد اینطور میشه بعدش اگه اینطور بشه اونطوری میشه!!!وقتی این توالی ساده باشه میشه راحت دنبالش کرد ولی وقتی کمی پیچیده تر میشه مجبور میشی تمام تمرکزت رو جمع کنی و ذهنت رو روی مسئله بزاری تا حلش کنی.بهر حال یادگیری فکر کردن به صورت به صورت متوالی و استراتژیک یه مهارته که همه باید یاد بگیرند.حواستون باید شش دانگ جمع باشه؟!شما عیب یابی رو یاد نمی گیرید مگر اینکه از کد اشکال زدایی کرده باشید.این سخت ترین قسمت کاره.به کد ها نگاه می کنید و بعد از یک ساعت(واسه خودم پیش اومده چند روز) جستجو.می بینید که مشکل یک نقطه یا یه براکت بوده.با خودتون میگید کد نویسی من عالی بود بجز اون مشکل کوچیک.سینتکس به اندازه توالی مهمه.چون من این دو رو یکسان فرض نکردم و در زمان عیب یابی توانایی ام رو دست بالا گرفتم و برای همین دنبال مشکل واقعی نگشتم.این جمله که به چیزهای کوچیک اهمیت نده در کدنویسی بکار نمیره چون چیزهای کوچیک می تونه باعث شکستتون بشه.آموزش کد نویسی ارزش بهره وری و ساختار درست رو بهتون کاملا یاد می دهد!نوشتن کدی که کاری رو انجام بده کافی نیست.بهترین کد باید کارآمد و مفید باشد.یه جمله مشهور بین برنامه نویس ها هست که میگه اگر کار میکنه بهش دست نزن اما کد نویسی اینجور تنبلی ها رو تحمل نمی کند و اگر بخواهید نرم افزارتون درست کار کنه و قابل گسترش و قابلیت بزرگ شدن داشته باشه باید فکر بکنید.کدتون رو تغییر بدهید کدتون رو ارتقا بدهید و تمیزش کنید(کلین کد) تا کارتون بهره وری لازم رو داشته باشد.خلاصه اینکه شما برای داشتن یک برنامه و اپ خوب و پایدار باید مهارت و تجربه و دانش گسترده و کافی داشته و خیلی دقیق و خوب کار کرده باشید تا به هدفتون برسید برای رسیدن به این درجه از مهارت باید ساعت ها کار و تلاش کرده باشید و آموزش  دیده باشید که کار راحتی نیست.اما نتیجه چی میشه بالاخره باید برنامه نویسی رو یاد بگیریم یانه؟برنامه نویسی به خودی خود طیف وسیعی از مهارتهای را نیاز دارد مهارتهای مثل تفکر انتقادی توانایی تحلیل و حل مسائل توانایی تغییر کردن و یادگیری مداوم بروز بودن توانایی سرچ حرفه ایی و سرسخت بودن تا رسیدن به جواب و … که متاسفانه به نظر می زسه این مهارت های ارزشمند در نسل فعلی کودکان و جوانان و نوجوانان که ناشی از ضعف سیستم آموزشی ماست از دست رفته است  و یا حداقل خیلی کمرنگ شده است.بررسی کردیم و دیدیم که برنامه نویسی مانند هر شغل دیگری به کار و تمرین زیاد نیاز دارد و یک نفر اگر بخواهد در چند زمینه و رشته مختلف متخصص باشد به این راحتی ها در این دنیای تخصص محور امروز قابل دستیابی نیست.پس جمله ی جایگزین پیشنهادی من به جای  هرکسی باید برنامه نویسی رو یاد بگیره اینه که هر کسی باید توانایی و مهارت تحلیل و حل مسئله رو داشته باشه که یکی از  راه ها و رشته هایی که می تونید به خوبی این مهارت ها رو در خودتون به خوبی و به طور عمیق و کاربردی پرورش و گسترش بدید برنامه نویسی و مسائل مربوط به اون هستند اما هرکسی شرایط و علایق خودش رو بهتر می دونه و بهتر می تونه برای خودش تصمیم بگیره شما مختارید هر جوری که می توانید این مهارت ها رو کسب کنید خواهشا و حتما</description>
                <category>متین ابراهیمی</category>
                <author>متین ابراهیمی</author>
                <pubDate>Mon, 23 Mar 2020 14:50:06 +0430</pubDate>
            </item>
            </channel>
</rss>