چرا برنامه نویسان، برنامه می نویسند؟

سوال ساده و در عین حال پیچیده ایه! من به عنوان برنامه نویس کارم رو( علاقه) سال ۷۸ ( سالش ممکنه درست نباشه) با کیو بیسیک شروع کردم، عاشقش شدم، یعنی این حس که از صفر یه چیزی می سازی، لذت عجیبی در یک بچه ۱۵ ساله ایجاد میکنه، کلا خودم رو خالق می دونستم!

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

یه سری کاندیشن بود که تو می گفتی چه مرگته، اینم دارو میداد! ( خودم تجویز میکردم) سرما خوردگی، گلو درد، سر درد و اینا رو حل میکرد.

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

عشق، علاقه به جاودانگی و تغییر دنیا، برای بهتر کردنش.

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

نوشته چرا برنامه نویسان، برنامه می نویسند؟ اولین بار در ویرگول پدیدار شد.

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

فعال کردن ssl برای پروژه های asp.net

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

اگه از ویژوال استودیو ۲۰۱۹ استفاده می کنید موقع ساخت پروژه اگه تیک گزینه configure for https رو زده باشید(که به صورت دیفالت تیکش زده شده) پروژه با ssl ران میشه

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

روی اسم پروژه (solustion نه:) ) در پنجره solution explorer کلیک کنید و سپس روی پنجره properties کلیک کنید اگه پنجره properties رو مشاهده نمی کنید به سربرگ view برید و روی properties window کلیک کنید یا f4 رو بزنید

حالا ssl enabled رو برابر true قرار برید

حالا ادرسی که تو ssl url براتون قرار داده شده رو کپی کنید

روی اسم پروژه کلیک راست کنید و گزینه properties رو بزنید

به قسمت web برید و در قسمت project url آدرسی که کپی کرده بودید رو قرار بدید و بعد کنترل + s رو برای سیو شدن فشار بدید

حالا پروژه رو ران کنید

همین طور که می بینید پروژه داره با ssl اجرا میشه

امیدوارم این پست به درد تون خورده باشه

نوشته فعال کردن ssl برای پروژه های asp.net اولین بار در ویرگول پدیدار شد.

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

کامپیوتر ۲۵۶ و اون سریال آلمانی

بچه که بودم تقریبا ۱۲ سالم بود بابام برای کارهای حسابداریش یه کامپیوتر خرید، یه کامپیوتر ۲۵۶ که فلاپی بزرگ می خورد، یه مگ! رم داشت و بنده خدا بابام توسط دوست عزیز فروشنده سرش کلاه رفته بود چون:

اولا گفته بود ۴ مگ رم

دوما، نرم افزار حسابداری نسخه دمو رایگان رو ۱۲ هزارت فروخته بود

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

اون سالها کامپیوتر ۴۸۶ اومده بود با فلاپی دیسک کوچیک اما ما دو نسل قبلیش رو داشتیم و تقریبا کارایی نداشت، یادمه یه روز ظهر تحت تاثیر جو سریال آلمانی می خواستم، خفن یه چیزی بسازم تو کامپیوتر خیلی ابتدایی داخل داس تلاش میکردم فینگلیسی و غیره که اقا برو فلان کارو کن! هی ارور بد کامند میداد، خلاصه بعد یک ساعت زدم cd a:

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

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

fin

نوشته کامپیوتر ۲۵۶ و اون سریال آلمانی اولین بار در ویرگول پدیدار شد.

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

چه زبانی برای تخصص من لازم است؟ (بخش اول)

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

برخی از تخصص ها و زبان های مورد نیاز آن ها را میتوانید در پایین ببینید.

طراحی وبسایت

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

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

· طراحی و پیاده سازی رابط کاربری یا فرانت اند (front-end)

· توسعه سمت سرور یا بک اند (back-end)

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

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

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

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

اما چه زبان هایی؟

برای رابط کاربری، حداقل نیاز شما تخصص کامل در htmlو css و دانش پایه ای و مورد نیاز JavaScript می باشد. (مباحث تخصصی تری مانند Jquery،bootstrap یا فریم ورک هایی مانند انگولار یا ری اکت بستگی به علاقه شما به این تخصص دارد و همچنین به پروژه نیز بستگی دارد)

برای بک اند، شما نیاز به تسلط به یکی از فریم ورک های سمت سرور مانند ASP.Net، لاراول، سمفونی، Node JS و… دارید که هرکدام از زبان های خاصی پشتیبانی میکنند. برای مثال .Net نیاز به C# یا Visual Basicدارد، لاراول و سمفونی نیاز به PHP و Node JS نیاز به دانش جاوااسکریپت دارد.

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

