حسین هلالی
حسین هلالی
خواندن ۱۱ دقیقه·۵ سال پیش

چگونه در این دنیای شلوغ فناوری, ابزار ... انتخاب کنیم؟

https://unsplash.com/
https://unsplash.com/

هر وقت به لیست Bookmark های مرورگر خودم یا به PDF هایی که توی لپ تاپ شخصی ام ذخیره کرده ام نگاه میکنم. دچار استرس شده و حس ناامیدی به سراغم میاد که چگونه باید مدیریت زمانی کنم. آخرش هم هنوز تموم نشده می شنوم فلان تکنولوژی اومده …

اگر به مجموعه تغییراتی که توی این ۱۰ سال توی حوزه بازيگران تولید نرم افزار, به وجود آمده نگاهی کنیم متوجه می شویم چقدر این تغییرات مارو هرروزه تحت فشار قرار داده که دائما بر روی دانسته های خودمان تجدید نظر کنیم و اقدام به یادگیری فناوری های جدید کنیم.

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

راه حل چیست؟ چطوری باید انتخاب کرد؟

در ابتدا باید به این سوال پاسخی بدهیم این فضای تغییر تکنولوژی کی آروم میگیره ؟ و ما باید تاکی بخونیم؟ تا کی باید انتخاب کنیم؟

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

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

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

یا رویکرد متن باز چگونه سبب شده شرکت مایکروسافت دست از نسخه های پولی مثل Net. برداره و برای حفظ حیات خودش رو به مدل های متن باز بیاره و Net Core. بوجود بیاره

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

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

افزایش سرعت -سرعت رشد و تحول این اکوسیستم با رویکرد متن باز و ایجاد Repository های جهانی مثل GitHub افزایش سرسام آوری رو بدست آورده. تازه ما در یک دنیای شبکه ای باز با حلقه های مثبت قرار گرفته ایم که اولا ارتباطات زیاد شده و هر Open Source خودش سکویی برای دیگر Open Source ها شده و سرعت تولید بالا می برد.

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

نحوه تولید -چیزی که موجب نوآوری و خلق پدید ه های جدید در این اکوسیستم میشه خلق Problem است. , مساله در به بن بست رسیدن پارادایم های موجوده.

به طور مثال گوگل آنقدر داده از کاربران خودش جمع آوری کرد که برای تحلیل اون دچار مشکل جابه جایی اطلاعات جهت پردازش روی سرور های خودش شد. بعد با یک تغییر پارادایمی به جای انتقال اطلاعات بر روی شبکه اقدام به جابجایی پردازش کرد و این منجر به تولید الگوی Map-Reduce به عنوان یک رویکرد جدید و خلق اکوسیستم Apache Hadoop شد.یا داستان خلق KAFKA در LinkedIn نمونه دیگری است.

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

در گذشته نه چندان دور این شرکت های بزرگ فناوری مثل SUN , Oracle, IBM, Microsoft … نقش اصلی نوآوری و ایجاد ابزارها و زبانها و .. بر عهده داشتند. و آنها را در قالب محصول به مشتریان می فروختند و سعی می کردن مشکلات مشتریان خودشان را در صورت عام بودن در قالب ابزار و فناوری به سازمانها عرضه کنند.

به طور مثال: IBM WebSphere, Oracle

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

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

از این جمله میشه به شرکت هایی همچون google, Amazon, Facebook, Netflix, spottily … اشاره کرد.

بطور مثال: Apache Hadoop, Apache Kafka, Amazon Dynamo-db, Spring Cloud, ...

زبان Go-Lang توسط گوگل

توسعه زبان PHP توسط فیسبوک

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

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

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

به طور مثال : می توانید درباره روند تغییر الگوهای معماری نرم افزار به مقاله ای که قبلا تحت عنوان "نسل بعدی الگوهای معماری نرم افزار چیست؟" منتشر کرده ام مراجعه کنید.

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

یک نمونه از تغییرات تحت تاثیر ابرروند افزایش سرعت
یک نمونه از تغییرات تحت تاثیر ابرروند افزایش سرعت


Gartner Survey Finds 85 Percent of Organizations Favor a Product-Centric Application Delivery Model
Gartner Survey Finds 85 Percent of Organizations Favor a Product-Centric Application Delivery Model


چرخه حیات و بلوغ

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

Gartner Hype Cycle
Gartner Hype Cycle
  • پیدایش نوآوری ( Innovation Trigger)

در این مرحله ابتدا فناوری در حد یک مفهوم و یا طرح اولیه و یا یک Proof of concept از این مفهوم ایجاد شده به بازار ارائه می گردد که محصول قابل استفاده ای نیست. و استفاده تجاری از آن صورت نگرفته است.

  • قله‌ ی انتظارات (Peak of Inflated Expectations)

