קידוד לחלל: תוכנות שלקחו אותנו לירח ומעבר

הבוקר, בשעה 3.45 לפנות בוקר, נחתת הירח בראשית, שפיתחה עמותת SpaceIL הישראלית, החלה את המסע בן חודשיים לירח. אם המשימה תצליח, ישראל תהפוך למדינה הרביעית שהציבה את כף הרגל על פני הלוויין שלנו, וכך תכניס את היום הזה להיסטוריה.

בהשראת הרגע, צללנו לחקור את אבני הדרך הגדולות ביותר של חקר החלל ואת המוחות המבריקים שעמדו מאחוריהם. כל נחיתה מוצלחת, תמונה צבעונית של גלקסיה רחוקה ואותות רדיו שנשלחו למרחק של שעות אור, הינם תוצאות של עבודה של מדענים ומהנדסים רבים, שהיו והינם חלוצים בתחומם.

בהיותנו חברה לפיתוח תוכנה, אנחנו פשוט לא יכולים למנוע מעצמנו לימוד על העבודה של עמיתינו. בדקנו את הקוד המניע את המשימה הראשונה לירח המאוישת, את כללי הפיתוח לבניית מארס רובר ועד כמה מרחיקות לכת יכולות להיות שפות סף.

עכשיו אנחנו מתחלקים בזה אתכם.

BURN_BABY_BURN: הקוד שלקח אתנו לירח

Man on moon

המשימה של אפולו 11 של נאס"א הושקה ב -1969 - זמן טרום-היסטורי, פשוטו כמשמעו, עבור מפתחים העובדים עם מערכות כמו יוניקס (טוב, כמעט כל המפתחים). אבל הדבר המרגש ביותר כאן הוא כי קוד המקור של מחשב המדריך אפולו 11 (AGC) ואת תא הפיקוד ורכב נחיתה על ירח נמצא בגישה חופשית ב- GitHub.

הודות ל- AGC ו- MIT וירטואליים במוזאון, כל אחד יכול לגלות שורות קוד מקוריות שהטיסו אותנו לירח. אלה שמתרגשים במיוחד מקידוד עבור חלל יכולים אפילו לקמפל אותן באמצעות הדמיית מחשב ההנחיה שהיה באפולו.

כדאי לומר, כי השפה שבה נכתב הקוד בקושי מזוהה ע"י מהנדסים מודרניים. אבל עדיין, זה קריא למדי - מרגרט המילטון וצוותה ב- MIT הוסיפה הערות רבות כדי לתת לכולם (וגם לנו) הבנת כל שורה מסוימת. וכן, הם קראו לאחד הקבצים BURN_BABY_BURN–MASTER_IGNITION_ROUTINE (תשרפי ילדונת תשרפי – נוהל ראשי להצתה).

הנה קטע מתוכו:

מבט עמוק יותר יכול לתת לך לא רק את הרעיון על מה שקורה בתוכנית, אלא גם מה הייתה העבודה שלהם. אתה יכול לדמיין את המחשבות שלהם בעת הקלדה של זה:

apollo code

או זה:

או כאשר מדברים על איך לא לעשות פודו (שהיה למעשה מצב שנקרא "P00DOO ביטול" עם שני אפסים אחרי "P". אבל, בחייך, זה לא יאומן שמישהו ביטא את זה ככה!)

הגודל הכולל של התוכנית כולה הוא מעט מעל MB2 - צילומי מסך שעשינו עבור מאמר זה הם כמעט באותו גודל! אבל האם זה לא מרתק שקטע קוד זעיר כזה היה מסוגל לקחת אותנו כל כך רחוק? כן, הייתה טעות בצ'ק ליסט שכמעט מנעה את הרכב נחיתה על ירח מן הנחיתה. אבל זה סיפור אחר. הסיפור הזה הוא על אנשים שלא הייתה להם הצפת מחסנית כדי לחפש עזרה, על פעמים כאשר פיתוח תוכנה משותף ועקרונות העיצוב היו רק בתחילת הדרך ועל "מחשבון כיס", שאפשר לאנשים לטוס לירח.

כוח של 10 כוח אחד: קידוד למאדים

המפתחים שלנו יכולים לבלות שעות בוויכוח מה היא שפת התכנות הנפוצה ביותר על פני כדור הארץ. אבל כשמדובר במאדים התשובה ברורה - זה C. רוב התוכנות של Curiosity, רובר היחיד שמופעל כעת על פני כוכב לכת, מתוכנת בשפה זו (זה היה 2,5 מיליון שורות בשנת 2012 והיה צריך להיות הרבה יותר אם היה נעשה היום). כמו כן, יש מעל 1 מיליון של Java ו- C + קוד אחראי על נהיגת רובר ושליטה על הזרוע הרובוטי שלו.

אבל הדבר הכי מוזר לגבי קוד של Curiosity זה איך שהוא נכתב.

