## DEV Community is a community of 553,934 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

# General relativity vs complex analysis

There are two distinct categories of scientific discoveries and inventions: facts and methods.

The great thing about "fact" discoveries is that they are often easy to give a one-line, catchy summary.

If someone asks what's the big discovery of the general relativity, you can say "it's that massive bodies bend the spacetime around them". It will be a correcty, even if simplistic explanation. The best thing is that it can even be confirmed visually, with pictures of stars during a total solar eclipse and spectacular effects of gravitational lensing.

There's another class of discoveries that can be described as "methods". Complex analysis is a great example.

High school students are sometimes taught complex numbers. Or rather a set of meaningless rules for manipulating imaginary numbers. Let's pretend there's a number i such that i^2 = -1. Very funny game, isn't it?

The real big idea of complex analysis sounds vague and ambiguous to the uninitiated: you can discover properties of real functions by studying their complex-valued versions.

You can classify singularities using a complex-valued equivalent of Taylor series, calculate contour integrals using just one point and find the factorial of `-3/2`.

It also takes a few months of study to understand the power of complex analysis.

What does it have to do with programming? Technically, in computer science and software engineering, every discovery is a "method".

However, some discoveries are much closer to facts. For example, the Dijkstra's algorithm is a fact: there's a quick way to find shortest paths in a graph. You can even make an animated demonstration.

Many programming techniques, however, are exactly methods—not unlike complex analysis or group theory. Higher order functions, dependent types, formal verification and so on: they are useful and important, but don't allow for catchy and correct descriptions.

Even relatively simple concepts like the World Wide Web can fall into this category. I'm pretty sure in 1990, a description like "it allows everyone to publish documents online and link to any other document" prompted a lot of "so what?" reactions.
You have to see the Web in its advanced state to realize that it enables completely different usage patterns than any closed hypertext environment.

Thus, if you see a description that seems vague, it may not be a communication failure. Maybe its very nature makes a consice description impossible.

How to tell if it's the case, or if a proposed method is any good (or if it even works) is another question.