فیسبوک: جزییات بیشتر در مورد قطعی ۴ اکتبر (فیسبوک، اینستاگرام، واتساپ…)

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

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

برخی از دیتاسنترها شامل میلیونها دستگاه ذخیره سازی و پردازشی‌اند و بسیار بزرگ هستند و برخی دیگر کوچکترند که سایر ظرفیت‌های شبکه‌ی ما را به اینترنت جهانی و کاربران متصل می‌کنند.

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

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

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

این تغییر باعث قطع کامل ارتباطات سرورهای ما بین مراکز داده‌هایمان و شبکه‌ی جهانی اینترنت شد. و از بین رفتن کامل ارتباط باعث ایجاد مسئله دوم شد که اوضاع را بدتر کرد.

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

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

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

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

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

این از رویدادهایی است که ما بخاطر آن تمرینات موسوم به “طوفان” که مدتهاست در حال اجرا هستیم. در یک تمرین طوفانی، ما با یک سیستم تمرینی، خرابی گسترده یا خرابی در کل یک منطقه را شبیه سازی می کنیم، تمام زیرساخت ها و نرم افزارهای مربوطه را تحت آزمون استرس(استرس تست) قرار می دهیم. تجربه این تمرینات به ما اعتماد به نفس و تجربه خوبی برای بازگرداندن سیستم‌ها به حالت آنلاین و مدیریت دقیق افزایش بار را به ما داد. در نهایت، خدمات ما نسبتاً سریع بدون هیچ گونه خرابی در سیستم‌های دیگر و به سرعت شروع به کار کرد. و در حالی که ما قبلاً هرگز طوفانی را شبیه سازی نکرده بودیم که شبکه‌ی ستون فقرات جهانی ما را به طور کامل از دور خارج کرده باشد، مطمئناً به دنبال راه هایی برای شبیه سازی رویدادهایی مانند این هستیم.

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

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

نوشته‌ی: سانتوش جاناردان

آدرس بلاگ پست فنی فیسبوک

ترجمه: محمود اسکندری

نوشته فیسبوک: جزییات بیشتر در مورد قطعی ۴ اکتبر (فیسبوک، اینستاگرام، واتساپ…) اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

پادکستی که امروز حال منو خوب کرد ❤️

پادکست رادیو صفر و یک

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

نوشته های زیر خلاصه ی ذهنی من از این پادکست است که ممکنه ناقص نوشته باشم و پیشنهاد میدم خود پادکست را گوش بدید که بالا آپلود کردم براتون ❤️❤️

پادکست در حوزه ی فناوری و برنامه نویسی

پادکست فوق العاده ای که من گوش دادم در مورد زندگی یه برنامه نویس بود که توش داستان های آموزنده ای برای من داشت و من هنوز بعد از چندین ساعت درگیرش هستم و دوبار هم گوش دادمش

یه فردی با این شخصیت و عظمت مگه میتونه باشه ؟‌

یه فردی چنین متواضع که دنیا رو عوض کرده و میتونست پولدارترین فرد روی زمین باشه ولی دست رد گذاشته روی ثروت و شهرت و …

پادکست فناوری و برنامه نویسی

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


زندگینامه ی لینوس توروالدز

پادکست زندگی لینوس توروالدز

این پادکست همانطور که بالا هم گفتم در ژانر بیوگرافی هست و روایت هایی از زندگی لینوس توروالدز رو بیان میکنه که لینوکس را ساخته البته فضای پادکست میخوره فضای داستان سرایی باشه و تعریفات گوینده بسیار جذاب هست و من فکر میکنم به همین زودی یکی از برترین و بزرگترین پادکست های فارسی زبان میشه

لینوس توروالدز یک برنامه نویسی هست که در سال ۱۹۶۹ در شهر هلسینکی فنلاند چشم به جهان گشوده است. پدر مادرش آرزوی دانشمند شدن او را داشتند و اسمش را از دانشمند بزرگ آن زمان به اسم لینوس پاولینگ گذاشتن.

لینوس پاولینگ دانشمند شیمی هست که دو بار جایزه ی نوبل برده و جزو چهار نفری هست که دوبار توانستند جایزه ی نوبل را برنده شوند.

اسم لینوس از این دانشمند گرفته شده و زمانی که کودک بوده پدربزرگی به اسم لئو داشته که یک کامپیوتر کومودور بهش کادو میده به نام vic-20 که باعث میشه لینوس توروالدز به دنیای برنامه نویسی علاقه مند بشه…

لینوس در مدرسه جزو افرادی بوده که همیشه جایزه های ریاضیات را برنده میشده و در زمینه ی ریاضیات نخبه بوده است.

همین ریاضیات در حل مسائل پیچیده ی لینوس احتمالا کمکش کرده

زبانی که شروع کرده به یادگیری BASIC بوده و سپس ASSEMBLY را یاد گرفته ولی اصلی ترین زبان برنامه نویسی که بعدا یاد گرفته زبان قدرتمند سی بوده که لینوکس را هم با این زبان برنامه نویسی نوشته….



داستان خلق لینوکس

چیزی که من در این پادکست به دست آوردم شاید با خوندن صدها مقاله بدست نمی آوردم داستان خلق لینوکس هست و بسیار ساده و خلاصه تایم لاین خلق لینوکس در این پادکست گفته شده است.

داستان خلق لینوکس

دلیل خلق لینوکس :

  • لینوس توروالدز از سیستم عامل داس بدش میومد چون محدود بود
  • یونیکس پولی بود و دوست نداشت پنج هزار دلار بابت یه سیستم عامل بده
  • مینیکس ناقص بود

و همین ها دلیل کافی بود که لینوس توروالدز بشینه و یه کرنل برای سیستم عامل بنویسه … اما هرگز قرار نبود پروژه ای بزرگ و جهانی با هدف تحول دنیا بشه … بلکه یه پروژه شخصی و تفریحی برای ارضای خواسته های یه جوان بود که بتونه روی کامپیوتر خودش کار بکنه …

اری لمکه یه فردی بود که برای اولین بار لینوکس را منتشر کرد لینوس توروالدز در ابتدا نام Linux را روی این سیستم عامل گذاشته بود که ترکیب Linus + Unix Like بود ولی چون احساس میکرد یکم خودخواهانه هست اسم Freax را انتخاب کرد که ترکیب Free + Unix like بود . ولی زمان انتشار این سیستم عامل توسط اری لمکه همون اسم قبلی یعنی Linux انتخاب شد و روی ftp جهت دانلود همه قرار گرفت.

همین نقطه ی شروع لینوکس بود تا به دست هزاران نفری بیوفته که قرار بود براش کار بکنند و آینده ی کامپیوتر جهان را متحول بکنه …

افتخارات لینوس توروالدز برای ساختن لینوکس

سیستم عامل لینوکس توسط ۳ و نیم بیلیون کاربر در جهان مورد استفاده است که بیشترین استفاده ی لینوکس برای مدیریت سرورهاست ولی میشه روی همه چی نصبش کرد.

کرنل اندروید هم لینوکسی هست و اگر اندروید را هم لینوکسی حساب کنیم پس لینوکس بعنوان محبوب ترین کرنل جهان حساب میشه و یه نوعی محبوب ترین سیستم عامل جهانم هست.

سال ۲۰۰۱ کنسول پلی استیشن دو که پرفروش ترین کنسول بازی جهان بود از لینوکس استفاده میکرد.

شرکت IBM از همون اول به لینوکس علاقه نشون داد و روش سرمایه گذاری کرد بطوریکه الان سوپرکامپیوترهای IBM با لینوکس اجرا میشوند.

دلیل اصلی اینکه این پادکست رو د وس داشتم

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

سری پادکست داستان زندگی برنامه نویسان موفق

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

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

حرف رو زیاد کش نمیدم پادکست رو گوش بدید و لذت ببرید

منبع : اپیزود ۱ پادکست رادیو صفر و یک در anchor

نوشته پادکستی که امروز حال منو خوب کرد ❤️ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

وقتی یه خط کد تو رو وارد دنیای جدیدی میکنه!

امشب همینجوری تصمیم گرفتم سورس کد پکیج p-map رو بخونم. این پکیج وقتی استفاده میشه که یه تابع async داشته باشیم (mapper) و بخوایم چند بار با پارامتر های مختلف اون رو اجرا کنیم.

import pMap from 'p-map'; 
import got from 'got';  
const sites = [  
    getWebsiteFromUsername('sindresorhus'), //=> Promise 
    'https://avajs.dev',      
    'https://github.com'
];  

const mapper = async site => {  
    const {requestUrl} = await got.head(site);  
    return requestUrl; 
};  

const result = await pMap(sites, mapper);  

console.log(result); //=> ['https://sindresorhus.com/', 'https://avajs.dev/', 'https://github.com/']

وقتی شروع کردم به خوندن تو همون خط های اول چند بار با عبارت Symbol مواجه شدم:

