The relationship between copyrights and licenses is often misunderstood, and knowing the difference can be helpful in understanding how the process of choosing a license may work.
The copyright holder of a piece of code, or any work that is created for that matter, is the only person or entity with the legal authority to license said work. It is also completely within the copyright holder's prerogative to license and re-license a piece of work many times over according to their needs. For example, I could give one person permission via the license to use the software but not copy it, and another person permission to do the opposite. Not a likely scenario, but still true nonetheless.
While there are no hard and fast rules governing what license generally is best for a given piece of software, here are the questions I like to ask myself about my code prior to licensing it:
What is the risk associated with a competitor taking code you release and using it to compete against you?
If the answer is high, then the conservative thing to do would be to use the GPL. The GPL would allow your competitor to take your code and compete against you, but he couldn't do so without also being required to share with you anything and everything they have done in the process. This would make it difficult therefore for either of you to compete primarily on a feature-by-feature basis.
How important is it that you get people to integrate and use your code inside their own systems?
If you are authoring a library for example, it is in everyone's best interest, even your own, for people to consolidate their efforts around a single code base. The eliminates duplicate effort and makes the library hopefully all the more useful and relevant in the developer community. The GPL is rarely a good choice for library components because of its viral nature. Link to or use a GPL library in your code, and your entire code base is supposed to also be licensed under the GPL. Most companies don't particularly care for this thereby decreasing the likelihood that a developer will begin using and contributing back to your library.
In this case, it is more advantageous to use a more copy left license, like Artistic, BSD or MIT. Or if you are already a big GPL fan, then consider using the LGPL, specifically designed for using with libraries.
Is there a convention that already exists as it relates to the language or framework you are using?
For example, jQuery plugins are almost always licensed under the MIT license, and Perl modules are almost always licensed "under the same terms as Perl itself," or in other words the Artistic license.
If a strong convention exists, follow suit. Don't be that person who bucks a popular trend just because you think you know better. Granted, you might know better, but I personally feel it is better to respects the norms and traditions of each community you participate in rather than trying to assert your own personal worldview vis-a-vis licenses.
My personal bias is for Artistic, BSD or MIT. The reason being largely has to do with maintaining my own personal rights regarding the license my code is distributed under.
Remember when I mentioned at the beginning that it is the copyright holder's exclusive legal authority to license a work? Well in the world of open source, the probability of having multiple copyright holders is high. Remember that feature you integrated from John Smith into your code? Doing so made John Smith a joint holder of your code's copyright. Which means, that if you ever wanted to relicense the code for some reason, then you would need to get John Smith's permission before doing so. The alternative is for John Smith a "contribution agreement" that would assign to you the copyright to his code.
As you can imagine, that kind of bureaucracy can be very annoying to people and might actually discourage their participation. Granted, choosing not to have all contributors assign the copyright of their GPLed contribution to you does not spell certain doom for your GPL project (look at WordPress for example, not to mention Linux itself). It really just all depends upon what your priorities are vis-a-vis protecting your code and your rights as it relates to that code.
The MIT, Artistic and BSD licenses avoid much of this bureaucracy, not by allowing you to re-designate the license without your contibutors' permission, but by preserving your right to redistribute their work along side any other code under any other license. It preserves their right to build proprietary, for profit components on top of your code base, allowing for a commercial ecosystem to evolve on your codebase - which is often very advantageous and the sign of a healthy project.
Bottom line, there is no right or wrong answer. And provided that you retain the sole copyright of the codebase, you are free to change the license whenever it suits you.