Monday, January 7, 2013

Dependency Injection is a Virtue

DHH recently made a claim of Dependency Injection not being entirely virtuous, and got support from Tim Bray. While both make good points, they are both wrong.

Having hard-coded class-names like in the example Time.now is effectively the same as communicating via global variables. DHH's suggestion of stubbing out the Time class's now is selling us mutable global variables as the solution to global variables. Or more precisely: passing an argument to a method by modifying a global variable that the method reads out and restoring the state of the global variable afterward.

If that's "better", I don't really want to see "worse", and not wanting that sort of thing has nothing to do with being a Java drone limited by the language. And my experience with time-dependent systems tells me that you really want to pass the time into such a system generally, not just for unit testing.

Of course, having n-levels of AbstractFactoryFactory indirection could actually be argued as being worse, as Tim convincingly does, but that's one implementation of DI that's hobbled by Java's limitations. For a DI solution that's actually simple and elegant, check out Newspeak's  module system (PDF): there is no global namespace, modules are parametrized and all names dynamically resolved.

If you want synthetic time for a module, just instantiate that module with your own Time class.

Sunday, January 6, 2013

Objective-C is TIOBE Language of the Year Second Time in a Row

The TIOBE Index shows Objective-C as "Language of the year 2012". As it also won the honor in 2011, this now makes it only the 2nd language to win the award twice (Python won 2007 and barely edged out Objective-C in 2010), and the only one to win it twice in a row.

Although this surge in popularity is certainly largely due to the popularity of the iOS ecosystem (iPhone, iPad, AppStore), the fact that it continues despite Apple loosening its policies and alternatives popping up suggests that there may be more going on: maybe developers are discovering that Objective-C is a pretty fun and productive language, warts and all?

It'll be interesting to see wether Objective-C has now peaked, as Tiobe predicts, or wether it manages to expand back into other areas that could benefit from its qualities.

As last year, table and graphic reproduced here because Tiobe doesn't appear to keep an archive:

Position

Jan 2013

Position

Jan 2012

Delta in Position

Programming Language

Ratings

Jan 2013

Delta 

Jan 2012

Status

1

2

http://www.tiobe.com/content/paperinfo/tpci/images/Up.gif

C

17.855%

+0.89%

  A

2

1

http://www.tiobe.com/content/paperinfo/tpci/images/Down.gif

Java

17.417%

-0.05%

  A

3

5

http://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gif

Objective-C

10.283%

+3.37%

  A

4

4

http://www.tiobe.com/content/paperinfo/tpci/images/Same.gif

C++

9.140%

+1.09%

  A

5

3

http://www.tiobe.com/content/paperinfo/tpci/images/Down.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Down.gif

C#

6.196%

-2.57%

  A

6

6

http://www.tiobe.com/content/paperinfo/tpci/images/Same.gif

PHP

5.546%

-0.16%

  A

7

7

http://www.tiobe.com/content/paperinfo/tpci/images/Same.gif

(Visual) Basic

4.749%

+0.23%

  A

8

8

http://www.tiobe.com/content/paperinfo/tpci/images/Same.gif

Python

4.173%

+0.96%

  A

9

9

http://www.tiobe.com/content/paperinfo/tpci/images/Same.gif

Perl

2.264%

-0.50%

  A

10

10

http://www.tiobe.com/content/paperinfo/tpci/images/Same.gif

JavaScript

1.976%

-0.34%

  A

11

12

http://www.tiobe.com/content/paperinfo/tpci/images/Up.gif

Ruby

1.775%

+0.34%

  A

12

24

http://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gif

Visual Basic .NET

1.043%

+0.56%

  A

13

13

http://www.tiobe.com/content/paperinfo/tpci/images/Same.gif

Lisp

0.953%

-0.16%

  A

14

14

http://www.tiobe.com/content/paperinfo/tpci/images/Same.gif

Pascal

0.932%

+0.14%

  A

15

11

http://www.tiobe.com/content/paperinfo/tpci/images/Down.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Down.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Down.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Down.gif

Delphi/Object Pascal

0.919%

-0.65%

  A

16

17

http://www.tiobe.com/content/paperinfo/tpci/images/Up.gif

Ada

0.651%

+0.02%

  B

17

23

http://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gif

MATLAB

0.641%

+0.13%

  B

18

20

http://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gif

Lua

0.633%

+0.07%

  B

19

21

http://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gif

Assembly

0.629%

+0.08%

  B

20

72

http://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gifhttp://www.tiobe.com/content/paperinfo/tpci/images/Up.gif

Bash

0.613%

+0.49%

  B

Tpci trends 2013