طراحی اپلیکیشن های اندرویدی یا iOS

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

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

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

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

اما چه زبانی؟

برای توسعه رابط کاربری اپ شما نیاز به دانش زبان XML و گاهی html دارید.

برای توسعه خود اپلیکیشن اندرویدی شما میتوانید از جاوا، کاتلین یا سی شارپ استفاده کنید (گزینه های دیگری نیز موجود است) و برای iOS عمدتا از swift استفاده میشود. (گزینه های دیگری نیز موجود است)

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

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

با تشکر از وقت شما

نوشته چه زبانی برای تخصص من لازم است؟ (بخش اول) اولین بار در ویرگول پدیدار شد.

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

چالش یک سال نوشتن! _ روز اول

نمیدونم چرا وقتی که ساعت ۱۰ بیدار میشم خیلی کسلم و هیچکار مفیدی نمیتونم انجام بدم. در اولین روز از چالش یک سال نوشتن بر خلاف روزهای قبل، زود از خواب بیدار شدم. چون تصمیم گرفتم که از این به بعد صبح زود بیدار بشم. صبح زود بیدار شدن برای من لذت بخشه. چون کسل نیستم و میتونم به همه کارهام برسم. بعد از اینکه صبحونه خوردم، برای مرور درسهای دهم برنامه ریزی کردم.(امسال میرم یازدهم). طبق برنامه پیش رفتم. از همین امروز هم تصمیم گرفتم که زود برم باشگاه که وقتی برگشتم به همه کارهام برسم. ساعت ۳ رفتم باشگاه ( سانس مردونه باشگاه از ساعت ۲ ظهر شروع میشه). بعد از تمرین خودم رو وزن کردم. باورم نمیشد ولی از روزی که رفتم باشگاه تا الان ۱/۵ کیلو کم کرده بودم. یجورایی تمام خستگیم در رفت. اومدم خونه و بعد از استراحت آموزش پایتونِ کوئرا رو ادامه دادم. یکی از بهترین آموزش هایی هست که تاحالا تجربه کردم. یکی از بهترین ویژگی های این آموزش اینه که بعد از هر چند درسنامه یک سوال به شما داده میشه که باید حلش کنید تا بتونین آموزش رو ادامه بدین. یکی از لذت بخش ترین کارها برای من اینه که یک مسئله رو بعد از ساعت ها فکر کردن و آزمون و خطا کردن حل کنم.توی این آموزش هم این اتفاق می افته و واقعا لذت بخشه.

چیز دیگه ای ندارم که بگم . تا فردا 😬👋

دوشنبه. ۹۸/۴/۲۴ . ساعت ۲۳:۲۷

نوشته چالش یک سال نوشتن! _ روز اول اولین بار در ویرگول پدیدار شد.

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

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

چند وقت پیش مقاله ای با عنوان
Wireless Networks Design in the Era of Deep Learning Model-Based, AI-Based, or Both
با هدف توضیح چرایی و چگونگی استفاده از یادگیری عمیق در شبکه های مخابرات بی سیم منتشر شد و در آن مسائل مختلف این حوزه به ۴ دسته ی مختلف تقسیم بندی شده است.
این دسته بندی ها به گونه ای است که میتوان آنها را در زمینه های دیگر مثل مکانیک ، الکترونیک و … نیز به کار گرفت.

unsplash.com

اما به علت آنکه تا به حال ، مدلسازی های ریاضی برای مسائل مخابراتی کافی بودند ( به مقدار مناسبی دقیق و قابل پیاده سازی بودند) ، زمینه های مختلف این حوزه در ترکیب با هوش مصنوعی به مقدار زیادی ناشناخته مانده است. ولی با ظهور نسل ۵ و ویژگی های آن ، نیاز به استفاده از الگوریتم های یادگیری عمیق برای ایجاد سیستم های “هوش شناختی” حس شد.

بطور کلی در حل مسائل ، هنگامی رو به این الگوریتم ها می­اوریم که مدلسازی مسئله با پیچیدگی زیادی روبرو باشد. برای همین ، بجای تحلیل مستقیم ریاضی(Model-Based) ، با استفاده از جمع آوری داده و الگوریتم های یادگیری (Data-Driven)، مدلسازی سیستم را با استفاده از شبکه ی عصبی انجام میدهیم.

اما در اکثر اوقات میتوان همچنان از مدل های ریاضی بدست آمده استفاده کرد و با استفاده از ترکیب هر دو روش Model-Based , Data-Driven سیستم را مدل سازی کرد.
از مزیت هایی که استفاده از Model-Based در کنار Data-Driven دارد، میتوان به کاهش داده های لازم برای آموزش سیستم و همینطور کاهش پیچیدگی مدل نهایی اشاره کرد. ( در چند مطالعه ی موردی ، این ویژگی ها را نشان می­دهیم )

