works for C, C++, java, python