משתמש:מאיר קרמר/תכנות מחשבים

מתוך ויקיפדיה, האנציקלופדיה החופשית

תכנות מחשבים[עריכת קוד מקור | עריכה]

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

מקור המונח[עריכת קוד מקור | עריכה]

מקור המונח תכנות מהמילה תכנית מאחר ותכנות הוא תהליך בו יוצרים תכנית מחשב[1].

תהליך התכנות[עריכת קוד מקור | עריכה]

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

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

תכנות ופיתוח תוכנה[עריכת קוד מקור | עריכה]

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

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

היסטוריה[עריכת קוד מקור | עריכה]

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

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

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

ראשית עידן המחשוב - שפת מכונה[עריכת קוד מקור | עריכה]

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

  1. ארכיטקטורה - המחשבים הראשונים נבנו באופן שלא היה ניתן לתכנתם בשיטה שאינה שפת מכונה בגלל אילוצים טכנים שונים.
  2. כח חישוב - המחשבים הראשונים היו בעלי כח חישובי חלש מאד בהשוואה למחשבים מודרנים. תכנות בכל שיטה שאינה שפת מכונה דורש כח חישובי נוסף על מנת לייצר את הקוד בשפת מכונה מה שלא 'השתלם' באותה תקופה.

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

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

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

השלב השני - שפות סף[עריכת קוד מקור | עריכה]

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

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

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

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

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

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

השלב השלישי - שפות עילית[עריכת קוד מקור | עריכה]

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

פיתוח של שפה עילית כולל שני חלקים:

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

למרות היתרונות המשמעותים שיש לתכנות באמצעות שפות עילית ישנם שני חולשות בשפות עילית שבמצבים מסויימים נחשבים לחסרונות:

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

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

השלב הרביעי - בינה מלאכותית ושפה אנושית[עריכת קוד מקור | עריכה]

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

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

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

תכנות בשפה אנושית ניתן לביצוע בכמה רמות:

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

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

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

הטכנולוגיה[עריכת קוד מקור | עריכה]

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

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

יתרונות[עריכת קוד מקור | עריכה]

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

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

חסרונות[עריכת קוד מקור | עריכה]

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

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

כיום[עריכת קוד מקור | עריכה]

השימוש בבינה מלאכותית לצורך תכנות הפך לפופלרי מאד בקהילת המתכנתים. בין השימושים הנעשים בבינה מלאכותית לצורך תכנות ניתן למנות:

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

דוגמאות לתהליכי תכנות שונים[עריכת קוד מקור | עריכה]

במסגרת פיתוח תוכנה[עריכת קוד מקור | עריכה]

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

בסיס התוכנה[עריכת קוד מקור | עריכה]

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

לאחר הגדרת כלל התוכניות הנדרשות לתוכנה הביצוע בפועל הוא על ידי מתכנת שמקבל את רשימת הדרישות עבור כל תכנית ויוצר אותה באמצעות שפת התכנות המתאימה.

בדיקות[עריכת קוד מקור | עריכה]

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

לדוגמה: כדי לוודא שהתוכנית ליצירת קובץ אכן פועלת כמצופה יש ליצור תוכנית שתשתמש בתוכנית ליצירת קובץ ותבדוק שהקובץ אכן נוצר.

פריסה[עריכת קוד מקור | עריכה]

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

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

במסגרת לימוד[עריכת קוד מקור | עריכה]

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

תכנית שלום עולם[עריכת קוד מקור | עריכה]

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

פתרון אתגר תכנות[עריכת קוד מקור | עריכה]

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

שיטה זו מיושמת במסגרות לימוד שונות ואף משתמשים בה במבחנים.

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

חלק מהאתרים הפופלרים הם:

במסגרת מחקר[עריכת קוד מקור | עריכה]

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

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

עבור דרישות נקודתיות[עריכת קוד מקור | עריכה]

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

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

משימות תכנות נפוצות[עריכת קוד מקור | עריכה]

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

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

בין משימות התכנות הנפוצות ניתן למנות:

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

סוגי תכנות[עריכת קוד מקור | עריכה]

ניתן לחלק את סוגי התכנות באופן כללי לשלושה:

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

כלי עזר[עריכת קוד מקור | עריכה]

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

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

שפות תכנות נפוצות[עריכת קוד מקור | עריכה]

  • ג'אווה סקריפט
  • פייתון
  • ג'אווה
  • סי שארפ
  • סי פלוס
  • סי
  • פי איצ פי
  • גו
  • אר
  • סוויפט

לימוד תכנות[עריכת קוד מקור | עריכה]

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

שלבים נפוצים בלימוד תכנות:

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

שיטות למידה

לימוד תכנות יכול להתבצע במגוון דרכים:

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

לימוד תכנות בישראל

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

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

תכנות מול הנדסת תוכנה[עריכת קוד מקור | עריכה]

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

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

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

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

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^
    שגיאות פרמטריות בתבנית:צ-מאמר

    פרמטרי חובה [ מחבר ] חסרים
    {{{מחבר}}}, תכנות, ויקימילון, 2024-01-31