shlomi-fish-homepage / old / rewrite.html

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE
    html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="he-IL">
<head>
  <title>חמישה עולמות</title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <style type="text/css">
      body { direction : rtl; text-align : right; }
  </style>
</head>
<body>
    <div>
חמישה עולמות<br />
           <br />
           מאת יואל ספולסקי<br />
           מאי 6, 2002<br />
           <br />
           דבר חשוב כמעט לא מוזכר בכל הספרות על תכנות ופיתוח תוכנה, וכתוצאה
 מכך  אנו   לפעמים לא מבינים אחד את השני.<br />
           <br />
           אתה מפתח תוכנה. גם אני. אבל ייתכן שאין לנו את אותם מטרות ודרישות.
  למעשה, <span style="color: #009900;">קיימים </span>מספר עולמות שונים של פיתוח תוכנה,
וחוקים שונים חלים לעולמות  שונים.<br />
           <br />

אתה קורא ספר על בניית מודל באמצעות UML, ובשום מקום לא נאמר
שאין בו הגיון לכתיבת מנהלי התקן של רכיבי חומרה. אתה קורא מאמר שאומר ש"מערכת
הריצה שתופסת 20 מגה-בייט (הדרושה ל-NET.) היא<a
 href="http://radio.weblogs.com/0105852/2002/05/06.html">אינה בעייה</a>" ודבר
ברור לא מוזכר: אם אתה מנסה לכתוב קוד ל-ROM בן 32KB על איתורית, <b>זוהי</b>
     מאוד בעיה!<br />
           <br />
           לדעתי, קיימים כאן חמישה עולמות, לפעמים חופפים, אך במקרים רבים
לא. חמשת העולמות  הם:<br />
           <br />

<ol>
             <li>תוכנות שוק</li>
             <li>תוכנות לשימוש פנימי.</li>
             <li>תוכנות משובצות חומרה (Embedded Software)</li>
             <li>משחקים.</li>
             <li>תוכנות כתוב וזרוק&nbsp;</li>

</ol>
   כאשר קוראים את הספר האחרון על Extreme Programming, או את אחד מהספרים
 המצוינים  של סטיב מקונל, או את "יואל על תוכנה", או את מגאזין <a
 href="http://www.sdmagazine.com">Software Development</a>, רואים הרבה
טענות על איך לבצע פיתוח תוכנה, אבל בקושי רואים כל אזכור של איזה <b>סוג </b>של
     פיתוח הם מדברים עליו - דבר מצער, משום שלפעמים אתה צריך לעשות דברים באופן
    שונה בעולמות שונים.<br />
          <br />
          הבה נעבור על הקטגוריות בקצרה.<br />
          <br />
          <b>תוכנת שוק</b> היא תוכנה שצריך להשתמש בה "במרחב הפתוח" על ידי
קבוצה   גדולה  של אנשים. היא עשויה להיות עטופה בצלופן ולהימכר ב"באג", או שהיא
עשויה   להיות  מורדת מהאינטרנט. היא יכולה להיות מסחרית או shareware או קוד
פתוח  או  תוכנה  של GNU או מה שלא יהיה. הנקודה העיקרית היא שזו תוכנה שאלפי
או מיליוני   אנשים  יתקינו וישתמשו בה.<br />
         <br />
         לתוכנת שוק יש בעיות מיוחדות שנובעות משתי תכונות מיוחדות:<br />
         <br />

<ul>
           <li>מכיוון שיש לה כל כך הרבה משתמשים, שהרבה פעמים יש להם אלטרנטיבות,
   ממשק  המשתמש צריך להיות קל <span style="color: #ff0000;">יותר</span> מהממוצע כדי
שהתוכנה תצליח.</li>
           <li>מכיוון שהיא רצה על כל כך הרבה מחשבים, הקוד צריך להיות חסין
לשוני   בין  המחשבים. שבוע שעבר מישהו כתב לי דואר אלקטרוני על באג ב-<a
 href="http://www.fogcreek.com/CityDesk">CityDesk</a> שהופיע רק בגרסה הפולנית
    של חלונות, בשל הדרך שהיא משתמשת בכפתור ה-Alt הימני כדי להכניס תוים מיוחדים.
    אנו בדקנו אותה על Windows 95, 95OSR2, 98, 98SE, ME, NT 4.0, Win 2000,