مسائل به ۴ دسته به صورت زیر تقسیم بندی شده است :

در دسته ی اول ، استفاده از روش Model-Based و Data-Driven ، هرکدام به تنهایی ، نتیجه ی یکسانی را خواهند داشت . در دسته ی چهارم ، به وضوح فقط روش Data-Driven نتیجه ی مطلوب را خواهد داشت.

در دسته های ۲ و ۳ استفاده ی ترکیبی از هر دو روش پیشنهاد میشود

دسته ی دوم : بهینه کردن مدل

دسته ی سوم : تصحیح کردن مدل

در دسته ی دوم چون مدل ریاضی دقیق است ولی قابل حل شدن و پیاده سازی نیست ، ابتدا با استفاده از مدل ریاضی ، داده های لازم (Training set) برای فرایند یادگیری را تولید میکنیم و سپس شبکه ی عصبی را آموزش می­دهیم و سیستم را به صورت شبکه ی عصبی پیاده سازی میکنیم.

در دسته ی سوم چون یک مدل غیر دقیق ولی قابل پیاده سازی و حل کردنی داریم ، ابتدا یک شبکه ی عصبی را با داده های تقریبی بدست آمده از مدل ریاضی، تشکیل میدهیم و سپس با مقدار کمی داده ی عملی و دقیق ، شبکه ی تقریبی را اصلاح میکنیم.

در این روش نیاز به استفاده از داده های عملی (Empirical-Data) کاهش پیدا می­کند که در حوزه ی مخابرات وایرلس این یک امتیاز بسیار مثبت است ( چون جمع آوری داده های عملی در شبکه های بی سیم بسیار مشکل است)

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

در قسمت بعد با روش Transfer Learning آشنا میشیم و دو مطالعه ی موردی را بررسی میکنیم و نتایج این رویکرد هارا بررسی می­کنیم.

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

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

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

ریداکس به زبان ساده

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

تو این مقاله قرار نیست در مورد مزیت های ریداکس و ساختار داخلیش و مقایسه اش با سایر state manager ها و … صحبت کنم. اول میخوام یه پروژه ساده بسازم و بعد با ریداکس دوباره بنویسمش.

ریداکس به زبان ساده

درصورتی که به سیستم های ورژن کنترل ( گیت ) توصیه میکنم این نوشته هارو مطالعه کنید:

https://virgool.io/@novonimo/بهترین-تمرین-های-گیت-wgjeggzbq1gj
https://virgool.io/@novonimo/مکمل-قردتمند-گیت-git-flow-ufhgxx6j6ah3


خوب شروع کنیم !

اول از همه یه پروژه ساده شمارنده (counter) با استفاده از state داخلی و بدون ریداکس میسازم .

تو این مثال دوتا دکمه لازم دارم ، یکی برای اضافه کردن شمارنده و یکی هم برای کاهش شمارنده. اول از همه یه کامپوننت به اسم App که کارش فقط رندر کردن کامپوننت CounterApp هستش میسازم. ( البته میشه این کامپوننت رو به صورت فانکشنال هم نوشت)

App.js

حالا نوبت کامپوننت CounterApp هست:

CounterApp.js

تو State این کامپوننت یک مقدار counter وجود داره که وضعیت شمارنده مارو در هر لحظه نگه میداره. دوتا فانکشن داریم که وظیفه اضافه و کاهش مقدار counter رو دارند. تو قسمت رندر یک div شامل ۲ تا button و یک المان p برای نمایش مقدار counter وجود داره.

خوب برنامه ساده ما تموم شد!


همچنین مطالعه کنید:

https://virgool.io/iran-react-community/ری-اکت-رو-قورت-بده-۱-u8t5ysweyxyj
https://virgool.io/iran-react-community/پیش-نیازهای-آموزش-ری-اکت-yxmprt2im5ek


ریداکس

اضافه کردن ریداکس

نوبت اضافه کردن ریداکس هست. قبل از هر چیزی نصبش کنیم:

با استفاده از npm

npm install redux react-redux --save

یا اگر با yarn میخواهید نصبش کنید

yarn add redux react-redux

اگه دقت کنید ما دوتا پکیج نصب کردیم، یکی redux و یکی هم react-redux

حالا ۳ تا فایل به اسم های action.js store.js reducer.js تو پروژه میسازیم. (‌جایی که دوتا فایل App.js و CounterApp.js  هستند)

فایل action.js

