Unity allows you to program your game using two programming languages: C# and UnityScript
C# is the best language to use with Unity as of right now. Most tutorials and resources use it, and it is simply better than the other option. Unity supports C# 4.0 and .Net* 3.5. C# 6.0 and .Net* 4.6 are in an experimental phase. For those of you who don’t know, .Net is a software framework developed by Microsoft. Specifically in Unity, it allows you to use System namespaces (libraries) among other things. You can read more about it here and here.
Usually called JavaScript (in a Unity-specific context), UnityScript is a custom language with JavaScript-like syntax. Although it can do a lot, there are some things that it can’t compared to C#. This language is getting slowly deprecated in the latest unity versions, so it is recommended to avoid it altogether.
Scripts written in these languages can communicate between each other, but it is not recommended. It’s best that you pick a language and stick to it. The best choice is C#, since UnityScript is getting deprecated.
For all you technical artists, Unity uses HLSL and Cg for its shaders with some engine-specific adaptations. Unlike Unreal Engine, Unity does not have a node-based Material editor, so your only options are to write shaders yourself or buy one from the asset store.
Your game is composed by Scenes (Levels). Each scene contains GameObjects, which are the “things” that populate your level. – such as your player, your enemy, your terrain. Each GameObject contains Objects, also called components. These components are scripts that were programmed in order to do something specific, and then attached to a GameObject.
Take a look at this illustration: