אוף!!!!

בהחלט צורת חשיבה שונה ../images/Emo45.gif

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

inbardaf

New member
בדיוק!

תכנתים שונאים את השפה שאני כותבת בה. היום בדיוק הזכירו לי את זה בשיחה אצל הלקוח. פשוט - היא יותר מדי 'חומרתית' וזה באמת מזכיר את מה שאת מתארת.
 

מקמיקא

New member
ממש לא מסכים...

שפות תכנות ויזואליות הן תחום שונה לגמרי, ובאופן כללי זה משהו שנועד לתת 'הסבה' לאנשים שמכירים תחומים אחרים. בפרט, השפה הויזואלית שתיארת לא דומה בשום אופן לתכנות... בכלל, תכנות ויזואלי, כיום, הוא מוגבל, איטי, ולא יעיל. אני חושב שבין אסמבלי ובין תכנון מעגלים, קשרים הוא מקריים למדי (לא שאין - הם פשוט די כללים). אפשר לחפש נקודות דמיון, למשל להגיד שכל שגרה באסמבלר היא למעשה מעגל שמבצע פעולה מסויימת כ'קופסא שחורה', ושאר דברים כאלה... אבל בסופו של דבר, תכנות באסמבלי הוא שונה לחלוטין. הלוגיקה שונה לגמרי, הדרך שבה אתה פותר בעיות שונה לגמרי, פרמטרים לשגרות, בפרט רקורסיות הן משהו שיחסית קשה לתאר באבסטרקציה של מעגלים מעבר לרמה די פשוטה. למשל - אם אני אתן לך לתכנן איזשהיא תוכנית שאני כותב בשיעור בשפת C באמצעות מעגלים, לי ייקח יום ולך ייקחו שבועיים, כי את תתעסקי עם הרבה יותר פרטים. לא שאני אומר שמה שאת עושה לא יעיל או לא חשוב; סביר להניח שהתוכנית שאת תכתבי תרוץ פי שש מאות יותר מהר משלי
אבל אם למשל זאת תוכנה שצריך להריץ רק פעם אחת - זמן הפיתוח+זמן ההרצה שלי יהיו הרבה יותר קצרים משלך. השאלה היא רק איזה מטרה אנחנו צריכים להשיג, כל אחד מאיתנו פותר בעיה אחרת. וכשזה בצד, אני חושב שהמעבר מאסמבלי לC לא יהיה לך יותר קל משהיה לי המעבר מC לאסמבלי
צריך להתרגל ל-C, אתה פתאום מתעסק רק עם דברים מאוד מסויימים, יש לך כלים שונים בידיים, ואתה צריך לדעת איך להשתמש בהם. מן הסתם את תוכלי לכתוב תוכנית בC די מהר, כי שפות תכנות עיליות נועדו להיות יותר ויותר פשוטות ללמידה, בעוד אסמבלי נועדה להיות פשוטות למימוש באמצעות חומרה. אבל אני לא חושב שאת תלמדי לכתוב C ברמה שלי יותר מהר משאני אלמד ללמוד אסמבלי ברמה שלך (או אפילו מעגלים חשמליים, אם נניח שאסמבלי אני כבר יודע). ובכלל - לעבוד עם Object Orientation בטוח לא יבוא לך מהר! זה יותר מלדעת איך זה עובד ומה כל דבר עושה, זה גם להבין איך משתמשים בזה. אפשר לכתוב בC++ תוכנית שלא משתמש אפילו באובייקט אחד, השאלה היא איך אתה עושה תוכנית שמנצלת את זה בצורה הכי טובה, וזה הקושי, לא להצליח לעשות תוכנית שעושה את מה שצריך. המטרות בתכנות עילי הן שונות מהמטרות בתכנות תחתון. והמטאפורה של 'לעלות מלמטה' היא לא בהכרח נכונה. קחי לדוגמא מכונית צעצוע, שאת צריכה לגלות איך היא עובדת (בהנחה שאת לא יודעת כלום על פיזיקה). מצד אחד, את יכולה ללכת מלמטה למעלה, לפרק אותה, לגלות רכיב של אינטל, לנתח את המעגלים, לגלות שהם עושים משהו, ולטפס. מצד שני, את יכולה לגלות שהרכב יכול לנוע, לכל מיני כיוונים, ע"י אותות. ואז לגלות איזה אותות אלה שמפעילים אותו. ואז לגלות איזה רכיב במכונית מפעיל את האותות, ובכיוון הזה זה הרבה יותר קל. אז לא, אני לא מסכים שמי שיודע חומרה ילמד יותר מהר תוכנה מאשר להפך... זאת נטייה גם של תכנתים, להגיד ש'תכנתים אמיתיים' משתמשים בשפות יותר ויותר בסיסיות. פעם אנשים היו מתכנתים ישר בהקסדצימלי! היו יושבים וכותבים מספרים, או מנקבים כרטיסיות... ואז היו מזלזלים בכל החבר'ה האלה שלא זוכרים אפילו את הקוד ההקסדצימלי של הפקודות שלהם בעל פה!
כשאתה יודע את השפה התחתונה טוב - אתה יכול להגיע לשפה העילית בקלות, כי היא מתבססת על זה. אבל אתה עדיין תשרטט מעגלים, או תכתוב אסמבלי - אתה פשוט תעשה את זה עם C במקום... וואו! יצאה לי חפירה הרבה יותר גדולה ממה שחשבתי!
 

