Actually I would not make the "difference" calling the three-letter codes "normal".
Both the 3- and 4-letter ones are normal.
The 3-ones are IATA, thus better known by travel agencies and on the "ground side" of the airports.
The 4-ones are ICAO, thus, better known by navigators (pilots) and on the "air-side" of the airports.
For the ICAO codes, they are grouped by areas, and in each area, by countries.
For example, all northenr european airports have "E", followed by B in Belgium, by E in Estonia, by G in UK, etc.
So, take for example London. While for IATA your agent can look up LON (the code for the city as a destination), the computer response will turn out LGW (Gatwick), LHR (Heatrhow), LTN (Lutton), STD (Stansted) or City Center (LCY)
If you choose to fly to Heathrow, your luggage is going to be tagged LHR, but your captain is going to fly to EGLL, while if you choose Gatwick, your luggage will be tagged LGW but the flight plan will be destination EGKK.
Following, alll southern european ones have "L", followed by F in France, by E in Spain, by G in Greece.
Australia has a "Y" for herself alone. For not makin' it too long, let's finish with the South American S, followed by A in Argentina, B for Brazil, G for paraguay etc.
Whenever you come to Barcelona, Europe, your ticket will write BCN, although the crew will ask meteorological infomation on LEBL, while if the Barcelona you fly to is in Venezuela you'll see about BLA but the flight plan about SVBC.
London (as a destination city): LON
London Gatwick: LGW-EGKK
London Stansted: STD-EGSS
London Heathrow: LHR-EGLL
London City Center: LCY-EGCY
City of Paris: PAR
Paris Charles de Gaulle: CDG-LFPG
Paris Orly: ORY-LFPO
City of São Paulo: SAO
São Pauol Congonhas: CGH-SBSP
São Paulo Guarulhos: GRU-SBGR
City of Rio de Janeiro: RIO
Rio de Janeiro Galeão: GIG-SBGL
Rio de janeiro Santos Dumond: SDU-SBRJ
Athens: ATH-LGAT (when the old Hellinikon Airport was operative)
LGAV (The new Eleftherios Venizelos at Spata)
Palma de Mallorca: PMI-LESJ
Eivissa (in spanish Ibiza): IBZ-LEIB
Jerez de la Frontera (in English "Sherry"): XRY-LEJR
It happens, though, that Canadian and continental USA airports are mostly coincident, adding a "C" for Canada and a "K" for USA, this way:
New York: NYC
New York Jonh Fitzgerald Kennedy: JFK-KJFK
New York Newark: EWR-KEWR
New York La Guardia: LGA-KLGA
Los Angeles: LAX-KLAX
etc., etc., etc.
Basically the main areas are:
A SW Pacific (+G Solomon; +N Nauru; etc.)
B Arctic Circle (+G Greenland; +I Iceland)
D West Africa (+A Algeria, +B Benin; +N Nigeria, etc)
E Northern Europe (+B Belgium, +H Netherlands, +K Denmark, etc.)
F, G and H Africa (as a note, Canary Islands are not LExx, but GCxx)
L Southern Europe (+E Spain, +C Cyrpus, +G Greece, +J Slovenia, etc)
M Central America (+D Dominican Republic, +K Jamaica, +Y Bahamas, etc)
N Southern Pacific (+C Cook Islands, +F Tonga, +F Fiji, etc)
O Middle East (+A Afghanistan, +J Jordan, etc)
P Northern Pacific (+H Hawaii, +A Alaska, etc)
R Pacific Asia (+C China, +J, +O Japan, +K Korea, etc)
S South America (+A Argentina, +B Brazil, +Chile, +K Colombia, etc)
T Caribbean (+N Netherlands Antilles, +R Montserrat, +J Puerto Rico, etc)
U Russian Federation including some former Sovietic republics
(+A Kazakhstan+Kyrzighistan; +B Azerbaitjan, +G Armenia+Georgia, +K Ukraine)
(UE, UH, UI, UL, UM, UN, UO, UR, US Russia)
V Continental Asia (including +H Hong Kong, +A; +E, +I, +O India, +D Cambodia)
W South Eastern Asia (+A, +I, +R Indonesia, +B Brunei, etc)
Hope I helped.