Friday, October 4, 2013

New York Times article on Olivet University and David Jang

Lately, Olivet University (the university associated with David Jang that managed to get an undue amount of my attention last year), has been expanding. IBTimes, their sister media organization, recently purchased the remains of Newsweek, and Olivet itself recently purchased the campus of a psychiatric hospital in the Town of Dover, New York.

Somehow, this managed to get the attention of the New York Times. For the most part, Joseph Berger’s article doesn’t break any ground, as it mostly just covers the existing controversy around David Jang. Tracy Davis’ denials may be new – I don’t recall any on-the-record quotes from her about Jang before – but in light of the extensive evidence that (at least before 2006) Jang’s lieutenants taught, and many new converts believed, that Jang was a messianic figure, I’ll confess that I have trouble taking her denials very seriously.

None of that would warrant me commenting on the New York Times article, were it not for the fact that the author managed to get one crucial detail quite wrong. Berger writes:

Although the school says it is part of the Presbyterian tradition, it is not affiliated with the mainstream denomination, the Presbyterian Church U.S.A., which has 1.8 million members and represents over 10,000 congregations.

Instead, Olivet is affiliated with the Evangelical Assembly of Presbyterian Churches of America, a smaller, more conservative group that broke off from the mainstream Presbyterians in the mid-1980s because of differences over issues like women’s ordination. Olivet leaders said the denomination had 70 congregations, though some have only a small number of members.

Berger is (perhaps understandably) confused here. The history that he ascribes to Jang’s denomination, the Evangelical Assembly of Presbyterian Churches of America, of breaking with the PC(USA) over the ordination of women, is in fact the history of the Evangelical Presbyterian Church. Jang’s denomination was founded by Jang, back in 1992, and was never in any way affiliated with any other mainstream US Presbyterian denomination. At no time did they ever split away from the PC(USA), since they never had anything to do with them in the first place. That’s all a part of the history of the EPC, a real and honorable denomination whose Christian credentials are unquestioned, not the EAPCA, whose reality, honor and credentials are, well, somewhat less unquestioned.

That’s all. I just wanted to make sure that folks researching Jang don’t get confused by that bit of misinformation from the Grey Lady.

P. S. On a side note, I have no more issue with Olivet purchasing the campus of a defunct psychiatric hospital than I would have had with them purchasing the campus of Bethany University, my alma mater. This is a free country; they are quite welcome to do as they please. My issue with their purchase of Bethany was always their misleading (if not downright dishonest) assumption of Bethany’s identity, not with their attempt to purchase the physical grounds of the school. If they wish to purchase the grounds of a mental hospital instead of a Christian university, and if the good citizens of the area are well informed and wish to sell it to them, Olivet has my blessings; and I will do my best to refrain from any unwarranted comments on the appropriateness of the change in venue.

[Update 10/5/2013] – It looks as if the Times has update the article. The paragraphs in question now read:

Although the school says it is part of the Presbyterian tradition, it is not affiliated with the mainstream denomination, the Presbyterian Church U.S.A., which has 1.8 million members and represents over 10,000 congregations.

Instead, Olivet is affiliated with the Evangelical Assembly of Presbyterian Churches of America, a smaller, more conservative group. Olivet leaders said the denomination had 70 congregations, though some have only a small number of members.

Although I’m still not entirely sure how applicable the word “conservative” is to the EAPC (or the word “Presbyterian” for that matter), at least the confusion with the EPC has been removed.

Sunday, September 29, 2013

Five myths about Jesus

Reza Aslan, the controversial New Testament scholar, err, Professor of Creative Writing, has been doing some fairly effective promotion of his recent book Zealot: The Life and Times of Jesus of Nazareth. One of the more effective promotion pieces has been an op-ed piece in the Washington Post, whose title and content seems purposely designed to increase the buzz: “Five Myths about Jesus”. With a title like that, I pretty much knew what to expect before I read it, and I wasn’t disappointed. I made a snarky post about it on Facebook, and one of my atheist/agnostic friends challenged me to write up a more extended interaction with his claims. This blog post is the result.

