Quantum computing is one the most promising new trends in information processing. In this course, we will introduce from scratch the basic concepts of the quantum circuit model (qubits, gates and measures) and use them to study some of the most important quantum algorithms and protocols, including those that can be implemented with a few qubits (BB84, quantum teleportation, superdense coding...) as well as those that require multi-qubit systems (Deutsch-Jozsa, Grover, Shor..). We will also cover some of the most recent applications of quantum computing in the fields of optimization and simulation (with special emphasis on the use of quantum annealing, the quantum approximate optimization algorithm and the variational quantum eigensolver) and quantum machine learning (for instance, through the use of quantum support vector machines and quantum variational classifiers). We will also give examples of how these techniques can be used in chemistry simulations and high energy physics problems. The focus of the course will be on the practical aspects of quantum computing and on the implementation of algorithms in quantum simulators and actual quantum computers (as the ones available on the IBM Quantum Experience and D-Wave Leap). No previous knowledge of quantum physics is required and, from the mathematical point of view, only a good command of basic linear algebra is assumed. Some familiarity with the python programming language would be helpful, but is not required either.