&nbsp;ו-Win    XP. אנו בדקנו עם Internet Explorer גרסה 5.01, 5.5 או 6.0 מותקן.
אנו בדקנו    על חלונות בשפות אנגלית אמריקאית, ספרדית, צרפתית, עברית וסינית.
אבל לא הגענו    לגרסה הפול<span style="color: #990000;">א</span>נית עדיין.</li>

</ul>
         ישנן שלוש וריאציות עיקריות של תוכנת שוק. תוכנת <b>קוד פתוח</b> מפותחת
   הרבה  פעמים בלי שאף אחד יקבל כסף כדי לפתחה, מה שמשנה הרבה את הדינמיקה.
למשל,   דברים  שאינם <span style="color: #cc0000;">מ<span style="color: #009900;">נ</span></span>חשבים
ל"כיף" הרבה פעמים לא נעשים בצוות שכולו מתנדבים,<span style="color: #ff0000;"> ו</span><span style="color: #ff0000;">, כפי</span>   שמתיו  תומס <a
 href="http://mpt.phrasewise.com/2002/04/13">מצביע בנמרצות</a>,   זה <span style="color: #009900;">עשוי</span>  <span style="color: #ff0000;">עלול </span>לפגוע בקלות
השימוש שלה. יש אפשרות גדולה הרבה יותר שהפיתוח יהיה מפוזר   מבחינה גאוגרפית,
מה שמתבטא באיכות שונה לחלוטין של תקשורת בין אנשי הצוות.  זה נדיר בעולם הקוד
הפתוח שתהיה שיחה פנים מול פנים לפני לוח תוך כדי ציור קופסאות   וחיצים, כך
שסוגי החלטות התכנון שהיו משתפרות מציור קופסאות וחיצים - בדרך-כלל   מחליטים
לגביהן בצורה לא מספקת בפרוייקטים כאלה. כתוצאה מכך, צוותים שמפוזרים   גאוגרפית
זכו להצלחה רבה יותר בשכפול תוכנה קיימת שדרוש לה מעט מאוד או שום   תכנון.<br />
         <br />
        <b>תוכנות יועצים (Consultingware</b><b>)</b> הן סוג של תוכנות שוק
 שדורש  כל כך הרבה טיפול והתקנה שנזקקים לצבא של יועצים כדי להתקינה, במחיר
מופקע.   תוכניות לניהול תוכן ותוכניות לניהול קשרי לקוחות נופלות פעמים רבות
לקטגוריה  הזאת.  הלקוח מקבל את ההרגשה שהן למעשה לא <b>עושות</b> שום דבר, אלא
רק תרוץ להכניס <span style="color: #33cc00;">עדר של יועצים שמקבלים 300 דולאר לשעה</span><span style="color: #cc0000;"> לקבל צבא של יועצים בדלת</span> <span style="color: #cc0000;">שמקבלים</span>
<span style="color: #cc0000;">300 דולר לשעה</span>. על אף שתוכנות יועצים מוסוות
בתור תוכנות  שוק, המחיר הגבוה של המימוש גורם לכך שהיא מתנהגת יותר כמו תוכנה
 לשימוש פנימי.<br />
      <br />
      <b>תוכנה מסחרית מבוססת Web </b>כמו Salesforce.com או אפילו זאת של eBay
  <span style="color: #cc0000;">הבאה  במגוון זנים של פירות (?)</span> <span style="color: #009900;">שכמותיה נמצאות במקומות רבים, </span>עדיין צריכה להיות קלה
לשימוש ולרוץ על מגוון   רחב של דפדפנים. על אף שיש למפתחים את הלוקסוס של (לכל
הפחות) קצת שליטה על  סביבת ה"שימוש" - המחשבים במרכז המידע - הם עדיין צריכים
להתעסק עם מגוון רחב  של דפדפנים ומספר רב של משתמשים, ולכן אני מחשיב אותה
לוארייציה של תוכנת שוק.<br />
     <br />
     <b>תוכנה לשימוש פנימי</b> צריכה לעבוד רק בסיטואציה אחת על המחשבים של
