You can host a server pretty much anywhere, it's really easy, I have 3 instances running on my server at home which my friends use. You could host one at home on any PC but you'll need to make a few changes to get it running reliably, it means a little bit of network tweaking.
1) Go to the Minecraft website, download the minecraft server exe, put it in a folder somewhere and run it, it will extract all of the files it needs in to that folder. You'll need Java installed on the server for this to run.
2) On the server go into the network options and turn off "get IP address automatically" and then manually assign it an address on your network, this stops the address changing if the computer shuts down.
3) Log in to your router, you'll need to change the network options to stop the router from handing out the server IP address automatically to another computer, you should be able to alter the DHCP range, make sure the server IP lays outside that range.
4) You then need to port forward the port Minecraft uses on your router to allow incoming internet traffic to connect, by default this is TCP port 25565, point this port at the new fixed IP address of the server.
5) The server will likely have a firewall installed windows comes with one by default or you might have a 3rd party one, you need to configure an incoming rule to allow traffic on TCP port 25565 as well.
Once the router and the firewalls are configured people should be able to connect to the server, you'll want to consider some of the server settings.
6) First of all open the file whist-list.txt in the minecraft server folder, add your sons minecraft username there and any friends he wants to be able to connect. If you let strangers connect they may just ruin your hard work,
7) Open the server.properties file in notepad and make sure the "white-list=xxxx" line is set to true, that forces the white list usage.
8) There's a few other options in that file you might want to change you'll have to look up what they mean. One setting is called level-name=xxxx, this is the name of your current level it's used as the seed to randomly generate the world map, so set any name you like.
It's VERY IMPORTANT that you run regular backups of the world once its running this will allow you to restore the world should anyone do something malicious, the server creates a sub folder with the same name as you level-name, all the world data goes here, simply make a copy of that folder somewhere else to backup the world.
It's best to write a script to constantly back it up every x minutes or x hours, if you want to do that let me know and i'll give you an example of mine you can easily modify
If the server you run from also needs to connect to the world just launch a client as normal and use the server address "localhost" or the address 127.0.0.1