1. Clientside is anything that runs on the client (The players machine).
Serverside is anything that runs on a sever somewhere, either on a LAN or on the internet, hosted either by the developer/publisher or by a third party.
2. Any compiler for any programming language is capable of doing both.
3. Singleplayer games are entierly clientside(or should be, there are exceptions), multiplayer games usually have both clientside and serverside components (peer to peer games are a bit of a special case).
4. Both are made by you personally programming it, There are tools and libraries that may simplify or solve specific problems for you. (Without knowing what those specific problems are it is virtually impossible to make any recommendation though)