חברה  אחת. זה עושה אותה להרבה יותר קלה לפיתוח. ניתן לעשות הרבה הנחות על הסביבה
 בה היא תרוץ. ניתן לדרוש גרסה מסוימת של Internet Explorer, או Microsoft Office
 או חלונות. אם אתה צריך לצייר גרף, תן לאקסל לבנות אותו בשבילך; לכל אחד במחלקה
 שלך יש אקסל. (אבל נסה את זה בתוכנת שוק, ותאבד חצי מהלקוחות הפוטנציאליים שלך<span style="color: #cc0000;">.)</span><span style="color: #009900;">).</span><br />
    <br />
    כאן יכולת השימוש היא בעדיפות נמוכה יותר, מפני שמספר מוגבל של אנשים צריכים
  להשתמש בתוכנה, ואין להם ברירה, כך שהם <span style="color: #cc0000;">יצטרכו </span><span style="color: #009900;">יאלצו </span>להסתדר איתה. מהירות הפיתוח חשובה  יותר. מכיוון
שערך מאמץ הפיתוח מפוזר על פני חברה אחת בלבד, הכמות של משאבי הפיתוח שניתן
להקצות היא פחותה בהרבה. מיקרוסופט יכולה להרשות לעצה להוציא 500 מיליון דולר
כדי לפתח מערכת הפעלה ששווה רק כ80- דולר לאדם הממוצע. אבל כאשר <span style="color: #009900;">חברת </span>דטרויט אדיסון מפתחת פלטפורמה למסחר באנרגיה,
ההשקעה צריכה להיות הגיונית לחברה אחת. כדי לקבל החזר טוב, אינך יכול לבזבז
אותה כמות שתוכל על תוכנת שוק. לכן,  חלק גדול של התכונות לשימוש פנימי הן גרועות
למדי.<br />
    <br />
    <b>לתוכנה משובצת חומרה</b> יש התכונה היחודית שהיא מוכנסת לתוך חתיכת חומרה
  וכמעט לעולם לא מעודכנת. <span style="color: #cc0000;">כאן </span>זה עולם אחר לגמרי.
דרישות האיכות הרבה יותר גבוהות,   משום שאין הזדמנות שנייה. אתה עלול לעבוד
עם מעבד שרץ הרבה יותר לאט מהמעבד  השולחני הטיפוסי, כך שייתכן <span style="color: #cc0000;">ש<span style="color: #009900;">ו</span></span>תאלץ להוציא הרבה יותר
זמן על אופטימיזציות. קוד  מהיר הרבה יותר חשוב מקוד אלגנטי. התקני הקלט והפלט
<span style="color: #009900;">ה</span><span style="color: #cc0000;">ש</span>נתונים עלולים
להיות מוגבלים.   למערכת ה-GPS במכונית ששכרתי שבוע שעבר היה כזה <span style="color: #33cc00;">מנשק</span> <span style="color: #33cc00;"><span style="color: #cc0000;">פטתי</span>עלוב</span>
שיכולת   השימוש בה הייתה מאכזבת. האם אי פעם ניסית להכניס כתובת על אחד מהדברים
האלה?   הם מציגים מין "מקלדת" על המסך וצריך להשתמש בחיצ<span style="color: #cc0000;">צ</span>ים כדי לבחור אותיות מחמש  מטריצות קטנות של <a
 href="http://www.hertz.co.uk/serv/us/prod_lost.html">תשע  אותיות כל אחת</a>.
(עבור לקישור ליותר אילוסטרציות של ממשק משתמש זה. למערכת  ה-GPS במכונית שלי
יש מסך מגע שהופך את השימוש בממשק להרבה יותר טוב. אבל אני  סוטה מהנושא המרכזי)<br />
    <br />
    <b>משחקי מחשב</b> יחודיים משתי סיבות. ראשית, הכלכלה של פיתוח משחקים <span style="color: #cc0000;">היא  </span>מונחית על ידי להיטים. חלק מהמשחקים הם להיטים,
