כך תבנו שאלה מצויינת ב-Stackoverflow (על בסיס 10,000 שאלות)

מהי הדרך הטובה ביותר לניסוח שאלות במטרה לקבל תשובות טובות ומהירות יותר ב-StackOverflow? הנה המסקנות שלנו אחרי מחקר שהקיף יותר מ-10,000 שאלות.

img1_01

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

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

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

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

כמה שיותר קצר – יותר טוב

התבנית החזקה והברורה ביותר שראינו בכל השאילתות והסקריפטים שהרצנו הייתה זו: ככל שהשאלה קצרה יותר, כך גדלה הסבירות שתקבלו תשובה מועילה ומהירה יותר. אורך השאלות הממוצע של “שאלות טובות” היה סביב 1,200 תווים (3-4 פסקאות קצרות), בעוד שאורך שאלה ממוצעת הוא 1,800 תווים. ההשפעה החזקה ביותר של אורך השאלה הייתה על כמות הצפיות וההצבעות, שם האורך הממוצע של השאלות המובילות בשני המדדים קצר ב-50% מאורכן של שאלות סטנדרטיות.

01_length

הפרמטר המשפיע ביותר – המוניטין של השואל

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

כמה דוגמאות: בתוך רשימת 100 שאלות הג’אווה שקיבלו את התשובות הטובות ביותר, היה המוניטין הממוצע של השואלים 4,500 נקודות. לשם השוואה, המוניטין הממוצע של ‘שואלים’ בג’אווה היה 1,500 נקודות.

המוניטין הממוצע של שאלות רובי שקיבלו תשובה בתוך 15 דקות היה 2,400, לעומת מוניטין ממוצע של 1,300 לשאלות שקיבלו מענה בתוך 24 שעות.

02_highRep

האם להשתמש בקטעי קוד?

שילוב קטעי קוד בשאלה הוא אחד הפרמטרים שבדקנו ונתנו תשובה ברורה מאוד בכל שפות התכנות, אך התוצאות היו בלתי צפויות. נראה ששאלות המכילות קטעי קוד קיבלו תשובות טובות יותר – כלומר מצד משתמשים עם מוניטין גבוה יותר ושקיבלו יותר הצבעות. כך ,לדוגמא, 87% מהשאלות שנגעו לשפת Python שקיבלו תשובות מאנשים עם מוניטין גבוה מאוד כללו קטעי קוד לעומת הממוצע שהוא 64% . שאלות ברובי העלו תמונה דומה – 91% מהשאלות המובילות כללו קטעי קוד, לעומת 79% בשאלות הממוצעות.

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

השתמשו בפחות תגיות

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

מהמידע שאספנו לא נראה כי שעת הפרסום משפיעה על התוצאות. “שעות השיא” של StackOverflow הן בדרך כלל בין 11 בבוקר ל-5 אחה”צ שעון UTC. בערך 50% מהשאלות באתר נשאלות בשעות הללו. שאלות שנשאלו בשעות הללו מקבלות תשובה מהירה קצת יותר (בערך ב-10-5%), אך התשובות לא היו איכותיות יותר. שעת פרסום השאלה לא משפיע על קריטריונים כמו הצבעות, צפיות וכמות התשובות.

איך לנסח את השאלה – המדע של המילים

השתמשו בשם שפת התכנות בכותרת

