מה לומדים בתואר 4 שנים במדעי המחשב

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

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

תכנות I, II

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

מחלקה זו התחילה ביצירת קובץ ריק והפיכתו לקומפילציה ב- IDE (השתמשתי בקוד :: בלוקים). ועבדנו בעצמנו כל הדרך כדי ליצור משחק קרב מבוסס טקסט משלנו. המבט לאחור על הקוד שכתבתי גורם לי להביך. עברתי כברת דרך מאז. הנה ריפו אם אתה רוצה לצחוק (אני משתמש רק בקובץ main.cpp עם 1063 שורות קוד).

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

מבנים בדידים במדעי המחשב

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

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

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

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

מבני מידע

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

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

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

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

ניתוח אלגוריתמים

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

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

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

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

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

בניית אתרים

בכיתה זו היו הכי הרבה כישורים שהיו ישימים ישירות לעבודה בתחום הטכנולוגיה. למדתי על HTML, CSS, JQuery, JavaScript, PHP ו- JSON. למדתי כיצד נשלחת בקשה מקצה לאתר לקצה אחורי, כיצד היא עובדת בקצה האחורי ואז נשלחת חזרה לקצה עם תגובה. למדתי כיצד ליצור ממשק משתמש וכיצד ליצור אינטראקציה עם שכבת נתונים שאחר כך מתקשרת עם הרשת.

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

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

מבוא למאגרי מידע

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

הנדסת תוכנה I, II

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

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

אדריכלות מחשבים ושפת הרכבה

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

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

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

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

מערכות הפעלה

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

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

מבוא לרשתות מחשבים

שיעור זה היה מאוד שימושי. זה עבר על התפקוד של רשתות מחשבים. זה כלל מעבר על פרוטוקולי רשת כגון HTTP, HTTPS, TCP, IP, FTP, IMAP, POP3, SSH ו- DNS. יצא לי ללמוד על מה משמש כל אחד מהפרוטוקולים האלה, כיצד הם מיושמים וקיבלתי הבנה מדוע הם נוצרו.

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

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

מבוא להנדסת שימושיות

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

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

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

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

פיתוח תוכנה לנייד וענן

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

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

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

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

פרויקט תוכנה של Capstone

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

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

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

מחשבות אחרונות

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

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

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

אהבת את מה שקראת? בדוק את המאמרים האחרים שלי

להתחיל קריירה טקית מכלום.

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

טיפים לראיון הטכנולוגי הראשון שלך.

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

סוויפט לעומת מטרה-ג