Tacton Systems | Multiple roles | Hybrid, Stockholm
Full stack Java, JavaScript / TypeScript
We make a Configure-Price-Quote SaaS for complex product portfolios. For example, one customer is Tetra Pak, that sells machines that build packaging (milk, juice, etc). These machines are like a two-story building with many variations, every aspect has to be well-defined and validated before it's ordered.
In our solution products can be modeled in detail with constraints, and during a sale options are chosen and validated, often visualized parametrically, pricing is done, and a quote is prepared. All based on the well-defined model.
It's a 30-year old company that started as a research startup, grew organically, and has a stable customer base. After a recent acquisition it's aiming to grow, therefore many positions are open. I started working here just a year ago, but I can say the work environment is healthy and relaxed, lots of competent people and everyone I interacted with so far have been very nice and professional.
Curious to know what part of syntax you found convoluted. If you remember any examples I’d appreciate it.
Maybe you want a constraint programming environment instead. As example check out Conjure from St Andrews:
https://conjure.readthedocs.io/en/latest/tutorials-notebook....
More generally there are the theorem provers like Coq, etc., but their use cases are even more specific.
The generated programs are only technically Prolog programs. They use CLPFD, which makes these constraint programs. Prolog programs are quite a bit more tricky with termination issues. I wouldn’t have nitpicked if it wasn’t in the title.
Also, the experiment method has some flaws. Problems are hand-picked out of a random subset of the full set. Why not run the full set?
If I may nitpick, the call to children’s accept methods should be in the visitor, not the parent. Imagine you’re writing an XMLGeneratorVisiter. The visit method for the parent would print <parent>, call child accepts, and then print </parent>. If you do it the way it is done here you lose the control on when the children are visited.
Also, the point of the visitor pattern is not just pattern matching/polymorphism. Of course you could do it with polymorphism or conditionals or whatever. But the visitor pattern reduces coupling and increases cohesion. So you get a more maintainable, testable code base. Pattern matching with a candied switch doesn’t give you that.
Prolog was never good at the things they thought it would be at, like AI, which is better done by ML today, specifically often like you said, with NNs. But it turned out to be good for other things, and those use cases are still alive today, even though there are many competitors. Look at Tiobe index, Prolog's usage is constant just under 1 percent, and has been for decades. So it's good for something.
I agree with your point, I just would like to point out maybe the OR-tools they meant is the one made by Google, so a specific one: https://developers.google.com/optimization
Indeed Prolog programs are also called databases sometimes. Some things Prolog can do over SQL:
- infinite data defined by recursive predicates
- flexible data structures (think JSON but better, called complex terms) and a way to query them (called unification algorithm)
- execution strategy fine-tuned for reasoning (called resolution algorithm). You can do this with SQL but you’d have to formalize things using set operations and it’d be very very slow.
On the other hand, SQL can query plain data very very fast.
Yes :) we make software that helps sell complex products (If your product has a million options and takes up a whole factory floor you can’t just have a series of dropdowns)
Prolog, and Constraint Programming especially are great to have in your toolbox. I’ve done research in the field for years, and my job in the industry today is writing Prolog. There are real issues with Prolog:
- no proper module nor package system in the modern sense.
- in large code bases extra-logical constructs (like cuts) are unavoidable and turn Prolog code into an untenable mess. SWI prolog has single-sided unification guards which tackle this to a degree.
- lack of static and strong types makes it harder to write robust code. At least some strong typing would have been nice. See Mercury as an example of this.
All being said, Prolog is amazing, has a place in the future of programming, and gives you a level-up understanding of programming when you get how the types in every OO program is a Prolog program itself.
I love the veiled threat in Page 4 about Journal of Logic Programming all editors abandoning Elsevier and starting a new journal (Theory and Practice of Logic Programming (TPLP)), noting the TPLP thrived after this and Elsevier's own restart having gone off the map. Especially with the balancing note at the end saying the cost per page of this new journal wasn't much cheaper.
I took one of those (Alva labs) multiple times for different companies. My “intelligence” (or whatever they call it) score was 7/10 first, then 8/10, and then 9/10 I think in the last one. Just got better each time I took it. And the results for the personality test kept changing dramatically for each take too. Total pseudoscience.
Full stack Java, JavaScript / TypeScript
We make a Configure-Price-Quote SaaS for complex product portfolios. For example, one customer is Tetra Pak, that sells machines that build packaging (milk, juice, etc). These machines are like a two-story building with many variations, every aspect has to be well-defined and validated before it's ordered.
In our solution products can be modeled in detail with constraints, and during a sale options are chosen and validated, often visualized parametrically, pricing is done, and a quote is prepared. All based on the well-defined model.
It's a 30-year old company that started as a research startup, grew organically, and has a stable customer base. After a recent acquisition it's aiming to grow, therefore many positions are open. I started working here just a year ago, but I can say the work environment is healthy and relaxed, lots of competent people and everyone I interacted with so far have been very nice and professional.
Senior Software Developer https://careers.tacton.com/jobs/5313129-senior-software-deve...
Technical Lead https://careers.tacton.com/jobs/5591471-development-lead
Technical Frontend Architect https://careers.tacton.com/jobs/5714212-technical-frontend-a...
Technical Enterprise Architect https://careers.tacton.com/jobs/5591490-technical-enterprise...