» «
שפת תכנות
מהן שפות תכנות?



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

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

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

השפה הזו מאפשרת את קיומו של תִּכְנוּת המחשבים, אחד המקצועות המרכזיים של עידן המחשב.

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

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

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

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

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

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


הכוח והיופי שבתכנות (מתורגם):

https://youtu.be/crw_U-UgvcY


על המצאת שפת התכנות:

https://youtu.be/Wchru8alhaE


מתכנת מסביר על שפות תוכנה שונות (עברית):

https://youtu.be/7Baq_Xw4azM


שפות התכנות הפופולריות ב-50 שנה האחרונות ועד היום:

https://youtu.be/Og847HVwRSI


ההיסטוריה של שפות התכנות:

https://youtu.be/mhpslN-OD_o?long=yes


וקורס מלא לשפת פייתון הפופולרית, קלה ומצליחה מאוד (מתורגם):

https://youtu.be/rfscVS0vtbw?long=yes
שפת מכונה
מהי שפת מכונה, השפה הבינארית שהמחשב מבין?



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

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

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

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

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

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

את ההמרה משפת התוכנה המסוימת לשפת המכונה עושה תוכנת הקומפיילר (compiler), בעברית מהדר, הנכללת בשפות התוכנה השונות. תפקידו הכללי של הקומפיילר הוא להמיר קוד תוכנה משפה לשפה.

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


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

https://youtu.be/GbBI7LSijnM


על האישה שפיתחה את שפת התכנות הראשונה, שפת Cobol:

https://youtu.be/Wchru8alhaE


וסוגי שפות המחשב השונים, משפת המכונה והשפות הבסיסיות שהמחשב מבין (Assembly language), אל השפות העיליות, המאפשרות למתכנתים בדרך לכתוב קוד:

https://youtu.be/aYjGXzktatA
ארגומנטים
מהם פרמטרים וארגומנטים בקוד התוכנה?



נהוג לומר שהשם הנרדף של "ארגומנטים" הוא "משתנים" או גם "פרמטרים".

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

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


#דוגמה
למשל כאן, ניתן לראות ש-x הוא פרמטר, בעוד ש-y הוא ארגומנט.

int f(struct S *x);
return f(&y);


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


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

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

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


#לכן תיאורטית...
ה"פרמטרים" שההגדרנו בפונקציה עצמה, אלה "פרמטרים פורמליים" (Formal Parameters). לעומתם, ה"פרמטרים" שנשלחים לפונקציה הקיימת, נקראים "פרמטרים אקטואליים" (Actual Parameters) והם הארגומנטים.


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


הנה ארגומנטים בפייתון:

https://youtu.be/tQ7it_vlptA


ופרמטרים וארגומנטים בשפת Javascript:

https://youtu.be/G4lZSWssoqA
סוס טרויאני
מהם סוסים טרויאניים בעולם המחשבים והרפואה?



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

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

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

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

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


הנה סרטון שממחיש את מה שעושה תוכנת הסוס הטרויאני במחשב:

https://youtu.be/CvRIZHQMgco


ההשראה ההיסטורית - סוס העץ מטרויה:

https://youtu.be/YbiR6IMf5KQ


סוגי הנוזקות השונים במחשבים, כולל הסוס הטרויאני:

https://youtu.be/n8mbzU0X2nQ


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

https://youtu.be/ZLaubULnFu8

הנדסת תוכנה

תיכנות
למה כדאי ללמוד תכנות?



תכנות (Programming) הוא כתיבת קוד לתוכנה, או למה שאנו מכנים "תוכנות". בתכנות בונה המתכנת את התוכנה. לתכנות משתמש המתכנת בשפות תוכנה שונות.

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

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

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

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


הנה מה שבתי הספר, וזה חמור - לא מלמדים ילדים (מתורגם):

https://youtu.be/nKIu9yen5nc


התכנות משנה את העולם (עברית):

https://youtu.be/6_RFZr9mWvc


הסברים לטוב שבתכנות (בעברית):

