<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های حسام سیف‌اللهی</title>
        <link>https://virgool.io/feed/@hesam_se</link>
        <description>فرزند انسان، برنامه‌نویس</description>
        <language>fa</language>
        <pubDate>2026-04-15 10:27:09</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/775000/avatar/4ol6SU.jpeg?height=120&amp;width=120</url>
            <title>حسام سیف‌اللهی</title>
            <link>https://virgool.io/@hesam_se</link>
        </image>

                    <item>
                <title>چرا یک برنامه‌نویس فرانت‌اند نیازه Docker بلد باشه؟</title>
                <link>https://virgool.io/@hesam_se/%DA%86%D8%B1%D8%A7-%DB%8C%DA%A9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D9%81%D8%B1%D8%A7%D9%86%D8%AA-%D8%A7%D9%86%D8%AF-%D9%86%DB%8C%D8%A7%D8%B2%D9%87-docker-%D8%A8%D9%84%D8%AF-%D8%A8%D8%A7%D8%B4%D9%87-runvzwd5otl6</link>
                <description>توی مقاله قبلی به این سوال پاسخ دادم که آیا یه فرانت‌کار نیازه الگوریتم بلد باشه؟ الان با همون رویکرد می‌خوایم ببینیم چرا یادگیری (یا حداقل آشنایی) با Docker برای تیم فرانت‌اند نیازه؛ بدونیم از کجا شروع کنیم و تا کجا ادامه بدیم.Docker چی هست؟توی این مقاله نمی‌خوام خیلی وارد این موضوع بشم چون بهش زیاد پرداخته شده. اما بد نیست اگه یه خلاصه‌ای ازش به زبون ساده گفته بگم.قبل از داکر، نرم‌افزار‌هایی که نوشته میشدن، برای Deploy، به عنوان یک سرویس توی سیستم‌عاملِ سرور تعریف می‌شدن(دیگه الان به اون سرورای فیزیکی میگیم Bare Metal). این مساله چالش‌های زیادی داره. مثلا:هر برنامه وابستگی‌هایی داره که مدیریت اون وابستگی‌ها برای سرویس‌های مختلف روی یک سرور دشواره. مثلا فرض کنید دوتا سرویس Node.js داریم که یکی با ورژن 18 کار می‌کنه و دیگری با ورژن 20. مدیریت اینکه هرکدوم از نسخه مطلوب Node استفاده کنن چالش داره.یه فضای مشترک بین سرویس‌های سیستم‌عامل وجود داره که ممکنه روی هم اثر بگذارند. مثلا، Environment variableها در سطح سیستم عامل مشترکن و هر سرویسی می‌تونه اونارو بخونه و اگر دسترسی‌های لازم رو داشته باشه می‌تونه اونا رو تغییر بده. این مساله جدا از بحث conflict، می‌تونه مشکل امنیتی هم داشته باشه.اگه بخوایم برنامه‌مون روی چند سرور بیاریم بالا(اصطلاحا scale کنیم)، باید حواسمون به همه‌ی این کار‌ها توی سرورای دیگه هم باشه.Dockerman, The Superheroاینجاست که Dockerman دست به کار می‌شه. کاری که داکر کرد این بود که هر برنامه رو به صورت مستقل توی یه محیطی که سیستم‌عامل نیست ولی سیستم‌عامل رو شبیه‌سازی کرده اجرا می‌کنه. به اون محیط مستقل Container گفته می‌شه. هربرنامه رو روی یه Container میاریم بالا، توی هر Container تنظیمات مختص اون سرویس رو قرار میدیم و خیالمون راحته کس دیگه‌ای از این Container استفاده نمی‌کنه و روش دستکاری انجام نمی‌ده. یجورایی شبیه اینه که برای هر سرویسمون یه سرور خریدیم، روش سیستم‌عامل نصب کردیم و تنظیمات مخصوص اون برنامه رو انجام دادیم. توی داکر همه این کارا به صورت مجازی انجام می‌شه.نکته: یه چیزی بین Bare Metal و Container وجود داره به اسم Virtual Machine. چون هدف این مقاله معرفی این نیست از گفتنش صرف‌نظر کردم ولی اگه علاقمند هستید توی این ویدیو می‌تونید راجع به تفاوت این‌ها بیشتر بدونید.چرا ما باید یاد بگیریم؟خب با این توضیحاتی که دادم ممکنه براتون سوال بشه که به عنوان یک برنامه‌نویس فرانت‌اند، ما اصلا به داکر کاری نداریم و چرا باید یاد بگیریم؟ عنوان و هدف این مقاله جواب به همین سواله.سیستم چطور کار می‌کنه: شما به عنوان برنامه‌نویس باید بدونید این کدی که می‌نویسید کجا و چطور اجرا می‌شه. شناخت سیستم هم برای دانش عمومی کامپیوتر خوبه و هم اینکه یه جاهایی توی کد زدن به کارتون میاد.ارتباط بهتر با سایر استک‌ها: شاخه‌های مختلف نرم‌افزار دایره واژگان و ادبیات خودشون رو دارن. خیلی وقتا این ادبیات اونقدر متفاوته که شما گاهی حسی ندارید که مثلا تیم DevOps داره در مورد چی حرف می‌زنه. از اونجایی که داکر یه بخش خیلی مهمی از کار تیم‌ها رو شامل می‌شه، آشنایی باهاش کمی این مساله رو بهبود میده و باعث میشه بتونید ارتباط بهتری از نظر فنی با تیم‌ها و استک‌های دیگه داشته باشید. همچنین نیازی ندارید بدونید تیم بک‌اند با چه زبان و فریمورکی توسعه داده شده و چطور بک‌اند رو build یا run کرد. فقط کافیه که container بک‌اند رو بالا بیارید و باهاش کار کنید.رفع باگ‌های پروداکشن: احتمالا برای شما هم پیش اومده که یه چیزی توی سیستم local شما درست کار می‌کنه ولی توی پروداکشن مشکل داره. این یه مساله رایجه و حتی memeهای بامزه‌‌ای هم براش ساختن. حتی همین الان که دارم این مقاله رو می‌نویسم خودم درگیر یه مورد عجیب اینطوریم. یک راهی که برای این هست اینه که برید با تیم DevOps یا backend چک کنید و با کمک اونا باگ رو پیدا کنید. اما اگر محصولتون داکری باشه، می‌تونید container یا containerهای مورد نیازش رو روی سیستم خودتون ران کنید و مشکل رو خودتون پیدا کنید. کدی که توی container داکر ران میشه نزدیک‌ترین کد به پروداکشنه و اکثر خطاهای پروداکشن(به‌خصوص frontendای‌ها)، توی Containerای که خودتون run می‌کنید هم وجود دارن.مزیت رقابتی در بازار کار: داکر یه تخصص cross-cutting عه. به این معنی که همه بخش‌های نرم‌افزار کم و بیش نیاز دارن باهاش آشنا باشن. توی این چند سال من خیلی می‌بینم که توی آگهی‌های شغلی برای برنامه‌نویس frontend(به خصوص سنیور)،‌ آشنایی با داکر الزامی یا مزیت محسوب میشه. توی تجربه‌ای که از خودم از مصاحبه‌ها داشتم، توی سال‌های پیش آشنایی بچه‌ها با داکر کمتر بود ولی الان روزبه‌روز داره بیشتر میشه. پس آشنایی با داکر یه مزیت رقابتی برای استخدامه.چقدر یاد بگیریم؟توی صنعت نرم‌افزار مطلب برای یادگرفتن بسیاره، و در نتیجه شما وقت ندارید توی همه‌چیز عمیق بشید. پس احتمالا نیازی نیست توی داکر هم حرفه‌ای باشید. اگر به تازگی برنامه‌نویسی رو شروع کردید احتمالا چیزای واجب‌تری برای یادگیری دارید. پس می‌تونید یادگیری داکر رو به تعویق بندازید.اگر خودتون رو Mid-level می‌دونید، یه آشنایی کلی با داکر کفایت می‌کنه. در این حد که داکر چیه و چطور میشه یه Container رو run یا stop کرد. دستورات ابتدایی داکر رو بدونید کافیه.هرچی که توی این مسیر به سمت Senior شدن و بالا‌تر پیش برید، طبیعتا سطح دانش داکری‌تون هم باید بیشتر بشه. کم‌کم باید دستورات نوشتن image رو بدونید چون لازمه که image داکر بنویسید یا imageای که نوشته شده رو بخونید و تغییر بدید. می‌تونید از نوشتن imageهای فرانت‌اند شروع کنید و بعد کم‌کم هرجا نیاز داشتید دانشتون رو بیشتر کنید. احتمالا به یادگیری docker-compose هم احتیاج پیدا می‌کنید.از کجا شروع کنیم؟قبل از هر چیز باید با لینوکس آشنا بشید چون داکر روی یه کرنل شبیه‌سازی‌شده لینوکس کار می‌کنه. حتی نظر شخصی من اینه که سیستم‌عاملی که توش develop می‌کنید رو یه مدت به لینوکس تغییر بدید که بهش عادت کنید و بهتر یاد بگیرید.اگر با لینوکس آشنا نیستید، من این دوتا منبع رو معرفی می‌کنم که بد نیست یه نگاهی بهش بندازید و با هر کدوم که راحت‌تر بودید شروع کنید یا دانشتون رو بیشتر کنید:سایت roadmap.sh یه سایت خیلی خوبه که توی همه بخش‌های نرم‌افزار یه نقشه راه تر و تمیز کشیده و بهتون میگه به ترتیب چه چیز‌هایی رو یاد بگیرید. بخش لینوکسش رو بهتون توصیه می‌کنم.ساید GeeksForGeeks هم یه tutorial خوب برای آشنایی با لینوکس داره که از نصب لینوکس تا مفاهیمش رو توضیح داده.بعد از این دیگه می‌تونید با خود داکر آشنا بشید. من اینجا چند‌تا منبع برای آشنایی و یادگیری داکر آوردم:باز هم سایت roadmap.sh یه نقشه راه خوب برای داکر داره(کلا این سایت خیلی مورد علاقه منه).این ویدیوی سه ساعته هم یه مقدماتی از داکر رو توضیح میده که برای آشنایی بد نیست.همچنین خودتون هم بگردید می‌تونید منابع زیادی برای شروع و یادگیری پیدا کنید. نکته‌ای که وجود داره اینه که نیازی نیست هیچ کدوم از منابع رو تا انتها پیش ببرید. برای شروع با مفاهیم اولیه‌ش هم آشنا بشید و کمی دستتون رو کثیف کنید کافیه.توی این مقاله سعی کردم به زبون ساده از اهمیت داکر برای فرانت‌اند دولوپرا بگم. این نکته رو مد نظر داشته باشید که progress آروم آروم اتفاق می‌افته و هرجا حس کردید چیزی نمی‌دونید یا خیلی چیز‌ها هست که باید یاد بگیرید، یعنی توی مسیر درستی قرار دارید و ناامید نشید.اگر نظری دارید یا چیزی جا افتاده خوشحال میشم توی کامنت‌ها یا از طریق ایمیل با من به اشتراک بذارید. همچنین توی توییتر هم با آیدی @hesam_se می‌تونید منو دنبال کنید.</description>
                <category>حسام سیف‌اللهی</category>
                <author>حسام سیف‌اللهی</author>
                <pubDate>Sat, 20 Sep 2025 19:45:55 +0330</pubDate>
            </item>
                    <item>
                <title>آیا برنامه‌نویس Front-end نیازه الگوریتم بلد باشه؟</title>
                <link>https://virgool.io/@hesam_se/%D8%A2%DB%8C%D8%A7-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-front-end-%D9%86%DB%8C%D8%A7%D8%B2%D9%87-%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D8%A8%D9%84%D8%AF-%D8%A8%D8%A7%D8%B4%D9%87-qnpw5eywvs8a</link>
                <description>این سوالیه که می‌دونم خیلی از برنامه‌نویس‌های فرانت‌اند - به خصوص کسایی که تازه شروع کردند - درگیرش هستند. البته می‌دونم از نظر فنی سوال دقیقی نیست و دقیق‌ترش اینه: &quot;آیا برنامه‌نویس فرانت اند، نیاز داره درکی از ساختمان داده، طراحی الگوریتم و کلا مباحث پایه مهندسی نرم‌افزار داشته باشه و بتونه به سوالات الگوریتمی جواب‌های بهینه بده؟&quot;به عنوان یه Lead Frontend Developer، توی مصاحبه‌های زیادی برای پوزیشن برنامه‌نویس فرانت‌اند بودم؛ چه به عنوان مصاحبه‌شونده و چه مصاحبه‌کننده. تقریبا توی همه مصاحبه‌ها، سوال الگوریتمی پرسیدم و برام معیار مهمی بوده. بازخوردی که گاهی گرفتم، به خصوص از جوان‌ترها، مواردی از این قبیل بوده:این &quot;چیزا&quot; برای بک‌انده و اصلا فرانت‌کارو چه به این کارا!یه چیزایی تو دانشگاه خوندیم ولی توی این چند سال ازش استفاده نکردم و یادم رفته.رشتم کامپیوتر نبوده. فرانت‌اندو با کورس‌های Youtube یاد گرفتم(و طبیعتا چیزایی که میگی به کارم نیومده)خوبه بلد باشیم ولی حالا خیلیم مهم نیست...خب، اگر به گفته این دوستان، بعد از چند سال برنامه‌نویسی مفاهیمی مثل &quot;پیچیدگی زمانی&quot; به کار نیومده، آیا به این معنی نیست که واقعا توی فرانت‌اند کاربردی ندارند؟ این اون سوال میلیون تومانیه(خداییش میلیون دلاری نیست!) که می‌خوایم بهش پاسخ بدیم.دلیل اول، تقویت تفکر برنامه‌نویسیقبل از هر چیز شما به عنوان یک برنامه‌نویس باید بتونید مساله حل کنید. مستقل از زبانی که باهاش برنامه‌نویسی می‌کنید، ما یک مفهومی داریم به اسم تفکر برنامه‌نویسی که بیشتر نحوه برخورد ما با یک مساله‌ و روشیه که برای حل اون به کار می‌بریم. حل کردن سوال‌های الگوریتمی، تفکر برنامه‌نویسی رو در شما تقویت می‌کنه و به شما مهارت حل مساله میده. درست شبیه عملکردی که ورزش کردن برای تقویت عضلات داره. بعد از یک دوره تمرین، وقتی به مساله جدیدی برمی‌خورید ذهن آماده‌تری برای حل دارید.برنامه‌نویسی برای فاناکثر بچه‌هایی که توی این فیلد هستند، مهم‌ترین دلیلشون برای شروع این career و موندن توش اینه که کدنویسی بهشون حال می‌ده و شبیه یه بازی فکری می‌مونه. من به شخصه معتقدم اگر علاقه به این رشته ندارید و حین کدنوشتن یا دیباگ کردن حس می‌کنید دارید عذاب می‌کشید، احتمالا این شغل مناسب شما نیست و در آینده ازش خسته می‌شید.ولی اگر بهش علاقه داشته باشید، مثل هر کار باحال دیگه‌ای سختی‌هاش هم براتون شیرین میشه و همه چی براتون شبیه بازی به نظر میاد.حالا، دونستن مواردی مثل ساختمان داده یا محاسبه پیچیدگی زمانی، به شما کمک می‌کنن قوانین این بازی رو بهتر بشناسید و توش حرفه‌ای‌تر بشید و با حرفه‌ای‌ترها رقابت کنید.آماده شدن برای مصاحبه‌هاهمونطور که اشاره کردم، توی اکثر مصاحبه‌های شغلی در همه‌ی شاخه‌های برنامه‌نویسی، سوال الگوریتمی پرسیده میشه. حتی تو برخی شرکت‌ها این یک مرحله جداگانه از مصاحبه است و توی مرحله اول انجام میشه؛ یعنی قبل از مصاحبه فنی!برای شرکتی که می‌خواد شما رو جذب کنه، مهم‌ترین چیز اینه که شما بهره هوشی بالایی داشته باشید تا در مواجهه با مسائل دنیای واقعی بتونید به راحتی از پسش بر بیاید. حتی شرکت‌هایی رو دیدم که صرف داشتن بهره هوشی برای جذب شما کافیه و نیاز نیست در یک فیلد فنی قوی باشید. اون کار رو می‌تونید بعد از جذب، با وقت و هزینه‌ای که شرکت در اختیارتون قرار می‌ده انجام بدید.حالا شرکت‌ها چطور می‌تونند بسنجند شما IQ مد نظرشون رو دارید و می‌تونید از پس حل مساله در دنیای واقعی بر بیاید؟ آفرین، با دادن مساله الگوریتمی به شما و حل بهینه اون توسط شما. حتی اگر دونستن دانش پایه نرم‌افزار به هیچ درد شما هم نخوره -که میخوره-، همین یک دلیل کافیه که همین امروز شروع به یادگیری کنید.حل مسائل پیچیده در فرانت‌اندحتما شما هم Memeهایی مثل این رو دیدید که با برنامه‌نویسای فرانت شوخی می‌کنند.باید بهتون بگم این‌ها صرفا شوخی هستند و فرانت‌اند -به خصوص در سال‌های اخیر- چالش‌ها و پیچیدگی‌های فنی مختص خودش رو داره و این میم‌ها هم صرفا برای کل‌کل کردن و خندیدن هستند.اکثر چیز‌هایی که توی ساختمان داده و طراحی الگوریتم یاد می‌گیرید، توی فرانت‌اند هم کاربرد واقعی دارند. ممکنه اولش این رو حس نکنید ولی اگر به اون‌ها مسلط نباشید از یک جایی جلوتر نمی‌تونید برید. اینجا برای اینکه بحث فنی‌تر بشه چندتا مثال واقعی می‌زنم.مثال ۱: خیلی از جاهایی که روی یک آرایه میخواید یک عنصر و find کنید و این کار رو زیاد انجام می‌دید، بهتره به جای آرایه از ساختمان داده hashMap استفاده کنید(که توی Js توسط کلاس Map پیاده‌سازی شده). این‌کار باعث میشه پیچیدگی زمانی جستجوهاتون به جای O(n)، از مرتبه O(1) باشه.مثال ۲: برای پیاده‌سازی undo/redo، احتمالا پشته(Stack) به کارتون میاد.مثال ۳: برای پیاده‌سازی Debounce و Throttle از ساختمان داده صف(ْQueue) استفاده می‌شه.مثال ۴: برای پیاده‌سازی cache از ساختمان داده hashMap استفاده می‌شه.ممکنه برای پیاده‌سازی مثال‌هایی که زدم، Library خاصی به نظرتون بیاد که خودش این کار رو براتون انجام میده و دیگه نیازی نیست پیاده‌سازیش کنید. اما این به اون معنی نیست که نیاز نیست بدونید توی اون Library داره چه اتفاقی می‌افته.همچنین خیلی از این ساختمان‌داده‌ها به صورت built-in توی جاواسکریپت در توابعی مانند sort, filter, و... پیاده‌سازی شدند و نیازی نیست خودتون پیاده‌شون کنید. اما همونطور که گفتم نیازه بدونید داره اون پشت چه اتفاقی می‌افته و اثر این اتفاق چیه.از کجا شروع کنیم؟حالا سوالی که پیش میاد اینه که از چیا رو باید یاد بگیریم و از کجا؟اگر رشتتون کامپیوتر نیست یا اینکه از تموم شدن دانشگاهتون چند سالی میگذره و الان از مباحث دور شدید، پیشنهاد می‌کنم یک دوره ساختمان داده و طراحی الگوریتم رو شروع کنید. من مکتب‌خونه رو پیشنهاد می‌کنم که دوره‌های خوبی برگزار می‌کنه. فقط فضای دوره‌هاش یکم آکادمیکه و ممکنه خستتون کنه. اگر باهاش زیاد حال نکردید یوتوب هم کورس‌های خوبی داره.بعد از اینکه به مباحث پایه مسلط شدید، وقتشه دست به کد بشید و یکم سوال الگوریتمی حل کنید. سایت کوئرا یه سایت ایرانی باحاله که توش چالش‌های الگوریتمی با سطح‌بندی‌های مختلف از آسون تا سخت داره. هرکدوم رو که دوست داشتید با هر زبونی که بهش مسلط هستید می‌تونید انجام بدید.یه سایت دیگه که خود من خیلی دوسش دارم LeetCode عه. اونم مشابه کوئرا سوالای الگوریتمی داره و می‌تونید با زبان‌های مختلف حلش کنید. اگر قصدتون آماده شدن برای مصاحبه است، توی این قسمت ۱۵۰ تا از سوالات پرتکرار مصاحبه‌ها رو گذاشته. می‌تونید از اون‌ها شروع کنید.هردوی این سایت‌ها علاوه بر سوالات، هم آموزش دارن و هم کامیونیتی‌های مختلف که می‌تونید عضوشون بشید. کلا توشون چرخ بزنید جالب و اعتیاد آورن.خیلی خفن شدیم چیکار کنیم؟وقتی دیگه خیلی از حل این سوالات لذت بردید و دنبال چالش‌های بزرگتر بودید، وقت رقابته. مسابقات مختلفی توی شاخه‌ها مختلف توسط دانشگاه‌ها، شرکت‌ها و سایت‌های مختلف برگزار می‌شه که به نظرم صرف شرکت کردن توی اون‌ها می‌تونه باحال باشه و شما رو با آدم‌های باحالی آشنا کنه. خود کوئرا و LeetCode هم رقابت برگزار می‌کنند.برای اینکه بفهمید کی، کجا، چه مسابقه‌ای برگزار میشه، کافیه عضو کامیونیتی‌های علاقمند به این دوره‌ها بشید. اینجا لینک چندتاشونو براتون می‌فرستم بد نیست یه نگاهی بهشون بندازید:icpc.ircodeforces.comt.me/AUTICPCt.me/codeforces_officialخلاصه که فرقی نمی‌کنه بک‌اند کار باشید یا فرانت‌اند، این مفاهیم پایه‌ای همیشه به شما کمک می‌کنن که در مواجهه با چالش‌های واقعی نرم‌افزار، راه‌حل‌های بهینه‌تری پیدا کنید. اگر هنوز یادگیری این مباحث رو شروع نکردید، هیچ‌وقت برای حرفه‌ای‌تر شدن دیر نیست. همین امروز دست به کار بشید!اگر سوالی داشتید خوشحال میشم بتونم کمک کنم. با من از طریق ایمیل در ارتباط باشید. اگر هم نکته‌ای رو جا انداختم خوشحال می‌شم با ما به اشتراک بذارید.</description>
                <category>حسام سیف‌اللهی</category>
                <author>حسام سیف‌اللهی</author>
                <pubDate>Wed, 16 Jul 2025 23:11:24 +0330</pubDate>
            </item>
                    <item>
                <title>در ستایش ریفکتور</title>
                <link>https://virgool.io/@hesam_se/%D8%AF%D8%B1-%D8%B3%D8%AA%D8%A7%DB%8C%D8%B4-%D8%B1%DB%8C%D9%81%DA%A9%D8%AA%D9%88%D8%B1-drx0bkrxseqn</link>
                <description>هامون (1368) - داریوش مهرجوییاگه فیلم هامون رو دیده باشید، توی یه سکانس حمید هامون و دوست قدیمیش علی عابدینی سر یه کتابی با هم بحث میکنن به اسم &quot;Zen and the Art of Motorcycle Maintenance&quot;. ظاهرا موضوع کتاب اینه که از طریق تعمیر موتورسیکلت میشه به عروج عرفانی رسید. خب تو نگاه اول به نظر مسخره میاد؛ حتی تو نگاه دوم و سوم هم همینطور. ولی اگر ما هم به خودمون نگاه کنیم شاید بتونیم چنین چیزاهای بی معنی‌ای رو پیدا کنیم که توی زندگی ما و فقط برای ما معنی پیدا کردن.زمانی که کتاب Clean Code (کتابی در مورد مرتب و تمیز کد نوشتن اثر uncle bob کبیر) رو شروع کردم، در وضعیتی بودم که اگر شرکت منو اخراج می‌کرد به خاک سیاه می‌نشست. البته نه به خاطر توانایی و تخصصم، به این خاطر که کدهامو کسی جز خودم نمی‌تونست بخونه. رسیدن به سطحی که مد نظر کتاب بود مثل این بود که از ایران‌خودرو توقع داشته باشی خودروی سال اروپا رو تولید کنه.مثلا می‌گفت متد‌‌ها باید حداکثر 5 خط باشن. 5 خط :/ . برای منی که متد‌‌هایی با 400،500 خط داشتم نشدنی به نظر می‌رسید. اما خوشبختانه روش رسیدن به این سطح از کمال رو عموباب عزیز به خوبی توضیح داده بودند. رمز موفقیت این بود: &quot;abstraction&quot;. می‌گفت من وقتی وارد کدت میشم چرا اصلا باید جزئیاتو ببینم؟ این جزئیات چشمو خسته می‌کنن و نمیشه منظور کد رو فهمید. پس چیکار باید بکنیم؟ از انتزاعی‌ترین کارهایی که انجام میدی شروع کن و اصلا کاری نداشته باش داخلش قراره چی بشه. اونا رو بعدا پیاده‌سازی کن. بعد که اینکارو کردی برو تو تک تک اون کارهایی که نمیدوستی داخلش چیه، همین کارو تکرار کن. اونقدر ادامه بده که دیگه هیچ چیزی رو نتونی انتزاعی کنی و برسی به کوچکترین اجزا. اونوقت پیاده سازی کن.منم شروع به پیروی از این روش کردم و خب ذره ذره جواب داد. دیگه کدهایی که می‌نوشتم تمیز بود، متدها کوتاه و انتزاعی بود، نام‌گذاری‌ها درست بود. بعد از مدتی دیگه حتی کدهای کثیف بقیه رو هم نمی‌تونستم تحمل کنم و وقتی کدی به دستم می‌رسید، اول وقت میذاشتم یه ریفکتور اساسی می‌کردم بعد تازه می‌رفتم ببینم مشکل کجاست. کد نوسیم هیچوقت در حد خودروی سال اروپا نشد ولی خب از پراید به دناپلاس توربو اتومات تغییر کرد.اما جدا از پیشرفت شغلی، چیزی که خیلی برام جالب بود این بود که با خوندن این کتاب بخش‌هایی از شخصیت من هم تغییر کرد. من آدم واقعا منظم‌تری شدم. دیگه میز کارم شلوغ نیست. اتاقم هم مرتب تره(راستش مامانم هنوز سر تایید این مورد مقاومت میکنه). خیلی پیش میاد که وقتی میخوام کاریو شروع کنم، قبلش اطرافمو مرتب می‌کنم بعد میرم سراغ کار اصلیم. بگذریم که گاهی اوقات بعد مرتب کردن خسته می‌شم و کار اصلیمو ول می‌کنم می‌خوابم =))). حتی تاثیرشو توی سلیقم هم گذاشته. از لباس، معماری و دکوراسیون شلوغ بدم میاد. وقتی وارد یه خونه می‌شم با خودم میگم اصلا چرا باید اولین چیزی که نظرمو جلب کرد ساعت دیواری باشه؟ چرا اینقدر شلوغه که مبلاشون که قشنگ‌تره رو ندیدم؟آشپزخانه‌ای به سبک Clean Codeاگر منم نویسنده بودم شاید کتابی با عنوان Clean Life: The art of clean code in everyday life می‌نوشتم و ادعا می‌کردم میشه از طریق کد زدن به سلوک شخصیتی رسید. مقدمش هم تقدیم می‌کردم به uncle bob و خطاب بهش می‌گفتم تو به ما ثابت کردی همه عموهای آمریکایی شیطان‌صفت نیستن. اگر برنامه‌نویس هستین اکیدا بهتون توصیه می‌کنم Clean Code رو بخونید و ویدیو‌های عموباب(Robert C. Martin) رو توی یوتوب ببینید. واقعا توی زندگی حرفه‌ای‌تون تاثیر مثبت میذاره و اگر مثل من خل و چل باشید شاید توی شخصیتتون هم تاثیر گذاشت.</description>
                <category>حسام سیف‌اللهی</category>
                <author>حسام سیف‌اللهی</author>
                <pubDate>Thu, 28 Oct 2021 18:17:32 +0330</pubDate>
            </item>
            </channel>
</rss>