Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

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?

share|improve this question

closed as too broad by Warren Hill, Mitch, Basharat Sialvi, Radu Rădeanu, Eric Carvalho Jul 19 '13 at 10:18

There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.If this question can be reworded to fit the rules in the help center, please edit the question.

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 '13 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 –  Warren Hill Jul 18 '13 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.

share|improve this answer
5  
Simple but accurate ;) Whatever language it takes to get the job done the most efficiently. –  Rinzwind Jul 18 '13 at 6:52
2  
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) –  BlueRaja - Danny Pflughoeft Jul 18 '13 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. –  Layne Jul 18 '13 at 10:57

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
share|improve this answer
    
Can you give a bit more detail on why these two are suited? –  don.joey Jul 18 '13 at 18:00
    
Done, I hope that provides clear guidance :) –  David Planella Jul 18 '13 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.)

share|improve this answer

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.

share|improve this answer

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.

share|improve this answer
    
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. –  Warren Hill Jul 19 '13 at 7:28

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