python או שפה דומה למתכנת אמבדד, איך מסתדרים עם זה?

haimgds

Member
python או שפה דומה למתכנת אמבדד, איך מסתדרים עם זה?

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

בשנים האחרונות אני מוצא יותר ויותר צורך בכלי להתממשקות מול יחידת הקצה. ביחידת הקצה אני בונה CLI או הקס טרמינל שמשמש לביצוע פעולות ושליפת נתונים ובצד המחשב אני משתמש בטרמינל או בכלים קצת יותר מתוחכמים (למשל DockLight)
הבעייה שלי מתחילה כשאני צריך לבצע פעולות קצת יותר מתוחכמות משליחת פקודה וקבלת נתונים. רוב הזמן אני כותב סקריפטים ל DockLight אבל זו עבודה מתסכלת ואיטית.
חשבתי כי אוכל להשתמש בשפה כגון python לביצוע הסקריפטים וניסיתי ללמוד אותה. השקעתי מספר ימים בתקופה שהייתי בין עבודות (לפני מספר חודשים) בשימוש ב pycharm וקריאה/צפייה ביוטיוב ופשוט לא הצלחתי להכניס את זה לראש
. רשימות, Tuples ומבנים אחרים בהם מעולם לא השתמשתי ואני לא מבין למה להשתמש בהם. סביבת פיתוח נטולת נקודות עצירה והצגת משתנים דינמית כמו כל סביבה אחרת בה עבדתי ב 20 שנה האחרונות והרשימה נמשכת... אני יודע כי אהיה חייב להשתמש בשפה זו או דומה בשנים הקרובות אז הייתי שמח להמלצה לשפה/כלי שיוכל לתת לי את היכולות הבאות (בעבודה בסביבת ווינדוס):
-קלט נתונים מ:קובץ, וכו'
-פלט נתונים ל:קובץ,UART, USB חלון.
-עיבוד ומבני נתונים: דומה ל C ככל האפשר.

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

וברצינות, פיית'ון נשמעת מתאימה למטרה, אבל צריך להתרגל אליה ולהבין עד כמה היא שונה ממה שאתה רגיל ב-C.
אני קצת מופתע מהשאלה שלך על רשימות ו-Tuples. רשימות זה המקביל למערכים, Tuples הן דרך מהירה ו-ad-hoc-ית ליצור מה שב-C היית מגדיר "ידנית" כ-struct. אלה בדיוק הכלים המוכרים לך, רק עם כתיב שונה ויכולות מורחבות.
&nbsp
(גילוי נאות: אני שונא שפות שהן לא strongly typed בזמן קומפילציה ואוהד מושבע של C++)
 

ipv6

Member
list פיית'וני

הרבה יותר דומה ל-vector או list של STL, בגלל שהוא דינאמי ויכול לגדול או לקטון ואפשר להכניס איבר בין כל שני איברים.
גם זאת השווה לא ממש טובה כי List בפיי'תון יכול להחזיק טיפוסים שונים והמבנים ב-STL טמפלטיים על סוג הטיפוס.
 

luis13

New member
אם אטריל גם קצת

"סביבת פיתוח נטולת נקודות עצירה והצגת משתנים דינמית כמו כל סביבה אחרת בה עבדתי ב 20 שנה האחרונות"
לא נשמע שבאמת עבדת עם PYCHARM.
&nbsp
מעבר לזה, פייתון היא שפה שמשלבת בתוכה כמעט את כל הפרדיגמות. מסקריפטים דרך פונקציונלי, איטרטיבי, OOP ועד WEB.
זו שפה שבמהות שלה דוגלת במימד של חופש. כלומר, כל מה שלא צריך עבור הקוד עצמו לא יהיה שם. זו בדיוק הסיבה שלא מצהירים על TYPE של משתנה, אין בעיה שמשתנה יקבל STRING ובהמשך יקבל LIST ועוד. הכל חופש מלא. זו הסיבה גם שקוד PYTHON תמיד יהיה קצר יותר מכל קוד בשפה אחרת.
&nbsp
ואחרי שאמרו את זה,
אתה תבין PYTHON רק אם תבין כלל בסיסי מאוד. כל דבר בPYTHON הוא אוביקט.
&nbsp
 

