Computer Science VS Software Engineering - Ποιο σημαντικό είναι το καλύτερο για εσάς;

Γεια σε όλους! Το όνομά μου είναι YK και τρέχω αυτήν τη στιγμή το CS Dojo, ένα κανάλι YouTube εκπαίδευσης προγραμματισμού με 200.000+ συνδρομητές. Ήμουν επίσης προηγουμένως προγραμματιστής λογισμικού στο Google.

Δύο από τις πιο συχνές ερωτήσεις που με ρωτάει το κοινό μου είναι:

«Ποια είναι η διαφορά μεταξύ των μεγάλων επιστημών της Πληροφορικής και της Μηχανικής Λογισμικού;»

Και…

«Πρέπει να επιλέξω Επιστήμη Υπολογιστών ή Μηχανική Λογισμικού εάν θέλω να γίνω μηχανικός λογισμικού;»

Σε αυτό το άρθρο, θα απαντήσω σε αυτό και θα σας δώσω τη δική μου γρήγορη ανάλυση σχετικά με αυτές τις μεγάλες εταιρείες.

Μια γρήγορη επισκόπηση αυτών των δύο μεγάλων

  • Η Πληροφορική είναι η μελέτη του τρόπου λειτουργίας των υπολογιστών, κυρίως από θεωρητική και μαθηματική σκοπιά.
  • Θα πρέπει να επιλέξετε Επιστήμη Υπολογιστών εάν σας αρέσουν τα μαθηματικά, η λογική ή εάν θέλετε να μπείτε σε ένα εξειδικευμένο πεδίο σε CS, όπως τεχνητή νοημοσύνη, μηχανική μάθηση, ασφάλεια ή γραφικά.
  • Η Τεχνολογία Λογισμικού είναι η μελέτη του τρόπου κατασκευής των συστημάτων λογισμικού, συμπεριλαμβανομένων θεμάτων όπως η διαχείριση έργων, η διασφάλιση ποιότητας και η δοκιμή λογισμικού.
  • Θα πρέπει να επιλέξετε Μηχανική Λογισμικού εάν ενδιαφέρεστε περισσότερο για την πρακτική προσέγγιση και εάν θέλετε να μάθετε τον συνολικό κύκλο ζωής του τρόπου κατασκευής και συντήρησης του λογισμικού.
  • Τόσο η Επιστήμη των Υπολογιστών όσο και η Μηχανική Λογισμικού διδάσκουν βασικές αρχές του προγραμματισμού και της επιστήμης των υπολογιστών, οπότε μπορείτε να επιλέξετε είτε για να γίνετε προγραμματιστής λογισμικού.

Για να κατανοήσουμε τη διαφορά μεταξύ των μεγάλων Επιστήμης Υπολογιστών και Μηχανικών Λογισμικού, ας ρίξουμε μια ματιά στο αντίστοιχο πρόγραμμα σπουδών τους στο Πανεπιστήμιο του Waterloo στον Καναδά.

Επέλεξα το Πανεπιστήμιο του Βατερλώ για αυτό επειδή έχει ένα από τα καλύτερα προγράμματα επιστήμης υπολογιστών στη Βόρεια Αμερική.

Προοπτικές εργασίας

Ας συγκρίνουμε πρώτα τα είδη των θέσεων εργασίας και της πρακτικής άσκησης που μπορείτε να κάνετε μέσω κάθε προγράμματος.

Ευτυχώς, η ιστοσελίδα του Πανεπιστημίου του Βατερλώ παρέχει πολλά παραδείγματα.

Για κάθε μεγάλο, εδώ είναι μερικοί από τους τίτλους που κρατούν οι απόφοιτοι και πού λειτουργούν:

Επιστήμη των υπολογιστών

  • Προγραμματιστής Ιστού / Αρχιτέκτονας, The Steele Group
  • Προγραμματιστής, Harry Rosen Inc.
  • Mobile / Cloud Developer, Clearbridge Associates Limited
  • Μηχανική λογισμικού, General Dynamics Canada
  • Μηχανική Ανάπτυξης Λογισμικού, Microsoft
  • Agile Engineer, Pivotal Labs
  • Επιχειρηματικός αναλυτής, Canadian Tire Corporation
  • Δικηγόρος προγραμματιστή, Google
  • Διαχείριση προϊόντων, Dropbox

