ללמוד לתכנת בגישה שונה

מזה זמן (שנתיים או שלוש) שאני רוצה ללמוד את שפת Rust, היות ויש לי שימוש בשבילה – להעיף את ++C מדברים שאני צריך לפתח.
הבעיה שגרמה לי לא לעשות זאת עד עכשיו זה זמן.

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

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

הרעיון

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

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

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

זו הגישה שאני החלטתי לקחת עם Rust. להתחיל להשתמש בלי להבין, ולאט לאט לקלוט דברים.
למזלי יש לי מילונים רבים כדוגמת duck duck go או Stack overflow, אבל גיליתי כי לרוב שימוש בכלים המגיעים עם rust כדוגמת rustc --explain EXXX מספקת תיעוד מדהים, וזה כולל הצעות מהמהדר בזמן ריצה. ואפילו "מילון" בשם מאיר אשר עוזר לי המון (שוב המון תודה על העזרה).

ההתחלה

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

מטרת התוכנית היא ללמוד איך לעבוד עם פונקציות, ערכי חזרה, שגיאות, ניהול data flow, עבודה עם struct ושאר מבני נתונים בשפה ואפילו ניסיתי ללמוד לעשות binding לקוד של libc, אבל גיליתי שבשלב הזה זה קצת גדול על ההבנה שלי, ומצאתי את עצמי שורף יום שלם על זה עם שגיאות כבדות שדרשו הבנה עמוקה יותר ממה שיש לי בשלב הנוכחי כך לבסוף נשברתי והשתמשתי בcrate קיים (זו לא היתה המטרה המקורית), בתקווה שלא אהיה צריך עוד תלויות עד ל"סיום" הפרויקט.

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

תארו לכם כי במרבית השפות (שאין להן טיפול בחריגות) אחזיר שגיאה כערך חזרה (היי Golang אני [בעיקר] מדבר עלייך), או כמשתנה גלובלי/struct (היי C), אך ב rust זה מורכב יותר ויש תחבירי "קסם" (כאשר לא מבינים אותם ;)) שצריך להבין כמעט מההתחלה.

התקדמות

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

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

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

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

2 מחשבות על “ללמוד לתכנת בגישה שונה

  1. נועם

    נחמד אם תוסיף כמה השוואות קוד שמראות למה אתה מעדיף אותה על ++c ובכלל למה לשים אותן באותה משבצת. (אני לא מכיר את Rust)

    1. ik_5 מאת

      C++ היא שפה מאוד מתוסבכת שקל מידי ליפול בה בניהול משאבים.

      Rust היא שפת system שמספקת לי כתיבה "גבוהה" מ c, עם תוצר זהה.

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

      לינוס אמר שהוא מוכן לשלב אותה בקרנל (בניגוד ל++c
      למשל).
      זה לא מובן מאליו כי הוא אדם מאוד ביקורתי והוא לא אוהב שינויים יחסית.

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת /  לשנות )

תמונת גוגל

אתה מגיב באמצעות חשבון Google שלך. לצאת מהמערכת /  לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת /  לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת /  לשנות )

מתחבר ל-%s

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