זמן קצר לאחר הנהלת מעבדת JPL לתוכנה אמינה (LARS), ד"ר הולצמן שם לב שמפתחים לא מצייתים לרוב הכללים שנקבעו בתקני קידוד. וחוץ מזה, והכי גרוע, שלכל משימה היה סטנדרט משלה. כתוצאה מכך, היה ניתן לקבל מספרים סותרים בעת הפעלת אותו קוד בסביבות שונות.

דר' הולצמן השקיע שעות רבות בשאלת המתכנתים שלו שאלה אחת בלבד:

אם אתה יכול לבחור 10 כללים כדי לציית להם ולהתעלם ממאות אחרים, מה היו ה- 10 הכללים שהיית בוחר?"

התשובות שלהם יצרו "כוח של עשרה" – סט כללי קידוד המבוססים על הערכת סיכונים, איפה שכל כלל היה מגיע ממקרה בחיים אמתיים או מתקלה שקרתה עקב התעלמות ממנו.

הנה הכללים:

1. הימנע ממבנים מורכבים של תזרים, כמו goto ורקורסיה.

2. כל הלולאות חייבות להיות בעלות גבולות קבועים. זה מונע הפעלת קוד בלולאות אינסופיות.

3. הימנע מהקצאת ערימת זיכרון.

4. הגבל פונקציות לדף מודפס אחד.

5. תשתמש לפחות בשתי קביעות בזמן ריצה לכל פונקציה.

6. הגבל היקף נתונים להכי קטן אפשרי.

7. תבדוק את ערך המוחזר של כל הפונקציות הלא void, או תהפוך את הסוג שלהן ל- void כדי לציין שערך המוחזר הוא חסר תועלת.

8. תשתמש ב preprocessor במידה מועטת.

9. הגבל שימוש במצביע ל- dereference 1 ואל תשתמש במצביעים על פונקציות.

10. לקמפל עם כל האזהרות האפשריות מופעלות; נדרש לטפל בכל האזהרות לפני הפקת התוכנה.

ניתן למצוא את ההסבר המפורט והמקיף של כל 10 הכללים במאמרו של הולצמן "כוחם של 10: כללים לפיתוח קוד קריטי לבטיחות" שפורסם בגיליון ביוני 2006 במגזין של IEEE "Computer".

בהתבסס על 10 עקרונות אלה פותח תקן קידוד סטנדרטי עבור תוכנה Curiocity. זה כולל 4 רמות של ציות, כל רמה מכילה סט כללים משלה. בדוק אותם במעבר לפי הקישורית הזאת אם אתה רוצה ללמוד איך זה לקודד בשיטת נאס"א.

השפות הטובות ביותר לצאת ממערכת השמש

אם אתה חושב ששפות אסמבלר לא ייקחו אותך רחוק בימים אלה - תחשוב שוב. למרות שפורטרן, קובול ואלגול נשמעים כמו שמות שנונים עבור דינוזאורים, יש להם פוטנציאל להפוך לכוכבים באמת (אפילו ללא חורים שחורים ויקום בארון).

משימת וויאג'ר הושקה ב -1977. שני לווייני מחקר כבר עזבו את ההליוספירה, כולם מהצוות המקורי פרשו, אבל הפרויקט נחשב עדיין באמצע - מתוכנן שהמשימה תימשך עד סוף 2020 או אפילו יותר.

voyager spacecraft

עם זאת, קידוד עבור Voyagers הוא לא רק הדרך לשלוח את השורות שלך מתוך מערכת השמש, אלא גם להזמין מישהו מבחוץ פנימה. שתי החלליות נושאות לוחות זהים זהובים עם תמונות כדור הארץ והקלטות קול - סוג של כמוסת זמן או "הודעה בבקבוק" עבור צורות חיים מחוץ לכדור הארץ.

אבל כדי לראות את התוכן הזה, חייזרים חברים שלנו (או אויבים) צריכים להיות קצת מתכנתים בעצמם. דיאגרמת כיסוי שטח עם הוראות להפעלת ההקלטות וכן איתור המערכת הסולארית מקודדים בצורה בינארית.

הנה הסבר של כל חלק:

אתה יכול לחקור גם את התוכן של תקליט הזהב באתר של נאס"א בקישורית הזאת. זה עשוי להיות מנה היומית שלך של השראה.

***

הדוגמאות הללו מעניקות לנו הזדמנות לבחון את ההתקדמות הטכנולוגית מזווית אחרת. הן מראות עד כמה חדשניות והחלוציות יכולות להיות טכנולוגיות בנות ארבעים שנה, איך המבריקות של המוח האנושי יכולה לשלוט בחלליות ללא רבב עם רק 2 מגה בייט של קוד וכיצד השאלה הנכונה שנשאלה אצל אנשים נכונים מביאה פתרונות לרמה אחרת.

אנחנו מקווים שנהנית מקריאה כמו שנהנינו כשכתבנו את זה. וכדי לסיים את זה, ציתות קצרה ממהנדסי אפולו:

 

 

להגיב

מקרים דומים

אף פעם אל תפספס כתבה!

תירשם לבלוג שלנו ותקבל חדשות חמות ישר מהקופסה