C/C++- Well, definitely my favorite and most used tool ;) after 15+ years working with it, I can say seen lots of interesting things happening ;) That's a must for a programmer. Though most of my experience is on Win32 platform, managed to pick up few things on Linux as well. For Win32 ok, there's VC as a standard, and couple other things, not widely supported. With linux I'm not clear what's the best :) so far using gcc, but unlike windows there's a choice. we'll see later. I still remember the time when, there were around dozen C compilers for windows, and trust me, it wasn't that bad at all.
Assembly- After writing a few megabytes of asm code I can honestly say - Long live to TASM! In my opinion to be a good programmer you have to know, or at least understand assembly language. If you have no idea what your C++ code transforms into, you may screw up from time to time...
Java- First time I've had to look at Java because of the project I was working on. Found it interesting enough and now it's an important part of my web site. Personally I find it somewhat more restrictive & less convenient than C++. Something like neutered C++ ;). I'm not comparing it to C++ though, both have their own areas of use, at least to me. Very convenient tool to create small projects for web.
Although I will never understand people who are trying to produce something like Adobe Photoshop in Java :) Give it a break, Ok? It was no designed for that, despite all the fuss. Want something small and simple to work on all platforms with less hassle? Ok, Java will do, and don't even hope for the easy way out, you will still have to code platform dependant code. Client program? Ok, doable, even the complicated ones, been there. Enterprise Servers? Yeah right. Can be done, but why? It reminds me of how Wise man said, it can be done, and then the fool came in and did it. Especially not when Java runtimes are floating around in dozens and any enterprise product is free to crash if the JRE version doesn't match by .0.0.1. And every new package is shoving its favorite JRE in your path variable. Lotsa fun, nothing to say.
Here are the first results - Java Ballistic Tools implemented in Java ;) Even the least complicated applets look different in different browser and of course very different on different platforms. I still have to fix those applets for Linux for example. So much for the platform independency :) Creating a text label with a given size font have to be coded per platform :( Indeed it sucks, big time.
Another interesting thing related to Java, I'd like to mention here is JASMIN, which stands for Java Assembler Interface ;) After conducting several experiments with today's Java compilers I came to the conclusion that it does make sense to use JASMIN. For more info about this one check Jasmin Home.
Debuggers- Funny when some folks claim to be experienced programmers and know practically nothing about debugging. Most of then can't imagine that there can be debugger other than MSDEV. Anyway, as of favorites: Numega SoftIce/WinIce/NT ICE is #1 for obvious reasons. The best debugger there is for win32 platform. You may not use it as often, but if I ever have to make a choice to have a single debugger that'd be it.
Microsoft WinDbg. Another powerful and useful tool. Donno how did I survive before without that one. Ok, it has bugs, some really annoying, and not everything can be done with keyboard and you're forced to use a mouse (yuck). Nevertheless it's almost as powerful as SoftIce. And for certain thing simply irreplaceable. Sure, wussies will say it's hard to use, no tooltips ;), etc, who cares. That being said, WinDbg will sometimes get on your nerves with somewhat unpredictable behavior. Yeah, well, there are no bugs only in totally useless programs :) Besides it's improving constantly.