First, let's define "language" in terms of what it is. Language requires first a vocabulary (a list of words that define concepts that are the objects of communication), and then a syntax (a "primer" or set of rules that define the structure of the communication).
At this most basic level, C# isn't all that different from English. What makes C# a "programming language" is its intent, and therefore its design; it is designed to be digested into individual low-level commands. As such, the predefined vocabulary is limited, the syntax is very rigidly enforced, and the entire language is designed to be consumed in a very well-known predefined way by its "audience" (the computer; more accurately the compiler, which will digest the source code into an "intermediate language" of simple commands that can then be further translated into machine code by the "runtime"). You don't write prose or poetry in C#; you tell the computer to do a job in the most unambiguous way possible.
For computers, yes, a tool, usually called the compiler, is needed to take what you write in code and convert it to the instructions that the computer can use. Computer science, like most technology, is an inherently iterative, "layered" process. When computers were first invented, they were programmed by manually entering the binary instructions. Those instructions became standardized for each processor into hexadecimal "machine codes"; the difference is only in how the binary digits are grouped for display to humans. Then, in assembler code, the list of commands were substituted for their hexadecimal codes when writing programs; ASM can still be converted 1:1 into native machine code. The quantum leap was to 3rd-generation "imperative" programming, which basically takes more human-understandable, abstract concepts like variables and logic loops and digests them into the native instructions, using patterns based on keywords and syntax. Early languages like COBOL, FORTRAN, Pascal, and C can still be "translated" by a human into a particular machine language (usually 8086 ASM). Then came the revolution of object-oriented programming, which is basically additional syntax rules that define code as being conceptually encapsulated in "objects" that have some combination of state and logic.
Nowadays, we are well into the "4th-generation" of languages, which are languages written as a form of communication with other programs instead of directly to the machine. Widely defined, this includes "markup" languages like XML/HTML, "scripting" languages like JavaScript and SQL, and most of the "sandbox" languages like Java and the .NET Framework (which compile into an IL that is then interpreted further by a runtime that abstracts away machine and platform-specific details). You could also say it encompasses the realm of functional programming languages, which are HEAVILY dependent upon a runtime to provide abstraction of not just machine-specific details, but of operation-specific details. These 4th-generation languages are more or less infeasible for a human to translate into native machine instructions, and the point is that it wouldn't be a worthwhile endeavor; the strength of these languages is the layered process in which they are used to eventually tell a computer what to do at the low levels.