אחד הסקריפטים המרכזיים בהם השתמשנו נבנה במטרה לנתח את הכותרות. בנינו קבוצות של מילים וחילקנו אותן על פי מונחי תכנות (כמו string, array, function), שפות / נושאים (כמו Ruby, MySQL, C#) מילים חיוביות / שלילית (can’t, worst, best, fail) ועוד. המסקנה המובהקת ביותר – אם אתם רוצים לקבל תשובות מהירות וטובות יותר, השתמשו בשם הנושא שעליו אתם שואלים בכותרת השאלה. יש לכם שאלה בנושא Python? כתבו Python בכותרת. כך, לדוגמא, 36% מהשאלות הקשורות לנושאי Ruby שנענו בתוך 15 דקות כללו את המילה Ruby בכותרת. 58% מהשאלות הנצפות ביותר שעסקו ב-Java הכילו את המילה Java בכותרת.

לא משנה אם אתם מנסחים את הכותרת כשאלה או לא

הנה ממצא שהפתיע אותי: ניסוח הכותרת כשאלה לא משפיע על מהירות התשובה או איכותה. לדוגמא:

“Add the same method to multiple classes”

אל מול:

“How to add the same method to multiple classes?”

ישיגו את אותן התוצאות.

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

כותרת שמעידה כי משהו לא עובד, או שואלת לגבי בעיה או שגיאה, תקבל לרוב תשובות מהירות ואיכותיות יותר.

לדוגמא:

Rspec stub doesn’t work

Why is bundler unable to reach http://rubygems.org?

Can’t import my own modules in Python

נראה ששימוש במילים המעידות על כישלון (cannot, unable, fails, error) מובילות לתשובות טובות יותר. לדוגמא, 22% מהשאלות המובילות ב-Ruby כללו ביטוי שלילי בכותרת, בשעה שהממוצע בשאלות סטנדרטיות היה 14%.

להשתמש ב-X או ב-Y

השוואה של טכנולוגיות או מתודולוגיות שונות היא מתכון טוב לקבל תשובות איכותיות יותר. הסוג הזה של השאלות היה חלק משמעותי בכל דירוג “שאלות מובילות” שהרכבנו במחקר.

הנה כמה דוגמאות:

Why shouldn’t I use PyPy over CPython if PyPy is 6.3 times faster?

Why is char[] preferred over String for passwords?

Why are String compariStackOverflowns (CompareTo) faster in Java than in C#?

בואו נעשה את זה מעניין

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

Why is processing a StackOverflowrted array faster than an unStackOverflowrted array? (6960 הצבעות)

Why does changing 0.1f to 0 slow down performance by 10x? (774 הצבעות)

Why does parseInt(1/0, 19) return 18? (632 הצבעות)

כך ערכנו את הניסוי

החלטנו להתמקד בשאלות הקשורות לשפות תכנות שונות, במטרה להימנע משאלות כלליות (כמו “איך אני הופך למתכנת טוב יותר” או “איזו שאלה לשאול בראיונות עבודה”) או משאלות הומוריסטיות אשר בדרך כלל מקבלות ציונים גבוהים מאוד, אך לא מייצגות את הבעיות הטיפוסיות בפניהן ניצבים המפתחים. התמקדנו ב-6 שפות תכנות – JavaScript, Ruby, C++, C#, Java ו-Python. שלוש השפות הראשונות שניתחנו – Java, Ruby ו-Python הראו תוצאות דומות מאוד זו לזו, אז החלטנו לוותר בשלב זה על ניתוח השלוש האחרות.

התמקדנו בשאלות שנשאלו ב-StackOverflow החל ב-2011.

הרצנו 8 שאילתות שונות ומיינו את השאלות לפי: הצבעות, כמות התשובות, כמות ה-Favorites, הזמן שלקח עד קבלת התשובה הראשונה, השעה שבה פורסמה השאלה, שאלות שקיבלו תשובה על ידי משתמשים עם מוניטין גבוה, שאלות שנשאלו על ידי משתמשים עם מוניטין גבוה, כמות צפיות. לאחר מכן ערכנו השוואה בין 300 השאלות המובילות בכל אגף עם 300 השאלות שקיבלו ניקוד ממוצע בפרמטר שהתמקדנו בו. כמובן שלא מדובר כאן במדע מדויק ולא קיים “מתכון מדעי” לקבלת תשובות מעולות. עם זאת, כל התבניות שהוזכרו כאן חזרו על עצמן בכל שפות התכנות והפרמטרים השונים שבדקנו.

לצפייה בכמה מן השאילתות שהרצנו לחצו כאן.

תודה לדרור כהן מ-CodersClan על העזרה, ול-John Woo, אשר הצדיק את 120,000 הנקודות שלו ב-StackOverflow ועזר לנו לחבר את השאילתות.

הפוסט פורסם לראשונה באנגלית בבלוג של Takipi.

טל וייס

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

הגב

16 תגובות על "כך תבנו שאלה מצויינת ב-Stackoverflow (על בסיס 10,000 שאלות)"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

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

סידור לפי:   חדש | ישן | הכי מדורגים
אלון
Guest

מעולה, מעניין מאוד

attilafalcon
Guest

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

תודה

דורון מועלם
Guest

אם הכתבה לא מועתקת מאיזה אתר מחו”ל אז שאפו על היוזמה..

איריס שור
Member

הי דורון, הכתבה היא מחקר של טקיפי (חברה ישראלית). לא מועתקת מאתר בחו”ל :)

אלון
Guest

מעניין – תודה!

תומר
Guest

כתבה מעניינת ומועילה…

אריק
Guest

רשום 6 שפות תכנות- ” Java, Ruby, C++, C#, Java ו-Python”

אני ספרתי Java פעמיים…

איריס שור
Member

היה אמור להיות JavaScript. תוקן, תודה

אדם
Guest

“תשובה איכותית הוגדרה ע”פ … מספר התשובות לשאלה”?

רועי
Guest

כמובן שהתכוונתו ל”שאלה איכותית”…

אלון
Guest

לתרגם ולהפיץ.
זה יכול לעניין אחרים.

תמר
Guest

אם בדקתם שאלות החל משנת 2011, והתייחסתם גם לנתון של הreputation, אז בעצם הreputation של השואל והעונה היה שונה לפני שנתיים כשהם שאלו/ענו על השאלה…

הידוע גם כנקודהגגג
Guest
הידוע גם כנקודהגגג

באיזשהו שלב הרצתם replace ל so ב StackOverflow על כל הטקסט בכתבה, זה גרם לכמה שגיאות…מביניהן, unStackOverflowrted array היא המועדפת עלי ללא ספק!

אבי
Guest

גדול. שמתי לב לזה, אבל המח שלי לא הצליח לעשות את העוד שלב של הרפלייס, ובטמטומי חשבתי שזה משהו מה-API של SO :)

אבי
Guest

יופי של חשיבה, יופי של מחקר. הייתי שמח למחקר דומה על האתר programmers שלהם, שיגלה לאילו שאלות הם עושים downvoting. עשו לי עד שנעלבתי ועזבתי את החמורים האלו :)

הטיקפי הזה, אתם חושבים להפעיל אותו גם עם C# מתי שהוא?

Yanir
Guest

מעניין מאוד

wpDiscuz

תגיות לכתבה: