על כלי פיתוח מהיר ועולם המחשוב

ב־6.10.2008, מאת ארתיום; פורסם תחת: פיתוח, תכנה ומחשבים, C++‎‏; ‏8 תגובות

אחת הגישות המודרניות בפיתוח תכנה היא:

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

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

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

גם צורך בהעסקת כוח אדם מיומן היא משמעותית. כידוע, לא כל המתכנתים שווים. למשל, לפי נתוני indeed‏ ההבדל בין משכורת מפתח C++‎ לבין משכורת מפתח PHP או Asp.Net יכול להגיע עד פי־1.5--2.

השאלה היא, אם העיקרון הזה נכון והאם כדאי לצצד לו?

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

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

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

אנחנו מחליטים לכבוש את השוק עם Super-Cool-Open-Office-2100 יש לנו מספר אופציות לפתח מעבד תמלילים:

  1. לכתוב אותו ב־Python.‏
  2. לכתוב אותו ב־Java.‏
  3. לכתוב אותו ב־C++‎.‏

נעשה הערכות גסות:

  1. יש לנו צוות של 50 מפתחים. זמן הפיתוח ב־Python יקח X זמן, זמן הפיתוח ב־Java יקח 2X וזמן הפיתוח ב־C++‎ יקח כ־3X זמן.
  2. מהירות היישום ב־C++‎ תהיה T. מהירות היישום ב־Java תהיה 1/2‎ ‎T. מהירות היישום ב־Python תהיה 1/10‎ T.‏
  3. צריכת הזכרון הממוצעת תהיה M עבור C++‎.‏ 1.5M עבור Python ו־3M עבור Java.

נבחר X זה חצי שנה, דרישת המעבד T תהיה לפחות 500MHz, וצריכת זכרון M תהיה 50MB, משכורת המפתח 100,000$ בשנה.

מחיר זכרון $0.05 ל־MB ומחירי המעבדים 200$ עבור מעבד 2x2.5Ghz,‏ 40$ עבור מעבד 1G וכ־20$ עבור מעבד 500MHz:

מחיר הפיתוח ב־Python‎:‏

P^{dev}_{python} = 50 \cdot 1/2 \cdot \$100,000 = \$2.5\cdot 10^6

מחיר היישום עבור הלקוחות:

P^{client}_{python}=100\cdot 10^6 ( \$ 200 + 1.5 \cdot 50 \cdot \$0.05) = \$20\cdot 10^9

מחיר הפיתוח ב־Java:

P^{dev}_{java} = 50 \cdot \$100,000 = \$5 \cdot 10^6

מחיר היישום עבור הלקוחות:

P^{client}_{java}=100\cdot 10^6 ( \$ 40 + 3 \cdot 50 \cdot \$0.05) = \$4.750\cdot 10^9

מחיר הפיתוח ב־C++‎:‏

P^{dev}_{C++} = 50 \cdot 3/2 \cdot \$100,000 = \$7.5\cdot 10^6

מחיר היישום עבור הלקוחות:

P^{client}_{C++}=100\cdot 10^6 ( \$ 20 + 50 \cdot \$0.05) = \$2.25\cdot 10^9

מסקנות:

  1. גם כאשר הפיתוח הוא מאוד יקר והמחיר שהלקוח משלם הוא הנמוך האפשרי, ההבדל בין ההשקעה הכספית הוא בכשלוש סדרי הגודל(!)
  2. בחירת טכנולוגיה לא מספיק חיסכונית, יכולה להביא לבזבוז כספים החל מבסדר גודל של מחצית מתקציבה של מדינת ישראל (מקרה של Java) עד פי 5 מהתקציב (במקרה של Python).‏

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

תגובות

עידו, ב־6.10.2008, 15:56

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

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

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

ג) לרוב, לצרכן לרוב כבר יש מחשב עם חומרה מתאימה, ואם אין לו והתוכנה חשובה לו, בדר"כ השדרוג יהיה יחסית זול (ראה סעיף ד')

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

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

לכן, אם אתה עדיין רוצה לבדוק את העלות למשק, החישוב צריך להתבסס על עלות השדרוג של המחשב על פני המשק, וההשוואה צריכה להיות: Ca + Cu ? Pa + Pu, כלומר מה היחס בין עלות האפליקציה + עלות השדרוג ב ++C ( מיוצג ע"י Ca + Cu ) לבין עלות האפליקציה והשדרוג ב פייתון/ג'אווה ( מיוצג ע"י Pa + Pu עבור פייתון)

וכמו כן, מה עלות המוצר הסופי למשתמש הממוצע (עם החומרה הממוצעת)?

ארתיום, ב־6.10.2008, 16:34

עידו דבר ראשון תודה על התיקון. נכון התבלבלתי בעריכה 101.

לגבי צריכת משאבים. אני לקחתי דברים מקובלים. Java אכן צורכת הרבה יותר זכרון בגלל GC. ב־Python שימוש ב־GC חכם יותר אבל עדיין יש נושא של מידע נלווה ששמור עם המידע האמתי (dynamic typing). כנ"ל לגבי מהירויות. אם כי, קצת ריחמתי על Java. :)

בכל אופן, הרעיון הוא להציג דברים בצורה קצת אחרת.

ברור שפה ושם יש אי דיוקים, אבל הרעיון הוא הערכה של סדרי הגודל.

אופיר, ב־7.10.2008, 23:29

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

ארתיום, ב־8.10.2008, 8:33

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

זה הכל. יש יעדים שונים יש טכנולוגיות שונות. החוכמה כיצד לבחור

עידו, ב־9.10.2008, 21:29

צר לי, אבל אני לא מקבל את האמירה הנ"ל.

כלומר, אני מקבל את זה שיש שצריך לבחור את גישת הפיתוח המתאימה לפרוייקט אבל אני לא מקבל את ההנחה שיוצאת מתוך הדוגמאות שהבאת, ששפות כמו פייתון או java לא מתאימות לתוכנות "רציניות"

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

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

ארתיום, ב־9.10.2008, 22:16

שאם אתר כמו youtube בנוי כמעט כולו בפייתון, סימן שאפשר להרים אפליקציות "רציניות" בפייתון.

עידו, שני דברים

  1. מעולם לא אמרתי ש־Python/Java אינן שפות רציניות. גם לא כתבתי את זה. פשוט זה ממש תלוי במשימה שלך.
  2. המקרה של YouTube זה בדיוק המקרה בו פיתוח מהיר הוא חשוב (במיוחד כשהפרויקט הוקם). בין כה, רוב העבודה נעשית ע"י lighttpd שמזרים וידאו.

מה שבאתי להגיד זה שטכנולוגיות הפיתוח המהיר לא מתאימות לכל משימה.

Drazick, ב־27.10.2008, 9:56

זו בטוח הגישה של מיקרוסופט :-).

ארתיום, ב־27.10.2008, 12:31

זו בטוח הגישה של מיקרוסופט :-).

מה קשר?

הוסף תגובה:

 
 כתובת דוא"ל לא תוצג
 

ניתן לכתוב תגובות עם שימוש בתחביר Markdown.

חובה לאפשר JavaScript כדי להגיב.

דפים

נושאים