I'm assuming you are talking about Siemens.
A Data Block is a file that is used generally for holding data but can be used just like any variable, it contains variables that can be words, double words, bits, bytes (integer, dinteger, Float bool), this is like the other variables in other platforms i.e. N7:0 F8:0 (AB) MWxx, Omron, Dxxx (Mitsubishi), the main difference is a Data block in Siemens is not available in the PLC, it has to be created, i.e. instead of fixed variable tables you create a DB, give it the length and can be formatted for all above variable types.
When referencing a variable in a DB you call the data block number before using the variables in it, i.e. Call DB10, Load DW23, however, it can also be referenced as DB10.DBW23, There is a difference depending on what programming IDE you are using TIA or the older S7.
A program block is just a block of logic like any program for example a ladder block, a Function block is essentially the same but you can pass data to/from it, the code in a function block can be re-used many times in two ways either as many instances or as a single instance (single instance means the variables are passed to the function block, the FB is called, does the logic (code) then passes any variables back to the calling program, so for a single instance the block can be called many times from many program blocks but it is only one instance, however, multiple instances generates a separate block of code for each call).
So in essence you create a standard function (AOI in AB money
I'm fluent in S5 & S7, however it has been a number of years since I have used TIA and DB's can be referenced in a different way so perhaps others on here can explain it better if you have TIA.
I strongly suggest you watch some vids on you tube on Siemens.
It can be complex to understand and too lengthy to explain here.