Question: I am a little confused about the difference between build and publish in the visual studio. 

What is the difference between building a program and publishing a program?

Answer: 
Build compiles the source code into a (hopefully) runnable application. Publish takes the results of the build, along with any needed third-party libraries and puts it somewhere for other people to run it. It may also make some changes to make the app runnable in the destination, depending on the framework and type of app (e.g. a console app may just copy files, while a web app may set up the configs based on the destination).

Your confusion may come from the fact that Publish will also build the application if it thinks it needs to (e.g. if there are source code changes).
Building and Publishing a project in VS are totally different things.

The *build* process involves *compiling* your project's code and storing the binary result into DLLs. You can find them under \bin\debug\ folder or \bin\release\ folder under your project's root. That depends if you're building in Debug or Release mode. These DLLs store the application's binary data and can be referenced into other projects.

The *publishing* process always comes after the build process. Let's suppose that you have a ASP.NET application. If you want to use your project, building your web application into DLLs will not be sufficient, since you need to host your web application into a web server which will be IIS or ASP.NET development server. It involves hosting your application to be accessed by client entities. Basically, you can publish web applications and web services.