محمد ابراهیمی اول

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

محمد ابراهیمی اول توسعه دهنده Front-End، مدرس و مشاور فنی کسب و کارهای نوپا
محمد ابراهیمی اول توسعه دهنده Front-End، مدرس و مشاور فنی کسب و کارهای نوپا


:: راهی برای گپ و گفت

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



:: تجربه‌های من

من در این زمینه‌ها کار کردم و تجربه‌‌هایی دارم که شروعش به سال ۸۷ بر می‌گرده و می‌تونیم ازش استفاده کنیم تا کارهایی رو با هم به سر‌انجام برسونیم.

اگر جایی دید که کار‌های دیگه‌ای هم دارم انجام می‌دم ولی حرفی ازش نمیزنم، حتما دلیلش این هست که یا دارم تفریحی دنبالش می‌کنم و قرار نیست تخصصم باشه (مثل عکاسی) ،‌ یا برای برای افزایش دامنه دانشم هست تا در تخصص‌هایی که دارم بهتر عمل کنم (مثل یادگیری مسائل DevOps)،‌ یا این که هنوز در حال تمرین و یادگیری هستم و به اون سطح تخصصی نرسیدم که بتونم خودم رو یک متخصص معرفی کنم (مثل توسعه‌ Node JS) و یا قبلا انجام میدادم ولی دیگه مایل نیستم انجام بدم (مثل طراحی UI/UX).

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

۱) توسعه دهنده Front-End وب

بیشتر از هر کاری من این کاره بودم که اینــجا می‌تونید جزئیات رو ببنید. تقریبا از سال ۸۷ تا الان در این زمینه فعال بودم و وقتایی که قراره فقط یک عنوان بگم، اینو میگم. از سال ۹۲ تصمیم گرفتم اختصاصی روی این موضوع کار کنم، البته به همراه طراحی UI/UX تا این که سال ۹۵ تصمیم گرفتم فقط توسعه دهنده باشم.

توسعه دهنده React JS و jQuery

این‌ها زیر شاخه‌های Front-End هستن و خیلی مرسوم نیست که در جایگاه عنوان شغلی معرفی بشن ولی علاقه زیادی که من به این دو کتابخونه داشتم باعث شد در اونها عمیق بشم و بیشتر از سایر موضوعات روش کار کنم واسه همین گاهی هم شده به جای عنوان اول این‌ها رو به کار بردم.

سال 92، jQuery رو یاد گرفتم و عاشقش شدم. تا همین چند سال پیش قدرت خاص خودش رو داشت ولی متاسفانه مدتی هست که عنوان jQuery رو نمیزنم چون پروژه‌ها بیشتر به کتابخانه و فریم ورک‌های SPA مثل React میل پیدا کرده و منم عاشق React شدم :) ولی من همچنان دوستش دارم و در جایگاهی که خوب باشه ازش استفاده می‌کنم و امیدوارم این نزول استفاده به منسوخ شدنش ختم نشه.

از اواخر سال ۹۶ توسعه React JS رو شروع کردم و تا امروز چند پروژه بر پایه این کتابخونه توسعه دادم که یک از اینها مالتنیا هست و این داستان همچنان ادامه داره. علاقه من به این کتابخانه باعث همراهی برای خلق جامعه ری اکت ایران شد که در انتهای این صفحه می‌تونید در موردش بخونید.



۲) تدریس

به تدریس چیز‌هایی که یاد‌ دارم خیلی علاقه دارم و شاید اگر توسعه‌دهنده نبودم قطعا معلم بودم البته این که معلم خوبی هستم یا نه رو باید از شاگردهای گذشتم پرسید‌:) همون طور که گفتم من بیشتر تمرکزم روی توسعه Front-End هست اما هیچ وقت باعث نشده که بیخیال تدریس بشم البته این محدودیت باعث میشه تا از بین مواردی که برای تدریس پیشنهاد میشه نتونم همه رو قبول کنم و شرمنده بعضی از دوستان بشم.

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


۳) مشاور فنی کسب و کارهای نوپا (استارت اپ)

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

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

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

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

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

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

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



:: من، با وضوح بیشتر

سال ۸۷ کار خودم رو شروع کردم، البته اون موقع‌ها عنوانم Front-End و خیلی از عنوان‌های معروف امروزی وجود نداشتن، در واقع من یک طراح وب بودم. کسی که از طراحی گرافیکی و توسعه فرانت تا کد نویسی Back-End و کانفیگ هاست و سرور رو انجام می‌داد.

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

