Computer Science Vs Software Engineering | How to Pick the Right Major

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
if you're wondering about the difference between computer science and software engineering you may have a few parts to that question like differences in their definition how they differ in terms of undergrad in the classes you take and how they differ in terms of careers and those are the questions I'm going to answer in this video first when it comes to how we define them if you do a search you'll find things along the lines of computer science is very theory based or it's practically a branch of mathematics you'll learn algorithms data structures discrete math theory of computation and how efficiently computers can solve problems programming languages and some other stuff a lot of stereotypical computer science jobs are in research where you might be like working in artificial intelligence and deep learning to design neural networks such that a computer can learn to recognize objects or be a human in a challenging game or you could be working with data security and cryptography so sensitive information remains secure or computer scientists are even needed for quantum algorithms when it comes to quantum computing which is not a huge field yet but is another example then software engineering is where you use many computer science topics such as algorithms data structures sorting methods and so on to build large-scale systems they're the ones who are needed when products like Microsoft Office rolled of warcraft or new antivirus software are going to be made these things can contain millions of lines of code it's not feasible for just one person and you can't have a bunch of programmers just dive in there's more structure to it they have to understand all the requirements for a project plan the lifecycle of the software figure out how to implement everything like it might need to be fast super easy to use etc the thing of who will be using the final product like there will be other engineers or just an average person they have to do testing think about scalability and so on a software engineer has like 90% the same base knowledge as a computer scientist except they aren't really concerned with discovering an even faster method of sorting a list of items they'll use sorting algorithms that have already been discovered likely by a computer scientists to make their code and system work efficiently now these are how you can define both fields but if you look at reality and actual jobs you won't see people divided so neatly it won't be like if you major in computer science you're put into this box of careers an AI cryptography algorithm design and so on where no software engineers can enter and you'll leave that's not at all how it works people in these two disciplines are totally mixed the rules are essentially interchangeable today and most job listings will say something like computer science or equivalent discipline required which usually means something like software or a computer engineering I also said that many computer science jobs are in research for those typically require a masters or PhD and because most people don't do that a majority of computer science majors end up in software engineering jobs most of your friends who graduate in computer science and go off to Google Facebook Apple Amazon etc are technically working in software engineering or software developer roles building those large-scale systems now even though they have different definitions when it comes to the college curriculum they are extremely similar so let's take a quick look here's the computer science curriculum this is the curriculum for my school Cal Poly San Luis Obispo but note everywhere is a little different for now let's just look at these classes in yellow as these are the major classes I'm going to sweep through them first and then go into detail on a few of them afterwards they take these three programming courses that teach a lot of the basics they take discrete math this is more computer hardware focused class systems programming which goes into more detail on the C programming language algorithm design which is very important for a computer scientist and as a math intensive course programming language is one and this professional responsibilities course which is more about system safety code of ethics intellectual property and so on these nine classes I just listed are all taken by software engineers as well so you hear how computer science is more geared towards Theory math algorithms and so on yet software engineers have to take discrete math algorithms and way more even if they don't do as much research work later in their career software engineers simply need all that computer science information still to work on their various projects the remaining four classes are what software engineers are not required to take those being computer architecture operating systems a second programming languages course and theory of computation and of course this is not counting electives if we go to the software engineering curriculum those same nine classes come up like I said which leaves for classes unique to software engineers I'm not counting these weeks these are kind of like another senior project class I'll talk about these all very soon but first if you look at the math classes they take you'll notice it's pretty much the exact same as the one computer scientists take except computer science majors at least at my school are not required to take our calculus 4 or multivariable calculus now let's go back and I'll explain a little more about those classes unique to software engineers but just as an overview the software engineering specific classes are not about learning new sorting techniques or more efficient programming methods or any more math theory or anything like that they're about how to plan out your project work as a team design interfaces based on who be using your project and so on for example let's look at that first class called software engineering that students at my school took their third-year students might start off by learning the types of software such as end user where it's used by people to get work done system software that provides underlying support to end-user software and embedded software that is within hardware devices like robot security systems or cars then you might define people involved with software whether it be end-users testers analysts etc as you can see it can start off with a lot of definitions then you get into more of the software design like prototyping a GUI or a graphical user interface a way for someone to easily interact with software through graphical icons I actually had to do this at my job before we're previous to making the GUI in order to input data into my program for calculation I had to type in an input command and if I hand that code off to someone that might be annoying for them to have to figure out so the GUI instead just had a box for input values here that could easily be typed in then for this class an actual exam question from a previous year when something like a company wants to design an automated system that puts customers into certain categories and automatically send some advertisements based on location age or whatever and the first question was just to define a GUI with file and edit menus that would be easy to use and navigate no coding required though but then you could be asked to write a Java model for certain objects and operations you'd have a class called customer records which would need to be divided into first middle and last name street address and so on you aren't writing elaborate and efficient code to actually make this system at least on this exam question and you're not finding a faster way to organize this list that's a few other classes that computer scientists also take you're kind of planning out how the software development will happen what things need to be taken into account and all of that then another class unique to software engineers is user centered interface design this is a class more geared towards user experience when you make something like software for someone you need to think about who will be using it like children adults students other engineers and so on maybe your code should not be the most efficient if that means it's easier to use for the person it comes down to practicality now my school this class involved pretty much no programming as an example of an assignment you might have to analyze good and bad interaction design as well as usability in some software tool this could be like looking at some calendar and scheduling tool and writing about your experience as a user what changes or additions could be made for a better user experience and so on then you could be assigned to make a storyboard detailing a product idea you come up with so just maybe an app that helps college students with productivity but you wouldn't code it or anything like that in this class you would explain what problem it solves who your target user is possibly provide some rough sketches what the product would look like and more yes this was an actual assignment from this class it's true some of these classes are more on the planning side of things rather than the real coding and development you might want to do but they simulate what a real-world project will be like when you go out into your career this will help you be prepared to work in a team and stay organized when working towards your goal in many companies settings there can be disorganization when creating a large software system causing delays extra costs etc you'll also notice that in computer science classes you often do weekly or bi-weekly labs to get as much hands-on experience to go along with the theory you learn in the class in software engineering classes it's normally quarter or semester long projects that again simulate a real-world setting now in the last few minutes let's briefly go over courses unique to computer science majors the first big one being theory of computation this is of course a theory heavy class that does involve math and proofs this class won't help you write better code but will help you understand how computer science has been thought of as a science the big question in this class is what are the capabilities and limitations of a computer it's a more abstract idea now I've talked about this class before in other videos but want to do an entirely different example to not be repetitive we're about to see one capability of a computer with almost no memory this is something you can expect maybe in your first week but we need a little background first let's say there's an elevator in a building with only two storeys therefore the elevator can be on the first floor or the second floor and also the elevator would have only two buttons go up and go down obviously we don't need to specify which floor now if we're on the first floor and want to go to the second floor we press the UP button if we then want to go back down to the first floor we press the down button then if we're on the first floor and press down well we don't go anywhere we just stay put and if we're on the second floor and press up the same thing happens these things that are circled are the states of the system and these arrows are the transitions if we replace the first and second floor with general names like state a and state B and the transitions with ones and zeros the typical inputs and outputs for these things we have a general finite state machine something with of course a finite amount of states where the machine can change between them based on external inputs they have very limited memory as in they just know which state they are in like first floor or second floor but it can't keep track of like how many times it went up and down I know this is kind of abstract but just stay with me now here's the more interesting question given a random list of ones and zeros could you make one of these state machines to determine if there's let's say an even amount of ones that have appeared well we can have a state called even and one called odd before any numbers come in there are zero ones which is even so that's where you start if a 1 comes in you transition to the odd state if a 0 had come first instead there would still be an even number of ones and if you're in the odd state and another one comes up you transition back to even as there have now been two ones that showed up an even number and of course if the zero shows up while in the odd State nothing happens there either so we start at 0 once an even number if a 1 comes in we change States to odd if a 0 then comes in we stay in place and no matter what happens we will always be in the proper state remember how I said this class is about the capabilities of computers well this hypothetical system with almost no memory is capable of determining whether there's an even or odd amount of ones and as long a list as we give it even have to remember the list but if we want to count how many one showed up we couldn't do that here at least with this setup that's a limitation for this type of a machine and you may be thinking well computers do have memory and lots of it well why don't we take it to another extreme what if we had infinite memory capacity now what our capabilities what about limitations you'll analyze this when you learn about Turing machines an abstract machine that has an infinite memory tape to store data if you accidentally made a program that ran forever could this machine figure that out well this is the example I always use and the answer is no you'll see that proof and more in this class as you can see on a previous syllabus these are just some of the things you'll learn yes it is theory based and abstract but you'll think about computer science in a different way and that's the real big class that computer scientists at my school were the only ones required to take another one though that software engineers don't take is operating systems which is the software that supports the computers functions such as executing various applications and scheduling what tasks to do Microsoft Windows and iOS are operating systems and as you probably know these are constantly updated by engineers fixed for bugs and so on this class is pretty technical which you can see by its description and on a syllabus you see it contains plenty of labs which again is common for computer science classes and that's about it for the differences I'll go over because remember these majors are mostly the same both who learn the basics of programming and will make simple games they'll both learn data structures now to store an array of numbers and sort it quickly both take discrete math and learn proof techniques set theory etc then apply it to your algorithms class to find like the shortest distance from one point to another given distinct routes and when it comes to electives you can take pretty much all the same things if you go into software engineering and want to take that theory of computation class you can then you could take artificial intelligence game design network security and more at the end of it all these majors are like 90 percent identical now something to know is many schools don't offer software engineering as a major the default is just computer science but the good news is since they're so similar what you pick won't have some drastic impact on your future career outlook which is why I really don't feel I even should answer the question which major is better but I'm sure people in the comments their opinion I've said before that I like concrete answers and I wish for this video I could have said here's the definition for computer science and here's the one for software engineering and this is what your life will look like if you pick one over the other but because software engineers can tailor their education towards computer science topics and plenty of computer scientists end up as software engineers I couldn't just make it that simple but I hope this helps you understand what you're getting into and that's where I'm going to end this video before you go if you want more information on the computer science curriculum or even computer engineering and those differences you can find all of those on this channel don't forget to Like and subscribe links to follow me on social media are below and I'll see you all in the next video
Info
Channel: Zach Star
Views: 187,158
Rating: undefined out of 5
Keywords: majorprep, major prep, computer science vs software engineering, what is computer science, what is software engineering, software engineering, computer science, comp sci, cs vs se, cs vs swe, computer science major, software engineering major, computer science classes, college, software engineering classes, how to pick the right major, computer science curriculum, software engineering curriculum
Id: VxvQYZJNLxI
Channel Id: undefined
Length: 14min 1sec (841 seconds)
Published: Fri Apr 06 2018
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.