There are many things I hate (or dislike, or currently have a bone to pick, etc.). I thought that Java would be a good first target for a post.
Maybe my lack of any formal training is hindering me here, but I find trying to leverage public libraries (take google-guava for example) in Java the worst. From my experience, you have to actually pull in the code for the library and ship it with your code. I suspect this is an artifact of the whole JVM concept, but that isn’t a valid excuse, in my opinion.
There are a few issues that arise from this. The first and foremost issue is that your application bloats like crazy when you want to make use of a single call in a library. You are also now for patching your software if a dependent library has a security hole. When developing, you need to actually copy down all dependent libraries in order to have a working copy of the code (or use something like maven or ant).
There is either something I’m missing, or this system is horribly broken (dynamic vs static compiled binaries)? I thought we were kinda done with statically linked libraries except for extreme exceptions (like embedded systems).