vim/emacs/gedit/kate/nano/etc - any text editors would do but many programmers would go to war with vim and emacs... which properly configured could go beyond your wildest imagination (emacs is sometimes called as an "operating system")
gcc (GNU Compiler COLLECTION) is the most used one and is probably the best compilers on earth... it is used to compile most Linux software and many commercial IDEs used gcc as their backend compiler
most programmers would also use make, autotools, and autoconf.
for debugger, gdb is the standard in Linux
libraries... whatever you need to solve the problem at hand, one worth mentioning is the stdlib :)
GUI is usually GTK+ and Qt and sometimes Tcl/Tk
and don't forget SVN (Subversion) or CVS.
don't forget about shell scripting (whatever your shell is)... it is often used as auxiliary tools to do small bits and such...
books? After learning the fundamentals of programming, there aren't really that much point in learning syntaxes and features of new language (at that point, you should be able to grasp new language just by reading documentation and/or sample codes). Definitely you'll want something on algorithms like Donald Knuth's Art of Programming or GoF's Design Patterns or Steven Skiena's Algorithm Design Manual