I ought to start by acknowledging that Aslan isn’t entirely off-base. As others have pointed out, Aslan isn’t really a New Testament scholar (nor am I), but there’s no doubt that he’s a better historian than certain other popularizers, like Dan Brown – meaning that most of what he has to say, even the most controversial bits, has in fact been defended by reputable scholars. (That’s not really the case with Brown, in case you were wondering; and trust me, you can find the strangest opinions defended by scholars whose reputation has somehow survived.) Beyond that, at least some of what he has to say in this brief op-ed is self-evidently true. But some of it was strange enough that it really called for rebuttal.

This is my take on his five points, ordered from self-evident to highly unlikely.

“Jesus had more than 12 disciples”

Umm, yeah. That’s pretty clear to any reader of the New Testament and is completely uncontroversial. I’m pretty sure I remember being taught this in my second grade Sunday School class. The Greek word for disciple is simply mathetes (μαθητης), which means “learner” or “student”. And lots of folks followed Jesus to learn from him, many in an official or semi-official capacity. Aslan correctly notes that “disciple” is normally distinguished from the term “apostle” (αποστολος), which means something more like “official ambassador”, and denotes a somewhat closer relationship. On a side note, it’s worth pointing out that the term seems to be used somewhat differently in different parts of the New Testament. In the Gospels and in Acts, “apostle” seems to refer strictly to a member of The Twelve. Paul, however, uses the term more broadly, apparently referring to anyone who had received a personal commission from Jesus, including himself in that category, of course, but also folks you’ve never heard of, like Andronicus and Junia.

“Jesus was not an only child”

My Catholic friends might disagree with me here, but this does in fact seem to be the natural reading of the New Testament, which repeatedly refers to Jesus’ siblings. That said, I can’t quite dismiss out of hand the Catholic belief that Mary had no other children. It’s at least possible that James, Joseph, Simon and Judas were step-brothers or cousins – the semantic range of the Greek word adelphos (αδελφος) is not identical with that of the English word “brother”.  And as more than one Catholic scholar has pointed out, it would be a little odd to have the doctrine of the perpetual virginity of Mary become so quickly prominent (it was apparently taught by the middle of the 2nd century, and widely accepted by the fourth) if it was generally acknowledged in the first century that Jesus did in fact have biological brothers. Still, I remain suspicious, and I think the most natural reading of the evidence is that the marriage of Mary and Joseph was fruitful in every expected way.

“Jesus was not born in Bethlehem”

Just looking at it from a purely historical perspective, this one is a little tougher to decide, though I still end up on the other side of the issue from Aslan. He is entirely correct that the early church widely connected Jesus with Nazareth and to a much lesser degree with Bethlehem; he’s also correct that the earliest writers (such as Paul and Mark) don’t in fact connect Jesus with Bethlehem, while the two that do are somewhat later; and he’s equally correct that Micah 5:2 certainly played a role in the desire of Luke and Matthew to tell the story of Jesus’ birth in Bethlehem. (On a side note, I also think that the most likely explanation of the census described in Luke 2 is that Luke got mixed up. Jesus was born some 10 years earlier than the only census in Palestine around that time we know about. It’s not impossible that Luke is describing an otherwise unknown global census, using methods otherwise unknown, but I think the simpler explanation is that this is neither the first nor the last time an ancient historian got his dates wrong.) That said, there’s absolutely no extant tradition that places Jesus’ birth in Nazareth, and there are two (notoriously independent) accounts which place his birth in Bethlehem. It’s certainly plausible that Luke and Matthew independently made up (or relied upon fictional) stories which inaccurately placed Jesus’ birth in Bethlehem. But there are a lot more moving parts and hypotheses in an answer like that, and the simplest explanation of the available evidence seems to me that Jesus was in fact born in the City of David.

“Jesus was not buried in a tomb”

Aslan’s position on this seems highly doubtful to me. It may very well be true, as he claims, that the Romans usually left their crucified victims to rot on their crosses (though I’m not sure of the evidence for this). But it turns out that we actually don’t know know very much about Roman crucifixion practices, largely because the educated and enlightened historians who have told us most about Rome seemed to find the very mention of crucifixion distasteful, and have thus largely left it out of their accounts. But from the few mentions we have, and from the limited archaeological evidence, it’s clear that there were huge variations in how Romans dealt with crucified victims, and the one skeleton of a crucified Jew that archaeologists have found was indeed given a normal burial.