inbardaf

New member
ממש לא מסכימה איתך

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

מקמיקא

New member
תוכנה עילית זה לא בהכרח 'תכנות עילי'...

כמו בדוגמא של המבורגר - תוכנה שנותנת לך לתכנן מעגלים, ופשוט מתרגמת את זה לתוכנית רגילה, זה לא נקרא לתכנת כמו שאנחנו מתכנתים... אני בטוח שהתוכנה שלך מאוד חזקה, ותוכנות ייעודיות כמו שלך (לפי מה שהבנתי לפחות) בדרך כלל נותנות פתרונות טובים יותר מכל שפת תכנות. גם נשמע שהתוכנה שלך נכתבה במיוחד לאנשי חומרה - אז לא מפתיע שאנשי תוכנה שונאים אותה...
אבל, לצורך העניין, אם הייתי מבקש ממך לבנות לי, באמצעות התוכנה שלך, תוכנה אחרת שעושה משהו דומה, כלומר, תוכנת Visual Programming. כנראה שלא היית יכולה לעשות את זה, וגם אם כן, אז עם מגבלות, או לרדת כל הזמן לרמת הקוד... קומפיילרים - אני בטוח שאת יכולה לכתוב, אבל זה ייקח לך המון זמן, ותחזוק הקומפיילר יהיה נורא ואיום... תוכנות מקביליות - אין לך איך לעשות (אני חושב) בלי לרדת לC להרבה זמן... גרפיקה תלת מימדית, תוכנות ניתוח טקסטים, עיבוד שפות טבעיות, בינה מלאכותית... אלה דברים שגם אם אפשר לממש בתוכנה שלך (כנראה שכן, אם אפשר לרדת עד C), אז זה כנראה ייקח יותר זמן מאשר שייקח למתכנת טוב לכתוב את זה בJava למשל. מצד שני, אני בטוח גם שלכתוב את מה שאת כותבת (מה שזה לא יהיה
) ייקח למתכנת בJAVA הרבה יותר זמן. כמו שליצור דמות תלת מימדית יהיה הרבה יותר מהיר ב3D Studio מאשר אם אני אשב ואכתוב את הקוד שלה מאפס. עד היום לא שמעתי על תוכנת Visual Programming שהיא Turing Complete (כלומר - מסוגלת לבצע כל מה ששפת תכנות חזקה כמו C יכולה לבצע), מלבד תוכנות שמאלצות אותך לרדת לקוד כדי לטפל בבעיות מורכבות. תוכנות ויזואליות הן נורא יעילות - למטרה שהן נבנו. ושוב - אני מתאר לעצמי שאת גם לא עובדת עם object orientation, ולכן לנסות ללמוד את זה ואת הכוח של זה, ולהכיר את הdesign patterns, ואת מודלי העבודה, ללמוד לעבוד עם שפות תכנות חזקות אחרות כמו Lisp ייקח לך בקלות שבועות (נסי יום אחד ותגידי שקל ללמוד לתכנת
), וכו' וכו'... C קלה ללמידה כי היא נועדה להיות שפה קלה מחד, אבל חזקה מאוד מאידך. להשתמש בחלק הקל זה לא בעיה, הבעיה היא להשתמש בחלק החזק
אני יודע שאבא שלי עשה הסבה מתוכנה לחומרה (ובחזרה כמה פעמים). זה כן קורה, זה פשוט הרבה יותר נדיר בגלל שהביקוש לאנשי חומרה הוא הרבה, הרבה יותר נמוך מהביקוש לאנשי תוכנה (no offense
). אנשי חומרה נאלצים לעבור לתוכנה, כי הם רואים הבדלים גדולים בביקוש ובשכר, אבל לאנשי תוכנה אין לגיטימציה לעבור לתוכנה בד"כ, כי המשכורות בד"כ יותר נמוכות לחדשים בתחום, וההיצע יותר נמוך. אני לא בא לזלזל במה שאת עושה... אין לי ספק שאם תשימי מולי מעגל חשמלי, אני לא אדע מאיזה כיוון להסתכל עליו בכלל, וייקח לי הרבה זמן ללמוד מספיק מעגלים בשביל להבין אותו (אבל זה לא נכון שצריך לדעת את כל התאוריה - יש קורסים בצבא בפחות מחודש, כמו שיש קורסי תכנות בפחות מחודש...). אני פשוט חושב שאת מזלזלת בקושי של מה שעושים מתכנתים. אם אני אשים מולך תוכנה, את גם לא תדעי מאיפה להתחיל בכלל, ותלכי לאיבוד מהר. אם תנסי לכתוב תוכנה קטנה ופשוטה תצליחי, אם תתבקשי לכתוב תוכנה גדולה ו/או רצינית, אולי תצליחי - אבל תעשי את זה הרבה, הרבה פחות טוב ממה שהיה עושה את זה מתכנת עם ניסיון.
 

