893 karma · joined December 22, 2015
I'm available for part-time contracts or short consulting gigs in addition to my main assignment. My main assignment ends this summer, also open to discuss longer full-time engagements after that.
Skills:
- 15 years of experience in companies ranging from 5-person startups to huge multinationals, MSc in AI
- Deep experience with Kafka, streaming processing and adjacent tech: designing messaging based architectures, fixing bottlenecks.
- Rule modeling and discrete optimization with Optaplanner, Google OR-tools & MiniZinc.
- Building prototype apps for visualization and decision support with ClojureScript.
See profile for contact details.
Most modern languages are pretty close in productivity, architecture and the way a company is organized have much more impact on productivity.
In big enterprises every small change requires 3 meetings, in a startup you can just make the change.
Feels like doing parkour on the command line!
One can certainly attach a debugger to a running process in production, I've done it several times to debug gnarly issues.
It's not as powerful as a proper lisp repl as you cannot redefine functions or classes, but it is still very useful.
For validation/testing starting with a clean slate takes away a lot of my worries.
There are plenty of reasons to start a new REPL: - adding a library
- changing the project config
- messing up the repl state
- starting with a clean slate
- switching branches
int max(int x,int y) {
if (x>y)
return x;
else
return y;
}
I just looks completely fine to me, but colleagues would complain about it in reviews and I just don't understant the problem at all.
The variant with the extra result variable looks just wierd to me, and I have seen much uglier code written by people desperately avoiding early/multiple returns.In Python a library like requests is a thin abstraction over http calls it is very easy to understand what is going on and get started.
In Java, there is a tendency to wrap everything so it fits with a framework and is super generic and configurable. For example look at the Feign library.
Each approach has its pro's and cons, but knowing both of them good as it allows you to pick the right solution for different use cases.
About getting into java: i'd recommend using Spring Boot. I provides a low abstraction http client (RestTemplate) that allows for straightforward calls to REST services.
Some things that are taken as best practices are bad practices in other langauges and vice versa.
For example, lots of Java devs are against early and multiple returns to the point of absurdity, while in functional languages this is idiomatic and no problem at all.
Using different languages lets you see how different approaches work out in practice, so you can get a better view about which approaches work and which approaches are just cargo-cult nonsense.
REPL driven development is great, but sometime you want to make sure that you are not using some function that was only defined in the REPL session but not in the source code. Also the REPL session sometime gets in a bad state when printing big outputs, blocking forever with some concurrency stuff or other mistakes.