In this dissertation we test our ability to implement linear entangling operations between small numbers of photons for application in quantum communication and computation. We begin by presenting a fast and highly parallelizable numerical algorithm for simulating linear optical circuits on classical hardware. Then, we apply this algorithm to three independent topics in quantum information: First, in Chapter 2, we determine the information capacity of an optical quantum channel and show that a linear encoding is generally sufficient to achieve this capacity. In Chapter 3 we introduce a computational encoding basis wherein qubits are stored in single-photon blocks and then test our ability to apply entangling operations between blocks. Finally, in Chapter 4, we use our algorithm to make progress in the long-standing problem of designing a near-perfect optical Bell state analyzer. We find a clear trend in state distinguishability as we incorporate unentangled pairs of ancilla photons. We also prove that if a measurement outcome in which all photons are bunched into only two output modes is possible, then perfect state discrimination is impossible. We then present a set of conditions that prevent this outcome.