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

"A person is smart. People are dumb, panicky, dangerous animals, and you know it.
1500 years ago, everyone knew that the Earth was the center of the universe. 500 years ago, everyone knew that the Earth was flat. 15 minutes ago, you knew that humans were alone on this planet. Imagine what you'll "know" tomorrow."
Agent K – Man In Black

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

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

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

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

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

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

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

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

הרי לא הגיוני שאנשים ישתמשו בכפית בשביל לחצוב מנהרה בהר שבו צריך 10 נתיבים לכל כיוון. אבל מוזר שלמשל בעולם המחשבים זה הרבה פעמים מה שעושים, ואם אנשים כמוני באים ומראים עכשיו כלי שיכול לחפור את המנהרה הזו בצורה טובה יותר, כלומר 90 סנטימטר בשעה, ברוחב של 5 נתיבים,  אנשים בטחים שאני מגזים, ונשארים עם הכפית כי כולם משתמשים בכפיות. מה שיותר גרוע הוא שבתכנות הרבה אנשים מעדיפים שהקוד שלהם ירוץ ב O(1) כאשר יש 10 משתמשים וכאשר יש 1,000,000 משתמשים, והם ישקיעו אנרגיה בזה, במקום לכתוב פתרון שיעבוד ויעשה את העבודה שהם התבקשו. אחרי שהעבודה התבצאה במידה ומעוניינים אפשר אח"כ להתאים אותו למצבים של כמויות של כניסות. אבל יותר חשוב שדבר ראשון אפשר לעבוד עם הכלי, ואח"כ צריך לראות כמה אנשים מסוגלים ואם זה עונה על הכמות. כי אם מנסים להתאים לכל כמות, אז אי אפשר לצאת מזה. ואם משקיעים אנריגה בלגרום למחשב לעבוד טוב יותר, אז אנחנו מפספסים את כל הרעיון של הכלי הזה שנקרא מחשב. הרי המחשב נבנה בשביל להקל עלינו את העבודה, לא שאנחנו נקל עליו את העבודה.

"Often people, especially computer engineers, focus on the machines. They think, "By doing this, the machine will run faster. By doing this, the machine will run more effectively. By doing this, the machine will something something something." They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves."
Yukihiro Matsumoto, creator of Ruby

אבל אל תגלו את זה לאנשים, כי רובם יגידו שאתם לא מבינים שום דבר.