Μηχανική λογισμικού

  • Προγραμματιστής λογισμικού, Tagged Inc.
  • Προγραμματιστής λογισμικού, IBM Canada
  • Διαχείριση λογισμικού, Arius Software Corporation
  • Μηχανικός λογισμικού, VistaPrint USA
  • Μηχανικός λογισμικού, Harris Corporation
  • Προγραμματιστής λογισμικού, Accenture Inc.
  • Technical Product Manager - Σχεδιασμός & Ανάπτυξη Λογισμικού, NexJ Systems Inc.
  • Σύμβουλος, PureFacts Financial Solutions
  • Σύμβουλος υλοποίησης, Desire2Learn

Όπως μπορείτε να δείτε, δεν υπάρχει τεράστια διαφορά μεταξύ των τύπων θέσεων εργασίας που μπορείτε να βρείτε.

Οι πιο συνηθισμένοι απόφοιτοι εργασίας μετά την απόκτηση του πτυχίου Πληροφορικής ή Μηχανικής Λογισμικού είναι προγραμματιστής λογισμικού ή Μηχανικός λογισμικού.

Υπάρχουν και άλλες σχετικές επιλογές, όπως ο υπεύθυνος προϊόντων, ο αναλυτής QA και ο σύμβουλος τεχνολογίας. Οι επιλογές σας θα εξαρτηθούν από το συγκεκριμένο σύνολο δεξιοτήτων σας.

Μαθήματα πρώτου έτους:

Τώρα, ας ρίξουμε μια ματιά στα απαιτούμενα μαθήματα κάθε προγράμματος. Ας συγκρίνουμε πρώτα μερικά από τα μαθήματα που θα πρέπει να παρακολουθήσετε τον πρώτο χρόνο σας.

Επιστήμη των υπολογιστών

  • CS 135 - Σχεδιασμός λειτουργικών προγραμμάτων
  • CS 136 - Σχεδιασμός αλγορίθμου και αφαίρεση δεδομένων
  • MATH 135 - Άλγεβρα
  • MATH 136 - Γραμμική άλγεβρα 1
  • MATH 137 - Λογισμός 1
  • MATH 138 - Λογισμός 2
  • Συν μερικά μαθήματα

Μηχανική λογισμικού

  • CS 137 - Αρχές προγραμματισμού
  • CS 138 - Αφαίρεση και εφαρμογή δεδομένων
  • MATH 115 - Γραμμική Άλγεβρα για Μηχανική
  • MATH 117 - Λογισμός 1 για Μηχανική
  • MATH 119 - Λογισμός 2 για Μηχανική
  • MATH 135 - Άλγεβρα για τα Μαθηματικά Τιμών
  • ECE 105 - Φυσική Ηλεκτρολόγων Μηχανικών 1
  • ECE 106 - Ηλεκτρισμός και μαγνητισμός
  • ECE 124 - Ψηφιακά κυκλώματα και συστήματα
  • ECE 140 - Γραμμικά κυκλώματα
  • SE 101 - Μέθοδοι Μηχανικής Λογισμικού

Όπως μπορείτε να δείτε, τα μαθήματα πρώτου έτους είναι επίσης παρόμοια. Και οι δύο καλύπτουν μερικά βασικά μαθήματα επιστήμης υπολογιστών, και μερικά μαθήματα μαθηματικών σε γραμμική άλγεβρα και λογισμό.

Η μόνη σημαντική διαφορά είναι ότι η Μηχανική Λογισμικού έχει πρόσθετα στοιχεία φυσικής και ηλεκτρολογικής μηχανικής, ενώ η Επιστήμη Υπολογιστών έχει μερικά ακόμη μαθήματα.

Μαθήματα μετά το πρώτο έτος:

Τι γίνεται με τα απαιτούμενα και τα μαθήματα επιλογής μετά το πρώτο έτος; Ας ρίξουμε μια ματιά σε πολλά παραδείγματα εδώ:

Επιστήμη των υπολογιστών:

  • MATH 239 Εισαγωγή στη Συνδυαστική
  • Πιθανότητα STAT 230
  • STAT 231 Στατιστικά
  • CS 240 Δομές δεδομένων και διαχείριση δεδομένων
  • CS 241 Ιδρύματα διαδοχικών προγραμμάτων
  • CS 245 Λογική και υπολογισμός
  • CS 246 Αντικειμενοστραφής Ανάπτυξη Λογισμικού <- δεν απαιτείται για τα προγράμματα σπουδών
  • CS 251 Οργάνωση και Σχεδιασμός Υπολογιστών
  • Αλγόριθμοι CS 341
  • Λειτουργικά συστήματα CS 350
  • Επιπλέον, πολλά μαθήματα Επιστήμης Υπολογιστών

