What is the difference between gene expression and protein synthesis?
According to the homonymous article of Wikipedia

Gene expression is the process by which information from a gene is used in the synthesis of a functional gene product.
These products are often proteins, but in non-protein coding genes such as transfer RNA (tRNA) or small nuclear RNA (snRNA) genes, the product is a functional RNA.


As shown by this picture, gene expression consist of genetic transcription, that results in a mRNA, maturation of the mRNA (splicing, incorporation of a poly(A) tail, capping, ...) and finally protein synthesis by means of translation of the mature mRNA.
Again, the homonymous Wikipedia article tells us what is protein synthesis:

Protein synthesis is the process whereby biological cells generate new proteins [...]. Translation, the assembly of amino acids by ribosomes, is an essential part of the biosynthetic pathway, along with generation of messenger RNA (mRNA), aminoacylation of transfer RNA (tRNA), co-translational transport, and post-translational modification.

The following picture describes the process of mRNA translation by ribosomes that results in a polypeptide.

Once folded in its proper 3D structure, the polypeptide becomes a functional protein.
In order to work properly, some proteins need post-translational modifications, which is (citing Wikipedia again) the covalent modification of proteins following protein biosynthesis and goes beyond the scope of this answer.