How do I move the camera to look from one place to another smoothly?

I am trying to make a recoil effect when the player shoots a gun but I want the transition or “shake” to look really smooth instead of a sudden jump into another direction.

The best example I could think of this was the recoil from Bullet Hell (Bullet Hell - Roblox)

I am a noob when it comes to cameras because I hardly ever work with them.

Use the camera function :Interpolate()
Or you could use tween service on the CFrame of the camera

But I have to make the camera “Scriptable” which means it detaches from the player?

set the camera focus and subject after setting the camera type.

Lerp the CFrame;

--Your Fire Function
cam = game.Workspace.CurrentCamera
targetCFrame = cam.CoordinateFrame * CFrame.Angles( math.rad(20), math.rad(3), math.rad(-2)) * CFrame.new(0,0.5,2)

game:GetService("RunService").RenderStepped:Connect(function(dt)
  cam.CoordinateFrame = cam.CoordinateFrame:Lerp(targetCFrame, 0.7)
end)

Obviously apply your own CFrames, but the idea of lerp is that every time the render updates, the CoordinateFrame gets closer to the targetCFrame, determines by the alpha (in this case, 0.7).