Μηχανική λογισμικού:

  • CHE 102 Χημεία για Μηχανικούς
  • Ψηφιακοί Υπολογιστές ECE 222 (περιλαμβάνει γλώσσα συναρμολόγησης)
  • Δίκτυα υπολογιστών ECE 358
  • MATH 213 Προχωρημένα Μαθηματικά για Μηχανικούς Λογισμικού
  • MATH 239 Εισαγωγή στη Συνδυαστική
  • STAT 206 Στατιστικά για τη Μηχανική Λογισμικού
  • MSCI 261 Engineering Economics: Χρηματοοικονομική διαχείριση για μηχανικούς
  • 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 Σχέδιο Σχεδιασμού
  • Επιπλέον, μερικά μαθήματα πληροφορικής και ηλεκτρολογίας

Σας έχω δώσει πολλές πληροφορίες για να χωνέψετε εδώ. Αλλά εδώ είναι η περίληψή μου:

Όσον αφορά τις απαιτήσεις στα μαθηματικά και τις στατιστικές, η Επιστήμη των Υπολογιστών και η Μηχανική Λογισμικού είναι σχεδόν πανομοιότυπες. Καλύπτουν συνδυαστικά στοιχεία, πιθανότητες και στατιστικά στοιχεία.

Οι βασικές απαιτήσεις της επιστήμης των υπολογιστών είναι επίσης παρόμοιες, που κυμαίνονται από αλγόριθμους, δομές δεδομένων και λειτουργικά συστήματα.

Η βασική διαφορά είναι ότι:

  • Η Τεχνολογία Λογισμικού έχει περισσότερες απαιτήσεις στις βασικές αρχές της ηλεκτρολογίας και της μηχανικής λογισμικού, όπως δοκιμές λογισμικού, σχεδιασμός και προδιαγραφές απαιτήσεων λογισμικού.
  • Η Επιστήμη Υπολογιστών επιτρέπει περισσότερες επιλογές σε μαθήματα επιστήμης υπολογιστών υψηλότερου επιπέδου. Μπορείτε να επιλέξετε από ένα ευρύ φάσμα θεμάτων όπως ασφάλεια, βασικές αρχές μηχανικής λογισμικού, όραμα υπολογιστή, μηχανική μάθηση και διαχείριση βάσεων δεδομένων.

Λοιπόν, ποια κύρια θα πρέπει να επιλέξετε;

Νομίζω ότι εξαρτάται κυρίως από τις προτιμήσεις σας. Εν συντομία:

  • Θα πρέπει να επιλέξετε Επιστήμη Υπολογιστών εάν σας αρέσουν τα μαθηματικά, η λογική ή αν θέλετε να μπείτε σε ένα εξειδικευμένο πεδίο σε CS, όπως η τεχνητή νοημοσύνη, η μηχανική μάθηση, η ασφάλεια ή τα γραφικά.
  • Θα πρέπει να επιλέξετε Μηχανική Λογισμικού εάν ενδιαφέρεστε περισσότερο για την πρακτική προσέγγιση και αν θέλετε να μάθετε τον συνολικό κύκλο ζωής του τρόπου κατασκευής και συντήρησης του λογισμικού.

Αλλά περιμένετε - ποιο είναι τότε; Ποια μεγάλη είναι καλύτερη αν θέλετε να είστε μηχανικός λογισμικού;

Αυτή είναι η γνώμη μου. Σε αυτό το συγκεκριμένο πανεπιστήμιο (University of Waterloo), με αυτό το συγκεκριμένο σύνολο απαιτήσεων προγράμματος, η Επιστήμη Υπολογιστών είναι μια καλύτερη σπουδαιότητα εάν θέλετε να είστε μηχανικός λογισμικού.

Για απλότητα, ας υποθέσουμε ότι ελπίζετε να αποκτήσετε μία με τις υψηλότερες αμοιβές θέσεις εργασίας (~ 100.000 $ USD / έτος) ως μηχανικός λογισμικού στη Βόρεια Αμερική. Αυτές οι θέσεις εργασίας είναι συνήθως σε μεγάλες εταιρείες λογισμικού (νομίζω ότι η Microsoft, η Google, η Amazon κ.λπ.) ή σε μεσαίου μεγέθους εταιρείες υψηλής ανάπτυξης (σκεφτείτε Dropbox, Lyft, Snapchat, Pinterest κ.λπ.).

Συνήθως, αυτό που ψάχνουν σε έναν υποψήφιο μηχανικό λογισμικού είναι η ικανότητα να γράφουν συμπαγή κώδικα και να δημιουργούν ενδιαφέροντα έργα, καθώς και βασικές αρχές επιστήμης υπολογιστών, συμπεριλαμβανομένων δομών δεδομένων και αλγορίθμων.

