Web services, the semantic Web, and Web 2.0 are three somewhat separate movements trying to make the Web a programmable substrate. While each has achieved some level of success on their own right, it is becoming apparent that the grassroots approach of the Web 2.0 is gaining greater success than the other two. In this paper we analyze each movement, briefly describing its main traits, and outlining its primary assumptions. We then frame the common problem of achieving a programmable Web within the context of distributed computing and software engineering and then attempt to show why Web 2.0 is closest to give a pragmatic solution to the problem and will therefore likely continue to have the most success while the other two only have cursory contributions