haimgds

Member
תודה (ולא הטרלתם...), מספר נקודות נוספות.

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

נקודה נוספת היא שבכנות, נמאס לי ללמוד כל מספר שנים שפה חדשה ולוהטת (פעם CPP נחשב לדבר הכי חם בתחום ואז סי-שארפ ואז ג'אווה אם אתם זוכרים) שנעלמת וחוזר שוב. התחלתי לכתוב קוד כבר בשנות ה 80, אסמבלר ובייסק על סינקלייר (ואפילו היה לי את הדגם המשודרג עם 48K!) ואז פורטראן, קובול, ואסמבלר במהלך הלימודים ואחריהם פאסקל וסי כך שלהוסיף עוד שפה אחת לאוסף כבר פחות מלהיב אותי...

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

עבדתי עם PYCHARM וכסביבת פיתוח הוא היה מאוד לא נוח לי (ועבדתי כבר עם אי אלו סביבות אקליפס). לא הצלחתי לבדוק את הקוד תחבירית!

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

BravoMan

Active member
ההודעה הזו נשמעת לי קצת מוזר...

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

&nbsp
אבל ברצינות רגע.
יש לך כמה אפשרויות:
&nbsp
1. אם אתה עובד ב-VS, אתה יכול לפתח יישומי GUI גם ב-C, ותקבל פחות או יותר אותו כלי ליצירת ממשק GUI שהיה לך ב-VB.
כמובן, בניגוד ל-VB תצטרך לכתוב הרבה יותר קוד C כדי לתמוך ב-GUI.
&nbsp
בגדול, אתה צריך להכיר WIN32 API.
&nbsp
2. VB אומנם מתה, אבל VB .NET יחסית קרובה אליה, אז אולי תוכל להסתדר איתה.
&nbsp
3. גם #C קרובה יחסית למה שאתה מכיר.
&nbsp
האמת שאני לא בטוח על איזו שפה להמליץ לך, כי אתה עובד ב-Windows, ואני יודע שלהתממשק להתקני USB שונים ומשונים ב-Windows זה חתיכת סיוט.
&nbsp
מה שכן - אותו Glade ש-choo המליץ לך עובד גם עם C.
אבל הספרייה שמאחוריו (GTK) משתמשת בסגנון כתיבה ב-C שכנראה יהיה לך זר לחלוטין, עד כדי כך שלא תכיר את השפה.
&nbsp
הוא הפתיע אותי לראשונה כשהשתמשתי בו, אבל בגלל שהיה לי כבר רקע ב-OOP, הבנתי מה הולך שם.
 

bismark1

New member
ממה שאתה כותב, אם אתה רק תחת windows

לך על C# (או אפילו managed ++C
 

choo

Active member
קצת רשמים פיתוניים של מי שעובד עם C או ++C:

&nbsp
אמנם אני איש תוכנה במקור, ןלא חומרה, אבל הרקע ההסטורי שלי קצת דומה לשלך - התחלתי עם בייסיק על TRS-80 של רדיושייק בשנות ה-80, עברתי דרך תיכנות על vic-20 אצל חבר, בהמשך עבודה עם sinclare QL בבייסיק ואסמבלי, בדרך למדתי קצת פסקל על מיני-מחשבים, הגעתי לאקדמיה ואחרי כמה סמסטרים של תיכנות בפסקל למדתי C, בבית למדתי tcl וכתבתי ביחד עם חבר פרוייקט GUI לא קטן ב-tcl/tk, בהמשך יצא לי לעבוד בעבודה בפרל, אסמבלי ו-C. המשכי ל-objective C ול-++C במקום עבודה אחר, עברתי במקום שכתבתי בו ב-java, ואז חזרתי לסביבות של C ו-++C למשך ה-15 שנים הבאות, תוך כדי כתיבת סביבות של בדיקות אוטומטיות בפרל, ובעשור האחרון בפייתון (אגב, את כל אחת מהשפות הללו למדתי בבית בהיקף כזה או אחר כמה שנים לפני שהגעתי לעסוק בהן בתעשייה, למעט objective C, שבה נתקלתי לראשונה במקום עבודה בשנת 97, הרבה לפני שסטיב ג'ובס ואפל הפכו אותה לפופולרית).
&nbsp
גם אני עם השנים התחלתי להתעייף מלרוץ ללמוד כלים חדשים, שלכאורה עושים את אותו הדבר רק בצורה אחרת - ואכן רוב הכלים (כמו גם רוב השפות) הם מיותרים - אבל מדי פעם אחד מהם תופס והופך לסטנדרט תעשייתי (אין דרך אחרת אפקטיבית שתוביל לקדמה בצורה כזו מהירה - ראה את זה כמו "ברירה טבעית" של שפות תיכנות, כלי פיתוח וספריות צד ג, לעומת התהליך הביורוקרטי שבו תוכננה ופותחה שפת ADA).
&nbsp
בהסתכלות של "צופה ביקורתי" - פייתון היא אחת מהשפות שתפסו כסטנדרט תעשייתי, והיא יושבת חזק על התפקיד שלפניה סיפקה אותו ג'אווה (שבעצמה לקחת את התפקיד מ-++C). כמו שג'אווה ייעלה תהליכי פיתוח, משום ששיחררה את המפתחים מחלק מהבעיות של ++C (בעיקר במה שקשור לניהול משאבי זכרון ו"מריחות זכרון"), בעולמות שבהן לא היה צורך ביעילות והשליטה ש-++C סיפקה למפתח, כך פייתון עושה את זה, עם סינטקס הרבה פחות "רועש" והרבה פחות boiler-plate code, במקומות שבהם לא צריך את היעילות והסקיילאביליות הפנימית (מבחינת ריבוי נימים) של ג'אווה. ההבדל הוא שפייתון, עם ה-duck typing שלה, מגיעה עם תג מחיר נוסף לא זניח - חוסר היכולת לתפוס הרבה סוגי שגיאות בזמן קומפילציה. אני לא אוהב את המחיר הזה - אבל עולם הפיתוח לא הקשיב לי ;)
&nbsp
לאחר הפתיחה הזו - למרות שאני מפתח תוכנות תשתית מערכתיות ב-C וב-++C, את הקוד הזה צריך לבדוק איכשהו, ברמה מערכתית. את כלי הבדיקה הללו תמיד כתבתי בשפות עיליות יותר - פעם פרל (כשהבחירה היתה בידי), כיום פייתון (שאחרים הכתיבו לי). אם הייתי צריך לכתוב את תוכנות הבדיקה הללו באותן שפות שבהן אני כותב את התוכנה הנבדקת - הייתי מבזבז הרבה זמן בפיתוח כלי הבדיקה ותוכניות הבדיקה הללו. התוכניות הללו מה שחשוב הוא להפעיל ולנהל מספר תהליכים, לשלוח ולקבל הודעות, לפרסר סטרינגים וקבצי קונפיגורציה, וכדומה. בדברים הללו, שפות הסקריפט הרבה יותר נוחות ויעילות מאשר שפה כמו C. זמן כתיבת הטסט מתקצר משמעותית, כמו הבאגים בטסט עצמו קטנה משמעותית.
&nbsp
אז נכון, השפות הללו נראות כאילו הן עושות את אותו הדבר אחרת - אבל זה רק אם משתמשים בהן לדברים הלא נכונים. ברגע שתשתמש בהן ל"דברים הנכונים" - תתחיל להרויח מהן.
&nbsp
ולשאלה "אז למה לא פשוט ויז'ואל בייסיק'"? אתה יכול להשתמש ב-VBA אם זה מה שמתאים לך - בהנחה שמיקרוסופט אכן מתחזקת אותה. קח בחשבון שזה מגביל אותך לסביבה של מיקרוסופט, ושבתחומים מסויימים (כמו פירסור סטרינגים וטיפול בקבצים) VB חלשה בהרבה לעומת פייתון. מהצד השני, אפשר לכתוב GUI גם בפייתון, ויש אפילו GUI editor גרפי שתוכל להשתמש בו, שנקרא glade, שמייצר ממשקים גרפיים בצורה גרפית, שומר אותם בתור קבצי XML, ומספק ספריה שיודעת בזמן ריצה לבנות את הממשק החלונאי מתוך אותם קבצי XML. הכלי הזה פחות מהוקצע מ-VB, למיטב ידיעתי, ודורש יותר אינטגרציה ראשונית של כלים (בניגוד ל-VB שמגיע בתור חבילה אחת) - אבל מצד שני, למיטב ידיעתי מספק פתרון הרבה יותר נוח ליכולת לשנות את גודלו של הממשק החלונאי על ידי המשתמש (משהו שלפחות בזמנו מיקרוסופט לא סיפקו לו פתרון מספיק פשוט).
&nbsp
לבסוף, פייתון יודעת להתממשק עם קוד -C, באמצעות כלים כמו swig. למעשה, רוב שפות הסקריפט שמגיעות במקור מיוניקס יודעות לעשות את זה.
&nbsp
לגבי ברייקפוינטס - בגלל שהקוד שאני עובד עליו ב-15 שנים האחרונות הוא קוד "מקבילי מבוזר ומערכתי מדי", נאלצתי לזנוח את ה-break points לטובת שימוש הולך וגובר ב-trace logs. זה גם מה שאני עושה עם פייתון, ובשילוב עם ריבוי של טסטים אוטומטיים ממוקדים, ועם ה-stack trace המפורט שפייתון מדפיסה כשנזרק exception - זה מהווה תחליף לא רע. בפועל, אנשי פייתון רציניים שעבדתי איתם (אלו שעובדים אקסקלוסיבית בפייתון) כן משתמשים ב-break points ושאר ירקות ב-pycharm.
 

haimgds

Member
תודה, עלו כאן כמה דברים שלא חשבתי עליהם.

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

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

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

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

choo

Active member
ברור שבלי "תוכנה לתיכנון ממשק חלונאי" יהיה לך קשה

&nbsp
אבל לכתוב תוכנה חלונאית ידנית ב-C, כשיש לך אלטרנטיבות נורמליות יותר, זה רעיון רע מאוד.
&nbsp
כמו שכתב פה מישהו אחר - אתה יכול להתקין את glade ואת gtk+, להשתמש ב-glade כדי לייצר את הממשק החלונאי, ולכתוב את הקוד של התוכנה ב-C.
&nbsp
כדי ללמוד לכתוב תוכנה חלונאית פשוטה ברמה כמו שתארת, כנראה תצטרך להשקיע 1-2 שבועות בלימוד ותירגול. האם שווה לך לעשות את זה? זו שאלה שאתה צריך לשאול את עצמך. בעיניי, ללמוד עוד כלים זה דבר מאוד שימושי. מצד שני, כשאתה מציג את "לא לדעת פייתון כדי שלא יתעלקו עלי כמו הבחור מהמקום הקודם" - כנראה שיש לנו קווי מחשבה מאוד שונים.
 

haimgds

Member
מצטער, לא בדיוק הבנתי

"לכתוב תוכנה חלונאית ידנית ב-C", מה הכוונה? אני כנראה לא מבין את ההבדל בין השימוש ב-glade כדי לייצר את הממשק החלונאי ואת התוכנה ב-C לבין שימוש ב API של C (VC היא השפה/סביבה המועדפת) כדי לייצר את הממשק החלונאי ואת התוכנה ב-C.
&nbsp
כנראה שלא הסברתי את עצמי נכון. אני בתהליך למידה וכתיבה של קוד קיים (שנכתב ע"י לפחות 5 אנשים שונים בעבר, אף אחד לא עובד בחברה כרגע) שמטפל במערכת תקשורת מה RF עד שכבת האפליקצייה ומוצף בעבודה מעל הראש, זו הסיבה שאני מחפש פיתרון "מהיר ומלוכלך" לפתור בעיות שאני נתקל בהן שידרוש ממני מינימום למידה/זמן (בחברה לפני הקודמת שלי היה בחור במשרה מלאה שכתב ב C# את כל הטסטרים, זה פישט לצוות שלי את עבודת הפיתוח/קידוד בצורה מדהימה).
לדעתי, הפיתרון המהיר (שאולי לא הטוב/נקי) ביותר הוא להשתמש במה שאני כבר יודע (הווה אומר C) וללמוד כיצד ליצר ולהתממשק ל GUI (בין עם glade ובין עם API של VC)
&nbsp
ד"א, הבחור שסיפרתי עליו פשוט נדפק כתוצאה מהידע שלו בפייטון. הוא היה מתכנת RT טוב שהתעסק עם פיתוח/הגדרות מערכת ושאר הדברים המעניינים. אחרי שלמד פייטון הוא התחיל לקבל את העבודות הפשוטות (והמשעממות) של קידוד פשוט כך שישאר לו זמן פנוי "כדי שיוכל לתת תמיכה לצוות" (ואז היה צריך להשקיע עוד כמה שעות בשבוע כדי לגמור את הכל...)
&nbsp
...וכשהחברה שעבדנו בה נסגרה הוא גמר עם קו"ח עלובים מבחינה תעסוקתית.
&nbsp
 

choo

Active member
אפשר לבנות ממשק משתמש בקוד, או באמצעות תוכנה גרפית

&nbsp
או שאתה כותב משתמש בתוכנה גרפית כדי לתכנן את ממשק המשתמש ו"לבנות" אותו (כפתורים, תיבות שיחה, תיבות טקסט, איפה נמצא כל drop-down list וכיוצא בזה), או שאתה כותב את הכל רק דרך קוד ב-C (מפעיל API שמייצר חלון, מפעיל API אחר שמייצר בתוך החלון תיבת טקסט ו-API אחר שמייצר תוית ליד תיבת הטקסט, ו-API אחר כדי להגדיר איך התוית ותיבת הטקסט ממוקמים זה ליד זה, וכיוצא בזה).
&nbsp
נ.ב. הבחור ההוא לא נדפק כי "הוא ידע פייתון" - אלא כי הוא נתן למנהל שלו לדחוק אותו לפינה. אני תמיד דאגתי "להכיר ספות אחרות וכלים אחרים" - ועדיין עבדתי על מה שעניין אותי בעבודה, במקביל ל"עזרה לצוות". לעיתים מאוד רחוקות ישבתי לכתוב כלי נקודתי עבור מישהו אחר, והשקעתי את זמני יותר בלעזור לאחרים ללמוד פייתון או פרל או מה שהיה רלוונטי, כדי שיוכלו לכתוב לעצמם את הכלים הללו. זה פשוט הרבה יותר סקיילאבילי וגמיש ניהולית מאשר העולם הישן שבו "כל אחד מכיר רק את הריבוע שלו". זה לא מנע ממני לעסוק במרבית הזמן בקוד של המוצר ובמשימות מעניינות. העובדה שהרבה אנשים מעדיפים להיות פאסיביים ולא לנהל את הקריירה המקצועית שלהם היא דבר מצער - אבל זה מגיע בראש ובראשונה מאופיו של האדם, ולא ממה שהוא יודע.
 
למעלה