I am a windows OS users for couple of years. I want to try Ubuntu Linux. I have couple of questions I would like to ask here:

  1. Is Linux a good OS for learning programming languages?

  2. What programming languages should I learn in Linux?

  3. Should I stick to Windows OS or change to Linux OS if I want to be a great programmer in future?

Some of my background:

I only know a little bit about php (learning stage).

+36  A: 

1) Yes.

2) C.

3) Being a great programmer doesn't depend on the OS you're using.

Luca Matteis
How to be a great programmer? What are the factors to become a great programmer?
Start by learning ANSI-C.
Luca Matteis
Problem solving is one thing most great programmers have in common.
John Boker
Okay, thanks. I will start learning ANSI-C today. Go library now..
+9  A: 
  1. Yes, it is.
  2. Almost any. It's really not up to the OS. But I think it's better to avoid C#, Delphi, VB and such vendor-centric languages - at least learn some more universal language first. For trouble-free out-of-the-box platform independence Java is best. C, C++ and Python are good choices too, albeit quite different.
  3. To be a fairly good programmer it's enough to be able to work in some particular environment, but I think that being great requires knowing several environments. Although programming in general is not about the OS, an application programmer can't avoid OSs, so knowing them well is a must.
Joonas Pulakka
What's wrong with C# ?
John Boker
the quality of the programmer has nothing whatsoever to do with the operating system being used. One might as well argue that truly great programmers write their own operating systems!
Steven A. Lowe
There is definitely no requirement to knowing any particular OS to be a great programmer.
C# is a Microsoft-centric product. I know there's Mono, but who really uses it? And, don't think you can be a great programmer if you can't work in any actual OS, so knowing the major OSes is definitly a requirement.
Joonas Pulakka
by that logic, there are no great Macintosh programmers, there were no great Apple ][ programmers, and of course there were no great programmers prior to the invention of windows and linux. "don't think so"! ;-)
Steven A. Lowe
To be a _good_ programmer, you have to know both - to be a _great_ programmer, you have to know _many_ languages.
@[Arafangion]: mad-j was talking about operating systems, not languages
Steven A. Lowe
True, it's not a good strict definition. I corrected it to be "application programmer". Strictly speaking, it wouldn't be necessary to know any particular programming language to be a great programmer - programming in pseudocode would suffice. I don't think so actually ;-)
Joonas Pulakka
+2  A: 
  1. Yes it is This is because it is widely used for development and hence you will find a lot of support, documentation and tools

  2. What are you trying to do? There are so many languages you can program on linux, it really depends on what you want to learn

  3. Again it depends what are you trying to do. If you are trying to learn something where the tools are better on linux then use linux and vice versa. Don't forget the OS is just a tool. Decide what job you want to do before you chose your tool ;)

You make a good point, thanks
+11  A: 
  1. Yes, it's arguably the best.

  2. Learn a low-level language such as C, and a high-level scripting language, such as Python. The combination should cover most of your programming needs.

  3. Knowing both is probably the best option, though as someone mentioned earlier, programming skill is not strongly related to Operating System expertise.

the best for what purpose? the key word there is "arguably". "arguably" OSX is the best OS - for a macintosh.
Steven A. Lowe
@Steven: It's definitely convenient if you do web development, except on IIS. It's also geared more towards programmers, e.g. you can get every language under the Sun and a good amount of tools installed with the distro. That's pretty convenient.
Nikhil Chelliah
+18  A: 

Yes, Linux is a good OS for learning programming languages. Most languages are readily available for Linux; under Ubuntu, look in the "development" category for the appropriate packages.

I recommend that you become familiar with using the shell (i.e., the command line) first -- strictly speaking, it is a programming language in itself, but mostly it is the main component of the Unix-style development environment.

For programming languages: since you are mostly beginning from scratch, I recommend starting with Python. It is a nice, clean language to start out with, and it has lots of interface libraries so you can do real stuff with it.

After Python, I recommend you learn C. Don't try going directly for C++; lots of things in C++ won't make sense unless you learn C first. C is the primary "systems programming" language; the great majority of heavy duty software tools (operating systems, compilers, interpreters) are written in C.

Finally, you can become a great programmer in any environment, but I do recommend becoming familiar with command-line development tools even if you stick with Windows -- if you never program outside an IDE environment, you probably won't gain a good understanding of how your toolchain works...

