Building on that, but with a slightly different focus, are there "standard texts" for a computer programmer (with engineering background - I get maths, but don't know which math I need to apply) to help understand numerical weather forecasting? If that is too broad, I'm mainly interested in mesoscale and microscale applications.
I've tried building and running some of the forecast models (e.g. WRF) but I'm uncomfortable looking at numbers coming out without understanding at least some of the process.
The resources you want will vary on what level of understanding you are seeking. For example, knowing the math means you can solve equations or transform them, but it doesn't mean you understand the physics involved.
Some topics you'll want an understanding of to understand the process:
At the heart of any weather model are our primitive equations. Navier-stokes, thermodynamic energy, the state equation, and mass continuity.
Differential equations, linear algebra
The math for solving the above equations.
Discretization, numerical stability
How to turn the equations into something than be numerically solved on a 3D grid of points discrete in space and time. This also involves choices in grid types, grid resolution, boundary conditions and time steps. Any numeric noise must be accounted for and some artificial diffusion is sometimes used to accomplish this.
A consequence of a grid means that processes smaller than about 4x your grid spacing and certainly those entirely contained within a grid volume are not resolvable by the physics in your equations. These physics must be parameterized. These process can include convection, radiation, turbulence, moisture, boundary layer processes and more.
A good text on MPI (not necessarily needed to understand the model, but if you are interested in how it runs across nodes you'll want to understand MPI).
The next step is digging into the source code. From this perspective I suggest taking a look at CM1, which may be easier to follow than WRF from a programming perspective and will give you a foundation for how the math is applied in code to solve our equations and produce the output you see.