What's the difference between functional and oo directed?
A 'functional' programming language is a language where functions are considered 'first-class.' That is to say, functions can be bound to variables and passed around like any other value type.
A function in this case is just a particular kind of subprogram (probably the most common one you find in languages these days) which can return a value and also has parameters and local variables lexically scoped to itself. Or in layman's terms - a function is a part of the program you can call to do something in a standard way that has its own storage for the stuff the function does and can also spit out a value when it's done (this will make a lot more sense once you start programming).
Functional programming is therefore the idea of defining programs in terms of functions. In functional programming, you tend to build lots of small functions and then define larger functions in terms of those smaller functions. You also see functions taking other functions as parameters to allow for things like generic programming.
Most functional languages just have these features in concert with another programming paradigm (either structured programming, OOP, procedural etc) but some functional languages are 'pure', which is to say not only do they support functional programming but they
only support functional programming. A pure functional language does not have a mutable program state and thus (it's argued anyway) pure functional programs are easier to reason about and test.
Or in non-autism speak - functional programming is where you can treat functions like normal data you can pass around and do shit with. Don't think about it too hard.
Object-oriented programming is a style of programming that came around in the 1980s and became popular in the 1990s. In the OO paradigm, the fundamental unit of a program is an 'object.' An object is kind of a black box that contains data as well functions (called 'methods') that can interact with that data. Understanding OO is hard if you don't know basic programming shit but the basic idea is that you model your program based on the real-world concrete things you're doing computation on (so a program that deals with cars will have a 'car' object that encapsulates all the computations you might need to do about cars).
With a few exceptions, most programming languages are multi-paradigm. That is, they support many different kinds of programming paradigms (functional, OO, structured, procedural, etc). The languages I suggested for each paradigm were more based on what's idiomatic on those languages - JavaScript programmers will favor functional approaches whereas C# programmers will favor object-oriented approaches despite JS supporting OO and C# supporting functional programming.
In the 'real world', you're likely to encounter both kinds of programming paradigms at the same time. Most languages support both paradigms and there's a lot of languages (Ruby and Scala for example) that actually fuse both together in their syntax. So it's worth learning about both and being comfortable working with both.