רבים אחרים הם כשלונות, ואם ברצונך לעשות כסף ממשחקי מחשב, אתה מכיר בעובדה
הזאת, ומוודא שיש לך מבחר משחקים כך שהלהיט שכבש את המדפים <span style="color: #33cc00;">יפצה</span><span style="color: #cc0000;">יימצא </span>על ההפסדים
מהכשלונות. זה יותר כמו סרטים מאשר תוכנה.<br />
    <br />
    הבעייה היותר גדולה בפיתוח של משחקים היא שיש רק גרסה אחת. מרגע שהמשתמשים
 שלך שיחקו ב-"Duke Nukem 3D" הם לא ישדרגו ל-"Duke Nukem 3.1D" רק כדי לקבל
תיקוני באגים ונשקים חדשים. עם כמה יוצאים מן הכלל, מרגע שמישהו שיחק את המשחק
עד סופו, זה משעמם לשחק אותו שוב. אז למשחקים יש את אותן דרישות איכות כמו לתוכנה
משובצת והכרח פיננסי עצום לדאוג שיצאו בסדר על הפעם הראשונה. למפתחי תוכנות שוק
יש את המותרות <span style="color: #33cc00;">לדעת</span><span style="color: #cc0000;">של ידיעה</span>
שאם גרסה 1.0 לא עמדה על ציפיות של אנשים ולא מכרה, אז אולי 2.0 כן תמכור.<br />
    <br />
    לבסוף <b>קוד <span style="color: #33cc00;">"</span>בתוב וזרוק<span style="color: #33cc00;">"</span> </b>הוא קוד שנוצר זמנית למטרה היחידה של השגת משהו
 אחר, שלא תצטרך להשתמש בו שוב אחרי שתקבל אותו. למשל, <span style="color: #cc0000;">סקריפט </span>shell <span style="color: #33cc00;">script</span>
שממיר קובץ  קלט <span style="color: #cc0000;">שהתקבל </span>לפורמט הנדרש למטרה אחרת,
וזוהי פעולה של פעם אחת.<br />
    <br />
    ישנם, קרוב לודאי, סוגים אחרים של פיתוח תוכנה ששכחתי.<br />
    <br />
    הנה משהו חשוב לזכור. בכל פעם <span style="color: #cc0000;">שאתה קורא</span><span style="color: #33cc00;">שתקרא</span> ספרים על מתודולגיות תכנות שנכתבו  על ידי יועץ/גורו
לפיתוח תוכנה במשרה מלאה, <span style="color: #cc0000;">אתה יכול להיות</span><span style="color: #33cc00;">די</span> בטוח שהם מדברים על תוכנה לשימוש פנימי, של חברות
מסחריות. לא על תוכנת שוק, לא על תוכנה משובצת,  ובטח לא על משחקים. מדוע? משום
שחברות מסחריות הן אלו ששוכרות את הגורואים האלה.  הן אלה שמפרנסות אותם. (<span style="color: #cc0000;">בטח בי</span><span style="color: #33cc00;">האמן לי</span>, id software
<b>אינה</b> הולכת לשכור את אד יורדון כדי לדבר על אנליזה מובנית)<br />
    <br />
<span style="color: #33cc00;">ב</span>שבוע שעבר קנט בק הביע דעה שלא צריך באמת בסיסי
נתונים למעקב אחרי באגים כשמשתמשים  ב-Extreme Programming, משום שהשילוב של
תכנות בזוגות (עם סקירת קוד מתמדת) ופיתוח מונחה על בדיקות (שמבטיח 100% תנאי
עמידה של הקוד בבדיקות האוטומטיות) - משמעו ש<b>לא יהיו באגים כמעט אף פעם</b>.
זה לא נשמע לי נכון. הסתכלתי ב<a href="http://www.fogcreek.com/FogBUGZ">בסיס
עקיבת הבאגים</a> שלנו כאן ב-Fog  Creek כדי לראות איזה מין סוגים של באגים
מעסיקים אותו.<br />
    <br />
    הפלא ופלא, גיליתי שמעט מאוד מהבאגים שנמצאים שם היו מתגלים באמצעות תכנות
 בזוגות או על-ידי פיתוח מונחה על ידי בדיקות. הרבה מה"באגים" שלנו הם מה ש-XP
 קורא לו סיפורים - תאורטית, רק בקשות ליכולות חדשות. אנו משתמשים במערכת העקיבה
 אחרי הבאגים כדרך לזכור, לקבוע עדיפות, ולנהל את כל השיפורים הקטנים והיכולות
 הגדולות שאנו רוצים לממש.<br />
    <br />
    רבים מהבאגים האחרים התגלו רק אחרי הרבה שימוש בשטח. הבאג עם המקלדת הפולנית.
  אין שום אפשרות שתכנות בזוגות היה מגלה את <b>זה</b>. וטעויות לוגיות שלא
