سه راه شگفت انگیز برای ساده کد زدن

زندگی خیلی ساده است، اما ما اصرار داریم پیچیده‌اش کنیم.

نوشتن کدهای ساده، واقعا ساده است. اما ما با آماده کردن کدها برای آینده (Future-ready)، کار خودمان را پیچیده می‌کنیم!

وقتی که یاد بگیریم توهم آمادگی برای آینده را کنار بگذاریم، هم کدهایمان تمیزتر و ساده‌تر می‌شود و هم اعتبارمان به عنوان یک برنامه‌نویس خوب، پیش بقیه بالا می‌رود.

اجازه بدهید توضیح بدهم.

آن زمان که در دوران اوج برنامه‌نویسی‌ام بودم، یک اصل وجود داشت که در هر موقعیتی به من یاد داده می‌شد:

«هیچوقت یک کد را دوبار ننویس.»

«باید کدت را بازسازی کنی. باید بخاطر نفع همگانی، کاری کنی که کدت قابل استفاده مجدد باشد. کدت را شبیه جعبه سیاه (black box) کن تا هر برنامه‌نویس دیگری که روی کره زمین هست، بتواند از آن استفاده کند. برنامه‌نویس‌های خوب، کدهای عالی‌شان را تا ابد برای دیگران به یادگار می‌گذارند.»

تا اینجای کار که مشکلی نیست.

البته به جز یک مشکل خیلی خیلی بزرگ: اینکه کدهایی که من می‌نوشتم، کم‌کم تبدیل به یک کپه زشت و هولناک از حرف‌ها و عددهای بی‌معنی می‌شد که فهمیدن و تفسیرشان غیر ممکن بود. بهداشت کدنویسی (code hygiene) من کلاً از بین رفت، و روزها و ماه‌ها را فقط صرف این می‌کردم که آفریده‌های شیطانی‌ام را اصلاح کنم و زندگی نویی به آنها ببخشم.

برنامه‌نویسی کار سختی است. وقتی برنامه‌ای می‌نویسی، چیزی بین یک تا یک گازیلیون خط کد خواهی داشت و قرار است اشتباهاتی هم بکنی. شاید اشتباهاتت کوچک باشند و شاید هم بزرگ؛ اما در هر اندازه‌ای که باشند، پیدا کردن و رفع‌شان حتماً زمان می‌برد. وقتی در آن گرداب خطرناک درماندگی داری به سرعت غرق می‌شوی، بعضی وقت‌ها نیاز داری که یک نفر دستت را بگیرد و بیرونت بکشد.

اما بعضی وقت‌ها هم… تنها چیزی که لازم داری یک اردک زرد حمام است.

اولین بار دین پارکر (Deane Parker) بود که در پست زیبایش با عنوان «چطور سخنرانی خوبی بکنیم»، مفهوم اردک حمام را مطرح کرد. در این پست، او توضیح می‌دهد که چطور می‌شود با تمرین کردن سخنرانی با صدای بلند، آن را بهتر کرد. این ایده که از اردک حمام به عنوان شنونده سخنرانی‌مان استفاده کنیم حرف جدیدی نیست؛ اما جذابیتش در اینجاست که هم راحت می‌شود عملی‌اش کرد و هم موثر است.

اصلی‌ترین مزیت استفاده از اردک حمام به عنوان شنونده، این است که اردک زرد صبور است و قضاوت هم نمی‌کند. از همه بهتر، با کمک او دیگر لازم نیست وقت شخص دیگری را بگیری. جادویی در بلند بلند توضیح دادن مشکلات هست (حتی به چیزی بی‌جان مثل اردک حمام) که کمک می‌کند راه حل مسئله را پیدا کنی.

وقتی که شروع می‌کنید به مرور کردن کد و توضیح دادن خط به خط آن به اردک حمام، یکدفعه می‌بینید که دارید یک دید بیرونی به موقعیت پیدا می‌کنید. آنجاست که خودتان را مجبور به ارزیابی خودتان می‌کنید، و در حال و هوای آن لحظه، درکی عینی و بی‌طرف از همه کدهایی که نوشته‌اید به دست می‌آورید.

و بعد، دیر یا زود بلاخره به آن لحظه «آها!» می‌رسید. جواب معما یک دفعه به ذهنتان می‌رسد.

و تقریبا هر دفعه به خودتان می‌گویید: «وا! من که اینو می‌دونستم!»

