Plutus Ledger Language Version (Plutus V1/V2/V3)
As explained in Different Notions of Version, Plutus V1, V2 and V3 are not distinct programming languages; the primary difference lies in the arguments the script receives from the ledger, and the value it returns.
Script Purposes
One of the arguments every Plutus script receives is the script context, containing information about the transaction the script is validating.
Producing a Plutus contract blueprint
Plutus contract blueprints (CIP-0057) are used to document the binary interface of a Plutus contract in a machine-readable format (JSON schema).
Optimizing Scripts with asData
The Plutus libraries contain a PlutusTx.asData module that contains Template Haskell (TH) code for encoding algebraic data types (ADTs) as Data objects in Plutus Core, as opposed to sums-of-products terms.
Simplifying Code Before Compilation
Much like in regular Haskell, simplifying or expanding certain Plinth code before compilation can make it more efficient.
Compile Time Evaluation
Compile-time evaluation of expressions is usually preferable as it can reduce script size and execution cost.
Other Optimization Techniques
Identifying problem areas
Profiling Script Budget Usage
Figuring out why your script takes more CPU or memory units than you expect can be tricky.