Nicolas0682 | 10 years ago | on: Metabase: Why we picked Clojure
Nicolas0682's comments
Nicolas0682 | 10 years ago | on: If Lisp Is So Great (2003)
It so quite possible the long term productivity will be better with the mediocre programmers team regardless of their tooling.
If you have a team of great programmers you also need to give them the possibility to do some interresting stuff.
And that's basically that, when the great programmer will come and ask to change tooling or improve you'll refuse. They'll understand you prevent them to do anything efficiantly and so they'll resign as they waste their time here.
But even with great tools at their disposal, a mediocre team of programmer will perform averagely.
Because you don't just need to have the tool lying around, you have to know how to use it, what is good, what is bad, when to do this or that. if there not somebody behind them to coatch them all the time, they will not leverage it.
When for example a person learn design patterns, they want to use them all the time.
The great developper know the patterns, understood the key concepts behind and know when to use and not use them.
As for the language it is more crutial than you think. It is basically the shared basic knowledge and discussion medium in your company. And your APis are also part of it. If you have high level concepts coming from both your API and programming language and your developper know them they'll think directly in theses high level concepts and will be able to ignore the irelevant details.
What make Java more efficiant mostly is that you can forget to think about freeing memory and it is almost impossible to get a core dump. Instead of having to learn and speak the concepts of allocating and freeing memory your developpers will be able to concentrate on other things.
And what make C more efficiant than assembly is that you can actually write easily functions, that you can define structures and that the compiler take care to compute the proper shift in memory to access the differents field and so on.
But java, especially before version 8 is lacking key concepts like basic functionnal programming. So when a developper want to filter a collection, a pretty common operation, he will just iterate, check the condition of the filtering and return a filtered collection. It will be very specific and the level of expressivity of this code will be quite low.
A great developper would at leas isolate that code into a function with meaningfull name or define a generic filter function and pass predicate as anonymous functions. But the lack of proper lambda expression will prevent to fully leverage it.
But once everybody is accustomed to functionnal programming they'll just use filter and a predicate. The intent is much more clear, almost self documenting.
The more expressive you can be, the more common knowledge you can have, and the more you can concentrate on issue key to your program and the less you can spend time on unecessary details, the more productivity you get.
And yes, this start with a good programming language with a good echosystem and a team that efficiant with it.
That's why Java or C/C++ are so often used: they are the easiest languages when you need to hire because more people know them. This doesn't mean they are the best language for your problem at hand.
Nicolas0682 | 10 years ago | on: If Lisp Is So Great (2003)
By combining a great team of competant people, a small startup environement were you can concentrate on getting thing done and by using powerfull tools they made their software, managed to have it evolving faster than their competitor and then sold it to Yahoo.
Ironically since the tool has been brought back by Yahoo its growth stopped and nobody know of it anymore. Is it because of the different people working on it? Is it because they had now a different management structured that cared more of politics? Or was it because they decided to recode everything in C++ ?
To me that's likely a combination of all the things.
That's the key point. A great programming language and echosystem is a great start. But that's not enough. You also need pragmatic management that make decision for the good of the company and not for politics and you need to have employees that care of their job.
At the end, you should know if you are in a model of small efficiant teams or huge average teams. Most company start with the former and end up in the later as they grow. Ultimately that why the next start up has a possibility to beat them. You would never be able to beat microsoft if everybody inside had a startuper mind-set. They would own the world.
That why people fear google so much. I'am pretty sure they have lot of politics and are already more in the later phase than the former but they at least managed to keep bright people working for them.
An experienced programmer is supposed to know the language well as well as the API and frameworks.
From my experience Java is quite verbose and the standard frameworks are among the most complex. It is typical for a clojure/scala/python program to require 1/2 or 1/3 the lines of codes than Java. And they require much less configuration files and annotations.
How much time a developper spend to read his operating system code? How much time a developper spend to read the API implementation code of his language or even the framework ? No time because the code is great, work as expected and doesn't require to be read all the time.
That's what a more expressive language provide. At greater set of standard language construct, API and frameworks that allow you to express the same in a much more concise way. This is much easier to read because the fundations are rock solid and the meaning of a function doesn't evolve over time, it is also nearly bug free. You reduce the accidental complexity.
When you choose a less expressive language like Java, even with the most advenced frameworks you have much more unreliable custom code. You are in fact increasing the readability issue, not reducing it.
Sure there the fact that many more developper master Java and the associated frameworks than say Scala or Clojure. But this also act as a filter.
You can do the same thing with a team of 5 experienced clojure developpers than with 20-30 java dev. A part come from the language expressivity itself. A part is that it is much more likely to get bad developpers in Java that will mess your code and make you loose time. It is easy to find Java dev, a bit less to find great Java developpers. Another part is that the bigger the team, the more is lost in communication, meetings and politics than actually doing things.
So that your choice ! Do you prefer 5 clojure dev, maybe paid 20-30% more or 30 java dev with 5 managers (paid 20-30% more) competiting to get budget and projects ?