Python 3000 ואומנות התוכנה

בעקבות דיון ב- whatsup צפיתי הרגע בהרצאה של Guido Van Rossum שגרמה לי להיות מוטרד. בהרצאה Giudo נשמע די מיוסר מהארכיטקטורה של שפת Python והחליט שבגרסה שנקראת Python 3000 הוא יבצע את רוב התיקונים עליהם חלם אך לא מימש בגלל הרצון לשמור על תאימות לאחור. כדי שמי שלא מתכנת יבין את הנפש של Giudo אציין שתכנות היא עבודת אומנות של ממש. יש הרבה תכנתים שכותבים קוד ברמה ירודה ומעט שכותבים קוד "אומנותי" (ואני לא מדבר על באגים אלא על היופי והאלגנטיות שבכתיבה). אם תשאלו כל תכנת מקצועי הוא בטח יגיד לכם שהוא לא שלם עם התוכנות שהוא כתב והיום הוא בטח היה כותב אותם אחרת. אז למה לא עושים זאת? עצלות (כי בדר"כ מדובר בהרבה עבודה), פחד להכניס באגים חדשים למשהו "שעובד", שיקולים כלכליים ועוד…

אתן לכם דוגמא ממני: אני לא תכנת במקצועי. תכנות היה ויהיה תמיד תחביב מועדף שאפשר לי, גם בעבודה, לכתוב מספר תוכנות יפות. בתקופה האחרונה התחלתי ללמוד שתי שפות חדשות: Java ו- FPC. מי שעזר לי להכנס לשפת FPC הוא עידו קנר ובהזדמנות זאת אני רוצה להודות לו על התמיכה הרציפה שנתן לי בפורום FPC-IL#. למי שלא יודע אז השיטה הטובה ביותר ללמוד שפה חדשה היא לכתוב באמצעותה פרוייקטים שונים. כתבתי תוכנית בלזרוס שמבצעת חישוב ובדיקה של ספרת ביקורת בתעודת זהות ישראלית. הקוד היה תקין ולא היו באגים, אך עידו העיר לי  על שני נושאים עיקריים: שכפול קוד וכתיבת קוד ארוך מידי… בסופו של דבר מימשתי בעזרתו את אותו הקוד בשליש שורות קוד. הקוד נראה עכשיו יפה ואלגנטי ואני מרוצה ממנו. אמשיך ואבחן את התוכנה "מזרים". גם ממנה אני לא ממש מרוצה: יש בה שכפול קוד ובאופן כללי ניתן היה לכתוב אותה בצורה אלגנתית וחכמה יותר. עכשיו אתם בטח יכולים להבין את Guido… בזמנו כמפתח יחיד (לפני יותר מ- 10 שנים), הוא קיבל החלטות שונות שחלקם היו עיגול פינות (בגלל מחסור בזמן). עכשיו, כעובד Google, הוא מעוניין לתקן את כל אותם טעויות ארכיטקטוניות שבשפה. הבעיה היא שהתמיכה לאחור "תישבר" ולא ניתן יהיה להמיר קוד בצורה בטוחה מפייתון 2 ל- Python 3000.

כאמור ההרצאה של Guido גרמה לי להיכנס לדיסונאנס קוגניטיבי:

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

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

ezid.png

My Signature
פורסם בקטגוריה לינוקס ותוכנה חופשית. אפשר להגיע לכאן עם קישור ישיר.

9 תגובות בנושא Python 3000 ואומנות התוכנה

  1. יכול מאוד להיות שיהיו אנשים שימשיכו לפתח את פייתון הישנה, והשפה לא תתנוון. אחרי הכל יש הרבה שמחבבים את השפה הזו. (אני אישית שייך למחנה של פרל…)

  2. מאת ik_5‏:

    דבר ראשון תודה על המילים החמות 🙂

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

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

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

  3. מאת שניר דוד‏:

    תכנות עם Python 2 לא יהיה תכנות עם שפה מתה. הפיתוח של Python 2 יימשך לפחות ב3-5 שנים הקרובות… מה שנותן לך מספיק זמן לחכות שPython 3 תתיצב או שיפתחו כלים לPython 3.
    אני לא מסכים איתך שהמעבר לPython 3 מצריך לימוד כמעט מחדש של השפה. הקונספט הכללי נשאר אותו דבר ומי שהתרגל לרעיונות שמביאה השפה לא תהיה לו יותר מדי בעיה לעבור.

  4. פינגבאק: תכנות RAD « לראות שונה

  5. מאת ilanshavit‏:

    שניר שלום
    לדעתי הפיתוח לא ימשיך ותהיה רק תחזוקה למספר שנים נוספות. מבחינה זאת אתה לא יודע מה לעשות: לפתח בשפה שקיצה נקבע או לפתח בשפה לא בשלה…
    לגבי לימוד השפה: Guido מסביר בסרט את הלבטים שלו בקביעת הארכיטקטורה החדשה. ניתן להתרשם שהוא בדק לעומק את הדקדוק, טיפוסי הנתונים והאובייקטים השונים בשפה. למשל: הפקודה print מבוטלת ובמקומה תהיה פונקציה חדשה ()print
    Range לא יחזיר integer אלא Iterator. טיפוסי Int השונים יאוחדו, כל המחרוזות יעבדו עם יוניקוד ועוד ועוד…

  6. מאת שלומיל‏:

    תזכורת לכולם:
    מישהו זוכר את פרל 6 ?

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

  7. מאת OSH‏:

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

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

  8. מאת ilanshavit‏:

    OSH
    איך אומרים? "מכל מלמדי השכלתי…".
    אשמח אם תעבוד על הקוד ותשכתב אותו (היכן שצריך). אני מהתכנה הקטנה הזאת לא מפסיק ללמוד וזה מה שיפה בקוד הפתוח 🙂

  9. פינגבאק: האתר של שביט אילן » Blog Archive » אובונטו 8.10: לא, תודה!

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *