11 ביוני 2019

ביקורת על הקורס: מבוא למדעי המחשב ושפת Java‏ של האוניברסיטה הפתוחה

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

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

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

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

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



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

ההמלצה שלי היא: לברוח !

סתם.

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

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

אם אתם ומתימטיקה "זה לא זה" והיה לכם קשה ב-4 יחידות, תתכוננו לחיים קשים.

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

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

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

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

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

אלה נושאים שגם מתכנת ממוצע יכול לעבוד כמה שנים בלי להיתקל בהם.

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

כאן עולה השאלה - אז למה צריך את זה ? 

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

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

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

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

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

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

אז למה הקושי אינו הוגן ?


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

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

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

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

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

- כי לא מעודדים עבודה עם IDE, בוודאי שלא תומכים בבעיות מחוץ לתוכנה המומלצת של הקורס שנוחה לעבודה כמו Notepad. 

- כי לא מרשים לחלוק מידע שכולל אפילו לא חלקי פתרון בפורומים.

- כי לא מפרסמים פתרונות מבחנים ועבודות של שנים שעברו בתירוץ עלה תאנה ש"תמיד אפשר להריץ במחשב ולבדוק"

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

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

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

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

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

- כי הספר של הקורס לא מסייע בכלל וכולל חומר שאינו רלוונטי כלל לקורס.


אז איך כן צריך להיראות קורס במבוא ?


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

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

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

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

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

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

- יש לבנות אתר עם הסברים ודוגמאות לפי נושאים שרלוונטים לקורס בדומה ל-GeeksforGeeks.

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

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

- יש לבנות מערכת נוחה לשאול שאלות, עם אפשרות נוחה לחיפוש. בדומה ל-Stackoverflow

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

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

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

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


כן, אבל עד שזה יקרה (כנראה בחלום) מה אפשר לעשות ?


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

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

- השיגו את הרצאות המצולמות של שי תבור או לחילופין הירשמו לאתר שלו (חלק מההרצאות בתשלום)

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

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

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

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

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

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

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

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

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

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


בהצלחה !





23 תגובות:

  1. אחלה מאמר,תודה רבה !

    השבמחק
  2. נשמע סבבה אז מה אתה ממליץ על מישהוא שרוצה לתכנת אבל לא רוצה תואר

    השבמחק
  3. הדג (קורס הזה) מסריח מהראש (ראשי הקורס)27 בנובמבר 2023 בשעה 16:26

    כל מילה בסלע. מאיר עיניים לחלוטין!

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

    השבמחק
  5. מדינת ישראל נגד הקורס מבוא למדמח27 בנובמבר 2023 בשעה 16:50

    מסכים בכל רמ"ח ושס"ה

    השבמחק
  6. תה ירוק בטעם אנדרואיד27 בנובמבר 2023 בשעה 16:53

    כן, צוות הקורס שם זוועה.

    השבמחק
    תשובות
    1. כריכה חומה של מחברת27 בנובמבר 2023 בשעה 16:56

      כן, לגמרי. מאפיה שם חוגגת...

      מחק
    2. נעל קרוקס על ראשם27 בנובמבר 2023 בשעה 16:58

      ינעלו שם עם חמאס...

      מחק
  7. שומר נפשו ירחק27 בנובמבר 2023 בשעה 17:15

    שומר נפשו ירחק מטינופת הקורס הזה

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

    השבמחק
  9. נשמע מסמר שיער. מומלץ למזוכיסטים.

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

    השבמחק
  11. אמת ויציב. קורס זוועה עם צוות על הפנים.

    השבמחק
  12. זה נכון שהם גם שונאים דתיים?

    השבמחק
  13. אחלה שמות יש כאן28 בנובמבר 2023 בשעה 20:21

    כל מילה אמת. תודה רבה!!

    השבמחק
  14. נשמע מזעזע. מה אני אגיד.

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

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

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

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

      מחק
  17. מסכימה עם כל מילה

    השבמחק
  18. מסכימה עם כל מילה ההתנהלות בקורס לא נותנת חשק שמתקשרים לרכזת הקורס הכל נענה לא בצורה נעימה ובסוף אתה לא יוצא עם תשובה.

    השבמחק