چهارشنبه، خرداد ۲۷، ۱۴۰۵

کدنویسی پیشینی: کد قانون اساسی بر لوح سفید

 در نرم افزار، که کُد است، و هر نرم افزار، چیزی مانند یک قانون اساسی است، شما نمیتونید از ابتدا  و از صفر یک نرم افزار را بنویسید که کار کند. برای یک اپ ساده، بطور متوسط دوسال کار یک یا چندین تیم را وقت میبرد که فقط نوشته شود و کار کند.  و آن هم در ۹۰ درصد مواقع، کلا با شکست مواجه میشود. و در ده درصد باقیمانده، ۹۰ درصدش کجدار و مریض کار خواهد کرد. با برنامه نویسها صحبت کنید. نمیشه یک تکه از یک کد را قیچی کرد و دور انداخت. به نظزم ساده دلانه می‌بینید، مساله ای دارای ماهیت پیچیدگی را. یک سیستم پیچیده اورگانیک با عوامل مختلف طرف هستید. قانون یک کشور، که از زمان قانون اسکاتلند کُد نامیده شد، و برنامه نویسی هم به همین خاطر و از روی آن نام ، بهش کُد میگویند: قانون اساسی یک کشور، پیچیده تر از یک نرم افزار است. بله میتونید بنشیدید یک چیزی بنویسید، نرم افزار هم میتونید بنویسید، یک ماهه تحویل میدهند، اما کار نخواهد کرد. اکر به این سادگی بود، سالهانه تریلیون ها دلار هدر نمیرفت ( بی اغراق). بخاطر یکی از باگ های شرکت پست در ماجرای پست-آفیس انجلیس، ده ها نفر در زندان هستند و  افرادی خودکشی کردند، و زندگی ها نابود شد، و هنوز راه حلی پیدا نشده. مساله نوشتنش نیست، بلکه کار کردنش است. وعده ی کار کردن کُد ی را میدهید که پیچیدگی آن را  کسی اطلاع ندارد. برای اینکه شمه ای از پیچیدگی آن بدست بیاورید، از یک برنامه نویس خبره که یک نرم افزار واقعی بپرسید، ولی نه هر برنامه نمیسی: از آن که برنامه ای نوشته باشه که در حال استفاده توسط میلیونها نفر باشد، و‌کار کند. بقیه، بلوف زن هستند، حتی با تجربه هاشان. کپی برداری از قوانین بقیه هم کار نمیکند. ببخشید ولی  با احترام به بقیه مطالبتان، در این صحبتتان تناقض وجود دارد: تناقضی که بخاطر ندیدن نوع یپیچیدگی ای است، که از بیرون دیده نمیشود. ۹۰ درصد شرکتهای نرم افزاری، با آن همه متودولوژی، و انباشت تجربه ی نوشتن‌ ده ها برنامه (کد)، شکست میخورند. با آن همه انباشت تجربه، و تکرار شدنش در سالها و نسل ها. همچنین. حکومت و قدرت باید  بین چند نهاد باشد. اکر حکومت صرفا از مردم ، هم پرفکت نخواهد بود، و اثبات و‌نمونه ای ندارید که کار میکند. نمونه اش همون دموکراسی یونان باستان، نتیجه را در تاریخ ببینید. دموکراسی هایی که در کشورهای دیگر دم از آن میزنند، دموکراسی به معنای مورد نظر شما نیستند.  چنین سیستمی نه دوام دارد، نه توانایی حفظ خود را دارد از حمله، و نه توان محافظت از  تهدید های بیزونی و اشتباهات درونی دارد. اشتباهات خود را خواهد داشت. این هم نوعی دیگر از فروکاستن همه مسائل به یک نوع راه حل ، ساده سازی شده است. یک نهاد قدرت تکی، حتی اکر مردم باشد، کار نخواهد کرد، حتی اگر اون نهاد، رای گیری از مردم باشد، یا هر روز هم رفراندوم انجام دهند. خیلی از بدترین تصمیم ها در تاریخ که منحر به نابودی‌های در سطح تمدنی، شده هم با رای گیری و رفراندوم انجام شده اند: از هیتلر، تا برکسیت. اگر سلطنت، مذهب، روحانیت، فلان طیف، موفق نبوده، دلیل نمیشود که پس اگر به توپه مردم بسپاریم، دیگه این یکی جواب میده. اینطور تیست که جواب در یکی از بیوانها باشد، و اگر اون دوتا نبود، پس حتما در سومی هست. مثالهای بیشتری هم وجود دارد که رای گیری، رفراندوم، پارلمان، غیره، منحر به نابودی هایی در سطح تمدنی شده اند. هیچ راه حل «پیشینی» ای وجود ندارد: یعنی از قبل بشینیم و مسایل اساسی را پیدا کنیم و حل کنیم. کشورهایی که قانون اسلسی از نو نوشتند، مثلا بعد از انقلاب فرانسه، یا حتی آمریکا، تا سالها اعدام ها ی روبسپیر یا جنگ داخلی داشته اند. و اون همه سال ها طول کشیده تا نرم افزار و کد مورد نظر، دیباگ شود و بهبود یابد و تدریجا تکامل یابد و دِوِلُپ شود. قانون اساسی کشوری مثل انگلیس که اخیرا انقلاب نداشته، بر اساس پیشینه precedence است. یعنی رشد ارگانیک و تدریجی با انباشت حکم های بیشمار در طی دهه ها و قرون بوده.  قانون اساسی، لوح سفید نیست و‌ نمیتواند باشد. صفحه شطرنج نیست که از اول چیده شود و ریسِت شود. یک‌سیستم پیچیده است ، پر از پدیده های امرجنت، عوامل فرمال سازی نشده، و شرایط بیشمار غیر قابل پیش بینی، که هیچکس به تنهایی نمیداند و نمیتواند بداند که چطوری کار میکند، همانطور که تجربه علوم کامپیوتر نشان داده. این مطلبی است که انسان ها قادر به درک علت پیجیدگی آن هم نیستند ذاتاً. مگر آنها که دهه ها کار کرده اند و کلنجار رفتن و زور آزمایی با پیچیدگی، و curse of dimentionality و combinatorial explotion، آنها را خاصع تر کرده در برابر محدودیت توان انسان در مورد طراحی سیستمهای پیچیده به صورت بخشنامه ای. افزایش تعداد، مولا سپردن به حمعیت زیاد، یا تنده مردم هم کار نمیکند: بعضی ها میکویند: «میشینیم از مردم میپرسیم چه میخواهد، رفراندوم میگذاریم، و انجام میدهیم، و بعدش دهه ها و قرن ها، خوش و خرم زندگی خواهیم کرد». متخصص هاش هم نمیتونند، چه برسه به مردم. طراحی سیستمهای پیچیده، ناممکن نیست، اما اینطور کار نمیکند که میشینیم مینویسیم. کتاب cathedral and bazzar را ببینید. همچنین mythical man month. و موارد دیگر.