در اینجا چندتا از چیزهایی را آورده‌ام که در جلسه‌هایم با اردک حمام، در مورد بهتر کد زدن یاد گرفتم:

لازم نیست هر دفعهComponent قابل استفاده مجدد بسازید
بعضی‌ها متعقدند که آدم باید همیشه componentهایش را تا می‌شود قابل استفاده مجدد کند؛ زیرا با این کار مجبور می‌شود با همه مشکلات مربوط به کیفیت کدش روبرو شود و در نهایت نرم‌افزار بهتری تولید خواهد کرد. اگر تنها هدف شما این باشد که بهترین نرم‌افزار دنیا را بسازید، چنین عقیده‌ای خیلی خوب است. اما متاسفانه هیچ کس برای ساختن بهترین نرم‌افزار جهان به شما پول نمی‌دهد.

نه؛ چیزی که شما به خاطرش پول می‌گیرید این است که با رعایت بودجه و زمان اختصاص داده شده، نرم‌افزاری بنویسید که در حد لازم، کیفیت داشته باشد. اگر بیخودی برای آب‌طلا‌کاری کردن کدتان وقت بگذارید، شاید احساس کنید خیلی خفن هستید، اما عملا کار کاملا بی‌فایده‌ای انجام داده‌اید. باید برای خودتان مرزی مشخص کنید و بدانید که این محصول را دقیقاً تا چه حد خوب باید بسازید. پا از این مرز فراتر نگذارید. اگر بگذارید، درست کردن محصول هیچ‌وقت تمام نخواهد شد.

قرار نیست لازمش داشته باشید
«قرار نیست لازمش داشته باشید» (YouArentGonnaNeedIt یا YAGNI) اصلی در برنامه‌نویسی Extreme است که می‌گوید:

«هر چیزی را زمانی بسازید که واقعاً لازمش دارید، نه وقتی که پیش‌بینی می‌کنید لازمش داشته باشید.»

حتی اگر کامل کامل کامل مطمئن بودید که یک Feature را بعداً لازم خواهید داشت، الآن آن را نسازید.

دو دلیل برای اجرای اصل YAGNI وجود دارد:

در وقت صرفه‌جویی می‌کنید، چون دیگر کدی که لازم نیست را نمی‌نویسید.
کدتان بهتر می‌شود، زیرا آن را با «حدس‌»ها آلوده نمی‌کنید؛ حدس‌هایی که بعداً قرار است معلوم شود که اشتباه بوده‌اند، اما باز هم کسی حذفشان نخواهد کرد.

ساده‌ترین حالتی که ممکن است جواب بدهد را بسازید
برنامه‌نویسی Extreme دو قانون طلایی برای نوشتن کد ساده دارد:

یک ویژگی‌ جدید را در ساده‌ترین حالتی که ممکن است جواب بدهد، بسازید. یک عالمه فراساختار (Super structure) حیرت‌‌آور درست نکنید، کارهای تجملاتی و قشنگ‌قشنگ انجام ندهید. فقط کدی را بسازید که کار می‌کند. کدی بسازید که آزمایش‌های واحد (Unit Tests) برای Feature جدید (و همه Featureها، مثل همیشه) را با موفقیت پشت سر بگذارد.
این یکی بخش حیاتی قانون است: سیستم را طوری بازسازی کنید که در عین داشتن همه Featureها، ساده‌ترین کد ممکن باشد. با اجرا کردن قانون یکبار و فقط یکبار (OnceAndOnlyOnce) و دیگر قانون‌های کیفیت کد، سیستم را به تمیزترین حالت ممکنش تبدیل کنید.
یادتان باشد که قرار نیست سریع‌ترین راه را پیدا کنیم، بلکه قرار است به ساده‌ترین نتیجه برسیم. بنابراین، در قدم اول متد فعلی را به چند قسمت تقسیم می‌کنیم. با این کار Test Caseهای موجود همچنان اجرا می‌شوند. در قدم بعدی، سراغ یکی از متدهای کوچک‌تر می‌رویم و آن را طوری تغییر می‌دهیم (البته به شکل ساده) که Test Case بعدی انجام شود. همین روند را برای همه متدها ادامه می‌دهیم.

