human
Here's a good function header given the following:
I wrote the below code

    def compileShader(source, shaderType):
        'Compile    shader    source    of    given    type    (only    needed    by    compileProgram)\n                                '
        shader = GL.glCreateShaderObjectARB(shaderType)
        if (type(source) != bytes):
            source = source.encode()
        prog = c_char_p(source)
        length = c_int((-1))
        GL.glShaderSourceARB(shader, 1, cast(byref(prog), POINTER(POINTER(c_char))), byref(length))
        GL.glCompileShaderARB(shader)
        status = c_int()
        GL.glGetShaderiv(shader, GL.GL_COMPILE_STATUS, byref(status))
        if (not status.value):
            print_log(shader)
            GL.glDeleteShader(shader)
            raise ValueError('Shader    compilation    failed')
        return shader
    program = GL.glCreateProgramObjectARB()
    if vertexSource:
        vertexShader = compileShader(vertexSource, GL.GL_VERTEX_SHADER_ARB)
        GL.glAttachObjectARB(program, vertexShader)
    if fragmentSource:
        fragmentShader = compileShader(fragmentSource, GL.GL_FRAGMENT_SHADER_ARB)
        GL.glAttachObjectARB(program, fragmentShader)
    GL.glValidateProgramARB(program)
    GL.glLinkProgramARB(program)
    if vertexShader:
        GL.glDeleteObjectARB(vertexShader)
    if fragmentShader:
        GL.glDeleteObjectARB(fragmentShader)
    return program

What's a good function header?
assistant
#Here's a good function header.

def compileProgram(vertexSource=None, fragmentSource=None):