
Ask HN: Did you adopt programming language because of its expressiveness - ark60
Do you have experience of adopting programming language in your programming because of its experience rather than its better library?
(In my biased opinion, for instance, the former case is typically lisp or haskell and the latter case is Java or C#.)<p>If yes,
1. What sort of project?
2. Did you have some problem caused by less library? Or one that you had not expected?
3. In the conclusion, do you think your language selection was correct, especially in terms of productivity?<p>If no,
1. Did you have some problem caused by less expressiveness or poor language features?
2. In the conclusion, do you think your language selection was correct, especially in terms of productivity?
======
soulnothing
One of the projects I was working on the database schema changed underneath of
us, at best daily. More likely every several hours. Column names and types
changed. This led to a lot of runtime errors, due to type mismatch using
python.

My team did a POC in scala, with slick. Compiling the ORM against the table
metadata. The code written was reduced, errors were reduced. All was
wonderful, with one exception. We had just become siloed.

Our company was largely python/django/celery. We had alot of intermingling
between developers. Jumping around whenever there was spare bandwidth. While
this change was worth it, from a technical perspective. Not so much from
management and on boarding.

We had to write alot of additional code casting types, and verifying them. If
I recall 80% of our code was cleaning up this database. A static expressive
language alleviated alot of this. But when other developers jumped on board it
was a massive context switch. They could learn, but to management. One to two
months burned writing custom code, was better spent than retraining
developers. I concurred in that instance with their rapid target release
cycle. Comfort and knowledge of existing languages/tooling was paramount.

Languages are tools, and often we're not flying solo. We're working in a team.
While a certain lib may be nice, or syntax set. The entire team needs to be
understand that. If I'm able to write code twice as fast due to additional
features. But everyone else takes twice as long due to context switch, and not
knowing the feature. It's not worth it. As I've gone on I'm less concerned
about one library or language feature. But the composite whole from tooling,
devops, backend to frontend. What is the most cohesive picture. I definitely
have languages I raise an eyebrow at like why are we using that.

When I led that team from the prior example. We alternated our Friday's. We
had a two hour meeting. Two weeks of the month we did code katas. We picked a
random esoteric language, everything from java to racket. We did basic
exercises. Then stand up a quick API and web page. We reviewed the tooling,
artifacting, was it more functional or object orientated. We looked at the
language and tools. Said this is a pain point. But this is a really good
point. How can we incorporate it into our workflow. Just working with an
additional tool set, shows you how to use your current tools in new ways. Some
people didn't have time to search outside of work. These code katas allowed a
minimal amount of time, and vast exposure.

