Advertisement
iocoder

حكاية ميل

Jan 21st, 2016
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.08 KB | None | 0 0
  1. مقالة جديدة كرست للجانب المتعجرف من البرمجة
  2. أدلت بالتصريح الأجرد غير المصقول:
  3.  
  4. المبرمجون الحقيقيون يكتبون بلغة فورتران.
  5.  
  6. قد يكون هذا حقيقيا الآن،
  7. في هذا العصر المنحط،
  8. عصر البيرة اللايت والآلات الحاسبة الصغيرة، والبرمجيات "سهلة الاستخدام"
  9. لكن زمان في الأيام الخوالي،
  10. لما كان مصطلح "البرمجيات" كلمة مضحكة،
  11. وكانت أجهزة الكمبيوتر الحقيقية كانت تصنع الطبل والصمامات المفرغة،
  12. كان يكتب المبرمجون الحقيقيون بلغة الآلة.
  13. ليست فورتران. ولا راتفور. ولا حتى أسمبلي.
  14. لغة الآلة.
  15. أرقام ست عشرية خام مبهمة غير مزينة.
  16. مباشرةً.
  17.  
  18. وخوفا من أن ينشأ جيل جديد بكامله من المبرمجين
  19. على جهل بذلك الماضي المجيد،
  20. شعرت بأنني ملزم أن أوصف،
  21. على قدر ما أستطيع خلال الفجوة بين الأجيال،
  22. كيف كان يكتب المبرمج الحقيقي الكود.
  23. سوف أسميه "ميل"،
  24. لأن ذلك كان اسمه.
  25.  
  26. أول مرة قابلت فيها ميل كانت عندما ذهبت للعمل في مؤسسة Royal McBee للكمبيوتر،
  27. كانت فرعا تابعا لشركة التيليتايب والذي أصبح ميتا الآن.
  28. صنعت الشركة LGP-30،
  29. كمبيوتر بذاكرة طبلة،
  30. صغير ورخيص (بمعايير ذاك الزمن)،
  31. وبدأت تصنع،
  32. RPC-4000، كمبيوتر محسن أكتر بكتير،
  33. وأكبر وأحسن وأسرع.
  34. ذاكرة القلب الحديدي كانت مكلفة جدا،
  35. ولم تكن جديرة بالبقاء، عموما.
  36. (ولهذا لم تسمع عن "الشركة" أو "الكمبيوتر".)
  37.  
  38. وظيفتي كانت أن أكتب مترجما compiler للفورتران
  39. من أجل عيون المعجزة الجديدة وميل كان دليلي لعجائبها.
  40. ميل لم يكن موافقا على المترجمات.
  41.  
  42. "لو لم يستطع البرنامج إعادة كتابة كود نفسه"
  43. تساءل ميل، "فماذا تكون فائدته؟"
  44.  
  45. ميل كان كاتب،
  46. بالنظام الست عشري،
  47. أشهر برنامج كمبيوتر للشركة،
  48. كان البرنامج يعمل على LGP-30
  49. وكان يلعب البلاك جاك مع الزبائن المحتملين
  50. في عروض الكمبيوتر.
  51. تأثيره كان دائما ما يكون دراميا.
  52. وفي كل معرض كان الجانب الخاص بـ LGB-30 مزدحما دائما
  53. وكان رجال مبيعات IBM يتجمعون حوله
  54. وهم يتحدثون إلى بعضهم البعض
  55. سواء كان أو لم يكن ذلك فعلا يؤدي إلى بيع أجهزة الكمبيوتر،
  56. سؤال لم نناقشه أبداً.
  57.  
  58. كانت مهمة ميل هي إعادة كتابة
  59. برنامج البلاك جاك على RPC-4000
  60. (نَقْل؟ ماذا يعني هذا؟)
  61. وكان الكمبيوتر الجديد يعمل
  62. بأسلوب عنونة واحد زائد واحد
  63. وفي هذا النظام يكون لكل تعليمة،
  64. - بالإضافة إلى الأوبكود
  65. وعنوان المعامل المطلوب-
  66. عنوان آخر يشير إلى مكان على ذاكرة الطلبة الدوارة
  67. حيث تقع التعليمة التالية.
  68.  
  69. بلغة اليوم،
  70. كل تعليمة كانت متبوعة بـ GOTO!
  71. ضع ذلك في ماسورة باسكال ودخنه.
  72.  
  73. ميل أحب RPC-4000
  74. لإنه يستطيع أن يحسن الكود:
  75. ذاك هو، يضع التعليمات على الطبلة
  76. حيث تكون التعليمة التالية جاهزة تحت إبرة القراءة،
  77. ومتاحة للتنفيذ الفوري،
  78. بمجرد أن تنتهي التعليمة الحالية من عملها،
  79. كان هناك برنامجاً يؤدي هذه الوظيفة
  80. وهو الـ "optimizing assembler”،
  81. لكن ميل رفض أن يستخدمه.
  82.  
  83. "أنت لا تعرف أبداً أين سيضع الأشياء"،
  84. كان تفسيره، "ولهذا ستضطر لاستخدام ثوابت منفصلة"
  85.  
  86. لقد مر زمن طويل حتى فهمت هذا الكلام.
  87. لأن ميل كان يعرف القيمة العددية
  88. لكل أوبكود،
  89. ولأنه كان يختار العناوين على الطبلة بنفسه،
  90. فكل تعليمة يكتبها يمكن أيضاً اعتبارها
  91. ثابت عددي.
  92. فمثلا يمكنه أن يأخذ تعليمة add مسبقة،
  93. ويستخدمها في عملية الضرب،
  94. إذا كانت تمتلك القيمة العددية الصحيحة.
  95. كود ميل لم يكن سهلا للتعديل بواسطة شخص آخر.
  96.  
  97. لقد قارنت برامج ميل المحسنة يدويا
  98. بنفس الكود الذي يخرجه الـ optimizing assembler،
  99. وبرامج ميل كانت الأسرع دائماً.
  100. هذا كان بسبب أن طريقة تصميم البرامج "من أعلى إلى أسفل"
  101. لم تكن قد اخترعت من قبل،
  102. وعموما ميل لم يكن ليستعملها أصلا.
  103. كان يكتب الأجزاء الداخلية للـ loops أولاً،
  104. بحيث يحصلون مبكرا على فرصة الاختيار
  105. للعناوين المثلى على الطبلة.
  106. لم يكن الـ optimizing assembler ذكيا بالقدر الكافي كي يقوم بها هكذا.
  107.  
  108. ميل أيضا لم يقم أبداً بكتابة كود لتأخير الزمن،
  109. حتى عندما كانت طابعة Flexowriter العنيدة
  110. تطلب زمن تأخير بين المحارف المخرجة حتى تعمل بشكل سليم،
  111. كان يقوم باختيار أماكن التعليمات على الطبلة
  112. بحيث تكون كل تعليمة تالية فقط تحت إبرة القراءة
  113. عندما يكون هناك حاجة إليها؛
  114. فكانت الطبلة تحتاج أن تقوم بعمل دورة كاملة،
  115. لكي تجد التعليمة التالية.
  116. أطلق ميل على هذا الأسلوب مصطلح لا يمكن أن يُنسى،
  117. على الرغم من أن "optimum” هو مصطلح مطلق،
  118. مثل "unique”، أصبح من الشائع أن
  119. يتم جعله نسبياً:
  120. "not quite optimum” أو "less optimum”
  121. او "not very optimum”
  122. ميل أطلق على مواقع تأخير الزمن القصوى
  123. "most pessimum”.
  124.  
  125. بعد أن انتهى من برنامج البلاك جاك
  126. وتمكن من تشغيله
  127. ("حتى الـ initializer محسن"،
  128. كان يقولها بفخر)،
  129. جاءه طلب تعديل من قسم المبيعات.
  130. كان البرنامج يستخدم مولد أنيق (محسن)
  131. للأرقام العشوائية
  132. لكي يقوم بإعادة ترتيب "البطاقات" والسحب من "الرزمة"
  133. شعر أحد رجال المبيعات بأنه كان عادلا أكثر من اللازم،
  134. حيث أنه في بعض الأحيان كان الزبائن يخسرون.
  135. فأرادوا من ميل أن يقوم بتعديل البرنامج،
  136. بحيث عندما يكون مفتاح الـ sense الموجود على الكونسول في وضع set،
  137. يمكنهم تغيير الاحتمالات ليفوز الزبون.
  138.  
  139. ميل أحجم عن ذلك،
  140. لقد شعر أن هذا عمل غير أمين،
  141. حيث كان كذلك،
  142. وأن ذلك قد مس نزاهته الشخصية كمبرمج،
  143. وهذا ما حدث،
  144. لذا رفض أن يفعل ذلك.
  145. تحدث رئيس رجال المبيعات إلى ميل،
  146. والرئيس الكبير، وبطلب من الرئيس
  147. تحدث إليه بعض زملائه المبرمجين.
  148. ميل أخيرا تنازل وكتب الكود،
  149. ولكنه عمل التيست معكوسا،
  150. بحيث عندما يكون مفتاح الـ sense مشغلاً،
  151. يقوم البرنامج بالغش، ويفوز كل مرة.
  152. ميل كان مبتهجاً بذلك،
  153. مدعياً أن اللاوعي لديه كان أخلاقياً بشكل لا يمكنه التحكم فيه،
  154. وعاند ورفض أن يصلح البرنامج.
  155.  
  156. بعد أن ترك ميل الشركة، ليذهب إلى greener pa$ture$،
  157. طلب مني الرئيس الكبير أن أنظر في الكود،
  158. لأرى ما إذا كان يمكنني أن أجد التيست وأصلحه.
  159. وافقت على مضض أن أنظر في الكود.
  160. لقد كان تتبع كود ميل مغامرة حقيقية.
  161.  
  162. لقد شعرت دائماً أن البرمجة شكل من أشكال الفن،
  163. يمكن تقدير قيمته الحقيقة فقط
  164. بواسطة ضليع آخر في ذلك الفن الغامض
  165. فهناك من الجواهر الجميلة والأعمال الأستاذية المتألقة
  166. ما هو مختفي عن أنظار البشر ومواضع إعجابهم، في بعض الأحيان للأبد
  167. بفعل طبيعة العملية.
  168. يمكنك أن تعرف كثيرا عن الفرد
  169. فقط بقراءة كوده،
  170. حتى لو بالست عشري.
  171. أعتقد أن ميل كان عبقريا مغمورا.
  172.  
  173. ربما كانت صدمتي العظيمة قد وقعت
  174. عندما اكتشفت loop بريئة ليس بها أي تيست.
  175. لا يوجد أي تيست. لا يوجد مطلقا.
  176. تقول الفطرة السليمة أن هذه الـ loop مغلقة،
  177. يدور فيها البرنامج إلى الأبد بشكل لا نهائي.
  178. وبالرغم من ذلك، كان البرنامج يخرج منها بشكل سليم،
  179. وبأمان إلى الجانب الآخر.
  180. لقد استهلكت أسبوعين لمعرفة ذلك.
  181.  
  182. كان لدى كمبيوتر RPC-4000 ميزة حديثة حقا
  183. تسمى مسجل الفهرس index register.
  184. مكنت المبرمج من كتابة الـ loop
  185. باستخدام تعليمة مفهرسة indexed instruction داخل اللوب،
  186. وفي كل لفة يتم تنفيذ التعليمة،
  187. والرقم المخزن في مسجل الفهرس
  188. يضاف إلى العنوان المخزن داخل التعليمة،
  189. حيث يشير الناتج إلى
  190. المعطى التالي في السلسلة.
  191. يحتاج المبرمج فقط إلى زيادة مسجل الفهرس
  192. في كل لفة.
  193. ميل لم يستعمله أبداً.
  194.  
  195. في المقابل، كان يسحب التعليمة إلى مسجل من مسجلات الماكينة،
  196. ويضيف ١ إلى العنوان الموجود داخل التعليمة،
  197. ثم يعيد تخزين التعليمة.
  198. ويمكنه بعد ذلك تنفيذ التعليمة المعدلة،
  199. مباشرة من المسجل.
  200. كانت الـ loop مكتوبة بحيث يكون وقت التنفيذ الإضافي هذا
  201. كله مأخوذ في الحسبان -
  202. فقط عندما تنتهي التعليمة من التنفيذ،
  203. تكون التعليمة التالية تماما تحت إبرة القراءة الخاصة بالطبلة
  204. وجاهزة للذهاب.
  205. لكن الـ loop لم يكن بداخلها أي تيست.
  206.  
  207. جاء الدليل القاتل عندما لاحظت أن
  208. البت الخاص بمسجل الفهرسة،
  209. وهو البت الواقع بين العنوان الهدف،
  210. والأوبكود داخل التعليمة،
  211. كان مفعلاً -
  212. مع أن ميل لم يستعمل أبداً مؤشر الفهرسة،
  213. وكان يترك هذا البت بصفر طوال الوقت.
  214. عندما جاء النور أصابني بالعمى تقريبا.
  215.  
  216. لقد قام باختيار مواقع البيانات التي يعمل عليها
  217. بالقرب من أعلى الذاكرة
  218. وهي آخر مواقع يمكن للتعليمات أن تعنونها،
  219. وبالتالي بعد أن يتم معالجة آخر معطى،
  220. وزيادة العنوان المخزن داخل التعليمة،
  221. سيؤدي ذلك إلى الطفحان overflow.
  222. سيضيف الـ carry الناتج واحداً إلى
  223. الأوبكود، ليغيره إلى الأوبكود التالي في مجموعة التعليمات
  224. وهو أوبكود تعليمة jump.
  225. وبشكل مؤكد، فإن التعليمة التالية
  226. كانت في العنوان صفر،
  227. وبالتالي يستمر البرنامج بسعادة في طريقه.
  228.  
  229. لم أستمر في التواصل مع ميل،
  230. ولذا لا أعرف إذا كان قد استسلم لتيار
  231. التغيير الذي اجتاح تكنيكات البرمجة
  232. مذ تلك الأيام البعيدة.
  233. في أي حدث،
  234. أكون متأثرا بما فيه الكفاية بأنني توقفت عن البحث على
  235. التيست المهين،
  236. مخبرا الرئيس الكبير أنني لم أسطتع إيجاده.
  237. لم تبد عليه الدهشة.
  238.  
  239. عندما تركت الشركة،
  240. كان برنامج البلاك جاك لازال يغش،
  241. إذا قمت بتشغيل مفتاح الـ sense الصحيح،
  242. وأعتقد ان هذا هو ما كان يجب أن يكون عليه.
  243. أنا لم أشعر بالراحة
  244. وأنا اخترق كود لمبرمج حقيقي.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement