The intro electronics course I took in the Physics department as a sophomore had us build up circuits one layer at a time. First we started with quad NAND gates and built all of the basic gates. We had to design them, build them, and test them. Then we could use ICs of any circuit that we had already built and from that we built basic adders, muxes, decoders as well as basic latches and flip flops. Then in the next layer we could use those to build larger circuits such as counters, shift registers, and memory banks. By the time we were a few weeks into the course we were using pretty sophisticated ICs and we knew exactly how each of them could be implemented all the way back to nothing but NAND gates. I think I learned a LOT more valuable stuff from that approach than if we had been given and FPGA and shown how to write the few lines of a behavioral description for a counter in Verilog on day one.