1. something which counts programs, for example "find . -executable | wc -l"
2. misnomer for the instruction pointer, which is a CPU register that points at instructions
The register points at instructions. It does not count programs.
The register is correctly named in some hardware manuals, including those for PowerPC and x86.
Within an early context and machine code vs hw level, not totally unreasonable as a legacy term. "Counter" was often used as name, even when starting at 0.
Wrong before internet or just pioneers? And what wrongs do we now do, or not?
Actual counting on real hardware does happen. For example, x86 has the CX/ECX/RCX register for string operations. That has a far better justification for being called a program counter, but still that would be awful terminology. Another example is the CTR register of PowerPC, commonly used with an instruction that decrements it and then conditionally branches to do a loop. Even a cycle counter has better justification for being called a program counter.
The way it used to go. Call something counter. Increment it each loop. Use goto for looping. Over time, add more gotos and change "counter" value. It tends to creep in, and clear names are important.
I've worked with a lot of software engineers who would do a lot better for themselves if they understood the basics of how a computer works (eg: what's a program counter.) There is definitely a rift of "engineers" whose discipline amounts to gut feeling and whatever code works at the time. This is ok for ephemeral software but isn't for complex projects.
Getting an education has value. Getting a good education is valuable. Getting the right education pays dividends.
Finally, learning how to think critically and solve problems is where it's at. (IMHO)