دفعه بعد که گیر کرده بودید، سراغ اردک حمام بروید
رفع باگ‌ها، حل مشکلات و پیدا کردن راه حل برای مسئله‌های بغرنج، از بخش‌های اساسی برنامه‌نویسی هستند. بنابراین یاد گرفتن تکنیک‌هایی برای به سلامت بیرون آمدن از بین باگ‌ها و bindها، همانقدر مهم است که یادگرفتن همه سینتکس‌ها.

و وقتی گیر کردید و هیچ چیز کار نمی‌کرد، سراغ اردک حمام بروید.

پس بروید و اردک حمام خودتان را پیدا کنید؛ چه همان اردک زردپوش کلاسیک باشد و چه اردکی که لباس دزد دریایی تنش است. اردکی را انتخاب کنید که با آن راحتید و با ویژگی‌های شخصیتی‌تان سازگار است.

شروع کنید؛ با او حرف بزنید، سوال بپرسید، مشکلاتتان را بلند برایش توضیح دهید، گره‌های توی ذهنتان را باز کنید و یک کد عالی تحویل بدهید.

همانطور که کریس پاین (Chris Pine) به خوبی گفته است:

«در برنامه‌نویسی مهم نیست که چه چیزی بلدید، مهم این است که جواب کدام مسئله‌ را می‌توانید پیدا کنید.»

ترجمه‌ای از:

۳ Amazing Ways To Write Simple Code, The Startup

منبع: https://bit.ly/2ooZy4f

چطور به عنوان یک مهندس نرم افزار یا برنامه نویس استخدام شویم؟

به عنوان یک فعال در زمینه مهندسی نرم‌افزار، یا به عنوان فردی که تازه فارغ التحیل شده است، یا به عنوان فردی که به برنامه‌نویسی علاقه دارد، همیشه برای شروع کار باید خاک خورد! اما چطور؟ در پست زیر به بررسی روند استخدام شدن به عنوان مهندس نرم افزار و یا برنامه‌نویس می‌پردازیم.

مسیر خود را مشخص کنید!

یک دید کلی از مسیر خود داشته باشید، حوزه نرم‌افزار بیش از حد انتظار شما پراکنده است، زمینه‌های زیادی وجود دارد که می‌توانید در آن فعالیت کنید:

زمینه برنامه‌نویسی وب ( Back-end و Front-end)
زمینه برنامه‌نویسی برای موبایل (Android, iOS)
زمینه برنامه‌نویسی شبکه
زمینه کار با داده (داده کاوی و…)
زمینه برنامه‌نویسی سیستم
و….

مشخص کنید به کدام حوزه برنامه‌نویسی علاقه دارید، اگر قصد شما تجربه است، حتما فعالیت در چند زمینه‌ای که بیشتر علاقه دارید را نادیده نگیرید!

عجله نکنید!

پیشرفت شغلی خود را فدای کار کردن در شرکت‌های نامناسب نکنید! اگر لازم هست مدت زیادی به کارآموزی در شرکت‌های بزرگ بپردازید (دو سال کارآموز بودن در گوگل بهتر از استخدام شدن در یک شرکت نا معتبر هست).

با شرکت‌های برتر حوزه خود آشنا شوید!

مطمئنا شرکت‌های زیادی وجود دارند که شما علاقه دارید داخل اونها کار کنید! اون شرکت‌ها رو هدف خود قرار دهید و رزومه‌ی خودتون رو برای آگهی‌های استخدام این شرکت‌ها ارسال کنید. با فرهنگ کاری و محیط این شرکت‌ها بیشتر آشنا بشید:

شرکت‌های برتر در حال استخدام ایران در جاب اینجا

کماکان یاد بگیرید!

اگر دانشجو بودید و الان فکر میکنید که خفن‌ترین برنامه‌نویس دنیا هستید اشتباه می‌کنید! تجربه‌کاری مهم‌ترین بخش زندگی حرفه‌ای یک برنامه‌نویس هست، شرکت‌ها و پروژه‌ها بیشتر از توانایی‌های فنی، به دنبال افرادی هستند که حل کننده مشکل باشد و بتواند با دیگران به خوبی ارتباط برقرار کند، سعی کنید هم در زمینه‌های فنی و هم در زمینه‌های مدیریتی و شخصیتی پیشرفت داشته باشین، برنامه‌نویس بودن بخشی از شغل آینده‌ی شماست. ارتباط با دیگران، رهبری و حل کردن مشکلات واقعی بخش بیشتری از آینده‌ی شغلی شما رو تشکیل میده، به طور کلی میشه گفت آینده‌ی شغلی یک برنامه‌نویس بیشتر از توانایی‌های فنی به توانایی‌های Problem Solving، رهبری و ایجاد ارتباط با دیگران وابسته است.