https://youtu.be/hyCqL_lLDOQ
מתכנת
איך עובד המתכנת?



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

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

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


הנה מתכנתים בחברות סטרטאפ שעובדים ביחד (עברית):

http://youtu.be/iAyfMSmxKoQ


כאן ההבדל בין תיכנות כמו שמציגים אותו בסרטים ובסדרות טלוויזיה ובין המציאות:

https://youtu.be/HluANRwPyNo


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

https://youtu.be/S5S9LIT-hdc


וכמה חשוב הוא קוד תוכנה:

http://youtu.be/QdVFvsCWXrA
תכנות
מה זה תיכנות?



אם שאלתם את עצמכם פעם מה זה תִּכְנוּת (Programming או Coding) הרי שאתם לא לבד.

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

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

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

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

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

ואכן, בעולם של המתכנתים יש אבחנה מסוימת בין programming, בעברית תִּכְנוּת, שזו דרך החשיבה לפתרון בעיות ברמה היותר מופשטת וייתכן אף בלי ידע בשפת תוכנה ספציפית, לבין coding שזה קִידּוּד והוא יותר החלק הטכני יותר של כתיבת הקוד ומחייב ללמוד את התחביר, ה-Syntax של השפה שבה ייכתב הקוד שלך.

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


הנה עולם התיכנות:

https://youtu.be/dU1xS07N-FA?long=yes


ובעולם הפיתוח לא מעט רואים הבדל בין מתכנת programmer למקודד, coder:

https://youtu.be/CIRGjwYgdT4
ביצת פסחא (מחשבים)
מה למתכנתים ולביצי פסחא?



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

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

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

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

נסו דוגמה לאיסטר אג בגוגל תרגום:
הדביקו בגוגל טרנסלייט את הרצף הבא:
pv zk pv pv zk pv zk kz zk pv pv pv zk pv zk zk pzk pzk pvzkpkzvpvzk kkkkkk bsch
ואז בחרו תרגום מגרמנית לגרמנית ולחצו על אייקון הרמקול הקטן שישמיע את התוצאה.


הנה ביצי הפסחא הגדולות של משחקי המחשב:

https://youtu.be/sirz0TnTje4


פירורי לחם
מהם פירורי לחם באתרי אינטרנט?



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

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

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

מחשבים >> אינטרנט >> אתרים >> אנציקלופדיות


כך יוצרים את הברד-קראמבס:

https://youtu.be/4s8qb8sK8vY


וניווט אינטרנט בעזרת "פירורי הלחם הממוחשבים":

https://youtu.be/YMiXPJE2NSo
איך מנפים שגיאות באמצעות ברווז גומי?



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

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

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

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

השיטה נקראת גם "מבחן ברווז הגומי" או "בִּירווּז", על משקל תכנות. היא יעילה ותורמת גם לתיעוד יעיל של התוכנה או המכשיר, לצורך כתיבת חוברת למשתמש או להוראתה. בדיקת שגיאות תוך היעזרות בברווז גומי מקבילה לבדיקה של הקוד על ידי עמיתים (שיטה שנקראת "Code Review") ולשיטה שבה מסביר המתכנת את הקוד למתכנת עמית (Software Walkthrough).


הנה סרטון על הבירווז - ניפוי השגיאות בעזרת ברווז גומי:

https://youtu.be/SJC5DAfCrHY


סיפור הניפוי של השגיאות באמצעות ברווז הגומי:

https://youtu.be/huOPVqztPdc


כך מנפים את השגיאות בעזרת ברווז גומי:

https://youtu.be/m4_depGYVkM
מה זה OCR וטכנולוגיית זיהוי התווים האופטי?



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

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

המושג הוא בעצם ראשי תיבות של "Optical Character Recognition" או בעברית: זיהוי תווים אופטי.

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


הנה OCR:

https://youtu.be/jO-1rztr4O0


קטע מתכנית מחשבים בעברית, שבה מסבירים לקיציס מה זה OCR:

https://youtu.be/j87b_fOo8EE?t=5m28s&end=11m13s


