I don't think there's a reason to be limited to 3 programming languages. Perhaps you can only be fluent in 3 languages at once, but knowing more languages is definitely not harmful. I know more than 10 languages to a degree where I have written at least one non-trivial project with them. I can't claim to be fluent in all of them at this moment, but I can quickly ramp up to a productive level in a matter of a few days.
Now if I had to pick three languages, they would probably be something along the lines of:
1. C. This language has been relevant for 40 years, and will remain relevant for at least another 40 years. Low level understanding of computer operation is paramount for a lot of advanced tasks.
2. Python/Ruby/Lua. A dynamic "scripting" language is very useful to get stuff done quickly when you need it.
3. A functional language: Haskell, ML or Lisp. Knowledge of this paradigm will make you a better programmer, regardless whether or not you get to use it in your day job.
There are languages I'd like to add to this list, namely something like Java/C# (a "managed" imperative language). And then some "brain teaser" languages to expand your horizons, Prolog is a good one for a rainy weekend and doing some simple Brainfuck programming because Brainfuck is to Turing machines what Lisp is to Lambda calculus.
But I disagree with the "3 languages" rule here, I'd recommend trying to learn a little bit of a new language every year. Next on my list is Rust.
Dijkstra was a great scholar, but often very extremist in his thinking; probably he was well aware of his extremism and even use it as a tool to over correct some issues.
For instance, he was very right about the goto abuse but the idea of removing a powerful tool from your belt just because can be abused is a bit too much. Here I suspect is happening the same, he was concerned about people learning a lot of languages but not mastering a single one, still that doesn't negate the advantages of master one language and learning more.
Now if I had to pick three languages, they would probably be something along the lines of:
1. C. This language has been relevant for 40 years, and will remain relevant for at least another 40 years. Low level understanding of computer operation is paramount for a lot of advanced tasks.
2. Python/Ruby/Lua. A dynamic "scripting" language is very useful to get stuff done quickly when you need it.
3. A functional language: Haskell, ML or Lisp. Knowledge of this paradigm will make you a better programmer, regardless whether or not you get to use it in your day job.
There are languages I'd like to add to this list, namely something like Java/C# (a "managed" imperative language). And then some "brain teaser" languages to expand your horizons, Prolog is a good one for a rainy weekend and doing some simple Brainfuck programming because Brainfuck is to Turing machines what Lisp is to Lambda calculus.
But I disagree with the "3 languages" rule here, I'd recommend trying to learn a little bit of a new language every year. Next on my list is Rust.