Encoding is typically a reversible process, i.o.w. given the encryption method and possible keys it can be decoded back into its original format.
Obfuscation can be considered a type of encoding used to make it harder to read (or reverse engineer) source code. It achieves this by replacing strings and object/function/method names (for example) and other text that gives insight into what the code does, with other values that are hard to read and interpret. The code itself doesn't really change, for example, the source code for a certain program could include a variable called "thePassword", which an malicious individual could read from memory using several tools. After obfuscation the same variable might be called "asieowlgahb" making it hard to guess and far less obvious what the variable stores. Obfuscation makes source code harder to interpret for "humans" in particular. While running the eventual obfuscated and compiled program the code is not "de-obfuscated" or anything because for the computer it doesn't matter whether the password var is called "thePassword" or "asieowlgahb".