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