איך עברתי מ- C ++ לפייתון: שינוי רעיוני

מבוא

אנשים אומרים שהקידוד בפייתון כל כך קל שאפילו ילד בן 6 יכול לעשות את זה. זו הייתה המחשבה שהתחלתי בראש כשהתחלתי לקודד בפייתון בעבודה. הייתי מפתח תוכנה במשרה מלאה באותה תקופה, וכתבתי בעיקר ב- C ++ בלינוקס, תוך שימוש רב בספריית QT. עם זאת, כתבתי קוד פיתון גרוע בהתחלה.

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

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

C ++ צולל, פייתון משנירקול

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

צוללים ל- C ++ ושורדים אותו

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

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

הכלים היומיומיים העיקריים שלי היו Vim עם תוספים רבים לכתיבת קוד, GDB לאיתור באגים ו- Valgrind לניתוח השימוש בזיכרון ושגיאות. ליקטתי עם g ++ וכתבתי את Makefiles שלי . אז לא הרגשתי ש- IDE יועיל לי, אלא מעדיף להאט דברים ולגרום לי לאבד קשר עם הקוד שלי. בדיעבד, סמכתי מאוד על המהדר שמצא את שגיאות הסוג שלי .

שחייה רדודה בפייתון

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

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

כמפתח פיתון אני נוטה לחפש תחילה את הספרייה הפותרת את הנושא הנדון. לפייתון מערכת אקולוגית עשירה בספריה וקהילה התומכת בה. יש ספריות לעשות כמעט כל דבר. להלן כמה שימושיים בהם אני משתמש מדי יום: NumPy לחישובים מספריים, OpenCV לראיית מחשב, json לקריאת קבצי json, SciPyלחישובים מדעיים, sqlite3 למסדי נתונים.

הכלי היומיומי שלי הוא PyCharm (כן, IDE) עם תוסף IdeaVim . התחלתי להשתמש בו בעיקר בשל העובדה שמדובר בבאגים עוצמתיים, שהוא ידידותי בהרבה מפיג'ר ברירת המחדל של פייתון, pdb . אני משתמש גם ב- pip להתקנת ספריות שאני זקוק להן. אני כבר לא עוקב אחר השימוש בזיכרון אלא אם כן אני באמת צריך.

כמה טיפים מעשיים

אם אתה מפתח ++ ++ ואתה שוקל להתחיל לקודד ב- Python, הנה העצה שלי עבורך:

  • היפטר מההרגלים הישנים - הפסק להשתמש במהדר C ++ כמבצע ניפוי באגים. אל תייעל יותר מדי את השימוש בזיכרון. הימנע מכתיבת קוד דמוי C ++. ובכל אופן, נסו לא להסתמך על טיפוסים.
  • קבל הרגלים חדשים - התחל להשתמש בספריות. כתוב קוד פיתוני (אך אל תגזימו). שמור על דברים קריאים. השתמש במושגים מורכבים יותר כגון גנרטורים / מקשטים / הקשרים. נסה את PyCharm.
  • השתמש בספריות C ++ ו- Python משותפות - בחלק מספריות C ++, כמו OpenCV ו- QT, יש ממשק Python. קל להתחיל להשתמש באותה ספרייה בפייתון במקום ללמוד ספרייה חדשה מאפס.
  • אל תשכח את המקורות שלך - לפעמים פייתון פשוט איטי מדי או לא אופטימלי למשימה. זה כאשר הידע שלך ב- C ++ נכנס פנימה. ישנן דרכים רבות ( SIP , ctypes וכו ') להשתמש בקוד C ++ בתוך Python.

שורה תחתונה

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

בהצלחה!