A language takes work off your hands, gives it to a compiler, runtime, or toolchain, and charges you somewhere else.
Learning by doing only works if you actually do it.