Keeping up with technology: Teaching Parallel, Distributed and High-Performance Computing