از همون اول از این که همشو از یک نفر انتظار داشتن راضی نبودم، چون واقعا نمی‌شد روی همه موضوعات تمرکز داشت اونم در حالی رشد تصاعدی تکنولوژي‌ها به چشم محسوس بود. واسه همین هر جا که فرصتی برای حرف بود سعی می‌کردم بقیه رو قانع کنم که تفکر همه کارا با یکی رو بذارن کنار. تا سال ۹۴ تلاش‌هام بی‌نتیجه بود البته من منتظر تغییر دیگران نشدم و سال ۹۲ به صورت تخصصی شاخه Front-End رو که هم علاقه داشتم هم حس می‌کردم استعداد بیشتری دارم رو انتخاب کردم. خب واضح هست که بارها مجبور شدم تحت فشار جامعه Full-Stack بمونم ولی هر بار فرصتی برای استقلال بود استقبال می‌کردم. در نهایت موفق شدم و بعد از سال‌ها فول-استک بودن و انجام ده‌ها پروژه ریز و درشت در شرکت مسنا سافت به عنوان شخصی مستقل با عنوان توسعه دهنده Front-End در کنار تیم قرار گرفتم و خیلی حال داد هر چند در ابتدای استخدام باز هم کمی چالش متقاعد کردن رو داشتم ولی این بار نتیجه داد و قبول کردن. این باعث شد تا من از حداکثر توانم خرج کنم تا تجربه خوبی بشه که خدا رو شکر گویا شد و هنوزم اون دوتا پروژه رو جزء کارهای خوبم می‌دونم.

اما یک مشکل وجود داشت، اوج توانایی‌ها و تلاش‌های من در جایی بود که دیگران نه تنها دسترسی نداشتن برای دیدنش بلکه بخاطر محدودیت‌های امنیتی حتی نمی‌شد خیلی هم در موردش توضیحش داد. اولی پنل بانک سوالات جامع‌المصطفی بود چیزی شبیه سیستم سنجش که واسه کنکور دارن و دومی سیستم مدیریت سازمانی جامع‌ المصطفی که هر دو با یک فریم ورک SPA اختصاصی نوشته شده بود که خلق اینم جالب بود. اون زمان ری‌اکت و انگولار امروزی وجود نداشت و جفتشون مشکلاتی داشتن که با ساختار پروژه ما نمی‌خوند واسه همین من یک هفته وقت گرفتم و فریم ورک SPA هویج رو نوشتم که معماریش MVC بود و شباهت‌های زیادی به انگولار داشت مثل Template Engine و Two way bindingش و البته تفاوت‌های زیاد. بزرگ‌ترین و جذاب‌ترین تفاوتش این بود که همه چیز jQuery بود یعنی داخل کامپوننت (که ما بش می‌گفتم action) برای رویداد مثلا Click دقیقا از متد‌های jQuery استفاده می‌شد و یه جورایی میشه گفت فریم ورک SPA جی‌کوئری بود.

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

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

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

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

نسخه ۲ وب سایت مالتینا با تکنولوژی React JS
نسخه ۲ وب سایت مالتینا با تکنولوژی React JS

در لانچ یک مشکل بزرگ رخ داد، اون هم CSR بودن و SRR نبودن پروژه بود که SEO رو به چالش می‌کشید. SEO برای یک فروشگاه اینترنتی تقریبا معادل همه چیزه و بسیار مهمه و این در حالی بود که ما بعد از ۶ ماه توسعه متوجه شدیم چیزی که داریم اصلا SEO جالبی نداره. من تا اون روز اصلا یک وب سایت SPA نزده بودم و همشون وب اپلیکیشن‌های SPA بودن و خب برای وب اپلیکیشن‌های SPA الزاما نیاز به SSR نیست‌ (در این مطلب درباره SSR و CSR در ری‌ اکت توضیح دادم).

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

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

جامعه ری‌اکت ایران
جامعه ری‌اکت ایران

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

جامه ری‌اکت ایران
جامه ری‌اکت ایران
جامعه ری‌اکت ایران یک گروه تخصصی در حوزه نرم افزار است که در تاریخ ۱۱ بهمن ۱۳۹۷ با هدف آشنایی و مشارکت توسعه‌دهندگان و علاقمندان به کتابخانه متن باز ری‌اکت جی اس و فریم ورک ری‌اکت نیتیو به کمک جمعی از فعالان این حوزه شروع به کار کرد.

این جامعه در ابتدا با یک گروه تلگرام با کمتر از ۴ عضو فعال شد و در کمتر از دو روز بیش از ۲۵۶ نفر به آن پیوستند و بعد از 5 ماه به 1000 عضو رسید.چند روز بعد از شروع فعالیت کانال‌های محتوایی آن در تلگرام و ویرگول فعال شد و بعد از چند هفته فعالیت در GitHub شروع شد تا هم فرهنگ توسعه و مشارکت متن باز (Open Source) را در ایران پررنگتر کند و هم افراد جامعه در تعامل با یکدیگر نقص و کمبود‌های این کتابخانه را رفع و راهکارهای خود را با یکدیگر به اشتراک بگذارند.

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

تاکنون جامعه ۳ رویداد برگزار کرده که اولین رویداد آن در شرکت پردازش اطلاعات شتاب در تاریخ 29 فروردین 98 برگزار شد. دومین رویداد در تاریخ 26 اردیبهشت 98 در دانشگاه شهید بهشتی برگزار و سومین آن هم در تاریخ 30 خرداد 98 در باشگاه کارآفرینی تیوان برگزار شد.