تو این پروژه به نظرتون چه اکشن هایی لازم هست ؟‌
یکی برای افزایش مقدار counter و یکی هم برای کاهش مقدار counter پس در مجموع ۲ تا اکشن لازم داریم. اکشن ها توسط dispatch شدن، به ریداکس خبر میدن که یه مقداری تو state برنامه تغییر کرده.

action.js

دلیل اینکه دوتا ثابت به اسم اکشن‌هامون تعریف کردیم اینکه کدمون تمیز تر باشه و بتونیم از همین ثابت‌ها تو کدمون استفاده کنیم. کار تابع اکشن خیلی ساده است و صرفا داره خبر میده نوع اکشنش چی هست ( تو این مثال: افزایش و کاهش مقدار counter) از این type ها توی reducer استفاده میکنیم.

فایل reducer.js

اصل کار اینجاست، همه تغییرات اینجا اتفاق میوفته و مقدار state کلی برنامه تغییر میکنه.

نوع اکشن هامون رو به این فایل وارد میکنیم و یک state اولیه می سازیم (که قبلا هم داشتیم و فقط اینجا اسمش از state به initialState تغییر کرده). تابع reducer ما در واقع مقدار state رو برمیگردونه. تو تابع reducer از switch استفاده میکنیم و برای هر تعداد اکشنی که داریم یک وضعیت در نظر میگیریم.

reducer.js

باید با توجه به اصل immutability مقدار state ، تغییرات رو انجام بدیم . درسته که اینجا state اولیه ما یک مقدار به اسم counter داره اما برای اینکه تمرین خوبی باشه که تو پروژه های بعدی هم بتونید ازش استفاده کنید من عمدا از …state استفاده کردم .
فرض کنید تو یه پروژه ای که state شامل ۲۰۰ تا مقدار هستش میخواهید این کارو انجام بدید پس نباید سایر مقادیر state همراه با تغییر counter تغییر کنه.

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

فایل store.js

store.js

تابع reducer که در قسمت قبلی ساختیم رو اینجا استفاده میکنیم و مقدار store رو میسازیم.

فایل App.js

حالا بعد از اینکه این ۳ تا فایل رو ساختیم به سراغ برنامه ای که نوشته بودیم میریم و شروع میکنیم به ایجاد تغییرات. اول از همه نوبت تغییر فایل App.js هست که میخواهیم بهش مقدار store رو بدیم . این store در واقع همون state ماست که از طریق Provider به کل برنامه ما داده میشه:

با اینکار همه کامپوننت هایی که توی CounterApp قرار گرفتند هم به مقدار state دسترسی دارند ( که البته تو مثال ما فقط همین یک عدد کامپوننت هست)

فایل CounterApp.js

این تغییرات در نهایت به آخرین کامپوننت ما میرسند:

CounterApp.js

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

به جای اینکه با توابع افزایش و کاهش مقدار state رو تغییر بدیم لازمه که تغییرات رو به ریداکس dispatch کنیم ( مخابره کنیم – خبر بدیم).

توی المان P هم به جای اینکه بیایم مستقیم مقدار counter رو از state صدا بزنیم ( چون مقدار state داخلی رو نداریم) باید از یک تابع جدید به اسم mapStateToProps استفاده کنیم که کارش فراخونی state به برنامه و متصل کردنش به props هست. و در انتها با استفاده از connect این تابع رو به کامپوننتمون متصل کنیم.

به جای استفاده از this.state.counter باید از this.props.counter استفاده کنیم.

خوب، خسته نباشید. این آموزش هم تموم شد!

ریداکس رو به چندین شکل میشه پیاده سازی کرد و من سعی کردم ساده ترین شکلش رو براتون بیان کنم و از بعضی قسمت ها مثل mapDispatchToProps صرفنظر کردم.


سایر نوشته های من:

https://virgool.io/@novonimo/معرفی-storybookjs-ub1k1h88bda6
https://virgool.io/JavaScript8/معرفی-flow-برای-جاواسکرپیت-ogssae9iaif4
https://virgool.io/@novonimo/نظرسنجی-stackoverflow-2019-قسمت-۲-doci7u0y0axk
https://virgool.io/iran-react-community/آموزش-مبتدی-react-native-همراه-با-مثال-از-صفر-تا-۱%DB%B0%DB%B0-قسمت-اول-cyqz5skqhuxv
https://virgool.io/@novonimo/آموزش-مقدماتی-دارت-dart-قسمت-۱-vrd1jjuoble1


Contact With me:
https://t.me/nimamohamadian
https://www.facebook.com/nimamohamadian89
https://twitter.com/Nima_Mohamadian
https://www.linkedin.com/in/nima-mohamadian-57ba63123

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

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

چطور با بهتر کردن حافظه‌ام، برنامه نویس بهتری شدم

