מדעי המחשב לעומת הנדסת תוכנה - איזה מגמה הכי מתאימה לך?

היי לכולם! שמי YK, וכיום אני מנהל את CS Dojo, ערוץ YouTube לחינוך תכנות עם למעלה מ- 200,000 מנויים. בעבר הייתי גם מפתח תוכנה בגוגל.

שתיים מהשאלות הנפוצות ביותר שהקהל שואל אותי הן:

"מה ההבדל בין מגמות מדעי המחשב להנדסת תוכנה?"

ו ...

"האם עלי לבחור במדעי המחשב או הנדסת תוכנה אם אני רוצה להיות מהנדס תוכנה?"

במאמר זה אענה על כך ואביא לך ניתוח מהיר משלי לגבי מגמות אלה.

סקירה מהירה של שתי הגדולות הללו

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

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

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

סיכויי עבודה

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

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

להלן כמה מהכותרות של בוגרים ובכל מקום בו הם עובדים:

מדעי המחשב

  • מפתח / אדריכל אתרים, קבוצת סטיל
  • מתכנת, הארי רוזן בע"מ
  • מפתח נייד / ענן, Clearbridge Associates Limited
  • הנדסת תוכנה, General Dynamics קנדה
  • הנדסת פיתוח תוכנה, מיקרוסופט
  • מהנדס זריז, מעבדות מרכזיות
  • אנליסט עסקי, תאגיד הצמיגים הקנדי
  • עורך דין למפתחים, גוגל
  • מנהל מוצר, Dropbox

הנדסת תוכנה

  • מפתח תוכנה, Tagged Inc.
  • מפתח תוכנה, IBM קנדה
  • מנהל תוכנה, תאגיד התוכנה אריוס
  • מהנדס תוכנה, VistaPrint ארה"ב
  • מהנדס תוכנה, תאגיד האריס
  • מפתח תוכנה, Accenture Inc.
  • מנהל מוצר טכני - עיצוב ופיתוח תוכנה, NexJ Systems Inc.
  • יועץ, פתרונות פיננסיים PureFacts
  • יועץ יישום, Desire2Learn

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

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

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

קורסים בשנה א ':

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

מדעי המחשב

  • CS 135 - תכנון תוכניות פונקציונליות
  • CS 136 - תכנון אלגוריתמים והפקת נתונים
  • מתמטיקה 135 - אלגברה
  • מתמטיקה 136 - אלגברה לינארית 1
  • מתמטיקה 137 - חשבון 1
  • מתמטיקה 138 - חשבון 2
  • בנוסף כמה בחירות

הנדסת תוכנה

  • CS 137 - עקרונות תכנות
  • CS 138 - הפשטת נתונים ומימושם
  • מתמטיקה 115 - אלגברה לינארית להנדסה
  • מתמטיקה 117 - חשבון 1 להנדסה
  • מתמטיקה 119 - חשבון 2 להנדסה
  • מתמטיקה 135 - אלגברה למתמטיקה בהצטיינות
  • ECE 105 - פיזיקה של הנדסת חשמל 1
  • ECE 106 - חשמל ומגנטיות
  • ECE 124 - מעגלים ומערכות דיגיטליות
  • ECE 140 - מעגלים לינאריים
  • SE 101 - שיטות הנדסת תוכנה

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

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

קורסים לאחר השנה הראשונה:

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

מדעי המחשב:

  • מתמטיקה 239 מבוא לקומבינטוריקה
  • STAT 230 הסתברות
  • סטטיסטיקה 231 סטטיסטיקה
  • מבני נתונים CS 240 וניהול נתונים
  • CS 241 יסודות של תוכניות רצף
  • לוגיקה וחישוב CS 245
  • פיתוח תוכנה מונחה עצמים CS 246 <- אינו נדרש למגמות הנדסת תוכנה
  • ארגון ועיצוב מחשבים CS 251
  • אלגוריתמים CS 341
  • מערכות הפעלה CS 350
  • בנוסף, מספר בחירות למדעי המחשב

הנדסת תוכנה:

  • CHE 102 כימיה למהנדסים
  • מחשבים דיגיטליים ECE 222 (כולל שפת הרכבה)
  • ECE 358 רשתות מחשבים
  • מתמטיקה 213 מתמטיקה מתקדמת למהנדסי תוכנה
  • מתמטיקה 239 מבוא לקומבינטוריקה
  • STAT 206 סטטיסטיקה להנדסת תוכנה
  • MSCI 261 כלכלה הנדסית: ניהול פיננסי למהנדסים
  • CS 241 יסודות של תוכניות רצף
  • מבני נתונים CS 240 וניהול נתונים
  • עקרונות הנדסת תוכנה CS 247 <- אינם נדרשים למגמות מדעי המחשב
  • אלגוריתמים CS 341
  • ממשקי משתמש CS 349 <- אינם נדרשים למגמות מדעי המחשב
  • CS 343 תכנות מקביל ומקביל <- אינו נדרש למגמות מדעי המחשב
  • CS 348 מבוא לניהול מסדי נתונים
  • SE 212 לוגיקה וחישוב
  • מערכות הפעלה SE 350
  • SE 465 בדיקות תוכנה ואבטחת איכות
  • SE 464 עיצוב תוכנה וארכיטקטורות
  • מפרט וניתוח דרישות תוכנה SE 463
  • פרויקט עיצוב SE 490
  • בנוסף, כמה בחירות למדעי המחשב והנדסת חשמל

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

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

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

ההבדל העיקרי הוא:

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

אז באיזה מגמה כדאי לבחור?

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

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

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

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

רק לשם פשטות, נניח שאתה מקווה לקבל את המשרות המשתלמות ביותר (~ 100,000 דולר ארה"ב לשנה) כמהנדס תוכנה בצפון אמריקה. משרות אלה בדרך כלל בחברות תוכנה גדולות (תחשוב על מיקרוסופט, גוגל, אמזון וכו ') או בחברות בינוניות וצומחות מאוד (תחשוב על Dropbox, Lyft, Snapchat, Pinterest וכו').

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

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

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

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

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

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

כמה הערות

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

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

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

והנה המקורות העיקריים בהם השתמשתי:

  • מדעי המחשב בווטרלו
  • הנדסת תוכנה בווטרלו

תודה על הקריאה, ובהצלחה בבחירת האוניברסיטה והמגמה שלך! ?