Tayyebi - Software Engineering & Architecture
14 subscribers
27 photos
9 videos
1 file
8 links
Download Telegram
درس نهم: اهمیت جزئیات

قوی‌ترین بدن‌ها هم از پس مسیر‌هایی بر نمیان که لازمه در اون فکر باشه. هیچ دستی تا به امروز نتوانسته یک جسم حداقل ۶۰ کیلویی رو بیشتر از ۶ دقیقه تحمل کنه. حتی آماده‌ترین‌ها.

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

بهترین‌ها طوری کار رو پیش می‌برن که ساده به نظر میاد. بهترین‌ها طوری کار رو پیش می‌برن که دیگران دوست دارن جای اون‌ها بودن.
درس یازدهم: مسولیت در قبال دیگران

ساده‌ترین سوال‌های دیگران هم کاملا جدی هستن. هیچ پرسشی و اشکالی در فرایند پیشرفت رو ساده نمی‌گیریم و مسخره نمی‌کنیم. هنرجوهای امروز، هم‌نورد‌های فردان. و خیلی ممکنه روزی جان ما رو در دست بگیرن.

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

وقتی روی دیوار نیستیم، باهم معاشرت و بگو بخند کنیم. همو بشناسیم. عادت‌های همدیگه رو بفهمیم. تا بدانیم، کی ممکنه لازم باشه حمایت روانی بکنیم. یا بخوایم که تشویق بشنویم.
ما نباید به نمودارها خدمت کنیم. پیرو صحبت‌های گذشته، یک اتفاق معمول در مواجهه با نمودارها، مخصوصا نمودار burn down اینه که بخوایم به زور اون رو تبدیل به یک نمودار کامل یا perfect کنیم.

فراموش نکنیم که این نمودارها هستن که باید توسعه داده بشن تا بهتر واقعیت رو منعکس کنن.

ما نباید واقعیت رو دستکاری کنیم تا نمودارها رو راضی نگه داریم.
🛠️ Software Engineering Tip of the Day

Design for failure, not perfection. Systems rarely fail the way you expect, so resilience means anticipating breakdowns. Use timeouts, retries, circuit breakers, and graceful degradation to keep your system useful even when parts fail.



Pseudo-code: Resilient Service Call

function fetchDataWithResilience(serviceEndpoint):
maxRetries = 3
timeout = 2000ms

for attempt in range(1, maxRetries+1):
try:
response = callService(serviceEndpoint, timeout)
if response.isValid():
return response.data
else:
log("Invalid response, attempt " + attempt)
except TimeoutError:
log("Timeout on attempt " + attempt)
except CircuitBreakerOpen:
log("Circuit breaker open, aborting")
return fallbackCacheData()

# Graceful degradation
log("All retries failed, serving cached data")
return fallbackCacheData()
یک نمونه circuit breaker

using System;
using System.Threading;

public class CircuitBreaker
{
private enum State { Closed, Open, HalfOpen }
private State _state = State.Closed;

private int _failureCount = 0;
private readonly int _failureThreshold;
private readonly TimeSpan _openTimeout;
private DateTime _lastFailureTime;

public CircuitBreaker(int failureThreshold, TimeSpan openTimeout)
{
_failureThreshold = failureThreshold;
_openTimeout = openTimeout;
}

public T Execute<T>(Func<T> action, Func<T> fallback)
{
switch (_state)
{
case State.Open:
if (DateTime.UtcNow - _lastFailureTime > _openTimeout)
{
_state = State.HalfOpen;
}
else
{
Console.WriteLine("Circuit breaker OPEN: using fallback");
return fallback();
}
break;
}

try
{
T result = action();
Reset();
return result;
}
catch (Exception ex)
{
Console.WriteLine($"Failure: {ex.Message}");
RegisterFailure();
return fallback();
}
}

private void Reset()
{
_failureCount = 0;
_state = State.Closed;
}

private void RegisterFailure()
{
_failureCount++;
_lastFailureTime = DateTime.UtcNow;

if (_failureCount >= _failureThreshold)
{
_state = State.Open;
Console.WriteLine("Circuit breaker TRIPPED: now OPEN");
}
}
}

// Example usage
class Program
{
static void Main()
{
var breaker = new CircuitBreaker(failureThreshold: 3, openTimeout: TimeSpan.FromSeconds(5));

for (int i = 0; i < 10; i++)
{
var result = breaker.Execute(
action: () =>
{
// Simulate failure
if (i % 2 == 0) throw new Exception("Service unavailable");
return "Success";
},
fallback: () => "Fallback data"
);

Console.WriteLine($"Attempt {i}: {result}");
Thread.Sleep(1000);
}
}
}
blackbox thinking
less moving parts, less failure.
خواجه نصیر طوسی، «دانش» رو از «جدل» به «سنجش» رساند. با ساخت رصدخانه‌ی مراغه، «مشاهده» رو معیار داوری گذاشت. و با نوشتن «اخلاق ناصری» حتی در «اخلاق» هم ساختار رو بر ابهام ترجیح داد.

برای بزرگداشت خواجه‌نصیر مروری کنیم بر اصل‌های مهندسی:

شفاف‌سازی مسئله. ترجیح سادگی بر پیچیدگی. شفاف نگه داشتن ساختار. در نظر داشتن ثابت‌هایی مثل زمان، هزینه، و انرژی. رعایت ماژولاریتی. انجام طراحی‌های سنجش پذیر. آزمون‌های به‌هنگام. داشتن برنامه‌های خروج و شکست. اتوماتیک کردن کارهای تکراری. ریفکتورهای دائمی و ارتقای ساختار بدون دستکاری رفتار. مستندسازی «چرایی» بیشتر از «چگونگی». حذف کردن پیش از اضافه کردن. گوشه چشم داشتن به تغییرات آینده. تعادل بین تریدآف‌ها و علم به اینکه هیچ بهینه‌سازی بی‌هزینه نیست. و در نهایت: ساختن سیستمی که کار می‌کنه.
به ازای هر موقعیت شغلی
۱- یه ماشین ویندوزی و یک claude نصب شده
۲- یک SKILL.md متناسب با اون موقعیت شغلی
۳- یک آدرس ایمیل لاگین شده
۴- یک اکانت گیت‌لب شرکت با دسترسی به پروژه‌های مربوطه
۵- یک اکانت جیرا لاگین شده
۶- تنظیم بشه که هر یک ساعت بره جیرا و ایمیلش رو چک کنه و کارهایی که خواستن رو انجام بده و پوش کنه
۷- بهش ایمیل میزنی و فیچری که میخوای رو بهش میدی
۸- تمام (:

این امن ترین روشه. اگه نخواستی که میشه خیلی صرفه جویانه تر هم پیش رفت.

یه ارتش کامل خواهی داشت که ۲۴ ساعت روز کار میکنن.

تازه میتوانی بگی گزارش هم بدن و یه claude مدیر هم درست کنی که تسک ها رو به اون بدی، اون توزیع کنه ((:

در پر هزینه ترین حالت هزینه‌ی ماهانه هر کدام از این دوستان میشه ۲۵۰ دلار! که بازم از حقوق و دردسرهای یک آدم به مرااااتب کمتره.
انقلاب صنعتی چهارم شروع شده.
و از همین ماه، سیل بزرگی از پایان SaaS ها رو شاهد خواهیم بود.
Forwarded from Programmer Jokes
وقتشه که سرمایه‌انسانی از لحاظ فناوری اطلاعات خارج بشه. بسه دیگه اینقدر SaaS و بره و صنعت‌های دیگه رو با چابکی نرم‌افزار آشنا کنه.