جفری شِک، سنریگن — کار کردن مرا از پا انداخته بود. مهندس نرم‌افزاری بودم که سه سال بود در شغلش درجا می‌زد. حافظه‌ام در افتضاح بودن همتا نداشت. نمی‌دانم که حافظه‌ام به خاطر استرس اینقدر خراب بود، کمبود خواب داشتم، یا اینکه همیشه همینطور بد بوده و من خبر نداشتم. کار برایم تبدیل شده بود به چرخه‌ای از «امروز دیگه قراره تغییر کنم»ها که به ردیت‌گردی، مدیوم‌خوانی و هکرنیوزبازی‌ با طعم بیزاری از خود ختم می‌شدند. سعی می‌کردم با این گشت و گذارها، دوپامینی که سر کار به دست نمی‌آوردم را جبران کنم؛ اما یک آدم شکست‌خورده بیش نبودم.

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

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

آرزویم بود که همه شرکت‌های فناوری مرا بخواهند، که ده برابر پربازده‌تر از یک مهندس نرمال باشم! یعنی همان چیزی که اهالی سیلیکون ولی به آن می‌گویند «مهندس ده برابری» (۱۰X Engineer).در عوض داشتم درجا می‌زدم. آنوقت تک به تک همکارانی که سابقه بالای پانزده سال داشتند وِرد زبانشان این بود: «وای، کایل اولین مهندس ده‌برابریه که تو عمرم دیدم!»

کایل فقط در روزهای هفته کار می‌کرد، از ساعت ۱۰ صبح تا ۴ عصر. همیشه کارش را زودتر از موعد تمام کرده بود. خودش به تنهایی باعث و بانی ۸۰٪ از خروجی تیم بود. اما چیزی که بیشتر از همه نمک روی زخم من می‌پاشید، این بود که کایل فقط ۶۰٪ مواقع داشت کار می‌کرد! اگر گفتید بقیه وقتش صرف چه می‌شد؟ بله، هکرنیوز، ردیت و مدیوم! من آن حلزونی بودم که دو سانت از دیوار بالا می‌رفت و یک سانت سقوط می‌کرد، آن وقت کایل خرگوش رشید و رعنایی بود که با یک جهش از روی دیوار می‌پرید.

کایل حتی یکی از عادت‌های موثر مردمان موفق را هم نداشت. هیچوقت مدیتیشن نمی‌کرد. صبح و ظهر و شب مک‌دونالدز می‌خورد، اما پوست و استخوان بود. در عوض یک توانایی ابرقهرمانی داشت: یک حافظه تصویری بی‌نظیر در سینتکسِ API و مستندسازی!

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

تکرار فاصله دار چیست؟

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

منحی ثبت اطلاعات در حافظه و فراموشی آن‌ها

وقتی فواصل بین دفعات یادآوری رفته رفته زیاد می‌شوند، احتمال وارد شدن اطلاعات به حافظه طولانی‌مدت بیشتر می‌شود و احتمال فراموش کردن آنها، کمتر. به شکل بالا دقت کنید؛ می‌بینید چطور وقفه‌ی قبل از هر یادآوری، از وقفه‌ی یادآوری قبل خودش طولانی‌تر شده؟

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

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

کدام روزها را برای یادآوری اسمتان به او انتخاب می‌کنید؟

  • مدل ۱، مدل درس خواندن شب امتحانی: ۲۴ اسفند، ۲۵ اسفند، ۲۶ اسفند، ۲۷ اسفند، ۲۸ اسفند، ۲۹ اسفند
  • مدل ۲، مدل دانش‌آموز نمونه: روز اول ماه با فاصله‌های ۲ ماهه! در اول فروردین، اول خرداد، اول مرداد، الی آخر.
  • مدل ۳، مدل تکرار فاصله‌دار: اول فروردین، سوم فروردین، ۲۰ فروردین، ۲۸ اردیبهشت، ۱۵تیر، ۳۰ آذر.

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

