Although I have used NetBeans once for a project, what languages do I need to learn to become a full-fledged Ubuntu developer?

My project in NetBeans (Java only) was to design a calculator (relatively easy). Moreover, how do we learn to make image viewers, browsers, etc.?

Also, what would be the best language for certain applications?

  • 3
    It is rather subjective... Example: perl can be a substitute for python and the other way round but you will find perl/python users that despise python/perl for no reason other than the lack or the forcing of indentation ;)
    – Rinzwind
    Jul 18, 2013 at 6:54
  • If you can be more specific about what you want to write we may be better able to answer but bash then ... , You are likely to get lots of different opinions and you may be better asking this in Ubuntu Forums: Development and Programming Jul 18, 2013 at 11:56

5 Answers 5


The answer is simple and not really helpful. Whichever language is needed. Ubuntu is a ton of software, some of it written in C, some C++, some in Python, Perl, bash... and others. You should definitely learn scripting with bash, and you should pick a language like Perl or Python, possibly the latter. Furthermore, learning good old fashioned C never hurt anyone -- you learn more about how programs work, what are libraries, lots of stuff on other tools.

Otherwise -- first find a task, a niche, something that needs to be worked on or something that is missing or something that is just fascinating and you would like to work on it. And then find out what language will be good for that purpose.

  • 5
    Simple but accurate ;) Whatever language it takes to get the job done the most efficiently.
    – Rinzwind
    Jul 18, 2013 at 6:52
  • 3
    Since OP mentions he has experience in Java, it's worthwhile to mention that Java runs fine on Ubuntu as well. You don't even need to recompile (when porting from another OS) Jul 18, 2013 at 10:27
  • @BlueRaja-DannyPflughoeft Unless you're developing an application that requires low-level system calls. Often enough you'll see applications providing platform specific libraries for these features. But generally yes, you're right. Jul 18, 2013 at 10:57
  • ofc that anything that can be compiled for a certain cpu architecture can do the job. There are more important aspects to consider when someone want to develop for an specific platform. Like how much time does that person has to get started, does he wants to be dealing with memory management, does he want to do cross-platform programs, what type of programs does he want to make, does he know to work in a team , Does he want to make computers that serve bacon sandwiches while massaging the users or a mobile air conditioning system, the sky is the limit some say, etc...
    – userDepth
    Apr 21, 2016 at 3:51

If you are intending to write applications for Ubuntu that can run on multiple devices and form factors (desktop, phone, tablet, TV...), I'd recommend to learn QML and JavaScript. Essentially:

  • Use QML to write convergent Ubuntu apps that run across form factors and devices
  • Use JavaScript to complement QML when writing Ubuntu apps and to write Ubuntu webapps
  • Can you give a bit more detail on why these two are suited?
    – don.joey
    Jul 18, 2013 at 18:00
  • Done, I hope that provides clear guidance :) Jul 18, 2013 at 18:58

You should learn:

  • JavaScript: as most UI frameworks/env. are/will be based on JavaScript; you will need it anyway some day or other.

Then for all the rest you will need something else:

  • C++/C
    • pros: amazingly fast, access to low level features
    • cons: lots of time to learn how to write something stable, awful community
  • Ruby:
    • pros: easy to learn, really pleasing to write, great community
    • cons: might be slow for some task (really)
  • Python:
    • pros: lots of packages are in python, great community, fast, etc.
    • cons: python 3 (just kindin')

But there are still many other languages such as Java, etc., however, the above mentioned may be the easier for a start, except C/C++ but which worth learning as you will be able to use it with many other languages (e.g extend python, ruby, etc.)


Programming work consists of both the actual code, and the mental model below it.

Teaching yourself a programming language is easy as long as you have the basic concepts of how computers work, however in order to make useful contributions to a project, you also need to understand the design behind it.

My suggestion is thus to join a project that you take personal interest in and use often, and then start out with quality assurance work:

  • if there is a bug report that is somewhat vague, try to replicate the problem, and improve the description. Bonus points for an automated test.
  • if there is an old bug that hasn't had any attention for a while, try to see whether it still exists, and update the bug report
  • if there are testsuite failures, try to find out what is happening in order that causes this test to fail

This will allow you to learn about the difficult, conceptual part of the project on a manageable learning curve, while keeping your interest (because it is a project you care about) and giving you access to the community around the project. The actual programming language (whichever is used in the project) is something you can pick up on the fly.

For an example of a somewhat gradual entry, look at my contributions to the Beignet project. Knowledge of the programming language (C/C++ in that instance) is certainly not the limiting factor here.


You should learn... all of them ! Or rather meta-learn all languages. When you know two or three languages, you can quickly learn any new language which is similar to these ones. If you know enough languages, you "virtually" know them all, and, more importantly, you understand that which is part of the language, and that which pertains to the programming independently of the language. Ultimately, specific languages are irrelevant.

So you might want to learn Java, C, Scheme, OCaml, Assembly (two architectures at least), Forth and a bit of Prolog, not necessarily in that order. The second language will be the hardest, because you will have to both learn new concepts, and forget concepts which you learned with the first language but turned out to be wrong. Afterwards it is easy and only becomes easier.

Then, when dealing with a specific development task, use the most adapted language based on availability and support of compilers and libraries, knowledge of co-workers, policy constraints from management, and so on. Flexibility of mind is the key. Knowing many languages grants this flexibility.

  • All of them? Really? Take a look here for the classic "HelloWorld" program in a few. Most programmers only know a few languages. Its only important to know the ones you need. Jul 19, 2013 at 7:28

Not the answer you're looking for? Browse other questions tagged or ask your own question.