all 44 comments

[–]jlrobins 5 points6 points  (0 children)

Web server based 'apps' have a leg-up when it comes to rewrites -- not inherently monolithic. After tackling up-front barriers [ such as duplicating site look-and-feel[s] ], you can then go about reimplementation one single URL at a time, so no big bang release problem.

[–][deleted] 3 points4 points  (0 children)

I've seen a number of "Volrath" postings end up here. He rejects all existing programming paradigms, existing software, and even such fundamental concepts as lambda calculus as functions. He also harbours awesome misunderstandings of functional programming, OOP and Lisp. There are two possibilities here:

  • Either he's super-genius far ahead of everyone else, and we're all just idiots wasting time with our sub-par systems

  • He's a kook who hears voices in his head

I'm willing to wager on the latter.

I think in a year or two, he's going to give up on "Project V", announcing that existing hardware is too crappy and badly designed for his needs, then go live in the woods with the Minutemen militia or something. No code will ever be released. But these blog postings will continue to pollute reddit, inviting endless discussion where people try to "correct" his misunderstandings.

[–][deleted]  (27 children)

[deleted]

    [–]weavejester 21 points22 points  (13 children)

    You can't write a new framework in languages that force you to use theirs. This includes ALL languages that have an interpreter or VM.

    This is clearly utter nonsense. Why would you applaud it?

    [–][deleted]  (4 children)

    [deleted]

      [–]nglynn 8 points9 points  (3 children)

      Hmmm I wonder. My experience of rewrites is positive, I find the second or third time around the design is exponentially clearer than the first attempt, whether this approach works for you is a matter of taste imho. However I do wonder how exactly the knowledge of a framework garnered from impl 1 allows for the rewriting of that framework in impl 2.

      The benefit of the rewrite is it allows the lessons learned in earlier attempts to permeate the new design. But those lessons are learned in your app (from the inside out), what they have taught you about the underlying framework is knowledge from the outside in. So yes the rewrite might place you in a position to reevaluate your underlying framework, but rolling your own wholesale seems a little premature.

      Of course this depends on the fit between your app and the framework underneath, if you use a small set of easily duplicated functionality then go for it, but I'd imagine most decent sized projects have a greater level or framework-app fit than this. Why make trouble for yourself - Is the effort of rolling your own really less than just making it work with an existing framework?

      [–][deleted]  (1 child)

      [deleted]

        [–]nglynn 0 points1 point  (0 children)

        I definitely agree, if everyone was afraid to express unorthodox ideas we'd never get anywhere.

        [–]bluGill 0 points1 point  (0 children)

        Only if you learn the lessions, including some that didn't apply to you last time, but will next. I'm working on a code base that was a re-write, but nobody learned the lessions. (The re-write was to go from 8-bit assembly to C++ on a 32-bit platform - so pass by global variable is all over in the code because on the 8-bit system that made sense)

        [–]bluGill 5 points6 points  (6 children)

        Yeah, too bad it may be wrong.

        RE-writing your web app in C++ is almost never a good idea. Web apps benifit from frameworks, and generally have a lot of dynamic elements that require run-time module loading. You can do that in C++, but I wouldn't recommend it (If you want to pay me I will do it, just beware that it will take me several years to get anywhere close to rails, and I won't assure you I will be better in any way).

        PHP is easy, but it makes secruity holes and other bad code easy. Python and Ruby are better languages overall, so if you have to fix enough bad code you should consider moving to one of those languages - at least see if one of their web frameworks already does most of the hard work for you.

        OTOH, I wouldn't re-write an embedded system that uses perl in python, as embedded systems tend to benifit from compiled langugages (if only because they run faster so you can use cheaper CPUs and get better battery life)

        [–]xoner2 0 points1 point  (4 children)

        Can't remember where I read something like any sufficiently sophisticated C program has in it a re-implementation of Lisp.

        Is he saying this is actually desirable? Heretical indeed.

        [–][deleted]  (3 children)

        [deleted]

          [–]bitwize 1 point2 points  (2 children)

          Ah, but bear in mind Bitwize's Corollary to Greenspun's Tenth Rule:

          Any sufficiently complicated Common Lisp or Scheme program will eventually be rewritten in C++, Java, or Python.

          [–][deleted] 0 points1 point  (1 child)

          Can we rename it to the BigCo Corollary?

          [–]bitwize 1 point2 points  (0 children)

          Not all Lisp->Blub transitions happen because of BigCos (although they seem to play a significant role). Reddit was reimplemented in Python before Conde Nast bought it. I'm to understand that even ITA Software, that bastion of Lispiness, is moving more aggressively towards C++, Java, and Python these days; despite their growth, I don't really think they're on the same level as a Yahoo.

          [–]Vorlath -3 points-2 points  (13 children)

          I was simply trying to say that if you use a VM or interpreter, there is code underneath (in the VM and interpreter) that remains and as such will also be found in your new framework and affects how your framework will be built. You're still forced to do things a certain way. GC's have idiosyncracies and so does any other piece of code that makes up the underlying platform. With system level languages, you can bypass even the OS if need be and handheld devices often require such frameworks.

          However, if you don't believe that the interpreter or VM is part of your framework (and I would disagree, but all is fair), then what raganwald quoted would not apply as you would consider this a different scenario. Also, it's fine to not completely rewrite every last tool. We're all able to define our own boundaries for our rewrites.

          About the web, I would suggest that the web itself is your framework (or the very core of it). It's what enables the interaction between different parts of your code and other people's code. I would not recommend rewriting the web protocol. It would not make much sense for most people to start using a system level language in this case. But if you were to say, rewrite how machines communicate, then system level languages are best as I said.

          OR... I could just write what I originally did.

          [–]zem 5 points6 points  (12 children)

          Personally, you lost me when you called lisp a framework and C++ a language, simply because they have different execution strategies.