سال نوی همگی مبارک!
برایتان بهترینها را آرزومندم.
شاد باشید و تندرست
حافظ منشین بی مِی و معشوق زمانی
که ایّامِ گل و یاسمن و عیدِ صیام است
سال نوی همگی مبارک!
برایتان بهترینها را آرزومندم.
شاد باشید و تندرست
حافظ منشین بی مِی و معشوق زمانی
که ایّامِ گل و یاسمن و عیدِ صیام است
پیشگفتار:
این روزها فناوری با سرعت سرسامآوری در حال پیشرفت است تا آنجا که هر موضوع ناباوری را باورپذیر کرده است. کارکرد فناوری و نوآوری این است که «غیرعادی»ها را «عادی» کند. اگر تا چند سال پیش گفتوگوی تصویری با آن سر دنیا به دلیل «غیرعادی» بودن شما رو به یاد کتابهای ژول ورن یا آیزاک آسیموف میانداخت، امروز اگر یک ابزار ارتباطی چنین امکانی نداشته باشد برای شما «غیرعادی» به نظر میرسد.
گاهی اندیشیدن به «عادی»های کنونی مرا را دچار حیرت میکند. پرواز هواپیمای غول آسا چندین هزار تنی در آسمان و حرکت و گرمی خودروی سواری در دمای منفی ۵۰ درجه تنها بخش کوچکی از آن است.
داستان اردکهای گمشده:
در دورهی کودکی و نوجوانیام مثل اکثر خانوادهها در بیبالان، ما هم مرغ، خروس و اردک داشتیم. در کنار استفاده از تخم مرغ و تخم اردک، آنها یکی از منابع اصلی تامین گوشت خانوادهها بودند. تا یادم نرفته برایتان بگویم که ما به اردک میگوییم «بیلی»!
در بهار و تابستان اردکها در محوطه خانه نگهداری میشدند. در میانهی تابستان و بعد از آن که برنجها درو میشد، اردکها را میفرستادیم شالیزار (مزرعه برنج) یا به زبان خودمان بیجار. اردکها صبح که از لانهشان خارج میشدند فرستاده میشدند بیجار و تا غروب که خودشان بر میگشتند آنجا میماندند. از شگفتیهای طبیعت این بود که آنها خود میرفتند و خود بر میگشتند!
در این بین به ويژه پاییز و زمستان و روزهای بارانی گاهی پیش میآمد که یکی از اردکها با بقیه اردکها به خانه بر نمیگشت. ممکن بود حیوان زبان بسته اشتباهی با اردکهای همسایه به خانهی یکی از همسایهها رفته باشد، ممکن بود جایی در بیجار گرفتار شده باشد (مثلا پایش به نخی یا طنابی گیر کرده باشد) و یا این که طعمه روباه و شغالی شده باشد. فرایند پیدا کردن اردکهای برنگشته به خانه هم این بود که باید میرفتید خانهی همسایهها و از آنها میپرسیدید که آیا اردک غریبهای همراه اردکهای شما آمده یا نه. اگر خوششانس بودید فرایند با رفتن به خانهی یکی از همسایهها پایان مییافت. وگرنه ادامهی فرایند این گونه بود که باید میرفتید بیجار و دنبال اردک گمشده میگشتید. بیجار هم که یک متر و دو متر نبود! در آن غروب بارانی و تاریک، پیدا کردن اردک گمشده بیشتر به شانس و اقبال بستگی داشت تا تلاش شما!
برای من دشوارترین بخش ماموریت «به دنبال بیلی در بیجار» حس ناخوشایند «از دست دادن یک آشنا» بود.
فناوری و بیلیها!
یادم هست یک بار که از دانشگاه برای دیدن خانواده رفته بودم بیبالان، وقت کردم و رفتم تا خالهام را که خانهاش چند محله آنور تر بود ببینم. غروب یک روز پاییزی بود. خاله و خواهرزاده گرم صحبت بودیم که تلفن خانه به صدا در آمد. خاله رفت گوشی تلفن را برداشت و شروع کرد به صحبت کردن. صحبتاش که تمام شد آمد و گفت: مادر منوچهر بود (خانم همسایهشان)! زنگ زده بود ببینه که اردک آنها اشتباهی با اردکهای ما نیومده! من هم گفتم هنوز سراغ اردکها نرفتم!»
انگار حقیقت جدیدی از دنیای انسانها کشف کرده باشم گل از گلام شکفت! وای! تلفن چه کاربردی مهم و جالبی میتواند برای «ماموریت به دنبال بیلی در بیجار» داشته باشد! و انسانها چه کاربردهای ویژه و شخصی میتوانند از فناوری تعریف کنند. شاید مخترع تلفن هیچ وقت فکر نمیکرد که روزی اختراعش بتواند نقش مهمی در حل مسالهی روزمره یک خانواده روستایی داشته باشد. این نکته را در نظر داشته باشید که زمان کودکی و نوجوانیام، تلفن همهگیر نبود و تنها یک یا دو خانواده به تلفن دسترسی داشتند اما آن زمانی که پیش خاله بودم تلفن در اکثر خانهها وجود داشت.
گزیده:
«خاطره، تنها بهشتی است که نمیتوانند ما را از آن طرد کنند.» ژان پل
سرعت پیشرفت یادگیری ماشین به ويژه بخش مدلهای زبانی بزرگ (LLM) مانند ChatGPT به اندازهای است که هر لحظه باید منتظر نوآوری و فناوری نوظهوری باشید. امکانات این مدلها امکان حل مسالههایی را فراهم میکنند که تا همین چند وقت پیش امیدی به حل آنها نبود.
در این نوشته میخواهم به دو مورد از آنها که جنبه شخصی دارد اشاره کنم.
۱) مورد کاربرد یک: حافظهیار
وقتی یک کتاب طولانی فنی به ویژه کتابی که موضوع آن برایم تازگی داشت میخواندم وقتی به مطلبی میرسیدم که نیاز به یادآوری دقیق مطالب بخشهای گذشته کتاب داشت دچار مشکل میشدم. یکی از دلایل آن، نداشتن وقت کافی و زیاد بود مطالب کتاب بود و البته حافظه نه چندان خوب! بارها برایم پیش میآمد که سوالاتی شبیه اینها را از خود میپرسیدم: «این با اون یکی چه فرقی میکنه؟» و «تعریف این چه بود». تنها راه این بود با فشار دادن دکمه کنترل+اف به دنبال کلمهای بگردم تا با خوششانسی بتوانم بخشی را پیدا کنم که پاسخ پرسشهایم در آن بود. دربارهاش توضیح داده شده بود.
حالا با پیشرفتهای شگرف یادگیری ماشین و مدلهای زبانی بزرگ (LLM) حل این مساله سادهتر شده. چند وقت پیش برای نمایش توانایی LLM ها به چند تن از دوستانم، برنامهای نوشتم که هنگام خواندن کتاب مانند دستیار کمک میکرد تا مطالب قبلی را به یاد بیاورم.
این برنامه یادگیری ماشین با استفاده از محتوای کتاب به پرسش شما پاسخ میداد و در پایان هم میگفت این پاسخ را از کدام صفحهی کتاب استخراج کرده است! در زیر، نمونهای از این پرسش و پاسخ را مشاهده میکنید.
Question: what is the role of messaging grid?
Answer: The role of the messaging grid is to manage input requests and session state within the virtualized middleware of a space-based architecture….
Reference: software-architecture: page 214.
۲) مورد کاربرد دو: کتابخوان یار
مساله بعدی رو به رو شدن با واژگان و اصطلاحاتی است که ممکن است در خود کتاب اشارهای به آنها نشده باشد و فرض نویسنده بر این بود که خواننده کتاب با آنها آشنایی دارد. در این سناریو، ممکن است مفهوم آن را بدانم ولی تعریف کامل آن را به یاد نداشته باشم. برای حل این مساله باید تغییری در برنامه قسمت قبل ایجاد میشد تا به مدل زبانی اجازه دهد از دانش خود علاوه بر مطالب کتاب نیز استفاده کند. این ویژگی میتواند کاربر را از جستجو در اینترنت بینیاز کند که در کنار اتلاف وقت میتواند تمرکز وی را نیز بر هم زند. نمونهای از آن را در زیر میبینید.
Question: Explain a front controller?
Answer: A front controller is a domain service within a choreography architecture that not only handles domain behavior but
مدل زبانی به کمک محتوای کتاب و اطلاعاتی که با آن آموزش دیده است میتواند به شما کمک کند تا محتوای کتاب را بهتر بفهمید و سرعت و کیفیت کتابخوانی شما را افزایش میدهد.
گزیده:
یک پیشرفت مهم در یادگیری ماشین میتواند اثر و ارزشی معادل با ده برابر مایکروسافت ایجاد کند. بیل گیتس
اگر میخواهید در جهت معینی حرکت کنید و به جایی برسید، بهترین مسیر احتمالا شامل جهت دیگری است.
If you want to go in one direction, the best route may involve going in another.
این جمله بیانگر مفهوم «غیرمستفیم» یا ‘obliquity’ است: مفهومی که با ظاهر متناقض و پارادکسیاش بیان میکند که بسیاری از اهداف وقتی به صورت غیرمستقیم دنبال شوند احتمال این که محقق شوند بیشتر است.
چه برای پیروزی در نبردهای سرنوشتساز و چه برای تحقق اهداف فروش، تاریخ نشان داده که رویکردهای غیرمستقیم (obliquity) موفقتر بودهاند به ویژه در حوزههای بسیار دشوار.
جان کی (John Kay) اقتصاددان برجسته این نظریهاش را برای بسیاری از حوزهها از کسبوکارهای بینالمللی گرفته تا برنامهریزی شهری، از فوتبال گرفته تا مدیریت مهار آتشسوزی جنگلها استفاده کرده است.
او نشان میدهد که چرا پرسودترین شرکتها همیشه آنهایی نیستند که لزوما به دنبال سود هستند، و چرا ثروتمندترین افراد چه زن و چه مرد، مادیگراترین افراد نیستند، و چرا خوشحالترین افراد لزوما آنهایی نیستند که تمرکزشان خوشحال بودن است.
کتاب جان کی از مشاهدات محقق حوزهی داروسازی سر جیمز بلک (Sir James Black) الهام گرفته است. سر جیمز بلک برندهی جایزه نوبل 1988 در جایی گفته:
«من به همکارانم میگفتم که اگر میخواهید پول در بیاورید راههای بسیار آسانتری نسبت به تحقیقات دارویی وجود دارد. اوه! چقدر من در اشتباه بودم! به نظر میرسد هم در کسبوکار و هم در علم، وقتی سرگرم انجام کاری هستید، احتمال موفقیت شما در رسیدن به دستاورد دیگری [که مد نظر شما نبود] بیشتر است. من به این پدیده، اصل «غیرمستقیم» میگویم.»
جان کی اعتقاد دارد که کسبوکارها و سازمانها وقتی توسط افراد عاشق و متعهدی که دنبال رشد و تعالی در حوزهی تخصصی خود هستند اداره شوند، بهترین عملکرد را دارند. و موفقیت مالی نیز به دنبال چنین عملکرد فوقالعادهای به دست خواهد آمد. در حالی که اگر اهداف مالی به اهداف اصلی تبدیل شوند، کسبوکار توان، اشتیاق و کاراییاش را از دست میدهد و احتمالا شکست میخورد.
پ.ن.
بر این باورم که بسیاری از تفکرات دنیای کسبوکار را میتوان در حوزهی فردی نیز به کار گفت!
گزیده:
به جز دو دوره بین ۱۲ تا ۱۴ سالگی برای یادگیری موسیقی و بین ۱۴ تا ۱۶ سالگی برای یادگیری ریاضیات، تمام دوران تحصیلام را به جای مطالعه مشغول رویاپردازی بودم. … تحت تاثیر برادر بزرگترم تصمیم گرفتم پزشکی بخوانم… و برای اولین بار، لذت جایگزین کردن مطالعهی سخت و منظم را به جای شادی ناشی از خیالبافی و رویاپردازی چشیدم!
سر جیمز بلک
جان بنتلی (Jon Bentley) که ستونی با نام Programming Pearls در نشریه Communications of the ACM داشت در سال ۱۹۸۶ به برنامهنویسی ادیبانه (literate programming) علاقهمند شد و از دونالد کنوث (Donald Knuth) خواست تا به عنوان نویسندهی مهمان برنامهای با این شیوه بنویسد و از داگ مکلروی (Doug McIlroy) هم خواست نقدی بر برنامهنویسی ادیبانه در آن ستون بنویسد.
مسالهای که بنتلی از کنوث خواسته بود برای آن برنامهای بنویسد برای اکثر افراد آشناست: برنامهای بنویسید که یک فایل متنی را بخواند و n کلمهی پرتکرار به ترتیب و به همراه تعداد تکرار آنها چاپ کند.
کنوث برنامهاش را با پاسکال نوشت. برنامه از یک ساختمان داده هوشمندانه و هدفمند برای نگهداری کلمات و تعداد تکرار آنها استفاده میکرد.
نقد و بررسی مکلروی با قدردانی از نوشتهی کنوث و تکنیک برنامهنویسی ادیبانه شروع میشد. او به هوشمندی ساختار دادهی استفادهشده و پیادهسازی کنوث و همچنین یکی دو خطای موجود پرداخت و پیشنهادهایی برای بهبود برنامه ارائه داد.
در ادامه با متانت و با زبانی ساده، مبانی و اصول زیربنایی برنامهی کنوث را نقد و ویران کرد. آن چه افراد از آن نوشته به یاد دارند این است که مکلروی یک کد با ۶ دستور شل یونیکس (six-command shell pipeline) نوشت که نسخهی کامل و بدون خطای کد پاسکال ۱۰ صفحهای کنوث بود.
1 tr -cs A-Za-z '\n' |
2 tr A-Z a-z |
3 sort |
4 uniq -c |
5 sort -rn |
6 sed ${1}q
مرجع: More shell, less egg
این داستان نشاندهندهی توانایی ترکیب اجزای از پیشساخته در مدل Pipeline (معروف به pipes and filters) است. جایی که ترکیب دستورات ساده و مستقل، ولی قابل ترکیب میتواند کار یک کد ۱۰ صفحهای را انجام دهد.
Keep it simple, make it general, and make it intelligible. Douglas McIlroy
خوشحالم که به اطلاع دوستان گرامی برسانم که کتاب The Ignite Project: A Journey in Scrum (لینک آمازون) توسط انتشارات Springer Nature در تاریخ ۲۵ آذر ۱۴۰۲ منتشر شد. افتخار داشتم با خانم نیوشا رییسی نژاد و آقای دکتر مشیرپور به عنوان نویسنده در این کتاب همکاری داشته باشم. از هر دوی این عزیزان به ویژه آقای دکتر مشیرپور بسیار سپاسگزارم.

