שבט (17)

בחזרה ליסודות

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

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

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

אתם זוכרים את הפונקציה strcat ב-C, הפונקציה שמוסיפה מחרוזת אחת לשניה?
נתחיל בזה שנכתוב גרסת קוד של strcat:
void strcat( char* dest, char* src )
{
    while (*dest) dest++;
    while (*dest++ = *src++);
}
בחנו את הקוד קצת ותראו מה אנחנו עושים כאן. קודם, אנחנו הולכים לאורך המחרוזת הראשונה ומחפשים את ה-null terminator. כשאנו מוצאים אותו, אנו הולכים לאורך המחרוזת השניה ומעתיקים אות-אות למחרוזת הראשונה.
עכשיו, נניח שאנו קוראים לפונקציה הזו בקטע הקוד הבא:
char bigString[1000]; /* I never know how much to allocate... */
bigString[0] = '\0';
strcat(bigString,"John, ");
strcat(bigString,"Paul, ");
strcat(bigString,"George, ");
strcat(bigString,"Joel ");

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

לא. הקוד הזה משתמש באלגוריתם של שלומיאל הצבע. מי זה שלומיאל? זה הבחור מהבדיחה הבאה:

שלומיאל מקבל עבודה בתור צבע כבישים, ועליו לצבוע את הקוים המקווקוים באמצע הכביש. ביום הראשון הוא לוקח פחית צבע לכביש, וצובע 300 מטר של כביש. “זה די טוב!” אומר הבוס , “אתה צבע מהיר!” ומשלם לו קופיקה.
למחרת, שלומיאל מצליח לצבוע רק 150 מטר. “טוב, זה לגמרי לא כמו אתמול, אבל אתה עדיין עובד מהיר. 150 מטר זה מכובד” ומשלם לו קופיקה.
למחרת, שלומיאל צובע 30 מטר כביש. “רק 30!” צועק הבוס. “זה בלתי קביל! ביום הראשון הספקת פי 10! מה קורה כאן?”.
“מה אני יכול לעשות?” אומר שלומיאל “כל יום אני מתרחק יותר ויותר מפחית הצבע!”

………………………………………..

רוצים לדעת למה הקוד הזה הוא כמו שלומיאל? רוצים לראות איך אפשר לשפר אותו? רוצים לדעת עוד? לפוסט המלא:
http://www.joelonsoftware.com/articles/fog0000000319.html

כאן אפשר לקרוא אודות המחבר:
http://www.joelonsoftware.com/AboutMe.html

כתבו תגובה

כתובת הדוא"ל שלכם לא תוצג.