Bob (the person) doesn't have to necessarily know that there's an auction going in the blockchain, but he can launch a transaction and look for UTXOs of this type of contract. If the off-chain code finds these specific type of UTXOs, then he can fetch the datum associated to it, and therefore he can place a bid.
If you look in the EnglishAuction.hs
file, line 334:
findAuction :: CurrencySymbol
-> TokenName
-> Contract w s Text (TxOutRef, ChainIndexTxOut, AuctionDatum)
findAuction cs tn = do
utxos <- utxosAt $ scriptHashAddress auctionHash
...
This is the function responsible for this. This happens when bidding (line 277):
(oref, o, d@AuctionDatum{..}) <- findAuction bpCurrency bpToken
...
...or closing the auction (line 309), or with any other endpoint the contract opens to the public.