Static sites are easy to create, if the right tools are used, it is a great way to build websites are serving web content, because it does not require any preprocessing of special setup, it can run on any base Web Server.
It takes a lesser resource because it’s just static files, no server side response or rendering to be done.
It has a shorter downtime and a faster response time, it does not require a Database to fetch content, so it doesn’t rely on a backend or Database. It is safer because Database and server side hacks don’t work on them.
There are many ways to create a static site, but only a few are beginner-friendly, like Jekyll a blog-aware static site generator written in Ruby that uses Markdown of writing content and Liquid for logical templating, it has a well written documentation, that can be a very good place for beginners.
Jekyll is also one of the most popular static site generator and powers most of the GitHub Pages websites, it is not the only one, it’s just popular due to the functionality and simplicity it offers. Here is a list of all the static site generators.
The good thing about these static site generators are, that there are so many of them, that offers various different functionality and features, written in various languages, they give you freedom and comfort to choose and let you choose it based on which language you know better.
So, you don’t have to stick to Jekyll, if you like Python, you can use Pelican or if you are Gopher (Golang coder) you can use Hugo.
Static sites are a viable alternative, to Database driven and Flat File CMS.
It is an excellent choice, if you want to have a blog or portfolio, which does not need a fancy backend
Preprocessing can be done, when compiling files into static content, for example using of Sass or Less for style sheets, use of Markdown for web content, logical templating for generating a difference in pages being generated. All the preprocessing that must be done, is done while before or while compiling.
It can be dynamic too if you use dynamic, async client-side scripts, you can fetch web content, dynamically.
The only downside is that it does not work for everyone, especially people who would like to use an admin interface, that can do things serve sided, like login and sign up pages and front end editing for web content.