لابلای اخبار کلی مطلب میبینیم در مورد اینکه هوش مصنوعی تا فلان سال (اکثرا بین ۳ تا ۱۰ سال رو پیشبینی میکنن) فلان درصد از آدمها رو بیکار میکنه و دیگه مهندسهای نرمافزار باید غازهاشون رو صبح به صبح به چَرا ببرن و...
چقدر این توصیفات درسته؟ چقدر AI برای ما خطرناکه؟
از نگاه کلی: هوش مصنوعی که این روزها مرکز توجهه، مدلهای زبانی هستن، به زبان خیلی ساده؛ یه ماتریس خیلی خیلی بزرگ از ارتباط بین کلمات! آیا با مفهوم انسانی؛ نوآور، خلاق و باهوش هستند؟ خیر! چیزی که در قالب نوآوری ازشون دیده میشه، ترکیب دادههایی است که باهاشون مدل زبانی آموزش دیده (متن، تصویر، ویدیو و...). حالا نسل جدیدترش که agentic AI هست، ترکیب مدلهای مختلف برای کاربردهای خاص هستن که انجام کارهای پیچیدهتر رو ممکن میکنن.
قبلتر هم چنین تحولات بزرگی رو از سر گذروندیم؛ یه عده هم حذف شدن، حالا یا به شکل تغییر زمینه کاری یا باقی موندن روی پروژههای حوصله سربری که خدا میدونه چه روزی جایگزین میشن. مثلا: زمانی که وب گسترش پیدا کرد، کسانی که اصرار روی دسکتاپ داشتن؛ زمانی که دوران افول دلفی رسید شرکتها و تیمهایی که دیر این موضوع رو پذیرفتن. یا دوران کلاد، یا زمانی که نرمافزارها نیاز به تحلیل داده داشتن، اونایی که کماکان اصرار بر گزارشات چاپی که لیست اطلاعات رو حداکثر با یه جمع به کاربر ارائه میکردن. یا دورانی که موبایل اپلیکیشنها به یه راه تعامل جدی با کاربرها تبدیل شدن و...
من هوش مصنوعی فعلی رو چیزی فراتر از تحولات بالا نمیدونم، روزی که برنامهنویسها توی vim کدنویسی میکردن، آیا اومدن IDEها و ادیتورهای مدرن که autocomplete و کلی ابزار قوی که سرعت و سهولت رو به توسعه میداد، حتی اومدن low-codeها no-codeها ما رو بیکار کرد؟
آیا اومدن روباتها به صنایع خودروسازی باعث بیکاری سراسری شد؟
جواب هر دو سوال: هم بله است هم خیر. جنس بیکار کردن AI از جنس بیکار کردن سیر جاری پیشرفت تکنولوژی است. تایپیستی که زرنگار و بعدتر ورد یاد نگرفت، و بعدترش از speech-to-text استفاده نکرد و مهارتش رو به ویراستاری ارتقاء نداد، مثل برنامهنویسی که روی ابزارهای جدید مهاجرت نکرد و بهروز نموند شغلش یا حس پویاییاش نابود شد.
در دنیای مدرن مابهازای تولید هر ۱۰۰۰ خودرو، بین ۵ تا ۱۰ نفر شاغل میشن (با وجود روباتها و ابزارهای خودکار پیشرفته)، در ایران، این عدد ۷۰ تا ۱۵۰ نفر است!!! آیا اگر تویوتا یا تسلا در ایران کارخونه بزنن یا همین کارخونهها رو تصاحب کنن، نباید تعداد زیادی آدم غیربهرهور اخراج شن؟ همین رو به نرمافزار تعمیم بدیم؛ آیا با وجود کوپایلوت و ابزارهای مدرن؛ برنامهنویسی که هنوز نرمافزار CRUD مینویسه، و به کاربرش و سازمان بهرهبردار از نرمافزار، امکانات مبتنی بر AI برای بهرهوری بیشتر نمیده، نباید حذف شه؟ یا اگر حذف نشه، نباید درجا بزنه و رشد نکنه؟
برنامهنویسی که امکانات مدرن به محصولش نیاره، مثل شرکتهایی هستن که به خودروسازهای داخلی ما امکانات رباتیک هوشمند و بهرهور ندادن، هم مشتریشون (خودروساز) رو غیربهرهور کردن هم خودشون عقبموندن. حالا فرق AI در نرمافزار اینه که که چون امکانات فیزیکی مثل کارخونه و روباتهای بزرگ و... نیاز نداره و شما از هر جای دنیا میتونی از یک مدل در جایی دیگر از جهان استفاده کنید، مهاجرت و اثرگذاری سریعتری خواهد داشت.
از نگاه ایران: متاسفانه در زمانهای که کشورها سر تحولات بزرگ هوشمصنوعی و دسترسی به تراشه رقابت دارن، دیپسیک چینی در عرض چند روز حتی توی آمریکا به بالای لیست میاد؛ ایران درگیر فیلتر بودن یا نبودن بدیهیات و اینترنت طبقاتی و... است. لذا با تاسف و تألم عمیق، بعید میدونم تغییرات در ایران وسعت و عمق زیادی داشته باشه. دلایلم وسیع و بیانش زمانبره ولی اگر از چند شرکت پیشرو عبور کنیم، معدل بقیهی جامعه نرمافزاری کشور، بسیار پایینه. پیشنهاد میکنم دیدگاه کلان داشته باشیم و کل جامعه نرمافزاری رو ببینیم نه چند شرکتی که روز به روز هم کوچکتر و کُندتر میشن (مهاجرت نیروی متخصص، شرایط اقتصادی، انزوای تکنولوژیک، سیاستهای کشور و...). همین جامعه نرمافزاری ایران سهم مهمی از شرایط دولت داشته که به جای ۱۵ تا ۲۵ نفر کارمند به ازای هر ۱۰۰۰ نفر، ۳۰ تا ۳۵ کارمند با بهرهوری «برو فردا بیا؛ برو هفته دیگه بیا» داره؛ در حقیقت نرمافزارهایی توسعه دادن که شفافیت، business observability و integrity رو به سخره گرفتن!
لذا درست مثل زمانی که IDEهای مدرن اومدن، AI رو به مثابه ابزاری ببینیم که قراره به ما کمک کنه تا محصولات «امروزی» تری بسازیم، مشتریانمون رو توانمندتر و بهرهورتر کنیم و دانشمون رو ارتقاء بدیم. به جای حبابها رو هیجانات هم روی تعمیق و گسترش دانشمون کار کنیم...
نظرتون رو بگید لطفا 😊🌱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👏5❤2
⚠️ این پست، فنی نیست، فقط شوخی و تخیلی است!
«حالا که چند بار کلمه جواگره که جمع مکسر جوگیر است رو به کار بردم لازمه تا انواعشون رو برشماریم»
۱. فنبوی/فنگرل (Fanboy)
اینا بهشدت به یک برند یا تکنولوژی خاص وفادار هستن و اغلب بهطور غیرمنطقی ازش دفاع میکنن (مثلاً طرفدارای اپل یا پیاچپی یا جاوا، دقت کنین که داتنت و گو فَنبوی ندارن، همه از بیخ جنتلمن، لیدی و فهیم و منطقی هستن چون کسی حق نداره در مورد حضور ابرو در سمت فوقانی چشمشون صحبت کنه! حالا خود دانید؛ اصلنشم فنبوی خودتونید و ۷... ).
رفتار: مخالفت شدید با هر محصول یا تکنولوژی رقیب. از زمرهی خطرناکترین جواگره.
۲. ترول (Troll)
کسایی که عمداً بحثها و مباحثات رو خراب میکنن تا دیگران رو تحریک کنن.
رفتار: نظر دادنهای بیربط یا بحثبرانگیز، صرفاً برای جلب توجه یا ایجاد دعوا. حداکثر اصطکاک با سطح مُخ رو دارند. اساتید whataboutism در مباحثات. اینا اگر توی کامیونیتی نرمافزاریها چرند نبافن، حتمن در اون ساعت و لحظه، توی گفتگوی ویژه خبری تلویزیون دارن روان ۸۰ میلیون نفر رو سیقل میدن، مثلا با طرح دلایل متقن! در مورد تاثیر فیلترینگ بر شادابی پوست و افزایش طول عمر!
۳. فومو (FOMO: Fear of Missing Out)
افرادی که به دلیل ترس از جا موندن از فناوریهای جدید، همیشه به دنبال خرید یا تجربه آخرین محصولات و تکنولوژیها هستن.
رفتار: خرید فوری هر محصول جدید یا ثبتنام توی سرویسهای تازه معرفیشده. اینا حقوقشون به پنجم ماه بیشتر قد نمیده. از سابسکریپشن هوشمصنوعی تا تمام سرویسهای موسیقی، تا هزاران گیگ ویدیو آموزشی تمام تکنولوژیهای جهان رو دارن. عموما از شدت استرس عقب موندن از موج اتفاقات، مجبورن شبها ماینوکسیدیل ۹۰ درصد، گل ختمی و جوشونده خارشتر به سرشون بمالن.
۴. هایپ رایدر، هایپمستر (Hype Rider)
کسایی که فقط به دلیل "مد شدن" یا "حواشی" سراغ یک تکنولوژی میرن.
رفتار: مثلاً هوش مصنوعی رو فقط به خاطر ترند بودن، بدون علاقه واقعی، بلغور میکنن. اینا حتی وبلاگشون که هنوز متون lorem ipsum و «سلام دنیا، این اولین پست وردپرس است» توشه رو «باید» روی کوبرنتیز بیارن بالا. این گونه از جواگره، دانششون دریایی به عمق ۱ سانتیمتره و پارسال با عینک اپلویژن در سطح خیابونا زیاد دیده شدن. در پاسخ «چرا» عموما به سقف یا گاهن به سمت افق خیره میشن.
۵. میمباز تکنولوژی (Tech Meme Lord)
کسایی که علاقه دارن مسائل تکنولوژی رو در قالب میم مطرح کنن.
رفتار: اینا حرف نمیزنن، تایپ نمیکنن، فقط میم میفرستن. هر جا دکمه submit یا send داشته باشه جوکهای فنی و میم میفرستن. این گونهاز جواگره بعد از مدتی به درجهای از بیمزگی و تکرار میرسن که نیازی ندارن تا همسر برادر همسرشون تست بارداری بده، چون «قطعا» شوهرعمه شدن!
۶. نوستالژیباز (Tech Nostalgic):
اینا مدام از گذشته تکنولوژی تعریف میکنند و معتقدن همه چیز قبلاً بهتر بود.
رفتار: ساعت کاسیو اف۹۱ دستشونه، گوشی نوکیا دارن هنوز (با چراغقوه فعال)، عینک طرح مرحوم هویدا میزنن، باور دارن دلفی و SQL Server 2000 هنوزم کافیه و بهترین استک است، تنها مشکلشون اینه که مشتریهاشون باید ویندوز XP اونم ۳۲ بیتی نصب کنن.
۷. اسنوب فناوری (Tech Snob):
اینا فقط گرونترین و جدیدترین گجتها رو قبول دارن و به انتخابهای دیگران با تحقیر نگاه میکنن.
رفتار: هر کس اندروید داره و آیفونش قدیمیتر از ۱۶ است، اُمُل، کَدی، و حتی اًزگَل به شمار میاد. ویندوز دارها مستحق سوزانده شدن در کوره آجرپزی هستن و مَک تنها پاسخگوی نیازهای این بزرگوارانه، چرا؟ چون با «زبان برنامهنویسی» HTML و CSS پروژههای سنگینشون باید پردازش شه. اینا عموما یه کلیه ندارن، مسابقات ملی چارقاپ شپشها انتهای جیبشون برگزار میشه ولی در عوض پشت یَک یَک گجتهاشون یک سیب گاز زده است.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣19👍3👏1
آشنایی به عناوین و سلسهمراتب سازمانی مهندسی نرمافزار، توانمندیها و مسئولیتها. و اینکه از کجا بفهمیم سازمان ما چه سطوحی رو نیاز داره...
Please open Telegram to view this post
VIEW IN TELEGRAM
سلسلهمراتب مهندسی نرمافزار موضوع مهمیه، هم برای سازمان که بخواد با ساختار مناسب به اهداف و برنامههاش برسه و بهرهوریاش رو بهبود بده؛ هم افراد انگیزه برای رشد و یادگیری و رقابت داشته باشن. پس داشتن یه ساختار سازمانی درست + ساز و کار ارزیابی و رشد سرمایهانسانی، نه تنها حیاتیه، بلکه یه چالش بُرد-بُرد برای سازمان و افراده.
قبل از توضیح در مورد انواع سلسلهمراتب مهندسی نرمافزار، باید بدونیم » چجوری ساختار سازمانی مناسب رو انتخاب کنیم؟
آیا هر چی گوگل، اپل، متا یا... داره رو کپی کنیم؟ یا هر کاری هزاردستان و اسنپ و دیجیکالا کردن رو کپی کنیم؟ (حتی لحن سوالم نشون میده فقط یکی از انواع مدیران جواگره چنین کاری رو میکنه 😁)
موارد زیر تنها تعدادی از مولفههای مورد بررسی برای طراحی ساختار سازمانی مهندسی نرمافزاره، برای هر کدوم دو مورد مثال ذکر میکنم.
توجه داشته باشید که هم مولفههای بیشتری دخیله، هم مثالهای متنوعتری میشه از انواع هر مولفه زد که از حوصله پست تلگرامی خارجه.
۱. اندازه شرکت
۲. پیچیدگی محصول
۳. فرهنگ سازمانی
۴. اهداف رشد
۱. نیازسنجی (Gap Analysis):
۲. مقایسه با شرکتهای مشابه (Benchmarking):
۳. تعریف نقشه راه (Roadmap):
۴. انعطافپذیری:
این بخش اول بود، لازم بود توضیح بدم که نقشها و انواع سلسه مراتبی که در قسمت بعدی معرفی خواهم کرد، فقط نمونههاییه که سازمانهای مختلف بر اساس نیاز و شرایطشون ایجاد کردن. مثلا Distinguished Engineer یا Developer Advocate نقشهایی است که برخی سازمانها بنا به ضرورت، اهداف و نیازشون ایجاد کردن و دارن، دلیل نمیشه همه داشته باشن.
از اون طرف اگر ما نقشها و مسئولیتها رو درست نشناسیم در انتخاب مسیر شغلی شاید انتخابهای غیر بهینهای کنیم. پس افراد باید بدونن مسیر رشدهای مختلف چیه تا هم نقشه رشدشون رو ترسیم کنن هم سازمان متناسب رو برای کار کردن انتخاب کنن. از طرفی سازمانها هم باید تکلیفشون مشخص باشه تا بتونن چرخه تربیت و رشد سرمایهانسانی رو ترسیم و اجرا کنن. شما برای تربیت نیروی انسانی باید افرادی رو داشته باشی که «بلد باشن و شایستگی» هدایت نیروی انسانی رو داشته باشن. نه اینکه هر وقت مدیر رفت نفر بعدی رو مدیر کنی! یا هر کی شوآف بیشتری داشت ارتقاء بدی!
🌱 لطفا دقت شود: «هدایت» با «راهنمایی» بسیار فرق داره! هدایت یعنی من دست شما رو بگیرم ببرمتون به مقصد مشخص برسونم. ولی راهنمایی یعنی بهتون آدرس رو بگم. لیدرشیپ نوعی از هدایت است، وگرنه راهنمایی توی اینترنت زیاده!
دوست دارید ادامه بدم و قسمت دوم و بعدترش رو داشته باشیم؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
کوییز: تنها ۲ درصد افراد قادر به حل این کوییز هستن که جزو نوابغ ناسا به شمار میان.
کدام گزینه نابودکنندهترین اقدام برای «حال و آینده» یک مهندس نرمافزار است؟
کدام گزینه نابودکنندهترین اقدام برای «حال و آینده» یک مهندس نرمافزار است؟
Anonymous Quiz
2%
رها نمودن پیانو از بالای ساختمان وقتی در حال عبور است
1%
وارد کردن وی داخل چرخ گوشت و دریافت دهها مهندس کوچولوی رشته رشته
2%
تنها گذاردن وی داخل اتاقی مملو از کروکودیل گرسنه
5%
وصلت وی با عمهی بیوه کیمجونگاون که همسر مرحومش تابآوری کافی در مقابل شلیک گلوله توپ کیم را نداشت
70%
ارتقاء وی به پوزیشن لیدرشیپ یا تصمیمگیر وقتی تجربه و دانش کافی را ندارد
20%
با یک سال سابقه، طی فرایند شایستهگزینی قحطالرجال/قحطالنساء شدم انجینیرینگمنجر اومدم نتیجه ببینم
🤣24👍1🔥1
خب حالا که فهمیدیم انتخاب ساختار سازمانی بستگی به نیازها و شرایط داره، بریم سراغ یه نمونه واقعی: گوگل!
گوگل یکی از شرکتهاییه که ساختار مهندسی مدون و تعریفشدهای داره و خیلیها تو مسیر شغلیشون دوست دارن بدونن که این مسیر رشد توی گوگل چطوره. البته دوباره تأکید کنم: ساختار گوگل برای گوگل خوبه! کپی کردنش بدون توجه به اندازه، اهداف، و فرهنگ سازمانی شما مثل این میمونه که کت و شلوار سایز ۳XL بخری ولی قدت ۱۲۰ باشه! 😁
۱. سطح Software Engineer I (L3)
📌 تجربه و دانش: معمولاً تازهواردها، فارغالتحصیلان دانشگاه یا کسانی که صفر تا دو سال تجربه دارن
۲. سطح Software Engineer II (L4)
📌 تجربه و دانش: معمولاً چند سال (۲ تا ۵ سال) تجربه کاری در پروژههای واقعی
۳. سطح Senior Software Engineer (L5)
📌 تجربه و دانش: معمولاً ۵ تا ۱۰ سال تجربه، فرد باید بتونه راهحلهای فنی جامع و بهینه ارائه بده؛ یا کل پروژه رو از صفر تا صد هدایت کنه
۴. سطح Staff Software Engineer (L6)
📌 تجربه و دانش: معمولاً بالای ۱۰ سال تجربه، کسی که بتونه تصمیمات کلیدی فنی بگیره
۵. سطح Senior Staff Engineer (L7)
📌 تجربه و دانش: ۱۵+ سال تجربه، این سطح برای متخصصین عمیق در یک حوزه فنی در نظر گرفته شده (مهندسینی که در صنعت شناخته شدهاند)
۶. سطح Principal Engineer (L8)
📌 تجربه و دانش: عموما ۲۰+ سال تجربه و سطحی که فقط تعداد کمی از مهندسان بهش میرسن
۷. سطح Distinguished Engineer / Google Fellow (L9 - L10)
📌 تجربه و دانش: یکی از بالاترین جایگاههای مهندسی که فقط تعداد محدودی بهش میرسن
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2 1
جمعبندی:
سلسلهمراتب گوگل برای شرکتی با ۱۷۰ هزار کارمند و محصولات جهانی طراحی شده. اگر سازمان شما ۵۰ نفر است، دنبال استخدام L8 نباشید! 😂
موفقیت در گوگل (و هر شرکتی) به تاثیرگذاری (Impact) وابسته است، نه صرفاً سالهای تجربه. پس به جای تقلید کورکورانه، ساختاری طراحی کنید که متناسب با قد و بالای سازمان شما باشه!
💬 شرکت بعدی چی باشه؟ (کامنت کنید)
بوکینگ؟ مایکروسافت؟ اپل؟ Miro؟ ING؟ Meta؟ Ayvens؟
اگر مثال شرکتهای دیگه رو ادامه بدم، ریاکشن:⚙️
اگر این بحث کافیه، ریاکشن:🤪
سلسلهمراتب گوگل برای شرکتی با ۱۷۰ هزار کارمند و محصولات جهانی طراحی شده. اگر سازمان شما ۵۰ نفر است، دنبال استخدام L8 نباشید! 😂
موفقیت در گوگل (و هر شرکتی) به تاثیرگذاری (Impact) وابسته است، نه صرفاً سالهای تجربه. پس به جای تقلید کورکورانه، ساختاری طراحی کنید که متناسب با قد و بالای سازمان شما باشه!
بوکینگ؟ مایکروسافت؟ اپل؟ Miro؟ ING؟ Meta؟ Ayvens؟
اگر مثال شرکتهای دیگه رو ادامه بدم، ریاکشن:
اگر این بحث کافیه، ریاکشن:
Please open Telegram to view this post
VIEW IN TELEGRAM
مقدمه: یکی از چالشهای متعدد و اساسی جامعه ما اینه که «سوال نداریم» خصوصا «سوال خوب»!! شاید روزی مفصل نوشتم در موردش... فعلا بگذریم...
امروز یک سوال «خوب» در مورد مطلب قبلی طرح شد؛ ممنون از آقا یا خانم NaN که پرسیدن:
به احترام پرسش خوب ایشون سعی میکنم در حد بضاعت پست تلگرامی توضیح بدم.
توی مباحث لیدرشیپ فنی، ۳ تا کلمه داریم که دونستن معانی اونها مهمه:
💡 در مورد Output (خروجی)
تعریف: خروجی، محصول مستقیم و قابلاندازهگیری فعالیتها یا وظایفه. درواقع، ماحصل بلافصل کاریه که انجام میدهیم؛ مثلاً کدنویسی، طراحی، مستندسازی یا تولید نسخه اولیه نرمافزار. عملا فعالیتها یا محصولات ملموسی که تیم تولید میکند.
⚙️ مثال:
===========================
💡 در مورد Outcome (نتیجه)
تعریف: نتیجه به تأثیرات و تغییراتی اشاره داره که به واسطهٔ یک خروجی در رفتار یا وضعیت کاربران، کسبوکار یا فرایندهای داخلی به وجود مییاد. Outcome معمولاً روی «ارزش» تمرکز داره؛ اینکه خروجی تولیدشده چه مشکلی را حل کرده یا چه بهبودی ایجاد کرده.
⚙️ مثال:
===========================
💡 در مورد Impact (تأثیر یا اثرگذاری کلان)
تعریف: Impact سطحی کلانتر از «نتیجه» است که نشون میده تغییرات ایجادشده چه اثرات عمیق یا پایدار در جامعه، بازار، استراتژی کلان شرکت یا حتی صنعتی که شرکت توش فعالیت میکنه، داشته است. Impact فراتر از یک «دوره کوتاه» یا «مقیاس کوچک» است و غالباً در بلندمدت ارزیابی میشود.
⚙️ مثال:
===========================
لذا این خیلی خیلی مهمه که «ملاک سنجش و ارزشگذاری» عملکردمون «استاندارد و جهانی» باشه... وگرنه: «خود گویی و خود خندی... عجب مرد هنرمندی!»
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10 4👍2
حالا که گوگل رو مرور کردیم، و مفهوم impact در سازمان رو دیدیم، بنا به نظر و پیشنهاد شما، بریم سراغ مایکروسافت ۲۲۸هزار کارمند داره که متناسب با ساختار و نیازهاش، نردبان شغلی خاص خودش رو داره:
۱. سطح L59 - Software Development Engineer I (SDE I)
📌 تجربه و دانش: فارغالتحصیلهای تازهکار یا ۰ تا ۲ سال تجربه.
۲. سطح L60 - Software Development Engineer II (SDE II)
📌 تجربه و دانش: معمولاً ۲ تا ۵ سال تجربه، کسی که بتونه مشکلات فنی پیچیدهتر و پروژههای کوچیک رو حل کنه.
۳. سطح L61-L62 - Senior Software Engineer (SSE)
📌 تجربه و دانش: معمولاً بالای ۵ سال تجربه، کسی که بتونه استقلال بیشتری در تصمیمگیریهای فنی داشته باشه
۴. سطح L63-L64 - Principal Software Engineer
📌 تجربه و دانش: معمولاً ۸-۱۲ سال تجربه، فردی که میتونه چند تیم رو از نظر فنی هدایت کنه.
۵. سطح L65-L66 - Partner Software Engineer
📌 تجربه و دانش: یکی از بالاترین سطوح مهندسی فنی در مایکروسافت، معمولاً ۱۲+ سال تجربه.
۶. سطح L67 - Distinguished Engineer
📌 تجربه و دانش: افرادی که تأثیر مستقیمی روی کل صنعت دارن، تعداد این افراد خیلی کمه (مثال: دیوید فولر)
۷. سطح L68+ - Microsoft Technical Fellow
📌 تجربه و دانش: بالاترین سطح فنی در مایکروسافت! این افراد تأثیرگذارترین چهرههای تکنولوژی شرکت هستن (اینقدر که مدخل ویکیپدیا دارن!)
🔀 مایکروسافت دو مسیر مجزا برای پیشرفت داره:
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
tech-afternoon
📇 سلسلهمراتب مهندسی نرمافزار (بخش دوم, گوگل!)
خب حالا که فهمیدیم انتخاب ساختار سازمانی بستگی به نیازها و شرایط داره، بریم سراغ یه نمونه واقعی: گوگل!
گوگل یکی از شرکتهاییه که ساختار مهندسی مدون و تعریفشدهای داره و خیلیها تو مسیر شغلیشون دوست دارن…
خب حالا که فهمیدیم انتخاب ساختار سازمانی بستگی به نیازها و شرایط داره، بریم سراغ یه نمونه واقعی: گوگل!
گوگل یکی از شرکتهاییه که ساختار مهندسی مدون و تعریفشدهای داره و خیلیها تو مسیر شغلیشون دوست دارن…
🔥11👍1
🛠 چرا سلسلهمراتب مهندسی برای شرکتهای کوچک و متوسط مهمه؟
شرکتهای کوچک و متوسط (SMEs) معمولاً چابکتر از غولهایی مثل گوگل و مایکروسافت هستن، ولی اگر نقشها شفاف نباشه، افراد جای رشد نداشته باشن و سازمان فاقد ساختار منطقی باشه، انگیزه تیم پایین میاد و رشد شرکت متوقف میشه. آدمها میرن یا فسیل میشن! و دیگه نقطه قوت چابکی تبدیل میشه به اسباب درجا زدن...
👨💻 هدف از طراحی نردبان شغلی اینه که:
🔹 سلسلهمراتب پیشنهادی برای یک شرکت پویا و مقیاسپذیر
۱. سطح Junior Software Engineer 👶
📌 ویژگیها: ۰ تا ۲ سال تجربه، تسلط روی اصول برنامهنویسی و یکی دو تکنولوژی
🔹 مسئولیتها:
🎯 شرایط ارتقا: تسلط به ابزارهای توسعه شرکت، بهبود درک معماری نرمافزارها
۲. سطح Software Engineer 👨💻 (مهندس نرمافزار)
📌 ویژگیها: ۲ تا ۵ سال تجربه، توانایی توسعه ویژگیهای مستقل
🔹 مسئولیتها:
🎯 شرایط ارتقا: ارائه راهحلهای بهینهتر (نه شوآف!) و درک بهتر از طراحی سیستمها
۳. سطح Senior Software Engineer 🔥 (مهندس نرمافزار ارشد)
📌 ویژگیها: ۵ تا ۸ سال تجربه، مهارت در حل مشکلات پیچیده
🔹 مسئولیتها:
🎯 شرایط ارتقا: توانایی تصمیمگیریهای فنی مهم، رهبری پروژههای بزرگتر
۴. سطح Lead Engineer / Tech Lead 🚀 (رهبر فنی تیم)
📌 ویژگیها: ۷ تا ۱۰ سال تجربه، تخصص در طراحی و راهبری سیستمهای پیچیده
🔹 مسئولیتها:
🎯 شرایط ارتقا: تجربه کافی در مدیریت تیمهای مهندسی، درک استراتژی فنی
۵. سطح Software Architect 🏛 (معمار نرمافزار)
📌 ویژگیها: ۱۰+ سال تجربه، توانایی طراحی سیستمهای بزرگ و توزیعشده
🔹 مسئولیتها:
🎯 شرایط ارتقا: داشتن دیدگاه کلان و استراتژیک به سیستمهای نرمافزاری
۶. سطح Engineering Manager 🎯 (مدیر مهندسی)
📌 ویژگیها: مهارت در هم مدیریت افراد، هم درک فنی سیستمها
🔹 مسئولیتها:
🎯 شرایط ارتقا: اثبات توانایی در هدایت چند تیم و موفقیت در اجراهای استراتژیک
۷. سطح CTO (Chief Technology Officer) 🏆 (مدیر ارشد فناوری)
📌 ویژگیها: بالاترین سطح فنی، توانایی هدایت کل دپارتمان مهندسی
🔹 مسئولیتها:
🎯 شرایط ارتقا: تجربه گسترده در رهبری فناوری و ایجاد محصولات موفق
🔹 انعطافپذیری حفظ بشه! یه استارتاپ ۱۰ نفره قطعاً نیازی به CTO یا چندین سطح از روز اول نداره، ولی وقتی رشد کنه، نیازش ایجاد میشه.
🔹 جایگاههای میانی حذف نشن! بین یه Junior و یه Senior باید مسیر رشد منطقی باشه، وگرنه انگیزه تیم کم میشه.
🔹 فرهنگ یادگیری و رشد ایجاد بشه! مسیر پیشرفت افراد نباید صرفاً روی «سالهای تجربه» باشه، بلکه توانایی و خروجی مهمتره.
🔹 وقتی برخی پوزیشنها رو به هر دلیلی ندارید، هیچ اشکالی نداره از مشاور «شایسته» استفاده کنید، خیلی بهتر از اینه که چون کسی رو ندارید بهش برچسب سنیور یا معمار یا کوفت بچسبونیم.
🔹 پوزیشنهای لیدرشیپ، فقط مهارت فنی نیاز ندارن، باید بتونه تعامل سازنده و مناسب با سایرین داشته باشن و کمک به رشد بقیه کنن
😊 پایان این بحث
خوشحال میشم فیدبک بدید 🌱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🏆2
کوییز: بهترین مسیر برای رشد شغلی و پیشرفت در مهندسی نرمافزار کدام است؟ (نمونه سوال آزمون ثلث سوم دانشگاه هاروارد، ۲ نمره)
Anonymous Quiz
9%
پاچهخواری از روبرو، زیرآبزنی از پشت 😈
1%
شیتیل بدیم کارگزینی تا جلو اسممون بنویسه مهندس 🥸
1%
نفر بالادستی، دیر یا زود مهاجرت میکنه، فرداش میشینیم رو صندلیش، میشیم رییس 😎
1%
حوصله داری عامووو، پیشرفت کنیم که کجاا رو بگیریم مثلا؟! 🥱
60%
شرکتی کار کنیم که نردبان شغلی خوبی داره، تلاش و یادگیری و اثربخشی داشته باشیم 🤓
7%
قتل تمیز یا چیزخور کردن بیسروصدای نفر بالادستی، حداکثر مشارکت در شیوَن و ناله در مراسم ۷ و چهلم💀
6%
گز ۹۸درصد پسته و کاردستی خلاقانه برای مدیرعامل عزیز و قشنگ شرکت 🙇
1%
خرید پکیج موفقیت و پی بردن به راز پیشرفت 🤪
13%
گشتن توی وبلاگها و بلغور کردن اسم تکنولوژیهای جدید، تهلهجه انگلیسی + فراموشی لغات فارسی 💅
🤣17
یه اصطلاحی برای توصیف کالاهای تندمصرف داریم به نام FMCG یا Fast-Moving Consumer Goods که سریع فروش میرن، عموما ارزون هستن. مثل مواد غذایی و نوشیدنی، لوازم نظافت و...
برای محتوای دیجیتال هم اصطلاح «محتوای زودگذر» یا ephemeral content استفاده میشه. یعنی محتوایی که مثل اینستاگرام (بهخصوص استوریها) یا مطالب تلگرام منتشر میشه، که معمولاً به سرعت توسط کاربر مصرف میشه. خیلی از این محتواها فقط برای چند ساعت یا چند روز قابل مشاهده هستن یا اهمیتشون رو از دست میدن.
چند وقته درگیر این سوال شدم که آیا اصلا تلگرام جای درستی بود برای نوشتن محتوای فنی؟ جایی که گاها مجبورم از کلمات یا علائم نگارشی حذف کنم که توی یک پست جا بشه! یا اینکه بهتر بود تلگرام برای اعلان مطلب جدید در یک پلتفرم مناسبتر مثل بلاگ استفاده میشد؟ آیا مثلا مخاطب امروز این کنال، چقدر از محتوایی که ۲ ماه پیش نوشته شده و هنوز از نظر کاربردی منقضی نشده مطلع میشه یا در معرض انتخابش قرار میگیره؟
خلاصه اینکه اگر پیشنهاد و نظری که کمک کنه داشتید خوشحال میشم بگید... 😊
برای محتوای دیجیتال هم اصطلاح «محتوای زودگذر» یا ephemeral content استفاده میشه. یعنی محتوایی که مثل اینستاگرام (بهخصوص استوریها) یا مطالب تلگرام منتشر میشه، که معمولاً به سرعت توسط کاربر مصرف میشه. خیلی از این محتواها فقط برای چند ساعت یا چند روز قابل مشاهده هستن یا اهمیتشون رو از دست میدن.
چند وقته درگیر این سوال شدم که آیا اصلا تلگرام جای درستی بود برای نوشتن محتوای فنی؟ جایی که گاها مجبورم از کلمات یا علائم نگارشی حذف کنم که توی یک پست جا بشه! یا اینکه بهتر بود تلگرام برای اعلان مطلب جدید در یک پلتفرم مناسبتر مثل بلاگ استفاده میشد؟ آیا مثلا مخاطب امروز این کنال، چقدر از محتوایی که ۲ ماه پیش نوشته شده و هنوز از نظر کاربردی منقضی نشده مطلع میشه یا در معرض انتخابش قرار میگیره؟
خلاصه اینکه اگر پیشنهاد و نظری که کمک کنه داشتید خوشحال میشم بگید... 😊
🎩 کلاسیک: تست «فقط خروجی و رفتار نهایی» رو مورد ارزیابی قرار میده؛ نیازی به دونستن جزئیات داخلی نیست. مثلاً اگر کد توابع کمکی رو تغییر بدیم ولی نتیجه نهایی تغییر نکنه، تستها تغییر نخواهند کرد و فقط اگه Assertمون پاس شه، تست پاس شده.
🎡 لندن: تستها بر اساس نحوهی فراخوانی وابستگیها و جزئیات پیادهسازی دقیق نوشته میشن. این یعنی تغییرات جزئی در داخل کلاس (حتی بدون تغییر در خروجی نهایی) ممکنه باعث شکست تستها بشه؛ حتی اگه مثلا مقدار برگشتی یک متد دقیقا همونی باشه که قبلا بوده.
🎩 کلاسیک: ممکنه چند تست باهم شکست بخورن چون وابستگیها واقعی هستند. در نتیجه پیدا کردن مشکل ممکنه کمی زمان بیشتری ببره.
🎡 لندن: چون تستها به صورت دقیق تعاملات کلاسها رو چک میکنن، در صورت خطا معمولا به سرعت متوجه میشیم که مشکل کجاست.
🎩 کلاسیک: برای تستهای واقعی باید تمامی وابستگیها پیادهسازی بشن که اگر تعدادشون زیاد باشه کار زمانبر میشه؛ ولی از طرفی این موضوع میتونه نشونهای از طراحی پیچیده یا ناسالم سیستم باشه.
🎡 لندن: با استفاده از Mockها میشه وابستگیهای «سطح اول» رو شبیهسازی کرد بدون اینکه لازم باشه کل گراف وابستگیها رو راهاندازی کنیم.
🤔 اگر کنجکاوی که با کد هم تفاوتش رو ببینی: ریاکشن
Please open Telegram to view this post
VIEW IN TELEGRAM
tech-afternoon
به احترام ⚙️ گذارهای عزیز 😁 کد مثال با 📱 و 📱 رو در کامنت مطلب قرار دادم.
💬 کامنت نظر و تجربه داری بیا بحث کنیم 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🙏3👾1
🥸 هر چیزی رو توی اینترنت دیدیم باور نکنیم، خصوصا اگر فنی «به نظر» اومد!
وقت ناهار اینو توی توییتر دیدم که به نظرم بودار 🦨 اومد. من راست بلدم و از سی خاطراتی دارم، ولی خودم رو نه راستنویس میدونم نه سینویس، بلکه به قدر نیاز و هدف.
یه چالشی چند ساله مطرحه که با زبونهای مختلف کوچکترین hello world باینری رو چجوری میشه نوشت (مثلا جایگزینی printf با puts توی سی یا جایگزینی println با syscall_write توی راست و حذف لایبریهای اضافه و بهبود لینکینگ و...
لذا نشستم کد راست رو بازنویسی کردم و با ۱۴ کیلوبایت جمع شد. ولی آیا اینکه منم یه توییت بزنم بگم دیدی کد راست (مینیمال راست) من از کد سی کوچیکتر شد، درسته؟ خیر! بلکه چرندی به چرندیات افزودهام.
چرا؟ چون اونوقت باید کد مینیمال سی رو مقایسه کنیم که احتمالا باز نسبت به کد ۱۴ کیلوبایتی راست چیزی بین نصف تا یکسوم باید کوچیکتر شه.
ولی چرا باز هم سی کوچیکتر از راسته؟ مگه قرار نبود «عصر، عصر راستنویسی» باشه؟ 😁
- راست static linking داره
- راست runtime safety داره
من سورس کدم رو توی کامنت میگذارم. ولی اصلا نکته این مطلب اینا نبود! اینه که هر چیزی رو توی اینترنت یا از همکار و دوستمون دیدیم حتی اگر با عدد و رقم و کد آمیخته بود، تفکر انتقادیمون رو نسبت بهش حفظ کنیم 😊
وقت ناهار اینو توی توییتر دیدم که به نظرم بودار 🦨 اومد. من راست بلدم و از سی خاطراتی دارم، ولی خودم رو نه راستنویس میدونم نه سینویس، بلکه به قدر نیاز و هدف.
یه چالشی چند ساله مطرحه که با زبونهای مختلف کوچکترین hello world باینری رو چجوری میشه نوشت (مثلا جایگزینی printf با puts توی سی یا جایگزینی println با syscall_write توی راست و حذف لایبریهای اضافه و بهبود لینکینگ و...
لذا نشستم کد راست رو بازنویسی کردم و با ۱۴ کیلوبایت جمع شد. ولی آیا اینکه منم یه توییت بزنم بگم دیدی کد راست (مینیمال راست) من از کد سی کوچیکتر شد، درسته؟ خیر! بلکه چرندی به چرندیات افزودهام.
چرا؟ چون اونوقت باید کد مینیمال سی رو مقایسه کنیم که احتمالا باز نسبت به کد ۱۴ کیلوبایتی راست چیزی بین نصف تا یکسوم باید کوچیکتر شه.
ولی چرا باز هم سی کوچیکتر از راسته؟ مگه قرار نبود «عصر، عصر راستنویسی» باشه؟ 😁
- راست static linking داره
- راست runtime safety داره
من سورس کدم رو توی کامنت میگذارم. ولی اصلا نکته این مطلب اینا نبود! اینه که هر چیزی رو توی اینترنت یا از همکار و دوستمون دیدیم حتی اگر با عدد و رقم و کد آمیخته بود، تفکر انتقادیمون رو نسبت بهش حفظ کنیم 😊
👍7🔥6👏2
وقتی یه سیستم بزرگ داریم با تعداد زیاد کاربر یا درخواست همزمان، یکی از چالشهای اصلی اینه که هر کاربر بتونه تغییراتی که خودش ایجاد کرده رو بلافاصله ببینه. مثلاً وقتی توی یه شبکه اجتماعی پست میذارید، انتظار دارید همون لحظه پستتون رو ببینید، نه اینکه چند ثانیه صبر کنید. به این قابلیت میگن Read Your Own Writes یا RYW (خیلیجاها own حذف میشه و در نتیجه read your writes میشه RYW).
وقتی سیستمهامون کوچیکن، کار این موضوع آسونه؛ ولی هرچی سیستم بزرگتر و کاربرها بیشتر میشن، کار پیچیدهتر میشه. مثلاً تو سیستمهای توزیعشده (خصوصا دارای پراکندگی جغرافیایی و چند دیتاسنتری)، هماهنگی تغییرات میتونه باعث تأخیر بشه. یا وقتی از eventual consistency استفاده میکنیم، ممکنه یه تغییر جدید به کاربر نشان داده نشه چون اطلاعات هنوز بهروز نشدهاند. اینجاست که باید بین سرعت عملکرد و صحت دادهها تعادل برقرار کرد.
یه روش دیگه که خیلی جالب عمل میکنه، استفاده از خواندن مبتنی برQuorum-Based Reads With Vector Clocks هست. توی این روش، وقتی میخوایم یه داده رو بخونیم، از چند سرور درخواست میدیم و آخرین نسخه رو بر اساس زمانبندی منطقی انتخاب میکنیم. همچنین تکنیکهایی مثل read repair وجود دارن که وقتی میبینیم دادهها بهروز نیستن، بهطور خودکار اونها رو دوباره از دیتابیس اصلی میخونن و تازه میکنن. (برای این مورد باید پراکنده جغرافیایی وسیعی داشته باشیم تا توجیه پیدا کنه).
در نهایت، باید بگم که رسیدن به یه سیستم با Read Your Own Writes consistency توی مقیاس بزرگ نیازمند برنامهریزی دقیق و نظارت مداوم هست. نمونههای موفق توی دنیای واقعی مثل پلتفرمهای شبکههای اجتماعی، سایتهای تجارت الکترونیک و ابزارهای همکاری آنلاین ثابت کردن که با استفاده از این تکنیکها، میشه تجربه کاربری فوقالعادهای رو تضمین کرد. ولی برای سیستمهایی که مثلا توی یک کشور و حتی توی یک دیتاسنتر هستن اگر چالش RYW داشته باشیم، احتمالا و تکیه میکنم احتمالا یه مشکلی توی طراحی و پیادهسازی داریم...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🔥2👏1
وقتی بحث طراحی REST API میاد وسط، خیلیا فقط به CRUD فکر میکنن و اینکه یه سری endpoint که دیتا میگیرن و کوئری پاسخ میدن. اینکه API کار کنه و خطا نده کافی نیست، اگر استاندارد نباشه مشکلاتی متعاقب خودش به بار میاره که مفصله. استانداردهای طراحی API کمک میکنن که APIها قابل پیشبینی، خوانا و سازگار باشن. برای همین هم REST APIهای اصولی، معمولاً از الگوهای استاندارد استفاده میکنن.
یکی از مشکلات رایج طراحی API، مدیریت و ارسال خطاهاست. خیلی از APIها به شکلهای مختلف خطا برمیگردونن؛ یکی JSON میده، یکی XML، یکی فقط یه متن ساده، و بعضیها هم فقط یه HTTP Status Code. اینجاست که RFC 7807 وارد میشه!
تعریف RFC 7807: استاندارد کردن جزئیات خطاها توی REST API
در حقیقت RFC 7807 استانداردیه که توش تعریف شده چطور APIها میتونن جزئیات خطاها (Problem Details) رو به صورت JSON یا XML برگردونن، بهجای این که هر کی واسه خودش یه فرمتی اختراع کنه. فرمت پیشنهادی این شکلیه:
{
"type": "https://example.com/probs/out-of-credit",
"title": "You do not have enough credit.",
"status": 403,
"detail": "Your current balance is 30, but that costs 50.",
"instance": "/account/12345/transactions/67890"
}الف: type: یه URL که نشون میده این نوع خطا چیه (میشه مستندات مربوطه رو اینجا گذاشت)
ب: title: یه توضیح کوتاه و ثابت دربارهی نوع خطا
پ: status: همون HTTP Status Code که برمیگرده
ت: detail: توضیح دقیقتر در مورد این خطای خاص
ث: instance: آدرسی که خطا در اون رخ داده
🔗 متن استاندارد
#API_Design
Please open Telegram to view this post
VIEW IN TELEGRAM
پسری را به کارگه کدنویسی همی بردندی تا شیوهی کُدگری پیشه کند، استاد بگفت: «بِکُد، سپس بِتِست!» شاگرد مدتی استاده، بُکید، خسته شد؛ لَختی درنگ کرد و از برای تستیدن پرسید:
«استاد رخصت میدهی تا با MSTest بِتِستَم؟»
استاد بدو گفت: «بِتِست!»
باز مدتی بِتِستید، خسته شد، گفت: «استاد، اجازت باشد تا این بار به NUnit بگرایم و بِتِستم؟»
استاد گفت: «بِتِست!»
باز مدتی بِتِستید، باز خسته شد، گفت: «استاد، دلم هوای XUnit کرده است، رخصت میدهی تا به آن بِتِستم؟»
استاد گفت: «بِتِست!»
دیگر نایی در تنش نمانده بود، گفت: «استاد! مرا زین همه آزمون، امان ده! باشد که آخرین بار به TUnit 🧪بِتِستم و آنگاه بیاسایم؟»
* بِتِست: فعل امر تست نوشتن
* بُکید: فعل ماضی کد نوشتن، سوم شخص مفرد
حالا اگر روی این موضوع توافق داریم، ولو به «تو بِتِست، بمیر و بِتِست!» و کنجاوید بدونید TUnit آیا یه قرطیبازی جدیده و یه بابایی آخر هفته بیکار بوده یه چیزی نوشته و چهار روز دیگه هم ولش میکنه، یا اینکه نه! یه نیازی بوده که با وجود MSTest و NUnit و XUnit یه لایبری تستنویسی جدید به وجود اومد؟!
اگر سواله، بگید تا بیشتر در موردش بگم و یه مقایسه با اون ۳ تا پیرمرد داشته باشم...
ریاکشن برای توضیح بیشتر:
Please open Telegram to view this post
VIEW IN TELEGRAM
این روزها تقریبا یکسالگی TUnit است. یه کتابخونه جدید برای نوشتن Unit، Integration، Acceptance و هر جور تست دیگهای توی داتنت. حدود ۱۹۱هزار دانلود NuGet داشته و توسعهاش فعلا خیلی فعاله و جزو گیتهاب ترند هست.
ولی چرا؟
خب میدونیم که NUnit عملا پورت شدهی JUnit جاوا است، و xUnit انشعابی بهبود یافته از NUnit.
خود NUnit که باقیمانده دوران SharpTestEx و Lin Unit و NUnitEx و NUnitAsp است که حتی ریپوهاشون هم هفت کفن پوسوندن، نزدیک به ۲۰ سال قدمت داره. درسته که همواره بهروز شده و پوستاندازی داشته و امروز یه محصول بالغه؛ ولی مدتهاست تغییرات بزرگی نداره و فقط باگ و بوگ (بوگ به مفهوم باگچه، و باگ کوچک است) برطرف میکنه. (تاریخچه JUnit هم برمیگرده به یه پرواز بین زوریخ و آتلانتا در سال ۱۹۹۷! و الان نسل پنجم خودش رو تجربه میکنه)
واقعیت اینه که دنیای تست از نظر مفهوم و ساختار تغییرات انقلابی خاصی نداشته. لذا این لایبریها هم فرصت داشتن تا بالغ و پایدار بشن.
چی شد که TUnit متولد شد؟
اون لکلکی که TUnit رو توی گیتهاب git push کرد، و خودش هم میگه از NUnit و xUnit الهام گرفته، چند تا هدف داشت:
- یکی کدبیس مدرن از ابتدا
- بهبود سرعت اجرای تست
دقت کنید که این داستان «هیچ ربطی» به تیمی که هنوز توی بدیهیات تستنویسی گیر کرده و کاوریجش ۳۰ درصده نداره! بلکه برای تیمیه که میخواد از یک کتابخونه برای همه نوع تستش استفاده کنه، هزاران تست داره و سرعت اجرای تستها میتونه تجربه توسعهدهنده و دواپس رو بهبود بده.
مثلا: TUnit از source generators تا جای امکان به جای reflection استفاده میکنه و AOT رو به خوبی پشتیبانی میکنه.
مثال دوم: کدبیس مدرنش به شما Hooks, Events روی کل Lifecycles تست میده؛ یعنی قبل و بعد از ،TestDiscover ،TestSession، Assembly، Class، Test. مثلا شما با ایونت مطلع میشید تست شروع شد، تست وارد فلان مرحله شد و... این هم به درد تستنویس میخوره هم بهدرد اون بدبختی که پایپلاین DevOps شما رو توسعه میده.
مثال سوم: از بیخ به شما اجازه پاس دادن انواع داده برای تست رو میده. این به معنای ناتوانی xUnit نیست، بلکه پیادهسازی راحتتر و مدرنتره. وقتی شما سرعت 321.7 میلیثانیه TUnit در مقابل ۱۴ ثانیه xUnit به کارتون میاد، که اولا «واقعنکی» (به معنی خیلی واقعی) تست مینویسید. دوم اینکه تعداد زیادی تست دارید و... البته این تفاوت زیاد، فقط در برخی موارد است چون TUnit قابلیت AOT دارد و در خیلی از موارد تفاوت حداقل هنوز اینقدرها نیست.
ولی این سرعت توسعه مداوم و یکپارچگی با IDEها وقابلیت Analyzer درونی اونم از ابتدای راه و اقبالی که جامعه داتنت بهش داشته، آینده خوبی براش رقم میزنه. خدا از من نگذره اگر ذرهای قصد «امروزه عصر، عصر توسعه تست با TUnit است» داشته باشم... 😅 ایهاالناس: شما «بِتِست، بمیر و بِتِست!»
ریپو
مستندات
ولی چرا؟
خب میدونیم که NUnit عملا پورت شدهی JUnit جاوا است، و xUnit انشعابی بهبود یافته از NUnit.
خود NUnit که باقیمانده دوران SharpTestEx و Lin Unit و NUnitEx و NUnitAsp است که حتی ریپوهاشون هم هفت کفن پوسوندن، نزدیک به ۲۰ سال قدمت داره. درسته که همواره بهروز شده و پوستاندازی داشته و امروز یه محصول بالغه؛ ولی مدتهاست تغییرات بزرگی نداره و فقط باگ و بوگ (بوگ به مفهوم باگچه، و باگ کوچک است) برطرف میکنه. (تاریخچه JUnit هم برمیگرده به یه پرواز بین زوریخ و آتلانتا در سال ۱۹۹۷! و الان نسل پنجم خودش رو تجربه میکنه)
واقعیت اینه که دنیای تست از نظر مفهوم و ساختار تغییرات انقلابی خاصی نداشته. لذا این لایبریها هم فرصت داشتن تا بالغ و پایدار بشن.
چی شد که TUnit متولد شد؟
اون لکلکی که TUnit رو توی گیتهاب git push کرد، و خودش هم میگه از NUnit و xUnit الهام گرفته، چند تا هدف داشت:
- یکی کدبیس مدرن از ابتدا
- بهبود سرعت اجرای تست
دقت کنید که این داستان «هیچ ربطی» به تیمی که هنوز توی بدیهیات تستنویسی گیر کرده و کاوریجش ۳۰ درصده نداره! بلکه برای تیمیه که میخواد از یک کتابخونه برای همه نوع تستش استفاده کنه، هزاران تست داره و سرعت اجرای تستها میتونه تجربه توسعهدهنده و دواپس رو بهبود بده.
مثلا: TUnit از source generators تا جای امکان به جای reflection استفاده میکنه و AOT رو به خوبی پشتیبانی میکنه.
مثال دوم: کدبیس مدرنش به شما Hooks, Events روی کل Lifecycles تست میده؛ یعنی قبل و بعد از ،TestDiscover ،TestSession، Assembly، Class، Test. مثلا شما با ایونت مطلع میشید تست شروع شد، تست وارد فلان مرحله شد و... این هم به درد تستنویس میخوره هم بهدرد اون بدبختی که پایپلاین DevOps شما رو توسعه میده.
مثال سوم: از بیخ به شما اجازه پاس دادن انواع داده برای تست رو میده. این به معنای ناتوانی xUnit نیست، بلکه پیادهسازی راحتتر و مدرنتره. وقتی شما سرعت 321.7 میلیثانیه TUnit در مقابل ۱۴ ثانیه xUnit به کارتون میاد، که اولا «واقعنکی» (به معنی خیلی واقعی) تست مینویسید. دوم اینکه تعداد زیادی تست دارید و... البته این تفاوت زیاد، فقط در برخی موارد است چون TUnit قابلیت AOT دارد و در خیلی از موارد تفاوت حداقل هنوز اینقدرها نیست.
ولی این سرعت توسعه مداوم و یکپارچگی با IDEها وقابلیت Analyzer درونی اونم از ابتدای راه و اقبالی که جامعه داتنت بهش داشته، آینده خوبی براش رقم میزنه. خدا از من نگذره اگر ذرهای قصد «امروزه عصر، عصر توسعه تست با TUnit است» داشته باشم... 😅 ایهاالناس: شما «بِتِست، بمیر و بِتِست!»
ریپو
مستندات
👍18 2