One of the aha moments I went through with Verilog HDL is that you're not writing a program, but describing a circuit. Took me time to develop intuition about what hardware my code was synthesising to on FPGA. Here's a classic example with blocking vs. non-blocking assignments: