Hilbert functions developed from classical mathematical concepts. In algebraic geometry, the coefficients of the Hilbert polynomial are among the most important invariants. This information is often presented in the equivalent form of Chern classes of a coherent sheaf. For a projective variety, the degree of the Hilbert polynomial is the dimension of the variety. So, when dealing with projective curves there are only two coefficients, and they determine the degree and the genus of the curve, giving thus a topological classification of the embedded curve. Moreover, the celebrated Riemann-Roch formula arises from the computation the Hilbert polynomials for a suitable class of modules. Hilbert functions made their way to combinatorics in the 1970s. Stanley’s proof of the upper bound conjecture using commutative rings was one of the highlights of that period, establishing the connection between commutative algebra and discrete geometry as a permanent player in the field. Stanley’s Conjecture on the h-vector of matroids is one connection between Hilbert functions a other mathematical areas: combinatorial design theory, real algebraic geometry, tropical geometry, optimization and approximation theory. I believe there is one more reason why the interest in Hilbert functions has increased in the past few decades: Hilbert functions are constant on the fibres of a flat family. In particular, they are constant under Gröbner degeneration. The development of Gröbner bases theory has brought a new and powerful tool to the game: computer algebra. The development of computational power in the case of polynomial equations has made complicated examples - impossible to do “by hand” - easy to work with. This thesis consists of six independent chapters, each contributing to one of the broad directions described above.