UI – פוסט 15: כלים לפיתוח תוכנה וממשקי משתמש – מבוא

19 במאי 2008

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


ה-"דינוזאורים" של כלי פיתוח

edmontonia dinosaur שפות תכנות ראשונות (ברמה של שפת-על) פותחו בשנות השישים של המאה העשרים, יחד איתן פותחו גם המהדרים (קומפיילרים) הראשונים.

מתוך ויקיפדיה:

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

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

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

מהדרים של שפות תכנות מסוימות מפיקים קוד למעבד וירטואלי שאינו מיושם באופן ישיר בחומרה. דוגמה לשפות כאלה – ‏Java‏, C#‎ ו-Smalltalk. היתרון בשיטה זו הוא היכולת להריץ את אותו קובץ מהודר במעבדים מסוגים שונים.

רקע

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

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

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

old compilers

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

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

הרבה פעמים אורך החיים של שפת תכנות או העדפה להשתמש בה נקבע מנגישות ונוחות של כלי פיתוח. כמה ששפת תכנות לא תהיה נוחה ונהדרת, אם יצרן השפה לא פיתח מהדר שעומד ברמה של מהדרים בתחומו, רוב הסיכויים שלא ישתמשו בשפה זו. כנ"ל גם בטכנולוגיות וחבילות פיתוח. מניסיון אישי: כאשר למדתי Java וניסיתי לפתח GUI ב-Swing, בגלל שלא היו בזמנו כלים נוחים לפיתוח ממשק קיבלתי רושם שחבילה זו לא מתאימה לי וחבל לבזבז עליה את הזמן היקר שלי; באותו הזמן היה לי עם מה להשוות, MS Visual Studio סיפק לי סביבת פיתוח נוחה יותר, לכן עברתי לדוט-נט. עיקרון זה עובד גם במקרים אחרים, והוא קשור לתחום של עיצוב המוצר (ראו פוסטים קודמים הקשורים לכך).


המצב היום

יש לי חבר (מבוגר ממני בעשר ומשהו שנים). במקצועו מהנדס חשמל ואלקטרוניקה, מתפרנס מכתיבת דרייברים לחומרה עבור מספר חברות גדולות באסיה. דרייברים נכתבים בד"כ בשפת אסמבלר שהיא די רחוקה מלהיות שפת העל כמו Java או #C, מקסימום אפשר לכתוב את הקוד בשפת C או סקריפט כמו של Python שונים (אני לא מומחה גדול לעניין, לכן על תצעקו עליי לגבי אי דיוקים). גם מהדרים שבהם כותבים את התוכנה ניתן לשייך ל-"דינוזאורים" של כלי פיתוח. מדי פעם הוא נוהג לומר שאנחנו (הכוונה אלי ולכל המפתחים הצעירים) "מתכנתי צעצוע", אנחנו עסוקים בהרכבת Lego, לפי דבריו, כל מה שאנו עושים זה התאמה של רכיבי תוכנה מוכנים (כמו חלקים של Lego); עוד הוא טוען שעוד מאט כל ילד שיודע ללחוץ על כפתורי המקלדת או לפחות להשתמש בעכבר יוכל לבנות תוכנות. מצד אחד הוא צוחק, מצד שני הוא צודק ומצד שלישי למי איכפת   – כל עוד הילד מקבל כסף על הרכבה די מוצלחת של צעצוע Lego.  ;-)

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

tools bag

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

Some of the software companies that produce compilers: Borland, Microsoft, Sun, IBM, Jet Brains, Adobe (Macromedia), Autodesk, Oracle.

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

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


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

 

Add comment
facebook linkedin twitter email

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*