מפת הקורס
תוכנה היא שכבות על גבי שכבות: לוגיקה → אלגוריתמים → קוד → קומפילציה/הרצה → מערכת הפעלה → חומרה, ובמקביל APIs, רשת, נתונים, אבטחה ותהליכי פיתוח.
1. מהי תוכנה?
תוכנה היא מערכת של הוראות, נתונים ורכיבים שמגדירים התנהגות שניתן לבצע באמצעות מחשב.
קוד שמבצע משימה.
מערכת שנועדה לספק יכולת למשתמש.
קוד לשימוש חוזר.
תשתית שמארגנת ומנחה בניית יישומים.
תוכנת מערכת שמנהלת משאבים ומספקת APIs.
תוכנה המשולבת במכשיר ובחומרה.
2. לוגיקה
לפני שתוכנית יכולה להיות "קוד", היא צריכה להגדיר דרך חשיבה מדויקת.
Boolean Logic
| A | B | A AND B | A OR B | NOT A |
|---|---|---|---|---|
| false | false | false | false | true |
| false | true | false | true | true |
| true | false | false | true | false |
| true | true | true | true | false |
תנאי
if (age >= 18) {
allow();
} else {
deny();
}
לוגיקה כבסיס לתוכנית
3. אלגוריתמים
אלגוריתם הוא סדר פעולות מוגדר לפתרון בעיה.
דוגמה: חיפוש
for (let i = 0; i < items.length; i++) {
if (items[i] === target) {
return i;
}
}
return -1;
אלגוריתמים נפוצים
מעבר איבר אחר איבר.
חיפוש באמצעות חלוקת מרחב החיפוש.
מיון נתונים.
עבודה עם קשרים בין צמתים.
פירוק בעיה לתת־בעיות ושימוש בתוצאות.
4. מבני נתונים
מבנה נתונים קובע כיצד מידע מאוחסן ומאורגן.
| מבנה | רעיון |
|---|---|
| Array | רצף של איברים |
| Linked List | איברים המקושרים זה לזה |
| Stack | LIFO |
| Queue | FIFO |
| Hash Table | מיפוי מפתח לערך |
| Tree | מבנה היררכי |
| Graph | צמתים וקשתות |
5. סיבוכיות
סיבוכיות מאפשרת לתאר כיצד עלות אלגוריתם משתנה כאשר גודל הקלט גדל.
| Complexity | דוגמה כללית |
|---|---|
| O(1) | פעולה קבועה |
| O(log n) | חיפוש בינארי |
| O(n) | מעבר על מערך |
| O(n log n) | מיון יעיל נפוץ |
| O(n²) | שתי לולאות תלויות בקלט |
for (let i = 0; i < n; i++) {
console.log(i);
}
הלולאה רצה בערך n פעמים ולכן סיבוכיות הזמן שלה היא O(n).
6. תכנות
תכנות הוא תהליך הפיכת פתרון פורמלי לקוד שהמחשב יכול לבצע.
7. שפות תכנות
הוראות ברמה הקרובה ישירות למעבד.
ייצוג סמלי של הוראות מכונה.
שפות כלליות עם שליטה נמוכה יחסית במשאבים.
שפות עם runtime ומודלים עשירים של תוכנה.
שפה כללית עם דגש על פרודוקטיביות.
שפה מרכזית ב־Web ובמערכות נוספות.
שפה עם דגש על בטיחות זיכרון וביצועים.
שפה כללית המתאימה גם למערכות שרת ותשתית.
8. טיפוסים
Type מגדיר כיצד יש לפרש ערך ואילו פעולות ניתן לבצע עליו.
int age = 30; double price = 19.90; bool active = true; string name = "Dana";
Static Typing
טיפוסים נבדקים במידה משמעותית בזמן קומפילציה.
Dynamic Typing
טיפוסים נבדקים בזמן הריצה.
9. פונקציות
פונקציה היא יחידת קוד שמקבלת קלט אופציונלי ומחזירה תוצאה או מבצעת פעולה.
function add(a, b) {
return a + b;
}
const result = add(10, 20);
עקרונות
- קלט.
- פלט.
- Side Effects.
- Scope.
- Reuse.
- Composition.
10. Object-Oriented Programming
OOP מארגנת תוכנה סביב אובייקטים ומערכות יחסים ביניהם.
class User {
constructor(name) {
this.name = name;
}
greet() {
return "Hello " + this.name;
}
}
מושגים
ריכוז נתונים והתנהגות סביב ממשק מוגדר.
הסתרת פרטי מימוש שאינם נחוצים למשתמש.
בניית טיפוסים המבוססים על טיפוסים אחרים.
מימושים שונים דרך ממשק משותף.
11. Functional Programming
גישה שמדגישה פונקציות, קומפוזיציה, נתונים וזרימת טרנספורמציות.
const result =
numbers
.filter(x => x > 10)
.map(x => x * 2)
.reduce((sum, x) => sum + x, 0);
מושגים
- Pure Functions.
- Immutability.
- Higher-Order Functions.
- Composition.
- Declarative Programming.
12. זיכרון
תוכנית זקוקה למקום שבו היא יכולה לשמור נתונים בזמן שהיא רצה.
| רכיב | מאפיין כללי |
|---|---|
| Register | זיכרון קטן ומהיר בתוך CPU |
| Cache | זיכרון מהיר הקרוב למעבד |
| RAM | זיכרון עבודה |
| SSD/HDD | אחסון מתמשך |
13. Stack ו־Heap
Stack
משמש בדרך כלל לניהול מסגרות קריאה ונתונים בעלי משך חיים המתאים למודל הקריאות.
Heap
משמש להקצאות דינמיות של אובייקטים ונתונים. ניהולו משתנה לפי שפת התכנות וה־runtime.
14. CPU
ה־CPU מבצע הוראות מכונה ומפעיל את החישובים הבסיסיים של התוכנית.
Arithmetic Logic Unit
ALU מבצע פעולות חשבון ולוגיקה.
Registers
Registers הם מקומות אחסון קטנים ומהירים מאוד בתוך המעבד.
15. Machine Code
בסופו של דבר המעבד מבצע הוראות בפורמט שהארכיטקטורה שלו מגדירה.
MOV R1, R2 ADD R1, R3 STORE R1, [address]
התחביר בדוגמה הוא המחשה בלבד ואינו מייצג בהכרח תחביר של ISA מסוים.
ISA
Instruction Set Architecture מגדירה את הממשק בין תוכנה לבין הוראות שהמעבד יודע לבצע.
16. Compiler
Compiler מתרגם תוכנית מצורה אחת לצורה אחרת, לעיתים לקוד מכונה או לצורה ביניים.
Lexer
ממיר רצף תווים ל־Tokens.
Parser
בונה מבנה תחבירי.
AST
Abstract Syntax Tree הוא ייצוג מבני של הקוד.
17. Interpreter
Interpreter מריץ או מעריך תוכנית דרך מנגנון ביצוע שפועל בזמן הריצה.
בפועל מערכות מודרניות יכולות לשלב כמה טכניקות: Interpretation, Compilation ו־JIT.
18. Runtime
Runtime הוא הסביבה שתומכת בביצוע התוכנית.
19. מערכת הפעלה
מערכת ההפעלה מנהלת משאבים ומספקת abstractions שמאפשרים לתוכנות להשתמש במחשב.
20. Processes
Process הוא מופע רץ של תוכנית עם משאבים ומרחב כתובות משלו לפי מודל מערכת ההפעלה.
Virtual Memory
מערכת ההפעלה מספקת לכל Process מרחב כתובות וירטואלי, ומנהלת את המיפוי לזיכרון הפיזי.
21. Threads
Thread הוא יחידת ביצוע בתוך Process. Threads באותו Process יכולים לשתף חלק ממשאבי התהליך.
בעיה
כאשר Threads ניגשים לאותו מידע במקביל, יכולים להיווצר Race Conditions.
22. Concurrency
Concurrency עוסקת בניהול מספר עבודות שנמצאות במצב של התקדמות חופפת.
Parallelism
Parallelism הוא ביצוע ממש בו־זמני של עבודה על יחידות חישוב שונות, כאשר החומרה מאפשרת זאת.
Synchronization
נעילה הדדית.
ניהול מספר גישות למשאב.
פעולה שאינה נצפית כחלקית במסגרת המודל המתאים.
תקשורת באמצעות העברת הודעות.
23. קבצים
מערכת הפעלה מציגה קבצים כמנגנון מרכזי לשמירת מידע מתמשך.
open() read() write() close()
File Format
סיומת הקובץ אינה בהכרח קובעת לבדה את המבנה שלו. התוכן עצמו צריך להתאים לפורמט שהתוכנה מצפה לו.
24. I/O
Input/Output הוא תקשורת בין התוכנית לבין העולם החיצוני: קבצים, רשת, התקנים, מסוף ועוד.
25. APIs
API הוא ממשק מוגדר שבאמצעותו תוכנה אחת יכולה להשתמש ביכולות של תוכנה אחרת.
דוגמה
GET /api/users/42
ה־API מגדיר בין היתר אילו פעולות זמינות, איזה קלט מתקבל ואיזה פלט מוחזר.
26. Networking
Client
הצד שיוזם בקשה או צורך שירות.
Server
הצד שמספק שירות או משאב.
27. Client / Server
הפרדה זו מאפשרת לחלק מערכת לרכיבים בעלי אחריות שונה.
28. מסדי נתונים
נתונים בטבלאות עם קשרים מוגדרים.
נתונים כמסמכים.
מפתח וערך.
צמתים וקשרים.
Index
Index מאפשר למצוא מידע ביעילות רבה יותר במקרים המתאימים, במחיר של אחסון ועבודה נוספת.
29. SQL
SELECT name, email FROM users WHERE active = true ORDER BY name;
CRUD
| פעולה | SQL |
|---|---|
| Create | INSERT |
| Read | SELECT |
| Update | UPDATE |
| Delete | DELETE |
30. Transactions
Transaction מאפשרת לבצע קבוצת פעולות כיחידה לוגית בהתאם לכללי מסד הנתונים.
ACID
31. ארכיטקטורת תוכנה
Architecture עוסקת בחלוקת מערכת לרכיבים ובהגדרת היחסים ביניהם.
Separation of Concerns
כאשר רכיבים מקבלים אחריות ברורה, קל יותר להבין, לבדוק ולשנות את המערכת.
Coupling
מידת התלות בין רכיבים.
Cohesion
מידת הקשר בין האחריויות בתוך רכיב.
32. Design Patterns
יצירת אובייקטים דרך ממשק ייעודי.
התאמת ממשק אחד לאחר.
הודעה למאזינים על שינוי.
החלפת אלגוריתם או התנהגות.
הפרדת גישה לנתונים.
העברת תלויות מבחוץ.
33. Git
Git היא מערכת Version Control שמאפשרת לעקוב אחר שינויים בקוד ולעבוד בצוות.
git status git add . git commit -m "Add feature" git push
Branch
Branch מאפשר לפתח קו שינויים נפרד לפני שילובו בקו אחר.
34. Testing
בדיקת יחידה קטנה.
בדיקת שילוב בין רכיבים.
בדיקת תרחיש משתמש מלא.
בדיקה ששינוי לא שבר התנהגות קיימת.
test("adds numbers", () => {
expect(add(2, 3)).toBe(5);
});
35. Debugging
Debugging הוא תהליך של מציאת הסיבה להתנהגות שגויה.
שחזר את התקלה.
אסוף מידע.
צמצם את מקור הבעיה.
נסח השערה.
בדוק את ההשערה.
תקן.
ודא שהתקלה נפתרה.
הוסף בדיקה או מנגנון שמקטין סיכוי לחזרה.
36. אבטחת תוכנה
עקרונות
הענקת הרשאות מינימליות הנדרשות.
מספר שכבות הגנה.
בדיקת נתונים נכנסים.
ברירות מחדל בטוחות.
איומים נפוצים
- Injection.
- Authentication failures.
- Authorization failures.
- Data exposure.
- Memory safety bugs.
- Supply-chain attacks.
37. Authentication
Authentication
מי המשתמש?
Authorization
מה המשתמש רשאי לעשות?
Passwords
סיסמאות אינן אמורות להישמר כמחרוזת גלויה. מערכות צריכות להשתמש במנגנוני hashing מתאימים ובשיטות אחסון שמיועדות לסיסמאות.
38. Performance
| תחום | דוגמאות |
|---|---|
| CPU | אלגוריתמים, חישובים |
| Memory | הקצאות, Cache, מבני נתונים |
| I/O | קבצים, רשת, התקנים |
| Database | Queries, Indexes |
| Network | Latency, Bandwidth |
39. Build
Build הוא תהליך הפיכת קוד המקור לארטיפקט שניתן להריץ או להפיץ.
Artifacts
Artifact יכול להיות executable, package, container image, library או קובץ הפצה.
40. Deployment
סביבות
- Development
- Testing
- Staging
- Production
41. Cloud
Cloud הוא מודל שבו משאבי מחשוב ושירותים מסופקים דרך תשתית מרוחקת ומנוהלת במידה משתנה.
מכונות וירטואליות או שירותי הרצה.
אחסון אובייקטים, קבצים או דיסקים.
מסדי נתונים מנוהלים או עצמאיים.
רשתות, Load Balancers ו־Routing.
42. Containers
Container אורז תוכנה ואת התלויות הדרושות לה בסביבה מבודדת יחסית ברמת מערכת ההפעלה.
Container אינו מכונה וירטואלית מלאה; הוא משתמש במנגנוני מערכת ההפעלה של המארח ומבודד משאבים לפי מנגנוני הפלטפורמה.
43. CI/CD
Continuous Integration
שילוב שינויים לעיתים קרובות והרצת בדיקות אוטומטיות.
Continuous Delivery / Deployment
אוטומציה של הכנת תוכנה להפצה ולעיתים גם של הפריסה עצמה, בהתאם למדיניות הארגון.
44. Observability
אירועים ותיעוד.
מדדים מספריים לאורך זמן.
מעקב אחר זרימת בקשה בין רכיבים.
45. תחזוקת תוכנה
רוב חיי התוכנה אינם מסתיימים כאשר הגרסה הראשונה מגיעה למשתמשים.
תיקון תקלות.
הוספת יכולות.
שיפור מבנה הקוד ללא שינוי מכוון בהתנהגות החיצונית.
עדכון ספריות ותלויות.
טיפול בחולשות.
התאמת המערכת לעומסים גדולים יותר.
46. פרויקט גמר
בנה מערכת תוכנה מלאה קטנה, משלב הרעיון ועד Deployment.
הגדר מה המערכת צריכה לעשות.
חלק את המערכת לרכיבים.
הגדר את הנתונים.
הגדר את הממשק.
כתוב את הקוד.
כתוב Unit ו־Integration Tests.
Authentication, Authorization ו־Input Validation.
נהל היסטוריית שינויים.
צור Artifact.
הרץ את המערכת בסביבה אמיתית.
אסוף Logs, Metrics ו־Traces.
תקן, שפר והרחב.
מילון מושגים
סדרת פעולות לפתרון בעיה.
מבנה לארגון מידע.
מתרגם תוכנית לצורת יעד.
מנגנון להרצת תוכנית דרך סביבת ביצוע.
סביבת התמיכה בזמן הריצה.
מופע רץ של תוכנית.
יחידת ביצוע בתוך Process.
ממשק בין רכיבי תוכנה.
קוד לשימוש חוזר.
תשתית לפיתוח יישומים.
מערכת לניהול נתונים.
שפה לעבודה עם מסדי נתונים יחסיים.
מערכת ניהול גרסאות.
בדיקת התנהגות התוכנה.
מציאת ותיקון תקלות.
הפיכת תוכנה לזמינה בסביבת יעד.
סביבת אריזה והרצה מבודדת יחסית.
אוטומציה של Build, Test והפצה.
הבנת מצב המערכת דרך Logs, Metrics ו־Traces.
שיפור מבנה הקוד בלי לשנות בכוונה את ההתנהגות החיצונית.
תרגול מסכם
פתרון
אלגוריתם הוא דרך מוגדרת לפתרון בעיה; תוכנית היא מימוש של לוגיקה כקוד שניתן להריץ בסביבת מחשוב מסוימת.
פתרון
Compiler מנתח קוד מקור ומתרגם אותו לצורת יעד, למשל קוד מכונה או ייצוג ביניים, בהתאם לשפה ולכלי הבנייה.
פתרון
Process הוא מופע רץ של תוכנית עם משאבים ומרחב כתובות; Thread הוא יחידת ביצוע בתוך Process. Threads באותו Process יכולים לשתף חלק מהמשאבים.
פתרון
כי הדרך שבה מידע מאורגן משפיעה על האופן שבו ניתן לגשת אליו, לשנות אותו ולעבד אותו ועל עלויות הזמן והזיכרון.
פתרון
Authentication עונה על השאלה "מי אתה?", ואילו Authorization עונה על השאלה "מה מותר לך לעשות?".
פתרון
כדי לנהל היסטוריית שינויים בקוד, ליצור ענפים, לשתף עבודה ולשלב שינויים בצורה מבוקרת.
פתרון
ממשק מוגדר שבאמצעותו רכיב תוכנה אחד יכול לבקש שירות או להשתמש ביכולת של רכיב אחר.
פתרון
התהליך שבו תוכנה או Artifact הופכים לזמינים בסביבת היעד שבה אמורים להשתמש בהם.
פתרון
מודל שבו עלות החישוב גדלה באופן פרופורציונלי בקירוב לגודל הקלט n.
פתרון
האופן שבו מערכת מחולקת לרכיבים, האחריות של כל רכיב והקשרים והממשקים ביניהם.