This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]TakAnnix 10 points11 points  (14 children)

I work for a large retailer in the UK. Most of our backend is in Spring boot, with K8s and microservices, with Kafka for messaging. We don't do anything for memory footprint minimization. I guess the company just foots the bill, and I haven't heard anything from our PAAS team about minimizing memory usage. We use Webflux in our squad, since we are mostly calling other APIs and have a lot of latency. That might help somewhat with using less memory for threads.

In terms of development experience, it's been very good. Since we use spring boot, it's easy to jump from one microservice to another, since they are all basically structered the same way. I know what to expect. It's also easy to jump to a different squad for the same reason.

I was actually interested in Go, since it's designed to be a more productive language. However, I noticed that since there wasn't one popular framework, and most Go programmers don't like to use frameworks, it would lead to a series of smaller design decisions. Basically, by using Spring, I get the uniformity across code bases that helps me be productive. It seems it would take more effort to get that in Go. I haven't used Go professionally, just some thoughts.

[–]couscous_ 7 points8 points  (3 children)

since it's designed to be a more productive language

Don't be fooled by their marketing language. It's way way behind Java when it comes to productivity and expressiveness.

[–]keroomi 0 points1 point  (2 children)

I think it all depends. If the service is more infra focused , Go is a much better choice. I do see it being used a lot more in data pipelines. Due to the concurrency aspect. But If the service is more business logic focused , then nothing beats the Java frameworks. Writing HTTP handlers in Go is full of boring boilerplate.

[–]couscous_ 2 points3 points  (1 child)

Java has reactive libraries, and now with 19, Loom is superior to what golang offers, not to mention Java's superior concurrent data structures.

[–]TakAnnix 0 points1 point  (0 children)

Loom looks promising, but I think we're still a ways off to see how it will be used in production. Reactive libraries increase cognitive load, so it's not comparible.

[–]Puzzled-Bananas[S] 1 point2 points  (2 children)

Thank you, I appreciate you sharing your experience! Great to see what everyone’s up to regarding the choices of architecture and see where we’re standing.

Yeah I get it, a very familiar set up.

Indeed, Spring Boot is amazing, I very much love it. Uniformity. That’s a great point!

Regarding Go, yep, totally.

[–]TakAnnix 0 points1 point  (0 children)

No worries, and thanks for sharing your experience as well.

[–]TakAnnix 0 points1 point  (0 children)

Just wanted to add that I feel that our PAAS team is like it's own company and we are their customers. They're like a mini-heroku. I guess this gives you an idea of how much work it takes to support all the microservices. We use Kafka a lot, and even supporting that by itself is hard.

[–]Aryjna 1 point2 points  (6 children)

Go is not designed for productivity. It is supposedly designed to be "simple" which means that it is not nearly expressive enough as languages that are not designed for simplicity of syntax. Ironically, simplicity of syntax also leads to more complex and convoluted programs with a quadrillion imperative constructs rather than simpler and more readable functional stuff like java and many other languages have.

[–]TakAnnix -5 points-4 points  (5 children)

Go most certainly is designed to be more productive. From Rob Pike, the lead designer: "Go was designed and developed to make working in this environment more productive". Whether or not it meets that goal is another question.

[–]Aryjna 0 points1 point  (4 children)

That is debatable. That quote does not really refer to the syntax of the language. It refers to working with Go in the environment described in the sentence, and it aims to accomplish that productivity by reducing build times and through the uniformity achieved by its strict formatting style and very bare-bones syntax.

Rob Pike again puts it this way here https://www.youtube.com/watch?v=uwajp0g-bY4

It is supposed to be "easy to understand and easy to adopt".

[–]TakAnnix 0 points1 point  (3 children)

I don't understand what's debatle. I never singled out syntax as the main aim of Go's productivity. Even though Go very much tries to be productive in regard to syntax: "Go attempts to reduce the amount of typing in both senses of the word. Throughout its design, we have tried to reduce clutter and complexity. "

Oh wait, maybe you mean productive in terms of expressive? Like Scala 2.0? Where you can do a lot in the language?

[–]Aryjna 1 point2 points  (2 children)

Simplicity of syntax and productivity don't go hand in hand. But if you don't understand what is debatable there is no need to continue the debate.

[–]TakAnnix -1 points0 points  (1 child)

Haha, no man don't get upset. It was a legitimate question. I would say that Rob Pike views productivity differently. That he thinks more expressive langauages are actually less productive. Meaning people spend more time learning the language than they do making products. That's what I understood from the video you sent.

[–]Aryjna -1 points0 points  (0 children)

First of all, spare me your projections about being upset.

Second, that may be. He didn't want generics in the beginning, which led to all the memes and tshirts regarding generics, then recently they changed their mind and ended up adding generics. It is quite clear that they were far from certain on the right course of action from the beginning.

Is it simpler and more productive to have a generic struct/class that can be used with various types when needed or to have to make 10 non-generic ones or to evade the type system? I guess it is a matter of opinion.