שאלה

זהיר

New member
Marshall Cline (C++ FAQs)a לא מסכים

באחד המקומות הוא כותב שכמעט כל שגיאת DESIGN שהוא ראה בעבודתו כיועץ לחברות תוכנה (טוב,למעשה אני זוכר כל שגיאה - אבל לקחתי מרווח ביטחון) היא מהסוג של "אליפסה יורשת ממעגל" או "מעגל יורש מאליפסה" (זו הגרסה שלו לבעיית מלבן-ריבוע). אז אתה באמת חושב שזה לא כל-כך חמור שדוגמה כזאת מופיעה בספר שמתיימר לדעת ++C "כשפת אם" ? תכנתו בזהירות אה... ומי שלא מכיר את הלינק ל C++ FAQS שיחפש, בארכיון כאן או ב GOOGLE
 

eyalbd

New member
אפשר לחלוק על זה

סמכות אחרת למשל ברטרנד מאייר בספרו Object Oriented Software Construction מצייר דיאגרמת ירושה שבה מעגל יורש מאליפסה וריבוע יורש ממלבן. ב-++C יש אולי מיגבלה בזה (למשל הפונקציה setsize כמו ב FAQ) אבל זו מגבלה בשפה ולא בתיכנון.
 

זהיר

New member
אז ככה - לגבי מחלוקות

1. אני אסתכל שם היטב. 2. גם STROUSTRUP טועה לפעמים (כן, וגם אני - אבל אני לא חוזר בי מעמדתי זאת, בינתיים). 3. יש לי גם מחלוקות עם C++ FAQS (למשל ההנמקה שלו מתי מותר PROTECTED DATA MEMBERS לא ממש נכונה, ואם היה מנמק נכון היה יוצא שזה מותר רק ב HACKING). 4. גם C++ FAQS אומר שמותר לרשת עיגול מאליפסה בתנאי שאתה מבטיח שלא תהיינה מתודות שתשבורנה את הקשר (אני "מצטט" מהזיכרון) 5. מהסתכלות בספר "שפת אם" (מה לעשות, הלכתי לחנות להסתכל) די ברור שהמחבר - כשכתב אותו (אולי השתפר בינתיים - אבל לא הוציא מהדורה מתוקנת) - בכלל לא מודע לבעיות האלה. יש מחלוקות פילוסופיות שמחזיקות מעמד יותר מאלפיים שנה - אבל המתווכחים לפחות מכירים את האלטרנטיבה. לגבי, המסקנה פשוטה.
 

אלדד28

New member
לא, זה עדיין לא חמור.

תראה, ההבדל בינינו הוא פשוט מאוד. אתה טוען שספר בסיסי כמו "++C כשפת אם" (או כל ספר בסיסי אחר) אמור ללמד, ליידע ולחנך את הקורא כיצד להיות תוכניתן מושלם. אני, מהצד השני, יודע כמה עובדות: 1. אף אחד לא נעשה לתוכניתן מושלם אחרי שקרא ספר אחד. גם לא את הספר של K&R, או של ברוס אקל, או של סטראוסטרופ. 2. אי אפשר להיות תוכניתן מושלם. 3. יש להתמיד בחינוך ובלימוד עצמי, ללמוד מטעויות של עצמך ושל אחרים, ולהשתפר באופן מתמיד. אם תניח לפניי שני ספרים, אחד מדויק להפליא ובקי בכל רזי הסטנדרט, אבל קשה לקריאה, ומצד שני תביא ספר שמזייף כל כמה דפים ומלמד כמה דברים בצורה עקומה, אבל מדובר בספר זורם וקל להבנה ולקריאה - אני אבחר בספר השני, ואלווה אותו בספרות נוספת, בחניכה אישית, וכו'. אף אחד לא לומד בבועה, לבד לגמרי, בלי עזרה מבחוץ. ואת אחיין שלי לימדתי מההתחלה עם int main, אבל תאמין לי שלא היה קורה כלום אם הוא היה לומד void main כמו שדוד שלו למד בהתחלה, ואז היה לומד יום אחד שהסטנדרט שונה מעט. תאמין לי, לא היה נורא קשה לעשות את ה-switch. גם פרדיגמות זה ככה. יום בהיר אחד למדתי design patterns, שלא ידעתי עליהם כלום קודם (ולמרות זאת הצלחתי לעשות הרבה, הפלא ופלא). יום בהיר אחר למדתי policy-based design, וכו'. להיות תוכניתן אין פירושו לשבת שבועיים, לקרוא ספר אחד מדהים, ולהתחיל לתקתק. מדובר בעבודה קשה, ממושכת, מפרכת, שדורשת עצבים של ברזל ויכולת התמדה - אז לא. ממש לא אכפת לי שיש דוגמה אחת (או 20) שגויה בספר טוב. שוב, אני לא מתייחס ספציפית לספר של גרבר כי איני יודע אם הוא ספר מוצלח. כל זה מעבר לכך שעל DESIGN אפשר להתווכח. לא מדובר פה במשהו STRICT, אלא בסוגיה שתלויה בהרבה דברים.
 

זהיר

New member
לשיטתך, הספרים של ה. שילדט טובים

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

אלדד28

New member
הכי טוב היה,

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

זהיר

New member
אני מסכים שעדיף גם נכון וגם קולח

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

אלדד28

New member
אז ככה,

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

annefan

New member
כיוון שאני ההסבר שהופיע בשרשרת

אולי תסביר אתה את המוטיבציה? חשבתי שהסברתי אותה.
 

זהיר

New member
הקומפיילר מקבל חופש

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

אלדד28

New member
כמה המלצות.

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

שהתחלתי לקרוא את הספר המצויין (שציינו אותו, אבל הוא גם מצויין באמת), thinking in c++ בלי לדעת c (למרות שידעתי פסקל) והסתדרתי מצויין. אני מאמין שתסתדר גם עם ידע של vb. ונצל"ש קטן - אני רק עכשיו מסיים לקרוא את החלק הראשון של הספר (וואי אני כלכך גרוע התחלתי לפני חודש \: ). הסתכלתי על החלק השני וניראה שיש בו פרקים שאני לא רואה במבט ראשון את נחיצותם (למשל הפרק על הiostream והstring, למה אני חייב לדעת בפירוט של 150 עמודים איך הם עובדים). לכן השאלה היא האם באמת כלכך נחוץ לקרוא את הפרקים האלה ואת שאר הפרקים שמלדמים דברים ספציפיים מאוד ולא דברים כלליים בשפה?
 

אלדד28

New member
זה אפשרי בהחלט לקרוא אותו

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

אני לא מתכוון לדלג על כל השני וגם יש דברים שמאוד מעניינים אותי (הmultiple inheritance, הdesign patterns, שיטות התכנות השונות והאלגוריתמים). פשוט חשבתי שיהיה מעצבן לקרוא 150 עמודים על iostream וstring. תודה
 

eyalbd

New member
ואיך אתה מתכוון לעבוד עם קבצים

בלי לדעת IOStreams ? ומדוע להסתבך עם *char כאשר std::string מפשטת לך את הקוד?
 
למעלה