Ok so as another newbie who's slowly picking up electronics at the age of 30, one of those things I always wanted to learn but never found the motivation/time... let me see if I can take a stab at this
-
BJT's are current-controlled indeed, the "control" current goes between the Base and Emitter, and it affects peak current allowed through the Collector-Emitter.
-
FETs are voltage-controlled, you could think of them as having a tiny capacitor sitting between the Gate and Source pins. The charge of this capacitor affects the resistance of the Drain-Source link.
-
We'll group NPN bjt's and N-channel FETs together, and group PNP bjt's with P-channel FETs.
If you are using the transistor to switch power on/off to some load (often called "SATURATION MODE"), an NPN/N-channel is used as a "Low-side switch" meaning it switches on/off the negative (GND) side. This is because the voltage applied to the base (or gate, in a FET) has to be positive relative to the emitter (or source in a FET), meaning the emitter or source needs to be a reliable connection to GND. So for an NPN BJT, the load's connection to GND wouldn't go to ground directly, but pass through the collector (or drain, in a FET) first and you'd apply voltage to the base (or gate) to switch it on, and bring the base or gate to GND to switch it off.
PNP/P-channel is a "High-side switch", and the Emitter or Source has to be reliably connected to the + voltage supply, with the base or gate acting to switch the transistor on by getting pulled to GND. It switches it off by making the base or gate the same voltage as the emitter or source, which is the same as the + voltage supply. Consequently it could be thought of as "inverting" the logic; if you're using an Arduino pin attached to the gate of a P-channel MOSFET, source connected to the arduino's +5V power supply, drain connected to some fancy circuit of yours, switching the arduino's pin HIGH would turn it off (making the gate & source the same voltage, so the Vgs is 0V), turning it LOW would turn it on.
A reliable circuit that drives a BJT or FET typically involves resistors either between the Arduino's pin and the base (for a bjt) possibly with a pullup or pulldown resistor to "bias" the transistor's state when the arduino is shut off or hasn't switched its pin to output mode yet. FETs usually have a pullup or pulldown resistor to implement a bias in the transistor's state. Doesn't need to be a low value, something on the order of 10k-50k ohms, depends on how fast you need the transistor to switch.
I left out a ton of stuff and there's way more to learn, so definitely buy one of the available books and study up. There's lots of use for transistors with amplification, adjusting voltage levels for analog signals/RF/etc where it uses the transistor in a state below the "saturation" point and implements fancy voltage dividers/etc to hold a signal somewhere in the "linear" region of operation.
But as simple on/off switches, they are very effective (and fast) if you buy the right one that can handle the voltage and current requirements for the circuit you're switching... Be very attentive when using PNP/P-channel transistors though, that you are not exposing the Arduino to the base (or gate) when the voltage at the emitter (or source) is too high for the arduino to handle (say >5.5V) as you could blow the processor. Study up well before designing a circuit around one of these especially if it uses any voltages greater than 5.5V.