✨✨ Retry Pattern یا الگوی بازکوشش
سالهاست که دیگه اکثر نرمافزارها بهصورت منفرد و مستقل کار نمیکنن. از نرمافزار کوچکی که فقط یک API پرداخت رو صدا میکنه؛ تا نرمافزارهای توزیعشده و microservice هایی که دهها یا صدها API مختلف رو دا میکنند، بالاخره این وابستگی به یک سرویس مستقل دیگه وجود داره.
حالا توی این شرایط، همیشه همه چیز طبق برنامه پیش نمیره. گاهی اوقات ممکنه درخواستهای ما به یک سرویس خارجی یا API به دلیل مشکلات موقت مثل ازدحام شبکه یا قطعیهای کوتاه مدت، شکست بخوره و نتونه پاسخ درست بگیره. اینجاست که یک راهکار مهم به نام Retry Pattern به کمک ما میآید.
💡 الگوی Retry Pattern چیه؟ الگوی Retry Pattern یکی از الگوهای معماری در توسعه نرمافزار است که به ما اجازه میده تا در صورت بروز یک شکست موقت (Failure)، درخواست رو بهصورت خودکار، مجدداً امتحان کنیم. به جای اینکه بلافاصله شکست را قبول کنیم و کل فرایند رو با خطا به اتمام برسونیم، سیستم تلاش میکنه تا درخواست را پس از یک تأخیر کوتاه دوباره ارسال کنه. این الگو به خصوص در سرویسهای ابری که در معرض ناپایداریهای موقت هستند، بسیار مفیده.
🔧 چگونه این الگو کار میکند؟ فرض کنید اپلیکیشن شما قصد داره به یک API خارجی درخواست ارسال کنه، اما به دلیل مشکلاتی مثل قطع موقت شبکه یا محدودیت سرعت در سمت سرور، درخواست با شکست مواجه میشه. در چنین شرایطی، به جای توقف عملیات، سیستم شما میتواند بهطور خودکار درخواست را پس از یک زمانبندی خاص (مثل ۱ ثانیه، ۳ ثانیه، ۵ ثانیه) دوباره ارسال کند. این روند میتواند چندین بار تکرار شود تا زمانی که یا درخواست موفقیتآمیز باشد یا به حداکثر تعداد تلاشها برسه، حتی مثلا بعد از ۵ تلاش ناموفق، به آدرس دیگهای درخواست بفرسته (بهصورت کلی: شما دستورالعمل چگونگی مواجهه با خطا رو تعیین میکنید).
📝 یک مثال ساده: تصور کنید یک اپلیکیشن دارید که باید اطلاعات آبوهوا را از یک API دریافت کنه. در اولین تلاش، به دلیل مشکلات موقتی در سرور API، درخواست شما شکست میخوره. به جای اینکه اپلیکیشن به کاربر پیام خطا نشان بده، از الگوی Retry استفاده میکنه و پس از چند ثانیه دوباره تلاش میکند، بعد از ۳ تلاش ناموفق، ۱ درخواست به API دیگه میفرسته، و اگر اون هم جواب نداد، اون وقت به کاربر خطا نشون میدید. ولی اگر در تلاش دوم یا سوم، درخواست موفقیتآمیز باشد، کاربر هرگز متوجه شکست اولیه نمیشه و تجربه کاربری بهبود مییابد.
🔑 نکات مهم:
1. حداکثر تعداد تلاشها: همیشه باید یک محدودیت برای تعداد دفعاتی که درخواست تکرار میشود تعیین کنید تا از ایجاد بار اضافی بر روی سرورهای خارجی جلوگیری شود.
2. تأخیر بین تلاشها: بهتر است بین هر تلاش کمی تأخیر بگذارید و این تأخیر میتواند با هر بار تلاش بیشتر شود (مثلاً ۱ ثانیه، ۲ ثانیه، ۴ ثانیه).
3. پیشبینی شکستها: این الگو فقط برای شکستهای موقت مناسب است و در مواردی که مشکل دائمی است (مثلاً آدرس API اشتباه است)، نباید استفاده شود.
4. راهکار جایگزین: همیشه بدترین سناریو رو تصور کنید و ببنید آیا میشه در اون حالت هم کاری کرد که کاربر خوشحالتر باشه، سیستم پایدارتر باشه؟!
📘 برای پیادهسازی:
Polly برای معروفترین کتابخونه برای NET. است مثال
Microsoft.Extensions.Http.Resilience کتابخونه سادهتر، سبکتر از Polly برای داتنت
tenacity برای پایتون
backoff برای پایتون
backoff برای گو
retry-go برای گو
✨ نظر شما چیه؟ تجربه استفاده کدوم لایبری براتون بهتر بوده؟
سالهاست که دیگه اکثر نرمافزارها بهصورت منفرد و مستقل کار نمیکنن. از نرمافزار کوچکی که فقط یک API پرداخت رو صدا میکنه؛ تا نرمافزارهای توزیعشده و microservice هایی که دهها یا صدها API مختلف رو دا میکنند، بالاخره این وابستگی به یک سرویس مستقل دیگه وجود داره.
حالا توی این شرایط، همیشه همه چیز طبق برنامه پیش نمیره. گاهی اوقات ممکنه درخواستهای ما به یک سرویس خارجی یا API به دلیل مشکلات موقت مثل ازدحام شبکه یا قطعیهای کوتاه مدت، شکست بخوره و نتونه پاسخ درست بگیره. اینجاست که یک راهکار مهم به نام Retry Pattern به کمک ما میآید.
💡 الگوی Retry Pattern چیه؟ الگوی Retry Pattern یکی از الگوهای معماری در توسعه نرمافزار است که به ما اجازه میده تا در صورت بروز یک شکست موقت (Failure)، درخواست رو بهصورت خودکار، مجدداً امتحان کنیم. به جای اینکه بلافاصله شکست را قبول کنیم و کل فرایند رو با خطا به اتمام برسونیم، سیستم تلاش میکنه تا درخواست را پس از یک تأخیر کوتاه دوباره ارسال کنه. این الگو به خصوص در سرویسهای ابری که در معرض ناپایداریهای موقت هستند، بسیار مفیده.
🔧 چگونه این الگو کار میکند؟ فرض کنید اپلیکیشن شما قصد داره به یک API خارجی درخواست ارسال کنه، اما به دلیل مشکلاتی مثل قطع موقت شبکه یا محدودیت سرعت در سمت سرور، درخواست با شکست مواجه میشه. در چنین شرایطی، به جای توقف عملیات، سیستم شما میتواند بهطور خودکار درخواست را پس از یک زمانبندی خاص (مثل ۱ ثانیه، ۳ ثانیه، ۵ ثانیه) دوباره ارسال کند. این روند میتواند چندین بار تکرار شود تا زمانی که یا درخواست موفقیتآمیز باشد یا به حداکثر تعداد تلاشها برسه، حتی مثلا بعد از ۵ تلاش ناموفق، به آدرس دیگهای درخواست بفرسته (بهصورت کلی: شما دستورالعمل چگونگی مواجهه با خطا رو تعیین میکنید).
📝 یک مثال ساده: تصور کنید یک اپلیکیشن دارید که باید اطلاعات آبوهوا را از یک API دریافت کنه. در اولین تلاش، به دلیل مشکلات موقتی در سرور API، درخواست شما شکست میخوره. به جای اینکه اپلیکیشن به کاربر پیام خطا نشان بده، از الگوی Retry استفاده میکنه و پس از چند ثانیه دوباره تلاش میکند، بعد از ۳ تلاش ناموفق، ۱ درخواست به API دیگه میفرسته، و اگر اون هم جواب نداد، اون وقت به کاربر خطا نشون میدید. ولی اگر در تلاش دوم یا سوم، درخواست موفقیتآمیز باشد، کاربر هرگز متوجه شکست اولیه نمیشه و تجربه کاربری بهبود مییابد.
🔑 نکات مهم:
1. حداکثر تعداد تلاشها: همیشه باید یک محدودیت برای تعداد دفعاتی که درخواست تکرار میشود تعیین کنید تا از ایجاد بار اضافی بر روی سرورهای خارجی جلوگیری شود.
2. تأخیر بین تلاشها: بهتر است بین هر تلاش کمی تأخیر بگذارید و این تأخیر میتواند با هر بار تلاش بیشتر شود (مثلاً ۱ ثانیه، ۲ ثانیه، ۴ ثانیه).
3. پیشبینی شکستها: این الگو فقط برای شکستهای موقت مناسب است و در مواردی که مشکل دائمی است (مثلاً آدرس API اشتباه است)، نباید استفاده شود.
4. راهکار جایگزین: همیشه بدترین سناریو رو تصور کنید و ببنید آیا میشه در اون حالت هم کاری کرد که کاربر خوشحالتر باشه، سیستم پایدارتر باشه؟!
📘 برای پیادهسازی:
Polly برای معروفترین کتابخونه برای NET. است مثال
Microsoft.Extensions.Http.Resilience کتابخونه سادهتر، سبکتر از Polly برای داتنت
tenacity برای پایتون
backoff برای پایتون
backoff برای گو
retry-go برای گو
✨ نظر شما چیه؟ تجربه استفاده کدوم لایبری براتون بهتر بوده؟
GitHub
GitHub - App-vNext/Polly-Samples: Provides sample implementations of the Polly library. The intent of this project is to help newcomers…
Provides sample implementations of the Polly library. The intent of this project is to help newcomers kick-start their use of Polly within their own projects. - App-vNext/Polly-Samples
👍3❤2
✨✨ امکانات جدید کوپایلوت در ویژوال استودیو 2022 نسخه 17.11
چند روز پیش نسخه ۱۷.۱۱ ویژوال استدیو ریلیز نهایی شد (البته همون وقع ۱۷.۱۲ به کانال preview اومد) اگر شما هم کاربر گیتهاب کوپایلوت هستید و برای اطلاع از امکانات جدیدش کنجکاوید، همراه شید:
🫧 نسخه جدید امکانات و درک بهتری برای پرسوجو و بررسی کد داره، خصوصا در مورد سیشارپ! یک یادآوری: وقتی از codepilot استفاده میکنید با تایپ workspace@ میتونید در مورد فایلهایی که تو پوشه وجود داره سوال کنید. مثلا میشه گفت:
@workspace what services I developed, but were not injected in my startup class
حالا میشه سوالات جزئیتری پرسید، مثل:
@workspace What project can I run in my solution?
@workspace In my workspace, where is #methodname referenced?
@workspace Where does serialization occur in my solution?
ویژگیهای جدید:
🔸 کوپایلوت چت: دیگه مستقیماً از copilot درباره متدها، کلاسها و توابع خودتون سوال بپرسید. مثلاً اگر نیاز دارید عملکرد یک تابع را درک کنید، میتوانید از کوپایلوت بخواهید توضیح بده که چه کار میکنه و چجوری ازش استفاده کنید. کافیه یه # قبل از اسم متد بگذارید، مثال:
- I have a test method named #methodName. How can I ensure that it’s being executed correctly?
- What are some optimizations that could be applied to #methodName?
- How does #methodName1 use #methodName2 and what issues should I look out for?
- /explain #methodName
🔸 درک و تفسیر بهتر از پروژه: کوپایلوت دیگه میتونه کل پروژه شما را بررسی کنه و با توجه به ساختار و ارتباطات کدها، پیشنهادات دقیقتری ارائه بده. به عنوان مثال، اگر بخشی از کد شما به چندین فایل مختلف مرتبط است (.pertial class, etc)، کوپایلوت میتونه این ارتباطات را شناسایی کرده و پیشنهاداتی بر اساس کل پروژه ارائه بده.
🔸 پیشنهادات بر اساس وب: اگر کوپایلوت نتونه خودش پاسخ دقیقی از دل کد شما پیدا کنه، میتونه بره سراغ وب و با سرچ کردن تلاش کنه تا طلاعات تکمیلی برای پاسخ به سوالات شما ارائه بده. مثلاً اگر از کوپایلوت درباره یک کتابخانه خارجی سوال کنید، ممکنه از طریق جستجو در وب اطلاعات مربوطه رو پیدا کنه.
🔸 بهبود تفسیر کد: کوپایلوت حالا بهتر از قبل میتونه کدهای پیچیده را تجزیه و تحلیل کنه و توضیحات واضحتری ارائه بده. مثلاً در مواجهه با یک الگوریتم پیچیده، میتونه قدم به قدم توضیح بده که هر بخش از کد چه کاری انجام میده.
برای اطلاعات بیشتر و دیدن مثالهای بیشتر میتونید به وبلاگ مایکروسافت مراجعه کنید.
چند روز پیش نسخه ۱۷.۱۱ ویژوال استدیو ریلیز نهایی شد (البته همون وقع ۱۷.۱۲ به کانال preview اومد) اگر شما هم کاربر گیتهاب کوپایلوت هستید و برای اطلاع از امکانات جدیدش کنجکاوید، همراه شید:
🫧 نسخه جدید امکانات و درک بهتری برای پرسوجو و بررسی کد داره، خصوصا در مورد سیشارپ! یک یادآوری: وقتی از codepilot استفاده میکنید با تایپ workspace@ میتونید در مورد فایلهایی که تو پوشه وجود داره سوال کنید. مثلا میشه گفت:
@workspace what services I developed, but were not injected in my startup class
حالا میشه سوالات جزئیتری پرسید، مثل:
@workspace What project can I run in my solution?
@workspace In my workspace, where is #methodname referenced?
@workspace Where does serialization occur in my solution?
ویژگیهای جدید:
🔸 کوپایلوت چت: دیگه مستقیماً از copilot درباره متدها، کلاسها و توابع خودتون سوال بپرسید. مثلاً اگر نیاز دارید عملکرد یک تابع را درک کنید، میتوانید از کوپایلوت بخواهید توضیح بده که چه کار میکنه و چجوری ازش استفاده کنید. کافیه یه # قبل از اسم متد بگذارید، مثال:
- I have a test method named #methodName. How can I ensure that it’s being executed correctly?
- What are some optimizations that could be applied to #methodName?
- How does #methodName1 use #methodName2 and what issues should I look out for?
- /explain #methodName
🔸 درک و تفسیر بهتر از پروژه: کوپایلوت دیگه میتونه کل پروژه شما را بررسی کنه و با توجه به ساختار و ارتباطات کدها، پیشنهادات دقیقتری ارائه بده. به عنوان مثال، اگر بخشی از کد شما به چندین فایل مختلف مرتبط است (.pertial class, etc)، کوپایلوت میتونه این ارتباطات را شناسایی کرده و پیشنهاداتی بر اساس کل پروژه ارائه بده.
🔸 پیشنهادات بر اساس وب: اگر کوپایلوت نتونه خودش پاسخ دقیقی از دل کد شما پیدا کنه، میتونه بره سراغ وب و با سرچ کردن تلاش کنه تا طلاعات تکمیلی برای پاسخ به سوالات شما ارائه بده. مثلاً اگر از کوپایلوت درباره یک کتابخانه خارجی سوال کنید، ممکنه از طریق جستجو در وب اطلاعات مربوطه رو پیدا کنه.
🔸 بهبود تفسیر کد: کوپایلوت حالا بهتر از قبل میتونه کدهای پیچیده را تجزیه و تحلیل کنه و توضیحات واضحتری ارائه بده. مثلاً در مواجهه با یک الگوریتم پیچیده، میتونه قدم به قدم توضیح بده که هر بخش از کد چه کاری انجام میده.
برای اطلاعات بیشتر و دیدن مثالهای بیشتر میتونید به وبلاگ مایکروسافت مراجعه کنید.
Microsoft News
Enhancing Code Comprehension: GitHub Copilot’s Features in Visual Studio 2022 17.11
Enhance your coding experience with the improved GitHub Copilot in Visual Studio 17.11. Refer to methods, classes, functions, and entire solutions within Copilot Chat for richer context and more accurate responses. Explore new features like full repository…
👍4❤1
بهزودی نکات خلاصه و سریعی برای توسعهدهندههای و DBAهای SQL Server که دوست دارن در مورد PostgreSQL بیشتر بدونن، خواهیم داشت...
#MSSQL_to_PGSQL
#MSSQL_to_PGSQL
👍5
شماره ۲: مفاهیم اولیه کوئرینویسی
نام آبجکت در کوئری باید داخل ' ' قرار بگیره (متفاوت با T-SQL)
⚡️SQL Server:
- Single quotes ' ': Used for string literals.
- Double quotes " ": Used for delimited identifiers (e.g., to allow for spaces or reserved words as object names).
- Square brackets [ ]: Used for delimited identifiers, often preferred in SQL Server for objects that contain spaces or reserved keywords.
⚡️ PostgreSQL:
- Single quotes ' ': Used for string literals.
- Double quotes " ": Used for delimited identifiers. This is the only method to handle identifiers with special characters or reserved words.
- Square brackets [ ]: Not used or recognized in PostgreSQL for identifiers.
#MSSQL_to_PGSQL
نام آبجکت در کوئری باید داخل ' ' قرار بگیره (متفاوت با T-SQL)
⚡️SQL Server:
- Single quotes ' ': Used for string literals.
- Double quotes " ": Used for delimited identifiers (e.g., to allow for spaces or reserved words as object names).
- Square brackets [ ]: Used for delimited identifiers, often preferred in SQL Server for objects that contain spaces or reserved keywords.
⚡️ PostgreSQL:
- Single quotes ' ': Used for string literals.
- Double quotes " ": Used for delimited identifiers. This is the only method to handle identifiers with special characters or reserved words.
- Square brackets [ ]: Not used or recognized in PostgreSQL for identifiers.
#MSSQL_to_PGSQL
❤1👍1
شماره ۳: مفهموم دیتابیس قالب در PostgreSQL و تفاوتش با model در SQL Server
مطالعه بیشتر
#MSSQL_to_PGSQL
مطالعه بیشتر
#MSSQL_to_PGSQL
❤1👍1
مواجهه و مدیریت رخدادهای فنی، خصوصا در سازمانها و تیمهای نرمافزاری، مهارت مهمیه، در این پست به مرور گامها و نکاتی که باید در نظر داشته باشیم پرداختم.
بهانهاش هم رویدادی است که به زودی برای بررسی فنی فاجعه Crowdstrike و ویندوز برگزار خواهد شد تا هم از نظر فنی با کلی سازمان و متخصص امنیت و نرمافزار مرورش کنن. دلایل و ریشههاش رو به چالش بکشن و برای آینده برنامهریزی کنن...
دوست داشتید بخونید و نظرتون رو بگید...
https://mesbahi.net/fa/blog/1403/06/04/%d9%85%d9%88%d8%a7%d8%ac%d9%87%d9%87-%d8%a8%d8%a7-%d8%b1%d8%ae%d8%af%d8%a7%d8%af%d9%87%d8%a7%db%8c-%d9%81%d9%86%db%8c/
بهانهاش هم رویدادی است که به زودی برای بررسی فنی فاجعه Crowdstrike و ویندوز برگزار خواهد شد تا هم از نظر فنی با کلی سازمان و متخصص امنیت و نرمافزار مرورش کنن. دلایل و ریشههاش رو به چالش بکشن و برای آینده برنامهریزی کنن...
دوست داشتید بخونید و نظرتون رو بگید...
https://mesbahi.net/fa/blog/1403/06/04/%d9%85%d9%88%d8%a7%d8%ac%d9%87%d9%87-%d8%a8%d8%a7-%d8%b1%d8%ae%d8%af%d8%a7%d8%af%d9%87%d8%a7%db%8c-%d9%81%d9%86%db%8c/
❤3
مصاحبه با David Fowler Distinguished Engineer در Microsoft
در شرکتهایی مثل گوگل، اپل، سیسکو، یا مایکروسافت افراد کمی هستند که عنوان Distinguished Engineer رو دارند، اگر براتون جالبه که بدونید حقوق یک Distinguished Engineer در اپل چقدره، چیزی بین ۱ تا ۱.۵ میلیون دلار در ساله!
مهندسان بسیار با تجربه و با دانش عمیق این عنوان رو میتونن داشته باشن. افرادی با این عنوان، معمولاً نقشهای کلیدی در طراحی و توسعه تکنولوژیهای پیچیده و نوآورانه دارن. و به عنوان رهبران فکری و مشاوران اصلی روی پروژههای بزرگ و استراتژیک، و به بهبود و پیشرفت تکنولوژیهای شرکت کمک میکنن. به طور خلاصه، این عنوان به مهندسانی داده میشه که تأثیر زیادی بر روی تکنولوژی و آینده شرکت دارند.
حلا Postman معروف که باهاش APIهامون رو تست میکنیم، در بخش بلاگ فنیاش یک مصاحبه/پادکستطور با دیوید فولر رفته که در مورد گذشته و حال و کارهاش گپ بزنه.
بسیار شنیدنی و آموزنده...
* بخش مهمی از مسیر شغلی من بعد از خوندن یک مصاحبه Ray Ozzie حدود ۱۸-۲۰ سال پیش در آرکیتچر ژورنال شکل گرفت! شاید یک مصاحبه برای شما هم اثرگذار باشه!
لینک یوتیوب مصاحبه
در شرکتهایی مثل گوگل، اپل، سیسکو، یا مایکروسافت افراد کمی هستند که عنوان Distinguished Engineer رو دارند، اگر براتون جالبه که بدونید حقوق یک Distinguished Engineer در اپل چقدره، چیزی بین ۱ تا ۱.۵ میلیون دلار در ساله!
مهندسان بسیار با تجربه و با دانش عمیق این عنوان رو میتونن داشته باشن. افرادی با این عنوان، معمولاً نقشهای کلیدی در طراحی و توسعه تکنولوژیهای پیچیده و نوآورانه دارن. و به عنوان رهبران فکری و مشاوران اصلی روی پروژههای بزرگ و استراتژیک، و به بهبود و پیشرفت تکنولوژیهای شرکت کمک میکنن. به طور خلاصه، این عنوان به مهندسانی داده میشه که تأثیر زیادی بر روی تکنولوژی و آینده شرکت دارند.
حلا Postman معروف که باهاش APIهامون رو تست میکنیم، در بخش بلاگ فنیاش یک مصاحبه/پادکستطور با دیوید فولر رفته که در مورد گذشته و حال و کارهاش گپ بزنه.
بسیار شنیدنی و آموزنده...
* بخش مهمی از مسیر شغلی من بعد از خوندن یک مصاحبه Ray Ozzie حدود ۱۸-۲۰ سال پیش در آرکیتچر ژورنال شکل گرفت! شاید یک مصاحبه برای شما هم اثرگذار باشه!
لینک یوتیوب مصاحبه
👍5
✨🚀
سلام
این ایونت «احتمالا» بخش اول سری بنچمارکینگ است، قصد دارم اهمیت و نکات بنچمارکینگ رو مرور کنیم و در بخش اول، روی داتنت و اسکیوال سرور کار خواهیم کرد و اگر استقبال خوبی بشه، در بخش دوم روی روی لایبریهای پایتون و گو کار کنیم.
این فرم ثبتنام است (جلسات تِکافترنون همه رایگان هستند) و اگر فکر کردید برای دوستان و همکارهاتون هم این وبینار میتونه جالب باشه، بهشون اطلاع بدید ;)
افزودن ایونت به تقویم گوگل
لینک گوگلمیت جلسه
کانال تلگرام تکافترنون
سلام
این ایونت «احتمالا» بخش اول سری بنچمارکینگ است، قصد دارم اهمیت و نکات بنچمارکینگ رو مرور کنیم و در بخش اول، روی داتنت و اسکیوال سرور کار خواهیم کرد و اگر استقبال خوبی بشه، در بخش دوم روی روی لایبریهای پایتون و گو کار کنیم.
این فرم ثبتنام است (جلسات تِکافترنون همه رایگان هستند) و اگر فکر کردید برای دوستان و همکارهاتون هم این وبینار میتونه جالب باشه، بهشون اطلاع بدید ;)
افزودن ایونت به تقویم گوگل
لینک گوگلمیت جلسه
کانال تلگرام تکافترنون
👍3
👍6❤1
✨💡درسهایی از ۴۰ سال توسعه نرمافزار
شاید شما هم Dave Farley رو با کانال یوتیوبی Continuous Delivery دنبال کنید. کانالی با ۲۰۸ هزار دنبال کننده (تا امروز) که مطالب خیلی خوبی رو در خصوص مهندسی نرمافزار ارائه میده.
چند روز پیش آقای Farley، ویدیوی جدیدی منتشر کرد که در ۱۹ دقیقه درسهایی از ۴۰ سال توسعه نرمافزار رو مرور کرد.
1️⃣ دروس اولیه برنامه نویسی
- لذت دستکاری کد: در ابتدا مجذوب توانایی کنترل رفتار کامپیوتر با نوشتن کد شد، همین مشوق یادگیری بیشتر براش بوده!
- اهمیت درک اصول اولیه: یادگیری زبان اسمبلی درک دقیقی از چگونگی کارکرد کامپیوتر در سطح عمیقتر بهش داده که بعداً در حل مسائل پیچیده براش مفید بوده.
2️⃣ کیفیت و خوانایی کد
روی نوشتن کدی که واضح، خوانا و دارای ساختار مناسب باشه تاکید میکنه و از تجربهای میگه که ارزش کدنویسی واضح و خوانا رو در عمل بهش آموخته، اصلی که در طول زندگی حرفهایاش دنبال کرده.
🧵
شاید شما هم Dave Farley رو با کانال یوتیوبی Continuous Delivery دنبال کنید. کانالی با ۲۰۸ هزار دنبال کننده (تا امروز) که مطالب خیلی خوبی رو در خصوص مهندسی نرمافزار ارائه میده.
چند روز پیش آقای Farley، ویدیوی جدیدی منتشر کرد که در ۱۹ دقیقه درسهایی از ۴۰ سال توسعه نرمافزار رو مرور کرد.
1️⃣ دروس اولیه برنامه نویسی
- لذت دستکاری کد: در ابتدا مجذوب توانایی کنترل رفتار کامپیوتر با نوشتن کد شد، همین مشوق یادگیری بیشتر براش بوده!
- اهمیت درک اصول اولیه: یادگیری زبان اسمبلی درک دقیقی از چگونگی کارکرد کامپیوتر در سطح عمیقتر بهش داده که بعداً در حل مسائل پیچیده براش مفید بوده.
2️⃣ کیفیت و خوانایی کد
روی نوشتن کدی که واضح، خوانا و دارای ساختار مناسب باشه تاکید میکنه و از تجربهای میگه که ارزش کدنویسی واضح و خوانا رو در عمل بهش آموخته، اصلی که در طول زندگی حرفهایاش دنبال کرده.
🧵
👍3
tech-afternoon
✨💡درسهایی از ۴۰ سال توسعه نرمافزار شاید شما هم Dave Farley رو با کانال یوتیوبی Continuous Delivery دنبال کنید. کانالی با ۲۰۸ هزار دنبال کننده (تا امروز) که مطالب خیلی خوبی رو در خصوص مهندسی نرمافزار ارائه میده. چند روز پیش آقای Farley، ویدیوی جدیدی منتشر…
3️⃣ حرکت به سمت برنامه نویسی شیگرا و نرمافزارهای سیستمی
- مسیر برنامهنویسیاش از BASIC و اسمبلی به C و بعداً ++C بوده، و زمانی که برنامهنویسی شیگرا (OOP) رو یاد گرفته، نقطه عطفی بوده براش که ایده طراحی کد با روابط و ساختارهای منسجم و منطقی، و فراتر از چند خط کد رو بهش یاد داده.
- بعدتر در برنامهنویسی سیستم (systems programming)، از جمله توسعه سیستمعامل، درایور و low-level firmware جایی بوده که حل مسائل پایهای و ایرادیابیهای پیچیده رو بهش یاد داده.
4️⃣ کار با سیستم های توزیع شده
- تجربه و درسی که از کار کردن با سیستمهای توزیعشده به دست آورده رو مرور میکنه و میگه که پیچیدگیهای اضافهای که این سیستمها برای ایرادیابی، کارآیی و پایداری همراه دارند رو چطور تونسته در عمل درک کنه. با سیستمهای توزیع شده بوده که توسعه message-based programming و asynchronous processes رو به خوبی درک کرده.
- بر اهمیت درک سختافزار و نرمافزار برای ایجاد زیرساخت موثر و کارآمد تاکید میکنه.
5️⃣ آشنایی با Continuous Integration و Agile Practices
- با نمونههای اولیه CI آشنا میشه و شروع به استفاده در فرایند توسعه میکنه، همچنین XP رو در اون زمان به عنوان متدولوژی توسعه در پروژهها با کار میگیره.
- اهمیت تست نرمافزار، و نه فقط پیادهسازی رو درک کرده، و ارزش فریمورکهای تست مثل JUnit رو فهمیده.
6️⃣ ساخت سیستمهای مستلزم کارایی بالا (High-Performance Systems)
- توضیح میده که پیوستنش به یک استارتاپ برای توسعه یکی از سریعترین مبادلات مالی جهان بهش کمک کرده تا آموختههاش از سیستمهای توزیعشده، CI و برنامهنویسی با عملکرد بالا رو گرد هم بیاره.
- مفهوم mechanical sympathy رو به خوبی فهمیده، اینکه چطوری سختافزار روی بهینهسازی عملکرد نرمافزار تاثیر میگذاره
7️⃣ 💎 نکات کلیدی از مسیر شغلی
- یاد گرفته که یک رویکرد مهندسی صحیح برای توسعه نرمافزار است بالانس هوشمندانهای بین مفاهیم انتزاعی و شناخت از سیستمهای عملیاتی و واقعی است.
- بر اهمیت یادگیری مستمر پافشاری میکنه و تطبیق ابزارها و تکنیکهای جدید، و پرورش فرهنگ توسعه مشارکتی و نوآورانه رو درسهای مهم میدونه.
📌 آدمی که ۴۰ سال مداوم یاد گرفته و همین الان هم بهروزترین مطالب رو یاد میگیره و یاد میده این تجربه رو به اشتراک گذاشته. یاد یه مطلبی که ۲۰ سال پیش خوندم تحت عنوان how to be programmer in 10 years افتادم، زمانی که کتابها مطالب رو با در ۲۴ ساعت و یا یک هفته و یک ماه میخواستن یاد بدن!
حرکت مداوم، پله پله و یادگیری مداوم رو فراموش نکنیم... 😉
لینک ویدیو اصلی
اگر دوست داشتید همرسانی کنید
- مسیر برنامهنویسیاش از BASIC و اسمبلی به C و بعداً ++C بوده، و زمانی که برنامهنویسی شیگرا (OOP) رو یاد گرفته، نقطه عطفی بوده براش که ایده طراحی کد با روابط و ساختارهای منسجم و منطقی، و فراتر از چند خط کد رو بهش یاد داده.
- بعدتر در برنامهنویسی سیستم (systems programming)، از جمله توسعه سیستمعامل، درایور و low-level firmware جایی بوده که حل مسائل پایهای و ایرادیابیهای پیچیده رو بهش یاد داده.
4️⃣ کار با سیستم های توزیع شده
- تجربه و درسی که از کار کردن با سیستمهای توزیعشده به دست آورده رو مرور میکنه و میگه که پیچیدگیهای اضافهای که این سیستمها برای ایرادیابی، کارآیی و پایداری همراه دارند رو چطور تونسته در عمل درک کنه. با سیستمهای توزیع شده بوده که توسعه message-based programming و asynchronous processes رو به خوبی درک کرده.
- بر اهمیت درک سختافزار و نرمافزار برای ایجاد زیرساخت موثر و کارآمد تاکید میکنه.
5️⃣ آشنایی با Continuous Integration و Agile Practices
- با نمونههای اولیه CI آشنا میشه و شروع به استفاده در فرایند توسعه میکنه، همچنین XP رو در اون زمان به عنوان متدولوژی توسعه در پروژهها با کار میگیره.
- اهمیت تست نرمافزار، و نه فقط پیادهسازی رو درک کرده، و ارزش فریمورکهای تست مثل JUnit رو فهمیده.
6️⃣ ساخت سیستمهای مستلزم کارایی بالا (High-Performance Systems)
- توضیح میده که پیوستنش به یک استارتاپ برای توسعه یکی از سریعترین مبادلات مالی جهان بهش کمک کرده تا آموختههاش از سیستمهای توزیعشده، CI و برنامهنویسی با عملکرد بالا رو گرد هم بیاره.
- مفهوم mechanical sympathy رو به خوبی فهمیده، اینکه چطوری سختافزار روی بهینهسازی عملکرد نرمافزار تاثیر میگذاره
7️⃣ 💎 نکات کلیدی از مسیر شغلی
- یاد گرفته که یک رویکرد مهندسی صحیح برای توسعه نرمافزار است بالانس هوشمندانهای بین مفاهیم انتزاعی و شناخت از سیستمهای عملیاتی و واقعی است.
- بر اهمیت یادگیری مستمر پافشاری میکنه و تطبیق ابزارها و تکنیکهای جدید، و پرورش فرهنگ توسعه مشارکتی و نوآورانه رو درسهای مهم میدونه.
📌 آدمی که ۴۰ سال مداوم یاد گرفته و همین الان هم بهروزترین مطالب رو یاد میگیره و یاد میده این تجربه رو به اشتراک گذاشته. یاد یه مطلبی که ۲۰ سال پیش خوندم تحت عنوان how to be programmer in 10 years افتادم، زمانی که کتابها مطالب رو با در ۲۴ ساعت و یا یک هفته و یک ماه میخواستن یاد بدن!
حرکت مداوم، پله پله و یادگیری مداوم رو فراموش نکنیم... 😉
لینک ویدیو اصلی
اگر دوست داشتید همرسانی کنید
YouTube
40 Years Of Software Engineering Experience In 19 Minutes
What lessons does over 40 years in software development teach you? When does software development become software engineering?
In this episode, software engineer and author Dave Farley uses his career to explore and list some of the key learnings that helped…
In this episode, software engineer and author Dave Farley uses his career to explore and list some of the key learnings that helped…
👍4
مقدمه: ESME یا CMAScript modules و AMD یا Asynchronous Module Definition دو روش برای مدیریت و بارگذاری ماژولها در جاوااسکریپت هستند. AMD قدیمیتره و برای کار در مرورگرهای قدیمی طراحی شده، در حالی که ESM استاندارد جدیدتر و بخشی از خود زبان جاوااسکریپت است. ESM مزایایی مثل سینتکس سادهتر، پشتیبانی بهتر از tree shaking، و عملکرد بهتر داره.
⚡️ حالا خبر:
تیم VS Code توی نسخه 1.93 اعلام کرده که بیشتر کار مهاجرت از AMD به ESM را تکمیل کردن. این یه تیتر خبریه، ما هم که مصرفکننده هستیم، پس به ما چه؟
خوندن خبر کامل، بحث و جدلهای توی گیتهاب پروژه، و ویدیو استندآپهاشون خیلی درسآموزه، چرا؟
🔸حواسشون به به جاهایی از پروژه که داره خوب کار میکنه هم هست. بهبود تدریجیه و ساکن موندن و بیتوجهی به تغییراتِ فراتر از محصول خیلی مهمه. اینکه فیچر روی فیچر بچینیم ولی توجهی به زیرساخت و روشهای مورد استفادهمون نداشته باشیم خودش باعث ایجاد تفاوت فرهنگ و محصول بین دو جامعه میشه.
🔸نحوه مهاجرت محتاطانه به روش جدید، برنامهریزی زمانی، rollback plan و انتظار تدریجی
🔸این یه درس مهم refactoring است
⚡️ حالا خبر:
تیم VS Code توی نسخه 1.93 اعلام کرده که بیشتر کار مهاجرت از AMD به ESM را تکمیل کردن. این یه تیتر خبریه، ما هم که مصرفکننده هستیم، پس به ما چه؟
خوندن خبر کامل، بحث و جدلهای توی گیتهاب پروژه، و ویدیو استندآپهاشون خیلی درسآموزه، چرا؟
🔸حواسشون به به جاهایی از پروژه که داره خوب کار میکنه هم هست. بهبود تدریجیه و ساکن موندن و بیتوجهی به تغییراتِ فراتر از محصول خیلی مهمه. اینکه فیچر روی فیچر بچینیم ولی توجهی به زیرساخت و روشهای مورد استفادهمون نداشته باشیم خودش باعث ایجاد تفاوت فرهنگ و محصول بین دو جامعه میشه.
🔸نحوه مهاجرت محتاطانه به روش جدید، برنامهریزی زمانی، rollback plan و انتظار تدریجی
🔸این یه درس مهم refactoring است
👍4
tech-afternoon
✨🚀 سلام این ایونت «احتمالا» بخش اول سری بنچمارکینگ است، قصد دارم اهمیت و نکات بنچمارکینگ رو مرور کنیم و در بخش اول، روی داتنت و اسکیوال سرور کار خواهیم کرد و اگر استقبال خوبی بشه، در بخش دوم روی روی لایبریهای پایتون و گو کار کنیم. این فرم ثبتنام است (جلسات…
⚡️ فردا یکشنبه ساعت ۱۸:۳۰ به وقت تهران!
🤗 اگر دوست داشتید به دوستانتون هم اطلاع بدید.
🚀 البته لینک گوگلمیت تغییر خواهد کرد، میت جدید، امکان ضبط و کیفیت صدای بهتری خواهد داشت! که به دوستانی که فرم رو پر کردند ایمیل خواهد شد و در چت میت قبلی هم قرار خواهم داد.
🤗 اگر دوست داشتید به دوستانتون هم اطلاع بدید.
🚀 البته لینک گوگلمیت تغییر خواهد کرد، میت جدید، امکان ضبط و کیفیت صدای بهتری خواهد داشت! که به دوستانی که فرم رو پر کردند ایمیل خواهد شد و در چت میت قبلی هم قرار خواهم داد.
✨ ساعتی قبل اپل در کنار گوشی و ساعت و ایرباد جدیدش، از iOS 18 رونمایی کرد.
برای توسعه نرمافزار روی پلتفرمهای اپل مثل آیفون، آیپد، اپلواچ و مک swift تنها گزینه نیست. شاید از نظر پرفرمنس یا سازگاری بهترین باشه، ولی آیا در همه اپلیکیشنها اون تمایز کارایی برای کاربر مشهوده؟ آیا هزینه توسعه محصول native برای همهی تیمها و شرکتها مقرونبهصرفه یا بهتر بگم گزینهی بهینه است؟
مفهوم Reusable codebase که استفاده از بخشی از کد برای چند پلتفرم رو شامل میشه، میتونه در هزینه تولید و پشتیبانی + زمان توسعه و رسیدن به مارکت برای برخی محصولات گزینه بهتری باشه.
برای فلاتر، BMW, Toyota, eBay و برای NET MAUI شرکتهایی مثل Esri, NBC Sports و برای ریاکت نیتیو شرکتهایی مثل والمارت، تسلا، فیسبوک و Airbnb مثالهای خوبی هستن.
نظر شما چیه؟
برای توسعه نرمافزار روی پلتفرمهای اپل مثل آیفون، آیپد، اپلواچ و مک swift تنها گزینه نیست. شاید از نظر پرفرمنس یا سازگاری بهترین باشه، ولی آیا در همه اپلیکیشنها اون تمایز کارایی برای کاربر مشهوده؟ آیا هزینه توسعه محصول native برای همهی تیمها و شرکتها مقرونبهصرفه یا بهتر بگم گزینهی بهینه است؟
مفهوم Reusable codebase که استفاده از بخشی از کد برای چند پلتفرم رو شامل میشه، میتونه در هزینه تولید و پشتیبانی + زمان توسعه و رسیدن به مارکت برای برخی محصولات گزینه بهتری باشه.
برای فلاتر، BMW, Toyota, eBay و برای NET MAUI شرکتهایی مثل Esri, NBC Sports و برای ریاکت نیتیو شرکتهایی مثل والمارت، تسلا، فیسبوک و Airbnb مثالهای خوبی هستن.
نظر شما چیه؟
👍3
tech-afternoon
✨🚀 سلام این ایونت «احتمالا» بخش اول سری بنچمارکینگ است، قصد دارم اهمیت و نکات بنچمارکینگ رو مرور کنیم و در بخش اول، روی داتنت و اسکیوال سرور کار خواهیم کرد و اگر استقبال خوبی بشه، در بخش دوم روی روی لایبریهای پایتون و گو کار کنیم. این فرم ثبتنام است (جلسات…
😊 قبل از هر چیز از دوستانی که در جلسه شرکت کردن متشکرم و امیدوارم مطالب مفید بوده باشه.
🔗 ویدیو جلسه، اسلایدها و سورسکد مثالها آپلود شد و در صورت تمایل از لینکهای زیر دریافت کنید.
پیشاپیش از نقد، نظر و پیشنهاد شما برای بهبود جلسات، و همچنین انتخاب موضوع جلسات بعدی استقبال تشکر میکنم.
🎬 YouTube: Webinar Video
📈 SlideShare: Presentation File
🖥 GitHub: Source Codes
🔗 ویدیو جلسه، اسلایدها و سورسکد مثالها آپلود شد و در صورت تمایل از لینکهای زیر دریافت کنید.
پیشاپیش از نقد، نظر و پیشنهاد شما برای بهبود جلسات، و همچنین انتخاب موضوع جلسات بعدی استقبال تشکر میکنم.
🎬 YouTube: Webinar Video
📈 SlideShare: Presentation File
🖥 GitHub: Source Codes
YouTube
Benchmarking your code
ویدیو جلسه تکافترنون، در مورد اندازهگیری پرفرمنس کدها نرمافزارها.
توی این جلسه در مورد مفاهیم بنچمارکینگ، چرایی و اهمیتش در فرایند توسعه نرمافزار صحبت کردیم.
مثالها بر مبنای داتنت است، ولی در توضیح و تشریح موضوع سعی کردم برای منحصر به داتنت نباشه و…
توی این جلسه در مورد مفاهیم بنچمارکینگ، چرایی و اهمیتش در فرایند توسعه نرمافزار صحبت کردیم.
مثالها بر مبنای داتنت است، ولی در توضیح و تشریح موضوع سعی کردم برای منحصر به داتنت نباشه و…
🙏4❤3👍2
از ۱ (کمترین) تا ۵ (بیشترین) چقدر آشنایی با امکانات جدید داتنت براتون مهمه؟ (علاقه شخصی و اهمیت در کار)
Anonymous Poll
18%
۱
0%
۲
0%
۳
14%
۴
68%
۵
به بهانه ریلیز نسخه RC1 داتنت ۹
از داتنت ۵ اعلام کردن که:
🗓 نوامبر هر سال نسخه جدید ارائه میشه (آبان-آذر)
⚡️ نسخههای فرد (۵، ۷، ۹، ۱۱) با پشتیبانی ۱ ساله خواهند بود
💎 نسخههای زوج (۶، ۸، ۱۰) دارای ۳ سال پشتیبانی هستند (Long-Term Support یا LTS)
اطلاعات نسخه RC1 داتنت ۹ در گیتهاب
رأیگیری بالا برای تصمیم در مورد موضوع تکافترنون بعدی است.
از داتنت ۵ اعلام کردن که:
🗓 نوامبر هر سال نسخه جدید ارائه میشه (آبان-آذر)
⚡️ نسخههای فرد (۵، ۷، ۹، ۱۱) با پشتیبانی ۱ ساله خواهند بود
💎 نسخههای زوج (۶، ۸، ۱۰) دارای ۳ سال پشتیبانی هستند (Long-Term Support یا LTS)
اطلاعات نسخه RC1 داتنت ۹ در گیتهاب
رأیگیری بالا برای تصمیم در مورد موضوع تکافترنون بعدی است.
GitHub
.NET 9 RC 1 · dotnet/core · Discussion #9496
Announcement We are pleased to announce the release of .NET 9 Release Candidate 1. This release contains the following improvements: 📚Libraries WebSocket Keep-Alive Ping and Timeout APIs Add ZLib, ...
👍3