تا حالا با Symbol ها آشنا نشده بودم. البته از کاربردش توی کد و دانش محدودی که از پایتون داشتم تقریبا فهمیدم که به چه دردی میخوره: همونطور که توی مثال بالا دیدید تابع pMap به عنوان اولین پارامترش یک iterable مثل آرایه میگیره. توی خط ۱۲ کد بالا داره چک میکنه که آیا پارامتر اول iterable هست یا نه. ولی بازم برام عجیب بود ولی با یکم تحقیق یکم سر در آوردم.

بیاین اول یکم با خود Symbol ها آشنا بشیم. Symbol هم مثل Number که اعداد رو نشون میده و String که رشته های حرفی رو نشون میده یه نوع از دیتا هست. ولی دقیقا چی رو داره نشون میده؟ جواب یه مقدار یکتا هست! تنها چیزی که در موردش باید بدونید اینه که یه مقدار یکتا و منحصر به فرد هست. میتونید مثل یه عدد خیلی بزرگ مثل 3402894209850295 که همیشه یکتا هست بهش نگاه کنید.

هر بار که تابع Symbol رو اجرا میکنیم، یه مقدار یکتا برامون ساخته میشه. درسته که وقتی تابع toString رو روی اونها اجرا میکنیم یه چیز مشابه رو میبینیم ولی در عمل به هم متفاوت هستند:

const symbol1 = Symbol()
const symbol2 = Symbol()

console.log(symbol1) // Symbol()
console.log(symbol2) // Symbol()

console.log(symbol1 === symbol2) // false

کاربرد اصلیش وقتیه که بخوایم یه key توی یه آبجکت داشته باشیم که مطمئن باشیم یکتا هست.بقیه مباحث از دامنه این مطلب خارجه. میتونید اینجا یکم در موردش بخونید. چنتا مثال ساده هم آخر این ویدیو میتونید ببینید.

قسمت دوم ماجرا iterable ها توی جاوااسکریپت هستند. یادتونه گفتم دانش محدودی که از پایتون داشتم تو فهم اون کد کمکم کرد؟ خب توی پایتون هر چیزی که iterable باشه یا به صورت ساده بشه ازش توی حلقه for استفاده کرد باید یه متد به اسم __iter__ پیاده سازی کنه. این تابع یه iterator برمیگردونه که حلقه for ازش استفاده میکنه.

ظاهرا توی جاوااسکریپت هم همچین خبر هایی هست. هر چیزی که توی جاوااسکریپت iterable باشه باید متد iterator@@ رو پیاده سازی کنه. این متد یه iterator برمیگردونه که حلقه for ازش استفاده میکنه. مثلا آرایه ها این متد رو به صورت پیشفرض دارند. (اطلاعات بیشتر)

اگر توی devtools مرورگرتون یه آرایه بسازید و از همونجا property هاش رو بررسی کنید یه همچین چیزی میبینید:

همونطور که میبینید، Symbol.iterator همون تابع iterator@@ هست که تعریفش رو شنیدیم. دقت کنید که به صورت یه Symbol تعریف شده. تو جاوااسکریپت یه لیست خاص از Symbol ها هستند که به اسم well-known symbols شناخته میشن. Symbol.iterator هم یکی از اون هاست که یه جورایی به عنوان id تابع iterator@@ استفاده میده. در نتیجه اگر بخوایم به تابع iterator@@ یه آرایه دسترسی داشته باشیم باید از این Sybmol استفاده کنیم:

الان اون خط از کد برام روشن شد.

if (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {...}

اگر پارامتر اول که اسمش iterable هست Symbol.iterator رو نداشت یعنی اینکه iterable نبود ینی یه جای میلنگه و یه ارور میفرسته. قضیه asyncIterator هم مثل همونه که به خودتون میسپارم.

در نتیجه چند ساعت از وقتم رو همین یه خط کد گرفت (شامل نوشتن این پست هم میشه). گیتهاب جای فوق العاده ای برای یادگیریه. خیلی از پکیج هایی که استفاده میکنید مثل این ممکنه فقط یه فایل داشته باشند و خوندنش راحته. دیدن کدش قطعا میتونه خیلی چیزا یادتون بده. یه چیز جالب هم اینه که پکیج p-map هر هفته نزدیک به ۳۰ میلیون بار دانلود میشه! ببینید یه پکیج ساده چقدر میتونه کاربرد داشته باشه.

در ضمن اگر جایی توی مقاله اشتباه فنی داشتم حتما بهم گوشزد کنید:)

نوشته وقتی یه خط کد تو رو وارد دنیای جدیدی میکنه! اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

تجربه من از چند مصاحبه و فیدبک هایی که گرفتم

سلام به همگی
من مازیارم، قبلا وب مستر و پشتیبان هاست بودم و الان یک ساله که برنامه نویس Front End هستم و به صورت پاره وقت هم زبان تدریس میکنم. این اولین پست ویرگول منه و امیدوارم کلیتش به دردتون بخوره.
نکته: این مقاله صرفا تجربه کوتاه من از چند مصاحبه است که به پیشنهاد یک دوست می نویسم و تاکید میکنم که اصلا منبع معتبری نیست و شاید خیلی از حرفام اشتباه باشن و مناسب شما نباشن و همچنین به هیچ کس توصیه نمیکنم با سابقه کم اقدام به اپلای کردن بکنه چون راه خیلی سختیه و ممکنه ناامید و سرخورده بشید ولی من خودم این راه رو انتخاب کردم چون شرایطی که توش قرار گرفتم منو به این سمت سوق دادن و به نتایج خوبی هم دارم میرسم.
پیشنهاد میکنم برای اطلاعات بیشتر و مشورت با باتجربه ها، یه سر به این گروه Tech Immigrants بزنید. یه گروه دوستانه است که به صورت خودجوش همه تا حد امکان به هم کمک میکنند.
و اما بریم سراغ اصل مطلب که میخوام راجع به کارایی که برای مصاحبه میکنم و فیدبک هایی که گرفتم صحبت کنم:

کارایی که برای مصاحبه میکنم:

  • مصاحبه گرفتن:

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

  • تحقیق در مورد شرکت:

نیاز به توضیح نیست که شما باید از قبل یه کم زمان بذارید راجع به شرکت و محصولی که روش کار میکنند یه کم اطلاعات کسب کنید و بدونید که چیکار میکنند و اگه تونستید افراد کلیدی رو پیدا کنید بشناسید و اگه تونستید یه گپ با HR یا CTO داشته باشید برای آشنایی بیشتر با شرکت و پوزیشن شغلی . این خودش نشون میده شما چقدر مشتاق و علاقمند هستید به کار توی اون شرکت.(این کار رو بعضی ها با نوشتن کاور لتر هم انجام میدن ولی من اینطوری دوست دارم پیش برم)

  • آمادگی برای مصاحبه:

از قبل یه سری نکات راجع به شرکت و چند تا سوال راجع به کار و … آماده کردم که در حین مصاحبه ازشون استفاده میکنم که نشون بدم چقدر کنجکاو هستم و این شرکت خیلی برام اهمیت داره. همچنین چند تا ویدئوی مصاحبه توی یوتیوب میبینم و جملاتشون رو با خودم تکرار میکنم تا با اعتماد به نفس بتونم حرف بزنم و دیگه اینکه حتما یه سر به این ریپو بزنید که سوالات مصاحبه برای Front End رو نوشته(البته سوالات عمومی هم داره و پیشنهاد میکنم همه یه سر بزنید).

مصاحبه:
من معمولا نیم ساعت قبل از مصاحبه آماده میشم و روبروی لپ تاپ میشینم و یه بار مصاحبه رو مرور میکنم و با خودم به انگلیسی حرف میزنم و به نور محیط و اینترنت و وقت شناسی و بهداشت دهان و ظاهر و … توجه میکنم بعد هم در حین مصاحبه کاملا مشتاقانه و با روحیه بالا حرف میزنم(طوری که انگار از قبل بهم گفتن آفر گرفتی و دیگه جای نگرانی وجود نداره). یه نکته دیگه اینکه از اون تیکه کاغذی که نکات و سوالاتی روش نوشته بودم استفاده میکنم تا منم تعامل داشته باشم و سوال بپرسم راجع به کار و تکنولوژی ها و … . همچنین ازشون میخوام در هر صورت بهم یه فیدبک راجع به رزومه و نمونه کارام و مصاحبه ای که دادم بهم بدن(بهشون میگم اگه امکانش هست توی یک ایمیل بدید. من وقتی سوال مهمی از کسی میپرسم بهش میگم اصلا عجله نکنه و سر فرصت جواب بده تا دقیق تر و با کیفیت تر باشه).
و دیگه اینکه اگه مصاحبه گرفتید توی گروه Tech Immigrants که ابتدای صحبت هام گفتم گاهی وقتا اگه دوستان فرصت داشته باشند براتون یه مصاحبه آزمایشی مهیا میکنند که خیلی چیزا توش یاد میگیرید و اعتماد به نفستون میره بالا. این سایت هم مصاحبه رایگان آزمایشی داره ظاهرا ولی خودم استفاده نکردم.

فیدبک هایی که گرفتم:

  • زبان:
    همه چندتا شرکتی که باهاشون مصاحبه داشتم بهم گفتن زبانت خوبه و اینکه از کاندیداهایی که مهارت های بالاتری از من دارن ولی به زبانشون توجه نمی کنند گله میکنند.

