Synchronizing successive OpenGL Compute Shader invocations
No it is not guaranteed, since the OpenGL specification allows that two Compute Shader run concurrently or even in different order.

You need to call glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT) before the second glDispatchCompute to ensure visibility of the writes from program_one.



From the OpenGL.org wiki article on the memory model:


  [...] invocations between stages may be executed in any order. This includes invocations launched by different rendering commands. While it is perhaps unlikely that two vertex shaders from different rendering operations could be running at the same time, it is also possible, so OpenGL provides no guarantees.


From the Opengl.org wiki article on Shader Storage Buffer:


  SSBOs reads and writes use incoherent memory accesses, so they need the appropriate barriers, just as Image Load Store operations.