827 reputation
612
bio website pryden.net
location San Jose, CA
age 30
visits member for 3 years, 6 months
seen Apr 11 at 7:42

I started tinkering with computers at the age of 6. These days, I'm a senior software engineer at Google, working on maps and related things in the Geo group. Most recently, I've been working on the server-side code for Google Maps Engine.

Besides being fluent in English and American Sign Language, I know too many programming languages to count. Lately I've primarily been using Java, C++, JavaScript, and Python. I enjoy C#, even though nowadays I don't get many chances to use it. I'm also a big fan of Haskell and Scala, although I haven't had a chance to use either of them in a large-scale project yet.

In my spare time, I play guitar and read voraciously, including science fiction and books on computing. I'm also a volunteer minister for the deaf, teaching Bible studies in American Sign Language.

Standard disclaimer: my opinions are my own, and not necessarily those of my employer.


Aug
18
comment Java Heap Allocation Faster than C++
You may find my answer to a similar question over on SO useful/relevant.
Apr
21
comment How common is it for a team to write everything in-house?
@tp1: I categorically disagree. On the contrary, if it is possible to reuse someone else's work, it is nearly always better to not do it yourself. Reusing the research, analysis, development, and debugging efforts of another team means that you can devote more resources to delivering increased value for your project. To argue otherwise is sheer hubris.
Apr
20
comment How common is it for a team to write everything in-house?
@tp1: I work for Google and I can assure you that Google very much does use third-party libraries when they meet our needs. Many times Google has needs that are unique or at a different scale from many other software companies, so for one reason or another Google will often develop things in house. But Google also uses a large number of open-source libraries, and/or open-sources lots of internal libraries, so not everything is in-house. Most of your points no longer apply for open-source software, since by having the source you ensure that you can always debug it and fix it if necessary.
Mar
6
comment Why isn't Java used for modern web application development?
@Basic: Backwards from what? In the year and a half since I first wrote this answer, I've moved on and am currently working at Google, and I can assure you that Java is used very heavily for web application development at Google. Of course, Google's needs are very different from the needs of many other companies, but Java is a different beast entirely when you use the right libraries and frameworks -- just check out some of the things Google has open-sourced (Guava, Guice, GWT, Protocol Buffers, etc.).
Mar
6
comment Why isn't Java used for modern web application development?
@Basic: What is your point? There are lots of broken libraries and frameworks for any language. Yes, there is lots of crufty and out of date documentation -- but that's hardly unusual either. Conversely, there are some fantastic libraries, frameworks, and tools for Java. Are you seriously trying to suggest that there should be one end-to-end framework for every application ever?
Nov
20
comment Why is it called Just In Time?
@kevincline: I agree, in the Java world it isn't very interactive. But that's a problem with the Java implementation, not with the approach of JIT compiling in general. For example, Visual Studio allows you to edit C# code while it's running and it re-JITs on the fly, so it can be done.
Nov
19
comment Why is it called Just In Time?
@kevincline: It is possible to get more real-time feedback, even with Java; most Java debuggers allow you to execute small bits of code while at a breakpoint. But other languages do this much better: F# for example has an interactive REPL implemented with a JIT compiler.
Nov
7
comment Why does Java use UTF-16 for internal string representation?
+1 for linking to the "Should UTF-16 be considered harmful?" question. I recently discovered the UTF-8 Everywhere manifesto and I believe I am now pretty thoroughly convinced. For what it's worth, although Java got it wrong, I'm pretty convinced that Windows did much much worse.
Nov
7
comment Examples of when we'll use interpreted language over compiled language?
For various reasons, there is a correlation, but it isn't a requirement. This has actually been asked over on StackOverflow: Why interpreted langs are mostly ducktyped while compiled have strong typing?
Nov
6
comment Examples of when we'll use interpreted language over compiled language?
-1 because you imply that all interpreted languages are dynamically typed and all compiled languages are statically typed, which is completely untrue.
Oct
9
comment Using “Google Guava” in coding interviews
+1 for asking. As a point of interest, when I interviewed at Google I asked if I could use Guava and my interviewer was OK with it. YMMV of course.
Oct
4
comment What functionality does dynamic typing allow?
@WarrenP: You assert that "dynamic type systems reduce the amount of extra cruft I have to type in" -- but then you compare Python to C++. That isn't a fair comparison: of course C++ is more verbose than Python, but that's not because of the difference in their type systems, it's because of the difference in their grammars. If you just want to reduce the number of characters in your program source, learn J or APL: I guarantee they'll be shorter. A more fair comparison would be to compare Python to Haskell. (For the record: I love Python and prefer it over C++, but I like Haskell even more.)
Oct
4
comment What functionality does dynamic typing allow?
@CzarekTomczak: That is a feature of some dynamically-typed languages, yes. But it is possible for a statically-typed language to be modifiable at runtime. For example, Visual Studio allows you to rewrite C# code while you're at a breakpoint in the debugger, and even rewind the instruction pointer to re-run your code with new changes. As I quoted Chris Smith in my other comment: "Many programmers have used very poor statically typed languages" -- don't judge all statically typed languages by the ones you know.
Oct
4
comment What functionality does dynamic typing allow?
@Justin984: I'm glad you enjoyed the article -- it changed how I think about static vs. dynamic typing too. But my comment wasn't really directed at answering your question, just helping to frame it. If you feel the article answers your question, why not add it as an answer yourself? That way you can explain what you think the answer to your question is, and you can mark it as accepted.
Oct
3
comment What functionality does dynamic typing allow?
@grieve: No, eval() cannot be statically typed (although similar things, like expression trees, can be). I'm not sure if that's actually a compelling argument in favor of dynamic types, but it is a differentiating feature, so I've removed my downvote.
Oct
3
comment What functionality does dynamic typing allow?
@grieve: I understand why you make the distinction, but from a type-theoretical point of view, there is no difference between a function that returns one of three possible types and a function that returns a value of an algebraic data type with three data constructors. You say that you have never seen this feature in any statically typed language, but the point of abarnert's comment is that it is perfectly possible to do exactly this in almost any statically-typed functional language. So this feature, while useful, has nothing to do with whether the language is statically or dynamically typed.
Oct
3
comment What functionality does dynamic typing allow?
As Chris Smith writes in his excellent essay What to know before debating type systems: "The problem, in this case, is that most programmers have limited experience, and haven't tried a lot of languages. For context, here, six or seven doesn't count as "a lot." ... Two interesting consequences of this are: (1) Many programmers have used very poor statically typed languages. (2) Many programmers have used dynamically typed languages very poorly."
Oct
3
comment What functionality does dynamic typing allow?
@RobertHarvey: When I was writing a lot of C# code, I used LINQPad as basically a REPL for C#, which allowed me to write code in a more dynamic-ish workflow.
Sep
6
comment Getting out of my head
Related to the "rules" based approach, running static analysis tools (e.g. lint for C, JsLint for JavaScript, Findbugs for Java, FxCop for .NET) can often give useful hints, and code metrics (e.g. cyclomatic complexity, LCOM4) can show you what parts of the code may be problematic. Of course, you should always use your brain and take the advice of such tools with a grain of salt.
Aug
3
comment What backs up the claim that C++ can be faster than a JVM or CLR with JIT?
+1 -- overall, this is a good answer. However, I'm not sure the "there is no stack allocation" bullet point is entirely accurate. Java JITs often do escape analysis to allow for stack allocation where possible -- perhaps what you should say is that the Java language doesn't allow the programmer to decide when an object is stack-allocated versus heap-allocated. Additionally, if a generational garbage collector (which all modern JVMs use) is in use, "heap allocation" means a completely different thing (with completely different performance characteristics) than it does in a C++ environment.