Plutus is a strictly-typed, pure, functional programming language. The syntax is Haskell-like, but, unlike Haskell’s lazy evaluation, values are calculated immediately in Plutus.
To code a smart contract in Plutus, you can code directly in the Plutus Playground editor, or you can use your preferred code editor and save the files in Haskell format (.hs) to get the syntax highlighting, and most important, you can write on-chain and off-chain code in the same file, with the same syntax. You can use the same data types on both sides, and they will be converted automatically.
Once you have coded your smart contract, you can copy it in the Plutus Playground where you will be able to compile it to Plutus Core and test its behavior.