Νομίζω ότι ο καλύτερος τρόπος για να καλλιεργήσετε αυτό το σετ δεξιοτήτων είναι να μαθαίνετε γρήγορα τις βασικές αρχές της επιστήμης των υπολογιστών και να ξοδεύετε τον χρόνο σας εξάσκοντας στην επίλυση προβλημάτων και γράφοντας κώδικα.

Με βάση το πρόγραμμα σπουδών για τη Μηχανική Λογισμικού και με βάση το πόσο απασχολημένοι είναι συνήθως οι φοιτητές μηχανικής, νομίζω ότι θα ήταν πιο δύσκολο να το κάνουμε αυτό με τη Μηχανική Λογισμικού παρά με την Επιστήμη Υπολογιστών.

Ένα άλλο πλεονέκτημα αυτού του συγκεκριμένου προγράμματος Επιστήμης Υπολογιστών είναι ότι επιτρέπει περισσότερα μαθήματα πληροφορικής. Αυτό είναι υπέροχο επίσης επειδή ανάλογα με το τι έχει ζήτηση στην αγορά εργασίας, θα μπορείτε να προσαρμόσετε τα μαθήματά σας. Για παράδειγμα, εάν απαιτείται ανάπτυξη εφαρμογών για κινητά, μπορείτε να το μάθετε. Και αν απαιτείται παράλληλος υπολογιστής, μπορείτε να εστιάσετε σε αυτό.

Είμαι βέβαιος ότι υπάρχουν ορισμένα οφέλη από την εκμάθηση βασικών τεχνικών λογισμικού (διαχείριση έργου, σχεδιασμός, δοκιμές κ.λπ.). Προσωπικά, όμως, προτιμώ την ευελιξία σε ένα προκαθορισμένο σύνολο δεξιοτήτων. Γι 'αυτό πιστεύω ότι η Επιστήμη των Υπολογιστών είναι μια καλύτερη σπουδαιότητα για να γίνει μηχανικός λογισμικού με αυτό το συγκεκριμένο πρόγραμμα σπουδών.

Φυσικά, αυτή είναι μόνο η γνώμη μου, και αυτό είναι μόνο ένα συγκεκριμένο πανεπιστήμιο. Θα ήθελα πολύ να μάθω για τη γνώμη σας και πώς ήταν η εμπειρία σας εάν φοιτήσατε είτε στην Επιστήμη των Υπολογιστών είτε στη Μηχανική Λογισμικού. Παρακαλώ ενημερώστε με σε ένα σχόλιο παρακάτω.

Μερικές σημειώσεις

Σημείωση 1: Διαφορετικά πανεπιστήμια έχουν διαφορετικές απαιτήσεις για αυτές τις δύο μεγάλες εταιρείες. Αυτό το άρθρο πρέπει να είναι ένα καλό σημείο εκκίνησης, αλλά θα πρέπει να ρίξετε μια ματιά στις απαιτήσεις του προγράμματος στο πανεπιστήμιο που σας ενδιαφέρει να παρακολουθήσετε.

Σημείωση 2: Ορισμένα πανεπιστήμια δεν έχουν καν πρόγραμμα σπουδών. Για παράδειγμα, το Πανεπιστήμιο της Βρετανικής Κολομβίας στο Βανκούβερ έχει πτυχία Επιστήμης Υπολογιστών και Μηχανικών Υπολογιστών, αλλά όχι Μηχανικής Λογισμικού. Έχουν όμως μια συγκέντρωση μηχανικής λογισμικού στο πρόγραμμα Επιστήμης Υπολογιστών, καθώς και στη Μηχανική Υπολογιστών.

Εάν το πανεπιστήμιο που σας ενδιαφέρει δεν θα έχει σπουδαία Μηχανική Λογισμικού, θα πήγαινα με την Επιστήμη Υπολογιστών εάν θέλετε να γίνετε προγραμματιστής λογισμικού. Η Μηχανική Υπολογιστών επικεντρώνεται περισσότερο στο υλικό από την Επιστήμη Υπολογιστών ή τη Μηχανική Λογισμικού, οπότε σχετίζεται λιγότερο άμεσα με τη δουλειά ενός τυπικού προγραμματιστή λογισμικού.

Και εδώ είναι οι κύριες πηγές που χρησιμοποίησα:

  • Επιστήμη Υπολογιστών στο Waterloo
  • Μηχανική λογισμικού στο Waterloo

Ευχαριστούμε για την ανάγνωση και καλή επιτυχία που επιλέξατε ένα πανεπιστήμιο και το μάθημά σας! ;