<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های امیر بصیری</title><link>https://virgool.ir/feed/@amir.basiri</link><description>یک برنامه نویس شیرازی</description><language>fa</language><pubDate>2026-11-11 06:29:42</pubDate><image><url>https://files.virgool.ir/upload/users/6791/avatar/tmXUdK.png</url><title>امیر بصیری</title><link>https://virgool.ir/@amir.basiri</link></image><item><title>ویروس کرونا COVID-19 چگونه منتشر می‌شود؟</title><link>https://virgool.ir/@amir.basiri/how-covid-19-spreads-bvwknilvwel4</link><description>این مطلب ترجمه یکی از مطالب سایت مرکز کنترل و پیشگیری بیماری‌های آمریکاس. میتونین اصل مقاله رو توی سایت خودشون با عنوان How COVID-19 Spreads پیدا کنین. و قطعاً مطالعه اصل مقاله و سایر مقالات مفیدی که درباره COVID-19 توی اون سایت وجود داره میتونه خیلی بیشتر به شما کمک کنه.بریم سراغ ترجمه مقاله.اطلاعاتی که درباره انتشار بیماری کرونا ویروس ۲۰۱۹ (COVID-19) در دسترس است، بیشتر بر اساس اطلاعاتی کرونا ویروس‌های مشابه است.انتشار نفر به نفرروش اصلی انتقال این ویروس به صورت شخص به شخص است.انتقال بین افرادی که در ارتباط نزدیک با هم هستند (کمتر از ۲ متر).از طریق ذرات تنفسی که در زمان سرفه یا عطسه در هوا منتشر می‌شود.این ذرات می‌تواند در دهان یا بینی افرادی که در فاصله نزدیک قرار دارد وارد شده و یا حتی وارد ریه آنها شوند.انتشار از طریق تماس با سطوح و اشیاء آلودهاحتمال انتقال COVID-19 از طریق تماس با یک سطح یا شیٔ که آلوده به ویروس باشد و سپس لمس کردن دهان، بینی، یا احتمالا چشم وجود دارد. اما این به عنوان روش اصلی انتشار محسوب نمی‌شود.چه زمانی انتشار اتفاق می‌افتد؟ریسک انتقال بیماری از افرادی که بیشترین علائم بیماری را دارند (بیمار ترین‌ها) در بیشترین حد است.احتمال انتقال ویروس به دیگران قبل از ظهور علائم بیماری در فرد نیز وجود دارد. گزارش‌هایی از انتقال کرونا ویروس جدید به این طریق ثبت شده است. اما این روش اصلی انتقال ویروس به حساب نمی‌آید.انتشار این ویروس چقدر سریع است؟سادگی انتقال یک ویروس از یک شخص به شخص دیگر می‌تواند متفاوت باشد. بعضی ویروس‌ها بسیار مسری هستند (مثل سرخک) در حالی که ویروس‌هایی نیز وجود دارند که کمتر مسری می‌باشند. فاکتور دیگر این است که آیا انتشار در طول نسل‌های مختلف ادامه دارد (اگر انتشار ویروس پایدار بماند). ویروسی که عامل COVID-19 است ظاهرا به راحتی و به صورت پایدار در استان Hubei چین و نقاط دیگر چین منتشر شده است. در ایالات متحده، انتقال نفر به نفر فقط بین تعداد کمی افراد نزدیک وجود داشته و تا امروز بیشتر منتشر نشده است.هنوز چیزهای زیادی باید آموختویروس COVID-19 یک ویروس جدید است و هنوز چیزهای زیادی درباره انتقال، شدت، و ویژگی‌های دیگر آن باید آموخت.پیشنهاد می‌کنم به هیچ وجه به اطلاعاتی که از طریق شبکه‌های اجتماعی به دست شما می‌رسد توجه نکنید. اطلاعات موثق را از منابع موثق مانند همین وب سایت مرکز کنترل و پیشگیری از بیماری‌های ایالات متحده و یا اگر وزارت بهداشت ایران منبع درست حسابی داره دریافت کنید.تقریبا همه مواردی که از طریق تلگرام و واتس اپ و اینستاگرام به دست شما میرسه غیر واقعی، ناقص و گمراه کننده هستند.اگر منبع درست حسابی سراغ دارین حتما توی کامنت‌های پست با من و بقیه به اشتراک بگذارید.</description><category>امیر بصیری</category><author>امیر بصیری</author><pubDate>Fri, 21 Feb 2020 13:31:25 +0330</pubDate></item><item><title>عادات برنامه نویسان موفق یا چگونه برنامه نویس بهتری شویم</title><link>https://virgool.ir/ACAPub/programming-habits-rabahxawmwx4</link><description>عادات زیربنای رفتار ما در شرایط مختلف زندگیند. آنها نقش مهمی در مسیر زندگی دارند. عادات خوب می‌توانند سبب موفقیت‌های بزرگ، سلامتی و شادی شوند و در کنار آنها عادات بد می‌توانند زمینه ساز بیماری، حال بد و شکست در زندگی باشند.شما که در حال مطالعه این مطلبید احتمالا برنامه نویس هستید و یا به برنامه نویسی علاقه دارید. حتما در طول روز زمان زیادی برای برنامه نویسی اختصاص میدین. در ادامه این مطلب هفت عادت موثر که باعث پیشرفت در برنامه نویسی می‌شوند را بررسی می‌کنیم.۱- کد تکراری ننویسیداگر در حال نوشتن کدی هستید که حس می‌کنید قبلا شبیه آن را نوشته‌اید، صبر کنید. دقیقا در شرایطی قرار دارید که باید از آن اجتناب کنید.کد تکراری برنامه را خراب می‌کند. کم کم تغییر دادن و اصلاح کد سخت‌تر می‌شود. هر بخش از کد را بخواهید اصلاح کنید، باید کل برنامه را جستجو کرده و هرجا که کد تکرار شده را تغییر دهید. به هر اندازه دقت کنید، باگ‌های کوچک و بزرگ کم کم در کدهای شما ظاهر خواهند شد.قانون DRY (Don&#39;t Repeat Yourself) را همیشه در نظر داشته باشید. نوشتن کد تکراری نشانه‌ای است برای اینکه متوجه شوید باید برنامه را ریفکتور کنید. کد و منطق برنامه را به بخش‌های کوچک تر تقسیم کنید و از آن بخش‌ها در جاهای مختلف که نیاز دارید استفاده کنید.۲- وقتی فکر می‌کنید کار تمام شده، ریفکتور کنیدخیلی از برنامه نویس‌ها، مخصوصا آنهایی که تازه کار هستند، فکر می‌کنند وقتی برنامه کار کند فرایند برنامه نویسی تمام شده. ولی برنامه نویسی فقط نوشتن کدی که کار کند نیست.حتما فکر می‌کنید، این کد که کار میکنه! منظورت چیه؟درسته، ولی حتما قبل از اینکه تسک بعدی رو شروع کنید ریفکتور کنین. پس از ریفکتور کردن خوانایی کد بهتر خواهد بود. احتمالا در لحظه اتمام کد نویسی حاصل کار بهترین و بهینه ترین کد ممکن نیست. از نظر خود شما برنامه‌ای که نوشتین خیلی واضح و سرراست است. ولی نظر بقیه برنامه نویس‌ها چیه؟ میتونن به راحتی کد شما رو متوجه بشن؟ریفکتور کردن پیچیدگی کد رو کاهش میده. همین کار کوچیک در دراز مدت نه تنها زمانی که واسه ریفکتور گذاشتین رو جبران می‌کنه بلکه زندگی شما رو به عنوان برنامه نویس راحت تر می‌کنه.۳- روی بیزنس تمرکز کنینبیشتر برنامه نویس‌ها انقدر روی استک و تکنولوژی برنامه نویسی و یادگیری اون تمرکز میکنن که بیزنس رو فراموش می‌کنن. توی مسیری که شروع کردین و سعی دارین که توی یک استک حرفه‌ای بشین بیزنس رو هم توی ذهنتون داشته باشید و بهش اهمیت بدین. باید بدونین که چرا یک محصول رو توسعه می‌دین.بعضی برنامه نویس‌ها فقط روی بخش تکنیکی کارشون تمرکز دارن. اونها اهمیتی به بزینس و فاکتورهای اقتصادی کارشون نمیدن.چیزی که الان روش کار می‌کنین آیا واقعا اهمیت داره و واسه کسب و کاری که توش هستین ارزش افزوده ایجاد می‌کنه یا اینکه فقط دارین وقت تلف میکنین و روی چیزی کار می‌کنین که اهمیتی نداره؟ این سوال مهمیه که باید از خودتون بپرسین.۴- کامیت‌های کوچککامیت‌های کوچک به برنامه نویس این امکان رو میده که توضیحات کاملی درباره کامیت در کامنتش بنویسه. مثلا «درست کردن چند مشکل» توضیحات کاملی برای یک کامیت نیست.اگر کامیت‌های کوچک تری داشته باشید دیباگ کردن کد هم ساده تر میشه. خیلی راحت تر می‌تونین به کامیت قبلی رول بک کنید و ببینین این اروری که ایجاد شده از این کامیت آخر بوده یا نه. وقتی کامیتی رو پیدا کردین که باگ رو ایجاد کرده کدهای زیادی نیست که باید بررسی کنین چون کامیت کوچیک بوده و کدها کم.کامیت‌های بزرگ پیامدهای بدی هم میتونن داشته باشن. چون حجم کد زیاده فهمیدن اینکه دقیقا چه اتفاقی افتاده هم سخت میشه.کسی که کد رو بررسی می‌کنه هم به مشکل میخوره. مرج کردن کد هم کار ترسناکی میشه. چون حجم کد زیادی قراره مرج بشه و ممکنه سیستم رو از کار بندازه.بررسی کد وقتی کامیت‌ها کوچیک تر هستن خیلی ساده تره زیرا در هر زمان میشه یک تغییر رو دید و دقیقا متوجه شد که چه کاری انجام شده.۵- ثبات نکته کلیدی استاگر تصمیم گرفتین متغیرها رو کمل کیس نام گذاری کنین روی همین تصمیمتون بمونین. اگر به جای تب از اسپیس استفاده می‌کنین روی همین تصمیم بمونین و اونو تغییر ندین. هر کاری که روی کدتون انجام میدین حداقل تا آخرش انجام بدین.وقتی که عدم ثبات داشته باشیم به مرور زمان برنامه به وضعیت غیر قابل کنترلی میرسه. افراد مختلف و تیم های جدید روی کد کار میکنن، هرچه این افراد بیشتر باشن و زمان بیشتری بگذره با یک آشفتگی و به هم ریختگی بیشتری در کد روبرو میشیم.خوب چکار کنیم که ثبات بیشتری داشته باشیم؟اولین کاری که باید انجام بدین اینه که یک استایل گاید انتخاب کنید. وقتی استایل گاید انتخاب شد به آن مقید باشید. می‌توانید از لینتر برای چک کردن کدها استفاده کنید.دومین کار نامگذاری یکنواخت است. متغیرها، متدها و کلاس‌ها باید به شکل مشخصی نام گذاری شوند. برای آشنایی بیشتر با روش‌های نام گذاری مقاله «راهنمای انتخاب نام برای برنامه نویسان!» را بخوانید.۶- همون بار اول کد رو تموم کنینبعدا درستش می‌کنم! قبلا همه ما این جمله رو شنیدیم. همه هم میدونیم چقدر بعدا درستش می‌کنیم. هیچ وقت. هروقت که یک کامنت TODO میبینین یعنی یک نفر همون بار اول کار رو انجام نداده و یک مقدار از کارش مونده.وقتی یک تسک رو شروع می‌کنین، انقدر روش کار کنین تا تموم بشه.حالا تموم شدن یعنی چی؟یعنی کد شما واسه شروع باید ریفکتور شده باشه. کد باید تست شده باشه و تست کردن هم واسه اکثر دولوپرها قسمت بدشه. ولی تست کردن فقط این نیست که یک سناریوی معمول رو که خیلی راحته، کلیک کنین برین جلو. مطمئن بشین سناریوهای دیگه رو هم تست می‌کنین. اگه میخواین کار بیشتری انجام بدین تست هم بنویسین.چیزی که میمونه داکیومنته. این ویژگی داکیومنت میخواد؟ به مسئول تست اطلاع دادین که این فیچر رو میشه تست کرد؟ آیا پیش نیازهایی واسه این ویژگی هست که لازم باشه مسئول تست بدونه؟۷- هیچ وقت از یادگیری دست نکشیدتکنولوژی ها هر روز در حال تغییرند. بعضی وقت‌ها خیلی سخت به نظر میرسه که بتونیم خودمون رو به تکنولوژی های روز برسونیم. پس هیچ وقت نباید از یادگیری دست بکشید. زیرا روزی که یادگیری رو ول کنین روزیه که پیشرفتتون متوقف میشه.یادگیری چیزهای جدید تنها راهیه که بتونیم در این عصر توسعه و پیشرفت سرسام آور، توانایی‌های خودمون رو بروز و بدرد بخور نگهداریم.هیچ وقت رشد نخواهید کرد، مگر اینکه سعی کنید کاری فراتر از چیزی که الان در آن استادید انجام دهید. «رالف والدو»</description><category>امیر بصیری</category><author>امیر بصیری</author><pubDate>Mon, 27 Jan 2020 09:45:17 +0330</pubDate></item><item><title>راهنمای انتخاب نام برای برنامه نویسان!</title><link>https://virgool.ir/@amir.basiri/meaningful-names-in-programming-lpsf7drjrby0</link><description>مقدمهنام‌ها در همه بخش‌های برنامه استفاده می‌شوند. نام متغیرها، کلاس‌ها، فولدرها و فایل‌ها. ما در برنامه به دفعات از نام‌های مختلف استفاده می‌کنیم. به همین دلیل است که باید سعی کنیم به بهترین شکل نام گذاری‌ها را انجام دهیم.این مطلب برگرفته از فصل دوم کتاب Clean Code نوشته رابرت مارتین است. بعضی قسمت‌ها ترجمه شده بعضی قسمت‌ها هم خلاصه شده. نمونه کدهای موجود در این کتاب به زبان جاوا نوشته شده. اما کدهای موجود در این مقاله به زبان PHP نوشته شده‌اند. کدهای زبان جاوا هم در خود کتاب موجود هستند و می‌توانید هر زمان نیاز داشتید به آنها مراجعه کنید.از نام‌هایی استفاده کنید که مقصود را بیان کنندبرای هر چیزی (متغیر، تابع، کلاس و …) باید یک نام انتخاب کنید. برای انتخاب نام با صرف وقت و دقت زیاد، گزینه‌ای را انتخاب کنید که به بهترین شکل نشان دهنده هدف و کاربرد صاحب نام باشد. مطمئن باشید با صرف وقت بیشتر و انتخاب نام‌های مناسب، در آینده و در هنگام نگهداری محصول زمان بیشتری صرفه جویی خواهد شد. به نام‌ها اهمیت داده و هرگاه نام بهتری پیدا کردید آنها را عوض کنید.نام یک متغیر، تابع و یا کلاس باید پاسخ تمامی سوال‌های اساسی درباره آن باشد. اگر نامی انتخاب کردید که نیاز به توضیحات دارد تا خواننده متوجه کاربردش شود حتما آن را عوض کنید.$d = 10; // elapsed time in daysاین اسم هیچ مفهومی ندارد و هدف را نمایان نمی‌کند. باید نامی انتخاب کنیم که مشخص کند با چه سنجه‌ای اندازه چه چیزی را در این متغیر ذخیره کرده‌ایم:$elapsedTimeInDays = 10;&#xA;$daysSinceCreation = 10;&#xA;$daysSinceModification = 10;&#xA;$fileAgeInDays = 10;نام مناسب فهم و تغییر کد را آسان می‌کند. کد زیر را بخوانید:public getThem(): array {&#xA;    $list1 = [];&#xA;    foreach ($this-&gt;theList as $x) {&#xA;        If ($x[0] == 4) {&#xA;            array_push($list1, $x);&#xA;        }&#xA;    }&#xA;    return $list1;&#xA;}به نظر شما این کد چه کاری انجام می‌دهد؟ با اینکه این برنامه بسیار ساده است، کدها تو رفتگی درستی دارند و تعداد متغیرها زیاد نیست ولی درک آن سخت است. مشکل در اینجا سادگی کد نیست. مشکل این است که این کد در متن خود به صورت صریح و واضح کاربردش را به برنامه نویس منتقل نمی‌کند.در صورتی که این کد به وضوح در محتوا کاربردش را منتقل کند. برنامه نویس بعد از مرور آن باید بتواند به سوال‌های زیر پاسخ دهد:در theList چه چیزی قرار دارد؟اندیس 0 در اعضای این لیست چه اهمیتی دارد؟مفهوم عدد ۴ چیست؟چگونه از لیستی که برگشت داده شده استفاده کنیم؟فرض کنید این برنامه قسمتی از بازی کشتی مین جمع کن است. در اینصورت اگر بورد بازی لیستی از سلول‌ها باشد که در اینجا theList نامگذاری شده. می‌توانیم نام آن را به gameBoard تغییر دهیم. هر سلول بورد با یک آرایه مشخص شده که اولین عنصر آن وضعیت سلول را نشان می‌دهد و وضعیت ۴ به معنی نشانه گذاری شده است. در اینصورت قطعه کد قبلی به شکل زیر تغییر خواهد کرد.public getFlaggedCells(): array {&#xA;    $flaggedCells = [];&#xA;    foreach ($this-&gt;gameBoard as $cell) {&#xA;        If ($cell[self::STATUS_VALUE] == self::FLAGGED) {&#xA;            array_push($flaggedCells, $cell);&#xA;        }&#xA;    }&#xA;    return $flaggedCells;&#xA;}هنوز می‌توانیم با نوشتن یک کلاس برای سلول‌ها این کد را بهینه‌تر کنیم. در صورت استفاده از این کلاس کد ما هم به شکل زیر تغییر خواهد کرد.public getFlaggedCells(): array {&#xA;    $flaggedCells = [];&#xA;    foreach ($this-&gt;gameBoard as $cell) {&#xA;        If ($cell-&gt;isFlagged()) {&#xA;            array_push($flaggedCells, $cell);&#xA;        }&#xA;    }&#xA;    return $flaggedCells;&#xA;}با همین تغییرات جزئی فهمیدن این کد ساده‌تر شد. همین فهم آسان تر کد به ما نشان می‌دهد که انتخاب نام‌های مناسب چه اهمیتی در برنامه نویسی دارد.از ارائه اطلاعات غلط اجتناب کنیددقت کنید به اشتباه از کلماتی که معانی متفاوتی از آنچه مدنظر شماست دارند استفاده نکنید. به عنوان مثال hp، aix و sco نام‌های مناسبی نیستند. به این دلیل که هرکدام نام یک پلتفرم یونیکس است. مثلا اگر نام وتر مثلث قائم الزاویه (hypotenuse) را در برنامه خود خلاصه کرده و hp بگذارید. احتمالا همکاران خود را گمراه خواهید کرد.اسم یک گروه از حساب‌ها را accountList نگذارید. کلمه list معنی خاصی برای برنامه نویسان برخی زبان‌های برنامه نویسی مانند جاوا دارد. اگر این accountList یک list واقعی با مفهوم رایج آن در زبان برنامه نویسی نباشد می‌تواند آنها را گمراه کند. در نتیجه استفاده از نام‌هایی مانند accountGroup یا bunchOfAccounts یا حتی فقط accounts بهتر است.از نام‌های طولانی که فقط اختلاف‌های جزئی دارند پرهیز کنید. به عنوان مثال چقدر زمان لازم است تا متوجه تفاوت متغیری با نام XYZControllerForEfficientHandlingOfStrings از متغیر دیگری با نام XYZControllerForEfficientStorageOfStrings در یک برنامه شوید؟نامگذاری هماهنگ مفاهیم مشابه در واقع ارائه اطلاعات مفید به دیگران است. در مقابل استفاده از املای متفاوت اطلاعات غلط است. محیط‌های برنامه نویسی در زمان تایپ قسمتی از نام یک لیست پیشنهادی برای تکمیل آن ارائه می‌دهند. در زمان انتخاب نام برای مفاهیم مشابه دقت کرده و الگوی یکسانی را رعایت کنید. به صورتی که در هنگام ارائه پیشنهاد توسط محیط برنامه نویسی همه نام‌هایی که مربوط به یک مفهوم هستند در کنار یکدیگر نشان داده شوند. در عین حال تفاوت آشکاری هم بین نام‌ها وجود داشته باشد تا بتوانید با یک نگاه سریع نام مورد نظر را در لیست پیدا کنید.یک مثال بد از نام‌هایی که اطلاعات غلط می‌دهند استفاده از حرف ال کوچک (l) و یا او بزرگ (O) برای نام متغیر است. مخصوصا در کنار یکدیگر. این دو حرف خیلی شبیه صفر و یک انگلیسی می‌باشند.$a = $l;&#xA;if ( $O == $l ) {&#xA;    $a = $O1;&#xA;} else {&#xA;    $l = 01;&#xA;}نام‌ها باید تفاوت‌های با معنی داشته باشندواضح است که امکان وجود دو متغیر با نام مشابه در برنامه وجود ندارد. در برخی شرایط ممکن است وسوسه شوید که نام یک متغیر را برای ایجاد تفاوت با غلط املایی انتخاب کنید، یا از یک یا چند عدد در نام آن استفاده کنید. شاید حتی کلمه اضافه و بی معنی به نام آن بیفزایید. با این کار مفسر یا کامپایلری بدون خطا کد شما را اجرا یا کامپایل می‌کند. ولی اگر در شرایطی قرار گرفتید که به نام‌های متفاوت نیاز داشتید از این روش‌ها استفاده نکنید. باید نام‌هایی انتخاب کنید که معنی آنها با هم متفاوت بوده و تفاوت با معنایی ایجاد کنند.یک نمونه دیگر سری متغیرهایی هستند که با اعداد مشخص می‌شوند، این متغیرها نه تنها اطلاعات غلط به خواننده کد نمی‌دهند بلکه اصلا اطلاعاتی درباره هدف برنامه نویس در آنها وجود ندارد. به مثال زیر توجه کنید:public static copyChars(array $a1, array $a2): void {&#xA;    for ($i = 0; $i &lt; count($a1); i++) {&#xA;        $a2[$i] = $a1[$i];&#xA;    }&#xA;}اگر به جای a1 و a2 از destination و source استفاده کنیم، این کد خوانایی بیشتری خواهد داشت.برای تمایز نام‌ها بدون هدف یک کلمه به آنها اضافه نکنید. فرض کنید کلاسی با نام Product داریم. اگر کلاس‌های دیگری با نام‌های ProductData یا ProductInfo درست کرده‌اید، در واقع تفاوت در نام‌ها ایجاد کرده‌اید ولی معنی آنها با هم فرقی ندارند. در اینجا Data و Info کلماتی مانند a، an و the بوده و تفاوت معنایی خاصی ایجاد نمی‌کنند.اما درباره استفاده از پیشوند‌هایی مانند a و the به خاطر داشته باشید. تا زمانی که این گونه پیشوندها تفاوت معنا داری ایجاد می‌کنند استفاده از آنها اشکالی ندارد. مثلا ممکن است از a برای متغیرهای محلی و the برای آرگومان‌های تابع استفاده کنید. زمانی استفاده از آنها اشکال دارد که یک متغیر را theZork نامگذاری کنید به دلیل اینکه متغیر دیگری به نام zork دارید.کلماتی مانند موارد ذکر شده در بالا در برنامه زائد هستند. هیچ وقت از کلمه variable در نام متغیر استفاده نکنید. از table در نام جدول استفاده نکنید. آیا nameString بهتر از name است؟ به نظر شما امکان دارد name یک عدد اعشاری باشد؟ حتی اگر name یک عدد اعشاری باشد، آنگاه قوانین ذکر شده درباره اطلاعات غلط را زیر پا گذاشته‌ایم. اکنون فرض کنید یک کلاس با نام customer و یکی با نام customerObject داریم. تفاوت اینها چیست؟کدامیک مسیر بهتری برای رسیدن به تاریخچه سفارشات مشتری است؟به برنامه دیگری فکر کنید که توابع زیر در آن تعریف شده‌اند:getActiveAccount();&#xA;getActiveAccounts();&#xA;getActiveAccountInfo();چگونه یک برنامه نویس در این پروژه بداند کدام تابع را صدا بزند؟بدون وجود یک روتین مشخص متغیر moneyAmount و money، customerInfo و customer ، accountData و account ، theMessage و message با هم تفاوتی ندارند. نام‌ها را به گونه‌ای انتخاب کنید که خواننده متوجه شود هر کدام چه ویژگی‌ها و تفاوت‌هایی با دیگری دارند.از نام‌های قابل بیان استفاده کنیداگر برای متغیرها نام‌هایی انتخاب کنید که قابل بیان نباشند. هنگام صحبت درباره آنها و بردن نامشان مجبورید صداهای عجیب و غریبی ایجاد کنید!برنامه نویسی یک فرایند اجتماعی است که در طول آن با هم‌تیمی‌های خود مبادله اطلاعات خواهید کرد پس حتما کدتان را به شکلی بنویسید که بتوانید درباره آن صحبت کنید.دو کد زیر را مقایسه کنید:class DtaRcrd102 {&#xA;    private $genymdhms;&#xA;    private $modymdhms;&#xA;    private $pszqint = &#34;102&#34;;&#xA;    /* ... */&#xA;}وclass Customer {&#xA;    private $generationTimestamp;&#xA;    private $modificationTimestamp;;&#xA;    private $recordId = &#34;102&#34;;&#xA;    /* ... */&#xA;}شما ترجیح میدهید درباره کد دوم با همکار خود صحبت کنید یا کد اول؟از نام‌های قابل جستجو استفاده کنیداز به کار بردن نام‌های تک حرفی و ثابت‌های عددی اجتناب کنید. جستجوی این نام‌ها در برنامه بسیار سخت است. پیدا کردن Max_CLASSES_PER_STUDENT در برنامه بسیار ساده تر از عدد 7 است. ممکن است با جستجوی 7 هر چیزی ممکن است به عنوان جواب جستجو پیدا شود. حتی نام فایلی که این کاراکتر را در خود دارد.استفاده از یک حرف مثل e هم به عنوان نام متغیر همین مشکل را بوجود می‌آورد. با جستجوی این حرف ممکن است صدها کلمه که شامل این حرف هستند به عنوان نتیجه جستجو در متن برنامه به شما نمایش داده شود.شما می‌توانید متغیرهای یک کاراکتری را فقط به عنوان متغیر محلی در متدهای کوتاه استفاده کنید. اگر متغیر یا ثابتی در جاهای مختلف کد استفاده می‌شود. بهتر است یک نام قابل جستجو برای آن انتخاب کنید. باز هم مقایسه کنید:for ($j=0; $j&lt;34; $j++) {&#xA;    $s += ($t[$j]*4)/5;&#xA;}و$realDaysPerIdealDay = 4;&#xA;const WORK_DAYS_PER_WEEK = 5;&#xA;$sum = 0;&#xA;for ($j=0; $j &lt; NUMBER_OF_TASKS; $j++) {&#xA;    $realTaskDays = $taskEstimate[$j] * $realDaysPerIdealDay;&#xA;    $realTaskWeeks = ($realdays / WORK_DAYS_PER_WEEK);&#xA;    $sum += $realTaskWeeks;&#xA;}در این برنامه sum شاید نام خوبی نباشد ولی حداقل قابل جستجو است. برنامه‌ای که نام‌گذاری‌های بهتری دارد طولانی تر است. اما دقت کنید که پیدا کردن WORK_DAYS_PER_WEEK در برنامه چقدر از پیدا کردن همه مکان‌هایی که عدد 5 با معنی مورد نظر ما استفاده شده، راحت تر است.از رمزگذاری اجتناب کنیدنام‌ها نباید با اطلاعاتی درباره نوع یا اسکوپ ترکیب و نشانه گذاری شوند. پیشوند‌هایی مثل _m یا f در برنامه‌هایی که امروزه نوشته می‌شوند کاربردی ندارند. همچنین کدگذاری نام‌ها با زیرسیستم یا نام پروژه هم کار اشتباهیست. به عنوان مثال ممکن است وسوسه شوید در یک سیستم کار با تصاویر که تیم شما با نام visual imaging system آن را می‌شناسند از پیشوند vis_ در همه نام‌ها استفاده کنید.از استفاده از نماد مجارستانی هم اجتناب کنید. استفاده از این نماد‌ها در گذشته بسیار رایج بوده ولی اکنون نیازی به آنها نداریم.در اینترفیس‌ها و پیاده سازی آنها هم این مسئله رایج است که به عنوان مثال برنامه نویس نام اینترفیس را با پیشوند I انتخاب می‌کند. این پیشوند لازم نیست حتی اگر در شرایط خاصی مجبور شدید در اینترفیس و یا پیاده سازی آن کدگذاری کنید این کار را در نام پیاده سازی انجام دهید.برای مثال نام اینترفیس را ShapeFactory بگذارید  و نام پیاده سازی را ShapeFactoryImp.از نگاشت ذهنی اجتناب کنیدوقتی برای نامگذاری از کلمات آشنا در ادبیات حوزه مسئله یا پاسخ آن استفاده نکنید. خواننده کد شما مجبور است نام انتخابی شما را در ذهن خود به سختی به خاطر بسپارد. اما با استفاده از کلمات آشنا در حوزه مسئله به خاطر سپردن آنها را برای همکاران خود ساده‌تر خواهید کرد.متغیرهای یک کاراکتری هم این مشکل را در برنامه بوجود می‌آورند. از متغیرهای تک کاراکتری فقط در حلقه‌های کوچک و چند خطی استفاده کنید.نام کلاس‌هااسم کلاس باید یک نام باشد مانند Customer، WikiPage، Account و AddressParser. از کلماتی مانند Manager، Processor، Data یا Info در نام کلاس استفاده نکنید. از افعال هم برای اسم کلاس استفاده نکنید. دلیل آن را در بخش بعد متوجه خواهید شد.نام متدهانام متدها باید فعل باشد مثل postPayment، deletePage یا save. اکسسورها، mutatorها و predicateها باید بر اساس محتوا و با پیشوندهای  get، set و is نامگذاری شوند.$name = $employee-&gt;getName();&#xA;$customer-&gt;setName(&#34;mike&#34;);&#xA;if ($paycheck-&gt;isPosted())...خوشمزه بازی در نیاریداگر از اسامی بامزه برای متغیر، تابع، کلاس و … استفاده کنید. فقط افرادی که شوخ طبعی شما را درک می‌کنند و از آنچه در ذهن شما می‌گذرد اطلاع دارند معنی آنها را متوجه می‌شوند. مثلا HollyHandGranade چکار می‌کند؟ اگر قرار است این نام تابعی باشد که چیزی را پاک می‌کند بهتر نیست نام آن را DeleteItems بگذاریم؟ باید همیشه واضح بودن معانی را به جنبه تفریحی نامی که انتخاب می‌کنیم اولویت دهیم. در یک جمله می‌توانیم بگوییم:Say what you mean, mean what you say.برای هر مفهوم یک کلمه انتخاب کنیدبرای هر مفهوم انتزاعی یک کلمه انتخاب کنید و از آن به بعد از همان کلمه برای آن مفهوم استفاده کنید. به عنوان مثال اگر در کلاس‌های مختلف برنامه برای مفهوم دریافت اطلاعات از fetch، retrieve و get استفاده کنید. کسی که برنامه را مطالعه می‌کند احتمالا گیج خواهد شد. از کجا به خاطر خواهید داشت که در کدام کلاس برای گرفتن دیتا از get استفاده کرده‌اید و در کدام کلاس از fetch؟ یا باید همیشه به یاد داشته باشید که چه کسی یا گروهی آن قسمت از کد را نوشته‌اند و از چه کلماتی استفاده کرده‌اند. یا وقت ارزشمند را به مرور کدها اختصاص دهید.همچین اگر یک controller،  یک manager  و یک driver  در یک برنامه  دارید، تفاوت بین آنها چیست؟فرق بین DeviceManager و ProtocolController چیست؟ چرا هردو کنترلر و یا منجر نیستند؟از یک کلمه برای دو مفهوم استفاده نکنیداگر در کلاس‌های مختلف از نام‌های مشابه برای مفاهیم مشابه استفاده کرده‌اید. تا زمانی لیست پارامترها و مقدار بازگشتی متد های هم اسم از نظر مفهومی شبیه هم باشند مشکلی نخواهید داشت. در غیر اینصورت از نام دیگری استفاده کنید. برای مثال ممکن است در برنامه از نام add برای جمع کردن یا چسباندن دو مقدار به هم و بوجود آوردن یک مقدار جدید در جاهای مختلف استفاده کرده باشیم. اما در یک کلاس متدی داریم که یک ورودی گرفته و آن را به یک آرایه اضافه می‌کند. باید آن را هم add بنامیم؟ شاید به نظر بیاید که به دلیل اینکه در خیلی کلاس‌های دیگر برنامه از این کلمه استفاده کرده‌ایم کلمه مناسبی باشد. ولی مفهوم آن در این کلاس فرق دارد و بهتر است از نام‌هایی مانند insert یا append استفاده کنیم.از ادبیات راه حل مساله برای نام گذاری استفاده کنیدکسانی که کد را می‌خوانند برنامه نویس هستند، پس از واژگان علوم کامپیوتری استفاده کنید. نام الگوریتم‌ها، نام پترن‌ها و … همه نام‌ها را از ادبیات خود مساله انتخاب نکنید تا همکارانتان مجبور نشوند از مشتری معنی تمام نامها را بپرسند.نام AccountVisitor برای برنامه نویسی که با پترن ویزیتور آشناست معنی خاصی دارد. کدام برنامه نویسی نمیداند JobQueue چیست؟  اگر بخواهیم خلاصه بگوییم،  برای کارهای تکنیکال نام تکنیکال انتخاب کنید.از ادبیات خود صورت مسئله برای نام گذاری استفاده کنیدوقتی واژه تخصصی برنامه نویسی برای موضوعی که می‌خواهید وجود ندارد از واژگانی در دامنه مسئله استفاده کنید. در اینصورت سایر برنامه نویسان اگر مفهوم نامی که انتخاب کرده‌اید را متوجه نشوند و شما هم در دسترس نباشید می‌توانند از ذینفعان پروژه معنی آن را بپرسند.محتوای با معنی اضافه کنیداگر نام‌ها به تنهایی بی معنی هستند. باید آنها را در متن قرار دهیم تا معنی به خوبی منتقل شود با انتخاب نام‌های خوب برای کلاس‌ها، توابع یا namespace ها این را می‌توانید به بهترین شکل انجام دهید. اگر نتوانستید این روش را هم انجام دهید تنها راه باقی مانده استفاده از پیشوند‌ها خواهد بود.تصور کنید  در یک برنامه متغیرهایی با نام‌های  firstName، lastName، street، city، state و zipcode وجود دارد. اگر همه را با هم در نظر بگیریم واضح است که یک آدرس را تشکیل می‌دهند.  ولی اگر در یک متد  فقط متغیر state را مشاهده کنید چطور؟ آیا باز هم بلافاصله نتیجه می‌گیرید که این هم یک قسمت از آدرس است؟در اینگونه موارد می‌توانید پیشوند مناسبی به نام‌ها اضافه کنید.  addrFirstName ، addrLastName ، addrState و …. با این روش حداقل خواننده متوجه می‌شود که این متغیرها قسمتی از یک ساختار بزرگتر هستند. البته راه حل بهتری هم وجود دارد و آن درست کردن یک کلاس با نام Address است. با این کار کامپایلر هم متوجه می‌شود که متغیرها متعلق به مفهوم بزرگتری هستند.تابع زیر را مشاهده کنید. نام تابع قسمتی از مفهوم را بیان می‌کند. بقیه محتوا را باید با مطالعه الگوریتم دریابیم. با مطالعه تابع متوجه می‌شوید که سه متغیر number ،verb و pluralModifier قسمتی از پیغامی هستند که تابع چاپ می‌کند. متاسفانه محتوا و مفهوم تابع باید با مطالعه آن استنباط شود و در ابتدا معنی نام متغیرها واضح نیست.private function printGuessStatistics(string $candidate, int $count): void&#xA;{&#xA;    if ($count == 0) {&#xA;        $number = &#34;no&#34;;&#xA;        $verb = &#34;are&#34;;&#xA;        $pluralModifier = &#34;s&#34;;&#xA;    } elseif ($count == 1) {&#xA;        $number = &#34;1&#34;;&#xA;        $verb = &#34;is&#34;;&#xA;        $pluralModifier = &#34;&#34;;&#xA;    } else {&#xA;        $number = $count;&#xA;        $verb = &#34;are&#34;;&#xA;        $pluralModifier = &#34;s&#34;;&#xA;    }&#xA;    echo &#34;There $verb $number {$candidate}{$pluralModifier}&#34;;&#xA;}این تابع بلند است و متغیرها در کل تابع پخش شده‌اند. برای اینکه تابع را به بخش‌های کوچک‌تر تقسیم کنیم. باید کلاسی با نام GuessStatisticsMessage درست کنیم و متغیرها را در آن کلاس تعریف کنیم. این کار باعث می‌شود متغیرها در متن کلاس مفهوم واضحی داشته باشند. هر برنامه نویسی که کد را بخواند متوجه می‌شود که این متغیرها بخشی از GuessStatisticsMessage می‌باشند. بهبود محتوا الگوریتم را هم بهبود بخشیده و آن را به توابع کوچکتری تقسیم خواهد کرد. در ادامه نسخه بهبود یافته کد بالا را مشاهده کنید.class GuessStatisticsMessage&#xA;{&#xA;    private $number;&#xA;    private $verb;&#xA;    private $pluralModifier;&#xA;    public function make(string $candidate, int $count): string&#xA;    {&#xA;        $this-&gt;createPluralDependentMessageParts($count);&#xA;        return &#39;There &#39;.$this-&gt;verb.&#39; &#39;.$this-&gt;number.&#39; &#39;.$candidate.$this-&gt;pluralModifier;&#xA;    }&#xA;    private function createPluralDependentMessageParts(int $count): void&#xA;    {&#xA;        if ($count == 0) {&#xA;            $this-&gt;thereAreNoLetters();&#xA;        } elseif ($count == 1) {&#xA;            $this-&gt;thereIsOneLetter();&#xA;        } else {&#xA;            $this-&gt;thereAreManyLetters();&#xA;        }&#xA;    }&#xA;    private function thereAreManyLetters(int $count): void&#xA;    {&#xA;        $this-&gt;number = $count;&#xA;        $this-&gt;verb = &#34;are&#34;;&#xA;        $this-&gt;pluralModifier = &#34;s&#34;;&#xA;    }&#xA;    private function thereIsOneLetter(): void&#xA;    {&#xA;        $this-&gt;number = &#34;1&#34;;&#xA;        $this-&gt;verb = &#34;is&#34;;&#xA;        $this-&gt;pluralModifier = &#34;&#34;;&#xA;    }&#xA;    private function thereAreNoLetters(): void&#xA;    {&#xA;        $this-&gt;number = &#34;no&#34;;&#xA;        $this-&gt;verb = &#34;are&#34;;&#xA;        $this-&gt;pluralModifier = &#34;s&#34;;&#xA;    }&#xA;}محتوای بی فایده اضافه نکنیددر یک برنامه فرضی با نام Gas Station Deluxe شروع نام همه کلاس‌‌ها با GSD ایده مناسبی نیست. در این صورت با تایپ G برنامه IDE که استفاده می‌کنید لیست بلند بالایی از تمامی کلاس‌های برنامه به شما می‌دهد. با این کار در واقع کاری کرده‌اید که IDE نتواند به صورت مناسبی به شما کمک کند.فرض کنید یک کلاس MailingAddress در ماژول حسابداری GSD نوشته‌اید و نام آن را GSDAccountAddress گذاشتید. بعدا آدرس پستی مشتری را هم برای قسمت تماس با مشتری نیاز دارید. آیا نام آن را GSDCustomerAddress می‌گذارید؟ از ۱۸ کاراکتر آن ۱۰ کاراکتر تکراری یا غیر مرتبط است.نام‌های کوتاه تر تا زمانی که واضح باشند بهتر از نام‌های بلند می‌باشند.نام‌هایی مانند accountAddress و customerAddress برای دو آبجکت از کلاس Address مناسب ولی برای نام یک کلاس مناسب نیستند. برای کلاس Address مناسب تر است. اگر لازم باشد بین مک آدرس، آدرس پورت و آدرس وب تفاوتی ایجاد کنیم این نام‌ها را در نظر بگیریم بهتر است. PostalAddress ، MAC و URI.سخن نهاییسخت ترین قسمت نام گذاری انتخاب نام خوب است. زیرا توانایی توصیف و حتی پیش زمینه فرهنگی می‌خواهد. افراد حتی از تغییر نام می‌ترسند اما واقعا دلیلی برای ترس وجود ندارد. این تغییرات همواره در جهت بهبود برنامه بوده و مطمئن باشید در آینده همه تیم از شما تشکر خواهند کرد.این را هم در نظر بگیرید که همه پیشنهادهای مطرح شده در این مقاله حاصل تجربه و نظرات رابرت مارتین است. تیم شما با توجه به تجربه و شرایط متفاوتی که دارد ممکن است تصمیمات متفاوتی بگیرد و لزوما این تصمیمات اشتباه نخواهند بود. اما به نظر من قطعا رابرت مارتین تجربه بیشتری نسبت ما دارد و می‌توان به وی اعتماد کرد. نظر شما چیست؟</description><category>امیر بصیری</category><author>امیر بصیری</author><pubDate>Tue, 13 Aug 2019 00:47:47 +0430</pubDate></item><item><title>بهبود رتبه الکسا در کمتر از ۳۰ روز!</title><link>https://virgool.ir/@amir.basiri/improve-alexa-rank-in-less-than-30-days-e1cwxpxpm9hk</link><description>از زمانی که این مطلب نوشته شده بیش از دو سال گذشته، ولی هنوز هم میتونیم با رعایت این اصول نتیجه بگیریم. امیدوارم برای شما هم مفید باشه.همانطور که همیشه شنیده‌ایم، اعداد دروغ نمی‌گویند! وقتی درباره ارزش و موقعیت یک کسب و کار صحبت می‌کنیم این آمار و ارقام هستند که حرف اول را می‌زنند. آمار و ارقامی که گاهاً فقط در اختیار صاحبان کسب و کار می‌باشند. اما در این میان اطلاعاتی هم درباره هر کسب و کار تحت وب وجود دارد که به صورت عمومی منتشر می‌شوند. یکی از معیارهایی که درباره هر وب سایت می‌توانید به آن توجه کنید، رتبه الکسا است.چرا؟ به این دلیل که رتبه الکسا یکی از شاخص‌هایی است که سرمایه گذاران جهت تعیین وضعیت کسب و کار شما آن را مد نظر قرار می‌دهند.آنها از رتبه الکسا جهت تعیین سلامت و روند رشد کسب و کار شما استفاده می‌کنند.البته این تنها مزیت رتبه الکسای خوب نیست. رتبه خوب الکسا نشان دهنده آن است که وب سایت شما در شرایط خوبی بسر می‌برد.این رتبه هرچه نزدیک تر به عدد یک باشد بهتر است.به دلایل ذکر شده، رتبه الکسا برای مدیران وب‌سایت‌ها اهمیت فراوانی دارد، و همواره سعی در بهبود آن دارند.در این پست درباره دو موضوع کلیدی صحبت خواهم کرد:اول درباره فاکتورهایی که الکسا در زمان تعیین رتبه از آنها استفاده می‌کند.دوم یک استراتژی عملیاتی که می‌تواند در کمتر از ۳۰ روز رتبه الکسای وب سایت شما را بهبود بخشد.و اکنون اصل مطلب:رتبه الکسا چیست؟ابتدا بهتر است تعریفی از رتبه الکسا و روش محاسبه آن داشته باشیم.بر اساس تعریف وب سایت Avangate الکسا «یک سیستم رتبه بندی است که توسط alexa.com (یکی از زیرمجموعه‌های amazon.com) بوچود آمده، تعداد بازدید از وب سایت‌های مختلف را بررسی کرده و به صورت عمومی منتشر می‌کند.»صفحات راهنمای وب‌سایت الکسا، با توضیح نحوه محاسبه رتبه، این فرایند را خیلی شفاف و قابل درک همانطور که در ادامه می‌خوانیم توضیح داده است.«تخمین‌های ترافیک الکسا بر اساس عادات وب گردی کاربرانی که در گروه داده جهانی ما قرار دارند، به عنوان یک نمونه از تمام کاربران اینترنت محاسبه می‌شوند. رتبه ترافیک الکسا بر اساس داده‌های ترافیکی که از فعالیت‌های گروه داده جهانی الکسا به دست می‌آید، در طول دوره‌های ۳ ماهه چرخشی استخراج می‌شود.»در تصویر زیر رتبه الکسای گوگل را به عنوان سایت اول دنیا مشاهده می‌کنید:و این هم رتبه سایت آپارات به عنوان سایت اول ایران:رتبه آپارات به خوبی گوگل نیست، ولی با توجه به این واقعیت که بدترین رتبه در الکسا ۳۰ میلیون است، رتبه خیلی خوبی محسوب می‌شود.الکسا چه فاکتورهایی را تحلیل می‌کند؟قبل از اینکه بتوانیم برنامه ریزی کنیم، باید بدانیم الکسا در زمانی که به یک وب سایت رتبه می‌دهد، دنبال چه چیزهایی می‌گردد.خوشبختانه الکسا درباره اینکه داده‌هایش چگونه محاسبه می‌شوند هیچگونه پنهان کاری نمی‌کند.طبق گفته های وبلاگ الکسا: «هر روز تعداد کاربران متوسط روزانه و تعداد صفحات مشاهده شده هر سایت، در طول ۳ ماه گذشته تخمین زده می‌شود. رتبه اول ازآن سایت‌هایی است که بیشترین تعداد صفحات مشاهده شده و بازدید کننده را در طول ۳ ماه گذشته داشته باشند.«بدترین رتبه‌ای که سایت می‌تواند داشته باشد حدود ۳۰ میلیون است. اگر هیچ کس در گروه اندازه گیری ما سایت را در سه ماه گذشته ندیده باشد هیچ رنکی برای آن سایت در نظر گرفته نمی‌شود.»در سایت الکسا گراف‌هایی هم برای نشان دادن این موضوع ارائه شده:![رابطه بین رتبه الکسا و تعداد ویزیتورهای سایت](./alexa-graph.jpg)تعداد بازدید کننده‌ها و صفحات دیده شده روزانه گوگل از همه بیشتر است. بنابر این بر بالای قله قرار می‌گیرد.الکسا به این نکته هم اشاره می‌کند که هرچه سایت شما به بالای نمودار نزدیکتر میشود، بهبود حتی یک رتبه نیز سخت تر می‌شود.در حالی که ممکن است یک سایت با رتبه ۲۴ میلیون بسیار راحت به رتبه ۲۰ میلیون برسد،‌رسیدن از رتبه ۵۰ به ۴۰ بسیار سخت تر خواهد بود.ایده اصلی که داکیومنت‌های الکسا به ما ارائه می‌دهند این است که دو فاکتور کلیدی برای بهبود رتبه ۱- تعداد متوسط بازدید کنندگان روزانه و ۲- تعداد صفحات مشاهده شده در ۳ ماه قبل است.با توجه به نکاتی که ذکر شد، برای بهبود رتبه الکسا باید این کارها را انجام دهید:امار سایت خود را توسط الکسا تایید کنیداگر مشکلی با یک سرمایه گذاری کوچک ندارید، ایده خوبی است که از سرویس Alexa’s Certified Site Metrics استفاده کنید.این سرویس یک کد به شما می‌دهد که مستقیما ترافیک سایت شما را اندازه می‌گیرد.استفاده از آن مزیت‌های زیادی به شما می‌دهد:۱. رنک الکسای دقیق تری خواهید داشت۲. گزارش‌های آنالیتیکی عمیق تری دریافت می‌کنید۳. کارایی سایت خود را می‌توانید مانیتور کنید۴. همچنین این انتخاب را دارید که تعداد بازدید کنندگان، صفحات بازدید شده و رتبه را به صورت عمومی نشان دهیدساخت اکانت الکسا با هزینه‌های مختلفی امکانپذیر است.مثلا در پلن‌های گران‌تر یک بررسی سئوی ماهیانه و هفتگی به شما ارائه خواهد شد.حداقل ماجرا این است که تایید کردن سایت شما یک مزیت رقابتی نسبت به رقبا برای شما خواهد بود.با این کار می‌توانید دید بهتری از وضعیت سلامت سایت خود داشته باشید و ابزارهایی برای بهبود رتبه وب سایتتان در دسترس دارید.محتوای خوب تولید کنیدوقتی که شما وارد گود می‌شوید، محتوا یک کامپوننت حیاتی بازاریابی آنلاین در سطوح مختلف است.تولید محتوای درجه یک که نیاز مخاطب را واقعا برآورده می‌کند از اهمیت بسزایی برخوردار است.محتوای درجه یک از ملزومات رشد رتبه الکسا به شمار می‌آید.بک لینک های با کیفیت دریافت کنیددو فاکتور اساسی که گوگل در زمان رتبه دادن به وب سایت شما در نظر می‌گیرد چیست؟تراست و آتوریتی. در واقع «تراست/آتوریتی دامین ۲۳.۸۷٪ از الگوریتم رتبه بندی گوگل را تشکیل می‌دهد»یکی از بهترین راه‌های افزایش تراست/آتوریتی دامین شما بدست آوردن لینک‌های ورودی با کیفیت است.و همانطور که مطلع هستید این لینک‌ها باید از سایت‌های معروف و مرتبط با محتوای وب سایت شما باشند.البته درست کردن بک لینک در حرف بسیار ساده‌تر از عمل است.ای کاش به این سادگی بود که چند پست عالی تولید می‌کردید و ناگهان چندین سایت بزرگ آن را مشاهده کرده و به آن لینک مستقیم می‌دادند.اما دنیای واقعی به این زیبایی نیست. ایجاد بک لینک های خوب یک فرایند بسیار دشوار است.البته باز هم تولید محتوای عالی نکته اصلی در این فرایند محسوب می‌شود.بگذارید به قانون ۹۰/۱۰ در ساخت لینک بپردازیم. این قانون می‌گوید: «۹۰ درصد زحمات شما باید برای درست کردن محتوای عالی صرف شود و ده درصد برای ساخت لینک»وقتی که نوبت به فرایند ایجاد لینک می‌رسد، یک روش هست که در میان بقیه روش‌ها بهتر جواب می‌دهد: پست مهمانحتی اگر امکان تولید تعداد محدودی پست مهمان، در سایت‌های مطرح و پر بازدید داشته باشید. همین تعداد محدود می‌تواند رتبه الکسای شما را در یک ماه بهبود بخشد.کلمات کلیدی رقبا را آنالیز کنیدسوال: انگیزه شما برای بهبود رتبه الکسا چیست؟شرط میبندم که انگیزه شما پیشی گرفتن از رقباست. درسته؟معلومه که می‌خواهید در رقابت پیروز باشید. ولی چگونه؟یکی از بهترین راه‌ها برای بدست آوردن برتری در رتبه الکسا و سئو به طور کلی آنالیز کردن کلمات کلیدی رقباست.شما باید بدانید کدام کلمات برای‌آنها بیشترین ترافیک،‌ بک لینک و … را به ارمغان می‌آورند.وقتی بدانید کدام کلمات حجم ترافیک زیادی به وب سایت های آنها وارد می‌کند شما هم می‌توانید سایتتان را برای آن کلمات کلیدی بهینه سازی کنید و یک جهش در ترافیک سایت ایجاد کنید.بااین کار نه تنها رنک الکسای شما بهبود پیدا می‌کند. بلکه رتبه کلی سئو سایتتان نیز بهتر خواهد شد.چگونه می‌توانید کلمات کلیدی رقبا را آنالیز کنید؟یکی از راه‌های موجود استفاده از کیورد پلنر گوگل است.ابزارهای فراوانی برای این کار وجود دارد ولی کیورد پلنر احتمالا فراگیر ترینشان هست. به علاوه معمولا وقتی از آمار کلمات کلیدی و وب‌سایت‌ها صحبت می‌کنیم، گوگل منبع اول است.مراحل این کار به شرح زیر استبه داشبورد کیورد پلنر بروید.بر روی لینک «جستجو برای کیوردهای جدید با استفاده از واژه، وب سایت یا دسته بندی» کلیک کنید.زیر نوشته «صفحه فرود شما» آدرس سایت رقیب را وارد کنید.برای مثال دیجی کالا.بر روی دکمه «دریافت ایده ها» کلیک کنید. لیستی از کلمات کلیدی رقیبتان دریافت خواهید کرد.در ادامه تعدادی از نتایج را مشاهده می‌کنید.![نتایج جستجوی کلمات کلیدی در کیورد پلنر](./keyword-results.png)یکی از نکات مثبت کی ورد پلنر این است که می‌توانید برای هر کلمه کلیدی تعداد جستجوهای ماهانه و میزان رقابت را مشاهده کنید.تولید محتوای بهتر از محتوایی که رقیبتان تولید کرده، استراتژی مناسبی برای بهبود تدریجی سئو و همزمان بهبود رتبه الکسای سایتتان است.ولی برای اینکه بهبود قابل ملاحظه ای در سی روز مشاهده کنید. پیشنهاد می‌کنم که اول سراغ میوه‌هایی بروید که دستتان به آنها میرسد، منظور من کلماتی هستند که رقابت کمتری بر روی آنها در جریان است و تعداد جستجوهای زیادی دارند.نتیجه گیریرتبه الکسای شما رابطه مستقیم با سلامت و پیشرفت سایت شما دارد.این رتبه، چیزی است که ذینفعان کلیدی بر اساس آن تصمیم میگیرند که کمپانی شما ارزش همکاری دارد یا خیر.به همین دلیل بدست آوردن یک رتبه مناسب (حداقل بین ۱۰۰۰۰۰ تای اول جهان) باید در برنامه‌های شما باشد.اگر این فرمول را دنبال کنید، مطمئن باشید پیشرفت قابل ملاحظه ای را به سرعت مشاهده خواهید کرد.با این وجود اگر سایتتان رتبه خیلی بدی دارد، ممکن است زمان بیشتری نیاز باشد تا به نقطه ای برسید که برای سرمایه گذاران جذاب باشد.به این دلیل که رتبه الکسا سنجه بسار مهمی است، پیشنهاد میکنم تلاش خود را برای بهبود آن به صورت مستمر ادامه دهید.اکنون نوبت شماست که نظرتان را بگویید! رتبه الکسای شما در همکاری‌های تجاری و موقعیت‌هایی که بدست آورده اید چقدر تاثیر داشته است؟</description><category>امیر بصیری</category><author>امیر بصیری</author><pubDate>Thu, 11 Jul 2019 23:27:50 +0430</pubDate></item><item><title>اگر برنامه نویس هستید، بر شما واجب است این ده کتاب را مطالعه کنید!</title><link>https://virgool.ir/@amir.basiri/ten-books-every-programmer-should-read-k5ddhhxwjfuu</link><description>یادگیری مستمر بخش جدانشدنی زندگی همه برنامه نویسان است. اما در سال‌های اخیر سرعت پیشرفت و تغییر سریع تکنولوژی‌ها باعث شده، همه به دنبال یادگیری سریع زبان‌های برنامه نویسی و فریمورک‌های جدید باشند. همین دلیلی شده تا مطالعه و آموزش مفاهیم زیربنایی و مهم که در درازمدت پروژه‌های نرم افزاری را تحت تاثیر قرار می‌دهند به حاشیه رانده شود.هر برنامه نویسی بدون آشنایی با مفاهیمی مانند ریفکتورینگ و دیزاین پترن‌ها می‌تواند پروژه‌ها را تحویل داده و خروجی قابل قبولی به کارفرما ارائه دهند. اما این تازه اول راه است. برنامه‌ای که تحویل کارفرما می‌شود احتیاج به نگهداری دارد و اینجاست که مشکلات نمایان می‌شوند. مشکلاتی مانند هزینه زیاد نگهداری نرم‌افزار و سرعت کم توسعه.خوشبختانه جلو این مشکلات را می‌توان از همان ابتدا تا حدود زیادی گرفت. با اینکه توسعه نرم افزار یک تخصص جدید است. اما در همین سالیان سپری شده تیم‌ها و مهندسان کامپیوتر تجارب ارزشمندی بدست آورده‌اند و آنها را در قالب راهکارهای مختلف برای ما به اشتراک گذاشته‌اند. برنامه نویسان تازه کار با مطالعه و تمرین این راهکارها می‌توانند از اشتباهات رایج اجتناب کنند. در ادامه ده کتاب پیشنهادی معرفی می‌کنیم. اگر مهندس نرم افزار هستید و علاقه دارید در شغل برنامه نویسی پیشرفت کنید حتما این کتاب‌ها را مطالعه کنید.Clean Codeاین کتاب نوشته رابرت مارتین یا عمو بابه. نویسنده در این کتاب راجع به چه چیزهایی صحبت می‌کنه؟ همه میدونیم که هدف اصلی در نوشتن کد خلق برنامه‌ایست که اجرا شود. ولی آیا می‌توانید کدی که تولید کرده‌اید را در آینده بخوانید و تغییر دهید؟ اگر پاسخ شما منفیست این کتاب را بخوانید. با خواندن این کتاب یاد می‌گیرید کدهای بهتری بنویسید. بعد از خواندن این کتاب متوجه می‌شوید که چرا کیفیت کد اهمیت دارد. سعی می‌کنید کدهای بهتری بنویسید. و هیچ وقت دوباره به عقب برنخواهید گشت. Head First Design Patternsاگر به عنوان یک برنامه نویس دنبال کار هستید حتما در مصاحبه‌های شغلی راجع به دیزاین پترن‌ها از شما سوال شده. چرا دیزاین پترن‌ها مهم هستند؟ چون در هر لحظه حتما حداقل یک نفر در این دنیا با مشکلی مشابه مشکلی که شما در پروژه خود با‌ آن روبرو شده‌اید دست و پنجه نرم می‌کند. و احتمالا قبلا یک نفر این مشکل را حل کرده. این کتاب پترن‌های تست شده‌ای که بقیه استفاده کرده و کارایی آنها ثابت شده را در اختیار شما قرار می‌دهد. اگرچه این کتاب همه دیزاین پترن‌های دنیا را شامل نمی‌شود ولی هر پترنی که شما برای حل کردن مسائل واقعی نیاز دارید را در بر می‌گیرد.The Pragmatic Programmerخواندن این کتاب هم از واجبات است. پراگماتیک پروگرامر دید شما را به برنامه نویسی تغییر می‌دهد. شما را آموزش می‌دهد تا برنامه نویس بهتری شوید. این کتاب حتی بر روی زبان برنامه نویسی خاصی هم تمرکز نکرده و نکاتی را به شما آموزش می‌دهد که در همه زبان‌های برنام نویسی می‌توانید استفاده کنید. در پی خواندن این کتاب انتظار داشته باشید هم شخصیت و هم عادات برنامه نویسی شما تغییر کند.Soft Skills: The Software Developer&#39;s Life Manualکتاب Soft Skills اصلا درباره برنامه نویسی نیست. اما به زندگی شما به عنوان یک برنام نویس شکل میدهد. این کتاب قسمت‌هایی از زندگی یک برنامه نویس را بررسی می‌کند که معمولا نادیده گرفته می‌شوند.موضوعاتی که این کتاب به آنها اشاره می‌کند شامل امور مالی، زندگی شغلی، بازاریابی،‌ پروداکتیویتی، فیتنس و توسعه روحی است. The Clean Coder: A Code of Conduct for Professional Programmersنویسنده این کتاب هم رابرت مارتین هست. محتوای آن، موضوعاتی که بیشتر برنام نویسان آنها را نادیده می‌گیرند را پوشش می‌دهد. با خواندن این کتاب متوجه می‌شوید که به چه کسی برنامه نویس حرفه‌ای گفته می‌شود؟ و چگونه به عنوان یک برنامه نویس حرفه‌ای زندگی خود را به جلو ببرید؟ چه نکات مدیریتی می‌تواند در زندگی برنامه نویسان تغییر ایجاد کند؟ و در نهایت این کتاب نکاتی برای توسعه مهارت‌هایتان در اختیارتان قرار می‌دهد.Code Complete: A Practical Handbook of Software Constructionکتاب Code Complete سرشار از اطلاعات مفید است. به راحتی می‌توان کتاب را با مرجع جامع برنامه نویسی اشتباه گرفت. حجم ۹۰۰ صفحه‌ای کتاب هم گواه این ادعاست. نگران تعداد صفحه‌های کتاب نباشید و با هر سرعتی که برای شما ممکن است آن را بخوانید. نویسنده سعی در پوشش همه نکات مهم توسعه نرم افزار داشته. اگر اطلاعات بیشتری هم نیاز داشته باشید کتاب پر از رفرنس به منابع دیگر درباره هر موضوعی است.The Mythical Man-month: Essays on Software Engineeringافرادی که در دنیای نرم افزار این کتاب را با انجیل مقایسه می‌کنند کم نیستند. احتمالا به خاطر روش نگارش و نکاتی که دربارشه آنها در کتاب صحبت شده. این کتاب نکاتی مانند مدیریت پروژه، توسعه نرم افزار، اشتباهاتی که باید از آنها اجتناب کنیم و ابزارها، کنترل کیفیت را پوشش می‌دهد. اگر در آینده قصد دارید به عنوان مدیر پروژه کار کنید. خواندن این کتاب به شدت توصیه می‌شود. Peopleware: Productive Projects and Teamsکتاب peopleware هم مستقیما درباره برنامه نویسی نیست. اما برای برنامه نویس ها اهمیت دارد. این کتاب درباره مدیریت و انگیزه دادن به برنامه نویسان است. نویسنده فاکتورهایی که می‌تواند برنامه نویسان را کم انگیزه کند مطرح کرده و برای آنها راه حل ارائه داده. این کتاب برای مدیرانی که یک تیم برنامه نویس را مدیریت می‌کنند عالیست.Working Effectively With Legacy Codeچیزهایی هستند که همه از آنها متنفرند. یکی از آنها کار کردن با کدهای قدیمیست. کد اجرایی که امکان اجرای آن روی آخرین ورژن سیستم عامل نیست. اکثر مواقع چاره‌ای ندارید جز کار کردن با این نوع کدها. این کتاب نکات ساده‌ای در اختیار شما قرار میدهد. که به شما کمک خواهد کرد با این نوع کدها بهتر کار کنید.Refactoring by Martin Fowlerنوشتن کدی که کار می‌کند کافی نیست. اطمینان از اینکه کد شما به بهترین شکل و در بهینه ترین حالت قرار دارد مهم‌تر است. هدف اصلی ریفکتورینگ بهینه سازی ویژگی‌های غیر اجرایی کد است. مارتین فاولر در این کتاب مفاهیم و راهکارهای ریفکتورینگ را به بهترین شکل ارائه کرده. با خواندن این کتاب به اهمیت ریفکتور کردن پی برده و متوجه می‌شوید که چرا هر برنامه نویسی باید با آن آشنا باشد. کتاب ریفکتورینگ با آموزش روش‌های شناخت نشانه‌های عیب و ایراد در کد، آشنایی با ساختار منطقی کلاس‌ها و اشیا و جابجایی ویژگی‌ها از یک شی به دیگری و همچنین معرفی ابزارهای مفید برای ریفکتور کردن کد، شما را در بهینه سازی کدهایتان توانا تر می‌کند.ده کتاب در این پست معرفی شده که هر کدام می‌تواند یک قدم زندگی حرفه‌ای شما را به جلو ببرد. پس منتظر نباشید تا فرصتی برای مطالعه آنها پیدا کنید. از همین الان شروع کنید. شاید مسیری طولانی پیش روی باشه، ولی یک سفر هزار کیلومتری با یک قدم شروع می‌شه. پس قدم اول را بردارید.بروز رسانی: توی این چند روز دوستانی که این مطلب رو خوندن کتاب‌های دیگه‌ای رو پیشنهاد دادن که فکر میکردن باید توی این لیست بهشون اشاره میشده. اگر شما هم فکر میکنین کتابی جا مونده توی کامنت‌ها بگین. من سعی میکنم توی یکی دو هفته آینده که لیست این کتاب‌ها کامل تر شد. آخر این نوشته یک لیست از اون کتاب‌ها هم قرار بدم.بروز رسانی۲: در ادامه لیست چند کتاب که توی توییتر و اینجا در نظرات معرفی شده بود را مشاهده می‌کنید. دو کتاب دیگه هم خودم اضافه کردم که فکر میکنم مفید هستند.نکته دیگه‌ای هم که بهش اشاره شده بود اینه که مفاهیم پایه مثل سیستم‌عامل، ساختمان داده و طراحی الگوریتم هم بسیار مهم هستند. به نظر بنده اگر شما سراغ این لیست کتاب‌ها آمدید و قصد مطالعه آنها را دارید حتما قبلا مباحث پایه را مطالعه کرده‌اید. اگر این کار را نکرده‌اید حتما اول این کار را بکنید.Clean Architecture: A Craftsman&#39;s Guide to Software Structure and DesignCracking the Coding Interview97 Things Every Software Architect Should Know: Collective Wisdom from the ExpertsPatterns of Enterprise Application ArchitectureComputer Systems: A Programmer&#39;s PerspectiveOperating System Concepts</description><category>امیر بصیری</category><author>امیر بصیری</author><pubDate>Thu, 11 Jul 2019 01:15:04 +0430</pubDate></item></channel></rss>