How exposed your code is starts with how your language runs. There are three tiers, and where your language sits decides what obfuscation has to do.
Interpreted and source-shipped languages are the most exposed. JavaScript usually ships as source, only minified, and Python ships as source or as .pyc bytecode that decompiles almost perfectly back to it. There is no compiler in between to strip anything away, so the attacker starts with your actual code. Here obfuscation is a source-level transformation: it rewrites the code itself, because the code itself is what ships.
Managed languages compile to an intermediate bytecode, not to source and not to native. .NET compiles to IL, Java and Android compile to JVM and DEX bytecode, and all of them keep the metadata, the names, types, and signatures, that a decompiler needs to rebuild source close to the original. This is the tier obfuscation was built for: a decompiled managed assembly is dangerously readable, and name, string, and control flow obfuscation are what stand between it and a clean copy.
Compiled native languages are the hardest to recover. C, C++, Rust, Swift, and Objective-C compile straight to machine code, with no intermediate form and no metadata to reattach. An attacker can disassemble the binary to assembly and work upward, which is slow and never produces clean source. Native compilation raises the floor on its own, but it is not obfuscation: symbols, strings, and structure still leak, and the binary can still be debugged and hooked while it runs.
The line between managed and native moves, because managed platforms can compile to native. This is where it matters that obfuscation runs before that compilation step, and where ByteHide Shield is built to handle it:
Across all three tiers the conclusion is the same: compilation changes how much an attacker starts with, never whether they start. Interpreted code needs obfuscation because it ships as source, managed code because it decompiles cleanly, and native code because symbols and strings survive and the app can still be attacked while it runs.