رزومه‌ مناسب یک برنامه‌نویس را داشته باشید!

از فرمت استاندارد و مناسب یک رزومه استفاده کنید، رزومه‌ی شما نباید بهم ریخته و از لحاظ گرافیکی نامناسب باشد، این اولین قدم است.

روی کار‌ها و مهارت‌هایی که بلد هستید مانور دهید، رزومه‌ی شما باید گویای مسیر آینده‌ی شما باشد، تمام تکنولوژی‌هایی که اسم آنها را شنیده‌اید در رزومه‌ی خود ذکر نکنید.

اطلاعات تحصیلی یا آموزشی خود را به دقت وارد کنید ولی روی آنها مانور بیش از حد ندهید، بر خلاف صنایع دیگر شرکت‌هایی که به دنبال استخدام برنامه‌نیس هستند، توجه زیادی به سوابق تحصیلی شما نمی‌کنند، بیشتر به استعداد و توانایی شما در یادگیری توجه می‌کنند.

مربی و منتور داشته باشید

حتما در کنار شما افرادی بوده‌اند که از نظر شما در زمینه‌ی برنامه‌نویسی و توسعه نرم‌افزار از مهارت و تجربه‌ی بالایی برخوردار بوده اند، از تجربه‌ی این دوستان در پیشرفت شغلی خود استفاده کنید، نظرات آن‌ها را به کار ببندید.

شانس خود را برای شرکت‌های مختلف امتحان کنید!

قطعا مهم‌ترین فاکتوری که باعث می‌شود شما زودتر به عنوان مهندس نرم افزار یا برنامه‌نویس استخدام شوید، ارسال درخواست همکاری به شرکت‌های بیشتر است، تعداد زیادی از شرکت‌ها به دنبال استخدام در زمینه برنامه‌نویسی هستند و در وبسایت‌ها (نظیر جابینجا) و شبکه‌های اجتماعی آگهی استخدام منتشر می‌کنن، این فرصت‌ها رو از دست ندید و رزومتون رو براشون ارسال کنید تا شانس استخدامتون افزایش پیدا کنه.

به‌ روز باشید و فعالیت داشته باشید!

با جدیدترین تکنولوژی‌های صنعت خود آشنا باشید، حداقل چند بلاگ مرتبط با حوزه خود در برنامه‌نویسی را دنبال کنید، با دیگران درباره‌ی اطلاعات جدیدی که کسب کرده‌اید بحث کنید، بیش از هر چیزی دیگری به خواندن کدهای دیگران در شبکه‌هایی مانند گیت‌هاب بپردازید و پروژه‌های جدید حوزه خود از طریق گیت‌هاب آشنا شوید و در توسعه‌ی اونها از طریق گیتهاب نقش داشته باشید، یک پروفایل گیت‌هاب پر پرو پیمون شاید بیشتر از هرچیز دیگه‌ای به استخدام شدن شما کمک کنه!

در زمان مصاحبه اشتیاق نشان دهید!

اگر از لحاظ فنی مورد تایید باشید، در زمان مصاحبه نگرش و اشتیاق شما چیزی است که باعث می‌شود نظر کارفرما نسبت به شما مثبت باشد.

فرصت شغلی برنامه‌نویسی در شهرستان

به عنوان شخصی که تازه فارغ التحصیل شده، شاید شما فرصت اینکه از شهرستان به تهران مهاجرت کنید را داشته باشید، مطمئنا پیشرفت شغلی شما سریع‌تر خواهد بود، اما این به این معنا نیست که در شهرهای دیگر (اصفهان، تبریز، رشت، مشهد، شیراز و…) فرصت برای پیشرفت نیست. شرکت‌های بزرگ زیادی بیرون از تهران همواره به دنبال پیدا کردن نیروهای با استعداد مخصوصا در زمینه برنامه‌نویسی هستند.

منبع: https://bit.ly/2kYkmy3

توسعه نرم افزاری چابک

توسعه نرم‌افزاری چابک یا Agile زمانی مطرح شد که بسیاری از پروژه‌های نرم افزاری یا تولید محصول با شکست مواجه می‌شدند. زمانبندی نا مناسب، کیفیت پایین در تولید نرم افزار، عدم ارتباط با مشتری، تحلیل نادرست نیازمندی‌ها، عدم بررسی کافی نرم افزار، از عمده‌ترین دلایل شکست پروژه‌های نرم افزاری بود.