26 מחשבות על “אפקט העדר, או "כולם משתמשים בזה, אז סימן שיש בזה משהו"

  1. Boris Shtrasman

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

    האם מוצר צריך לשמש בפלטורמה הטובה ביותר או הפשוטה . מוכרת יותרת (אני נתקל ביותר ויותר דרישות לכתוב ב סי-שארפ כאשר בפרל זה הרבה יותר מהיר ומתאים (טיפול במחרוזות).
    מצד שני תמיד יכולים להאשים את המתכנת בבאגים שהוא נתקל בהם (זוכר את הבאג שמצאתי ב PHP ? (

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

  2. ik_5 מאת

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

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

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

  3. astupidog

    יש כמה סיבות שאני יכול לחשוב עליהן לשימוש במוצר בגלל ש'כולם משתמשים בו':

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

  4. ik_5 מאת

    בוא ניקח את X11 כדוגמה.
    * הוא כתוב רע, אז התירוץ הוא "טוב הוא ישן מאוד".
    * למרות שהוא בשימוש נרחב מאוד (אפילו ל windows יש יכולת להירץ אותו), הוא עדיין לא מתועד כמו שצריך מבחינת API והדרכים שלו (כבר אמרתי שהוא בוגדר מאוד בשנים ?)
    * הגדרות שלו הן לא כאלו פשוטות למשתמש ברמה גבוהה, אז מה אפשר לצפות ממשתמש פשוט ?
    * את X צריך לבדוק אם הוא מתאים. לא תמיד צריך מפלצת כזו בשביל תצוגה גרפית. לפעמים צריך דברים פשוטים יותר.

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

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

  5. דורון

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

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

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

    נושא התמיכה, והיכולת למצוא תמיכה , הוא נושא שלעיתים צריך לקבל משקל גדול אף יותר מאיכות של כלי כזה או אחר.
    (בדקת פעם לאן מוביל הלינק support בצד שמאל באתר של Firebird ? )

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

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

    זו דעתי , וכמובן שדעתך יכולה להיות שונה .

    – דורון

  6. ik_5 מאת

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

    אם נחזור לאילן, לפי מה שהוא כתב, אז הוא מעוניין ללמוד לעבוד עם מסדי נתונים, והוא צריך כ100 רושמות לערך.. כאשר הוא אומר שהוא הולך להשתמש ב MySQL כי *כולם* משתמשים בו. אני הצעתי את SQLite ואמרתי שאם הוא ממש רוצה מסד נתונים באותו סדר גודל, עדיף שילמד לעבוד עם Firebird.

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

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

    וואלה אני ממש מנסה לקדם רק את Firebird ומתעלם מכל דבר אחר…
    הסיבה שאני ממליץ לאנשים עם MySQL הוא עודף הבעיות שיש לו. הסיבה שאני ממליץ להפסיק לעבוד עם MySQL היא בגלל שכאשר יוצאת גרסה חדשה ל MySQL צריך ליצור לו חיבור מחודש של API כי הוא השתנה. סאן למשל (ולפניה AB) היו משחררים את MySQL Connector C++ וג'אווה.
    כל פעם אחרי שהם היו מוצאים את זה לגרסה חדשה, לפעמים אחרי ימים בודדים, היו מוציאים עוד גרסה, ואחריה עוד גרסה, כי הם בעצמם לא הצליחו להתגבר על הבעיות עבודה עם MySQL והחיבור אליו. אני "מנוי" ל RSS של MySQL Planet תנחש כמה פעמים רק עכשי ובאפריל שיחררו את MySQL Connector C++ ?
    אם אורקל לא היו קונים את סאן, סביר להניח שהייתי רואה עוד הרבה יותר חדשות על זה שם, במקום הזיהום על השיחה.

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

    כמו שכתבתי כאן:

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

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

    אז איזו כפייה יש כאן ? איפה לא הזכרתי עוד מסד נתונים (אחד לפחות נוסף מאשר firebird ?)

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

    "select * from table". זהו, זה הכל. כאשר הם צריכים לעבוד לדוגמה עם Join, הם ישקיעו לך לפעמים יומיים בשביל לגרום לזה לעבוד עם MySQL לא בגלל שהם לא יודעים לכתוב שאילתות, אלא בגלל שעד היום MySQL לא מצליחים ליצור מצב ש Join מתפקד נכון, ואתה צריך להשתמש בד"כ ב natural join ולחבר דברים ידנית.
    העיקר שאין בעיה עם המסד נתונים.

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

  7. צפריר כהן

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

    לא ברור לי למה אתה מתכוון ב"הגדרות שלו"? לדוגמה: Xvnc ו־Xnest / Xephyr לא צריכים שום הגדרה מיוחדת. הדברים מתחילים להסתבך כשהשרת צריך להתחיל להתעסק עם הגדרות חומרה. אבל זה כבר לא קשור לפרוטוקול ואת הסיבוך הזה היית מקבל גם עם מערכות תצוגה אחרות.

    היו לא מעט שטענו ש־X11 מסובך מדי וצריך להחליף אותו. הם לא התקדמו. XF86 / Xorg התקדם המון ועבר שינויים רציניים. אז אולי הם טעו?

  8. ik_5 מאת

    צפריר, תנסה להגדיר עכשיו את X עם hal ותגיד לי עד כמה זה פשוט.
    יודע מה עזוב hal. תגדיר לי אותו שהוא ישכפל את התמונה ל10 מסכים שונים שמחוברים במקביל (לא המשכיות של תמונה). תעשה את זה עם xorg.conf או עם XFree86.

    X11 וגם X10 לפניו הם דברים מאוד מסובכים. יצרו לך למשל את xcb רק בשביל שהAPI (שדרך xcb הוא רמה נמוכה יותר מ xlib), לא ידרוש כל כך הרבה תלויות.

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

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

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

    לאותו דבר בדיוק מאוד קל לעשות את זה (ועשיתי את זה) ב MS Windows למשל.

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

  9. אילן שביט

    טוב, הזכירו אותי כ"כ הרבה, אז אני חייב להגיב…
    אתחיל ואומר שהויכוח הוא ויכוח פילוסופי, וכולו נעשה ברוח טובה (ועל כך אני שמח). בחופשה האחרונה שלי התחלתי ללמוד PHP ושילבתי את הלימוד עם MYSQL. למה ללמוד PHP? כי עד היום הכרתי לעומק רק שפה אחת (Python) ורציתי להכיר שפה שתגוון את יכולות התכנות שלי (כלומר שאם אצטרך לכתוב תוכנה עם מנשק גרפי, כזו שתצטרך לתקשר עם המשתמש, אוכל להשתמש באקספלורר ככלי שיציג את הטפסים ויתקשר איתו). כמובן שבכדי להגיע למטרה צריך להכיר שפות שיודעות "לדבר" עם שרת ה- WEB ועם בסיס נתונים (כלשהו).

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

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

    לאנשים כמוני חשוב שיהיה קל להתממשק לבסיס הנתונים (פקודה אחת ב- PHP), לשלוח שאילתה באמצעות פקודה אחת נוספת, להגדיר בקלות טבלה (פקודה אחת ב- PHP, מה עוד שאת הבניה ניתן לבצע במגוון דרכים נוספות: phpmyadmin, OpenOffice Base, שורת הפקודה ועוד…), לנהל בקלות את בסיס הנתונים (כלים כמו MySQL Admin מקלים את החיים: ניתן לבצע גיבויים ולתזמן אותם בקלות בעזרת ממשקים גרפיים). אז אולי כאן הבעיה… אני מחפש קלות ופשטות, אבל מבחינתי גם אם אכנס "לבור" אני מעריך שאמצא את הפתרון ברשת (בגלל הכמות העצומה של המשתמשים יש סיכוי שמישהו נתקל בבעיה ותיעד את הפיתרון עבורה). אז אולי עידו צודק: MySQL נחות משמעותית בההשוואה ל- Firebird אבל אני מרגיש איתו מאוד בנוח.

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

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

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

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

  10. ik_5 מאת

    אילן שאלה, כאשר אתה עובד עם PHP ועם MySQL עם איזה סדרת API אתה עובד ?

    למה אני שואל ? כי יש לפחות 3 סדרות API שאני מכיר ב PHP לעבודה עם MySQL.
    האם המדריכים שמצאת מבדילים בניהם ? האם הם מסבירים לך איפה היתרון והחיסרון של כל API כזה ?
    האם בכלל ידעת שיש כמה קבוצות API ?
    בכלל כשאתה מתכנת ב PHP עם MySQL, האם אתה בוחר בגישה של תכנות מונחה העצמים של כל API (אני לא זוכר אם לכל סוגי ה API שי תמיכה עם מחלקה) ?

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

    ד"א ל SQLight יש כלי שאני מאוד התרשמתי ממנו ויצא לי לעבוד איתו כמה פעמים בשם SQLite Manager שמתחבר ל Firefox, האם ניסית אותו ?

    מה המטרה של הלימוד שלך ? האם זה ללמוד לעבוד עם מסדי נתונים, או האם לעבוד עם מידע ובמקרה אתה משתמש במסד נתונים ?

    למה אני שואל ? כי הגישה שאתה מתאר עכשיו מדברת על להשתמש במידע בשביל מסד נתונים.

    סתם כמה נקודות. בכל מקרה בהצלחה בלימוד.

  11. צפריר כהן

    הגדרת Xorg עם HAL?

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

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

  12. ik_5 מאת

    בוא נראה למה:
    1. ליצור Widget משל עצמך (אם אתה צריך, רוצה)
    2. יש דברים שגם אם תשתמש ב GTK/QT עדיין תהיה צריך להשתמש בכל מיני דברים של xlib/xcb. כלומר הם חוסכים לך המון עבודה, אבל לא את הכל.
    3. כי כמו שניסית להוכיח לי בפרטי, השימוש ב X הוא הכי בשל מכל מערכות הגרפיקה האחרות שקיימות בלינוקס/יוניקס. מה לעשות שה API של Windows והְַן של X11 אומנם דומים, אבל עדיין מאוד שונים בשביל לבנות בסיס קוד שונה במידה ואתה צריך להוסיף תמיכה לדברים שלא קיימים (ראה סעיף קודם).

    4 האמירה היתה כזו:

    "
    יש כמה סיבות שאני יכול לחשוב עליהן לשימוש במוצר בגלל ש’כולם משתמשים בו’:

    * יהיה יותר קל למצוא אנשים שמבינים במוצר
    * אם הרבה אנשים משתמשים בו אז סביר להניח שיש יותר נסיון במצבים שונים ומשונים והסיכוי שתקרה איזו תקלה לא צפויה בגלל באג במערכת או בגלל ארכיטקטורה מסויימת יותר נמוך.
    * יש יותר תיעוד, דוגמאות, מדריכים, HOWTO, benchmarks וכו’
    * לא צריך לבדוק אם המוצר מתאים – אם אני צריך עכשיו מוצר מסויים ואין לי זמן להתחיל לבדוק איזה מוצר מתאים, אני כנראה ייבחר במוצר הכי פופולרי."

    אז הצגתי שזה לא תמיד נכון בכל מצב.

  13. אילן שביט

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

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

    לגבי API: אין לי מושג ואני גם לא רוצה לדעת (בשלב זה). עידו: האתר שלך (זה שאנחנו מחליפים בו דעות כרגע) משתמש ב- My-SQL. איזה בעיות בדיוק הוא בדיוק עשה לך? באיזה API הוא משתמש? הערכה שנקראת LAMP או WAMP מכילה ארבעה מרכיבים שמתקשרים ומדברים אחד עם השני מבלי שהתכנת הממוצע צריך להתערב בהגדרות ולהגדיר API מסויים. התכנות שלמדתי עד עכשיו הוא לא ברמת Low Level (ולדעתי לא אמור להיות כזה). אתה מתכנת ברמה מופשטת והדברים מתבצעים מאחורי הקלעים (בין הרכיבים השונים של LAMP). אם התכנות לא היה כ"כ פשוט ונוח LAMP לא היה צובר פופולריות כ"כ גדולה

  14. ik_5 מאת

    אילן, אתה ננראה לא מבין מה זה LAMP לפי מה שכתבת עכשיו.

    1. PHP היא שפת תכנות. בתוכה היא מכילה ספריות שלמות של לעשות דברים.
    2. בתוך הספריות היא מכילה 6 ספריות שונים לטיפול ב MySQL כאשר 4 מהם הם ספריות כלליות לטיפול במסד נתונים, ו2 מהם הם טיפול ישיר ב MySQL.
    3. יש לך את PHP PEAR (לא קשור ל LAMP) אשר מספק לך למשל עוד רמת API גובהה יותר לעבוד עם מסד הנתונים, וזה מספק לך API שביעי לעבודה עם MySQL

    ככה שנראה לי שיש לך הרבה מה ללמוד על PHP. בהצלחה.

  15. אילן שביט

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

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

    אני מעריך שתכנתי וורדפרס/phpbb ומערכות CMS רבות אחרות מכירים PHP ו- MYSQL לא פחות מימך ובכל זאת בחרו בפלטפורמה הזאת. אז לכולם אסור "לחשוב שונה" ורק לך מותר?

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

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

  16. ik_5 מאת

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

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

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

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

    3. אני מעולם לא ניהלתי את WordPress וגם כאן אני לא מנהל אותו, אני רק יודע שב90% ממערכות ה wordpress שעבדתי איתם, היו בעיות עם מסד הנתונים עצמו באיזשהו שלב (למעשה רק 2 מערכות wp שאני מכיר לא נתקלו בבעיות).
    במקום הזה שיש אירוח, אחת לכמה זמן יש "זמן תחזוקה" שבו השירות אינו פעיל. אבל אם לא רושמים פרט לשידרוגים מה הם עושים, אז אני לא יכול לדעת אם כאן יש בעיות עם מסד הנתונים.

    4. אני בכוונה אקח את הבחירה שלך של "כולם משתמשים בזה". אם עכשיו אני אכתוב את המערכת קוד פתוח המדהימה ביותר שידע האדם (בכלל בלי קשר לקוד פתוח), אבל הוא יעבוד עם כלים שהם לא הכי נפוצים (נגיד איזו נגזרת של MySQL -> יש כאלו, בשביל שלא תגידו שאני מזכיר מסדי נתנים אחרים). האם זה יגרום למוצר מסויים להצליח יותר או פחות ?
    בד"כ התשובה (מניסיון של מספיק שנים בעולם הטכנולוגי) שזה לא מספיק. אתה צריך הייפ סביב מוצר. אם יש לך מספיק הייפ ובאז סביבו, הסיכוי שאנשים יסתכלו עליו גבוהה יותר מאשר אם אני אגיד שהמערכת עובדת מצויין, פותרת את רוב בעיות המחשוב בעולם, אבל משתמשת בכלים לא נפוצים.
    זו הסיבה שהרבה מוצרים תומכים לך ב Internet Explorer, זו הסיבה שהרבה מפתחים לך ב #C, ג'אווה וכו'. לא בגלל שהן הטכנולוגיות המתאימות אלא בגלל שאם אתה תשמע עכשיו על תוכנה שכתובה באיקון, אתה תרים גבה ותגיד "מה לעזאזל רוצים ממני", אבל אם תשמע שהתוכנית כתובה ב ++C, אתה תחשוב שזה דבר גאוני.

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

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

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

    אתה מוזמן שוב לקרוא את הדברים באופן כללי בכל הפוסטים ולא לעשות ריפרוף ואולי אז תראה שמה שאני רואה, שונה ממה שאתם רואים 🙂

  17. דורון

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

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

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

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

    – דורון

  18. אילן שביט

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

    מוצרים טכניים לא מנתחים, כפי שאתה כותב, רק עם כלים ומושגים טכניים. למה לא כולם מתכנתים באותה שפה (למרחב בעיות מסוג מסויים)? מיקרוסופט פיתחה את Visual Studio אבל מאפשרת לכל אחד לתכנת בשפה שהוא יותר מחובר אליה: #VB, C#, Java# כשהתוצר הסופי זהה בכל המקרים. אני התחברתי ל- MySQL (ושוב אני לא סטרטאפ ולא אמור להפסיד מאוד אלפי דולרים עם המערכת למטה למספר שעות…), אבל אני מעריך (בניגוד אליך) שאני לא אתקל בשום בעיה אם אשתמש במס"ד זה בפרוייקטים הקטנים שלי.

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

  19. אבים

    סליחה שאני מצטרף מאוחר אבל לדעתי החמצתם את אחת הסיבות הגדולות לתופעת העדר: מקבלי ההחלטות מכסים את התחת. בדיוק כמו בדוגמה שנתת עידו על פיתוח התוכנה הג'אווה לעומת דלפי. המשקיעים רצו לכסות את התחת כי דלפי פחות סקסית כשמנסים לגייס כסף (למרות שעם ההצלחה של צ'קפוינט קשה להתווכח-לפחות הגירסאות הראשונות שלהם היו כתובות דלפי). ולזה לא רק המשקיעים. גם מנהלי פיתוח מקובעים וגם מתכנתים. הם מקטינים את הראש כי זה נוח יותר. איך אמרו פעם בעולם הIT:"אף אחד לא פוטר כי קנה ציוד של IBM".
    עבדתי בחברה שפיתחה מערכת מבוזרת שהיתה בעלת פרוטוקול פנימי לתקשורת בין המרכיבים של המערכת. הפרוטוקול מומש בC++ בג'אווה ובSOAP. כאשר היתה דרישה לפתח רכיב לMACOSX פיתחו תוכנה שמתקשרת עם הSOAP מה שגרם לבעיות של אבטחה וביצועים ירודים. אני הצעתי לממש את הרכיב בג'אווה משום שלעשות פורטינג למק יהיה פשוט ויתן ביצועים טובים יותר ויפתור את בעיות האבטחה שנפתרו כבר במימוש ג'אווה. מישהו הקשיב לי?

  20. ik_5 מאת

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

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

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

    אבל שפת תכנות כדוגמת PHP, היא להיות המפעל שמייצר את המכוניות. עדיין אתה לא צריך לדעת איך עושים פלסטיק, יציקת ברזל וכו', אבל אתה צריך לדעת איך לתכנן את המכנית ואיך להרכיב אותה.
    PHP ידועה בקלות ההתחלתית שלה. כלומר בשביל להציג משהו על המסך עם פיתוח של HTTP כל מה שצריך זה 3 שורות קוד. 2 של פתיחה וסגירה של טאג, ו1 שמדפיס על המסך. אין יותר פשוט מזה תאמין לי (טוב יש, אבל בשביל זה צריך ללמוד יותר).
    הבעיה היא שזה יוצר מצב שאתה מרגיש שאתה לא צריך ללמוד כלום. זה פשוט קל מאוד לעשות דברים. מה יקרה אם מחר יש לך SQL Injection, Cross site Scripting במקרים הטובים, או דרך בשבילי להריץ shell ולקבל גישה בגלל שכתבת קוד לא טוב במערכת ? אתה מבין, זו הסיבה שבהתחלה הלכתי על סכין, כי אם אתה לא יודע להתשמש בכלים שאתה משתמש, אתה חותך את עצמך בצורה כזו שלפעמים תאבד לגמרי את היד.
    אם מתכנת חובב ובינוני זה לא מתעניין בדברים כאלו, אז שלא יתקרבו לתכנת. בניגוד לכתיבת פוסט בבלוג, לתכנת זה ליצור את הבלוג. זה נחמד שאתה מתחבר לשפה, וזה נחמד שאתה מתחבר למסד נתונים, אבל זה שאתה חושב שלך זה לא יקרה, זה אותו הדבר אם עכשיו תיסע במקום שאי אפשר לסוע יותר מ20 קמ"ש, תיסע שם 120 קמ"ש. אתה נכראה תיצור תאונה גם אם אתה לא מעורב בה ישירות, אתה יכול לגרום למישהו אחר להיפגע רק בגלל שאתה לא צייטת לחוקים.
    זה ההבדל בין שפת תכנות לבין תוכנה שאתה משתמש. וחשוב שתבין את זה. זו אחת הסיבות (הפחות חשובות) שאני לא אוהב את PHP. היא נותנת לך יותר מידי דרכים לפגוע בעצמך בלי שיהיה אכפת לך, כי הצלחת להשיג מטרה ראשונית של הדפסה על המסך של דף HTML תוך שימוש ב HTTP.

    דורון: הסיבה שאני אומר לא לעבוד עם MySQL היא בגלל הבעיות הרבות שלו, לא בגלל שאני אישית לא סובל אותו. לקח לי הרבה שנים להגיע להבנה שהבעיה היא בכלי ולא במפעילים. ואחרי שהבנתי שהבעיה בכלי, והתחלתי לחפש אם אני היחיד, גיליתי לתדהמתי שהרבה אנשים (בעיקר מאוד מקצועיים שמה שהם שחכו, אני עוד לא יודע שאני צריך לדעת) הגיעו להבנה הזו הרבה יותר מהר ממני אחרי שהם נתקלו באותן בעיות, או בבעיות אחרות לגמרי. לדעתי האישית המסד נתונים הזה לא מתאים לאף אחד, לא ל"חובבן" (התרגום שלי זה אדם שמתעסק בתור תחביב, ואז גם אני נמצא בהגדרה הזו) או אם זה "מקצוען" (אדם שמקבל כסף על אותה עבודה שהוא יכול לעשות גם בתור תחביב).
    זה לא משנה מה הדבר שאתה יוצר. זה לא משנה אם יש לך לקוחות. אם זה משהו אישי בשבילך או משהו בשביל כל היקום. הוא לא מתאים כי הפיתוח והגישה של מי שהחזיקו אותו בעייתית. ההיסטוריה של MySQL גם מראה את הבעיות, וכמו שהסברתי לגבי PHP, גם כאן הקלות של ליצור טבלה ולעבוד איתה זה לא מה שחשוב, מה שחשוב זה אמינות של מידע (דבר שלא קיים כמעט בכלל אם משווים לרוב מסדי הנתונים האחרים בעולם [שאני מכיר לפחות]), ומה שחשוב זה היכולת להתמודד עם המסד נתונים לעשות מניפולציה למידע (כלומר לשאוב מידע בצורה שתחסוך ממך עבודה בשלב מאוחר, הזנת מידע בצורה שמתאימה למה שאתה צריך, שינוי מידע לפי מה שאתה צריך וכו'). כל הדברים האלו לא עובדים וקיימים כמו שצריך באותו מסד נתונים. אבל הגישה של "לי זה לא יקרה" או "לי זה לא קרה" היא זו שמשחקת. וכשזה כבר לא העניין אז העניין הוא "בטח מישהו כבר התמודד עם זה".
    אבל למה להכניס ראש בריא למיטה חולה ? למה לא להיכנס למיטה אחרת שאתה יודע שכמות האנרגיה כשיש בעיה תהיה קטנה יותר ? אז כן גם PostgreSQL וגם Firebird ואפילו אורקל דורשים ממך יותר עבודה בשביל להגדיר טבלאות וכלי עבדה בתוך המסד נתונים, אבל ברגע שאתה מסיים את זה, האמינות של מה שהתפקיד של המסד עולה הופכת אותם לטובים יותר. לא בגלל שזה תותח מול רובה, אלא בגלל שהם עובדים נכון, וMySQL לא. אפילו MS Access עובד יותר טוב ונכון מ MySQL והוא בכלל מחולל ישומים בעיקרון.

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

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

    כשהתעסקתי באבטחת מידע, גיליתי נתון מאוד מעניין. למעלה מ90% מהבעיות אבטחה הרציניות ביותר נבעו מעצם העבודה שאיכשהו C ו/או ++C היו קשורים לכלי. אם זה בגלל שהמפרש/קומפיילר נכנתב בשפה, או בגלל שהתוכנית עצמה נכתבה בשפות האלו, עצם זה שהשפות היו מעורבות איכשהו הבעיה התקיימה, ואם טכנולוגיה אחרת היתה נמצא בשימוש שלא קשורה ל C או ++C עצם בעית האבטחה עצמה (למרות שהבאג היה נשאר, אבל לא היה ניתן לנצל אותו) לא היתה מתרחשת.
    זה לא מפריע לשוק להמשיך להשתמש בכלים האלו. אבל זה רק מראה שאנחנו נמצאים ימי ביניים (כמו שכתבתי פעם בפוסט אחר) מבחינה טכנולוגית בה הכל סובב סביב משהו אחד ולא סביב מה שצריך. יום אחד כולם יתעוררו, זה יכול להיות עוד 10 שנים וזה יכול להיות עוד 500 שנה, אבל יום אחד כולם יתעוררו ויבינו משהו שאני הבנתי כבר עכשיו, וזה בד"כ קורה כשכבר מאוחר מידי.

  21. פינגבק: לראות שונה – ההרצאות בTED « לראות שונה

  22. פינגבק: החוויה של אפל « לראות שונה

  23. פינגבק: בחירה שכלתנית | לראות שונה

  24. פינגבק: דרך קצרה שהיא ארוכה ודרך ארוכה שהיא קצרה | לראות שונה

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s