ورژن ۲

در نرم افزار، که کُد است، و هر نرم افزار، چیزی مانند یک قانون اساسی است، شما نمیتونید از ابتدا  و از صفر یک نرم افزار را بنویسید که کار کند. برای یک اپ ساده، بطور متوسط دوسال کار یک یا چندین تیم را وقت میبرد که فقط نوشته شود و کار کند.  و آن هم در ۹۰ درصد مواقع، کلا با شکست مواجه میشود. و در ده درصد باقیمانده، ۹۰ درصدش کجدار و مریض کار خواهد کرد. با برنامه نویسها صحبت کنید. نمیشه یک تکه از یک کد را قیچی کرد و دور انداخت. به نظزم ساده دلانه می‌بینید، مساله ای دارای ماهیت پیچیدگی را. یک سیستم پیچیده اورگانیک با عوامل مختلف طرف هستید. قانون یک کشور، که از زمان قانون اسکاتلند کُد نامیده شد، و برنامه نویسی هم به همین خاطر و از روی آن نام ، بهش کُد میگویند: قانون اساسی یک کشور، پیچیده تر از یک نرم افزار است. بله میتونید نشینید یک چیزی بنویسید، نرم افزار هم میتونید بنویسید، یک ماهه تحویل میدهند، اما کار نخواهد کرد. اکر به این سادگی بود، سالهانه تریلیون ها دلار هدر نمیرفت ( بی اغراق). بخاطر یکی از باگ های شرکت پست در ماجرای پست-آفیس انجلیس، ده ها نفر در زندان هستند و  افرادی خودکشی کردند، و زندگی ها نابود شد، و هنوز راه حلی پیدا نشده. مساله نوشتنش نیست، بلکه کار کردنش است. وعده ی کار کردن کُد ی را میدهید که پیچیدگی آن را  کسی اطلاع ندارد. برای اینکه شمه ای از پیچیدگی آن بدست بیاورید، از یک برنامه نویس خبره که یک نرم افزار واقعی بپرسید، ولی نه هر برنامه نمیسی: از آن که برنامه ای نوشته باشه که در حال استفاده توسط میلیونها نفر باشد، و‌کار کند. بقیه، بلوف زن هستند، حتی با تجربه هاشان. کپی برداری از قوانین بقیه هم کار نمیکند. ببخشید ولی  با احترام به بقیه مطالبتان، در این صحبتتان تناقض وجود دارد: تناقضی که بخاطر ندیدن نوع یپیچیدگی ای است، که از بیرون دیده نمیشود. ۹۰ درصد شرکتهای نرم افزاری، با آن همه متودولوژی، و انباشت تجربه ی نوشتن‌ ده ها برنامه (کد)، شکست میخورند. با آن همه انباشت تجربه، و تکرار شدنش در سالها و نسل ها. همچنین. حکومت و قدرت باید  بین چند نهاد باشد. اکر حکومت صرفا از مردم ، هم پرفکت نخواهد بود، و اثبات و‌نمونه ای ندارید که کار میکند. نمونه اش همون دموکراسی یونان باستان، نتیجه را در تاریخ ببینید. دموکراسی هایی که در کشورهای دیگر دم از آن میزنند، دموکراسی به معنای مورد نظر شما نیستند.  چنین سیستمی نه دوام دارد، نه توانایی حفظ خود را دارد از حمله، و نه توان محافظت از  تهدید های بیزونی و اشتباهات درونی دارد. اشتباهات خود را خواهد داشت. این هم نوعی دیگر از فروکاستن همه مسائل به یک نوع راه حل ، ساده سازی شده است. یک نهاد قدرت تکی، حتی اکر مردم باشد، کار نخواهد کرد، حتی اگر اون نهاد، رای گیری از مردم باشد، یا هر روز هم رفراندوم انجام دهند. خیلی از بدترین تصمیم ها در تاریخ که منحر به نابودی‌های در سطح تمدنی، شده هم با رای گیری و رفراندوم انجام شده اند: از هیتلر، تا برکسیت. اگر سلطنت، مذهب، روحانیت، فلان طیف، موفق نبوده، دلیل نمیشود که پس اگر به توپه مردم بسپاریم، دیگه این یکی جواب میده. اینطور تیست که جواب در یکی از بیوانها باشد، و اگر اون دوتا نبود، پس حتما در سومی هست. مثالهای بیشتری هم وجود دارد که رای گیری، رفراندوم، پارلمان، غیره، منحر به نابودی هایی در سطح تمدنی شده اند. هیچ راه حل «پیشینی» ای وجود ندارد: یعنی از قبل بشینیم و مسایل اساسی را پیدا کنیم و حل کنیم. کشورهایی که قانون اسلسی از نو نوشتند، مثلا بعد از انقلاب فرانسه، یا حتی آمریکا، تا سالها اعدام ها ی روبسپیر یا جنگ داخلی داشته اند. و اون همه سال ها طول کشیده تا نرم افزار و کد مورد نظر، دیباگ شود و بهبود یابد و تدریجا تکامل یابد و دِوِلُپ شود. قانون اساسی کشوری مثل انگلیس که اخیرا انقلاب نداشته، بر اساس پیشینه precedence است. یعنی رشد ارگانیک و تدریجی با انباشت حکم های بیشمار در طی دهه ها و قرون بوده.  قانون اساسی، لوح سفید نیست و‌ نمیتواند باشد. صفحه شطرنج نیست که از اول چیده شود و ریسِت شود. یک‌سیستم پیچیده است ، پر از پدیده های امرجنت، عوامل فرمال سازی نشده، و شرایط بیشمار غیر قابل پیش بینی، که هیچکس به تنهایی نمیداند و نمیتواند بداند که چطوری کار میکند، همانطور که تجربه علوم کامپیوتر نشان داده. این مطلبی است که انسان ها قادر به درک علت پیجیدگی آن هم نیستند ذاتاً. مگر آنها که دهه ها کار کرده اند و کلنجار رفتن و زور آزمایی با پیچیدگی، و curse of dimentionality و combinatorial explotion، آنها را خاضع تر کرده در برابر محدودیت توان انسان در مورد طراحی سیستمهای پیچیده به صورت بخشنامه ای. افزایش تعداد، مولا سپردن به حمعیت زیاد، یا تنده مردم هم کار نمیکند: بعضی ها میکویند: «میشینیم از مردم میپرسیم چه میخواهد، رفراندوم میگذاریم، و انجام میدهیم، و بعدش دهه ها و قرن ها، خوش و خرم زندگی خواهیم کرد». متخصص هاش هم نمیتونند، چه برسه به مردم. طراحی سیستمهای پیچیده، ناممکن نیست، اما اینطور کار نمیکند که میشینیم مینویسیم. کتاب cathedral and bazzar را ببینید. همچنین mythical man month. اینها را ببینید، و ناظر بر مفاهیم مطرح شده در اینها، و این نوع پیچیدگی ها راه حل بدهید، اونوقت میشه نشست صحبت کرد. اما پیجیدگی های قانون که کُد سیستم کامل یک جامعه با میلیونها انسان، و فاکتورها و منابع بسیار دیگراست،  و چنبه های پیچیده پیشینه، هویت های جمعی و فردی، تاریخ، و غیره هم به آن اضافه میشوند. فراتر از این است. مساله اینکه چه کس و نهادی حکومت کند، البته بی اهنیت نیست، اما پیچیدگی، مساله بسیار بزرکتر و مهیب تری است. مقالاتی هست که فروپاشی شوروی را به دلیل عدم تنانایی اش در سازماندهی پیچیدگی میدانند ( که در تحربه زیسته، به صورت نمود هایی از قبیل بوروکراسی جلوه دارد، و کند شدن سیستم. چیزی که حتی آمریکا و انگلیس هم در بعضی زمینه ها با آن درگیر است ). به نظر من نباید هیولای پیچیدگی را دست کم بگیریم، در چنین صحبتی. با در نظر گرفتن تحربیاتی که در علوم کامپیوتر برای مهار پیجیدگی پیدا شده، به راه حل نمیتوان کامل دست یافت. اما میتوان حسی از مقیاس و جنس پیچیدگی بدست آورد. اونوقت روزنه امید برای  امکان بحث در مورد رویکر های بهتری ممکن است به وجود بیابد: مثلا روش اینکریمنتال، روش های بهبودهای تدریجی، روش تکاملی، روش  های کانکشنیستی(بک پراپگیشن) و ادپتیو.