• Create Account

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

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

15 replies to this topic

### #1myefs  Members

Posted 06 September 2012 - 11:51 AM

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
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?

### #26677  Members

Posted 06 September 2012 - 12:03 PM

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. ### #3myefs Members Posted 06 September 2012 - 12:52 PM 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?

### #46677  Members

Posted 06 September 2012 - 01:03 PM

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.

### #5frob  Moderators

Posted 06 September 2012 - 04:01 PM

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.

Check out my book, Game Development with Unity, aimed at beginners who want to build fun games fast.

Also check out my personal website at bryanwagstaff.com, where I occasionally write about assorted stuff.

### #6Karsten_  Members

Posted 06 September 2012 - 05:41 PM

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.

Edited by Karsten_, 06 September 2012 - 06:12 PM.

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.

### #7Ravyne  Members

Posted 07 September 2012 - 12:41 AM

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.

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.

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("(ノ ゜Д゜)ノ ︵ ┻━┻");

### #8Karsten_  Members

Posted 07 September 2012 - 03:26 AM

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! ).

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.

Edited by Karsten_, 07 September 2012 - 03:30 AM.

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.

### #9L. Spiro  Members

Posted 07 September 2012 - 04:32 AM

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

### #10Ravyne  Members

Posted 07 September 2012 - 04:34 AM

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.

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("(ノ ゜Д゜)ノ ︵ ┻━┻");

### #11Karsten_  Members

Posted 07 September 2012 - 05:15 AM

I do agree about your point on Haskell in terms of educating yourself since it truly does provide a new and interesting way of thinking. However I would be really quite pissed off if I had to maintain a tool at work that was written in it. There was a well known window manager (xmonad) for unix that was written in Haskell, developers just bit the bullet and rewrote one with a similar functionality in portable C. What a massive waste of time.

I think most my arguments are towards the longevity of software. Anything written using large frameworks or virtual machines simply wont be around in about 10 years. Sure for a game this might not be an issue, but tools can often still be an asset by then.

If a language brings something useful to the table and really simplifies a programming problem or provides a very elegant solution to what would have been a very awkward architecture then yes, I am all for it.

However, this mentality of developing software using platforms like .NET and Java because it is "easier" really needs to disappear if we as an industry are to progress. The C# language in particular really needs to die. It was marketed very well by Microsoft and was embraced by developers when it actually offers nothing beyond what Java had (un)provided for years. Unfortunately demonstrating how easy it is to sway the direction of technology. (if it wasn't for this, we could have had some awesome C++ libraries by now simplifying development for newcomers in a correct and innovative manner).

Edited by Karsten_, 07 September 2012 - 05:26 AM.

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.

### #12darookie  Members

Posted 08 September 2012 - 07:39 AM

However, this mentality of developing software using platforms like .NET and Java because it is "easier" really needs to disappear if we as an industry are to progress. The C# language in particular really needs to die. It was marketed very well by Microsoft and was embraced by developers when it actually offers nothing beyond what Java had (un)provided for years. Unfortunately demonstrating how easy it is to sway the direction of technology. (if it wasn't for this, we could have had some awesome C++ libraries by now simplifying development for newcomers in a correct and innovative manner).

Just a side note on your ramblings. At the end of the day, all that counts is productivity and getting things done. Programming software is difficult enough as it is and there is no reason to burden the programmer with implementation details when an alternative programming language (tool!) allows him or her to focus on the actual problem at hand.

You seem to have a very skewed idea of "progress". Progress is not adding library xyz to programming language foo just to be able to achieve the same that another language features natively (either as part of the core language or its baseline runtime environment). Progress is to explore and discover means of being more productive, less error-prone and able to cope with the increasing complexity that software requires today and perhaps even more so tomorrow.

Ideology is nothing but a hindrance for true progress. A programming language is nothing but a tool. Knowing and promoting only one tool not only limits your choices on approaching a problem (both mentally and technically), and makes you inflexible when it comes to being to productive (i.e. regarding prototyping).
Innovation needs room for new ideas and living in a one-programming-language-box doesn't provide much of that. Finally, just to counter your argument from ignorance that C# has nothing to offer that Java had for years - one word: LINQ, oh - and DllImport, hm, maybe the unchecked and unsafe blocks, lambda expressions, etc. etc.

Bottom line: Learning more than one programming language is not a waste of time and statements like "language/platform xyz has to die because it hinders progress" are simply both untrue and quite offensive to the hard working, dedicated and bright people that created them. There is no silver bullet. Period.

### #13myefs  Members

Posted 09 September 2012 - 05:00 PM

Thanks everybody for answering, though it seems we got a bit off topic on some issues.

Back when I was 12 years old I had some programming experience with c++ for about a year and I was doing pretty good. I don't consider it difficult for a beginner as long as everything it's properly explained.Anyway it's better then some schools where they teach you pascal or something you have small chances of working on.

