Languages used for game and software development on Windows, Linux, Android, iOS, Mac OS X

Started by
14 comments, last by Ravyne 11 years, 7 months ago
Hi guys!

I'm getting into programming and my long term goals are to develop games and other kinds of software for Windows, Linux, Android, iOS, Mac OS X.

I know on Windows you can use whatever and same goes for Linux though C++, Python or Java seem to be the ones.
I understand that on osX and iOS they are using Objective C but I'm not sure about this one smile.png
And on android is mostly Java.

I'm not sure about what I've said and I'm looking to be told what languages and graphical libraries I should learn to be able to write games and apps for these platforms by learning only the minimum nr of languages.

Also i'm a bit into web development and was wondering if Python is any good for web and if it's worth learning for game development?
Advertisement
OSX is mostly the same as the windows languages actually.

All of the above will support C++ but making a cross platform app in C++ is no easy task. The only other option for 1 language across all devices listed is the mono framework (mostly C# and VB.net) although to use mono on android or iOS costs $399 each.

OSX is mostly the same as the windows languages actually.

All of the above will support C++ but making a cross platform app in C++ is no easy task. The only other option for 1 language across all devices listed is the mono framework (mostly C# and VB.net) although to use mono on android or iOS costs $399 each.


Well making cross platform apps will be great but that's not really the point for this topic. Maybe I wasn't clear enough :)

My question is what should I learn in order to be able to write for all this platforms?( not referring to the same app)
What are the market standards.

For example if I were to learn Java I would have good job opportunities here in Italy ( as opposed to c++) but is Java also widely used for apple's systems?
Is C Objective worth learning? do companies developing iOS, OsX software only look for people knowing objective C?
Has python got any market share? is it worth learning and how used is it on other system apart from linux and windows?
What about libraries? 2d, 3d?
I've never seen OSX software written in objective C, they still tend to use plain C or C++.

If your new to programming then start with python. It most likely won't land you a job but its easy to learn and a great introduction to programming.

Java and C++ will land you jobs. A java app tends to be compiled to a .jar once and that same .jar runs on all systems (apart from android and iOS, android doesn't actually run java it runs dalvik which has the same source code but once compiled is different) so yes it is used on apples systems too.

C++ isn't easy for a beginner but is the most widely used commercially on all systems. In fact I highly advise against it for a beginner.
The thing about computer languages is that they come and go.

Once you learn how to program properly, and you gain the education to learn the theory behind algorithms and data structures, then learning new languages will be very easy.



For a beginner I'd recommend C# as a first language, or perhaps Java since you mention a goal of targeting Android devices.

The thing about computer languages is that they come and go.


C and C++ are probably the only languages that will never disappear in our lifetime.

As a beginner, to avoid any unproductive language jumping I would just learn C++ (incl C libraries).

Microsoft is already starting to deprecate .NET (i.e C#) in favour of Javascript and C++/CX. WIthout Microsoft's marketing, mono isn't really going anywhere either.

Nothing of any long term value is written in C# anyway. Heck, just look at the recent news about the unpopularity java of and it's security issues and you know the same will happen with .NET soon enough.

With so many trendy hipster developers it is very difficult to argue this point. But do your own research on the topic and I am sure you will come to the same conclusion. It seems like only yesterday it was a tossup between C++ and Visual Basic. Everyone who wrote their software in VB6 at the time pretty much had to do a complete rewrite to get it to work on VB.NET or ultimately port it to C++.

Not to mention that it is always really annoying when some software on Linux/BSD is written using C#. Mono just drags in soo many crap dependencies. Especially since the functionality provided by the .NET framework (such as GUI) is quite weak in comparison to other native offerings.
http://tinyurl.com/shewonyay - Thanks so much for those who voted on my GF's Competition Cosplay Entry for Cosplayzine. She won! I owe you all beers :)

Mutiny - Open-source C++ Unity re-implementation.
Defile of Eden 2 - FreeBSD and OpenBSD binaries of our latest game.

[quote name='frob' timestamp='1346968870' post='4977380']
The thing about computer languages is that they come and go.


C and C++ are probably the only languages that will never disappear in our lifetime.

As a beginner, to avoid any unproductive language jumping I would just learn C++ (incl C libraries).

Microsoft is already starting to deprecate .NET (i.e C#) in favour of Javascript and C++/CX. WIthout Microsoft's marketing, mono isn't really going anywhere either.
[/quote]

It's true that C++ is having something of a renascence right now, and that Microsoft is making noise about C++ again, after years of shouting "It's all about .Net", but that's hardly an indicator that .Net and C# are being deprecated. In fact, Microsoft is increasing its investment in .Net through the DLR improvements, and the functional language F#. Managed programming isn't going anywhere.

That said, the're hasn't been a lot said about certain kinds of apps in the future of .Net (e.g. games), and they are touting native development and full-fledged APIs for Windows Phone 8 development, so you can read into that what you will.

At any rate, "unproductive language jumping" is hardly ever the case -- If you failed to learn something useful from any language you've meaningfully encountered, then the failure is yours, learning something new is never unproductive.


Nothing of any long term value is written in C# anyway. Heck, just look at the recent news about the unpopularity java of and it's security issues and you know the same will happen with .NET soon enough.

With so many trendy hipster developers it is very difficult to argue this point. But do your own research on the topic and I am sure you will come to the same conclusion. It seems like only yesterday it was a tossup between C++ and Visual Basic. Everyone who wrote their software in VB6 at the time pretty much had to do a complete rewrite to get it to work on VB.NET or ultimately port it to C++.

Not to mention that it is always really annoying when some software on Linux/BSD is written using C#. Mono just drags in soo many crap dependencies. Especially since the functionality provided by the .NET framework (such as GUI) is quite weak in comparison to other native offerings.
[/quote]

Poorly-informed, wannabe *nix wags are not any better than "trendy hipster developers". If you're argument boils down to "C++ will never die", perhaps you should take up Fortran as a hobby -- that's been around longer than C++, and still has a strong showing in certain circles (Finance, Scientific computing).

Personally, I love C++, but I certainly don't take it to be the be-all-end-all, final destination of all programming languages. Plenty of software, games and other high-performance stuff included, is perfectly at home in languages other than C and C++. Eve Online uses a ton of stackless python, and Minecraft is written in Java. At the end of the day, getting stuff done is what counts -- if you can get stuff done quicker and more-effectively in C#, Java, or Python and you can get the performance you need, then its more effective to do that than struggle against C++'s idiosyncrasies and c'est la vi attitude just because some dude on a forum told you its more hardcore.

throw table_exception("(? ???)? ? ???");

if you can get stuff done quicker and more-effectively in C#, Java, or Python and you can get the performance you need, then its more effective to do that than struggle against C++'s idiosyncrasies and c'est la vi attitude just because some dude on a forum told you its more hardcore.

Y'know what? I probably would suggest to struggle with C++. Purely because once the struggle is over, your software will always work. You can happily reuse your code for the next project too. Just switching language to help you achieve a short term goal is IMO not a good solution. Not to mention, C++ doesnt have anything in the spec to cause a developer to struggle more than any other language ;)
C#, Java and Python (reference implementation) are all written in C/C++. There has got to be a reason for that. Not to mention it is very hard for Python to use Java or C# libraries, whereas they can all use C/C++ libraries very easily.


Poorly-informed, wannabe *nix wags are not any better than "trendy hipster developers".


In the OP's original list of operating systems he wants to support, all of them are UNIX-like apart from Windows, so *nix is becoming more and more relevant (us wags must be doing something right! smile.png).


If you're argument boils down to "C++ will never die", perhaps you should take up Fortran as a hobby -- that's been around longer than C++, and still has a strong showing in certain circles (Finance, Scientific computing).

Unless our goal in life is to learn every language under the sun, I suggest we spend the time to become even better at C++ instead. Not to mention the fact that C became instantly more popular than Fortran from day one.

This argument has been done many times before and especially since you have used and know the benefits of C++, it will probably be taking this thread a bit off topic.

I think the real question is if certain platforms will even let us choose the language. iOS and Windows 8 (especially mobile) is making it very hard to use a single language for every platform.
http://tinyurl.com/shewonyay - Thanks so much for those who voted on my GF's Competition Cosplay Entry for Cosplayzine. She won! I owe you all beers :)

Mutiny - Open-source C++ Unity re-implementation.
Defile of Eden 2 - FreeBSD and OpenBSD binaries of our latest game.
There seems to be a misconception about iOS, Android, and Macintosh OS X.

On all of these platforms you are entirely free to use C and C++.
Both my own engine and the engine at work are around 500 .cpp files each and combined we fully support iOS, Android, and Macintosh OS X.
Objective-C is there on iOS and Macintosh OS X but you are not obligated to use it except in one small place, which is a place where you glue your framework to the operating system, and thus is going to be unique to every platform you support anyway.

No hacks are necessary, no special tools needed or even special settings. Just add a .cpp to your project and compile.

For Android we use the NDK, fully C++ except for 2 Java files. Android is a bit annoying when working with C++, but it is better than rewriting the whole engine/games in Java.


The actual answer to this question is easy.
There are only 2 languages that are supported on all the platforms mentioned: C and C++.
There is only 1 rendering API supported on all platforms mentioned: OpenGL (including OpenGL ES *).


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

Just to be clear, yes, if the OP wants to target all of those platforms with (essentially) one codebase, then its usually going to be C/C++ for the core, with an outer "shell" in one of each platform's preferred language to interact with platform details like UI rendering and events. The C/C++ core might also implement/include a scripting solution in which much of the game logic can be implemented. Rendering may also have to be abstracted if you plan to support both Direct3D and OpenGL, and sound is another area that I don't think there's a good cross-platform solution for, except maybe FMOD.


To return to a couple relevant points, hopefully without derailing the thread.

I disagree very strongly with your assertion that an aspiring programmer's time is best spent becoming a 9th degree blackbelt in C++ before all else. No one's suggesting that each project be looked upon as an opportunity to take up a new language, but there is a point in your studies (of C++ or any other language) in which learning a new and very different language will improve your overall programming skill in larger strides than would trudging towards the bitter end of the first language, sometimes in directions which the first language would not have been likely to take you in its natural course. The prime example is learning a functional language like Haskell, who's study will not only make you a reasonable Haskell programmer, but a better C++ (or whatever language) programmer as well. The value of other programming paradigms to a C++ programmer is perhaps less pronounced, but valuable in different ways. For example, C# or Java (*shudder*) can be great languages to implement tools in (and which all tools together might comprise more code than the game itself, depending), and scripting languages like perl or python are of course great for knocking together little scripts and tools to automate tedious tasks.


As for the notion that .Net, Java and Python are implemented in C++, and therefore C++ must be the logical conclusion, keep in mind that really a systems-programming language like C or C++ is most often used to build some kind of abstraction-layer on which you implement the application itself in terms that are more recognizable to its problem domain. Sometimes those abstractions are in the form of library, code that you or I have written, or in some kind of runtime environment like the .Net CLR or Java VM. If a suitable abstraction is available, well-tested, meets performance requirements, and increases your productivity and effectiveness, then surely we can agree that it should be used, can we not? It doesn't really matter whether we're talking about OpenGL or the CLR at all as long as our needs are met.

We can all talk until we're blue in the face about how C or C++ is the most portable language (in theory and largely in practice), but none of that really matters unless there are hard requirements that say that this level of portability is needed. Any discussion about potential portability beyond the stated requirements is a business decision (opportunity-cost) rather than a technical one. In other words, if your information tells you that 90% of your users will be on Windows, then it only makes sense to constrain your implementation to portable options if you can show a business case that 10% more sales justifies the cost of the additional work, or if it affords flexibility that might cover that cost in the future.

throw table_exception("(? ???)? ? ???");

This topic is closed to new replies.

Advertisement