בתשובה למתכנת זקן, 16/06/07 22:26
הנוער של ימינו 447340
כמוני כמוך - הן בכך ששפת "אימי" היא C, לימוד ++C בעבודה והבעייה עם ג'אווה. אחת הבעיות שלי כמנהל בחברה מסחרית היא שאלו המתכנתים בג'אווה אינם תמיד מודעים ואף לא איכפת להם מה בדיוק עושה המחשב עם הקוד. לעיתים תכופות אני נדרש לאזן את הגישה של: "קוד נועד בעיקר לבני אדם (מהירות פיתוח, תחזוקה) ולא למחשבים".

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

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

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

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

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

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

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

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

רציתי לכתוב תגובה יותר משכנעת ורהוטה - אבל איני מוצא לכך את הזמן. אני מקווה שעיקר הטענות מובן.
הנוער של ימינו 448191
תודה, מעניין מאוד.

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

חזרה לעמוד הראשי המאמר המלא

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