When talking about vector spaces, the notion of a dual vector space seems to often be introduced via postulates, such as in the excellent theoretical minimum series by eminent physicist Dr. Leonard Susskind. While that’s fine, I like an approach using linear functions, which I’ll present here. I learnt this from somewhere obviously, though I don’t recall where from.
First a brief recap of vectors using Dirac’s notation.

If \(\ket{a}\) and \(\ket{b}\) are vectors, then under a chosen operation “\(+\)”, \(\ket{a} + \ket{b} = \ket{c}\) is also a vector.

If \(\alpha\) is a complex number, then \(\alpha\ket{a}\) is also a vector for an appropriate definition of such a multiplication. Note that this multiplication must distribute over the vector addition.

There is a unique vector \(\ket{0}\) which when added to any other vector in the space yields the same vector. The scalar multiplication rule chosen in the step above must keep this property consistent.
We’ll keep it simple with the above rules (and also in alignment with the level at which Prof. Susskind discusses complex vector spaces).
Now consider the species of functions that take such a vector and produces a complex number (a “scalar”).
$$f(\ket{a}) = \alpha$$
Furthermore, consider the subspecies of such functions which are linear in their vector argument. i.e.
$$f(\alpha\ket{a}) = \alpha f(\ket{a})$$
and
$$f(\ket{a} + \ket{b}) = f(\ket{a}) + f(\ket{b})$$
.. for arbitrary values of \(\ket{a}\), \(\ket{b}\) and \(\alpha\).
The space of such functions is isomorphic to the dual vector space of our vector space!
It is easy to see how, because of \(f\) is a linear function from vectors to complex numbers, then that same definition can also be interpreted to see vectors as linear functions of these functions to complex numbers, since \((f+g)(v) = f(v) + g(v)\). The definition offers clear duality.
If \(\ket{i}\) for \(i = [1,2,…]\) are a set of basis vectors of our vector space, then a particular linear function on this space is completely defined by giving its values on these basis vectors.
$$f(\sum_i{\alpha_i\ket{i}}) = \sum_i{\alpha_i f(\ket{i})}$$
If you consider \(g_i\) to be a linear function which happens to evaluate to \(1\) on \(\ket{i}\) and to \(0\) on all the other basis vectors, you can see how \(g_i\) now forms a basis for our dual space.
$$g_i(\ket{a}) = g_i(\sum_j{\alpha_j\ket{j}}) = \sum_j{\alpha_j g_i(\ket{j})}$$
We can now consider \(g_i(\ket{j})\) as a matrix with entries \(g_{ij}\). So if we choose \(\ket{i}\) and \(g_i\) such that we can have \(g_{ij} = \delta_{ij}\), we’re getting close to the idea of an “orthonormal basis”.
We may now introduce a specific notation for such \(g_i\) – we write \(g_i = \bra{i}\). The application of \(\bra{i}\) to another basis vector can be written as \(\bra{i}(\ket{j}) = \braket{ij} = \delta_{ij}\) (by definition).
So how do you find the dual of an arbitrary vector \(\ket{a}\)?
First we can expand \(\ket{a}\) 
$$\ket{a}{} = \sum_i{\alpha_i\ket{i}}$$
We should then expect 
$$\bra{a} = \sum_i{\alpha_i'\bra{i}}$$
for some \(\alpha_i'\) we’ve not yet determined. Now let’s find \(\braket{aa}\).
$$ \braket{aa} = \sum_i{\sum_j{\alpha_i'\alpha_j\braket{ij}}}$$
which reduces to \(\sum_i{\alpha_i'\alpha_i}\).
We now need to determine the \(\alpha_i'\) given the \(\alpha_i\). To do that, we have to make some additional assumptions. We’d like the \(\braket{aa}\) expression to mean “the squared length of the vector \(\ket{a}\)”. If that were to work, then the expression \(\sum_i{\alpha_i'\alpha_i}\) must be a positive real number, no matter what vector we start with. That again implies that each of the \(\alpha_i'\alpha_i\) themselves must be positive and real. Choosing \(\alpha_i' = \alpha_i^\star\), the complex conjugate of \(\alpha_i\), helps us ensure that. So, if \(\ket{a} = \sum_i{\alpha_i\ket{i}}\), then
$$ \bra{a} = \sum_i{\alpha_i^\star\bra{i}} $$
With that one final assumption, we have the “complex dot product” of two vectors \(\ket{a}\) and \(\ket{b}\) given by 
$$\braket{ab} = \sum_i{\alpha_i^\star\beta_i}$$ where the \(\alpha_i\) and \(\beta_i\) are the components of the vectors respectively in an orthonormal basis \(\ket{i}\).
That expression also lets us see how \(\braket{ab} = \braket{ba}^\star\).
Note: There’s something we glossed over earlier  when we defined \(g_i\). The idea of an “orthonormal” or “orthogonal” set of basis vectors can be defined only once we have a notion of such a scalar product. So we have a somewhat cyclic approach to seeing how that can happen.