A notation? A rephrasing of the lambda calculus? A logical theory? A theory for the foundation of mathematics? A computer programming language? Depending on the resource that you check you will get a different definition. One of the best definitions (in the author's opinion) is from the HaskellWiki:
"Combinatory logic was developed as a theory for the foundation of mathematics... its goal was ... to establish fundamental mathematical concepts on simpler and cleaner principles than the existing mathematical frameworks... Its “lack of (bound) variables” relates combinatory logic to the pointfree style of programming."
The best programming languages for programming with combinators are array languages like BQN, J and APL. Ken Iverson first introduced the S and Φ combinators as the "hook" and "fork" in the J language in the early 1990s. Dyalog APL would then later add combinators in Dyalog 14.0 in 2014. The newest array langauge BQN has the strongest support for combinator programming of all the array languages. More details of combinators as they exist in array langauges can be found here. If you are interested in learning more, a great starting point is the Composition Intuition: Combinators and Tacit Programming talk that was presented at CppNorth 2023 ⬇️.
“A language that doesn't affect the way you think about programming is not worth knowing.” - Alan Perlis