مشکل سوم علوم کامپیوتر: نگاشت گراف به درخت
خلاصهٔ کاملتر
یه جوک قدیمی منسوب به Phil Karlton میگه علوم کامپیوتر دو تا مشکل سخت داره: نامگذاری درست و cache invalidation. اینها سختاند چون الگوریتمی حلشون نمیکنه — اولی نیاز به همدلی و درک داره، دومی به تفکر سیستمی. نویسنده ادعا میکنه مشکل سومی هم وجود داره که به همان اندازه فراگیر و حتی کمتر دیدهشده است: تلاش برای جا دادن یک شبکه (گراف) درون یک درخت (ساختار سلسلهمراتبی). اسمش رو میذاره tree mapping.
مغز ما برای فضای فیزیکی خوب تکامل پیدا کرده و به همین خاطر سلسلهمراتب برامون خیلی طبیعیه: اتمها مولکول میسازند، مولکولها بدن میسازند، و الی آخر. درختها این سلسلهمراتب رو بهشکل رسمی نشون میدن و در علوم کامپیوتر همهجا هستند — از B-tree در پایگاه داده تا درخت نحوی (AST) در کامپایلرها. اما ایدهها و اطلاعات سلسلهمراتبی نیستند؛ شبکههای پیچیدهای تشکیل میدن که از مرزهای سخت رد میشند.
فایلسیستم یکی از واضحترین مثالهاست. فاکتور دندانپزشکت رو کجا ذخیره میکنی؟ پوشه مالی؟ پوشه سلامت؟ پوشه مالیات امسال؟ سیستمعاملها هم همین چالش رو دارند: ویندوز و macOS فایلهای یه اپلیکیشن رو کنار هم میذارند، اما اکثر توزیعهای لینوکس فایلها رو بر اساس نوع جدا میکنند — کتابخانهها به /usr/lib، داکیومنتها به /usr/man، و تنظیمات به /etc. این رویکرد ابزارسازی رو ساده میکنه ولی مدیریت نرمافزار رو دردناکتر — همین درد باعث شد فرمتهایی مثل Snap و Flatpak به وجود بیان.
نوشتن هم از این قاعده مستثنی نیست. کتابها ساختار سلسلهمراتبی دارند (فصل، پاراگراف، جمله) ولی ایدههایی که توضیح میدند، شبکهایاند. نویسنده باید این شبکه رو به یه توالی خطی تبدیل کنه. در داستان، این محدودیت میتونه به خلاقیت کمک کنه؛ اما در کتابهای ریاضی که مفاهیم با هم درهمتنیدهاند، هم نوشتن و هم خواندن رو طاقتفرسا میکنه.
معماری شهری هم یه نمونه جالبه. معمار کریستوفر الکساندر در مقالهای معروف به نام «یک شهر درخت نیست» (۱۹۶۵) توضیح میده چرا شهرهای طراحیشده مصنوعی احساس خفگی دارند: چون ساختار درختی دارند — محلههای ایزولهشده با مرزهای سفت. اما شهرهای طبیعی مثل سیینا یا کیوتو ساختار semilattice دارند که مرزهای کار، استراحت و بازی در آنها با هم ادغام میشند و تعاملات غنیتری به وجود میآورند.
در زیستشناسی هم طبقهبندی موجودات زنده تاریخاً بر اساس ویژگیهای ظاهری انجام میشد و به همین دلیل پر از خطا بود — قارچها تا اواسط قرن بیستم گیاه محسوب میشدند، کروکودیلها به خزندگان نزدیکتر از پرندگان دیده میشدند در حالی که واقعیت برعکسه. روش مدرنتر cladistics که بر اساس اجداد مشترک و ژنتیک طبقهبندی میکنه، دقیقتره چون اتصالات واقعی رو حفظ میکنه بهجای اینکه اتصالات مصنوعی تحمیل کنه.
نکات کلیدی:
- tree mapping یعنی تلاش برای جا دادن یه شبکه (گراف) در یه ساختار درختی — و این همیشه با از دست دادن برخی اتصالات همراهه
- این مشکل در همه جا هست: ساختار فایلسیستم، معماری کدبیس، نوشتن داکیومنت، طراحی شهری، و طبقهبندی زیستی
- هیچ الگوریتمی نمیتونه بهتنهایی حلش کنه — نیاز به تصمیمگیری آگاهانه داره
- استراتژی اصلی: قبل از رسیدن به سلسلهمراتب، بپرسید چه شبکهای داره فشرده میشه، کدام اتصالات فدا میشند، و آیا اصلاً باید ساختار نهایی یه درخت باشه