עלו   על דעתנו בדרך שבה <span style="color: #cc0000;">יכולות<span style="color: #33cc00;">תכונות</span> </span>שונות עבדו יחד. ככל שתוכנה נעשית יותר
גדולה ויותר   מורכבת, יש יותר אינטראקציות בין <span style="color: #cc0000;">היכולות<span style="color: #33cc00;">התכונות</span> </span>שאתה לא יכול לחשוב עליהן. רצף מסוים
  לא סביר <span style="color: #33ff33;">של תווים </span>("{${?" אם אתה חייב לדעת)
שמבלבל את ה<span style="color: #cc0000;">-lexer</span> <span style="color: #cc0000;">[תרגם
אותי]</span><span style="color: #33cc00;">מנתח הלשוני</span>. ישנם מספר   שרתי FTP
שמדווחים על שגיאה אם אתה מוחק קובץ שלא קיים (השרת שלנו לא מתלונן   אז זה
לא קרה לנו)<br />
    <br />
    בדקתי בפרוטרוט כל באג. מתוך 106 באגים שתיקנו עבור שחרור גרסת חבילת השירות
  של CityDesk, בדיוק 5 מתוכם היו יכולים להימנע באמצעות תכנות בזוג<span style="color: #33cc00;">ות</span>, או תכנון   מונחה בדיקות. למעשה היו לנו יותר באגים
ממה <b>שידענו על קיומם</b> וחשבנו  שאינם חשובים (עד שהלקוחות שלנו העמידו
אותנו על טעותנו!) מאשר באגים שהיו יכולים  להימנע באמצעות שיטות של XP.<br />
    <br />
    אבל קנט צודק, לסוגים אחרים של פיתוח. עבור רוב יישומי הפיתוח המסחרי, אף
 אחד  מהדברים האלה לא היה נחשב לבאג. התוכנית קורסת בגלל קלט לא תקין? הרץ
אותה  שוב,  והפעם היזהר מה-<tt>"{${?" </tt>שלך! ויש לנו רק סוג אחד של שרת
FTP ואיש  בחברה  אינו משתמש בגרסה הפול<span style="color: #cc0000;">א</span>נית של
חלונות.<br />
    <br />
    בתחום של פיתוח תוכנה, רוב היסודות זהים ללא קשר לסוג הפרוייקט שעובדים
עליו,  אבל לא כולם. כאשר מישהו מספר לכם על מתודולוגיה, חישבו עד כמה היא תלויה
בעבודה   <b>שאתם</b> עושים. חישבו מאין האיש ההוא בא. סטיב מקונל, סטיב מגוויאר
ואני   באים כולנו מפינה מאוד צרה: העולם של תוכנות שוק רבתי של גליון אלקטרוני
שנכתבות   ברדמונד, וושינגטון. ככאלה יש לנו <span style="color: #cc0000;">רפים<span style="color: #33cc00;">רף</span> </span>גבוה<span style="color: #cc0000;">ים</span> לקלות
השימוש, ו<span style="color: #cc0000;">רפים נמוכים</span><span style="color: #33cc00;">רף
נמוך</span> עבור  באגים. רוב הגורואים האחרים של המתודולוגיות מרויחים את לחמם
מלהיות יועצים  לפיתוח תוכנות <span style="color: #cc0000;">ש<span style="color: #33cc00;">ל</span></span>חברות מסחריות <span style="color: #cc0000;">משתמשות
</span>לשימוש פנימי, וזה מה שהם מדברים עליו.  בכל מקרה, כולנו יכולים ללמוד
<span style="color: #cc0000;">משהו </span>אחד מהשני.
   <br />
    <br />
   <br />
  <br />
 <br />
</div>
</body>
</html>
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.