اما چرا گزینه ۳ بهترین ثبت در حافظه را دارد؟

  • مدل ۱. درس خواندن شب امتحانی به ندرت جواب می‌دهد؛ زیرا اطلاعات به محض اینکه از حافظه کوتاه‌مدت درآمدند، روانه سطل آشغال می‌شوند. چند تا از درس‌های مدرسه که شب امتحان برایشان خواندید را الان یادتان مانده؟
  • مدل ۲. یادآوری در فواصل زمانی منظم نسبتاً جواب می‌دهد، اما باید در هر بار یادآوری همه دانشتان را از نو مرور کنید. این کار نه ممکن است، نه خوش می‌گذرد، و نه اینکه کار و زندگی برای آدم می‌گذارد.
  • مدل ۳. مغز ما با یادآوری در فواصل نمایی از همه بهتر کار می‌کند. جز در اپلیکیشن‌های زبان‌آموزی (مثل Duolingo) و بین دانشجویان پزشکی، تکنیک تکرار فاصله‌دار چندان رایج نیست. ولی حتی اگر به اندازه درس خواندن شب امتحانی کار خفنی نباشد، حداقل نتیجه می‌دهد. دانشجویان پزشکی با کمک این تکنیک است که کتاب‌درسی‌های هزار صفحه‌ای را یادشان نگه می‌دارند. اگر Duolingo از تکرار فاصله‌دار استفاده می‌کند، برای این است که از آن جواب می‌گیرد. برندگان این مسابقه‌های حافظه را دیده‌اند؟ خیلی‌هاشان طرفدار پر و پا قرص تکرار فاصله‌دارند.

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

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

اما مهندسین نرم‌افزار هیچ‌کدام این مشکل‌ها را ندارند…

  • شاید بی‌خبری از تکنیک تکرار فاصله‌دار برای خیلی‌ها ضرری نداشته باشد، اما از مهندس‌ها انتظار می‌رود از ترندهای روز خبر داشته باشند. اگر اینطور نبود، هنوز داشتیم BitBucket و Adobe Flash استفاده می‌کردیم.
  • مهندس‌ها آدم‌های عادت‌دوستی‌اند و راحت می‌توانند عادت مرور فلش‌کارت را در خود ایجاد کنند. می‌توانید همیشه در یک زمان بخصوص فلش‌کارت‌ها را مرور کنید تا عادت شود؛ مثلاً به محض این که به شرکت رسیدید و سر میز نشستید، وقتی سوار مترو شدید، یا حتی در دستشویی درست قبل از رفتن به سراغ کندی‌کراش. وقتش شده که از پنجاه بار سرچ کردن «چطور کامیت گیت خود را اصلاح کنیم» در StackOverFlow دست بردارید!
  • فلش کارت ساختن برای ما آنقدر هم سخت نیست؛ فقط کافی است به جای یادداشت کردن در Quiver، EverNote، Notion و غیره، یادداشتتان را در قالب فلش کارت ذخیره کنید.
  • حتی اگر بهتر کردن خود کار عرق‌درآری باشد، از قدیم گفته‌اند برای اینکه مهندس نرم‌افزار خوبی باشی ز گهواره تا گور دانش بجوی.
  • بیایید با هم رو راست باشیم؛ ما که با هیچ دختر/پسر رعنایی قرار نداریم!

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

یادآوری چند اصطلاح (برای اینکه مبادا فراموش کنید):

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

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

مثال: نمونه فلش کارت انکی – پارامتری برای gsutil
این یکی هم سوال ساده‌ای است که دیروز اشتباه جواب دادم. راستش را بخواهید، کمی خجالت می‌کشیدم به شما نشانش بدهم.

تکرار فاصله‌دار، مثل StackOverflow آفلاین برای یک آدم فقیر است. (بله، قبلا Dash را امتحان کرده‌ام!) در دوران پیشا-انکی، من مدام معادل سینتکسی آموخته‌های روزانه‌ام را فراموش می‌کردم. درست است که همان زمان هم با انکی اطلاعات عمومی حفظ می‌کردم، اما هیچوقت فلش‌کارت‌ برنامه‌نویسی درست نکرده بودم. چرا؟ به این دلیل:

  • تنبلی. درست کردن فلش‌کارت برنامه‌نویسی خوب در انکی بعضا کار سختی است.
  • به یاد سپردن فلش‌کارتی که داخلش کد دارد هم خیلی کار راحتی نیست. حفظ کردن پایتخت مغولستان (اولان‌باتور) ساده‌تر است تا حفظ کردن نحوه کپی کردن لیست فایل‌های درایو خارجی به فایل txt با استفاده از xargs (جواب: cat list.txt | xargs -l{} mv /Volumes/External/{} /Desktop). خیلی اعصاب‌خردکن است که یک کارت سخت را چند روز متوالی اشتباه جواب بدهی.

ولی در سه سال گذشته، من همه چیز را وارد انکی کرده‌ام. Aliasهای بش، میانبرهای IDE، APIهای برنامه‌نویسی، مستندسازی، الگوهای طراحی، و غیره. با اینحال، به شما پیشنهاد نمی‌کنم که هر چیزی را به انکی اضافه کنید. فهرست اشتباهات من در انکی خودش یک پست جداگانه می‌طلبد…

مزایای استفاده از Anki برای تقویت حافظه