Beyond that, the Gospels indicate (what is already a historical probability) that in ordering the Roman soldiers to break the legs of the condemned, Pilate was doing his best to avoid giving undue offense to the Jews, who believed that allowing someone to remain hanging on a tree on a Sabbath and a holy day was offensive to God. This lends credibility to the idea that Pilate would not have insisted on Jesus’ hanging  on the cross until he rotted.

In addition, the story of the empty tomb goes back to the very earliest layers of oral and literary tradition, being found in all four gospel accounts, most notably Mark. There are, of course, enough variations in these accounts that it’s quite difficult to trace back exactly what happened that Sunday morning. (For instance, who precisely were the women that found the tomb empty?) Nevertheless, it’s difficult to claim that the empty tomb story is fictional through-and-through, as it’s not at all the sort of story that the early church would have invented. Among other things, the various gospel accounts, for all their differences, are each premised on the acknowledgement that nobody actually saw the Resurrection happen; and second, each of them admits that women – who generally weren’t allowed to give testimony in court – were the ones who found the empty tomb. This is not the story you’d make up out of whole cloth, but it’s exactly the sort of story you’d tell if you had no alternative, because everybody knew that’s what had happened.

“Jesus never had a trial before Pontius Pilate”

There’s no doubt that this is the weakest of Aslan’s five points.  In fact, I’ll confess that I neither understand his reasoning on this one, nor am I aware of any evidence for his purely historical claims, and consequently I hardly know where to begin. But I’ll start with the obvious. We have four largely independent accounts of a trial of Jesus before Pilate from the 1st century (five if you count 1 Timothy 6:13, eight if you add in the various passages from Acts, and even more if you want to move past the existing gospels and back to Q, L and M). Even Josephus’ description of Jesus’ death implies a significant degree of personal attention by Pilate to this matter. In fact, we have precisely zero literary or epigraphical evidence for any other scenario. This agreement of numerous independent sources raises the bar quite high for any claim that Jesus did not in fact have a trial before Pilate.

But even if the bar were much lower, Aslan’s arguments would fail to make it over the top.  Aslan’s primary argument is that:

In his 10 years as governor of Jerusalem, Pilate eagerly, and without trial, sent thousands to the cross, and the Jews lodged a complaint against him with the Roman emperor. Jews generally did not receive Roman trials, let alone Jews accused of rebellion. So the notion that Pilate would spend a moment of his time pondering the fate of yet another Jewish rabble-rouser, let alone grant him a personal audience, beggars the imagination.

But I simply don’t know what the evidence is for Aslan’s claim that Pilate “eagerly, and without trial, sent thousands to the cross”. Certainly both Josephus and Philo record that Pilate could be angry, vindictive and unjust; both record Pilate undertaking actions that virtually brought the Jews to revolt; and Josephus specifically records Pilate ordering two different massacres (and staying his hand at another). However, neither author was writing without biases of their own; and beyond that, so far as I can tell, nowhere in any ancient author does it say that Pilate had thousands of Jews put to death, let alone crucified or put to death without a trial. I’m willing to be corrected on this, but my tentative conclusion is that Aslan is simply making shit up. (If it turns out that I’m wrong on this, let me know, and I’ll update this paragraph – but the only real sources for Pilate’s career that we have are Philo and Josephus, and I’ve checked both. If Aslan is using their accounts as his basis for this paragraph, let’s just say that he’s making claims against Pilate that go significantly beyond what Pilate’s two harshest Jewish critics have to say.)

But even if Aslan has evidence for this that I’m not aware of – let’s say that there’s some other account of Pilate executing thousands of Jews after an insurrection that didn’t make it into the Antiquities – that’s entirely beside the point for how Pilate would act when confronted with one particular teacher whom the Jewish leadership desperately wanted dead. Remember, these are precisely the Jewish authorities with whom Pilate has had extremely frosty relations. I can’t imagine Pilate – during a crowded and emotional Passover in Jerusalem, of all things – simply allowing a popular Jewish rabbi to be put to death without asking that rabbi a few pointed questions. What if he could hold him hostage, and use his release as a stick (or his execution as a carrot) in some tricky upcoming negotiations with the high priest? What if this rabbi had brought a few thousand armed followers down from Galilee for the festival? Putting the wrong Jew to death at the wrong time, as Pilate discovered quite early in his career, could have sparked an all-out conflagration. Pilate would have to have been radically more shortsighted and foolish than the scheming politician painted by either the Gospels, Josephus or Philo not to simply want to know what the hell was going on in his province.