من همیشه زبانم خوب بوده ولی در حال حاضر چیکار میکنم برای افت نکردن زبانم:
– تمام منابع آموزشی که استفاده کردم و میکنم انگلیسی هستند
– توی گروه های برنامه نویسی خارجی فعالم و توی میتینگاشون شرکت میکنم
– توی این سایت میتونید میتینگ های آنلاین از سراسر دنیا رو پیدا کنید.
– هر روز به پادکست های برنامه نویسی گوش میدم مثل Lady Bug و Syntax و Learn to code with me
– دیروز هم شروع کردم توی لینکداینم و توئیترم پست های انگلیسی راجع به برنامه نویسی مینویسم و به زودی یه کانال یوتیوب به انگلیسی هم درست میکنم که یه کم شوآف کنم 🙂

  • تعامل:

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

  • اشتیاق و پرزنت کردن:

من توی مصاحبه و کلا توی روند آشنایی با شرکت و … خیلی جستجوگر و مشتاق هستم. توی مصاحبه ها به اینکه همه چیز رو به صورت خودآموز و از منابع انگلیسی یاد گرفتم اشاره میکنم و راجع به نقاط مشترک من و شرکت و شرایط کاری و تیم و محصول سوال می پرسم و راجع به تکنولوژی های جدید که میخوام یاد بگیرم و پروژه هایی که روشون کار میکنم و مواردی از این قبیل حرف میزنم. همه اینها باعث میشه اونها من رو برای پوزیشن مورد نظر به عنوان یک آدم با اراده و مشتاق بشناسن (آخرین فیدبکی که گرفتم بهم گفتن که تو go-getter هستی و به هرچی میخوای میرسی ).

  • فنی:
    اجازه بدید با توجه به تجربه کمی که دارم زیاد وارد این بحث نشم فقط اینو بدونید که بهتره بذارید همه چی براشون واضح و شفاف باشه و دچار شک و تردید نباشن که نه وقت شما گرفته بشه نه وقت اون شرکت. و اینکه در مورد من چون Front End هستم خیلی به ظاهر کارام توجه میکردند و ازشون ایراد میگرفتند و یه مورد دیگه اینکه یه سری پروژه هایی که توی گیتهاب گذاشتم فقط دیپلوی کردم و کد اصلی رو نذاشتم که این مورد رو هم بهم یادآوری کردن و گفتن بهتر بود میشد قبل از مصاحبه نحوه کد زدنت رو از روی پروژه هات ببینیم. دیگه اینکه اون ریپو رو هم فراموش نکنید.

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


راستی این گزینه جاستیفای توی ویرگول کجاست؟ 🙂

نوشته تجربه من از چند مصاحبه و فیدبک هایی که گرفتم اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

چند مصاحبه و فیدبک هایی که گرفتم

سلام به همگی
من مازیارم، قبلا وب مستر و پشتیبان هاست بودم و الان یک ساله که برنامه نویس Front End هستم و به صورت پاره وقت هم زبان تدریس میکنم. این اولین پست ویرگول منه و امیدوارم کلیتش به دردتون بخوره.
نکته: این مقاله صرفا تجربه کوتاه من از چند مصاحبه است و تاکید میکنم که منبع معتبری نیست و شاید خیلی از حرفام اشتباه باشن و مناسب شما نباشن و همچنین با توجه به سابقه کاری کوتاهی که دارم به هیچ کس توصیه نمیکنم با سابقه کم اقدام به اپلای کردن بکنه چون راه خیلی سختیه و زود نا امید میشید ولی من خودم این راه رو انتخاب کردم.
پیشنهاد میکنم برای اطلاعات بیشتر و مشورت با باتجربه ها، یه سر به این گروه Tech Immigrants بزنید. یه گروه دوستانه است که به صورت خودجوش همه تا حد امکان به هم کمک میکنند.

خب بریم سراغ اصل مطلب که میخوام راجع به کارایی که برای مصاحبه میکنم و فیدبک هایی که گرفتم صحبت کنم:
کارایی که برای مصاحبه میکنم:

  • مصاحبه گرفتن:

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

  • تحقیق در مورد شرکت:

نیاز به توضیح نیست که شما باید از قبل یه کم زمان بذارید راجع به شرکت و محصولی که روش کار میکنند یه کم اطلاعات کسب کنید و بدونید که چیکار میکنند و اگه تونستید افراد کلیدی رو پیدا کنید بشناسید و اگه تونستید یه گپ با HR یا CTO داشته باشید برای آشنایی بیشتر با شرکت و پوزیشن شغلی . این خودش نشون میده شما چقدر مشتاق و علاقمند هستید به کار توی اون شرکت.(این کار رو بعضی ها با نوشتن کاور لتر هم انجام میدن ولی من اینطوری دوست دارم پیش برم)

  • آمادگی برای مصاحبه:

از قبل یه سری نکات راجع به شرکت و چند تا سوال راجع به کار و … آماده کردم که در حین مصاحبه ازشون استفاده میکنم که نشون بدم چقدر کنجکاو هستم و این شرکت خیلی برام اهمیت داره. همچنین چند تا ویدئوی مصاحبه توی یوتیوب میبینم و جملاتشون رو با خودم تکرار میکنم تا با اعتماد به نفس بتونم حرف بزنم و دیگه اینکه حتما یه سر به این ریپو بزنید که سوالات مصاحبه برای Front End رو نوشته(البته سوالات عمومی هم داره و پیشنهاد میکنم همه یه سر بزنید).

مصاحبه:
من معمولا نیم ساعت قبل از مصاحبه آماده میشم و روبروی لپ تاپ میشینم و یه بار مصاحبه رو مرور میکنم و با خودم به انگلیسی حرف میزنم و به نور محیط و اینترنت و وقت شناسی و بهداشت دهان و ظاهر و … توجه میکنم بعد هم در حین مصاحبه کاملا مشتاقانه و با روحیه بالا حرف میزنم(طوری که انگار از قبل بهم گفتن آفر گرفتی و دیگه جای نگرانی وجود نداره). یه نکته دیگه اینکه از اون تیکه کاغذی که نکات و سوالاتی روش نوشته بودم استفاده میکنم تا منم تعامل داشته باشم و سوال بپرسم راجع به کار و تکنولوژی ها و … . همچنین ازشون میخوام در هر صورت بهم یه فیدبک راجع به رزومه و نمونه کارام و مصاحبه ای که دادم بهم بدن(بهشون میگم اگه امکانش هست توی یک ایمیل بدید. من وقتی سوال مهمی از کسی میپرسم بهش میگم اصلا عجله نکنه و سر فرصت جواب بده تا دقیق تر و با کیفیت تر باشه).
و دیگه اینکه اگه مصاحبه گرفتید توی گروه Tech Immigrants که ابتدای صحبت هام گفتم گاهی وقتا اگه دوستان فرصت داشته باشند براتون یه مصاحبه آزمایشی مهیا میکنند که خیلی چیزا توش یاد میگیرید و اعتماد به نفستون میره بالا. این سایت هم مصاحبه رایگان آزمایشی داره ظاهرا ولی خودم استفاده نکردم.

فیدبک هایی که گرفتم:

  • زبان:
    همه چندتا شرکتی که باهاشون مصاحبه داشتم بهم گفتن زبانت خوبه و اینکه خیلی از کاندیداهایی که مهارت های بالاتری از من دارن ولی به زبانشون توجه نمی کنند گله میکنند.

من همیشه زبانم خوب بوده ولی در حال حاضر چیکار میکنم برای افت نکردن زبانم:
– تمام منابع آموزشی که استفاده کردم و میکنم انگلیسی هستند
– توی گروه های برنامه نویسی خارجی فعالم و توی میتینگاشون شرکت میکنم
– هر روز به پادکست های برنامه نویسی گوش میدم مثل Lady Bug و Syntax و Learn to code with me
– توی این سایت میتونید میتینگ های آنلاین از سراسر دنیا رو پیدا کنید.
– دیروز هم شروع کردم توی لینداینم و توئیترم پست های انگلیسی راجع به برنامه نویسی مینویسم و به زودی یه کانال یوتیوب به انگلیسی هم درست میکنم که یه کم شوآف کنم 🙂

  • تعامل:

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

  • اشتیاق و پرزنت کردن:

من توی مصاحبه و کلا توی روند آشنایی با شرکت و … خیلی جستجوگر و مشتاق هستم. توی مصاحبه ها به اینکه همه چیز رو به صورت خودآموز و از منابع انگلیسی یاد گرفتم اشاره میکنم و راجع به نقاط مشترک من و شرکت و شرایط کاری و تیم و محصول سوال می پرسم و راجع به تکنولوژی های جدید که میخوام یاد بگیرم و پروژه هایی که روشون کار میکنم و مواردی از این قبیل حرف میزنم. همه اینها باعث میشه اونها من رو برای پوزیشن مورد نظر به عنوان یک آدم با اراده و مشتاق بشناسن (آخرین فیدبکی که گرفتم بهم گفتن که تو go-getter هستی و به هرچی میخوای میرسی ).

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


راستی این گزینه جاستیفای توی ویرگول کجاست؟ 🙂

