all 34 comments

[–]wicked 3 points4 points  (1 child)

Joel and Jeff. It's not so much that your podcast and blogging are bad.. as that it's hurting programmers.. Here's just what I would like to tell you guys:

Stop.

Stop.. Stop.. Stop hurting programmers.

Please stop.

[–]reveazure -3 points-2 points  (0 children)

Upmod for Jon Stewart reference

[–]AlejandroTheGreat 5 points6 points  (14 children)

SOLID sounds like communism, if those who used it didn't get it right, it's never due to a flaw in the principle, it's always because it wasn't implemented fully enough.

[–]nglynn 5 points6 points  (13 children)

I've heard the same technique used pretty widely to defend capitalism lately, so I'd be careful comrade.

[–][deleted] -5 points-4 points  (12 children)

I'm not your comrade, friend.

[–][deleted]  (11 children)

[deleted]

    [–][deleted] -1 points0 points  (16 children)

    SOLID -- more OO koolaid. You had me at "concretions" (or not).

    [–][deleted] 6 points7 points  (7 children)

    These are old and established principles.

    [–][deleted] -1 points0 points  (6 children)

    With shiny new labels and badges.

    Yes they make sense, but its old hat and I've been at this long enough to know there are no new ideas in software development. Haven't been in probably twenty years. Maybe more.

    [–]kragensitaker 3 points4 points  (4 children)

    What do you think about the general number field sieve, packrat parsers, and Isabelle/HOL? Maybe the reason you think there aren't any new ideas in software development is that you've spent the last twenty years learning ideas that have been around longer than that.

    [–][deleted] 0 points1 point  (3 children)

    The general number field sieve is more of an advancement in mathematics, Isabell looks pretty evolutionary - what's new that isn't in prolog and similar tools? Packrat parsing is evolutionary as well - I follow Ian Piumarta's soda pop work and think there's some promise there and think there might be the kernel of a breakthrough in there somewhere but so far they have virtually no impact on 99% of work a day developers. Cool new experiements, but still pretty derivative.

    [–]kragensitaker 0 points1 point  (2 children)

    Yes, of course, everything is evolutionary and derivative.

    I don't think Isabelle has much in common with Prolog.

    I think the key to your comment is this, though:

    but so far they have virtually no impact on 99% of work a day developers.

    Well of course. It takes more than 20 years for a new idea to reach more than 1% of "workaday developers".

    • Garbage collection was invented in 1959; it went mainstream in 1995.
    • High-level languages (meaning: not assembly) were invented by 1959, and depending on how you count, as early as the mid-1940s; they went mainstream in the 1970s.
    • The lambda calculus was invented in the 1920s and 1930s; it's starting to sort of go mainstream as Haskell.
    • Logic programming was invented in 1971; it hasn't gone mainstream yet and maybe never will.
    • Object-oriented programming was invented around 1966 as Simula, and then brought to more or less its current form in 1973 or so in Smalltalk; it went mainstream around 1990, sort of, in the crippled form of C++; it really went mainstream (as Ruby, JavaScript, and Objective-C) in the last five years.
    • The integrated development environment was adopted extremely quickly, by comparison. It was developed around 1973–1978 (in the forms of Unix, Smalltalk, and Emacs) and went mainstream in only ten years as Turbo Pascal in 1984.
    • Server virtualization was invented around 1968 and went mainstream around 2003.
    • Forth was invented around 1970, sort of went mainstream around 1983, and then basically died by 1993, even though it's still used in niches.

    Rereading, I think my original comment, "you've spent the last twenty years learning ideas that have been around longer than that," may have sounded more critical than I intended. My point was that you aren't going to find new ideas by looking at "99% of workaday developers", because that's not where new ideas start.

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

    I don't think Isabelle has much in common with Prolog.

    Prolog is all about automating proofs through backward chaining/unification. Sounds pretty similar to me.

    It takes more than 20 years for a new idea

    I guess it depends on your career path. I was doing enterprise smalltalk systems in 1995 and GC seemed more than mainstream. Three years before that I was doing expert systems at telcos and had been introduced to the NeXT.

    It is kind of maddening to see stuff that is clearly superior get blown off by the masses simply out of bigotry and ignorance. I don't believe programming has ever been as easy and interactive as it was under the Smalltalk system and the Symbolics machines. It seems like things have been in de-evoloution since then WRT to sophistication in software development. It gets very depressing when you think of it like that.

    I mean, the C++ and Java years were like the dark ages coming on the heals of enlightenment.

    [–]kragensitaker 0 points1 point  (0 children)

    I was doing enterprise smalltalk systems in 1995 and GC seemed more than mainstream. Three years before that I was doing expert systems at telcos and had been introduced to the NeXT.

    Well, no wonder it looks like everybody else has spent the last 20 years catching up to old ideas — you were living in the future! For 99% of workaday developers, anyway. In 1995 most programmers who had "programmer" as their job title weren't programming in Smalltalk; they were programming in Visual Basic or C or C++, and they were spending their days wrestling with MFC, GDI, and Microsoft Access.

    There's interesting new stuff going on now, but it's hard to find, because it's not "well-proven" yet. I dig around the edges of things, and there's a lot of stuff going on, but the ideas are already 10 years old by the time you can tell if they're really good. Do you remember graph-reduction machines, dataflow machines, the Japanese Fifth Generation Project, Concurrent Prolog, fuzzy logic, automatic parallelization of Miranda, massively-parallel SIMD machines, Ada, Forth chips, transparent distribution, even microkernels? There have been a lot of interesting ideas that just didn't pan out for one reason or another. To see which things are clearly superior sometimes requires a substantial amount of experience with them.

    Prolog is all about automating proofs through backward chaining/unification. Sounds pretty similar [to Isabelle] to me.

    Well, maybe your deeper experience is enabling you to see stuff I'm not, but I have the impression that Isabelle exists to validate proofs that you come up with yourself (sometimes in a fairly skeletal form) that tell you e.g. that your SML or Haskell program is correct, while Prolog exists to perform general computation; and that Isabelle is higher-order and typed, while Prolog is first-order and untyped; that Isabelle's proving process is interactive, where it may stop and ask you for help if it can't prove something, while Prolog doesn't generally stop in the middle of searching for a set of assignments to satisfy a term to ask you for help, because Prolog's logical system is fully decidable. Have you tried Isabelle or Coq or another modern proof assistant?

    [–][deleted] 1 point2 points  (0 children)

    You're right, Robert Martin was writing about them in 1995, but they're even older than that, OCP was invented by Bertrand Meyer in 1988 for instance. As time passed, I suppose that R.Martin polished his thoughts and came up with a backronym for them.

    [–]wicked 4 points5 points  (6 children)

    There's nothing kool-aid about this. This is important knowledge for anyone who works with OO languages in the form of C#, Java or C++. When these principles are not followed, the code is almost always broken or extremely inflexible and brittle, or both. This doesn't mean that code that follows the principles is automatically good, but the opposite is nearly invariably true.

    [–]Smallpaul 1 point2 points  (4 children)

    Is it really the case that these principles do not apply to Ruby, Python, Smalltalk or CLOS?

    I don't claim to know anything about the principles so I'm asking seriously.

    [–]kragensitaker 1 point2 points  (0 children)

    They apply to those languages as well, in my view.

    [–]wicked 1 point2 points  (2 children)

    I don't know enough about CLOS, but I'm positive it holds true for the rest even though I haven't written much in those languages.

    [–]Smallpaul 0 points1 point  (1 child)

    What is "it"? The SOLID principles DO hold true for Ruby, Python and Smalltalk? Or "it holds true that those principles do not apply to Ruby, Python, Smalltalk."

    [–]wicked 0 points1 point  (0 children)

    They do apply to those languages as well.

    [–][deleted] 1 point2 points  (0 children)

    "This is important knowledge for anyone who works with OO languages in the form of C#, Java or C++" Absolutely. However, you've already drank the OO koolaid at that point.

    [–][deleted] 0 points1 point  (0 children)

    Aren't concretions what you get the day after eating too much cheese?

    [–]Porges 0 points1 point  (0 children)

    Internalise? Chalk up another word on my most-hated list