خیلی دوست داشتم متن را با جملهی «به نظرم CoderConf امسال...» شروع کنم، اما چون اولین سالی است که در این همایش شرکت کردم، از این کار صرف نظر میکنم. گرچه قاعدتا نباید هیچ مشکلی در استفاده از کلمهی «امسال» وجود داشته باشد، چون آخرین CoderConf «امسال» برگزار شده، اما با این کلمه تلویحا دارم به شما میگویم که «پارسالی» هم برای من وجود داشته، در صورتی که اینطور نیست.
CoderConf init
همایش بعد از یک پذیرایی ساده به صرف کیک آناناسی و نوشیدنی گرم از جمله چای و نسکافه و ... وارد افتتاحیه شد. تقریبا ساعت یک ربع به ۹ روز پنجشنبه ۲۶ مرداد ماه.
در سایت coderconf.org سه موضوع اصلی همایش PHP، Android و DevOps عنوان شده بود. همینجا اعلام میکنم من رسما در هیچ یک از این سه حوزه فعالیت مستقیم نمیکنم. یعنی نه phpکار به معنی backend developer هستم و نه چیزی از android میدانم. راستش را بخواهید DevOps هم به گوشم نخورده بود، گرچه فهمیدم تا حدودی از بعضی از مفاهیمش استفاده میکنیم. من توسعهدهندهی سمت کاربر هستم؛ شخصی که عنوان کاریاش با عبارت front-end developer توصیف میشود و حقیقتش کمی از اینکه تنها یک ارائه به شکل مستقیم و اختصاصی به این موضوع پرداخت تعجب کردم؛ ارائهی مختصر و مفید کاوه سمندریان در مورد Front-end Build Technologies که به استفاده از node.js و gulp پرداخت و به نظرم یکی از ارائههای خوب همایش بود. در واقع جای تعجب آنجاست که موضوعات و تکنولوژیهای مربوط به front-end جزء عناوین اصلی همایش نبود.
DevOps
خب بگذریم. DevOps چیست؟ از ترکیب دو کلمه development و operation تشکیل شده است، از ادغام شدن دو تیم توسعه و عملیات. گویا در تاریخ، این دو تیم به دلایلی اهدافی داشتند که گاهی در مقابل هم قرار میگرفتند و باعث میشدند تیم رشد کندی داشته باشد. با پیشرفت سریع تکنولوژی، مفاهیمی مانند چابکسازی در توسعه نرمافزار به وجود آمد و devops سعی میکند با تلفیق دو بخش توسعه و عملیات و البته یک سری فرایندهای دیگر، موانع رشد سریع تیمها را بردارد. امید شریعتی در این دو مقاله موضوع را روشنتر کرده است: «دوآپس به زبان ساده چیست؟» و «دوآپس و تصورات اشتباه» پیشنهاد میکنم مطالعه کنید.
سالن اصلی و سالن دوم
برگردیم به سالن اصلی همایش. ارائهها در دو سالن مجزا و بطور موازی پیش میرفت. از آنجایی که برنامههای سالن اصلی برایم جذابتر بود، پایم را از آنجا بجز برای ناهار و سرویس بهداشتی بیرون نگذاشتم. پس نمیتوانم راجع به ارائههای سالن دوم نظری بدهم. راستش اصلا نمیدانم سالن دوم کجا بود.
PHP Security & REST API
برنامه با ارائهای از رامین فرمانی در مورد امنیت در php شروع شد. ۱۰ یا ۱۱ نکتهی امنیتی را که هر برنامهنویس phpکاری باید بداند توضیح داد. برای من استفاده نکردن از md5 برای ذخیرهی پسوردها و قرار دادن فایل config اصلی در فولدر غیر public تازگی داشت.
آقای فرمانی ارائهی دیگری هم داشت در مورد REST API. قواعد و فرایند تولید یک API سالم و استاندارد را توضیح داد و با طنز تلخی اشاره کرد که «درد ملت» نداشتن اطلاع کافی در مورد تولید APIهای استاندارد است که خب مسلما منظورش دولوپرها بود.
با اینکه طولانی شدن ارائه به مذاق خیلیها خوش نیامد و البته حق ارائهدهندهی بعدی هم کمی ضایع شد، ولی به نظرم از مهمترین ارائههای coderconf، ارائههای رامین فرمانی بود. به سوالات هم خوب پاسخ داد. در هر دو ارائه، اشراف کامل به موضوع و توضیح شفاف برایم جذاب بود.
REST vs GraphQL
اگر دارید API مینویسید کمی راجع به graphQL مطالعه کنید. ارائهی علی محمدمیرزایی در مورد GraphQL و تفاوتهایش با REST بود. graphQL یک زبان query برای API است که بین syntax و دیتایی که برمیگرداند، تناظر یک به یک وجود دارد. از مزایای استفاده از آن این است که دیتا را برعکس REST API از یک URL دریافت میکند و در واقع این برنامهی سمت کاربر است که مشخص میکند چه نوع ساختار دادهای دریافت بشود، نه سرور.
Microservice is BAD!
ارائهی بردیا حیدرینژاد در مورد معایب معماری میکروسرویس از تجربیات خودش در تیمی بود که روی یک فروشگاه اینترنتی ِ بازی کار میکردند؛ یک چیزی مثل استیم. به گفتهی او برای سیستمهایی که قرار نیست گسترده و بزرگ باشند، این معماری بار اضافه به همراه دارد و باعث دردسر میشود. از کار افتادن مانیتور برای نمایش اسلایدهایش و همینطور خاموش شدن میکروفن هم نتوانست جلوی ارائهاش را بگیرد. منی که چیز زیادی از میکروسرویس نمیدانستم جذب ارائهاش شدم.
Team Workflow & Git
دو ارائه در مورد team workflow و متد agile داشتیم. محمود مسیح تهرانی در مورد git صحبت کرد و چرخهی اصلی DevOps را شرح داد. این ارائه تنها ارائهای بود که مستقیما به کلیت موضوع DevOps پرداخت. نمایندهی شرکت «تدبیرگستران» هم به عنوان یکی از اسپانسرها از پیادهسازی scrum در تیم خودشان صحبت کرد.
در پرانتز بگویم همیشه دلم میخواست در شرکتی کار میکردم که از این اسمهای چندبخشی داشته باشد! حتما با مسعود گروسیان صحبت میکنم که اسم مجموعه را تغییر بدهد، مثلا «وب گسترانِ غرب» یا «آتیهپردازان ِ سمت ِ تیموری» یک همچین اسمهایی خلاصه!
Node.js & Gulp
میرسیم به ارائهی مورد علاقهی من از کاوه سمندریان در مورد front-end build teachnologies.
Gulp یک task runner است که قرار است در پروسهی تولید کد، به برنامهنویس کمک کند. واحدهای اصلی task ،gulpها هستند که شما با استفاده از packageهای منتشر شده در npm، کدش را مینویسید و برایتان کاری را که نیاز دارید انجام میدهند. برای مثال میتوانید تسکی بنویسید که کار کامپایل کردن فایلهای sassتان را بر عهده بگیرد. گرچه بعد از چند ماه کار با gulp به این نتیجه رسیدیم که ابزارهای اصلیتری برای build processتان وجود دارد، مثل scriptهای خود package.json، اما gulp برای شروع یادگیری مفهوم front-end build process و همینطور برای پروژههای کوچک ابزار مناسبی است.
جوجه ناهار
ناهار من جوجه بود که از روز ثبتنام انتخاب کرده بودم. غذا چرب و زیاد، ولی خوشمزه بود، با ماست موسیر و نوشابه کوکاکولا. جای شما خالی.
Unit Testing in PHP
ارائههای بعد از ظهر چه بود؟ آها! یکی unit testing در php بود. خب مفهوم unit testing فقط مختص php نیست، من در react با آن آشنا شدم و توضیحات میلاد رحیمی هم گرچه خیلی مختص زبان PHP بود، اما در تثبیت درک مطلب به من کمک کرد.
Deploy با Kubernetes
سالار مقدم در مورد Kubernetes صحبت کرد. ابزار ِ منبع ِ باز یا همان open sourceی برای اتوماسیون فاز deployment یک اپلیکیشن یا سرویس یا هر چیزی که بشود deployاش کرد. این یکی از ابزاهایی است که در مرحلهی deploy مربوط به تعریف DevOps از آن میشود استفاده کرد. برگردیم به مفهوم چابکسازی تا اهمیت این ابزارها را در تیمهای بزرگ بهتر درک کنیم.
اپ native با طعم react
از ارائههای پرانرژی و مختصر و مفید coderconf، ارائهی امید نیکراه در مورد react native بود. کلا اپها دو دستهاند: یا native هستند یا نیستند! اپهای native مختص یک پلتفرم خاص هستند و تجربهی کاربری بهتری دارند. بدیشان این است که اگر برای اندروید اپی نوشتید و از ابزارهای خاص آن استفاده کردید، راه سرراستی برای تبدیلش به پلتفرم دیگر، مثلا ios ندارید. اپهای غیر native مثل web app و hybrid app وجود دارند که اساسشان تکنولوژیهای مبتنی بر وب مثل html5 است و تجربهی کاربری شکیلی در خور شما نخواهند داشت. امید نیکراه به خوبی ویژگیهای کلیدی react native را به عنوان یک پلتفرم توسعهی اپهای native، با استفاده از بیان تند و تیز و محکم و اسلایدهای باحال بیان کرد.
جادی وارد میشود!
خب نوبت به جادی رسید. سالن پُر، نفسها در سینه حبس و لبها خندان. بهتان قول میدهم حضور جادی در هر همایشی به تنهایی یکی از دلایل اصلی حضور شرکتکنندهها خواهد بود. از آنجایی که مغز ما آدمها حساس به سطح عمل میکند (اختلافات و کنتراست را بهتر درک میکند،) به نظرتان جادی خیلی باحال است یا ما خیلی بیحالیم؟ جدی بهش فکر کنیم.
او با عنوان «رسیدن به بازار کار جهانی» ارائهاش را شروع کرد. در مورد تب استارتآپ زدن و شروع کردن کسب و کار شخصی بین برنامهنویسها در ایران صحبت کرد. معتقد بود کارمند بودن آنقدرها هم بد نیست و یک برنامهنویس نباید با ایدهی سختی کشیدن تا رسیدن به لذت، کار کند و باید از کارش در هر حال لذت ببرد و اگر اینطور نیست، مطمئنا یک جای کارش میلنگد.
دو تیپ رزومهی اشتباه را بررسی کرد و تاکید داشت فقط کاری را که روی آن تمرکز دارید در رزومهتان بیاورید و از زیادهگویی و کمگویی پرهیز کنید.
همانطور که انتظارش را داشتم، به طریقی یادی از مهدی کروبی کرد که در این ایام برای مطالبات قانونی خودش در اعتصاب غذای خشک به سر میبرد و در نهایت از تجربیات خودش به عنوان یک دولوپر برونمرزی برایمان گفت.
پنل دیگر چیست؟!
در برنامهی همایشها ممکن است با واژهی «پنل» مواجه بشوید. در قدم اول باید خونسردی خودتان را حفظ کنید و آرامشتان را از دست ندهید. پنل اینجا به معنی میزگرد یا سخنرانی نوبتی است و هیچ ربطی به پنل کاربری و sysadmin و کلا حوزهی IT ندارد. اولین باری که اسمش را شنیدم برایم عجیب بود. گفتم شاید برای شما هم عجیب باشد.
پنل یا گفتگوی CoderConf3 هم از جذابیتهای آن محسوب میشود. چه کسانی بودند؟ آرش برهمند، جادی، نیما نورمحمدی (بنیانگذار پونیشا)، امیر صدیقی (بنیانگذار رکامندر)، ایلیا وکیلی و فرهاد هدایتیفرد (بنیانگذار تسکولو).
بحث اصلی در مورد خواستگاه استارتآپ در ایران و انگیزهی نیروی فنی متخصص برای شروع کسب و کار خودش بود.
فرهاد هدایتیفرد در مورد اهمیت همدل و همفکر بودن اعضای تیم صحبت کرد و از وسواس تیم در انتخاب عضو جدید گفت.
نیما نورمحمدی در جواب اینکه آیا برنامهنویسها به سمت استارتآپ بروند یا نه، پیشنهاد کرد که اگر برایشان امکان دارد، چند سالی را در یک شرکت کارمند باشند تا کمی با ساز و کار بخشهای داخلی یک مجموعه آشنا بشوند، بعد کسب و کار خودشان را شروع کنند. راستی میدانستید تیم پونیشا در یک روستای نزدیک رشت مشغول فعالیت است و تهران دفتری ندارد؟!
جادی به این موضوع پرداخت که همهی برنامهنویسها قرار نیست شخصیت مشابه و گیگطوری داشته باشند و اگر برنامهنویسی در یک گروه رضایت ندارد، باید این شجاعت را داشته باشد که محیط خودش را عوض کند و همیشه استارتآپ زدن بهترین گزینه نیست.
امیر صدیقی از مصائب دوران برنامهنویسی و اخراجهای متعددش در داخل و خارج از ایران گفت و معتقد بود برنامهنویسی و کد زدن، سادهترین کار در یک تیم است و تا زمانی که وارد کسب و کار خودمان نشویم، درک این موضوع برایمان سخت خواهد بود. در نهایت تاکید داشت که در هر حوزهای فعالیت میکنیم، سعی کنیم بهترین و بینقصترین باشیم.
پس تا برنامهی بعد!
مشتاقانه منتظر برنامهی بعدی coderconf هستم، اما گویا باید یک سال صبر کرد. با توجه به رشد سریع تکنولوژی در تمام حوزههای برنامهنویسی، کاش این برنامه سالی دو بار برگزار بشود.
پیشنهاد دیگرم به تیم اجرایی برنامه این است که با تفکر منبعباز و آزاد، اسلایدهای ارائه را روی سایت coderconf.org قرار بدهید. تا جایی که خاطرم هست، بعضی از ارائهدهندهها به این موضوع اشاره کردند، ولی من چیزی پیدا نکردم.
تجربهی مفیدی بود. پیشنهاد میکنم اگر برنامهنویس هستید، حتما پیگیر coderconf برای سال آینده باشید.