Other than my friend on Facebook, I can’t imagine anyone who would actually be interested in my opinion on Reza Aslan’s opinions about the historicity of the Gospel accounts of Jesus' life and death – but there you have it.

Tuesday, June 18, 2013

Thoughts on Ruby vs C#

I’m about to start in on a new project, and I need to make a decision about what language to get started in. I’ve spent nearly all my career coding on the Microsoft stack, which lately has meant C# and ASP.NET MVC (and several fruitless years on Silverlight, sigh). However, I’ve been spending some time playing with Ruby on Rails lately, to see if I should make the switch. These are my initial thoughts after some investigation – but although I feel reasonably confident about my assessment of the C# side of things, I’m less confident in my ability to assess the strengths and weaknesses of Ruby. So I would be very interested in hearing other folks’ perspectives.

To start with, there are some areas where the RoR ecosystem is hands-down better than anything Microsoft has put together.

  1. Getting started. You can get started faster in Rails, largely due to the Rails scaffolding infrastructure.  Nothing MS has really compares to the elegance of the various “rails generate” commands, especially when you consider how they can be extended, i.e., through the Rails Composer. It’s much easier to add flexible functionality to the Rails scaffolding infrastructure than it is to add the equivalent functionality to Visual Studio, and so not surprisingly, more folks have done it.
  2. Extensibility. Third-party libraries integrate much deeper into Rails than into ASP.NET MVC. The structure of Ruby, its dynamic and open type system, and the dominance of the “convention over configuration” mindset, make a number of tasks much easier, such as adding an authentication or authorization system to an existing website. It's possible to write C# code in such a way that you can make it highly modular, and it's more common to do that these days than it used to be. (The newish ASP.NET MVC system is modular in precisely that way, so that at runtime or for testing purposes, you can replace many of the individual modules.) But you have to work to make it that way: not too hard, but it is work, and there's always the chance the author of the third-party library will forget to make some critical piece modular. And because you have to work with named interfaces, even a universal convention doesn’t give you the same results in C# that it does in Ruby.  For instance, in ActiveRecord, the convention is that every model has an “Id” property, so you can assume that you can check the Id property of any model. You could only do this in C# if every model from every library inherited from a System.Web.IModel interface – which of course isn’t going to happen. This means that it’s a great deal more work to interact with other libraries: you can’t  just assume that there’s going to be a User model with an Id property that you can pull up and talk to. Whereas you can do this sort of thing almost free with Ruby. It's sort of like what you would get if every class in every library in C# were partial and injectable. 

    Another way to put it is to say that Ruby (and other dynamic languages) are willing to be wrong. This reminds me of the genius of Tim Berners-Lee when he first created HTML. Other folks had taken runs at it before he did, but they were all hampered by the fact that they had a compilation step, which would ensure that you never linked to a page that didn’t exist. TBL made the wild assumption that you didn’t need to do that: it was OK to be wrong, to link to a page that didn’t exist, and you’d recover from it. This removed the need for a controlling central authority, and thus the web was born. You have the same kind of wild and woolly but incredibly valuable ecosystem growing up around Ruby.
  3. Gems. Even though C# is still a more popular language than Ruby by most measures, the Ruby community has succeeded in providing an enormous and high quality suite of tools and libraries: larger and generally higher quality than what the C# community has so far succeeded in providing. This may be changing: MS is releasing almost all their new frameworks as open source, NuGet means that it's becoming much easier to discover and keep up with open source libraries, and GitHub has produced a system for managing contributions that even C# guys want to use. But it’s going to take a while for C# coders (and their managers) to come around to the idea that they should be spending some portion of each day contributing to public projects up on GitHub.
  4. Unit tests. I also really appreciate the ease with which it's possible to write unit tests in Ruby. The flow you can get into with Guard watching which files have changed, running the appropriate tests, and then telling you which things you've just broken, is really cool. And the DSLs for writing mocks in Ruby are much more intuitive and simpler than writing mocks in C#.

There are also a number of ways where the MS ecosystem is pretty closely matched to Ruby. NuGet works somewhat differently from bundler: bundler is more flexible, while NuGet is more foolproof. But having used both, they both seem to get the job done. The same is true of the general MVC architecture, or the ORM's they each use, or the routing specifications, or the asset pipelines, or the rollout and hosting systems. They're all fairly comparable. I'd guess that AWS and Heroku are more mature than Azure and AppHarbor, but without doing a detailed comparison, it's hard to say just how much.

