InfoQ

Interview

Ted Neward on Present and Past Languages

Interview with Ted Neward by Sadek Drobi on Oct 23, 2008 01:24 AM

Community
.NET,
Ruby,
Java
Topics
Language ,
Language Design
Tags
C++ ,
C# ,
QCon ,
Scala ,
LISP ,
Haskell ,
QCon London 2008 ,
VB 6
Summary
In this interview filmed during QCon London 2008, Ted Neward, author of "Effective Enterprise Java", talks about languages, statical, dynamical, objectual or functional. He dives into Java, C#, C++, Haskell, Scala, VB, and Lisp, to name some of them, comparing the benefits and disadvantages of using one or another.

Bio
Ted Neward has been using C++ since 1991, Java since 1997, and .NET since 2000. He is a .NET instructor with PluralSight, teaches Java independently, speaks at conferences worldwide in both the Java and .NET communities, writes for MSDN, InfoQ and TheServerSide, authored the books C# In a Nutshell, SSCLI Essentials and Effective Enterprise Java, among others.
I'm Sadek Drobi, I’m here with Ted Neward at QCon 2008. Ted, why don't you introduce yourself, tell us what you've been up to lately?
I have a concern about Scala: it has a Java-like syntax. Don't you think that has some implications in a language like semi-functional programming language with a Java-like syntax for developers?
My other concern: I feel that we are searching for another language. We got Java and we like some kind of modeling concepts. What are the other modeling concepts we find in F# or Scala or the other languages?
That's because you got some abstraction tools that you can use on higher order functions.
I remember the arguments; even foreach of C#, today you can re-implement using high order functions. What about C# 3.0? Does it offer a lot like what Scala does offer today?
I can go on re-implement using through a function and then I pass a block of code. I can do it today in C#.
In C# we don't have higher order functions.
I would like to know how does it differ.
What you are talking about is having a multi-paradigm language that would support the law of paradigms at the same time, but C++ was doing that. Why did it fail?
We might have this in Scala.
We will switch to another topic. It's about dynamic typing and type inference. I've heard a lot about making a mix of both and that's what Visual Basic is trying to do as a lot of other languages. Do you think that dynamic typing will break the inference typing model?
That is about static and dynamic. Type inference you just got in and then suddenly you find a dynamic object that breaks the model. In Visual Basic today, when it will see a dynamic return object, all the code is dynamic, it's not static anymore.
Can you give us your take about the differences between the the Haskell model and the Erlang model? Haskell is a functional language, you call a function and you get the return. Erlang is a messaging language, so it's quite different.
But it's not only in the functional world.
There is a very important notion - it's not only about concurrency, it's also about behavioral coupling. When you've got mutation, you've got behavioral coupling - a lot of companies depend on the behavior or others.
Do you mean it scales in performance or in team members?
It means you have a big team and you need to share code, and everyone should understand the code that was written by the other - that kind of scaling I am talking about.
What about Ruby? Ruby lets you do a lot of things, it gives you a lot of possibility, you can do a lot of cheats in the language, but then, your language doesn't look like itself. How is supposed the other developer to understand what has been done by the other developer?
What about domain specific languages? In Java, in Ruby, in any language, I know where to start from. I got a blank page and then I instantiate an object or I call a static method of a class.
I'm not about textual, I'm about this mix: I mean it's not the language and it's not that textual, it's something in between. Don't I lose something as coherence in the language?
You were talking about how some languages have Rails associated with VB and then other languages are as close to the machine as C++. With something like the virtual machine model, do you see a space there for multiple languages that work on the same basic platform and you can step from one to the other during the development process?
One of the things you've talked about was modular toolchain. So the idea being the move from code to ... back and forth all along that chain. As a developer that's a really interesting idea. How do you get there?
The upgrades and updates of the bigger languages are quite large. At what point should you stop adding massive features in languages and stabilize them and create a new language with what you learnt from building it up to a certain stage?
So you are saying we don't change the core primitives?
show all  show all
Fantastic Talk! by Kent Fenwick Posted Oct 24, 2008 11:28 AM
here's your currying for c# by Stefan Wenig Posted Nov 12, 2008 3:49 AM
Re: here's your currying for c# by Stefan Wenig Posted Nov 12, 2008 3:52 AM
  1. Back to top

    Fantastic Talk!

    Oct 24, 2008 11:28 AM by Kent Fenwick

    Totally agree with Ted on the subject on team communication. It is very easy to blame a language, framework or API for putting up barriers between passing information from author to user or from author to maintainer but the truth is that good communication trumps all of that! It doesn't matter how beautiful the code is... if you have bad communication you will not be able to successfully pass on knowledge. I think what could have been said is that bad language design can highlight or amplify bad communication in a team, but the underlying issue is, and always will be with the people doing the writing. Spending five minutes with the author of a piece of code, library, framework or language can do more than 10 hours of books or googling. Fantastic talk! Keep these coming. Thanks for such high quality (and entertaining) content!

  2. Back to top

    here's your currying for c#

    Nov 12, 2008 3:49 AM by Stefan Wenig

    public static Func> Curry (this Func func) { return a1 => a2 => func (a1, a2); } Func div = (a,b) => a/b; var inv = div.Curry()(1); Assert (0.5 == inv(2)); it's not as nice as in f#, but it's there. (Actually, only the Func syntax sucks, the body of Curry() hits it quite neatly. Functional programming in C# would look so much nicer with built-in syntax instead of Func) still a very interesting interview!

  3. Back to top

    Re: here's your currying for c#

    Nov 12, 2008 3:52 AM by Stefan Wenig

    oh, and I'm so glad the system provided all those closing tags for the generic arguments that I forgot ;-)

Educational Content

Bindings, Platforms, and Innovation

This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.

Orchestrating Long Running Activities with JBoss / JBPM

This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.

Neo4j - The Benefits of Graph Databases

This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.

Realistic about Risk: Software development with Real Options

This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.

Communication Flexibility Using Bindings

This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.

Writing DSLs in Groovy

After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.

Scaling Agile with C/ALM (Collaborative Application Lifecycle Management)

IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.

Concurrent Programming with Microsoft F#

Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.