در فوریه سال ۲۰۰۱، گروهی از توسعه‌دهنده نرم‌افزار دور هم جمع شدند تا تجربیات خود را از علل ناکامی پروژه‌های نرم افزاری به اشتراک بگذارند. آن‌ها معتقد بودند که این صنعت نیازمند یک تغییر اساسی در رویکرد توسعه نرم‎افزار است. آن‌ها برای توصیف رویکردی که اکنون به عنوان «توسعه چابک نرم‌افزار» شناخته می‌شود، مانیفستی برای توسعه چابک نرم‌افزار منتشر کردند که بر ۱۲ اصل استوار است:

۱. بالاترین اولویت، جلب رضایت مشتری با تحویل به موقع و مستمر نرم افزاری ارزشمند است.

۲. استقبال از تغییر نیازمندی‌ها، حتی در اواخر فرآیند توسعه. فرآیندهای چابک، تغییر را در جهت مزیتِ رقابتی مشتری مهار می‌کنند.
۳. تحویل به موقع بخش‏‎هایی از نرم‌افزار قابل استفاده (با فواصل زمانی کوتاه‌تر هفتگی نسبت به ماهانه)
۴. ذی نفعان کسب و کار و توسعه دهنده‌ها می‌بایست به صورت روزانه در طول پروژه با هم کار کنند.
۵. پروژه‌ها به دست افراد باانگیزه سپرده شود، فضا و امکانات لازم به آن‌ها داده شود تا کارها را به‌درستی انجام دهند.
۶. کارآمدترین و موثرترین روش انتقال اطلاعات به تیم توسعه و تبادل آن در میان اعضای تیم، گفتگوی چهره به چهره است.
۷. نرم افزار قابل استفاده، اصلی‌ترین معیار سنجش پیشرفت است.
۸. فرآیندهای چابک توسعه پایدار را ترویج می‌دهند؛ حامیان مالی، توسعه دهندگان و کاربران باید بتوانند سرعت پیشرفت ثابتی را برای مدت نامحدودی حفظ کنند.
۹. توجه مستمر به برتری فنی و طراحی خوب
۱۰. سادگی – هنر به حداکثر رساندن مقدار کار انجام نشده – ضروری است.
۱۱. گروه‌های خودسازمان‌دهی شده.
۱۲. انطباق با تغییرات و محدودیت‌ها به‌طور منظم.

متدولوژی Agile مجموعه روش‌هایی است که باعث می‌شود تا نرم‌افزار تولیدشده کاملاً با نیازهای مشتریان مطابقت داشته باشد. در این روش محصول به‌صورت فازبندی به مشتری تحویل داده می‌شود. درواقع مشتری با گروه پروژه کاملاً در ارتباط است. از دیدگاه این متدولوژی، مشتری یکی از مهم‌ترین افراد در تولید پروژه است، چراکه پروژه برای مشتری است و تنها کسی است که از نیازمندی‌های واقعی نرم‌افزار مطلع است. درنهایت باید گفت که محصول نهایی دقیقاً همان چیزی خواهد بود که مدنظر اوست.

اجایل (Agile) یا تفکر چابک مجموعه ای از ارزش‌ها و اصول معرفی‌شده است که با به کار بستن آن‌ها در محیط توسعه محصولات نرم‌افزاری می‌توان به نتایجی مانند محصولات کارآمد، مشتری خوشحال و نیروی کار باانگیزه دست‌یافت. با معرفی اجایل متدهایی مطرح شدند که اصول و ارزش‌های اجایل در آن‌ها نهادینه شده بود؛ از متدهای رایج و پرطرفدار توسعه چابک نرم‌افزار می‌توان به اسکرام اشاره نمود.

در اسکرام گروه‌ها با همکاری خود مشتری چند هفته یک‌بار یک خروجی از نرم‌افزار را بیرون می‌دهند و بازخورد ذینفعان را دریافت می‌کنند و طبق بازخوردها، محصول را در مسیر درست قرار می‌دهند و این‌گونه می‌شود که محصولات مشتری‌پسندی به وجود می‌آید.

منبع: https://bit.ly/2kgEqvt

Create A product first!

Create a product first please!