איך לחשוב כמו מתכנת - שיעורים בפתרון בעיות

אם אתה מעוניין בתכנות, ייתכן שראית את הציטוט הזה בעבר:

"כל אחד במדינה הזו צריך ללמוד לתכנת מחשב, כי זה מלמד אותך לחשוב." - סטיב ג'ובס

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

בעיקרו של דבר,הכל על דרך יעילה יותר לפתרון בעיות .

בפוסט זה, המטרה שלי היא ללמד אותך ככה.

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

למה זה חשוב?

פתרון בעיות הוא המטא מיומנות.

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

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

  1. נסה פיתרון.
  2. אם זה לא עובד, נסה עוד אחד.
  3. אם זה לא עובד, חזור על שלב 2 עד שיהיה לך מזל.

תראה, לפעמים יהיה לך מזל. אבל זו הדרך הגרועה ביותר לפתור בעיות! וזה בזבוז זמן עצום ועצום.

הדרך הטובה ביותר כוללת א) מסגרת וב) תרגול.

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

יש מסגרת

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

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

שאלתי אותם את אותן השאלות, ונחשו מה? התשובות שלהם היו די דומות!

בקרוב, גם אתם תכירו אותם.

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

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

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

להלן השלבים:

1. להבין

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

איך לדעת מתי אתה מבין בעיה? מתי אתה יכול להסביר את זה באנגלית רגילה.

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

רוב המתכנתים מכירים את התחושה הזו.

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

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

2. תכנן

אל תצלול ישר לפיתרון ללא תוכנית (ואיכשהו תקווה שתוכל לבלבל את דרכך). תכנן את הפתרון שלך!

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

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

כדי להשיג תוכנית טובה, ענה על שאלה זו:

"בהינתן קלט X, מהם הצעדים הדרושים להחזרת תפוקה Y?"

Sidenote: למתכנתים יש כלי נהדר שיעזור להם בזה ... הערות!

3. מחלקים

שים לב. זה הצעד החשוב מכולם.

אל תנסה לפתור בעיה אחת גדולה. את \ ה תבכה \ י.

במקום זאת, פרקו אותו לבעיות משנה. הרבה יותר קל לפתור את בעיות המשנה האלה.

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

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

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

חיבור כל "פתרונות המשנה" שלך ייתן לך את הפתרון לבעיה המקורית. מזל טוב!

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

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

4. תקוע?

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

ראשית, קחו נשימה עמוקה. שנית, זה הוגן.

אל תדאגי, חבר. זה קורה לכולם!

ההבדל הוא שהמתכנתים / פתרונות הטובים ביותר הם סקרנים יותר לגבי באגים / שגיאות מאשר מגורה.

למעשה, הנה שלושה דברים שיש לנסות כשאתם מתמודדים עם גחמה:

  • ניפוי שגיאות: עבור צעד אחר צעד בפתרון שלך בניסיון למצוא היכן טעית. מתכנתים קוראים לזה ניפוי באגים (למעשה, זה כל מה שמבצע באגים).
"אמנות הבאגים היא להבין מה באמת אמרת לתוכנית שלך לעשות ולא מה שחשבת שאמרת לה לעשות." "- אנדרו זינגר
  • הערכה מחודשת:קח צעד אחורה. הסתכל על הבעיה מנקודת מבט אחרת. האם יש משהו שניתן להפשט לגישה כללית יותר?
"לפעמים אנו הולכים כל כך לאיבוד בפרטי הבעיה, עד שאנחנו מתעלמים מעקרונות כלליים שיפתרו את הבעיה ברמה כללית יותר. [...] הדוגמה הקלאסית לכך היא כמובן סיכום של רשימה ארוכה של מספרים שלמים עוקבים, 1 + 2 + 3 + ... + n, שגאוס צעיר מאוד זיהה במהירות היה פשוט n (n + 1) / 2 ובכך להימנע מהמאמץ הצורך לבצע את התוספת. - ג 'ירדן בול

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

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

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

תרגול

אל תצפו להיות נהדרים אחרי שבוע בלבד. אם אתה רוצה להיות פותר בעיות טוב, לפתור הרבה בעיות!

תרגול. תרגול. תרגול. זה רק עניין של זמן עד שתזהו ש"בעיה זו ניתנת לפתרון בקלות ".

איך להתאמן? יש אפשרויות מחוץ לוואזו!

חידות שחמט, בעיות במתמטיקה, סודוקו, גו, מונופול, משחקי וידאו, cryptokitties, bla ... bla ... bla ....

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

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

האם זה אומר שעליך פשוט לשחק במשחקי וידאו? בכלל לא.

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

אז מה שאתה צריך לעשות זה למצוא פורקן לתרגול. משהו שמאפשר לך לפתור מיקרו-בעיות רבות (באופן אידיאלי, משהו שאתה נהנה ממנו).

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

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

סיכום

זה הכל אנשים!

עכשיו אתה יודע טוב יותר מה המשמעות של "לחשוב כמו מתכנת".

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

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

פיו ... די מגניב נכון?

לסיום, אני מאחל שתיתקל בבעיות רבות.

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

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

עכשיו, לך לפתור כמה בעיות!

ומזל טוב?

תודה מיוחדת ל C. Jordan Ball ו- V. Anton Spraul. כל העצות הטובות כאן הגיעו מהן.

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