نوشته چند مصاحبه و فیدبک هایی که گرفتم اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

Smarty چیست؟ معرفی و توضیح ویژگی‌ها به همراه مثال

در صورت آشنایی با برنامه نویسی وب و کار در این حوزه ممکن است نام اسمارتی (Smarty) به گوشتان خورده باشد.

اما اسمارتی چیست؟ اجازه دهید قبل از آن کمی مقدمه‌چینی کنیم!

برنامه نویسی وب شامل طراحی و نوشتن کد در فرایند توسعه وب است. برنامه نویسی وب باید در هر دو سمت سرور و کلاینت به خوبی انجام شده باشد و امنیت سایت نیز در نظر گرفته شده باشد.

به عنوان برنامه نویس وب باید با فریم ورک‌ها و زبان‌های مرسوم برنامه نویسی وب آشنا باشید.

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

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

در واقع طراحی وبسایت شامل دو بخش است، بخش اول نحوه به نمایش درامدن اطلاعات و بخش دیگر خود اطلاعاتی که باید نمایش داده شوند.

به همین دلیل یکی از مباحثی که در آموزش برنامه نویسی وب مطرح می‌شود، موتورهای قالب و نحوه استفاده از آن‌هاست.

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

در ادامه این مقاله مقدمات لازم برای آشنایی با موتورهای قالب و یکی از پرکاربردترین موتورهای قالب یعنی اسمارتی مطرح خواهد شد.

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

قبل از پرداختن به خود اسمارتی، با مفاهیم مقدماتی در مورد موتورهای قالب آشنا خواهید شد.

سیستم پردازش قالب چیست؟

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

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

سیستم پردازش قالب شامل موارد زیر است:

· یک مدل داده (مدلی انتزاعی برای مشخص کردن ساختار داده‌ها و نحوه ارتباط آن‌ها با هم)

· یک یا چند قالب

· یک موتور قالب

· خروجی تولید شده در قالب اسناد مختلف یا یک صفحه وب

قالب وبسایت چیست؟

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

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

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

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

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

اینجاست که بحث موتورهای قالب مطرح می‌شود.

موتور قالب چیست؟

موتور قالب (Template Engine) ابزاری است که این امکان را به شما می‌دهد تا با نوشتن کمترین کد ممکن، به ساخت یک قالب اچ‌تی‌ام‌ال بپردازید.

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

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

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

مفاهیم گفته شده تا اینجا را می‌توان در شکل زیر خلاصه کرد:

معرفی موتورهای قالب مختلف

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

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

برای پی‌اچ‌پی که یک زبان برنامه نویسی وب سمت سرور محسوب می‌شود، موتورهای قالب قدرتمندی وجود دارد مانند اسمارتی، و توئیگ (Twig).

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

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

البته در کنار اسمارتی، می‌توانید از پلیتز (plates)، بلید (blade) و ولت (volt) نیز استفاده کنید. اما تمرکز این مقاله تنها روی اسمارتی است.

معرفی اسمارتی

اسمارتی یک موتور قالب برای پی‌اچ‌پی است که متن‌باز بوده و کد آن در گیت‌هاب قابل بررسی است. اسمارتی سریع است و استفاده از آن نیز آسان.

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

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

اجازه دهید نقش اسمارتی را با یک مثال جا بیندازیم!

برای مثال فرض کنید در حال طراحی یک صفحه وب هستید که قرار است مقاله‌های روزنامه در آن نمایش داده شوند.

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

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

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

در واقع اسمارتی به تمرکز توسعه دهنده پی‌اچ‌پی و طراح روی وظایف خود کمک می‌کند، منظور از وظایف توسعه دهنده موارد زیر است:

· استخراج عناصر پایگاه داده به وسیله اجرای پرس‌وجو‌ها

· دستکاری و اعتبارسنجی داده‌ها به وسیله طراحی بخش منطقی سایت

· تغییر نحوه دسترسی به داده‌ها در صورت نیاز، مثلاً انتقال کل سیستم از MySQL به PostgreSQL بدون دخالت در کار طراح سایت

وظایف طراح هم می‌تواند شامل موارد زیر باشد:

· ساخت صفحات اچ‌تی‌ام‌ال بدون تداخل با کدهای پی‌اچ‌پی نوشته شده توسط توسعه دهندگان

· ایجاد تغییرات در طراحی بدون نیاز به تعامل با توسعه دهنده پی‌اچ‌پی

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

اسمارتی چگونه کار می‌کند؟

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

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

تعدادی از ویژگی‌های اسمارتی

· اسمارتی به شدت سریع است

· کد نوشته شده با اسمارتی بسیار بهینه است

· تنها یک بار قالب را کامپایل می‌کند

· تنها فایل‌های مربوط به قالبی را دوباره کامپایل می‌کند که در آن تغییراتی صورت گرفته باشد

· می‌توانید توابع و تغییردهنده‌های مورد نیاز خود را به راحتی بسازید، بنابراین زبان اسمارتی بسیار قابل توسعه است

· دستورات شرطی اسمارتی به تجزیه کننده (Parser) پی‌اچ‌پی فرستاده می‌شوند، بنابراین می‌توانید دستورات شرطی ساده یا پیچیده‌ای را به راحتی بنویسید.

سینتکس اسمارتی

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

موتور قالب این فایل‌ها را خوانده و فایل‌های مجاز اچ‌تی‌ام‌ال را به وسیله آن‌ها تولید خواهد کرد.

در ادامه با تعدادی از مفاهیم مورد استفاده در سینتکس اسمارتی آشنا خواهید شد.

متغیرها

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

<h2>{$sArticle.articleName}</h2>

این مثال کوچک نشان می‌دهد که مقداری که متغیر حاوی آن است در عنصر <h2> نمایش داده خواهد شد. نقطه‌ای که بین کلمات sArticle و articleName قرار گرفته است به معنای این است که متغیر sArticle تنها یک مقدار نداشته و به صورت آرایه‌ای از مقادیر تعریف شده و برای دستیابی به مقدار articleName، از یک نقطه جداکننده استفاده شده است.

تغییردهنده‌ها

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

<div>

{$sArticle.description|truncate:120}

</div>

همانطور که مشاهده کردید، با اضافه کردن تنها یک | و آوردن نام تغییر دهنده بلافاصله بعد از نام متغیر، تغییردهنده را به متغیر اعمال کردیم. در این مثال تغییردهنده ما truncate است که به متغیر description اعمال شده و حداکثر تعداد کاراکترهای آن را ۱۲۰ عدد تعیین کرده است. پارامترهایی مانند عدد ۱۲۰ را می‌توان با گذاشتن دو نقطه بعد از نام تغییردهنده، به آن اضافه کرد.

همچنین می‌توان چندتغییردهنده را روی یک متغیر اعمال کرد، مانند مثال زیر:

<div>

{$sArticle.description|strip_tags|truncate:120}

</div>

در این مثال، قبل از اعمال تغییردهنده مربوط به تعداد کاراکترها، تگ‌های اچ‌تی‌ام‌ال از متغیر description حذف می‌شوند.

دستورات شرطی

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

{if $sArticle.description}

{$sArticle.description}

{else}

{$sArticle.description_long|strip_tags|truncate:120}

{/if}

در این مثال، تعریف شدن یا نشدن یک متغیر مورد بررسی قرار گرفته است.

حلقه‌های تکرار

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

<ul>

{foreach $sArticles as $item}

<li>{$item.articleName}</li>

{/foreach}

</ul>

همانطور که دیدید، حلقه با یک {foreach}آغاز شده و با یک {/foreach} پایان یافته است. در این مثال حلقه روی $sArticle اجرا شده و نام هر کدام از آن‌ها (articleName) را در آرایه item قرار داده است.

مقایسه سینتکس اسمارتی با سینتکس پی‌اچ‌پی

تعریف متغیر در پی‌اچ‌پی:

<?=$foo?>

تعریف متغیر در اسمارتی:

{$foo}

دسترسی به آرایه در پی‌اچ‌پی:

<?=$foo[‘bar’]?>

دسترسی به آرایه در اسمارتی:

{$foo.bar}

همانطور که مشاهده می‌کنید، سینتکس اسمارتی نسبت به پی‌اچ‌پی از سادگی بیشتری برخوردار است.

آیا اسمارتی بهترین موتور قالب برای PHP است؟

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

از بهترین رقبای اسمارتی می‌توان به سونت اشاره کرد که یک موتور قالب شئ‌گرا برای پی‌اچ‌پی است.

نحوه نصب و استفاده از اسمارتی

در این قسمت نصب اسمارتی آموزش داده خواهد شد. با پیش‌نیازها و ابزار لازم برای نصب اسمارتی آشنا خواهید شد.

پیش‌نیازهای نصب اسمارتی

اسمارتی نیازمند یک وب سرور نظیر آپاچی است که پی‌اچ‌پی نسخه 5.2 یا بالاتر روی آن نصب باشد. فرض می‌کنیم که نحوه راه اندازی یک وب سرور را می‌دانید و با اصول و مفاهیم اولیه برنامه نویسی وب آشنایی دارید.

نصب اسمارتی