+1: basic shell commands first (because they're so phenomenally useful), Python next, followed shortly by C :-)
David Zaslavsky
I actually suggest becoming really good at Bash programming then something like Python/Ruby. You can move onto anything. I recommend Ada 'cos it's cool but C is actually quite easy to pick up and will take a while to master.
Adam Hawes
I like this thinking. Knowing your way around the shell will be invaluable. And Ubuntu is a very Python-friendly platform.
you can learn C++ without knowing C. Accellerated C++ starts from a high level, then introduces to pointers and lower level programming.
+7  A: 

Yes, Linux is a fine OS for programming. The main thing that may put people off is the lack of Visual Studio or an equivalent. Microsoft have done a pretty good job with the Windows development tools. However, there are other IDEs. Eclipse, Code::Blocks, KDevelop, and of course vim. With C++, how the libraries work is much nicer than windows. Being able to apt-get install somepackage-dev and then be able to include and link against it is a big plus for me. From my point of view it is a better platform, there's just no one grand IDE that everyone uses. This also doesn't bother me because I use vim ;).

As for the language, it really depends on what you want to do. Perl has always been fairly pervasive on Unixes. Python has gained a lot of popularity on Linux now, with many of the GUI tools now being written in it, interfacing with C libraries to do some of the hard work. Java is another choice. Developing Java on Linux is not really any different from Windows. Of course, C and C++, and pretty much any other language you can think of.

You mentioned PHP, well developing PHP on Linux is much better in my opinion. I find I have a lot less errors when I'm developing on a system where I can configure permissions and other settings to be the same as on the target server. Having a case sensitive filesystem alone cuts down on typos in filenames.

In the end, it depends on what you want to do. The OS is not really the limitation on language choice here.

Personally most of my work is C++ development on Linux, and I prefer that to working on Windows. The possible disadvantage is you don't learn win32, or whatever other libraries are Windows only. The reason I bring this up is if you are going for jobs that are all windows programming, you may be better off getting your head around the windows libraries. However, if its PHP, go for Linux. Then again, there's no reason you can't program on both - cross platform code does exist ;).

+1  A: 
  1. Except for the Microsoft languages, every language is available on LInux

  2. The language to learn does not depend upon the platform but upon the type of application you want to build. If you want to make native Linux Gui apps C or C++ would be a good choice. For web applications I would learn a scripting language like Ruby or Python.

  3. Switching to linux for programming will teach you how to use and combine different small shell tools and to not completeley depend upon features of a single IDE.

I thought Mono covered #1 at least somewhat?
Yes mono exists, and I think it is fine if you're an experienced c# programmer. However most c# tutorials and beginner articles will focus on c# in a Windows development environment, which could be frustrating if you're trying to learn the language on Linux.
<<most c# tutorials and beginner articles will focus on c# in a Windows development environment>> - at the beginning you said that MS languages are not available on Linux, and now - that tutorials focus on Win environment. This is manipulation.
+2  A: 

1) Yes, very much so. The libraries alone make it worth it, but the community blows away anything the Windows world has to offer. If you're worried about switching consider using andLinux instead of Ubuntu

2) Whichever you like. Python is widely supported by all and virtually idiot-proof. Much of the guts are written in C or C++. If you're thinking of this as a stepping stone into industry, consider a path like Python->C++, with a little PHP and Java for good measure.

3) I switched to Linux ages ago for stability alone, but as I noted, there's no need to "switch" anymore.


I switched to Ubuntu a few weeks ago, and I'm learning Ruby. Ruby is really neat. I've been following this tutorial to learn to make Windowed Apps with it. And if you want to do websites, there's Ruby on Rails

+1  A: 
  1. Yes -- even more so if you get to use the command line a bit and get practice with the shell and common utilities. There's a lot of scope for yacc, sed etc. in code generation and build scripts.

  2. I think the one that is especially relevant in Linux would be C (kernel modules!). Also, scripting languages are generally easier in Unix-like OSes than Windows. It's pretty common to write a one-off one-line script in the shell, where on Windows you'd resort to error-prone and RSI-inducing manual operations on each item.

  3. I agree with other comments that it doesn't matter, with two caveats:

  4. The access to OS internals in Linux will give you more opportunity for practice in low-level programming (but conversely, the barriers to them in Windows might school you to program more to an interface than its implementation-of-the-moment).

  5. Practice writing software that works in each! It is a lot easier to write (e.g.) cross-platform GUIs now, and I personally would like to see more applications that are written with portability up front.

  1. Yes

  2. since you already know php, start looking at php-cli (for your scripts) And then look at other fun things, python, java, c etc etc

  3. Switch to Linux. (but good programmers can code on whatever...)

+2  A: 

Python is used heavy on linux.

C if you are want to do system level work.

+1  A: 

Learn bash and C / C++ just to survive in the real world, the move forward to python, or any other high level language.

  1. Yes, you can study the source code of the softwares you will be using day to day, and see for yourself how they code in real world.

  2. Based on your experience I'd say next step python. However, to be competent its better to have C, an OOP language, a scripting language, a functional language, and shell scripting under your belt. The path you take is your decision, but scripting is generally easier to start with.

  3. Windows has the tools for programmers and there are ports of almost all well known open source softwares too. However, see point number 1 for the reason I'll be partial towards Linux for developers, besides the community is great, no matter which distro you opt for. :)

  1. Yes, it's perfect! (I started by this way)

  2. if you know something about scripting, you can start using python

  3. if you have to develop cross-platform programs, I suggest you to use Linux. But if you have to develop Windows programs you should use Windows (I do that :P )

  1. Yes
  2. GNU/Linux allows you to porgramming in every language: for the choise of languages you can read this questions
  3. Programing is'nt in function of OS, but GNU/linux allows you to see in depth of the interaction program-kernel
