טיפים חשובים לפרויקט

קורס פרקטי למציאת העבודה הראשונה

Zero To Hero מהחיפוש הראשון ועד להצעת העבודה

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

לפרטי הקורס

המלצה לשימוש בצ'אט מותאם לפרויקטים בתכנות מערכות

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

לחצו כאן למידע נוסף ולהרשמה

טיפים חשובים לפרויקט:

מה התקן של הקוד בו יהיה עליכם לעבוד בפרויקט?

  • גרסת שפת C: שימוש בתקן ANSI C (עד C89). דוגמה: בעת כתיבת פונקציות יש להקפיד על השימוש במבנה סטנדרטי הנתמך בכל המהדרים.
  • מחרוזות (strings) תמיד יכילו את Null-terminator:
    • בגלל שהקוד מתקמפל על לינוקס בגרסה מאוד ישנה, אינכם יכולים להשתמש בפונקציות מתקדמות כמו strcpy, strcat, strncat ועוד. דוגמה: מומלץ לממש פונקציות משלכם שמוודאות כי המחרוזת מסתיימת בתו \0 (Null-terminator) כדי למנוע בעיות בזמן ריצה.
  • ייצוג מחרוזות: מחרוזות הן מערכים של תווים כאשר הייצוג נעשה באמצעות ASCII Encoding.
  • הרצת הקוד בטרמינל/Command Line: הקוד צריך לעבוד בצורה חלקה בסביבת טרמינל, עם תמיכה בקלט מקובצים (באמצעות command line arguments) או בקלט ישיר מהמשתמש.

אוסף טיפים להתחלה של הממן הסופי (מעבדה בתכנות מערכות - MMN14):

  1. הכרת מבנה הפרויקט:

    עיינו בקבצים שהועלו, ובמיוחד בקובץ assembler.c המציג את הזרימה המרכזית של התוכנית. יש להבין את חלוקת השלבים: טרום עיבוד (preprocessing) → מעבר ראשון (First Pass) → מעבר שני (Second Pass) → המרת קוד לבסיס 64 וכתיבת קובץ פלט. הסבר: בכל שלב, יש קובץ או פונקציה שמבצעת חלק מהמשימה – לדוגמה, במעבר הראשון נאספות תוויות והוראות.

  2. הכנת הסביבה:

    יש להקמפל את הקוד עם gcc תוך שימוש בדגלים -ansi -Wall -pedantic לקבלת כל האזהרות האפשריות. ודאו שכל הקבצים (.c ו-.h) מסודרים כראוי, כולל Makefile במידת הצורך. השתמשו בפקודת valgrind לבדיקת דליפות זיכרון.

  3. שלבי הביצוע:
    1. טרום עיבוד (Preprocessing):

      הקובץ preproc.c אחראי על טיפול במקרואים והסרת רווחים מיותרים. הערה: ודאו שהמקרואים מוגדרים ומפורשים בצורה נכונה.

    2. מעבר ראשון (First Pass):

      הקובץ first_pass.h מציין את הפונקציה exe_first_pass שהיא הליבה של המעבר הראשון. בשלב זה נאספות הגדרות תוויות (labels) ומנוהלים זיכרון והוראות. טיפ: השתמשו בפונקציה handle_allocation כדי לוודא שאין דליפות זיכרון.

    3. מעבר שני (Second Pass):

      מתבצע בקובץ second_pass.c ומטרתו לוודא שהתוויות מוגדרות כראוי ולהמיר פקודות לבסיס 64. דגש: יש לבדוק שאין תוויות כפולות, למשל באמצעות check_each_label_once.

    4. המרת קוד לבסיס 64 וכתיבת פלט:

      הפונקציה conv_code_base64 ממירה את קוד המכונה לבסיס 64 וכותבת אותו לקובץ .ob.

  4. טיפול בשגיאות וניהול זיכרון:

    השתמשו בקובץ Errors.c כדי להבין את סוגי השגיאות האפשריים ואת אופן הטיפול בהן. הקובץ util.c מכיל פונקציות עזר כגון handle_malloc לטיפול בזיכרון ו-twos_compliment לייצוג מספרים.

  5. עבודה עם תוויות (Labels) וטבלאות:

    בקובץ table.h תמצאו את הגדרות מבני הנתונים הקשורים לתוויות וטבלאות סמליות. ודאו שאתם משתמשים בפונקציות insert_label_table ו-insert_other_labels לניהול הטבלאות.

  6. טיפים לכתיבת קוד נקי ומסודר:

    הקפידו להשתמש בשמות משתנים ברורים ולהימנע מהגדרת משתנים גלובליים אם אין בכך צורך. חלקו את הקוד לפונקציות קטנות שכל אחת ממוקדת במשימה אחת בלבד. דוגמה: במקום פונקציה ארוכה המכילה את כל הלוגיקה, חלקו אותה לפונקציות כמו calculate_sum(), validate_input() וכו'. בנוסף, הוסיפו תיעוד (comments) מעל כל פונקציה להקל על בדיקה ותחזוקה.

  7. בדיקות ודיבוג:

    בצעו הרצות בדיקה על קבצי קלט עם סוגים שונים של פקודות ותוויות. ודאו כי אין שורות ארוכות מדי (הגדרת MAX_LINE_LENGTH = 81). השתמשו בקבצים lexer.c ו-handle_text.c לבדיקת תווים, זיהוי אופקודים ותוויות.

חלוקת עבודה נכונה בזוגות + עבודה מסודרת עם GitHub:

  1. חלוקת עבודה נכונה בזוגות:

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

  2. עבודה במקביל:

    חלקו את העבודה לפונקציות קטנות שכל אחד יכול לעבוד עליהן בנפרד. דוגמה: אם אחד עובד על lexer.c, השני יכול לבדוק את code_conversion.c.

  3. בדיקות מקיפות ושילוב הקוד:

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

  4. עבודה נכונה עם GitHub:
    1. יצירת מאגר (Repository) מסודר:

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

    2. שימוש בענפים (Branches) לעבודה מקבילה:

      השתמשו ב-main כקוד יציב ובענפים נפרדים כגון feature-first-pass ו-feature-second-pass לעבודה על חלקים שונים. הסבר: כך ניתן לבדוק שינויים בנפרד ולמזג רק לאחר בדיקות.

    3. כתיבת Commitים מסודרים:

      כל שינוי חשוב יש לתעד עם commit מתאים. דוגמה: git commit -m "הוספת תמיכה בטבלאות".

    4. שימוש ב-GitHub Issues לניהול משימות:

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

    5. ביצוע Code Review:

      לפני מיזוג הקוד (merge), על השותף השני לקרוא ולהעיר הערות על הקוד. הסבר: זהו תהליך חשוב לשמירה על איכות הקוד ולהפחתת שגיאות.

    6. שימוש בתגיות (Tags) או גירסאות (Releases):

      לאחר סיום חלק משמעותי, תייגו את הקוד עם git tag (למשל: git tag v1.0-first-pass). הערה: כך ניתן לחזור בקלות לגרסאות קודמות במקרה הצורך.

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

צור קשר