Where do normals come from?

I understand that normals are a normalized vector per-vertex representing a surface’s direction. But how do you calculate them? Do you need any more information other than the vertex positions?

( Please put in simplest terms possible, I’m still learning all this graphics processing stuff )

google: http://fullonsoftware.co.uk/snippets/content/Math_-_Calculating_Face_Normals.pdf

vec3 calcNormal ( in face f )
{
  vec3 a = vertex[f.a];
  vec3 b = vertex[f.b];
  vec3 c = vertex[f.c];

  vec3 normal = cross(a - b, a - c); // for ccw triangles. a-c,a-b for cw probably

  return normalize(normal);
}