views:

449

answers:

9

Hello,

I'm an experienced .NET developer (c#/vb.net) (since beta) and I wanted to start checking out how to develop applications for Linux. I have done some Java programming as well. I have Ubuntu 8.10 Linux and was wondering what everyone was using as a tool for developing applications (for any Linux flavor) - is Java the best way to go?

I'm new to Ubuntu and haven't worked in Linux since the days of Redhat using terminal so I'm still pretty new.

Here are some feedback based on responses:

I would like to both become more efficient at using Linux (even if only for an O/S) and take advantage of my development skills by learning a different language such as Java (I have built very simple Java apps in the past... very simple) -- anyway I wanted to think about something that would just expand my skills.

I have built many windows and web applications with .NET (some very large) and I'm very knowledgeable in c# and vb.net languages and the .net framework. I have built many projects using:

.net remoting, web services, wcf (many recent wcf apps), windows applications, windows services, web applications - I use JavaScript when developing asp.net and I also know VBScript & vb6.

I know it would take many years to be able to efficiently create apps in another language(s) but i think it would make me more rounded developer -- and if Google buys Microsoft and makes it illegal to use windows, then i still have a backup plan :-)

+1  A: 

Java for real desktop applications (in Eclipse) and Python for quick-and-dirty things. And that's on Ubuntu Heron. I prefer to use the Sun Java runtimes (Eclipse comes with its own compiler).

paxdiablo
Good point about Sun's Java runtimes. Ubuntu ships with a different JRE.
Bill the Lizard
+8  A: 

This largely depends on what type of applications you're interested in developing. The C crowd sticks to good ol' vi/emacs, make, gdb, and lots of xterms. Java folks often use cross-platform tools like NetBeans and Eclipse. The Python, Perl, and Ruby people use command line tools frequently as well, but their IDEs are becoming richer all the time. Of course, many stalwarts will be command-line jockeys for the rest of their career.

Expect many more subjective answers. I'd tag it as such if I had the rep...

joev
good call, this is subjective :-) -
schmoopy
+4  A: 

Look at Python.

S.Lott
+3  A: 

If you want to leverage your .NET skills, Mono is an option. For an IDE, MonoDevelop is being promoted.

If you are doing this as a learning exercise, I would stay away from Java. Unlike Mono, which encourages you to use Linux-specific features, Java is heavily abstracted from the OS. Aside from using the forward-slash in filenames, you can't really tell you are programming on Linux.

If you are doing this as a career path, C and Java are better options. Mono has potential, but currently is still a niche player.

Jonathan Allen
+6  A: 

If your goal is to learn the Unix Way, I recommend

  1. Write some shell scripts using bash or ksh. Play around with using sed, awk, and other things you'll find in Kernighan and Pike's The Unix Programming Environment.

  2. Learn a little C and do a little C programming. The manual by Kernighan and Ritchie is a classic.

  3. Do some scripting. Python is a popular favorite, but Ruby and Lua are also fine choices. Python is probably the richest; Ruby is pure OO married to the operating system; Lua is the fastest and is so simple you can master it completely.

Norman Ramsey
+4  A: 

Linux world is primarily hacked with Bash, Perl, Python and C. To use Linux efficiently, I strongly suggest your master those languages. What`s really cool about linux is how you can easily combine small apps to resolve a problem really fast. When I say Bash, I also mean all the small utilities.. such as gawk, sed, wc, grep, etc.

Then, it depends of whatever you want to do.. if you want it to be portable on windows. In this case, IMHO, Java is the way to go. (Eclipse and netbeans can also be used on linux). Mono is cool.. until it doesn't do what it's supposed to.

I personally find it really cool that lots of stuff are built using only bash.. it means you can really learn by exploring those files.. I remember that when I installed Archlinux, I was reading the setup bash file in the same time and followed all the steps.

If you want to use Linux really effectively, I strongly suggest: "A Practical Guide to Linux - Commands, Editors, and Shell Programming - by Mark G. Sobell"

However, if you don't really care about masterizing Linux and you "only" want to code some apps, then, since you are already familiare with .net, using Mono is possible but I think learning Java is a better choice.

And by the way, learning to use vim if you plan to use Linux is a little bit like learning to walk if you want to run.

+1  A: 

You've made a good choice with Ubuntu, even with its commercial polish it retains its Debian roots as a great development OS. You'll find that most libraries / modules / languages are easy to install and that the packagers don't 'mangle' features within them. For instance, Red Hat had a big problem with perl because the packagers pulled in pre-release code.

Depending on the type of application you want to write .. I'd highly suggest Python and C. Python makes GTK user interfaces pretty simple, C is the best language to write some daemon or system service with. Both make portability between various Linux distributions easy. Getting to know your way around portable shell scripting would be good .. if you have some time, take a look at Perl as well.

Java is so highly abstracted that you really would not dig in to the simplicity of Linux application development using it. Java is Java, wherever you use it.

Python is just enough abstraction to keep Linux from intimidating you while you learn, C is going to expose you to all of the great and horrible things that a POSIX compliant kernel and C library have to offer.

If you can update the question with an idea of what you want to write, I'm sure you'll see more appropriate answers.

Tim Post
A: 

You might want to look what desktops like Gnome and KDE give you. In KDE you are to develop using C++ with use of the versatile QT library - which is also used in mobile/embedded devices.

For IDEs you can check KDevelop and Eclipse + CDT for C/C++ job. Learning automake toolchain should also be a bonus as a lot of software for Linux uses this. However for personal projects I would take on something better/newer like CMake (eg. KDE uses CMake).

For rapid jobs use Python or Ruby - whichever suits you more.

Marcin Gil
A: 

I have written professional (i.e. you pay to buy) applications in Linux. They were written C and/or C++. They use the X11 libraries (which have existed for Linux since 1993 and Unix since 1984) and followed and honored all the standard X11 arguments (which most KDE and Gnome) application fail to honor the long history of standard options.

For web based applications PHP/mySQL/Apache or Java/Tomcat/Apache when required. I started web development in 1993 when the browser was Mosaic (which was the parent for both Netscape and IE) written by the Netscape starters when they were in college. Yes, Microsoft licensed the Mosaic code. The initial Netscape browser was called Netscape Mosaic (before it was changed to Netscape Navigator). The "engine was named "Mozilla" even in the Mosaic code and the early Netscape about would read "It may be spelled Netscape but it is pronounced Mozzila".

I know the newer generation of programmers do not want to take the time to learn to really code in C or C++ anymore, and I feel that is a great shame. The code produced by a really good program and compiler out performs the "managed code" any day (but it does require more skill in the developer).

A Nnonymous