However I haven't done any programming, apart for some JS quick fix, for the last 4 years since I've been into design and music.
After reading your answers, I was thinking of starting with C++ and OpenGL (by the way, is OpenGl used for 2D, 3D or both?), then probably Python, might as well web develop since I occasionally design for web developers, and then I'll look into java.

It's that a good method/order of learning?
Also, what are some good resources for C++ and OpenGL?

### #14phantom  Members

Posted 09 September 2012 - 05:38 PM

Finally, just to counter your argument from ignorance that C# has nothing to offer that Java had for years - one word: LINQ, oh - and DllImport, hm, maybe the unchecked and unsafe blocks, lambda expressions, etc. etc.

Oh man, LINQ is probably one of the best programming improvements to happen in... well, years.

I'm mainly a C++ programmer, day job and problem domain generally demand it, but I also use a fair chunk of C#/.Net and getting a handle on LINQ just made programming that much more enjoyable and let me solve problems faster.
The async/await system which is coming is also pretty cool and the Reactive Extensions just make life that much nicer too.

Anyone who doubts C# has brought anything good to the table needs to extract their head from whatever dark area they have placed it and learn about it - some truely great tools in there.

### #15Karsten_  Members

Posted 10 September 2012 - 02:55 AM

darookie,

Ever heard of Linq++ or CLinq?

Why do you feel, developers need to waste their time to learn a new language just for a single functionality?

Perhaps if people did just bite the bullet and use the better language, then Linq++ would now be even better than the Microsoft implementation and the 99% of software written in C++ (and perhaps C) could benefit rather than a select few integrators using a short sighted and gimmicky language written by a business trying to cash in on Java's success.

. Progress is not adding library xyz to programming language foo just to be able to achieve the same that another language features natively (either as part of the core language or its baseline runtime environment).

This is certainly closer to progress than "language jumping" and not actually getting anything done. I also see Microsoft's C++/CX and C++/CLI extensions much closer to progress than yet another frigging' language like C#.

C# is a waste of time and anyone who doesn't see this will inevitably be wasting other people's time.

Edited by Karsten_, 10 September 2012 - 03:26 AM.

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.

### #16Ravyne  Members

Posted 10 September 2012 - 03:06 PM

darookie,

Ever heard of Linq++ or CLinq?

Why do you feel, developers need to waste their time to learn a new language just for a single functionality?

Perhaps if people did just bite the bullet and use the better language, then Linq++ would now be even better than the Microsoft implementation and the 99% of software written in C++ (and perhaps C) could benefit rather than a select few integrators using a short sighted and gimmicky language written by a business trying to cash in on Java's success.

. Progress is not adding library xyz to programming language foo just to be able to achieve the same that another language features natively (either as part of the core language or its baseline runtime environment).

This is certainly closer to progress than "language jumping" and not actually getting anything done. I also see Microsoft's C++/CX and C++/CLI extensions much closer to progress than yet another frigging' language like C#.

C# is a waste of time and anyone who doesn't see this will inevitably be wasting other people's time.

I thought I sensed a strong sense of bias in your first post, but I tried to give you the benefit of the doubt, however, clearly my gut was right.

You're spouting quite a bit of FUD here -- Firstly, Microsoft designed and is the driving force behind advancements made in C#, but the language itself is no longer controlled by MS, and IIRC, they've also agreed to not assert any patents they hold that might be required to implement it. Also, it's a language, and quite a good one, not some marketing ploy like you seem to assert -- manufactured by marketeers alone like some kind of boy band.

C++ might be the "Better language" for you or I, but I don't presume to know that this is the case for everyone and neither should you. Most people out there doing their jobs just want to get things done, and don't need or want to get bogged down in the details of memory management or eccentricities of what constitutes undefined or implementation-defined behavior. Plenty of people don't need the unchecked power that C and C++ can provide, and I daresay that more "average" programmers benefit from a little extra hand-holding than not -- A kid fresh out of University of Rural America with his CS degree writing C++ is a scary thing, especially since he was more than likely trained in Java.

Programming as a whole would not be better served by promoting the type of C++ mono-culture you seem to advocate here, nor did C# or any other of the hundreds of languages that exist today slow down C++. C++ is the only one who slowed down C++, and its convoluted syntax is the primary culprit, not just in extending the language, but in supporting tools that make development easier, like intellisense, code-refactoring, and code-exploration. And you can say all you'd like that feature-from-language-X has or could have a similar library for C++, but at the end of the day, C++ folks might never have thought to have such a library, or to build it in such a way, or get to enjoy the tight integration with the language and other tooling around .Net or some of the other runtimes out there. If I can coin a phrase "Inspiration and evolution are two sides of the same coin."

Different strokes for different folks. Don't pretend that you know any better.

Edited by Ravyne, 10 September 2012 - 03:12 PM.

throw table_exception("(ノ ゜Д゜)ノ ︵ ┻━┻");

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.