While I agree the existing tutorials aren't adequate, it helps to start from a minimal working example. I fixed the compile problem on the wiki, plus a logic issue that was causing it to fail. I'm still not a fan of the way the code is organized, but it at least works now.
I have a single-file versions of that tutorial here, as well as a conversion that uses GL20 instead of ARB extensions.https://bitbucket.org/chuck/lwjgl-sandbox/src/tip/src/main/java/tutorials/wiki
I was just working through this tutorial, and I was unable to get it to work. So I went over it, line by line. And I found that the printLogInfo method returns true if there was an error, and false if there was not.
Then peppered through the tutorial, there's "if(!printLogInfo(obj)) useShader = false".
In draw, "if(useShader) //use the shader". This translates to english roughly as:
"If there was not not an error, dont use shaders." or, "Only use shaders if there as an error." (I think. double/triple negatives get confusing after a while)
The code worked when I reversed the return values of printLogInfo().