But there are several relevant areas where C# is definitely superior to Ruby.

  1. Performance. Even die-hard Ruby aficionados admit this. Any individual routine will run dramatically faster in C# than in Ruby, but beyond that, C# ongoing improvements around the async/await keywords means that it's possible to write highly scalable asynchronous code almost for free. Even if the Ruby community manages to implement some sort of JIT to address the single-threaded performance issues, it seems unlikely that they'll be able to address the overall scalability issues anytime in the near future. There are many websites where this simply isn’t a consideration; but there are plenty of others where it’s still a pretty big one.
  2. Static typing. I totally get the advantages of dynamic typing and the value it can contribute to an ecosystem. But even so, for writing my own code, I remain a huge fan of static typing.  Like unit tests, it's a great way of catching large classes of errors as early in the development process as possible. (Another way of looking at it is that it's an extension of the DRY principle: you only need to tell the system once how a class needs to behave, rather than repeating those expectations in every class or method that depends on that class.) I wish the C# static typing system was more flexible than it is: it should work more like TypeScript does, which looks at the actual signature of a class rather than at the interfaces it says it implements. That would enable a whole lot of “convention over configuration” in the C# world. But even as it is, I’d argue that C# can catch the same amount of errors with 50% fewer unit tests than Ruby, as the type system catches those errors for you. Since probably half your time in Ruby is spent writing unit tests, that's a significant time savings. This especially becomes noticeable when you've got large code bases that you need to refactor - and that leads into #3.
  3. Refactoring. It's a little counter-intuitive, but in my experience, statically typed codebases are much easier to change than dynamic codebases. Because the tools understand the structure of the program, those tools can do much of the work for you. To take the simplest refactoring example, if you want to change the name of a field or property, VS will not just guarantee that every instance of “User.Id” gets changed to “User.UserId”, but even more importantly, will also guarantee that no instance of “Organization.Id” gets changed to “UserId”. When you've got hundreds of references throughout your codebase to some field named “Id”, that's a massive time savings. And even if you need to make a change that can't be made automatically (like splitting a class in two), the IDE will tell you the precise lines of code that just broke. There are ways of working around this sort of thing in Ruby, but it involves adding additional levels of indirection around almost everything, to the point where you end up losing the much-touted advantage of dynamic languages of being able to write code fast. In Ruby, the only net you get is the one you write yourself, so you have to spend a lot of time patching holes in that net.
  4. Visual Studio. Visual Studio is the best IDE around, without question, and that's mostly because it takes full advantage of C#'s static typing. To take just one example, intellisense and code completion is a major help when dealing with large codebases. VS completely understands the structure of your code: it can tell you as you're typing what the possible methods are that you could call, what their parameters are, and use embedded metadata to provide plain-language help, without you ever taking your eyes off the cursor. That's a massive time savings, and Ruby's dynamic nature means that it's simply impossible to do that in the same way, no matter how clever or mature the development environment.

In brief, I get the impression that if you knew both languages equally well, you should choose Ruby if you think the biggest technology challenge is just getting off the ground. I think that someone who knew Ruby and who knew C# equally well could get further along in the first year if they were building the website in Ruby. I also think that after the first year, or as the team grows, you'd probably be able to move faster in C# - and you'd certainly have fewer scalability and performance issues.

The additional data point that I need to consider is that I don't know both equally well. Come September, I suspect I’d have more of a website if it's written in C# than in Ruby, just because I think in C#, I know the tools cold, and it'll take me a while to become that fluent in Ruby. (It's taken me years to become this fluent in C#, so I have my doubts about picking up Ruby as quickly as some folks have said.) There will probably be some period of time after those first three months where I’d have more of a website in Ruby, just because of the additional flexibility and more mature gem ecosystem. But I also think that after a year or so, I’d really start to miss the static typing, refactoring capabilities, and better performance of C#. C# is just inherently better suited to large, complex codebases with significant scalability requirements. (Ruby would simply not have worked for Zango, for instance. I can say that with complete confidence.)

So all of that said, this is a graph of my theory:

Inline image 1

Anybody have additional thoughts, or wish to correct any of my assumptions or conclusions?