از وقتی به آغوش Anki پناه برده‌ام و یادآوری سریع زبان و APIهای فریم‌ورک برایم مثل آب خوردن شده است، خدایان تمرکز و بازدهی بالاخره جواب دعاهای بی‌پایانم را داده‌اند! سه سال قبل، روند کار من (که شاید برای شما هم آشنا باشد) اینطوری بود:

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

با مجهز شدن به حافظه خوب در سینتکس API، مستندسازی، و پایتخت کشورها، روند کارم ازین رو به آن رو شده است. این گراف فلش‌کارت‌هایی است که من در سال ۲۰۱۶ مرور کرده‌ام؛ سالی پر از مرورهای کوتاه در وسط انبوهی از حواس‌پرتی‌های طولانی:

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

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

گراف فلش‌کارت های مرور‌شده در Anki برای نویسنده

تعهد: شرط اول بهبود حافظه

درست است که در این تکنیک هر روز باید مرور کرد، اما اگر به آن متعهد بمانید تضمین می‌کنم که یک حافظه خوب در انتظارتان خواهد بود! اغلب کاربران به طور میانگین بیست دقیقه در روز برای مرور فلش‌کارت‌ها وقت می‌گذارند. اگر کارت جدید اضافه نکنید (که در آن صورت باید بگویم تنبل‌خان، برو کارت‌هایت را اضافه کن) میانگین مدت مرورتان کم کم به صفر میل خواهد کرد؛ زیرا همه اطلاعاتی که وارد می‌کنید به مرور وارد حافظه بلندمدت می‌شود. دانستن این که با اضافه کردن اطلاعات به Anki دیگر آنها را از یاد نخواهید برد، اعتمادبنفسی به آدم می‌دهد که دیوانه‌کننده است.

کارت‌های Anki نویسنده و فواصل یادآوری آن‌ها

جمع‌بندی

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

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

و اما… در مسیر برنامه نویس ده‌برابری!

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

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

کایل هنوز هم چند برابر بهتر از بهترین حالت من است، اما من دیگر مشکلی با این قضیه ندارم.

ترجمه بر اساس:

Chasing 10X: Leveraging A Poor Memory In Engineering” by Jeffrey Shek @ Senrigan

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

نوشته چطور با بهتر کردن حافظه‌ام، برنامه نویس بهتری شدم اولین بار در ویرگول پدیدار شد.

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

بهترین تمرین های گیت

در نگاه اول اسم مقاله ممکنه خیلی واضح نباشه اما در واقع ترجمه Best Practice هست. استفاده از هر ابزاری راه و روشی داره که از طرف خود سازنده به عنوان بهترین تمرین ها ارائه شده و رعایتشون باعث افرایش کارایی است. تو این مقاله در مورد بهترین تمرین های گیت ( Git ) صحبت میکنم.

git best practices

فاصله کامیت هارو کوتاه کنید

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

کامیت برای تغییرات مرتبط

درصورتی که ۲ تا باگ داریم و میخواهیم درستشون کنیم باید از ۲ تا کامیت استفاده کنیم. کامیت های کوچیک باعث میشه درک تغییرات برای سایر برنامه نویسان (سایر توسعه دهندگان پروژه) راحت تر باشه. همچنین اگه این کامیت ها باعث مشکل شده باشند راحت تر میشه undo کرد.

کارهای نیمه تموم رو کامیت نکنید

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

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

قبل از کامیت، کد ها رو تست کنید

وقتی کدی رو کامل میکنید دوست دارید که اونو کامیت و پوش کنید اما درواقع کدی که تست براش ننوشته شده باشه هنوز کامل نیست!
پاس کردن تست ها نشون میده که کد واقعا کامل شده و مشکلی نداره .
بهتره کدهای لوکال رو بعد از اتمام کامیت کنیم و موقع پوش کردن رو remote تست هاشو انجام بدیم و بعد push کنیم.

پیام کامیت مناسبی بنویسید

پیام مناسب کامیت باعث میشه درآینده با نگاهی کوتاه به پیام کامیت به تغییرات انجام شده پی ببریم. پس این پیام باید مشخصه هایی داشته باشه. توصیه شده که طول این پیام بیشتر از ۵۰ کارکتر نباشه!
این پیام باید ۲ تا سوال رو جواب بده:
۱- انگیزه این تغییر
۲- تغییر این فایل به نسبت وضعیت قبلی

از جملات دستوری با زمان حال ساده استفاده کنید. مثلا برای تغییر یک متغیر از پیغام change استفاده کنید. استفاده از changes و یا changed اشتباه است.

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

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

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

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

بر روی یک جریان مشخص توافق کنید

استفاده از ویژگی های ورژن کنترل ها مثل برنچ های مختلف بر روی پروژه مستلزم رعایت یک جریان مشخص توافقی است. فرض کنید که ۳ نفر برروی یک پروژه جدید کار میکنید ، باید یک قواعدی رو رعایت کنید تا در ادامه کارتون به مشکل نخورید و سایر هم تیمی هاتون هم بتونن به راحتی کار توسعه رو انجام بدن. مثلا خیلی از پروژه ها یک برنچ اصلی master دارن و یک برنچ develop که کد ها روی develop فرستاده میشن و زمانی که از همه چی درست بود شاخه develop به master فرستاده میشه.
این استراتژی به شما کمک میکنه که بهترین کارایی رو داشته باشید.
از بهترین ابزارهایی که تو در این مورد میشناسم gitflow هست. قبلا در مورد این مورد مقاله ای نوشتم که میتونید اون رو هم مطالعه کنید:

https://virgool.io/@novonimo/مکمل-قردتمند-گیت-git-flow-ufhgxx6j6ah3

داکیومنت مناسب مطالعه کنید

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

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

 git help 

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

با نظراتون به بهتر شدن مقاله های من کمک کنید
ممنون که وقت گذاشتید


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

https://virgool.io/@novonimo/معرفی-storybookjs-ub1k1h88bda6
https://virgool.io/@novonimo/نظرسنجی-stackoverflow-2019-قسمت-۳-oz9vld8zxc7m
https://virgool.io/iran-react-community/آموزش-مبتدی-react-native-همراه-با-مثال-از-صفر-تا-۱%DB%B0%DB%B0-قسمت-اول-cyqz5skqhuxv
https://virgool.io/iran-react-community/ری-اکت-رو-قورت-بده-۱-u8t5ysweyxyj
https://virgool.io/iran-react-community/ریداکس-به-زبان-ساده-emxqh7w4gnpk


Contact With me:
https://t.me/nimamohamadian
https://www.facebook.com/nimamohamadian89
https://twitter.com/Nima_Mohamadian
https://www.linkedin.com/in/nima-mohamadian-57ba63123/

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

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

روز بیست و هشتم از چالش ۱۰۰ روز کد زدن – شروع Node.js

درود بر شما خواننده محترم و گرامی،

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

بی مقدمه میرم سراغ معرفی یک محیط اجراییِ سمت سرورِ متن‌باز و چندسکویی برای زبان جاوا اسکریپت که در ابتدا در سال ۲۰۰۹ توسط رایان دال (Ryan Dahl) نوشته شد.

خانم ها، آقایان معرفی می کنم: Node.js

این پلتفرم از یک مدل I/O رویداد محور استفاده می‌کند که مسدود نشونده (non-blocking) است و همین امر باعث کاهش فشار موجود بر روی سرور و افزایش کارآیی می‌شود، به همین جهت برای اجرای برنامه‌های مبتنی بر داده که بصورت بلادرنگ (Real-Time) بر روی سرورهای نامتمرکز استفاده می‌شوند بسیار مناسب است.

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

غیرهمزمانی و رویداد محوری: همه‌ی API های کتابخانه Node.js غیرهمزمان می‌باشند که همین امر باعث مسدودناپذیری (non-blocking) آن می‌شود. این بدان معناست که که Node.js در بستر سرور هیچگاه در انتظار بازگشت اطلاعات از API نمی‌ماند. سرور پس از صدا زدن یک API به سمت API بعدی حرکت می‌کند و برای اطلاع از وضعیت API قبلی از مکانیزم ثبت رویداد استفاده می‌کند.

سرعت بالا: با توجه به این که نود جی اس بر پایه نسخه ۸ موتور جاوا اسکریپت گوگل کروم(V8) پیاده‌سازی شده است در اجرای کدها بسیار سریع عمل می‌کند.

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

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

عدم وجود بافرینگ: این پلتفرم هیچ داده‌ای را بافر نمی‌کند و داده‌های خروجی را به صورت تکه‌تکه منتشر می‌کند.

سعادتی شد روز بیست و هشتم رو با Node.js عزیز و دوست داشتنی شروع کنم و اونو در روزهای آتی ادامه بدم تا در اون به درجات عرفانی دست پیدا کنم. 😉

تا درودی دیگر، بدرود.

https://virgool.io/@mohstarsos1/%D8%B4%D8%B1%D9%88%D8%B9-%DA%86%D8%A7%D9%84%D8%B4-%DB%B1%DB%B0%DB%B0-%D8%B1%D9%88%D8%B2-%DA%A9%D8%AF-%D8%B2%D8%AF%D9%86-fxbkp0t9btcy

منبع + منبع

نوشته روز بیست و هشتم از چالش ۱۰۰ روز کد زدن – شروع Node.js اولین بار در ویرگول پدیدار شد.

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