در این مرحله تبلیغات داستان های موفقیتی از استفاده از این تکنولوژی منتشر می کند و این فناوری بر سر زبانها می افتد.که اغلب با شکست هایی مختلفی همراه است.در این مرحله شرکت ها و یا تشنه گان فناوری اقدام به بکارگیری این فناوری کرده ولی اکثر شرکت ها این فناوری و بکار نمی گیرند.

  • دره‌ی سرخوردگی ( Trough of Disillusionment)

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

  • شیب روشنفکری ( Slope of Enlightenment)

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

  • فلات بهره‌وری ( Plateau of Productivity)

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

گارتنر هرساله Hype Cycle زیادی از فناوری های مختلف منتشر می کند.

رادار فناوری - شرکت ThoughtWorks که درضمینه طراحی , تولید و خدمات مشاوره ای نرم افزار مشغول به کار بوده و با جنبش تحول توسعه نرم افزار چابک در ارتباط است. در ژانویه سال 2010 ، گروهی از متخصصان خود را برای بحث در مورد موضوعات مورد علاقه خود و آنچه در دنیای فناوری اتفاق می افتد دور هم جمع کرد. سپس نكات مطرح شده را در سندی تحت عنوان "رادار فناوری" منتشر نمود.

رادار به هرچیزی که نقشی را در توسعه نرم افزار بازی می کند 'blips' می نامد.رادار کلیه 'blips' ها را تحت یک نمودار گرافیکی که از حلقه هایی که به چهارقسمت تقسیم بندی شده نشان می دهد.

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

Technology Radar
Technology Radar

و حلقه ها کم و بیش نشان دهنده این است که آیا متخصصان Thought Works فکر می کنند این فناوری ها ایده خوبی بوده و به اندازه کافی برای استفاده در جریان اصلی پروژه ها بالغ هستند یا نه

Technology Radar
Technology Radar

حلقه Adopt -این حلقه نشان دهنده 'blips' هایی است که مورد استفاده قرار گرفته و بالغ شده و به صورت جدی توصیه میشه.

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

حلقه Trial - کلیه 'blips' هایی که برای استفاده آماده بوده ولی هنوز مانند حلقه Adapt به اثبات نرسیده در این حلقه قرار می گیرد. و توصیه می شود در استفاده از آنها احتیاط کرده و به صورت آزمایشی استفاده گردد. تا تصمیم بگیرید آیا آنها باید جزی از ابزارهای شما باشند یا نه

حلقه Access - این حلقه شامل مواردی است که باید از نزدیک روند بلوغ شان پیگیری بشه و تنها زمانی باید مورد آزمایش قرار گیرند که مطمئن باشید برای شما قابل استفاده اند.

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

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

به نکته زیر که در رابطه با رادار از زبان خودش بیان شده حتما توجه کنید:

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

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

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

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

همچنین شرکت های Tech Company با استفاده خود از این فناوری ها به آنها اعتبار بخشیده و این فناوری ها را بالغ می کنند.

فناوری ها با Community بزرگتر و استفاده کنندگان به نام, ریسک عدم دانش و دسترسی به مستندات شما در استفاده از آن و پشتیبانی از آن را کاهش می دهد.


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

  • بپذیرید ما در یک اکوسیستم زندگی می کنیم تغییر و تکامل جز لاینفک این اکوسیستم بوده و سرعت تغییرات رو به افزایشه
  • بدنبال ابزارهای کامل و بالغ و همه منظوره مانند گذشته نباشید. ابزارها تخصصی تر شده اند.
  • سعی کنید روندها را شناسایی و تحلیل کنید. همسو با آنها انتخاب کنید.
  • در رابطه با ابزار ها و یا زبانهای برنامه نویسی دقت کنید چه مشکلی را قراره حل کنه یا چه پارادایمی رو بهم زده. و از چه خواستگاهی می آیند.
  • به مرحله حیات فناوری در چرخه حیات آن (Gartner Hype Cycle) و ریسک های آن و میزان خطر پذیری پروژه و سازمان خود در آن زمینه توجه کنید. آنگاه دست به انتخاب زده و ریسک های آن را بپذیرید.
  • از رادار تکنولوژی و جایگاه blips ها در حلقه ها بهره بگیرید.
  • به اندازه Community شکل گرفته حول آن و دسترسی به مستندات توجه کنید.
  • اگر به نتیجه نرسیدید سعی کنید با شبیه سازی محیط عملیاتی فاکتورهای لازم رو اندازه گیری کرده و Fail Fast نمایید.
  • استراتژی خودتونو تغییر بدید.به صورت ترکیبی عمل کنید. و از نگاه های جدید مثل میکروسرویس ها که به شما اجازه می دهند در هر سرویس متناسب با آن زبان و تکنولوژی مناسب را استفاده کنید بهره ببرید.
به دنبال یک منبع که جواب قطعی به شما بدهد نباشید و وجود ندارد و انتخاب تخصص شماست.
دارم نوشتن کم کم تمرین می کنم و از ایده ها و چیزایی می نویسم که توی این سالها یاد گرفتم.
شاید از این پست‌ها خوشتان بیاید