זהו קורס בסיסי במתמטיקה, שדן בראשית בפתרון מערכות משוואות ממעלה ראשונה במספר כלשהו של נעלמים. החומר שנלמד בקורס זה הוא חומר חיוני להמשך הלימודים במתמטיקה ובמדעי המחשב. נלמד להשתמש בכלים מתמטיים בסיסיים כמו מטריצות, קואורדינאטות, טרנספורמציות (סיבובים שיקופים, הטלות ועוד).
הנושאים הנלמדים: שדות. מערכת משואות ליניאריות מעל שדה. מטריצות. פעולות אלמנטריות, מטריצות אלמנטריות וכפל מטריצות מעל שדה ומעל חוג. הדטרמיננטה של מטריצה. מרחבים וקטוריים: תת-מרחבים, בסיסים, מימד, מרחב שורות, מרחב עמודות ומרחב האפס של מטריצה, מטריצת הקואורדינאטות. העתקות ליניאריות: גרעין ותמונה, אריתמטיקה של העתקות ליניאריות, ייצוג של העתקה ליניארית בעזרת מטריצה, תכונות ההצגה. אינטרפולציה של Lagrange. הדטרמיננטה כפונקצית נפח.
קורס זה הוא קורס המשך של הקורס באלגברה ליניארית א. הנושאים בהם נדון בקורס זה: ערכים עצמיים ווקטורים עצמיים. לכסון מטריצות ואופרטורים. מרחבי מכפלה פנימית מעל הממשיים ומעל המרוכבים. בסיסים אורתונורמליים ותהליך Schmidt-Gram .גאומטריה של מרחבי מכפלה פנימית. פיתוח Fourier .קירוב טוב ביותר בתת-מרחב נוצר סופית. מטריצות אורתוגונליות והעתקות אורתוגונליות. מבוא קצר לגאומטריה אפינית.
הקורס מציג לסטודנטים את הרעיונות המרכזיים של האנליזה ומראה איך ניתן בעזרתם לחקור תכונות של פונקציות.
המספרים הממשיים: תכונות של הממשיים, קטעים, ערך מוחלט, חסם עליון, חסם תחתון. השוואה בין מושג המספר במתמטיקה ובתכנות.
גבול של פונקציה: איך ניתן להבטיח כי הפלט של הפונקציה נמצא בטווח רצוי תוך שליטה בקלט? נראה איך ההגדרה הפורמאלית של הגבול היא התשובה המתמטית לבעיה החישובית הזו.
פונקציות רציפות וגזירות בקטע: נראה מה ניתן ללמוד על פונקציה מהגבולות והנגזרת שלה. משפט ערך הביניים ומשפטי וויארשטראס. משפט רול, משפט לגרנג', חקירת פונקציות (תחומי עליה וירידה, נקודות קיצון, קמירות, אסימפטוטות), כלל לופיטל. פונקציות מונוטוניות. משפטים על פונקציות הפוכות, פונקציות הפוכות טריגונומטריות, פונקצית הלוגריתם והפונקציה המעריכית).
אינטגרלים: האינטגרל המסוים, האינטגרל הלא מסוים, והקשר ביניהם.
זהו קורס ראשון בסדרה של קורסים מתמטיים. הוא מתמקד בכלים המתמטיים הנדרשים לתיאור אובייקטים גיאומטריים במישור ובמרחב ובמושגים הבסיסיים של פונקציות.
גיאומטריה אנליטית במישור ובמרחב: וקטורים, מכפלה סקאלרית, מכפלה וקטורית, ישרים ומישורים. משוואות ותכונות בסיסיות של שניוניות. מספרים מרוכבים: הגדרות ותכונות בסיסיות, המישור של גאוס, הצגה קוטבית, שורשי היחידה. פונקציות: תכונות בסיסיות, גרף של פונקציה, הזזות של גרף, הרכבה של פונקציות. גבולות של פונקציה: הגדרה אינטואיטיבית בעזרת דוגמאות נומריות וגרפיות, חישובים של גבולות של פונקציות רציונליות תוך שימוש בחלוקת פולינומים. נגזרת: הגדרה, משמעות וחוקי גזירה.
הוראת התכנות במכללת הדסה מתפתחת בהקבלה לאבולוציה שעבר עולם התכנות: היא מתחילה בתכנות בסיסי, עוברת לתכנות פרוצידוראלי, ממנו לזה המודולארי, ולבסוף לתכנות מונחה עצמים.
בקורס זה נכיר את יסודות התכנות, ואת הגישה הפרוצדוראלית כפי שהיא באה לידי ביטוי בשפות C/C++. כמו כן, כדרכו של קורס מבוא לתחום מדעי, נכיר על קצה המזלג סוגיות שונות בהן עוסק המדע הקרוי 'מדעי המחשב': מהו אלגוריתם? כיצד מעריכים את יעילותו? כיצד ראוי לכתוב כהלכה תכניות מחשב? כיצד מנהלת מערכת ההפעלה את הזיכרון המוקצה לתכנית? בכל בסוגיות הללו ניגע תוך שאנו פוסעים בנתיב התכנותי: כל שאלה תוצג בהקשר של תכניות להן היא רלוונטית.
הנושאים הנלמדים: פקודות בסיסיות (קלט פלט [cin ו- cout], השמה). פקודות בקרה (תנאים ולולאות). מערכים. קבועים וטיפוסים ברי מניה. פונקציות, והשימוש בהן לכתיבת תכניות פרוצידורליות (כולל פרמטרי ערך ופרמטרי הפניה, ופונקציות המחזירות ערך). תכנות תוך שימוש ברקורסיה. קבצים. בדיקת נכונותה של תכנית. הכרות עם מספר אלגוריתמים בסיסיים (מיון בועות, מיון הכנסה, מיון מהיר, מיון מיזוג, חיפוש סדרתי, חיפוש בינארי, מגדלי האנוי, בעיית שמונה המלכות). הערכה אינטואיטיבית של זמן ריצה. אופן הקצאת הזיכרון לתכנית (על גבי המחסנית).
בקורס פרקים שונים העוסקים בנושאים בסיסיים של מדעי המחשב המודרניים. הקורס מקנה לסטודנט הצצה לתחומים השונים ובונה בסיס איתן לקראת המשך הלימודים.
כיצד נשמר מידע במחשב? איך המחשב מבצע פעולות בסיסיות? בקורס נכיר את אבני הבניין היסודיות של מערכות
ממוחשבות. נלמד כיצד מידע מיוצג באופן בינארי ומיהם השערים הלוגיים הבסיסיים המאפשרים לנו לעבד מידע
מכל סוג: מספרים, אותיות, מוסיקה, תמונות ועוד. כמו כן בקורס הזה נלמד להתייחס למחשב ה- PCבשפה שלו ונכיר דרכי התערבות בין התכנות בשפת C לבין ריצת התוכנה על החומרה.
הקורס הינו קורס מבוא לחומרה, מבוא לתכנון מעבדים ספרתיים והכרת עקרונות של תכנות בשפת סף.
בקורס נכיר את המבנה והתפקוד של אבני הבניין המרכיבות את חלקי החומרה במחשב. נממש מערכות ומודולים בעזרת לוגיקה צירופית ולוגיקה סדרתית תוך שימת לב לאילוצים השונים (זמן תגובה, סוג שערים ועוד) המהווים חלק בלתי נפרד מהעיצוב.
כמו כן נכיר את עקרונות התכנות בשפת סף. הכרת פקודות האסמבלי של המעבדים ממשפחת X86 של אינטל. נבין נכתוב תוכניות בסיסיות בשפת סף בארכיטקטורת 32 ביט בסביבת SASM, ובעיקר נבין את הקשר בין תפקוד פונקציונאלי של קוד שנכתב בשפה עילית לקוד בשפת סף.
הקורס מתחיל ביסודות השפה המתמטית ומציג את כללי המשחק ואת המושגים הבסיסיים של לימודי המתמטיקה בפרט והתיאוריה של מדעי המחשב בכלל.
הפרק הראשון, לוגיקה מתמטית מבהיר מהו פסוק מתמטי ומהו משפט מתמטי, מהי הוכחה מתמטית, ומהן דרכים אפשריות לבניית הוכחה. הפרק כולל את הנושאים הבאים: מבוא, תחשיב הפסוקים, הקשרים הלוגיים, שקילות לוגית, טאוטולוגיות וסתירות, הוכחה בדרך השלילה, קבוצות שלמות של קשרים, פסוקים בצורת CNF ובצורת DNF. תחשיב היחסים, הכמתים הלוגיים, שקילות לוגית.
הפרק השני, תורת הקבוצות עוסק במושג המרכזי של הקורס ובשילובים שונים בין קבוצות. תחילה נראה שלא כל ביטוי מגדיר קבוצה (פרדוקס הספר). אחר-כך נעסוק במושגים הבסיסיים ובפעולות הבסיסיות (קבוצה, איבר, תת-קבוצה, קבוצת החזקה, קבוצה אוניברסאלית, חיתוך, איחוד, משלים, הפרש סימטרי, מכפלה קרטזית). נייצג קבוצות בכלים גרפיים באמצעות דיאגרמות וון.
הפרק יחסים בינאריים פותח צוהר למספר כיוונים מרכזיים בלימודי המתמטיקה: הוא מאפשר להגדיר את יחס השקילות, את יחס הסדר (ומתוכו את מושג האינדוקציה) ואת הפונקציה (גרף של פונקציה, טווח, תחום, פונקציה חד-חד-ערכית, פונקציה על, הרכבה של פונקציות, פונקציה הפיכה, תמורות, פונקציות אופייניות). המושגים הללו גם יאפשרו לנו להגדיר גודל של קבוצה.
בפרק קומבינטוריקה נעסוק בגדלים של קבוצות. נבין איך ילד יודע למנות (ולחשב גודל של קבוצה) ובעקבותיו נעשה זאת גם אנו. נפגוש בעקרון שובך היונים ונחשב את מספר הדרכים שבהן יכול שומר המעילים במלתחת התיאטרון להשיב לקבוצת אנשים את מעיליהם כך שלא יהיה אפילו חבר אחד בקבוצה שיחזור הביתה עם מעילו שלו (שיטות מנייה, משפט הבינום, זהויות קומבינטוריות, עיקרון ההכלה וההדחה).
הקורס מתחיל ביסודות השפה המתמטית ומציג את כללי המשחק ואת המושגים הבסיסיים של לימודי המתמטיקה בפרט והתיאוריה של מדעי המחשב בכלל.
הפרק הראשון, לוגיקה מתמטית מבהיר מהו פסוק מתמטי ומהו משפט מתמטי, מהי הוכחה מתמטית, ומהן דרכים אפשריות לבניית הוכחה. הפרק כולל את הנושאים הבאים: מבוא, תחשיב הפסוקים, הקשרים הלוגיים, שקילות לוגית, טאוטולוגיות וסתירות, הוכחה בדרך השלילה, קבוצות שלמות של קשרים, פסוקים בצורת CNF ובצורת DNF. תחשיב היחסים, הכמתים הלוגיים, שקילות לוגית.
הפרק השני, תורת הקבוצות עוסק במושג המרכזי של הקורס ובשילובים שונים בין קבוצות. תחילה נראה שלא כל ביטוי מגדיר קבוצה (פרדוקס הספר). אחר-כך נעסוק במושגים הבסיסיים ובפעולות הבסיסיות (קבוצה, איבר, תת-קבוצה, קבוצת החזקה, קבוצה אוניברסאלית, חיתוך, איחוד, משלים, הפרש סימטרי, מכפלה קרטזית). נייצג קבוצות בכלים גרפיים באמצעות דיאגרמות וון.
הפרק יחסים בינאריים פותח צוהר למספר כיוונים מרכזיים בלימודי המתמטיקה: הוא מאפשר להגדיר את יחס השקילות, את יחס הסדר (ומתוכו את מושג האינדוקציה) ואת הפונקציה (גרף של פונקציה, טווח, תחום, פונקציה חד-חד-ערכית, פונקציה על, הרכבה של פונקציות, פונקציה הפיכה, תמורות, פונקציות אופייניות). המושגים הללו גם יאפשרו לנו להגדיר גודל של קבוצה.
בפרק קומבינטוריקה נעסוק בגדלים של קבוצות. נבין איך ילד יודע למנות (ולחשב גודל של קבוצה) ובעקבותיו נעשה זאת גם אנו. נפגוש בעקרון שובך היונים ונחשב את מספר הדרכים שבהן יכול שומר המעילים במלתחת התיאטרון להשיב לקבוצת אנשים את מעיליהם כך שלא יהיה אפילו חבר אחד בקבוצה שיחזור הביתה עם מעילו שלו (שיטות מנייה, משפט הבינום, זהויות קומבינטוריות, עיקרון ההכלה וההדחה).
הסדנה מסייעת לסטודנטים להתמודד עם אופייה של המתמטיקה הפוסט-תיכונית. הדגשים בסדנה הם על מושג ההוכחה במתמטיקה, על שימוש נכון בשפה המתמטית, ועל טכניקות שונות לפתרון בעיות.
הסדנה מסייעת לסטודנטים להתמודד עם אופייה של המתמטיקה הפוסט-תיכונית. הדגשים בסדנה הם על מושג ההוכחה במתמטיקה, על שימוש נכון בשפה המתמטית, ועל טכניקות שונות לפתרון בעיות.
הקורס מהווה המשך ישיר של הקורס מבוא למדעי המחשב. ככזה הוא ממשיך את המסע האבולוציוני התכנותי לפרדיגמה המודולארית, ואל סיפו של התכנות מונחה העצמים. במדעי המחשב כמדע נוגע הקורס עת הוא דן במבני נתונים שונים: במיוחד רשימות ועצים (כמובן מכיוון תכנותי) וביעילותם; ובאלגוריתמים קלאסיים. הקורס מרחיב בנושא תפקידם של המצביעים בשפת סי (לשם הגדרת מערכים דינאמיים, רשימות, עצים, ותכנות גנרי, פולימורפי). הקורס מרחיב בנושא 'תכנות כהלכה', כולל מעט על בדיקה של תכניות, וכתיבת ספריות.
הנושאים הנלמדים: טיפול בקבצים חיצוניים (פתיחה\סגירה לקריאה\כתיבה, מצביעי get/put, קריאה וכתיבה על-גבי אותו קובץ בו זמנית). הקצאה דינאמית של מערכים (כולל: הגדרה, הקצאת זיכרון דינמית, שחרור זיכרון, אריתמטיקה של מצביעים, ההבדלים בין זיכרון סטטי לדינמי, העברה/החזרה של מצביעים מפונקציות, מצביע למצביע) מבנים. רשימות מקושרות (כולל מיון מיזוג של רשימות, טיפול ברשימות באמצעות מצביע למצביע). עצים בינאריים (בעיקר עצי חיפוש בינאריים, כולל הכנסה, חיפוש, מחיקה, ואלגוריתמים שונים על עצים). מצביעים לפונקציות (וכתיבת callback functions). מצביעים גנריים (void *) ושימושיהם לכתיבת תכניות פולימורפיות בשפת C (גם בעזרת מצביעים לפונקציות). חלוקת תוכנית לקבצים, הצהרה לעומת הגדרה, הנחיות מהדר (preprocessor), ושימוש ב- makefile. תהליך ההידור והכריכה (compilation and linking) ב- C. מרחבי שמות. טיפול בחריגות. נושאים שונים: מחרוזות ב- C++, inline functions, function overloading, assert, sizeof, typedef ספריות: ספריות סטנדרטיות של C, בנייה והוספה, ספריה סטאטית ודינמית. שימוש בספריה. שיטות לבדיקת תוכנה (כדוגמת valgrind). scanf/printf, argc/argv. פונקציות תבניתיות (template functions). כלי תכנות ב- Linux, כולל מנפים (debuggers).
נעסוק בבעיות מעשיות רבות מכל תחומי מדעי המחשב ונגלה כיצד ניגשים אליהן ואיך פותרים. תחומי העיסוק הם רחבים ביותר. הפתרונות נשענים על כל תחומי המתמטיקה והתיאוריה שנלמדו בקורסים הקודמים. בין הבעיות שבהן נעסוק ניתן להזכיר את הבאות:
• מהו אלגוריתם? מהם המשאבים והמחירים (זמן, מקום)?
• למה מתכוונים כשאומרים "הפרד ומשול"? איך פותרים בעיה על-ידי פרוקה לבעיות "קטנות יותר"?
• כיצד מזהים בזריזות מילה קצרה בתוך קובץ ענק? (התמרת Fourier מהירה ושימושיה).
• באלו פסלים יבחר עלי-בבא כאשר יפרוץ למוזיאון? (תכנון דינמי, בעיית תרמיל הגב).
• האם ומתי כדאי להיות חמדן?
• איך מנתבים משאיות ברשת כבישים, ואיך זה מתקשר לבעיית החתונה ולפתרון סודוקו? (זרימות בגרפים).
• איך מתבצעת הצפנה מודרנית? מדוע אנחנו מסכימים למסור את פרטי כרטיס האקראי שלנו דרך רשת האינטרנט הגלויה לכל, ומדוע הקדמונים לא הסכימו (שיטת RSA ,שיטת רבין).
• במה עדיף המהמר על האיש ה"בטוח"? איך עוזרת אקראיות לפתרון בעיות קשות?
בקורס זה נלמד כיצד ניתן להשתמש ברעיונות של האנליזה כדי לחקור עקומות ומשטחים המוגדרים בצורה פרמטרית או בעזרת משוואות. נעשה שימוש רב בתוכנות גרפיות כדי להדגים את המושגים.
הנושאים הנלמדים: פונקציות וקטוריות: פרמטריזציה חלקה, וקטור משיק, וקטור נורמל, וקטור בינורמל, החלפת פרמטר, אורך קשת, עקמומיות. פונקציות של כמה משתנים: גבולות ורציפות, נגזרות חלקיות, נגזרות כיווניות, דיפרנציאביליות, כלל השרשרת, גרדיאנט, נקודות קיצון, כופלי לגרנג'. עקומות ומשטחים: הגדרה לפי פרמטריזציה או לפי משוואה, חישוב הישר או המישור המשיק. אינטגרגים כפולים: חישובים, משפט פוביני, החלפת משתנה (בעיקר לקואורדינטות קוטביות).
שימושים של אינטגרל: בעזרת אינטגרלים ניתן לחשב נתונים גיאומטריים רבים, כגון השטח של תחום הכלוא בין עקומות או הנפח של גוף במרחב. נראה גם מתי ניתן להכליל את האינטגרל למקרים אינסופיים.
חישובי שטח ונפח, נפח של גוף סיבוב. אינטגרלים לא אמיתיים.
חישובים מקורבים: איך מחשב יכול לחשב אם הוא יודע רק לחבר ולהכפיל? איך מחשבים את הערך שבו פונקציה מתאפסת אם אין לנו נוסחה? החלק השני של הקורס מתייחס לשאלות כאלה. נשתמש בתוכנות גרפיות ונומריות כדי להדגים את המושגים.
סדרות: הגדרה, גבול, סדרת קושי, סדרות רקורסיביות. טורים: הגדרה, התכנסות טורים (בהחלט ובתנאי), מבחני התכנסות, טורי לייבניץ. פולינומי טיילור. טור טיילור של פונקציה והתכנסות לפונקציה. טורי חזקות: הגדרה, רדיוס התכנסות, תחום התכנסות, גזירה ואינטגרציה של טור חזקות, הצגה של פונקציות אלמנטאריות כטורי חזקות, שימוש של טורי חזקות לחישוב ערכים מקורבים, למשוואות דיפרנציאליות. אנליזה נומרית: שיטת החצייה, שיטת ניוטון רפסון, שיטת האיטרציה.
כתיבה טכנית ומדעית הפכה להיות חלק בלתי נפרד מהעולם המקצועי של מדעי המחשב. מטרת הקורס היא לפתח מיומנויות כתיבה והצגה הנדרשות הן במהלך התואר והן בחיים המקצועיים לאחר סיום הלימודים. הקורס יתמקד בנושאים הבאים: קריאת מאמרים מתחום מדעי המחשב, אפיון הכתיבה המדעית, התמודדות עם קריאת מאמר והפיכת הקריאה ללימוד אקטיבי. מבנה המאמר המדעי, עקרונות הסיכום וההתנסות האקדמיים. חיפוש מושכל במאגרי מידע ומנועי חיפוש. בניית מצגות. במהלך הקורס נתרגל את המיומנויות השונות באמצעות כתיבת דוחות, בחירת מאמר והצגתו בפני הכיתה.
כתיבה טכנית ומדעית הפכה להיות חלק בלתי נפרד מהעולם המקצועי של מדעי המחשב. מטרת הקורס היא לפתח מיומנויות כתיבה והצגה הנדרשות הן במהלך התואר והן בחיים המקצועיים לאחר סיום הלימודים. הקורס יתמקד בנושאים הבאים: קריאת מאמרים מתחום מדעי המחשב, אפיון הכתיבה המדעית, התמודדות עם קריאת מאמר והפיכת הקריאה ללימוד אקטיבי. מבנה המאמר המדעי, עקרונות הסיכום וההתנסות האקדמיים. חיפוש מושכל במאגרי מידע ומנועי חיפוש. בניית מצגות. במהלך הקורס נתרגל את המיומנויות השונות באמצעות כתיבת דוחות, בחירת מאמר והצגתו בפני הכיתה.
כתיבה טכנית ומדעית הפכה להיות חלק בלתי נפרד מהעולם המקצועי של מדעי המחשב. מטרת הקורס היא לפתח מיומנויות כתיבה והצגה הנדרשות הן במהלך התואר והן בחיים המקצועיים לאחר סיום הלימודים. הקורס יתמקד בנושאים הבאים: קריאת מאמרים מתחום מדעי המחשב, אפיון הכתיבה המדעית, התמודדות עם קריאת מאמר והפיכת הקריאה ללימוד אקטיבי. מבנה המאמר המדעי, עקרונות הסיכום וההתנסות האקדמיים. חיפוש מושכל במאגרי מידע ומנועי חיפוש. בניית מצגות. במהלך הקורס נתרגל את המיומנויות השונות באמצעות כתיבת דוחות, בחירת מאמר והצגתו בפני הכיתה.
כתיבה טכנית ומדעית הפכה להיות חלק בלתי נפרד מהעולם המקצועי של מדעי המחשב. מטרת הקורס היא לפתח מיומנויות כתיבה והצגה הנדרשות הן במהלך התואר והן בחיים המקצועיים לאחר סיום הלימודים. הקורס יתמקד בנושאים הבאים: קריאת מאמרים מתחום מדעי המחשב, אפיון הכתיבה המדעית, התמודדות עם קריאת מאמר והפיכת הקריאה ללימוד אקטיבי. מבנה המאמר המדעי, עקרונות הסיכום וההתנסות האקדמיים. חיפוש מושכל במאגרי מידע ומנועי חיפוש. בניית מצגות. במהלך הקורס נתרגל את המיומנויות השונות באמצעות כתיבת דוחות, בחירת מאמר והצגתו בפני הכיתה.
בקורס נכיר מושגים ועקרונות העומדים בבסיס מדעי הנתונים. הקורס יתמקד בשיטות ללמידה מתוך נתונים, על מנת לקבל תחזיות ותובנות שימושיות. נכיר מושגים בהסתברות, והסקת סטטיסטית ונעשה חישובים הסתברותיים וסימולציה בשפת R.
נכיר חבילות ופקודות שנועדו להכנת נתונים ותמרון מבני נתונים (dplyr), ייבוא נתונים, הצגת נתונים (ggplot2), כמו כן נכיר מקורות מידע שימושיים בתחום כמו Kaggle, stackOverflow, ומקורות נוספים.
הוראת התכנות במכללת הדסה מתפתחת בהקבלה לאבולוציה שעבר עולם התכנות: היא מתחילה בתכנות בסיסי, עוברת לתכנות פרוצידוראלי, ממנו לזה המודולארי, ולבסוף לתכנות מונחה עצמים.
בקורס זה נכיר את יסודות התכנות, ואת הגישה הפרוצדוראלית כפי שהיא באה לידי ביטוי בשפות C/C++. כמו כן, כדרכו של קורס מבוא לתחום מדעי, נכיר על קצה המזלג סוגיות שונות בהן עוסק המדע הקרוי 'מדעי המחשב': מהו אלגוריתם? כיצד מעריכים את יעילותו? כיצד ראוי לכתוב כהלכה תכניות מחשב? כיצד מנהלת מערכת ההפעלה את הזיכרון המוקצה לתכנית? בכל בסוגיות הללו ניגע תוך שאנו פוסעים בנתיב התכנותי: כל שאלה תוצג בהקשר של תכניות להן היא רלוונטית.
הנושאים הנלמדים: פקודות בסיסיות (קלט פלט [cin ו- cout], השמה). פקודות בקרה (תנאים ולולאות). מערכים. קבועים וטיפוסים ברי מניה. פונקציות, והשימוש בהן לכתיבת תכניות פרוצידורליות (כולל פרמטרי ערך ופרמטרי הפניה, ופונקציות המחזירות ערך). תכנות תוך שימוש ברקורסיה. קבצים. בדיקת נכונותה של תכנית. הכרות עם מספר אלגוריתמים בסיסיים (מיון בועות, מיון הכנסה, מיון מהיר, מיון מיזוג, חיפוש סדרתי, חיפוש בינארי, מגדלי האנוי, בעיית שמונה המלכות). הערכה אינטואיטיבית של זמן ריצה. אופן הקצאת הזיכרון לתכנית (על גבי המחסנית).
כיצד מפתחים יישומים רחבי היקף ומורכבים? כיצד דואגים שהיישומים יהיו שלמים וכלליים? מה המפתח לתכנות ברור ונוח לתחזוקה? תשובות לשאלות אלו הן הבסיס לתכנות מונחה עצמים והנדסת תוכנה. הקורס יעסוק בלימוד העקרונות תוך יישומם בשפת C++. הקורס ילווה בדוגמאות ותרגילים של יישומים מלאים על מגוון מרכיביהם: מבני נתונים, אלגוריתמים, בינה מלכותית, ממשק, גרפיקה, אבטחת מידע, ביצועים ועוד. הקניית העקרונות, בסמסטר זה, תהיה בעיקר סביב הכלים של מחלקות, ירושה, פולימורפיזם, דיאגראמות UML, ומבוא לתבניות עיצוב.
נעסוק בדרכים לייצג מידע במחשב בצורה יעילה, כך שפתרון בעיות יהיה מהיר וחסכוני. כך נפגוש במחסניות, תורים, רשימות מקושרות, עצים מושרשים, ערמות ותורי קדימויות.
הקורס יכלול את הנושאים הבאים:
בקורס זה נלמד נושאים מתמטיים הנחוצים להבנת סוגיות בתיאוריה של מדעי המחשב, בפרט באלגוריתמים, בהצפנה, ובקודים לתיקון שגיאות. הנושאים הנלמדים: חבורות: הגדרת חבורה ותת חבורה, החבורה הסימטרית, הומומורפיזם ואיזומורפיזם, הצגת תמורות, מסלולים, מחלקות ימניות ומחלקות שמאליות, חבורת מנה, המשפט היסודי של ההומומורפיזם. חוגים: הגדרת חוג ותת חוג, אידיאל, תחום שלמות, שדה, חוגי פולינומים, חוגים אוקלידיים, חוגים ראשיים, חוג מנה, בניית שדות סופיים. תורת המספרים: האלגוריתם המורחב של אוקלידס, קונגראנציה. משפט Fermat, משפט ,Euler משפט Wilson , משפט השאריות הסיני, שאריות ריבועיות, טרנספורם Fourier דיסקרטי.
האם עת תכנית מורצת היא שוכנת בזיכרון המחשב? כיצד מנהלת מערכת ההפעלה את הזיכרון הראשי? כיצד מאורגנים הנתונים בדיסק? מהו מדריך (מחיצה, directory)? כיצד ניתן לדאוג שגם אם הדיסק קרס תוכנו של הקובץ לא יאבד? מה קורה עת ממפים קובץ לזיכרון? מה קורה עת אנו מדליקים את המחשב? על שאלות אלה ואחרות יענה הקורס.
נושאי הלימוד: ארגון הזיכרון הראשי (כולל: swapping, paging, segmentation, demand-paging). מערכת הקבצים (כולל NFS, מ.ק. מבוססות יומן). ניהול הדיסק ותזמונו. גוש עליה. ניהול שטח השחלוף. מיטמון וחציצה. מערכי דיסקים (RAID). מערכות קלט\פלט (ברמה התיאורטית וב- Unix). ניהול מערכת הקבצים ב- Unix (כולל: קודקודי הציוד, קישור רך\קשה) טיפול בקבצים ובמדריכים ב- Unix: open(), creat(), read(), write(), lseek(), fcntl() בפרט לשם נעילת קבצים ולטיפול בדגלי הסטאטוס, umask(), access(), chmod(), stat(), rename(), unlink(), opendir(), readdir(), mkdir()קבצים ממופים לזיכרון: mmap(). הכרות עם תכנות בשל (shell programming) באמצעות שפת Python. שיטות להתמודדות עם חסימות הדדיות (אלג' הבנקאים, איתור והיחלצות מחסימות הדדיות בדיעבד) תזמון המעבד בתיאוריה וב- Linux. היכרות עם תכנת cygwin.
נתונים נאספים היום בכל מקום ובכל זמן ונאגרים בכמויות עצומות. הם נוגעים לכל תחומי החיים שלנו, החל מנתונים אודות יעדי טיסה פופולריים והעדפות קניה אונליין, דרך ביצועים פיננסים ונתונים רפואיים ועד אזורי פשיעה.
ניתוח נתונים הוא תהליך של ניקוי, סידור ועיבוד של נתונים לצורך גילוי מידע חשוב או לצורך הסקת מסקנות וקבלת החלטות.
פייתון (Python) היא שפת תכנות מהנפוצות ביותר. פייתון היא שפה אינטואיטיבית, התחביר שלה פשוט וקליט והיא מאפשרת ביטוי של תוכניות מורכבות בדרך קצרה וברורה.
היא שימושית בתחומים רבים כמו: רשתות, עיבוד תמונה, בינה מלאכותית, אוטומציה. ובמיוחד בתחום עיבוד נתונים.
בקורס נציג את עקרונות השפה ואת הבסיס הנדרש לתכנות בה, תוך תרגול כתיבת קוד, פתרון בעיות נפוצות, והקניית מיומנויות להמשך התפתחות עצמית.
משחק "פאק-מן", "חופר", "גנבים בעיר הגדולה", "למינגס" ועוד משחקי מחשב רבים אחרים הם דוגמאות לעולמות עם עצמים, פעולות, ויחסי גומלין ביניהם. יישומים מסוג זה מדגימים היטב את הרעיונות, העקרונות והאתגרים, הקיימים בתכנות מונחה עצמים. הקורס יעסוק בנושאים מתקדמים של תכנות מונחה עצמים כגון: תבניות, איטרטורים, שימוש בספריות קיימות ותבניות עיצוב. ההתנסות התכנותית תכלול יישומים מעולם משחקי המחשב המבוססים על מבני נתונים ואלגוריתמים הנלמדים בקורסים התיאורטיים.
כיצד ניתן לכתוב תכנית אשר קוראת נתונים משני מקורות בו זמנית? או באופן כללי: מבצעת מספר משימות במקביל ובצורה מתואמת אלה עם אלה? כיצד יראה עולם התכנות בעידן בו המעבד כולל מספר ליבות? כיצד ניתן לעשות שימוש מועיל בליבות הרבות?
הקורס כולל שני חלקים: מרכיב תכנותי הכולל היכרות נרחבת עם קריאות המערכת (system calls) של Unix, ועם כלים לתקשורת בין תהליכים ותהליכונים (IPC), ומרכיב תיאורטי הדן ביסודות מערכת ההפעלה, ובמושגי התהליך והתהליכון (thread).
נושאים שילמדו: מבוא למערכות הפעלה. נושאים בארכיטקטורה הרלוונטיים למ.ה. (בפרט פסיקות). מרכיבים של מ.ה. תהליכים (כולל יצור תהליכים ב-Unix: fork(), exec()). תקשורת בין תהליכים ב- Unix (signal, pipes, named pipes, message queues, sockets, shared memory) פתילים (threads, כולל ספריית pthreads). תזמון המעבד (בפרט ב- Linux). סינכרון בין תהליכים (בפרט סמפור בתיאוריה, ב- Unix, וב- pthreads). טיפול בחסימות הדדיות. פרדיגמת התכנות המקבילי: אפשרויות ואתגרים.
שפה פורמאלית היא אוסף מילים המקיימות תכונה מסוימת, ו/או בעלות מבנה מסוים, למשל המספרים הראשוניים, או מילים באורך זוגי עם אות זהה בהתחלה ובסוף, וכדומה. כמעט לכל בעיה (מתמטית) ניתן לבנות שפה, כך שפתרון הבעיה שקול להכרעה אם מילה נתונה נמצאת או לא נמצאת בשפה. נדון בעצמת הקושי להחליט מי נמצא בשפה (ולכן בעצמת הקושי של הבעיה שהיא מבטאת) ע"י ניתוח המורכבות של האוטומט (ה"מחשב") הנדרש לצורך ביצוע ההחלטה.
נתחיל בשפות הפשוטות הנקראות "רגולריות", להן נדרש מחשבון פשוט הנקרא "אוטומט סופי דטרמיניסטי". נאפיין שפות אלו גם ע"י ביטויים מתמטיים הנקראים ”ביטויים רגולריים", וגם ע"י תנאי מבנה הנובעים מ"משפט Nerode", שממנו גם נלמד לבנות את האוטומט הקטן יותר שניתן לבנות. נכיר תכונות מבנה רבות של שפות אלו, ונדון בבעיות הכרעה שונות על המבנה שלהן. בעזרת "למת הניפוח" נלמד איך להוכיח ששפה היא מורכבת יותר משפה רגולרית. נראה שהכנסת אקראיות לפעולת האוטומט לא עוזרת.
נכיר "תהליך דקדוקי" בונה מילים שמאפשר בניית שפות מורכבות יותר הנקראות "חופשיות הקשר", (רוב שפות התכנות הן כאלה). נאפיין שפות אלה גם בעזרת "אוטומט המחסנית" המורכב יותר. נוכיח את "למת הניפוח" ו"למת אוגדן" המאפשרות להראות שיש שפות עוד יותר מורכבות. נכיר את "ההיררכיה של חומסקי" המסווגת את כלל השפות לפי סיבוך התהליך הדקדוקי הנדרש ליצירתן.
גם אם יש לך כל הזמן שבעולם, לא כל דבר ניתן לביצוע! בקורס זה נוכיח למשל שבשום אופן לא ניתן לכתוב תוכנית מחשב שמבצעת את הדבר הבא: נותנים לה תוכנית מחשב A וקלט X עבור A, ועל התוכנית שלנו לומר אם ל- A המופעלת על הקלט X יש "באג". נתחיל עם המודל הפשוט של "מכונת המונים". נופתע לגלות שאם משהו ניתן לחישוב (אפשרי לעשותו), אז אפשר לבצעו כבר ע"י מכונה שיודעת רק להוסיף או להוריד אחד ולעשות קפיצה מותנית (עבור למקום אחר בתוכנית, אם ערך מסוים שונה מאפס). תוך קידוד של תוכניות חישוב ע"י מספרים טבעיים (מספרי גדל), נגלה שיש דברים רבים שאין שום דרך לבצעם (לא רקורסיביים), ושיש דברים שניתנים לביצוע רק למחצה (נל"ר). נדון ב"בעיית העצירה", במניה של קבוצות הנל"ר, קיום נל"ר שאיננה רקורסיבית, משפט הפרמטר ומשפט רייס, ובתוצאות המקסימות של משפטים אלו. "מכונת טיורינג" היא המחשב התיאורטי שהגה אלן טיורינג (משוברי צופן האניגמה הגרמני) הרבה לפני שמישהו ראה מחשב בעולם. נוכיח שמה שניתן בכלל להיעשות, ניתן להיעשות במכונת טיורינג. נדון בשאלות: מה ניתן להיעשות בזמן מעשי, ולא רק באופן תיאורטי? והאם הכנסת אקראיות לעבודת מכונת טיורינג יכולה לעזור? לצערנו לשאלות אלו אין כרגע תשובה, וכנראה לא תהיה אף פעם. נדון במושגים: P, NP, Co-NP, NP שלמות, ונבין את משפט קוק. מסתבר שיש אלפי בעיות תמימות למראה שאילו היינו יודעים לעשות אפילו אחת מהן בזמן מעשי, היינו יכולים לעשות את כולן בזמן מעשי, בעיות אלו נקראות "NP-שלמות". לדוגמא: נתונים n מספרים האם ניתן לחלקם לשתי קבוצות שסכומן שווה? נוכיח על בעיות רבות שהן כאלה, ונכיר "אלגוריתמי קירוב", כלומר דרכים לפתור אותן בכל זאת בזמן מעשי לפחות בחלק מהמקרים.
מערכות תכנה גדולות מטפלות בכמות עצומה של נתונים. על המערכות להיות מסוגלות לפנות לנתונים ביעילות ובמהירות, שכן אחרת זמן התגובה שלהן יהיה בלתי סביר. קורס זה מציג את המודלים התיאורטיים לטיפול בכמות גדולה של נתונים, ואת יישומיהם המעשיים. לדוגמה: כיצד ניתן לבקש ממערכת המחשב לשלוף את כל הנתונים בעלי אפיון כזה או אחר? ומה צריכה המערכת לעשות על-מנת שהנתונים יישלפו במהירות? כיצד נדאג שאם רק כרטיס אחד נותר בטיסה כלשהי הוא לא יימכר, חלילה, באותו זמן בדיוק לשני לקוחות שונים ע"י שני סוכני נסיעות? כיצד נדאג שגם אם המחשב ייפול הרף עין אחרי שהלקוח משך כסף מהמכשיר האוטומאטי חשבונו יחויב בשיעור המשיכה? הנושאים הנלמדים: מבוא למסדי נתונים. מודל היחסים. אלגברה של יחסים. תחשיב יחסים לפי שורות. SQL. אילוצי תקינות ותיכון מסדי נתונים (מפתחות, תלויות פונקציונאליות, צורות נורמאליות). מודל ישויות-קשרים. ניהול תנועות, בקרת מקביליות (שקילות בקונפליקט ושקילות במבט, שווה סדרתיות, פרוטוקולים המבטיחים שווה-סדרתיות – נעילה דו-שלבית, פרוטוקולים ללא נעילות). הכרות עם מערכת ניהול מסד נתונים PostgreSql או MySQL.
מה היא למידה? מה הן מערכות לומדות? האם מכונה יכולה ללמוד ואילו מושגים ניתנים ללמידה? כיצד ניתן ללמד מכונה? באילו שיטות ועבור אילו בעיות?
בשנים האחרונות הודגם שלא רק שמכונות יכולות ללמוד, אלא שזהו כלי חיוני מאין כמוהו לטיפול בבעיות סבוכות ובגודש המידע המציף אותנו. מערכות אוטומטיות הלומדות לזהות דפוסים משמשות כיום מרכיב חשוב במגוון עצום של תחומים וישומים.
בקורס נציג את תחום המערכות הלומדות ואת הקשר שלו לתחומים אחרים. נלמד דרך דוגמאות מעשיות את הנושאים הבאים:
רגרסיה: התאמת מודל לנתונים. שיטות מינימום שגיאה ריבועית. Support Vector machines. זיהוי – detection (האם בתמונה נמצאים פנים? היכן?) recognition (מהו האוביקט הנמצא בקלט, האם זהו אדם?) identification, individualiztion (מי החתול הזה? האם זה מיצי?), למידה מונחית – supervised learning. סיווג – classification (האם הקלט המוגש שייך לקבוצה זו או אחרת, האם זה תפוח או תפוז?) שיטת השכן הקרוב, סיווג בייס נאיבי, עצי החלטה. רשתות עצבים מלאכותיות. למידה בלתי מונחית – unsepervised learning. ניתוח אשכולות – clustering. הפחתת מימדים – dimensionality reduction. למידת חיזוק – reinforcement learning. מודלים להערכת התפלגויות - Probabalistic graphic models. אלגוריתמים גנטיים. ספריות תוכנה ובהן כלי Matlab ו Python (scikit-learn) המממשים מערכות לומדות. בקורס ינתן דגש על למידה אוטומטית מתוך מידע ביורפואי לצרכי זיהוי, אפיון, ניתוח והערכה של המידע.
תמיד חלמת לפתח אפליקציה מקורית לאיפון או לשחק עם רובוטים מונחי מצלמה? פרויקט הגמר הוא ההזדמנות שלך לפתח אפליקציות מתקדמות משלב הרעיון ועד שלב הביצוע. פרויקט הגמר מזמן מצד אחד אפשרות לעבודה עצמאית ומצד שני הנחיה וליווי של כל שלב בתכנון ובביצוע. במסגרת הפרויקט תוכל להביא את מכלול היכולות שלך לידי ביטוי ולעצב "כרטיס כניסה" מכובד לתעשייה. נושאי הפרויקטים ייבחרו על-ידי הסטודנטים תוך תיאום עם מנחי הפרויקטים מתוך מגוון תחומים כגון רובוטיקה, ממשקי משתמש מתקדמים, אינטרנט, גרפיקה, עיבוד תמונה, ראייה ממוחשבת, מיקרו-מעבדים ותכנות מתקדם. בשלב התכנון הסטודנטים ידרשו לגבש הצעת פרויקט ולאחר אישורה ימשיכו לשלב הביצוע הפרויקטים. שלב הביצוע יתמקד בבניית הפרויקט, בבדיקת הפרויקט, בתיעוד הפרויקט, באריזת הפרויקט ובהצגת הפרויקט. כדוגמא לפרויקטי גמר שבוצעו בשנים קודמות ניתן להזכיר מערכת לרוכבי אופניים לסביבת אנדרואיד, מערכת רובוטים מונחי מצלמה לצורכי אבטחה, אפליקציה לתיקון אוטומטי של שגיאות איות וניסוח, תוכנה לזיהוי כתב עברי ומחוות בזמן אמת, תוכנה לאימון דיבור לילדים חרשים ועוד. חלק מפרויקטי הגמר מבוצעים בשיתוף פעולה עם חוגים מבית הספר לתקשורת ועיצוב ועם החוג להפרעות בתקשורת וכן עם גורמים חיצוניים כמו עם המחלקה לזיהוי פלילי, מרכז וריאטי לילדים בעלי צרכים מיוחדים ועמותת מילבת וחברות מובילות בתחומן דוגמת NDS, אינטל, אקסודיוס ומל"מ.
האם מחשב יכול לראות? בעבר נידונה שאלה זו בעיקר בסיפורת הבדיונית אך כיום מתרבים היישומים המשתמשים בראייה ממוחשבת. בקרת תהליכים במפעלים, זיהוי סטיית רכב מן הנתיב, מעקב אחר חשודים בשדות תעופה וזיהוי פנים הם דוגמאות לשימוש מסחרי במערכות של ראייה ממוחשבת.
בקורס נציג את התחום ונתאר בצורה שיטתית את הגיאומטריה של מערכות ראייה ממוחשבת. הנושאים אותם נלמד: פרמטרים של מצלמה, הטלה פרספקטיבית, הטלה אפינית. גיאומטריה פרויקטיבית ושימושיה. טרנספורמציות סיבוב והזזה בדו מימד ובתלת מימד, קואורדינאטות הומוגניות, מעברי מערכות קואורדינאטות. מטריצות הטלה. קליברציה של מצלמות: פתרון מערכת משוואות בשיטת מינימום שגיאה ריבועית, פתרון Ax=0, Ax=b, פסאודו אינברס. הערכה של מטריצת ההטלה בשיטה ליניארית ובשיטה לא ליניארית. פרמטרים פנימיים וחיצוניים של המצלמה, פרוק מטריצת ההטלה. עיוותים רדיאליים. קליברציה אוטומטית. הגיאומטריה של מספר כיווני מבט: גיאומטריה אפיפולרית, חישוב fundamental matrix ישירות ובעזרת נקודות התאמה. Epipolar image rectification. שלושה כיווני מבט. סטראוסקופיה ושחזור תלת מימדי. שימוש בקורלציה להתאמה. שחזור צפוף או על פי נקודות נבחרות. רדיומטריה – מדידת אור: אור במרחב ועל פני משטחים. מקורות אור הצללה וזיהוי מבנה. שימוש ב RANSAC, Hough transform, Harris corner detection ל robust estimation. הפחתת מימדים וזיהוי פרצופים בעזרת PCA. שימוש במידע רב (אינטרנט) לזיהוי: detection and recognition.
כיצד בונים אתר כמו Facebook?
הקורס מקנה ידע בטכנולוגיות תכנות המשולבות באתרים מתקדמים ,עם דגש על חוויה אינטראקטיבית עשירה, ונגישת האתר ,(Accessibility) ופיתוח אתרים המתואמים למכשירים ניידים (Responsive).
לשם בניית אתר שכזה נדרשתיכולת לעצב אתר בצורה תקינה, ידע בטכנולוגיות לפיתוח צד לקוח וצד השרת.
בצד הלקוח זה כולל: HTML5, CSS3 ,JavaScript וידע בספריות השייכות לחברות המובילות כגוןTwitter Bootstrap / React .
בצד השרת זה כולל ידע בניהול מסדי נתונים ,הקמת שרת Web רב לקוחות, פיתוח רכיבים כגון רישום משתמשים, אימות, ניהול תוכן דינמי, חיפוש במאגרי מידע, ניהול סל קניות. נלמד לפתח על בסיס ארכיטקטורה Model-View-Controller ע״י שימוש במערכות(front-end/backend frameworks) כגון Node.JS.
כיצד בונים אתר דואר אלקטרוני כגון gmail?
קורס זה מתמקד בטכנולוגיות מתקדמות של Javaבצד השרת, כלומר בבניית רכיבים הקשורים לניהול מסדי נתונים, תקשורת, הבטחת מידע, ובנית שרותי REST (RESTful web services).
הקורס מפרט את עקרונות התכנות בשפת Java ובטכנולוגיות לבניית אתרים דינמיים ותכנות ברשת תוך כדי לימוד תשתית מתקדמת עשירה Spring framework . שילוב של טכנולוגיות יחד עם החומר הנלמד בקורס הראשון (אינטרנט א׳) מביא לעיצוב ובניית אתרים מרובי משתמשים, ייצור דפים כתוצאה משאילתות ואינטראקציה עם המשתמש, יצירת דפי ממשק ע״י template engines. הקורס מסתיים בבניית אתר מתקדם המשלב את כל הטכנולוגיות הנלמדות.
חובה לתלמידי תואר ראשון שלוקחים את הקורס "מערכות לומדות"
ארכיטקטורה היא התחום במדעי המחשב שמספק את הפלטפורמה למימוש המעשי של החידושים בתכנות ובאלגוריתמים. הגידול העצום במספר שורות הקוד במערכות התכנה המורכבות הקיימות כיום מתאפשר רק תודות לגידול מקביל בקצב החומרה.
בקורס זה נכיר את שיטות העבודה בארכיטקטורה ונלמד את עיקרי הטכנולוגיות הקיימות במחשבים מודרניים. הנושאים הנלמדים: רענון ארגון המחשב, הגדרת קבוצת פקודות (instruction set architecture), מדידות ו- benchmarks, תורת הביצועים וניתוח כמותי של שיטות למימוש פקודות במיקרו-מעבד, המעבר משיטות CISC לשיטות RISC, חפיפת פקודות (pipelining) וניתוח מעצורים, חשבון מחשב ותכנון ALU, שיטות לניהול זיכרון ושיטות cache, תקשורת פנימית בלוח הראשי (motherboard), מערכות superscalar, מעבדים מרובי ליבות, מחשב ה- PC בימינו כמימוש הישגי ארכיטקטורה.
האם תהית מה הקשר בין החומרים שלמדת בתואר שלך לעבודה בעולם האמתי? איך המתמטיקה ועקרונות ההנדסה עוזרות בפתרון בעיות מורכבות בצורה שיטתית?
בקורס הזה אנחנו נלמד דרך מטלות איך לגשר בין עולם המדע לעולם סביבת העבודה, איך הפילוסופיה והלוגיקה עוזרות לנו להבין את העולם בצורה יותר טובה? נלמד איך ההבנה של הבעיה (ניתוח גורם שורש) תורם לפתרון, נלמד שיטות של פתרון כמו סיעור מוחות ועוד.
הדגש בקורס הזה יהיה על כלים ומטלות מחיי היום יום שנתקלים בהם בעולם המחשוב, כמו בעיות Multi Threading, Performance, Algorithms...
הקורס יכלול 5-6 תרגילים, פרויקט סיום ומבחן בהיקף יחסית קטן.
המשימות שרופאים נדרשים לבצע הם רבים ומגוונים, כמו ניתור חולים, אבחנה, בחירת טיפול נכון ואופטימלי, ניתוח של נתונים, סיכום מידע. משימות אלו דורשות מטודולוגיות מתחומים שונים כמו מדעי המחשב, בינה מלאכותית, סטטיסטיקה וניתוח החלטות.
בקורס נכיר את העולם של המערכות תומכות החלטה ברפואה ואת המטודולוגיות השונות שמשתמשים בתחום זה.
נלמד את הנושאים הבאים: מבוא למידענות רפואית (Medical Informatics), רשומות רפואיות וסטנדרטים רפואיים, בסיסי נתונים טמפוראלים, ייצוג יידע, סוגים שונים ומאפיינים של מערכות תומכות החלטה: מערכות מבוססות חוקים, מערכות מבוססות ידע, מערכות לאבחנה רפואית. היסק תלויי זמן, הטיות בשיפוט אנושי, עצי החלטה, הפשטה (abstraction) של נתונים תלויי זמן, וויזואליזציה וניתוח של נתונים רפואיים תלויי זמן, מידול והרצת קווים מנחים, מערכת לסיכום מילולי של נתונים רפואיים.
מהי "הוכחה" במתמטיקה? מתי נאמר על טענה מתמטית שהיא "נכונה"? האם כל טענה נכונה ניתן להוכיח? והאם מה שניתן להוכיח, הוא בהכרח נכון? בקורס זה נרד ליסודות המתמטיקה, נגדיר את מושגים הבסיסיים ביותר כמו "הוכחה" ו"נכונות", ונבין את הקשר בין השניים.
נתחיל בשפה מתמטית פשוטה מאד (תחשיב הפסוקים), נלמד לנסח בה טענות מתמטיות תוך שימוש ב"קשרים" המחברים טענות בסיסיות למורכבות יותר. נראה דרך לכתיבה אחידה של נוסחות (צורה נורמלית), מה שמקל על הטיפול בהן. נדון בקבוצות שונות של קשרים, ומתי קבוצה כזו מאפשרת ליצור את כל הטענות האפשריות ("קבוצה שלמה" ו"קבוצה מצומצמת" של קשרים). נגדיר מהי "נכונות" (השמות וערכי אמת) ומהי "הוכחה", נכיר כלי עזר ליצירת הוכחות (משפט ההיסק, והוכחה מהנחות). נוכיח שכל מה שהוכח אכן "נכון" (משפט הנאותות), ושכל מה שנכון אכן ניתן להוכחה (משפט השלמות). נוכיח את משפט הקומפקטיות שאומר שאם טענה נובעת מקבוצה אינסופית של הנחות, היא נובעת כבר מתת קבוצה סופית של ההנחות. נבין שאין כרגע דרך מעשית להכריע עבור כל נוסחה אם היא נכונה, ונכיר תת משפחה של נוסחאות (בצורת Horn) עבורן זה כן אפשרי.
שפת "תחשיב היחסים" מאפשרת ניסוח טענות מתמטיות מרוכבות הרבה יותר, נעבור את כל התהליך גם עם שפה זו, נדבר על נכונות מול הוכחה, משפט הנאותות ומשפט השלמות (ללא הוכחה), וגם משפט הקומפקטיות. נכיר את אקסיומות פיאנו והמודל הסטנדרטי של המספרים הטבעיים, ואת משפטי אי השלמות העמוקים של גדל (ללא הוכחה) שאומרים שבמערכת הנ"ל של הטבעיים תמיד יהיה משהו שלא הוא ולא שלילתו ניתנים להוכחה, ושלא ניתן לצפות שהמערכת תוכיח שמה שהוכחנו בה אכן נכון!
בהמשך נדבר על שפות עוד יותר מורכבות המאפשרות נכונות יחסית לזמן (לוגיקה טמפורלית), ועל שפות המרחיבות את המושג נכון/לא נכון, ומאפשרות גם משהו באמצע.
מטרות אבטחת מידע, איומים כללים על מערכות מידע. יסודות תורת ההצפנה, הנדסת קריפטוגרפיה: צפנים סימטריים ואסימטריים (DES, AES), צפני גושיים וצפני זרם (RC4). שיטות החלפת מפתחות (Diffie-Helman). אלגוריתמי גיבוב (HASH) קריפטוגרפים וחתימות דיגיטליות. סרטיפיקטים ותשתיות מפתחות פומביים (PKI). מדיניות אבטחה ויסודות הגנה: הגנה לעומק , הפרדת אחריויות והרשאות, זיהוי, אימות, הרשאות ועיקרון של זכות מינימלית, Bell LaPadua model. מושגים וטכניקות של התקפות. תוקפים ואתיקה. יסודות אבטחת רשתות, ניתוח מקרה SSL, יסודות אבטחת מחשבים, מערכות הפעלה ו-Trusted Computing. ניתוח מקרה אנדרויד.
מה הן בדיקות תוכנה? מה היא אוטומציה? מהם הכלים לאוטומציה של בדיקות תוכנה? כיצד לסדר סביבת עבודה מאפס? מה ההבדל בין בדיקות תוכנה של יישום אינטרנטי ליישום נייד?
בשנים האחרונות הוכח שלא רק ניתן להחליף בדיקות ידניות באוטומטיות, אלא שזוהי הדרך היחידה המאפשרת לחברת היי-טק לגדול בצורה בטוחה ללא השקעה הולכת וגדלה בגיוס בודקים ידניים. מערכות אוטומציה הבודקות מוצרי תוכנה/קושחה/חומרה, על בסיס ריצה מתוזמנת בלתי פוסקת, מהוות היום מרכיב חשוב במגוון רחב של חברות היי-טק שונות ויישומים שונים.
בקורס נציג את תחום הבדיקות ידניות והאוטומטיות של תוכנה. נלמד דרך דוגמאות מעשיות את הנושאים הבאים:
בדיקות תוכנה ידניות: אין לגשת ללימוד של אוטומציה ללא הבנה בסיסית של מתודולוגיה של בדיקות ידניות. אנו נקדיש חלק קטן של זמן ללימוד והתנסות בבדיקות ידניות. מומלץ לקחת קורס נוסף מורחב בנושא, כי מדובר במקצוע שלם שאך הוא נחוץ היום בשוק.
בדיקות תוכנה אוטומטיות: היצע של עבודה באוטומציה בשוק מתחלקת לשתיים:
1) השתלבות בצוות אוטומציה קיים,
2) הקמת מערך בדיקות אוטומטיות מאפס (בחברה בעלת בדיקות ידניות בלבד).
אנו נכסה את שתי ההצעות. הדבר יכלול: הורדה והתקנה של אקליפס, ג'אווה, מייבן, TestNG, שרת הטמאה בלתי-פוסקת Jenkins ותבנית של פרויקט אוטומציה ב-WebDriver (או שמו הישן "סלניום") שישמש כבסיס להקמת הפרויקט האמיתי. נעסוק בהעשרת הפרויקט הבסיסי במגוון טסטים אוטומטיים מסוגים שונים.
בדיקות mobile ידניות: החלק השלישי של הקורס יעסוק בנושא החם היום בשוק של בדיקות של יישומים ניידים. אנו נלמד לארגן ולתכנן את הבדיקות הידניות לשלבים של אלפא, בטה ואחרי שחרור היישום ללקוח. נתנסה בבדיקות דרך חוות המכשירים, אמולטורים וסימולטורים. הדגש יהיה על אנדרואיד (כהכי נפוץ), אך נזכיר גם iOS.
בדיקות mobile אוטומטיות: הנושא הוא יחסית חדש ולא יציב בשוק, ומתפתח לכיוונים שונים שעדיין לא ברור מה הכיוון והכלים שינצחו בסופו של דבר. אנו נלמד את Appium ככלי הנוח ביותר ודומה מאוד לסלניום. אולי נגע ונעשה שימוש ב-Cucumber ושפת Gerkin.
* הקורס יועבר בג'אווה, לכן בהתחלה נקדיש זמן קצר להסבה מ-C++.
מה הן בדיקות תוכנה? מה היא אוטומציה? מהם הכלים לאוטומציה של בדיקות תוכנה? כיצד לסדר סביבת עבודה מאפס? מה ההבדל בין בדיקות תוכנה של יישום אינטרנטי ליישום נייד?
בשנים האחרונות הוכח שלא רק ניתן להחליף בדיקות ידניות באוטומטיות, אלא שזוהי הדרך היחידה המאפשרת לחברת היי-טק לגדול בצורה בטוחה ללא השקעה הולכת וגדלה בגיוס בודקים ידניים. מערכות אוטומציה הבודקות מוצרי תוכנה/קושחה/חומרה, על בסיס ריצה מתוזמנת בלתי פוסקת, מהוות היום מרכיב חשוב במגוון רחב של חברות היי-טק שונות ויישומים שונים.
בקורס נציג את תחום הבדיקות ידניות והאוטומטיות של תוכנה. נלמד דרך דוגמאות מעשיות את הנושאים הבאים:
בדיקות תוכנה ידניות: אין לגשת ללימוד של אוטומציה ללא הבנה בסיסית של מתודולוגיה של בדיקות ידניות. אנו נקדיש חלק קטן של זמן ללימוד והתנסות בבדיקות ידניות. מומלץ לקחת קורס נוסף מורחב בנושא, כי מדובר במקצוע שלם שאך הוא נחוץ היום בשוק.
בדיקות תוכנה אוטומטיות: היצע של עבודה באוטומציה בשוק מתחלקת לשתיים:
1) השתלבות בצוות אוטומציה קיים,
2) הקמת מערך בדיקות אוטומטיות מאפס (בחברה בעלת בדיקות ידניות בלבד).
אנו נכסה את שתי ההצעות. הדבר יכלול: הורדה והתקנה של אקליפס, ג'אווה, מייבן, TestNG, שרת הטמאה בלתי-פוסקת Jenkins ותבנית של פרויקט אוטומציה ב-WebDriver (או שמו הישן "סלניום") שישמש כבסיס להקמת הפרויקט האמיתי. נעסוק בהעשרת הפרויקט הבסיסי במגוון טסטים אוטומטיים מסוגים שונים.
בדיקות mobile ידניות: החלק השלישי של הקורס יעסוק בנושא החם היום בשוק של בדיקות של יישומים ניידים. אנו נלמד לארגן ולתכנן את הבדיקות הידניות לשלבים של אלפא, בטה ואחרי שחרור היישום ללקוח. נתנסה בבדיקות דרך חוות המכשירים, אמולטורים וסימולטורים. הדגש יהיה על אנדרואיד (כהכי נפוץ), אך נזכיר גם iOS.
בדיקות mobile אוטומטיות: הנושא הוא יחסית חדש ולא יציב בשוק, ומתפתח לכיוונים שונים שעדיין לא ברור מה הכיוון והכלים שינצחו בסופו של דבר. אנו נלמד את Appium ככלי הנוח ביותר ודומה מאוד לסלניום. אולי נגע ונעשה שימוש ב-Cucumber ושפת Gerkin.
* הקורס יועבר בג'אווה, לכן בהתחלה נקדיש זמן קצר להסבה מ-C++.
איך ניתן להעביר הודעה סודית? איך ניתן לחתום על הודעה במחשב? איך מחלקים סודות? איך מוכיחים זהות? איך מטילים מטבע באינטרנט? בקורס נראה כמה תשובות.
הנושאים הנלמדים: מערכות הצפנה קלאסיות: מצפיני בלוק, מצפיני זרם, מבוא ל-DES. מערכות הצפנה ציבוריות: מבוא, שיטת RSA, התקפות על RSA, הלוג הדסקרטי, חתימות דיגיטליות, פונקציות hash. עקומות אליפטיות ושימושיהן בקריפטוגרפיה. הוכחות חוסר ידע. שיתוף סוד. במהלך הסמסטר נחזור על המושגים המתמטיים הדרושים להצפנה כמו המספרים השלמים מודולו n ושדות סופיים ונעמיקם.
מה הקשר בין ג'ירפה לבין סניף הדואר הקרוב אליכם? איך מתכנתים תנועת רובוט? איך המחשב יודע על איזו תמונה עשיתם קליק עם העכבר? איך ה- GPS מוציא את מפת השכונה? על כל הבעיות האלה ועוד הרבה אחרות תלמדו בקורס. בעזרת הדוגמות הללו, נכיר כמה מהטכניקות ומבני נתונים של הגיאומטריה החישובית (לדוגמה אלגוריתמי סריקה, DCEL ). הסטודנטים יכינו הרצאה ועבודה בכתב.
הסמינר יעסוק בנושאים מתקדמים ברשתות מחשבים מודרניות. בין הנושאים שנפגוש: פרוטוקולים לארגון וניהול רשתות, רשתות ענן, שילוב ניתוב ומיתוג, תשתית מהירה (DSL, סיבאופטי, ועוד), אבטחת מידע, רשתות אלחוטיות ומערכות סלולאריות, ניתוח ביצועים, ועוד נושאים בהתאם להתעניינות המשתתפים.
כמות הנתונים המצטברים כיום במערכות המחשבים הולכת וגדלה בקצב מסחרר, עד כדי כך שיישומים לעיבוד נתונים מסורתיים כבר לא יכולים להתמודד איתם. מציאות זו מחייבת יכולת לעבד כמויות עצומות של מידע ולנתח אותן בכדי להפיק מסקנות.
בקורס נתעמק בנושאים יסודיים בתחום המידע עתק. נלמד גישות עכשוויות ואלגוריתמים שבשימוש בתחום כגון: חיפוש ברשת (google web search), מערכות המלצה (recommendation systems), חישוב מקבילי (parallel computing), קהילות ברשתות חברתיות (communities in social network), אשכולות במידע עתק (clustering in big data), פרסום חישובי (computational advertising) ועוד.
השימוש באינטרנט הוא חלק יום-יומי מחיינו, ותכנות בסביבת תקשורת היא מיומנות בסיסית בפיתוח מערכות תוכנה. השימוש הנכון בתשתית הרשת הוא גורם חשוב ביצירת חוויה מוצלחת. בקורס הזה נכיר את עיקרי תקשורת מחשבים והשילוב הקיים בין מערכות להעברת נתונים, שיחות קול, ומולטימדיה.
הנושאים הנלמדים: מושגי יסוד בתקשורת ומודלים לרשת פתוחה, יישומי תקשורת, ניהול קשר רציף בהעברת מידע, תקשורת בין תכניות שונות, בקרת אמינות ואיכות קצה-לקצה, ניתוב הודעות ברשתות הטרוגניות, רשתות מקומיות, תקשורת קווית ואלחוטית בשכבה הפיסית. בכל פרק נדגיש את השיטות והפרוטוקולים המעשיים בתקשורת אינטרנט וברשתות מקומיות.