We look forward to our upcoming competition — TypeDB Forces 2023 (Div. 1 + Div. 2, Rated, Prizes!), which will take place on 29.01.2023 17:35 (Московское время). In the meantime, you can learn a little more about us.
How would you introduce yourself?
I'm Krishnan, I grew up in India and spent a little too much time on the internet and fiddling with my (underpowered) PC. After completing my Bachelor's degree, I spent a year as a software engineer working on a huge data lake, the next as a research fellow trying to permute thread executions to force out concurrency bugs, a year doing a masters with a focus on the old-style AI (and logic-programming). After a short-lived attempt at a Ph.D., I'm now at Vaticle working on the automated reasoning built into our database.
When did you start Competitive Programming?
Probably in my second year of uni. One of my friends decided it would be fun and we just started doing contests. Later on, another friend convinced me to learn a bit more and join his ICPC team. The discussions I had with him were great.
What have you since learned and how has competitive programming impacted your skills?
Everyone reading this knows better than me, but CP has made me a lot better at dissecting a problem better and isolating the crux of it. It also makes you great at coming up with the simplest possible implementation which covers all the (edge) cases. The clarity of thought you need to get an AC is something I would have taken much longer to develop without it.
What is it like working at TypeDB as an Engineer?
The problems you get to work on here at Vaticle are great fun. There's a nice balance of freedom to explore solutions and expectations on output- so you're happy with the state of whatever you're building. It feels like a good time to be at the company because we're stable enough to know what we want to do and have some idea of how we want to do it, but still early enough that you have to define and drive the solution.
Another great thing is the variety of fields we touch on in our work — There's something in it for almost everyone. The query language and type system design, the semantics of the language, the graph traversal algorithm, the storage engine, and its low-level data structures, and the distributed systems aspect to scale it all up. We even have our own IDE (and a very, very cool graph visualizer). You also have to dive into the internals of programming languages, build systems, and cloud infrastructure.
To top it all off, with the group of extremely smart people working here and their varied interests, you have a lot of great (and often tangential) discussions in the meeting room, the lunch table (and the pub). Even so, I think we could do with a few more competitive programmers in the team ;)
What kind of problems are you working on?
The focus of my work is the reasoner (which sits well with my interest in logic programming). The first major piece of work here was the resolution planner – what is the best order to evaluate a recursive query? The discussions with my colleagues were critical to making heads or tails of the problem. It could still use some work though (anyone like decomposing graphs?)
I've since worked on adding arithmetic & aggregate queries into the system — which involved finding the right conceptual model to think about all these in a graph setting. We've had some great discussions on the various database models and how it fits into their systems.
The next chunk of work I look forward to is to tame the reasoner a little more. The current solution is very elegant — it's simple and powerful as a direct result of its simplicity. We just need to add a few missing properties to the resolution procedure to bring it up to the state of the rest of the system.
The data in knowledge graphs tend to be highly interconnected, and we know interconnectedness is a recipe for hard problems.