نصب اسمارتی بسیار آسان است. تنها کافیست که فایل فشرده را دانلود کرده و آن را از فشردگی خارج کنید (extract کنید). حال باید پوشه کتابخانه‌های اسمارتی را در مسیری که برای اپلیکیشن شما قابل دسترسی باشد قرار دهید.

برای دانلود اسمارتی، به سایت رسمی اسمارتی مراجعه کنید.

استفاده از اسمارتی

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

استفاده از اسمارتی نیازمند دسترسی به فایل پی‌اچ‌پی Smarty.class و سپس ساختن یک شئ از نوع اسمارتی است که دسترسی شما به کل سیستم اسمارتی را فراهم خواهد کرد.

یک فایل .tpl شامل تمامی کد لایه طراحی (اچ‌تی‌ام‌ال و سی‌اس‌اس) باید ساخته شود.

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

مثالی از کاربرد اسمارتی

فرض کنید کد پی‌اچ‌پی شما حاوی دو متغیر زیر باشد:

$msg= ‘Hello World, this is mu first Smarty!’;

$title = ‘Hello Smarty World’;

در ادامه، متغیرهای پی‌اچ‌پی به متغیرهای اسمارتی واگذار می‌‌شوند:

$smarty->assign(‘title’,$title);

$smarty->assign(‘message’,$msg);

در نهایت تابع display، نام فایل قالب یا همان فایل .tpl شما را گرفته و آن را به موتور اسمارتی فرستاده و نتیجه را به صورت یک فایل اچ‌تی‌ام‌ال نمایش می‌دهد:

$smarty->display(‘test.tpl’);

کد فایل tpl شما نیز به صورت زیر خواهد بود:

<html>

<head>

<title>{$title}</title>

</head>

<body>

{$message}

</body>

<html>

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

کلام آخر

در این مقاله موتورهای قالب و یکی از موتوهای قالب پرکاربرد یعنی اسمارتی مورد بحث و بررسی قرار گرفتند.

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

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

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

منابع

https://www.techopedia.com/definition/4899/website-template

https://www.pabbly.com/tutorials/template-engine-in-expressjs/

https://www.fullstackpython.com/template-engines.html

https://ourcodeworld.com/articles/read/847/top-7-best-open-source-php-template-engines

https://www.smarty.net/docs/en/what.is.smarty.tpl

https://developers.shopware.com/designers-guide/smarty/

https://www.packtpub.com/product/smarty-php-template-programming-and-applications/9781904811404

نوشته Smarty چیست؟ معرفی و توضیح ویژگی‌ها به همراه مثال اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

چرا خوبه که Golang رو یاد بگیریم؟

http://kirael-art.deviantart.com/art/Go-lang-Mascot-458285682

این نوشته ترجمه پست Keval Patel در این آدرس هست:
https://medium.com/@kevalpatel2106/why-should-you-learn-go-f607681fad65
همچنین کامنت یکی از کاربران رو در آخر همین مقاله قرار دادم که به نظرم مفید واقع می‌شود.


در چند سال گذشته, زبان برنامه نویسی جدید ظهور کرده است: Go یا GoLang. هیچ چیز مثل یک زبون برنامه نویسی جدید یه دولوپر رو دیوونه نمیکنه, درسته؟ پس, من شروع کردم به یادگیری Go از ۴ یا ۵ ماه پیش و الان اینجام تا به شما بگم چرا خوبه که این زبان جدید رو یاد بگیریم.

من در این مقاله نمی‌خواهم به شما یاد بدم چطور یه “!!Hello, World” بنویسید. توی فضای اینترنت پر هست از این دست آموزش‌ها. من اینجام تا توضیح بدم چرا به زبون جدید Go نیاز داریم؟. بخاطر اینکه اگر هیچ مشکلی وجود نداشته باشه به راه حل‌ای هم نیاز نداریم, درسته؟


محدودیت های سخت افزاری:

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

اولین پردازنده Pentium 4 با سرعت 3.0GHz در سال ۲۰۰۴ توسط اینتل معرفی شد. امروز, Macbook Pro 2016 من سرعت پردازشی حدود 2.9GHz دارد. پس, در یک دهه اخیر, قدرت پردازش زیادی بدست نیامده است. شما میتونید مقایسه افزایش قدرت پردازش با زمان آنرا در نمودار زیر ببینید.

در نمودار بالا می‌بینید که عملکرد single-thread و فرکانس پردازنده در یک دهه ثابت مانده. اگر شما فکر می‌کنید که اضافه کردن ترانزیستورهای بیشتر راه حل هست, پس شما اشتباه میکردید.

پ.ن: ببینید طبق قانون مور که بالاتر گفتم, ابعاد ترانزیستورها هر ۲ سال نصف می‌شود, و زمانی که ابعاد ترانزیستور درحال کوچک شدن هست بعد از مدتی این موضوع محدودیت‌های فیزیکی برای سازنده پردازنده‌ها ایجاد میکند.

ویکیپدیا: این محدودیت فیزیکی دانشمندان را به این سمت سوق داده که شاخه‌های جدیدی از روش‌های محاسباتی را آزمایش کنند، تا در هنگام لزوم بتوانند جایگزین مناسبی برای رایانه‌های امروزی داشته باشند؛روش‌هایی همچون محاسبه کوانتومی، محاسبه زیستی و… . آنچه مسلم است، این است که در چنین رایانه‌هایی خبری از تراشه و CPU هایی به شکل‌های امروزی نخواهد بود.

پس راه حل‌هایی برای مشکل بالا ارائه شد:

  • تولید کنندگان شروع به افزودن هسته های بیشتر به پردازنده کردند.
    امروزه ما CPU های چهار هسته‌ای و هشت هسته‌ای در دسترس داریم.
  • ما همچنین hyper-threading را معرفی کردیم.
  • برای افزایش عملکرد ، حافظه کش بیشتری به پردازنده اضافه شده است.

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

۲ – افزودن هسته بیشتر به پردازنده, هزینه بیشتری هم دارد. همچنین ، نمی‌توان تعداد آن را به طور نامحدود افزایش داد. این پردازنده های چند هسته ای می توانند چندین Thread را به طور همزمان اجرا کنند و این موضوع برای Concurrency به ما کمک میکند که بعداً در مورد آن بحث می کنیم.

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

گو, goroutine دارد:

همانطور که در بالا بحث کردیم, تولیدکنندگان سخت افزار برای افزایش کارایی هسته های بیشتری به پردازنده ها اضافه می کنند.همه دیتا سنترها بر روی آن پردازنده ها کار می کنند و ما باید در سال های آینده انتظار افزایش تعداد هسته‌ها را داشته باشیم. علاوه بر این ، برنامه های امروزی از چندین micro-service برای ارتباط با پایگاه داده ، queue ها و حافظه کش استفاده می کنند. بنابراین ، نرم افزاری که توسعه می دهیم و زبانهای برنامه نویسی که استفاده می‌کنیم باید به راحتی از Concurrency پشتیبانی کنند و با افزایش تعداد هسته ها مقیاس پذیر (scalable) باشند.

اما ، اکثر زبان های برنامه نویسی مدرن (مانند جاوا ، پایتون و غیره) از دهه (’90s)
زمان برنامه های single-thread میایند. اکثر این زبان های برنامه نویسی از multi-threading می کنند. اما مشکل واقعی با اجرای برنامه های Concurrent همراه است مثل threading-locking , race conditions و deadlocks. این موارد ایجاد برنامه multi-thread را در آن زبانها را دشوار می کند.

برای مثال ، ایجاد thread در جاوا از نظر حافظه کارآمد نیست. از آنجا که هر thread تقریباً 1MB از حجم حافظه را مصرف می کند و در نهایت اگر هزاران thread را ایجاد کنید ، فشار زیادی بر روی حافظه وارد می کنند و به دلیل کمبود حافظه برنامه دچار مشکل می شود. همچنین ، اگر می خواهید بین دو یا چند thread ارتباط برقرار کنید ، ایجاد این ارتباط بسیار مشکل خواهد بود.

از سوی دیگر ، Go در سال 2009 هنگامی که پردازنده های چند هسته ای در دسترس بودند ، منتشر شد. به همین دلیل Go با در نظر گرفتن concurrency ساخته شده است. Go به جای thread دارای گوروتین (goroutine) است. آنها تقریباً 2 کیلوبایت حافظه از heap را مصرف می کنند. بنابراین ، می توانید میلیون ها گوروتین را در هر زمان استفاده کنید.

http://golangtutorials.blogspot.in/2011/06/goroutines.html :روتین چطور کار میکند؟ منبع

مزایای دیگر عبارتند از:

  • گوروتین ها دارای stack های قابل رشد هستند. این بدان معناست که آنها فقط در صورت نیاز از حافظه بیشتری استفاده خواهند کرد.
  • زمان راه‌اندازی (startup) گوروتین سریعتر از thread ها است.
  • گوروتین‌ها دارای ساختار built-in برای ایجاد ارتباط بین گوروتین‌های دیگر هست که با استفاده از channel ها امکان پذیر است.
  • گوروتین به شما این امکان را می دهد که هنگام به اشتراک گذاری ساختار داده ها ، مجبور نباشید از lock mutex استفاده کنید.
  • همچنین گوروتین‌های گو با thread های سیستم عامل ارتباط 1:1 ندارند. این یعنی یک گوروتین میتونه روی چندین thread اجرا بشه.

