Hacker News new | ask | show | jobs
by sheepmullet 3943 days ago
> but I'd say that just comes down to what language you're most comfortable with and how good of a problem solver you are.

Techniques and concepts influence your ability to reason about problems.

If you don't understand dictionaries (hashes), or trees, or macros, or reflection, or first class functions etc, then you will think about a problem very differently.

If you understand the concepts then you can usually get away with not having those features readily available in your language.

For example if your language doesn't have strong macro support you can get away with using code-gen instead.

Likewise if your language doesn't have built in dictionary support, you can get away with rolling your own, or finding a library that adds it.

Or if your language doesn't support first class functions you can often get away with patterns like the command pattern instead.

But if you don't understand the concepts then your ability to think about the problem becomes much more limited.

2 comments

But why would you want to use a language that didn't have such things? Not having lexical scope, first-class functions, and macros is a huge hinderance to me. Sure, I can work around it, but it's a terribly inefficient and unsatisfying way to work.
That's why CS matters.

Anyone with a good CS background can think abstractly in terms of algorithms and data structures, instead of focusing in language X with feature list Y.

But languages differ in how much of that they abstract away from you. If the language already does a lot of those algorithms and data structures with minimal syntax, the CS guy can think on an even higher level of abstraction.
There is not much more level abstraction than lambda calculus, logic, denotational semantics and similar though processes.

But I get your point of not having to deal with low level details.

You'd be surprised - there is an infinite hierarchy of abstractions above the primitive level you're talking about.
Algorithms and data structures are on a too low level of abstraction in order to be useful in solving real world problems. Most problem domains are not expressed in terms of algorithms and data structures, they're rather formalised as languages.