Voted 'Other', because I think that "any of the above" could be good in a game of this length. Mostly, it depends on what Dynamics you want the player to enjoy while playing your game, as well as how the skills might support other Mechanics in your game.
For example: in one game, a Dynamic that I really wanted to achieve was Replayability (being able to experience the game in a new way each time you play). For this reason, I needed a system that would allow, and encourage, the player to have a different set of skills on each play through my game.
In this same game, a second Dynamic I wanted to achieve was Improvisation (presenting different, unpredictable situations, and asking the player to come up with strategies to handle each one). One Mechanic that I used to support this Dynamic was giving the player random equipment (within a strict range of power levels and types) after each boss battle. In order to play well with the random loot mechanic, and support the player's ability to Improvise, I needed a system that would give the player a choice of which skills they learn (as some skills might be better with the stats and effects provided by one piece of equipment, while some skills might be better with a different equip).
So, based on these needs, I designed a system where, after you find out what loot you earned for defeating a boss, you can choose between one of three different skills to learn for each character. The other two skills are gone "forever" (until you start a new game), and you'll be given a choice of three new skills for each character after the next boss. The player can experiment with different sets of skills on each playthrough, and will afford themselves a slight advantage if they pick skills that happen to combo well with the randomized loot that they've earned so far.
This system works great for this one game, where the Dynamics that are important are Replayability and Improvisation. Where other dynamics are important, different systems for learning skills should be utilized or invented. In a game where Physical Exploration is an important dynamic, you might offer new skills in landmarks or hidden areas on maps. In a game where Character Expression is important, job points could be an appropriate method for learning skills (as part of a larger flexible class system). In a game where Strategy, Planning, and Mechanical Exploration are important, Skill Shops where you can eventually buy all of the skills might be appropriate. In a game where tight combat balance contributes to the experience more than these other dynamics, the skills might simply be given to the player at fixed points during the game.
There's no one system that will work for every game (or even every game of a certain length). It's all about what Dynamics of play you want to achieve. That's the single ironclad rule for designing good systems.
