The second year of my degree has a few choices for specialization, the ones i'm kind of interested in are:
Software Engineering
Game development
Data Science
How do i decide which to pick? Could anyone tell me about these courses?
Which CS specialization is most promising?
Software Engineering isn't a specialization. You build software in all the aforementioned categories.
More on reddit.comMost in demand CS career specialties?
Backend/Frontend engineering for Web applications is still #1 as most companies gravitate towards building out web applications that can be cross platform. This likely won't change for a while. I think focuses in machine learning/AI as well as security will continue to get larger, but due to the amount of expertise you need to do that kind of thing i don't think it will get as big as other types of disciplines in terms of quantity.
I recommend looking at the annual StackOverflow developer survey, it gives you a good gauge of where the industry is at / where it's headed.
https://insights.stackoverflow.com/survey/2019
More on reddit.comWhich area of CS to 'specialize' in?
u/thourfor is correct. You are not considered "specialized" until you've worked in a specific field. With that being said, and to answer your question, it may yet be possible to take electives and coursework that prepares you for a specific specialization.
Nowadays the entire industry is mostly enterprise web-based software development (front end and back end) and also mobile app development.
The following are actual job titles \ specializations that exist:
-
Software Engineer \ Software Developer
-
Business Analyst
-
Database Administrator \ SQL Database Architect
-
Quality Assurance Engineer
-
Automation Engineer (QA)
-
Performance Engineer
-
Project Manager
-
Product Owner (Agile Scrum)
-
UI \ UX Designer
-
Build \ Release Manager
-
IT Support Helpdesk \ Network Technician
-
Front End Web Developer
-
Back End Web Developer
-
Full Stack Developer
-
iOS \ Android Developer
-
Embedded Systems (Firmware) Engineer
QA \ Testing is the easiest and most common entry-level field to get into, but it is essentially a kind of glorified computer janitation and it is not as intellectually challenging or as stimulating as true Development jobs. You only need to grasp a basic understanding of object-oriented programming, data structures, computer science concepts, and SQL databases, as at best you may only use 25% of computer science knowledge on the job, and that's only if you're an Automation Engineer that actually uses scripting and coding to write and maintain automated test scripts which exercise workflows of product code and are coupled to the product code. I have six years of experience in this specialization and I'd rather do "real" product Development, but I can't transition into Development because of getting pigeon-holed into the field and being stressed out from working a 9-5 job to the point where I cannot study and learn outside of work hours or I'd lose it and start punching the monitor or something.
If you want to get into databases, know that it is hard as hell, but very intellectually challenging and stimulating, and thus it may be worth it, but you have to very logic and attain a full grasp and understanding of SQL and relational database management systems theory, download free SQL Server from Microsoft and free Oracle SQL Developer from Oracle, and play around with creating your own tables, inserting data, querying data, and then you might stand a chance at going into Big Data or some kind of SQL Programmer or Database Administrator job.
In my opinion the most fulfilling job would be .NET Developer or Java Developer which requires a thorough understanding of computer science, object-oriented programming, data structures, design patterns, with some basic SQL knowledge thrown in as well. And you also have to basically master a language that will be in-demand when you graduate. If you want to do Front End development, you gotta know HTML\CSS\JavaScript. If you want to do Back End development you gotta know Java, Spring Framework, Groovy if you're going into Java, or C#.NET \ ASP .NET and Model View Controller (MVC) if you're going into .NET Development. If you want to work in Android you'll need to know Android libraries in Java. If you want to work in iOS Development you gotta know Objective-C and have access to iOS Development devices and environments such as a MacBook Pro laptop.
In my estimation most other higher level jobs (Project Manager, Software Architect, etc.) require experience, and so it's tough to get into those at the entry-level. I estimate most entry-level jobs will be for Developers, a shit ton of QA nowadays, and a few Business Analysts. Speaking of which, the job of the Business Analyst is to spend 8 hours a day in meetings hammering out technical requirements from the business so they can give those to the developers to implement. A Business Analyst's job certainly isn't as technical as a Developer, but it's still good to know basic OOP, Visio diagramming and charting, etc.
Pretty much any job in computer science occupations, even the less technical ones like Manual QA and Business Analyst will benefit tremendously from a computer science curriculum undergraduate degree. So by all means maximize your educational attainment, but you should also search for jobs right now on Monster.com and Indeed.com and see what those kinds of job requirements are, so you can aim for those for when you graduate. Specifically start looking at the list of skills and technologies that they require, and start learning those now so you can have something to talk about during the hard-as-hell technical interviews for Developers.
I wish someone had told me that everything is web development and mobile development. Then I might have spent time studying HTML\CSS\JavaScript so I could get into Web Development. Instead, I'm stuck doing QA and Automation for the rest of my career. Occasionally I get to use some programming skills by using Java\J-Unit and C#.NET in conjunction with Selenium API to do website automation scripting, but it's just not as rewarding or as fulfilling as if I had been able to get into "true" Development.
To specialize in a Development track, I'd recommend maxing out all programming related courses, including Data Structures, Design Patterns, OOP, and such.
To specialize in a Database Administrator track, you can max out all SQL and database-related courses and skip the testing and advanced programming electives.
More on reddit.com