این کتاب داستان یک پروژه کارآموزی است که در دانشکده مهندسی شولیک در دانشگاه کلگری زیر نظر آقای دکتر مشیرپور انجام شده است. گروهی از دانشجویان مقطع کارشناسی و کارشناسی ارشد رشتهی نرمافزار با راهنمایی یک مشاور از صنعت و نیز همراهی دو دانشجوی تحصیلات تکمیلی تلاش میکنند تا پروژهای را به سرانجام برسانند.
در کنار داستان توسعهی این نرمافزار بخشهایی به شکل زیر و با نام a word from the mentor (سخنی از مربی) وجود دارد که مفاهیم، اصطلاحات و تکنیکهای مهندسی نرمافزار یا متدهای چابک مرتبط با آن بخش از داستان را توضیح میدهد. تلاش بر این بوده که اطلاعات تخصصی حوزهی توسعهی نرمافزار در لابهلای داستان گنجانده شود.

و سرآخر این که برگ سبزی است تحفهی درویش! امیدوارم این کتاب برای خوانندگان مفید باشد و به رشد توسعهی نرمافزار به ویژه در تیمهای دانشجویی کمک کند.
گزیده:
“هدف داستاننویس این نیست که به شما بگوید چگونه فکر کنید، بلکه هدفاش این است که سوالاتی مطرح کند تا شما به آنها فکر کنید.” براندون ساندرسون
اگر بخواهم به دیگران زور بگویم یا کاری کنم دهانشان بسته شود، به آنها میگویم تحقیقاتشان «کار خاص و جدیدی» نیست. اما من کسی نیستم که این کارها را بکند. [از نظر من] ایدههای متنوع و متفاوت خوب و مفیدند.
انتقاد از ایدههای دیگران میتواند سازنده باشد به شرطی که شما ایده بهتری داشته باشید که نتایج آن نیز تأیید شده باشند.
یان لیکان، برنده جایزه تورینگ برای یادگیری عمیق