Most "first contract" guides start with pragma and end with Remix's deploy button. The result: developers internalize a workflow where storage layout is an afterthought and gas behavior is a surprise. The compounding mistake is that storage slot ordering is the single largest gas lever in a basic contract, and it's decided the moment you declare your state variables.
Solidity packs state variables into 32-byte storage slots sequentially. Two adjacent uint128 variables share one slot; a uint128 followed by a uint256 followed by another uint128 wastes a full slot because the uint256 forces a new slot boundary and the second uint128 occupies a third. Reordering those three declarations from uint128, uint128, uint256 saves one SSTORE cold-slot allocation — 20,000 gas on first write. In a contract with dozens of state variables, sloppy ordering can cost deployers and users tens of thousands of gas per transaction, permanently.
The takeaway: sketch your state variable types, sort them by size descending within each 32-byte boundary, then write the rest of the contract. This is the correct first step, not pragma selection.