כיום יש OCR מובנה במכונות צילום משוכללות שונות:

https://youtu.be/Gq8usubMZgE?t=22s


ואפילו באפליקציה של גוגל תרגום, שמתרגמת שלטים משפה לשפה מיד:

https://youtu.be/Ro-HfETpzhc
אילו תכונות מאפיינות אלגוריתמים?



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

כשהוא בנוי נכון יש לאלגוריתם כמה תכונות:

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

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

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


הנה האלגוריתם ותכונותיו (מתורגם):

https://youtu.be/6hfOvs8pY1k
מה הן קוקיז, או עוגיות באינטרנט?



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

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

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

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

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


הנה ההסבר של קוקיז:

https://youtu.be/I01XMRo2ESg


ופירוט באנימציה:

https://youtu.be/IPQhME1UYQU
מה ניתן לעשות עם לולאה בתכנות?



מתכנתים לא אוהבים לעשות שוב ושוב את אותה פעולה. לכן הם משתמשים בפטנטים כמו לולאה (Loop).

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


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


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

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

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

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

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

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


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

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

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

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


הנה סרטון שמסביר מהן לולאות:

https://youtu.be/r3Ti5Xp9W8A?end=1m53s


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

https://youtu.be/yBCNY__d4ic


והסבר לולאות ב-Javascript (עברית):

https://youtu.be/PaPMOL12V3g
מהי מחלקה בתכנות מונחה עצמים?



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

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

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


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

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

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

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

זוכרים את המאפיינים? - בתכנות מונחה עצמים המשתנה הזה של צבע הנוצה נקרא "מאפיין" (Property). אז ה-Property, כלומר משתנה צבע הנוצה, מקבל אצל העורב ערך (Value) של... שחור.


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


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

כל מחלקה מכילה תכונות (attributes) או מאפיינים (properties) ושיטות או מתודות (methods).

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


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

יש במחלקה גם את השיטות (Methods) של האובייקט, כמו נסיעה, בלימה וכו'.

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


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

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

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


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

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

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


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

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

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


#דוגמה אחרונה
אם מחלקה או class היא blueprint, תכנית-אב לאובייקט חדש, אז בואו נגדיר מחלקה של "מטוס נוסעים".

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


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

https://youtu.be/tE2e9SXLyQs?end=2m14s


סרטון שמסביר את הגדרת המחלקות והשימוש בהן בשפת Java:

https://youtu.be/L5XI50A1az4


למדו על המחלקה בתכנות בשפת פייתון:

https://youtu.be/ZZCnfRmxq6s


והסבר על הגדרת מחלקות ב-Javascript, ביחד עם עוד דברים:

https://youtu.be/Q0IFtEB1RH4
מה ההבדל בתכנות בין פריימוורק לספרייה?



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

אבל מהם השניים ומה ההבדל ביניהם?


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

מפתחים משתמשים בדרך כלל לסירוגין במונחים "ספרייה" (Library) ו"פריימוורק" (Framework), אבל יש ביניהן הבדל מהותי שכדאי להבין.

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

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


#המחשת ההבדלים
בואו נדמה את השניים לדברים שאתם מכירים מהבית שלכם:

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

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


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

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


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

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

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


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

https://youtu.be/D_MO9vIRBcA


פריימוורק:

https://youtu.be/BfhSoFARn6w


דוגמה לספריה הפופולרית ריאקט:

https://youtu.be/N3AkSS5hXMA
מהם בוטי הכתיבה שכותבים חדשות ומייצרים אותן?



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

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

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

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

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

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

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

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

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


מוצר של חברת "Automated Insights" שמנתח נתונים רבים ומספק מאמרים בלשון אנושית, שקל לקרוא ולהבין:

http://youtu.be/hx1SMxgxKnc


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

https://youtu.be/XFYckCslt74


בוט כתיבה שלומד את כתב היד שלך וכותב בשמך:

https://youtu.be/LsZH7SS_lfQ


ועוד רובוט כתב יד:

https://youtu.be/BqgT_Nu0QnY


