I'm reading Category Theory for Programmers. In the chapter Categories Great and Small, it says:
A preorder is a category where there is at most one morphism going from any object a to any object b. Another name for such a category is “thin.” A preorder is a thin category.
My question is, if I have a <= b, a <= c, b <= d, c <= d like below:
doesn't that mean I have two morphisms going from object a to object d (i.e. a -> b -> d and a -> c -> d)?
What am I misunderstanding here?

No, those two routes from $a$ to $d$ are different, but when you compose them, you get equal morphisms $a\to d$. For instance, you can consider the preorder on the natural numbers that says $n\geq m$ when $n$ is divisible by $m$. Then $6\geq 3,6\geq 2,3\geq 1,$ and $2\geq 1$. This gives us two routes by which to show that $6\geq 1$, but that doesn't mean there are two different morphisms $6\to 1$ in this category.
More broadly, this is no different than the observation that $31=0+31=7+24$, or that smoking causes lung cancer, which causes death, and that smoking causes heart disease, which causes death, so there are (at least) two different reasons why smoking causes death; none of this stops you from defining a preorder in which $x\leq y$ means "$x$ causes $y$ (in at least one way.)"
Closer to your example, your picture could describe at least two different categories: $C_1$, the category freely generated by that picture, is the "non-commutative" square in which there are two distinct morphisms $a\to d$, while $C_2$, the commutative square, is given by $C_2$ together with the relation that both paths $a\to d$ are equal. $C_2$ is a preorder, but $C_1$ is not. These notions of generators and relations are very much the same as you may have encountered in group theory, or maybe not, if you're coming from programming.