+1  A: 

Linux is not a necessity to become a good programmer. In fact, there are plenty of good programmers who develop in Windows environment all the time. All you need is right tools and passion (plus patience).

I would suggest you to learn C first. It is a straight forward language. If you have some experience in PHP, learning C would not be too bad in the beginning, because the syntax is a lot similar. However, C does have some nitty-gritty things that you will find out once you get into it.

I encourage you to stay with Windows for now, because you are accustomed to it. Download Eclipse, PuTTY (maybe Cygwin as well), GCC, MingW, and other stuffs you need to do development in C. I believe that Eclipse has plugins for C and C++ that come with the compiler and std lib.


+2  A: 

1) Yes, it's one of the best choices

2) I'd start with C++ and python

3) What do you mean by "great programmer"? It's not that if you know C++ you are a great programmer and if you know C you are not. Being good programmers is not strictly related to languages knowledge. You need a strong computer science background, that's the main thing.

On Linux you have a wide choice (and everything can be used for free), but it lacks support for .NET. Yes you have mono, but AFAIK it doesn't allow you to develop full win32 applications with C#. But, again, knowing (or not knowing) a specific platform doesn't make you a bad or a good programmer from a technical point of view.

Platform and language (like .NET and C#) knowledge are important when you are looking for a job, though.

+2  A: 
  1. Linux is much better OS for development.
  2. It is matter of personal interest.
  3. OS does not matter.I suggest to use both.
can you expand the first part, please? what exactly makes Linux better OS for development?
+1  A: 

It was after my conversion to GNU/Linux that I understood many fundamental ideas of operating systems. As all the others have said, it is a very good development platform.

I would suggest learning C and Perl as both are fundamental parts of the GNU/Linux system.

Alan Haggai Alavi

Check out Smalltalk !! ( I hear C/C++ programmager gasp : What !?!? Is'nt ST Dead!!) Seriously , I've programmed in a range of languages and ALL failed to impress as development tools. They are perfectly good languages in their own way.

For example: I really like Ruby, its a terrific language, but where is the IDE & end-user GUI ?? Hunted around and found a external end-user GUI tool, FOX ( a transportable GUI written in C++) and FXRuby ( a Ruby interface to FOX ) -- these work beautifully but still no IDE.

The above is not a condemation of Ruby, et al, just a illustration of how soon you end up in language/library/product hell, and you have not written any of your own code yet. Not to mention which Editor to use !!?

Came across the current versions of Smalltalk, Cincom VWST & Smalltalk/X in particular,and tho not perfect ( no language is) they offer complete transportability across Windows & Linux(s), a full IDE including editor & end-user GUI, and little need to use any external libraries in other languages. Both VWST & ST/X are complete commercial quality Smalltalks offering Non Commercial (Free) licences for the dabbler. I recently started using ST/X in preference to VWST as I like its default desktop appearance better.

For WEB development there is 'Seaside' which is a much easier route to Web programming than Ruby-on-Rails and most other Web development tools, and you stay with Smalltalk Code.

For scripting problems, GNU Smalltalk is well developed and works.

Good documentation is a little hard to find, and good books even harder, but it is worth the effort in finding out how to drive Smalltalk. James Robertson of Cincom has a very useful blog which offers links to many useful Smalltalk discussion and hints ( see 'Smalltalk Daily' )

I assume that you are wanting to learn 'Linux' programming for your self, if your learning for employment than you'll have to go the C/C++/Java/Perl/Python/PHP/Ruby/Eclipse/KDevelop/Editor'X' plus what ever other 'tool' you'll have to get involved with :-)

For my own stuff Smalltalk is the weapon of choice.


Lazarus is also a good choice. It is something modelled after Delphi.

Marco van de Voort

i usually use java ( java,jsp,servlet and j2me) for my works but not so expert on it yet.. C and C++ i learned when i do my bachelor in computer science. now i try to learn about shell and python. still try to figure out how to start learing other programming.can anyone give a tip how to start it?

  1. Yes!

  2. I'd go for Python. Then you can use Quickly to make Ubuntu apps with Glade (GTK+) for Gnome. After that, I'd suggest Java (which could lead you into Google App Engine and Android programming), followed by C++.

  3. As far as programming goes, the more operating systems, the better.

  • Y
  • UNIX must be learned so LINUX yes, even if using windows only.