Jump to content

Languages/frameworks to get valuable experience while studying

Claryn

Hi.

I am currently enrolled in a 5-year MSci Computer Science (Engineering) at University. The program is not strictly a Software Development/Engineering course, but rather a Computer Engineer-program. It is basically a BSci Computer Science degree (with all the stuff a CS-degree would include: algorithms and data structures, OOP, procedural etc.), but with advanced engineering maths, physics, fluid-mechanics, electrical engineering, circuit design etc. 

I am rapidly approaching year 3, where I need to decide on my specialisation (what my Masters is gonna be), and I am starting to panic because I am unsure about what specific field I want to pursue.

The paths I can take are as follows:
914d177d-e598-442c-9229-eb9811079ef5?t=1

 

I have been looking a lot at Interaction Design & Games Technology. Games programming is a field I am very interested in, but I am afraid that a degree within Game Tech. specifically with limit my possibilities in the future. Other options are Software Engineering or Computers & System Software, or Artificial Intelligence.

 

Coursework and experience:
Most of the subjects and courses we have to take are based around Java, and some C and Assembly programming with micro-controllers. I do have a strong background in Java OOP from a good high-school course (International Baccalaureate Computer Science Higher Level with specialisation in Java OOP and Discrete mathematics) and some personal projects. However, I feel like I should widen my knowledge by learning a more specific language and framework that will allow me to hunt for local internships and possible part-time jobs that eventually could turn into something permanent after I got my degree.

 

Java is a language that I feel is slowly being faded out from everything to being more focused on big back-end enterprise systems. I am fond of large systems, software architecture etc., but I want to work on something a bit more interesting, newer and more innovative than large enterprise-systems.

My interest in larger systems and OOP is what has kept me at Java and doing small personal projects within game dev (incl. a simple awt based polygon-only Space Invaders, CardsAgainstHumanity using SWING in Netbeans). However, I feel as if Java is limiting my ability to make useful and fun perosnal projects that I can use in a portfolio to get a job or an internship.

 

Moving forward

What I want to do is find a language and a framework that I can use to develop useful projects for my portfolio, and gain experience that is valuable to a future employer. I am going to apply for an internship at Funcom this summer (a local game-studio (makers of Age of Conan, Conan Exiles, Secret World etc.), which I assume use C++ and DX12/11, and some smaller technology start-ups around the city. 

 

What do you guys think I should take a look at? What resources should I use to get started - what should I focus on?

 

TLDR: 2. year in a 5yrs MSci Computer Science course that is using Java a lot. Want new language/framework to create valuable projects and get experience for future jobs. I'm into larger systems/programs and OOP. 

 

Thank you!

 

 

 

Running Arch with i3-gaps on a Thinkpad X1 Extreme
Data Science Postgrad

 

Link to comment
Share on other sites

Link to post
Share on other sites

1 hour ago, Claryn said:

What do you guys think I should take a look at?

It sounds like C++ is where you want to be. You're considering game development, which is an area where C++ plays a big role, and applying for an internship that you think uses C++, so it sounds like it's worth spending some time on that. Whether game development is something you end up doing or not, C++ isn't a bad language to be familiar with anyway.

 

Link to comment
Share on other sites

Link to post
Share on other sites

1 hour ago, Claryn said:

Java is a language that I feel is slowly being faded out from everything to being more focused on big back-end enterprise systems. I am fond of large systems, software architecture etc., but I want to work on something a bit more interesting, newer and more innovative than large enterprise-systems.

 

has always and still is widely used in mobile phones. also has some interesting developments in distributed computing. it only took off on client devices with android. Swing is a bitch.

1 hour ago, Claryn said:

I have been looking a lot at Interaction Design & Games Technology. Games programming is a field I am very interested in, but I am afraid that a degree within Game Tech. specifically with limit my possibilities in the future. Other options are Software Engineering or Computers & System Software, or Artificial Intelligence.

 

Software engineering, artificial intelligence and data mining are the highest paying and highly sought after. Games are interesting but i see a bit of burn out in that industry. Honestly after spending 10+ hours at work staring at a PC the last thing you want to do is play computer games when you get home. If games are your hobby then dont let the commercial world kill it for you.

2 hours ago, Claryn said:

My interest in larger systems and OOP is what has kept me at Java and doing small personal projects within game dev (incl. a simple awt based polygon-only Space Invaders, CardsAgainstHumanity using SWING in Netbeans). However, I feel as if Java is limiting my ability to make useful and fun perosnal projects that I can use in a portfolio to get a job or an internship.

 

build your portfolio with Android. Dont judge Java based on swing. I don't use swing to build a GUI if i have a say in it. A modern GUI should be defined with XML not factory/builder pattern

2 hours ago, Claryn said:

5yrs MSci Computer Science course that is using Java a lot.

What is your masters research? dont listen to me; talk to your professors. I'm doing my post graduate research using Android simply because its a lot more accessible than apple ecosystem. I originally was an electronics student that switched to comp sci because NZ has no electronics industry; I was given a range of topics to choose from for post graduate study and the Android project was the most interesting to me being a hardware one. You can do some pretty interesting stuff but you should research what your interested in and become an expert in that

             ☼

ψ ︿_____︿_ψ_   

Link to comment
Share on other sites

Link to post
Share on other sites

Thank you both for the replies!

19 minutes ago, madknight3 said:

It sounds like C++ is where you want to be. You're considering game development, which is an area where C++ plays a big role, and applying for an internship that you think uses C++, so it sounds like it's worth spending some time on that. Whether game development is something you end up doing or not, C++ isn't a bad language to be familiar with anyway.

 

Do you have any suggestions on where to start with C++? What resoruces or libraries/frameworks will easily get me into being able to create smaller games or useful programs that I can have on a portfolio?
In terms of game dev, I know a lot of big engines like Unreal use C++, but I think that would be a bit much to grasp when starting out. I do have some limited experience with C++ (Arduino and started at an online tutorial way back but put it aside). 

10 minutes ago, SCHISCHKA said:

has always and still is widely used in mobile phones. also has some interesting developments in distributed computing. it only took off on client devices with android. Swing is a bitch.

Software engineering, artificial intelligence and data mining are the highest paying and highly sought after. Games are interesting but i see a bit of burn out in that industry. Honestly after spending 10+ hours at work staring at a PC the last thing you want to do is play computer games when you get home. If games are your hobby then dont let the commercial world kill it for you.

I didn't think too much about Android, actually. It could be something to look into, but personally I never use more than 1-2 apps on my phone, so in the long-term I don't necessarily want to invest too much into Android - I believe it is a dying market, and I don't intend to work for someone like Google. It could though be a good spring-board for other Java-related jobs and internships, but then again I would assume those jobs would be within large enterprise systems.

Are there any good resources for Android-development that I should look into?

 

We have been using JavaFX and SceneBuilder somewhat in one of the courses as a side-thing to build some motivation, so maybe I should look more into that.

15 minutes ago, SCHISCHKA said:

What is your masters research? dont listen to me; talk to your professors. I'm doing my post graduate research using Android simply because its a lot more accessible than apple ecosystem. I originally was an electronics student that switched to comp sci because NZ has no electronics industry; I was given a range of topics to choose from for post graduate study and the Android project was the most interesting to me being a hardware one. You can do some pretty interesting stuff but you should research what your interested in and become an expert in that

It is a 5-year degree, so it is basically the usual 3+2 to get a Master, but all in one course. I am technically an undergrad. until year 4, except I won't have a degree until I finish all 5 years. The option is a 3 year BSci Information Technology + 2 year MSci Computer Science, but that does not include all of the math and other engineering topics that you get in the full 5-year course. It is a special kind of course that Tech., and Science Unis in Norway offer. It is meant to educate you as general purpose engineer, but with a MSci in a specific field. We have a lot of subjects that are based around working in teams with all the other 5-year engieering masters courses (Phys&Math, Electrical engineering, Chemistry, Robotics and Cybernetics, Mechanics. etc). 

Running Arch with i3-gaps on a Thinkpad X1 Extreme
Data Science Postgrad

 

Link to comment
Share on other sites

Link to post
Share on other sites

22 minutes ago, Claryn said:

Do you have any suggestions on where to start with C++?

Find some website that teaches modern C++ (c++11 / 14,) the STL, smart pointers etc., not C with classes and start from the beginning. There's going to be a lot of things you see and think you already know because Java does something similar but I assure you they're very different (at least in most cases.) It's extremely easy to kill the performance of C++ with very minor mistakes. Of course you can do that in all languages but things like Java are much more forgiving.

 

For example, I attended a talk and the presenter gave a little quiz to see how many people could find the problem with the follow code

 

Spoiler

#include <string>
#include <map>
#include <iostream>

int main(int argc, char* argv[])
{
	std::map<std::string, int> map;
	map["aaa"] = 0;
	map["bbb"] = 1;
	//a ton more map inserts

	for(const std::pair<std::string, int>& item : map)
	{
		std::cout << item.first << " = " << item.second << '\n';
	}

	return 0;
}

 

With an audience full of mostly career C++ devs, only 14% were able to figure out what was wrong, there's only 3 lines of real code it can't be that hard right? The language is full of this kind of stuff, modern C++ helps a ton though. So basically there is no quick or easy when learning C++, just take it slow and make sure you understand things as you go along.

 

As for resources, they're meant for more experienced C++ers but the Effective C++ books by Scott Meyers are great. There are also tons of talks on Youtube from conferences like CppCon, Meeting C++ and C++Now. 

 

For basic games you can look at Cinder or SFML. I'd stay away from something like Unreal or a while, they add tons of stuff on top of the language and trying to learn both at the same time is probably a horrible idea. 

 

But most importantly, just remember to always be const correct and if you ever want to use a linked list, don't.

1474412270.2748842

Link to comment
Share on other sites

Link to post
Share on other sites

8 hours ago, fizzlesticks said:

With an audience full of mostly career C++ devs, only 14% were able to figure out what was wrong, there's only 3 lines of real code it can't be that hard right?

Surprising... it's glaringly obvious that the output buffer is not being flushed. See std::endl.

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

A valuable experience is working with Lisp at least once.

Write in C.

Link to comment
Share on other sites

Link to post
Share on other sites

13 hours ago, fizzlesticks said:

Find some website that teaches modern C++ (c++11 / 14,) the STL, smart pointers etc., not C with classes and start from the beginning. There's going to be a lot of things you see and think you already know because Java does something similar but I assure you they're very different (at least in most cases.) It's extremely easy to kill the performance of C++ with very minor mistakes. Of course you can do that in all languages but things like Java are much more forgiving.

 

For example, I attended a talk and the presenter gave a little quiz to see how many people could find the problem with the follow code

 

  Reveal hidden contents


#include <string>
#include <map>
#include <iostream>

int main(int argc, char* argv[])
{
	std::map<std::string, int> map;
	map["aaa"] = 0;
	map["bbb"] = 1;
	//a ton more map inserts

	for(const std::pair<std::string, int>& item : map)
	{
		std::cout << item.first << " = " << item.second << '\n';
	}

	return 0;
}

 

With an audience full of mostly career C++ devs, only 14% were able to figure out what was wrong, there's only 3 lines of real code it can't be that hard right? The language is full of this kind of stuff, modern C++ helps a ton though. So basically there is no quick or easy when learning C++, just take it slow and make sure you understand things as you go along.

 

As for resources, they're meant for more experienced C++ers but the Effective C++ books by Scott Meyers are great. There are also tons of talks on Youtube from conferences like CppCon, Meeting C++ and C++Now. 

 

For basic games you can look at Cinder or SFML. I'd stay away from something like Unreal or a while, they add tons of stuff on top of the language and trying to learn both at the same time is probably a horrible idea. 

 

But most importantly, just remember to always be const correct and if you ever want to use a linked list, don't.

Thanks! I'll check out TutorialPoints C++ tutorials, it seems to cover the basics. What libraries/frameworks are good for small GUI applications? Polygons and vector-graphics are nice (or bitmap) :)

Running Arch with i3-gaps on a Thinkpad X1 Extreme
Data Science Postgrad

 

Link to comment
Share on other sites

Link to post
Share on other sites

8 hours ago, Nuluvius said:

Surprising... it's glaringly obvious that the output buffer is not being flushed. See std::endl.

It's being flushed when the program ends, a manual flushing isn't necessary here. Unless you actually need guaranteed real time output, std::endl is usually a mistake.

1474412270.2748842

Link to comment
Share on other sites

Link to post
Share on other sites

3 hours ago, Claryn said:

Thanks! I'll check out TutorialPoints C++ tutorials, it seems to cover the basics. What libraries/frameworks are good for small GUI applications? Polygons and vector-graphics are nice (or bitmap) :)

Qt is probably the most popular choice for GUIs though I've never tried any of their drawing features. Or if all you want is a window then using something like OpenGL to draw you can use SDL or GLFW.

1474412270.2748842

Link to comment
Share on other sites

Link to post
Share on other sites

2 hours ago, fizzlesticks said:

It's being flushed when the program ends, a manual flushing isn't necessary here. Unless you actually need guaranteed real time output, std::endl is usually a mistake.

I would argue that in general leaving a buffer in an unpredictable state is a mistake. Fine if the program is closing/simplistic but otherwise no its definitely bad practice.

 

In any event the real problem is that the code is copying the key and the value.

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×