Before I became a Linux user, I wrote code using Delphi; then, as a software engineer in the world of Windows gaming, I used Visual C++ 6 as my development environment where I worked. In contrast, from pretty much the moment I found Linux in the early 90s, where I "played", I used emacs and vim.

These days I spend most of my time in Emacs and Vim on Linux because it's my work environment, my personal dev environment and my home play environment. Many people I know who work mostly in Java, C# and Windows look at me aghast, wondering how I can comfortably work outside of what they think of as an Integrated Development Environment.

To explain fully, let's start by saying that an Integrated Development Environment (commonly contracted to an IDE) is commonly thought of as a single piece of software which provides tools to the software engineer to help them develop software. Typically this will include an editor, a compiler interface including gathering warnings and errors and linking them back to the editor, and a debugger whose interface is also the editor. These days IDEs also include things like code-completion, integrated running of test suites, access to revision control etc.

There are many IDEs out there such as Microsoft Visual Studio which I mention because, despite being for Windows, it is free and actually very good; and on the free software side there's Eclipse, IntelliJ IDEA, Code::blocks. Obviously there's more, but those are the most commonly thought of when IDEs are mentioned.

What a lot of people don't appreciate though, is that a properly consistent Linux-based environment can provide an IDE-like interface for you without needing to lose your favoured interaction systems. Emacs, a terminal with ZShell and Gdb can easily be as productive as an IDE if you're used to it and competent with the tools.

There are ways to improve any development environment (e.g. some support embedding another editor such as Vim or Emacs) but often if you're not using the defaults, then some things (such as integrated debugging) simply cease to operate.

If you like gui editors, integrated debugging, the compiler to be run for you, etc then you will very likely enjoy some of the traditional IDEs out there and I recommend you have a play with them. If you prefer to have control over every aspect of your development environment then I expect you'll do better to learn more about the tools available to you such as Ddd etc.

But, no matter your choice, make the effort to integrate the tools together in your workflows and approaches, if not in code itself.