I’m in the unaccustomed position of spending all my work time either writing software or in meetings about it. The current project is conventional big-system server-side Java. That’s not a landscape that anyone’s gonna wax lyrical over, but boy, have the tools ever come along while I was off Androiding and Go-ing and Rubying.
IntelliJ and Git work together smooth as silk; I reflexively drop into a shell now & then to reassure myself with a “git status” but near as I can tell the IDE is just Doing The Right Thing.
Also, YourKit shreds through sluggish code, shining the ruthless light of truth on that bad method. The built-in VisualVM profiler is a stinking turd though; I wasted a half-day failing to get it to do anything useful. I grabbed a YourKit eval because I was in a hurry; next time I need a profiler I guess they’ll get some money from me.
I even dropped into a debugger the other day for the first time in probably ten years. When I busted unit test #29 of 32, all of a sudden it was easier to set a breakpoint and peek at a variable than to start typing Log.whatever(). That IntelliJ debugger is pretty top-notch, you can do pretty well everything you need to with F7, F8, and F9. Three-finger problem-solving, you gotta love it.
At this point all you Java lifers are rolling your eyes because OF COURSE. Hey, I still miss Go’s channels and Ruby’s Enumerable and anything’s REPL. But life in the mainstream really isn’t that terrible.