מהם משתנים בתכנות מחשבים?



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

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


#בתוכנה
אז משתנה (Variable) בתכנות הוא מרכיב מרכזי בתוכנית מחשב, שמהווה בעצם זיכרון. הוא מעין תא תכנותי, קופסת איחסון (Place holder). הנתונים שנשמור במשתנה יכולים להיות כאלה שאנו מייצרים במהלך התכנית, או כאלה שקיבלנו מהמשתמש.

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


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

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

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

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


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

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

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


הנה סרטון שמסביר מהו משתנה:

https://youtu.be/xjZDZ1TJe4o?t=48s&end=1m53s


המשתנים לתלמידי תכנות שפת פייתון (עברית):

https://youtu.be/FadkQtKw2Dc


והסבר משתנים ב-Javascript (עברית):

https://youtu.be/F6hLRLho0Lc
איך פועלות תוכנות תרגום?



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

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

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

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

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

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


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

https://youtu.be/LKB3FdgjexU


כך מתרגמות תוכנות תרגום בזמן אמת, על המקום:

https://youtu.be/X4BmV2t83SM


וזו הדרך שבה פועלת תוכנת תרגום של גוגל:

https://youtu.be/_GdSC1Z1Kzs


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

https://youtu.be/oaVQxtzSkp4
מהי פונקציה בתכנות?



מכירים את זה שאתם עושים שוב ושוב, כל יום או כל כמה שעות את אותה פעולה וזה נראה לכם לא הגיוני?

גם מתכנתים לא אוהבים לעשות שוב ושוב את אותה פעולה. לכן הם למשל משתמשים בלולאות (Loops). אבל יש מרכיב שחוסך עוד יותר עבודה וכתיבת קוד מיותר. כי מתכנתים אוהבים לשמור את הקוד שלהם DRY, קיצור של "don’t repeat yourself".

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


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

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

מדהים לא?

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

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

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


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


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

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


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

סוף טוב הכל טוב!

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


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

איך זה עובד?

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

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

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

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

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

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

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

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

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

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


הנה סרטון שמסביר את הפונקציה בפשטות:

https://youtu.be/3JIZ40yuZL0?end=2m40s


הפונקציה לתלמידי תכנות שפת פייתון (עברית):

https://youtu.be/o0wyYsNbJeY


והסבר הפונקציות ב-javascript (עברית):

https://youtu.be/c7mqY6QtdQQ
איך מקלה רשת CDN על גולשי האינטרנט?



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

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

מה שמאפשר את הרצף הזה של הסרטונים מיוטיוב, או טעינה ופעולה מהירה של אתרים בינלאומיים כמו פייסבוק, גוגל וכדומה, הן רשתות CDN, קיצור של Content Delivery Network, או בעברית "רשת הפצת תוכן".

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

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

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


כך פועלת רשת CDN ברשת האינטרנט:

http://youtu.be/fiTY74JWDNI


פרסומת שמסבירה עד כמה חשובה הפעולה המהירה של אתר אינטרנט וכמה רשתות CDN תורמות לכך:

http://youtu.be/P67qQNY5FJI


הסבר בעל פה על רשתות CDN:

http://youtu.be/nle1q0qSYmA


יש יתרונות רבים לרשת CDN כזו:

http://youtu.be/7cgSVAaLYec


רשת ה-CDN אמורה להיות זולה ויעילה יותר ממרכזי נתונים שיוקמו לבד:

http://youtu.be/tNGTOenxDp8
איך פועל המחשב האישי?
מהו וירוס מחשבים?
מהו באג במחשבים?
מהו תכנות מונחה עצמים?
מהם קודק, אנקודר ודיקודר?


אֵאוּרִיקַה - האנציקלופדיה של הסקרנות!

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

אלפי נושאים, תמונות וסרטונים, מפתיעים, מסקרנים וממוקדים.

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

בואו לגלות, לחקור, ולקבל השראה!

אֵאוּרִיקַה - האנציקלופדיה של הסקרנות!

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