מה זה מבנה נתונים ולמה זה חשוב¶
אם אתם לומדים לתכנת כבר כמה חודשים, בטח נתקלתם במונח "מבני נתונים" ומיד הרגשתם משהו נכווץ בבטן. זה נשמע כמו נושא אקדמי, יבש, עם המון תיאוריה שאין לה שום קשר למה שאתם באמת רוצים לעשות - לבנות אתרים, אפליקציות, בוטים. אז בואו נוריד את הפחד הזה כבר עכשיו.
מבנה נתונים הוא בסך הכל דרך לארגן מידע במחשב. זהו. אין כאן שום קסם. כל תוכנה שאתם כותבים מחזיקה מידע - שמות משתמשים, מוצרים בעגלת קניות, הודעות בצ'אט - ואיך אתם בוחרים לארגן את המידע הזה משפיע ישירות על כמה קל, מהיר וחכם הקוד שלכם יהיה.
דוגמה מהחיים האמיתיים¶
תדמיינו שאתם צריכים לארגן ספרייה. אתם יכולים לזרוק את כל הספרים לערימה אחת על הרצפה, או לסדר אותם לפי א"ב על מדפים, או לשמור קטלוג נפרד שמצביע לאיפה כל ספר נמצא. כל שיטה היא בעצם "מבנה נתונים" שונה לאותו מידע - הספרים. וכל שיטה טובה למשהו אחר. הערימה מהירה לזרוק אליה ספר חדש, אבל איומה כשמחפשים ספר ספציפי. הסידור לפי א"ב איטי יותר לארגן בהתחלה, אבל הופך חיפוש למהיר בטירוף.
מחשב עובד בדיוק באותה לוגיקה. משתנה בודד, כמו name = "עמית", זה כמו ספר אחד ביד. אבל ברגע שיש לכם עשרות, אלפי או מיליוני פריטי מידע, הבחירה איך לארגן אותם הופכת לקריטית.
למה זה לא רק תיאוריה¶
הנה החלק שהקורסים לפעמים שוכחים להסביר: מבני נתונים הם לא נושא נפרד מהתכנות שאתם כבר עושים. אתם כבר משתמשים בהם כל יום בלי לשים לב.
- כשאתם כותבים
listבפייתון, אתם משתמשים במבנה נתונים בשם מערך דינמי. - כשאתם שומרים מידע לפי מפתח וערך, כמו
{"עמית": 28}, אתם משתמשים במבנה בשם מילון, שמבוסס על משהו שנקרא טבלת גיבוב. - כשאתם בונים תפריט של תיקיות ותתי-תיקיות, אתם למעשה עובדים עם עץ.
ההבדל בין מתכנת מתחיל למתכנת מנוסה הוא לא שהמנוסה מכיר מבני נתונים מוזרים שאתם לא מכירים. ההבדל הוא שהוא יודע מתי להשתמש בכל אחד מהם, ולמה. הוא רואה בעיה, ומיד יודע שרשימה תהיה איטית מדי כאן, ושמילון יפתור לו את זה בשבריר מהזמן.
למה זה משפיע על ביצועים¶
תוכנה איטית היא כמעט תמיד לא תוצאה של "מחשב חלש". היא תוצאה של בחירה גרועה במבנה הנתונים. תארו לכם אתר עם מיליון משתמשים, וכל פעם שמישהו מתחבר, המערכת עוברת אחד-אחד על כל המשתמשים כדי לבדוק אם שם המשתמש קיים. זה יעבוד באתר עם 100 משתמשים בלי שתרגישו כלום. עם מיליון, האתר יזחל.
הפתרון לא דורש שרת חזק יותר. הוא דורש מבנה נתונים מתאים - במקרה הזה, טבלת גיבוב - שהופך את הבדיקה הזו למיידית כמעט בלי קשר לכמה משתמשים יש. זה ההבדל בין אתר שקורס תחת עומס לאתר שמחזיק מעמד.
אז מאיפה מתחילים ללמוד את זה¶
הבשורה הטובה היא שאתם לא צריכים ללמוד את כל זה בבת אחת, ובטח שלא בלי הקשר. הדרך הכי טובה ללמוד מבני נתונים היא לא לשנן הגדרות, אלא לכתוב הרבה קוד, להיתקל בבעיות אמיתיות, ואז ללמוד את המבנה שפותר בדיוק את הבעיה שנתקלתם בה. ככה זה נדבק בראש הרבה יותר טוב מאשר קריאת פרק בספר.
בקורס התכנות הבסיסי שלנו אנחנו בונים את היסודות האלה בהדרגה, כדי שכשתגיעו למבני נתונים תבינו בדיוק למה כל אחד מהם קיים ולא רק איך לכתוב אותו.
תתחילו את קורס התכנות הבסיסי כאן
לסיכום¶
מבנה נתונים זה לא נושא מפחיד ואקדמי, זו פשוט השאלה "איך אני מארגן את המידע שלי כדי שהתוכנה שלי תעבוד טוב". ברגע שתפסיק להתייחס לזה כתיאוריה ותתחיל לראות אותו בכל שורת קוד שאתם כותבים, כל הנושא הופך הרבה יותר פשוט וגם הרבה יותר מעניין.
ואם אתם רוצים ללמוד את זה עם אנשים שנמצאים באותו שלב כמוכם, בואו לדיסקורד שלנו ותשאלו שם כל שאלה שעולה לכם בדרך.