شما میتونید سخنرانی Rob Pike رو برای عمیق‌تر فهمیدن این موضوع نگاه کنید:
https://blog.golang.org/concurrency-is-not-parallelism

با تمام نکات بالا که Go را یک زبان بسیار قوی برای پشتیبانی از concurrency مثل java و C++/C میکنه در همین حال به زیبایی Erlang از آن استفاده می‌کند.

گو در هر دو زمینه راحتی و بهینگی Concurrency به خوبی عمل کرده است.


گو مستقیماً بر روی سخت افزار اجرا می شود.

یکی از مهمترین مزایای استفاده از C ، C ++ نسبت به سایر زبانهای سطح بالاتر مانند جاوا/پایتون ، عملکرد آنهاست. زیرا C/C ++ کامپایل می شوند و تفسیر نمی شوند.

پردازنده ها باینری را می فهمند. به طور کلی ، وقتی برنامه ای را با کامپایلر پروژه خود با استفاده از جاوا یا سایر زبان های مبتنی بر JVM می سازید ، کد خوانا برای انسان را به byte-code کامپایل می کند که توسط JVM یا سایر ماشین های مجازی که در بالای سیستم عامل اصلی اجرا می شوند. در حین اجرا ، VM آن byte-code هارا تفسیر کرده و آنها را به Binary تبدیل می کند که پردازنده ها می توانند آن را پردازش کنند.

مراحل اجرای برنامه تحت VM

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

مراحل کامپایل برنامه بدون VM

اما مدیریت حافظه در آن زبان ها دردسر بزرگی است. در حالی که اکثر زبان های برنامه نویسی با استفاده از الگوریتم Garbage Collector یا Reference Counting مقداردهی و حذف شی را مدیریت می کنند.

گو در هر دو زمینه به خوبی عمل کرده است. هم مانند زبان های سطح پایین مثل C++/C کامپایل می‌شود. که کارایی گو را به زبان‌های سطح پایین‌تر نزدیک می‌کنم. و همچنین از Garbage collection برای مدیریت حافظه استفاده می‌کند.


نگهداری (maintain) کد نوشته شده با Go آسان است.

بزارید یک چیزی به شما بگویم. Go مانند دیگر زبانها syntax برنامه نویسی دیوانه واری ندارد و دارای syntax بسیار مرتب و تمیز است.

پ.ن: این مورد مزیت و معایب خودش رو داره که در ادامه توضیح می‌دهم.

طراحان Go در گوگل هنگام ساخت این زبان به این نکته توجه داشتند. از آنجایی که google کد بیس بسیار بزرگی دارد و هزاران توسعه دهنده بر روی همان کد بیس کار می کردند ، درک کد برای توسعه دهندگان دیگر باید ساده باشد و یک بخش کد باید کمترین side effect (تداخل شاید بشه معنی کرد!) را روی بخش‌های دیگر داشته باشد. این باعث می شود کد به راحتی قابل نگهداری و اصلاح شود.

گو عمداً بسیاری از قابلیت های زبان های OOP مدرن را کنار می گذارد.

  • گو از class ها استفاده نمی‌کند. همه چیز به چندین package تقسیم می‌شود. گو struct داره بجای کلاس‌ها.
  • از ارث‌بری پشتیبانی نمی‌کند. این باعث می شود کد به راحتی قابل تغییر باشد. در زبانهای دیگر مانند جاوا/پایتون ، اگر کلاس ABC از کلاس XYZ ارث‌بردی کند و شما تغییراتی در کلاس XYZ ایجاد کنید ، ممکن است در کلاسهای دیگری که XYZ را به ارث برده اند side effect ایجاد کند. گو با حذف وراثت ، درک کد را نیز آسان می کند (زیرا هنگام نگاه کردن به یک کد ، هیچ super classای وجود ندارد که بتوان به آن نگاه کرد).
  • بدونِ constructors.
  • بدونِ annotations.
  • بدونِ generics.
  • بدونِ exceptions.

پ.ن: هر کدام از این بدونِ‌ها 🙂 دلایل خودشون رو دارند که در این مقاله نمی‌گنجه.

نکات بالا گو را بسیار متفاوت از زبان‌های برنامه نویسی دیگر می کند و باعث می شود برنامه نویسی در گو هم متفاوت از زبان‌های دیگر باشد. ممکن است برخی از نکات بالا را دوست نداشته باشید. اما ، اینطور نیست که شما نتوانید برنامه خود را بدون ویژگی های بالا بنویسید. تنها کاری که باید انجام دهید این است که 2-3 خط بیشتر بنویسید. اما در جنبه مثبت ، کدِ شما را تمیزتر می کند و وضوح بیشتری به کد شما می بخشد.

جایگاه زبان‌ها بر اساس کد خوانا در برابر کد بهینه

در نمودار بالا نمایش داده می شود که گو تقریباً به اندازه C/C ++ کارآمد است ، در حالی که syntax کد را مانند Ruby ، Python و سایر زبانها ساده نگه می‌دارد. این یک موقعیت برد-برد هم برای انسان‌ها و هم برای پردازنده‌ها است !!!

