Hacker News new | ask | show | jobs
by zohebv 5057 days ago
I have never agreed more with a HN comment than this time.

This has to be the worst post by Yegge in terms of the negative impact it can have on software engineers and engineering.

He took a technical topic and labelled his belief system as "liberal" and the others as conservative. When some one proposes a technical approach he doesn't like, he can simply call him a "conservative-not that there is anything wrong with that".

Yegge is an average programmer at best. He wasn't able to maintain a simple 2D game and very easily blamed Java for it. It was a clear case of PEBKAC. It is absurd and unsurprising at the same time, that the simple act of blogging can some how elevate a programmer to expert status.

Yegge clearly has no idea what he is talking about. I am currently working with Scala which is apparently Hardcore conservative. Look at his characteristics of liberal languages.

1. Eval. - scala has a REPL, so u can do an eval if you wish.

2. Metaprogramming - scala macros

3. Dynamic scoping - No

4. all-errors-are-warnings - Meaningless bullet point, all languages encounter statements that it cannot meaningfully interpret. This statement just shows you Yegge's massive PL understanding deficit.

5. Reflection and dynamic invocation. RTTI - Scala has these.

6. The C preprocessor - Nope

7. Lisp macros - scala macros.

8. Domain-specific languages (for the most part). Optional parameters. Extensible syntax. Downcasting. Auto-casting. reinterpret_cast. Automatic stringification. Automatic type conversions across dissimilar types. - all yes for scala. Infact, you can provide your own casts for any 2 types and import/export casts as you wish.

9. Nil/null as an overloaded semantic value (empty list, empty string, value-not-present) - Yes and No, Option[T] is generic. If you want to know if any container(including strings) is empty, you say container.isEmpty(). But not container == null.

10. Debuggers. Yes Scala has debuggers. At this point one has to ask - what is this guy smoking. If your language has a debugger it is a liberal language? WTF??

11. Bit fields - No

12. Implicit conversion operators (e.g. Scala's implicits). Sixty-pass compilers. Whole-namespace imports. Thread-local variables. Value dispatch. Arity-based function overloading. Mixed-type collections. Yes, yes, yes for scala.

13. API compatibility modes. Advice and AOP. Convention in preference to explicit configuration. These are fairly vague properties and you could say yes/no.

I recently converted a "liberal" perl project into "conservative" scala and the code size fell by an order of magnitude, but apparently I live in alternate universe where "conservative" languages are somehow more succinct.

This guy is just suffering from verbal diarrhoea and he gets way too much attention for his uninformed commentary. I haven't seen a more bogus classification in ages, it is quite amazing how he politicized a purely technical topic.

It is fairly clear what his issue is

1. He likes dynamically typed languages. You have to type less and lower error checking is tolerated by the community.

2. He is uncomfortable with more advanced PL concepts, cannot decipher compiler error messages when working languages like Haskell. He would much rather let the program run and crash with a run time stack, where he can jump in and examine the value or operation that caused the failure. The Haskell compiler error message makes him feel stupid and he does not like it. This also probably explains why he wants to dump clojure into conservative territory, too much of STM and Parallel Haskellish stuff going on.

3. He is not a big fan of java/C++.

There is nothing peculiar about the set of biases he has, in fact it is fairly typical. People who favor Java/C++ simply need high performance code that would need to be maintained/refactored for a long time. It is not a religious choice but a pragmatic decision in the face of constraints. I have never seen "conservatives" write build scripts in C++ or "liberals" write OS kernels in Ruby.

All the attributes he has described simply cannot produce the ordering of languages that he has conjured. In the only barely technical portion of the post he has contradicted himself soundly, but it doesn't matter because no one is paying any attention to that.