inbardaf

New member
שני דברים

א. אין לי כוח יותר לדיון הזה. כנס לאתר הבא ותבין כמה אתה כותב באוויר... בתוכנה שלי עושים הכל ומהר!! כולל גרפיקה תלת ממדית וכולל כתיבה מונחת עצמים. כמו כן היא קודם כל תוכנה מקבילית!! זה אחד הדברים החזקים בה. אם אתה רוצה אותה טורית, אתה צריך 'לאלץ' אותה להיות כזו. אחרת היא עושה הכל ביחד. ב. כתבתי גם תוכנה ב-#C על סביבת PWF. הכי חם בשוק התוכנה. שברתי את השיניים וסבלתי, אבל כתבתי. (זו התוכנה של רכבת ישראל..) והיה לי קשה בגלל צורת החשיבה השונה כ"כ ממה שאני רגילה. נאלצתי להתעסק אם כ"כ הרבה דברים שאני לא רגילה להתעסק בהם. (יש לי בעיה באינטרנט, אז כשאתה נכנס לאתר של NI תחפש את השם: LabVIEW (זה מופיע כבר בדף הראשי תחת מוצרים ותחת לימודים) אפילו הרובוט של לגו בתוכנת ב-LabVIEW FPGA ... שזה כמו התוכנה שאני עובדת איתה, רק שזה מתרגם את זה לשפת VHDL וצורב לרכיב אלקטרוני. ולראות את אתה עושה 'ציור' קטן ב-5 שהיה לוקח לך לכתוב ב-12 דפים של VHDL, זה מדהים..
 

p019

New member
המגמה הנוכחית הזו יצרה את ויסטה, לא?

לא נראה לי שבחברות סבירות גישה 'רופפת' כזו תעבוד.
 

inbardaf

New member
ויסטה זה קללה אז אני מבקשת לדבר יפה ../images/Emo3.gif

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

TG GIRL

New member
../images/Emo6.gif אוי כמה רע ששמעתי על ויסטה...

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

מקמיקא

New member
דווקא כל החברות המצליחות היום משתמשות בטכניקה

כמעט כל החברות היום עוברות לפיתוח מהסוג שציינתי, כי זה פשוט מניב תוצאות הרבה יותר טובות. מה שנקרא מערכות speed sensitive דווקא כן מפותחות באמצעות C, ואפילו חלקים מסויימים בקוד עוברים אופטימיזציה באסמבלר. זה כולל מערכות הפעלה, משחקי מחשב, ותוכנות מדעיות בעיקר. אבל התוכנות היומיומיות שאנחנו משתמשים בהן - במקרה הכי טוב, הגרעין שלהם נכתב באופן אופטימלי, וכל השאר בנוי בצורה שתאפשר שיפור ותיקון באופן הכי טוב שאפשר. במקרה הרע, הן נבנו מאפס בתור תוכנה שקל לתחזק, וזה לא רע כמו שאת חושבת. סביר להניח שרוב התוכנות החדשות שאת משתמשת בהן הם כאלה. תכלס - עדיף תוכנה שאין בה באגים, ושמשתנה בהתאם לצרכים של אנשים, אבל רצה קצת יותר לאט, מאשר תוכנה שטסה, אבל כל פאץ' יוצא פעם בשנה. הבעיה עם ויסטה היא שמיקרוסופט אידיוטים.
ויסטה לא מערכת הפעלה כל כך גרועה - היו בה כמה תקלות קוד יחסית מועטות, שבלעדיהן ויסטה רצה נפלא. הבעיה היא, שלקח הרבה זמן עד שתיקנו את תקלות הקוד האלה, ושהם פירסמו את המערכת עוד לפני שהכל היה מוכן, במקום לדחות את ההוצאה וללטש את שאר הבעיות. השם של ויסטה הוכפש בצורה כל כך נוראית, שהם היו צריכים לשחרר מערכת הפעלה חדשה, כמעט בלי קוד חדש, שנקראת ווינדואוז 7, ושהיא מערכת הפעלה די טובה (בשביל הסטנדרטים של מיקרוסופט)... ובגלל זה, החברות שיש להם שם טוב, כמו בליזארד, גוגל, ואפל, הן החברות שמפרסמות תאריך הוצאה למוצרים שלהם רק ~אחרי~ שהוא מוכן, והן דאגו ללטש את כל הפרטים.
 

p019

New member
אתה מניח שיש תוכנות בלי בגים?

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

מקמיקא

New member
צודקת ../images/Emo6.gif

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

inbardaf

New member
מציע לך בחום לקרוא את הספר: פגם קטלני

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

inbardaf

New member
../images/Emo45.gif ../images/Emo6.gif זה כ"כ נכון שזה כבר לא מצחיק ../images/Emo3.gif

 
למעלה