گو توسط Google پشتیبانی می‌شود.

  • من می دانم که این یک مزیت فنی نیست. اما ، گو توسط Google طراحی و پشتیبانی می شود. گوگل دارای یکی از بزرگترین زیرساخت های ابری در جهان است و به طور گسترده ای مقیاس بندی شده است. گو توسط گوگل برای حل مشکلات پشتیبانی از مقیاس پذیری و اثربخشی طراحی شده است. اینها همان مشکلاتی است که هنگام ایجاد سرورهای با آنها روبرو خواهینم شد.
  • گو همچنین توسط شرکت‌های بزرگ دیگر استفاده می‌شود که در لینک زیر می‌تونید اسامی برنامه‌ها شرکت‌ها و کاربرد استفاده ‌گو در آن را مطالعه کنید. (https://github.com/golang/go/wiki/GoUsers)

خلاصه:

گو عملکرد بسیار بالایی مثل زبان‌های C++/C, مدیریت Concurrency مثل جاوا و سیتنکس باحالی مثل پایتون و پرل داره. اگر برنامه ای برای یادگیری Go ندارید ، باز هم می گویم محدودیت سخت افزاری به ما ، توسعه دهندگان نرم افزار فشار می آورد تا کد فوق العاده کارآمدی (efficient) بنویسند. توسعه دهنده باید سخت افزار را بشناسد و برنامه خود را مطابق آن بهینه سازی کند. نرم افزار بهینه سازی شده می تواند بر روی سخت افزار ارزان تر و کندتر (مانند دستگاه های IOT) اجرا شود و در کل تأثیر بهتری بر تجربه کاربر نهایی بگذارد.

کامت یکی از کاربران که می‌تونه مفید باشه:

Rex Kerr:

گو جنبه های منفی زیادی نیز دارد که بیشتر آنها را به عنوان موارد مثبت ذکر کرده اید. این بدان معنا نیست که گو ارزش یادگیری ندارد (زبان سختی که نیست! چرا که نه!) ، اما این بدان معناست که پروژه های زیادی وجود دارد که نمی خواهید از گو برای آن استفاده کنید.

۱- گو مستقیماً بر روی سخت افزار اجرا می شود بدون اینکه نیاز باشه به سخت افزار کاری داشته باشید ، به طور متوسط ​​سریعتر از جاوا نیست (به benchmarkهای مختلف و Computer Languages Benchmark Game مراجعه کنید). اگر واقعاً می خواهید هر گونه عملکردی را روی سخت افزار خود انجام دهید ، باید از C ، C ++ ، Rust یا برخی از زبان های دیگر که کنترل مناسب را به شما می دهد ، استفاده کنید.

۲- قابلیت های abstraction گو عملاً وجود ندارد. شما می توانید از این زبان برای * انجام * کارها استفاده کنید اما نه برای ایجاد structureهای پیشرفته تر. نکته مثبت – فهم آسان آن است! نکته منفی – ساخت پروژه هایی با structure پیچیده برای همیشه دور از دسترس هستند ، زیرا ایجاد آنها بسیار دشوار است و کامپایلر به شما کمک نمی کند. در مقابل ، زبان هایی مانند C++ ، Scala ، Haskell و غیره مکانیسم های abstraction بسیار قدرتمندی را ارائه می دهند تا به کامپایلر شما بفهماند راه حل انتراعی شما برای مشکل پیچیده چیست تا کامپایلر به شما کمک کند.

۳- گو فقط دارای گوروتین برای همزمانی است. اگر مشکل شما با آن مدل Concurrency به خوبی حل شد ، عالی است! اگر نه ، خوب ، این تنها مدل شماست. سایر زبانها معمولاً ترکیبی از چنین مواردی را ارائه می دهند. گو گوروتین ها را به خوبی انجام می دهد ، بنابراین اغلب می توانید از آنها در مکانهایی استفاده کنید که فکر می کنید به چیز دیگری احتیاج دارید (به عنوان مثال در یک atomic reference).

بنابراین گو عملکردی در سطح جاوا (نه در سطح ++C) با یک رویکرد عالی برای Concurrency ، و زبانی جمع و جور ، مرتب و غیرقابل انعطاف را برای شما فراهم می کند. خوب!

پروژه های زیادی وجود دارد که دقیقاً گو همان چیزی است که شما می خواهید.

نوشته چرا خوبه که Golang رو یاد بگیریم؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

کد تمیز و شیئ گرایی

این مطلب در ادامه سری برداشت‌ها و خلاصه ی کتاب Clean Code، با نگاه به فصل ششم کتاب نوشته شده.

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

این بخش به طور مشخص برنامه نویسی شیئ گرا رو مورد هدف قرار داده و نکته هاش برای کسایی که با زبان های برنامه نویسی شیئ گرا (مثل #C و جاوا و …) کار می‌کنند بیشتر کاربردیه.

قانون اول تعریف ‌‌‌‌Object ها:
هیچ متغیری را به صورت ‌public تعریف نکن مگر این که دلیل محکمی برای اون وجود داشته باشه.

مفهوم Abstraction

یکی از اولین اصطلاحاتی که موقع شروع برنامه نویسی با زبان های شیئ گرا با اون آشنا می‌شید ‌Abstraction نام داره. به طور خلاصه به این مفهومه که ‌Object ای که تعریف می‌شه باید اطلاعات و عملکرد ها رو تا حد ممکن به شکل ساده سازی شده و خلاصه ارائه (expose) کنه. برای درک این مفهوم مثال های بعدی رو ببینید:

هدف کلاس Point به طور مشخص در بر گرفتن اطلاعات یک نقطه در دستگاه مختصات است. در مثال اول در قالب یک کلاس تعریف شده که به طور مشخص به ما اجازه تغییر جداگانه مقادیر x و y را میده و تمام ساختار درونی خودش رو ‌‌expose می‌کنه.‍

مثال دوم اما با تغیر یک ‌interface نحوه کار و تغییر اطلاعات رو به شکل مشخصی ساختارمند می‌کنه. به طور مشخص ما رو مجبور می‌کنه که مقادیر ‌x و y رو یکجا و با هم تغییر بدیم و همینطور در صورت مقدار دهی قطبی هم شعاع و زاویه باید همزمان ست بشن.

هردوی این مثال ها نمونه هایی از تعریف یک ‌Data Structure در قالب شیئ گرایی هستند اما مثال دوم با پنهان کردن ساختار داخلی خودش، روش مشخصی برای کار کردن با Object رو تعریف کرده.

مفهوم Abstraction به پنهان کردن ساختار داخلی خلاصه نمیشه و ما رو تشویق می‌کنه که موقع تعریف کردن متد های عمومی یک کلاس هم اون ها رو به شکل ساده شده تعریف کنیم. مثال های بعدی رو ببینید:

در دو نمونه interface تعریف شده برای وسیله نقلیه (Vehicle)، مورد اول ما می‌تونیم به طور مشخص میزان سوخت موجود در باک و ظرفیت کلی باک رو جداگانه دریافت کنیم و با اون ها هر کاری لازم داریم انجام بدیم اما توی مثال دوم با در نظر گرفتن Abstraction این دو متد حذف شدند و یک متد جایگزین شده که درصد سوخت باقیمانده نسبت به ظرفیت سوخت وسیله نقلیه رو برمیگردونه و ما دسترسی به اطلاعات درونی ‌‌Object نداریم.

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

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

تفاوت بین ‌Object و Data Structure

هر دو مفهموم Object و Data Structure توی زبان های شیئ گرا توسط کلاس ها تعریف می‌شن و ظاهرشون کاملا شبیه همه. توی این بخش راجع به تفاوت شون وکاربرد هاشون صحبت می‌کنیم و هدفمون اینه که وقتی کد یک کلاس رو می‌خونیم بدونیم با کدوم شون مواجه ایم و همینطور موقع نوشتن کد بهتر انتخاب کنیم که از Object استفاده کنیم یا Data Structure.

به طور خلاصه Object ها کلاس هایی هستند که یک شیئ با عملکرد های مختلف مربوط به اون رو در بر می‌گیرند و Data Structure ها کلاس هایی اند که فقط محل قرارگیری یک سری اطلاعات و مقادیر هستند و برای نگه داشتن اون ها استفاده می‌شن و دارای منطق یا عملکرد خاصی نیستند.

به عنوان مثال ببینیم که با استفاده از Object ها یا Data Structure ها چطوری میشه یک سری شکل و محاسبه مساحت اون ها رو مدل کرد:

توی کد بالا همون طور که می‌بینین شکل های مختلف (دایره، مربع و مستطیل) در قالب ‌Data Structure ها تعریف شدند که فقط در بر گیرنده اطلاعات لازم برای تعریف اون هاست و برای محاسبه مساحت اون ها کلاسی به اسم Geometry تعریف شده که دارای یک متد برای محاسبه مساحت همه شکل هاست و همونطور که می‌بینین متد area از ویژگی های شیئ گرایی استفاده ای نکرده و کاملا به شکل procedural نوشته شده.

اما روش دیگه پیاده کردن همین کد در قالب ‌‌Object های OOP (برنامه نویسی شیئ گرا) به چه شکلی می‌شه؟

توی این روش یک interface به نام shape تعریف شده که تمام شکل ها اون رو پیاده سازی می‌کنن و طبق اون هر کلاس یک متد به اسم area داره که مقدار مساحت اون شکل رو برمیگردونه. تفاوت های کلاس Rectangle توی دو تا مثال رو نگاه کنید تا تفاوت Object و Data Structure رو به طور واضح متوجه شید:

  • در اولی (Data Structure) متغیر ها عمومی هستند و در دومی (Object) متغیر ها خصوصی
  • در Data Structure متدی وجود نداره ( مگر setter و getter) ولی Object ها دارای متد های مربوط به اون Object هستند

هیچ کدوم از این دو روش درست یا غلط نیست و هدف از دیدن شون درک تفاوت هاست تا موقع استفاده بتونید تصمیم بگیرید که کدوم مناسب تر هست.

برای درک منظور تصور کنید که میخوایم تابعی به اسم perimeter اضافه کنیم تا محاسبه محیط رو انجام بده. اگر به روش اول پیاده سازی انجام شده باشه کافیه که این متد داخل کلاس Geometry پیاده بشه و نیازی به تغییر در هیچ کدوم کلاس های Circle و Rectangle و … نیست. در حالی که اگر به روش دوم پیاده کرده باشیم، باید متد perimeter داخل هرکدوم از کلاس ها جداگانه تعریف بشه و به این ترتیب پیاده سازی طولانی تر و حجم تغییرات بیشتر می‌شه.

در نقطه مقابل تصور کنید که شکل جدیدی مثلا مثلث رو میخوایم به نرم افزار اضافه کنیم. اگر نرم افزار به روش اول Data Structure پیاده سازی شده باشه، لازمه که علاوه بر تعریف کلاس جدید برای مثلث، در کلاس Geometry هم محاسبات رو تغییر بدیم تا محاسبه مربوط به مثلث رو هم به درستی انجام بده اما اگر به روش دوم پیاده سازی انجام شده باشه، فقط کافیه کلاس جدیدی رو برای مثلث تعریف کنیم که خودش در بر گیرنده محاسبه محیط و مساحت خودش هم هست و نیازی به تغییر در جای دیگه نداریم.

پس به طور خلاصه اگر در آینده امکان اضافه شدن عملکرد های جدید بیشتر باشه استفاده از Data Structure l انتخاب بهتریه و اگر احتمال اضافه شدن نوع های جدید به سیستم وجود داشته باشه (مانند مثال مثلث) بهتره که از روش Object استفاده کنیم.

به طور خلاصه، قرار نیست همه چیز، همیشه در قالب Object تعریف بشه و گاهی وقت ها بهتره که از Data Structure ها استفاده کنیم و procedure هایی داشته باشیم که روی اون ها کار می‌کنند.

قانون Demeter

قاعده دیمیتر (Law of Demeter) برای جلوگیری از ایجاد ارتباط های پیچیده و عمیق بین ‌Object هاست.

به طور دقیق این قانون می‌گوید که متد f از کلاس C فقط می‌تواند متد هایی از این ‌ Object ها را استفاده کند:

  • متد های کلاس C
  • متد های Object ای که داخل خودش ساخته شده
  • متد های Object ای که جزو ورودی هایش هست
  • متد های Object ای که به عنوان instance variable داخل کلاس C وجود دارد

برای ساده شدن موضوع از یک مثال استفاده می‌کنم:

منظور از همه چیزهایی که گفتیم چیه؟

کلاس User رو ببینید، به طور مشخص این کلاس می‌تونه به متد های کلاس Account دسترسی داشته باشه، همینطور به متد های داخلی خودش و البته داخل متد discountedPrice، می‌تونه به متد های کلاس
Coupon هم دسترسی داشته باشه. اما قانون Demeter توی این مثال کجا نقض شده؟

توی خط شماره ۷ جایی که از متد getPrice که مربوط به کلاس Plan هست استفاده شده. این کلاس در دسترس کلاس User نیست و توسط کلاس Account برگردونده شده و نباید دسترسی به داخلش پیدا کنیم.

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

حالا وقتی به چنین عملکردی نیاز داریم چیکار کنیم؟

راه حل گذشتن از این طور مشکل ها یادآوری یک نکته در مورد پیاده سازی ‌Class هاست:

یک Object باید عملکرد های مورد نیاز رو ارائه کنه نه مقادیر رو! یعنی چی؟ یعنی اینجا کلاس Account باید به جای برگردوندن ساده مقدار plan و واگذار کردن بقیه چیزها به کلاس User، مسئولیت محاسبه تخفیف رو به عهده بگیره. در این صورت کد به شکل زیر در میاد و مشکل قانون Demeter به طور کلی حل می‌شه.

این ها بخشی از نکاتی بود که رابرت سی مارتین برای پیاده سازی Object ها در کتاب Clean Code بهش اشاره کرده. مثل تمام پست های این سری، پیشنهاد می‌کنم که اگر این مفاهیم براتون جذاب هست کتاب رو به طور کامل مطالعه کنید.

نوشته کد تمیز و شیئ گرایی اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

برنامه نویسی سایت رو از کجا شروع کنم ؟

یکی از بزرگترین دغدغه های کسانی که تازه میخوان وارد حوزه وبسایت بشن اینه که نمیدونن از کجا باید شروع کنن ، امروز میخوایم تو این مقاله با هم به بررسی این موضوع بپردازیم که نقطه شروع کجاست ؟

قبل از اینکه بریم و شروع کنیم میخوام یک نکته به شدت مهم و حیاطی رو بگم بهتون ، میشه گفت این نکته راز موفقیت شما تو هر کاریه !

اون نکته چیزی نیست جز علاقه .

علاقه باعث میشه شما توی کارتون پیشرفت کنید ، براش بجنگید و تلاش کنید ، چند شب نخوابید ، کارتون بشه تفریحتون و تفریحتون بشه کارتون و …

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

پس با این اوصاف نقطه شروع رو پیدا کردیم ، نقطه شروع علاقه هست ، اگر علاقه ندارید بهتون قول میدم برنامه نویسی برای شما سخت ترین و طاقت فرسا ترین کار دنیا میشه .

اگر به برنامه نویسی علاقه دارید ، بریم ببینیم که بقیه مسیر چیه ؟

طراح یا برنامه نویس ، مسئله این است !

توی حوزه وب سایت ها ما دو تا دسته داریم : طراح های سایت و برنامه نویس های سایت که هر کدوم از این ها کاملا از هم جدا هستند ، البته منظورم از جدا بودن نوع کاری که انجام میدن هست وگرنه کاملا باید با هم در تعامل باشن .

طراح سایت کیست؟

به طور کلی ، شخصی که طرح گرافیکی و شمای کلی یک وب سایت را طراحی میکند طراح وب سایت است .

اگر بخوایم یک مقداری دقیق تر توضیح بدیم ، طراح وب سایت به مفاهیم UI , UX , CX , WireFrame و … ، ابزار هایی مانند photoshop , adobe XD, figma و … تسلط کامل داره ، سعی میکنه با توجه به نوع وب سایت مشخصه هایی رو در طراحی وب سایت به کار ببره تا وب سایت رو جذاب و کاربر پسند بکنه و باعث بشه کاربر تجربه خوبی از کار با اون وب سایت داشته باشه .

طراحی وب سایت به این صورت هست که طراح یک طرح از وب سایت با توجه به نیاز کارفرما و بازار در اپلیکیشن هایی که بالا گفتم طراحی میکنه و اون رو به برنامه نویس فرانت اند میده .

قبل از اینکه بریم سراغ برنامه نویسی سایت یه نکته ای وجود داره که باید بگم

توی این قسمت ما دو نوع ادم داریم :

  • یا به برنامه نویسی و کد نویسی علاقه دارن
  • یا به برنامه نویسی و کد نویسی علاقه ندارن

اگر شما جزو افرادی هستید که به برنامه نویسی علاقه ندارید میتونید از قالب های اماده و پنل های مدیریت محتوا مثل wordpress , jomla و … استفاده کنید که دیگه نیازی نداره زیاد کد نویسی کنید و خیلی راحت و توی کم ترین زمان سایتتون بالا میاد .

ولی اگر به برنامه نویسی علاقه دارید بقیه مقاله رو حتما مطالعه کنید .

برنامه نویسی سایت

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

  • · برنامه نویس front-end
  • · برنامه نویس back-end

اول از همه به برنامه نویس front-end بپردازیم

برنامه نویس front-end کیست ؟

به کسی که طرح گرافیکی طراح سایت را به یک وب سایت واقعی و کد تبدیل کند برنامه نویس front-end یا برنامه نویس سمت کاربر گفته میشه ، نکته اینجاست که وقتی برنامه نویسی Front-end تموم شد فقط ظاهر یا قالب سایت تکمیل شده و هیچ اطلاعاتی ثبت و خونده نمیشه .

برای مثال یک وب سایت فروشگاهی مثل دیجی کالا رو تصور کنید ، فرض کنید ما داریم این وب سایت رو از اول درست میکنیم ، وقتی بخش Front-end وب سایت تموم میشه ، کسی نمیتون خرید خودش رو یا نظر خودش رو به ثبت برسونه یا کسی نمیتونه با پشتیبانی ارتباط برقرار کنه ، ادمین های سایت نمیتونن محصول به سایت اضافه کنن و هر چیز دیگه ای ، برای این کار ها نیاز هست که وب سایت ما با استفاده از یک زبان back-end به پایگاه داده وصل بشه .

برنامه نویس back-end کیست ؟

به کسی که قالب وب سایت رو با استفاده از یک زبان برنامه نویسی مثل PHP , Node.js , python و … به پایگاه داده وصل میکنه برنامه نویس back-end یا برنامه نویس سمت سرور میگن .

امیدوارم تا اینجای کار کلیت حوزه وب سایت ها رو متوجه شده باشید .

حالا بریم یه مقداری عمیق تر بشیم

برای front-end کار شدن به چه چیز هایی احتیاج هست ؟

برای اینکه front-end کار بشید به ترتیب باید به یادگیری موارد زیر بپردازید :

  • HTML & CSS
  • Responsive Web design

· یک فریم ورک فرانت اند مثل bootstrap یا material design

  • javascript
  • Jquery
  • CSS Preprocessor

· یک فریم ورک مربوط به جاوااسکریپت مثل react.js یا vue.js

اگر شما به طور کامل به موارد بالا مسلط بشید میشه گفت که یک فرانت اند کار حرفه ای و کار کشته هستید .

البته بهتر هست که به این نکته اشاره کنم که بهتره در کنار فرانت اند به طراحی وب سایت هم مسلط باشید .

برای back-end کار شدن به چه چیز هایی احتیاج هست ؟

اول از همه باید یک زبان برنامه نویسی رو انتخاب بکنید .

زبان های برنامه نویسی خیلی زیادی هستند که میشه انتخابشون کرد ، لیست زیر محبوب ترین زبان های برنامه نویسی وب سایت توی دنیا هست :

  • Javascript
  • Python
  • PHP
  • C#
  • Ruby
  • Java

البته زبان های دیگه ای هم هستن مثل Go , Scala , C++ , Perl و خیلی چیز های دیگه ، ولی خب لیست بالا محبوب ترین هاست .

وقتی که به یکی از زبان های بالا مسلط شدید باید یک دیتا بیس یا پایگاه داده انتخاب کنید .

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

  • SQL
  • NoSQL

این دو یک سری تفاوت های اساسی دارن که توی یه مقاله جدا بهشون میپردازیم .

بعد از اینکه به صورت کامل کار با دیتا بیس رو یاد گرفتید باید برید سراغ چیز های دیگه مثل امنیت و جلوگیری از هک وب سایت ، امنیت داده ها ، فریم ورک های مرتبط با زبان برنامه نویسیتون و خیلی چیز های دیگه .

توصیه من به شما این هستش که بعد از اینکه توی یکی از زمینه های فرانت اند یا بک اند مهارت پیدا کردید حتما سعی کنید یه دستی توی اون یکی هم ببرید .

اگر نمیدونید به شخصی که هم برنامه نویس front-end و هم برنامه نویس back-end هست fullstack میگن .

امیدوارم که این مطلب به دردتون خورده باشه اگر به یک road map دقیق و حرفه ای نیاز دارید میتونید این مقاله رو بخونید

نوشته برنامه نویسی سایت رو از کجا شروع کنم ؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

برنامه نویسی:threadای که اگر run شد، کارت تمام است

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

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

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

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

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

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

“The best place to hide a dead body is page two of google.”

این جمله مصداق شرح حال بسیاری از افرادی است که با کمی جست‌وجو خسته شده و به بررسی موارد بیشتری نمی‌پردازند.

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

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

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

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

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

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

نوشته برنامه نویسی:threadای که اگر run شد، کارت تمام است اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی