پیاده سازی بلاک چین

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

بلاک چین تکنولوژی پشت بیت کوین

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

پایتون دو و سه در آناکوندا

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

conda create -n py36 python=3.6 anaconda

با این دستور می‌شه یه محیط مجازی (virtual environment) جدا ساخت و نسخه‌ی پایتون دلخواه رو توش نصب کرد. py36 اسم این محیط مجازیه و می‌تونه هر اسمی باشه(احتمالن باید یکسری قواعد اسم گزاری توش رعایت شه، مثلن با عدد شروع نشه و توش فاصله نباشه و…). python=3.6 مشخص می‌کنه که از چه ورژنی از پایتون توی این محیط مجازی قراره استفاده بشه. می‌تونه مثلن ۲.۷ باشه این مقدار‌(چیزی که من نیاز داشتم.)
برای استفاده از این محیط مجازی هم کافیه عبارت زیر رو توی ترمینال بزنید:

source activate py36

 

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

 

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

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

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

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

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

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

۵. مطالب بعدی حدس می زنم یکی انتخاب فیلد مناسب باشه‌(وب یا موبایل یا چیز دیگه؟) و شاید درمورد انتخاب زبان مناسب برای هر فیلد بنویسم.‌(همه کار رو با یه زبان نمی شه کرد.) همینطور درمورد چیزای دیگه ای که یه برنامه نویس باید بدونه(گیت، دیتابیس و هزار چیز احتمالی دیگه). امیدوارم خوب دربیاد از گل و مفید باشه.

بلاک چین چیه و چجوری کار می کنه

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

بلاک چین تکنولوژی پشت بیت کوین

بلاک چین

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

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

 

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

زبان کند و آسون جاوا

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

جاوا: ساده و کند

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

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

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

چرا بیت کوین مهم حساب می‌شه

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

بیت کوین - پول دیجیتال - بلاک چین

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

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

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

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

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

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

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

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

 

 

امنیت و جنگو

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

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

امنیت وب - پایتون و جنگو - پایکان

۳. پایکان یه اجتماع سالانه(!) س که هر سال برگزار می‌شه و برنامه‌نویس‌ها و علاقه‌مندهای پایتونی رو دور هم جمع می‌کنه. توی پایکان ۲۰۱۷ ارائه‌ی خیلی خوبی دیدم به اسم آشنایی با توسعه‌‌ی وب امن با پایتون و جنگو. توی این ارائه‌ي سه ساعته،‌ آقایی به نام  جیمز بنت درمورد نکات و تهدیدات امنیتی رایج و حتی غیر رایج حرف می‌زنه و یک سری راه حل هم (خیلی مختصر) ارائه می‌ده. البته که اینجا بیشتر تمرکز روی جنگو هست، اما به نظرم برای هر دولوپری با هر زبان برنامه‌نویسی‌ای، دونستن این مطالب( حد اقل خود تهدید‌ها) می‌تونه مفید باشه. برنامه نویس خوب شدن کار سختیه. نه که جادویی در کار باشه. لازمه‌ش اینه که از کنار هیچ چیز ساده رد نشه آدم. در کنار این ویدیو که درباره یه موضوع خاصه، کتاب 97 چیز که هر برنامه نویس باید بدونه هم می‌تونه برای هربرنامه‌نویسی مفید باشه.

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

 

 

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

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

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

نرم افزار ویرایشگر اتم

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

۳. اتم رو خیلی دوست دارم. یه ادیتور ساده با کلی ویژگی خوب. اولین خوبیش اینه که – مخصوصن توی پروسه یادگیری- مجبور میکنه برنامه نویس رو که همه چیز رو خودش بنویسه. البته یه سری کمک می کنه ها. ولی خب اینا اسمشون کمکه، نه این که بیاد کل کار رو از رو دوش برنامه نویس برداره.

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

 

چرا پایتون؟

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

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

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

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

۴. کد‌های زیر رو نگاه کنید:

پایتون در مقابل سی و جاوا

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

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

 

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

۹۷ چیزی که هر برنامه نویس باید بداند

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

۹۷ چیزی که هر برنامه نویس باید بداند

۲. این جا تعدادی از تیتر ها رو می ذارم که شاید جذاب تر کنه خوندن کتاب رو:

  •  رعایت اصول بنیادی برنامه‌نویسی
  • از خود بپرسید کاربر – در این موقعیت- چکار خواهد کرد!‌ (شما کاربر نیستید)
  • زیبایی در سادگی ست
  • قانون پیشاهنگی
  • ابزار‌های خود را با دقت انتخاب کنید
  • مرور کد
  • کامنتی درباره کامنت ها
  • تنها چیزی را کامنت کنید که کد نمی تواند بیان کند
  • یادگیری مستمر
  • از خراب کردن چیزها نترسید
  • با دیتای تست نرم رفتار نکنید
  • ارور ها را نادیده نگیرید
  • به یاد گرفتن یک زبان بسنده نکنید،‌ فرهنگ آن را هم درک کنید
  • خودتان را تکرار نکنید
  • و …

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