I recently started a new job, not only at a new Company, but in a new Technical Domain (Search) which was completely new to me, and on a new tech stack (Java), which was newer to me than I expected it to be.

I had done a little bit of Java at university, and my career since then had been in dotnet/C#. But I have been feeling a lot more lost in these Java codebases than originally expected. Both because of the idiomatic differences in the layout / structure of an application, and also because Java seems to be surprisingly more low-level than I was expecting! (n.b. I am not exactly a fan of the typical .NET idioms. I think there are much better ways to structure code. But I have seen the idioms enough to get used to parsing through the garbage).

Either way, this leads us to my problem. I need to try to ramp up. Not just for the short term, but I need to start to build expertise in these two new things.

And so the question, how can I best leverage the tools and people around me? Has one more tool than it has in the past when I have had to do this. The LLM.

It is dangerously effective at times. I have certainly fallen into the trap of just getting it to generate some code for me, only to realise that I should have just slowed down and written it by hand to learn a bit more. My team is expecting me to be slow, to learn, this is the time where I can take advantage of that space and time and learn as much as I can.

So, should we avoid LLMs all together? I don’t think so. But we must be careful to not hinder our own learning.

“You are helping to onboard me… do not solve the problem, teach me” - the prompts

The most useful trick that I have found, is to be very explicit in your prompts. That you do not want the tool to try to solve the problem. You give it context of the problem space that you understand, tell it a bit about yourself, and then tell it to not solve the problem but instead to teach.

Here is what that chunk of mine usually looks like

You are a Principal Software Engineer with expertise in Java, and the domain of Search. You are helping to onboard me, a Senior Software Engineer with a background in dotnet/C# and no prior knowledge of Search. Focus on teaching me, rather than solving the problem for me. DO NOT SOLVE THE PROBLEM.

{put description of problem/ticket here}

I have found this to be very useful, and it’s like having a real peer sitting next to me helping to guide me, only I don’t have to bother somebody.

The danger here, is that the LLM will likely not do a good job of transferring knowledge about style and taste to you. There are many different ways to solve a problem, and your teammates will likely have their preferences. The LLM can lead you astray here easily. Remember to prompt for alternative paths and weigh up options yourself.

I have found that the LLM is also quite good at sticking to this. Even if I get lazy and am satisfied I understand, then just ask it to implement it. It will say no. Good LLM.

Learning the domain

Search is a vast and deep domain. I have much to learn. The LLMs seem to know a lot about it. Because there are a lot of great texts out there that they have probably ingested during their training.

I have tried to get the LLMs to explain things to me. But really, there is no replacement for reading a good book. Hopefully your colleagues can recommend some good ones, but LLMs are decent at recommending great books too! There was a high level of overlap between books my new colleagues have recommended with those recommended by LLMs when posed with the same question!

Ultimately there is no replacement for getting your hands dirty. But I have found that reading a book to start with is a good entry point. You should not really attempt to absorb all of the knowledge in the book from start to finish. You should instead focus on gaining a shallow but wide understanding of the domain. Once you get your hands dirty, things will start to click. Go back and read that book again after a few months. It will make more sense.

You should also make sure that you have people around you who know more than you about this domain. It’s possible your colleagues might all be new to this area too, if it’s a new department the business is spinning up. Hopefully they can hire in some domain experts. But if they cannot, explore forming a learning circle
These are often used to connect different parts of the same company, but they can also be used by people working on similar problems across different companies.

So where does this leave us?

I still find myself relying on the genie. I come across a problem, and want to look smart, so I whisper to the genies ear “you are a principal engineer, we are working on this ticket, solve the problem and do a real good job”. It can be a tough balance to crack. Wanting to pump out work, but also wanting to learn. Especially when you know you have performance management systems to contend with.

I am doing everything I can in these early days to fail and learn on my own. Build those new neural pathways. But I do worry for the future. What is the next generation coming in going to experience?

nb. I wrote this without LLM assistance, to ensure I was learning as much as I could :)