random thoughts a journey to somewhere

My recent experience with AI coding tools and suggestions

  1. Reimagine anything
  2. Planning with AI
  3. Learning with AI
  4. Be in control
  5. Git is your friend
  6. Language matters
  7. The way you think changes with LLMs
  8. Cursor Rules

2024 and early 2025 were one hell of a wild ride. Lots of AI tools emerged from different companies. It’s not all that new, some were being developed for quite some time. And as a matter of fact, they are becoming more and more usable day by day. Recently, Anthropic released their latest model claude-4-sonnet, which is great for coding as it writes fewer comments and can manage smaller tasks quite well. I’ve been using Cursor (aka the AI editor) for quite some time. There are also other alternatives. But as of writing this today, Cursor works best for me. I got my subscription because I kinda liked the tab model. If you’ve been exposed to any of the AI editors, you already know it can understand the pattern. If you change something in one line, it can understand and then can apply the same change for the next couple of lines, which is quite good and quite enjoyable too. No need to learn vim macro for that. Sorry vim users (myself included, I use vim mode all the time). Though in most cases with its tab model, it goes way beyond that simple change.

For the first few days, I haven’t used any single thing in AGENT mode (that is basically some kind of privileged option to edit files and modify the file system). So I slowly started using agent mode and Oh boy! It can do a lot of things, saving a ton of time. It basically lets you iterate fast! Very fast! Soon I have a branch named vibe in all the projects I use cursor with. It can write brand new code quite well, it can apply changes, it can help with debugging a lot of things. I’m not talking about breakpoint debugging, rather debugging system problems in general. One time I had a problem with MacOS certificate installation, with commandline, Keychain Access GUI, and golang. Cursor wrote multiple scripts, ran multiple commands to verify, and eventually it accepted that it’s very weird. I don’t let cursor go wild and run any command it likes, rather every time it tries to run any command, I must allow that. That way I can see what it’s trying to run.

Reimagine anything

If you’re not a graphics designer or you’re a backend developer with little to no design knowledge, you might’ve faced this. Whenever you try to implement a basic UI, it looks ugly. It happens to me all the time. That’s why when working with react, we use component libraries. (ShadCN changed the game quite a bit. Though it’s outside the scope of this topic). With AI, you can create beautiful UI, in a matter of seconds or minutes. I’ve designed and got idea from v0 for my few personal projects. Most of the time it worked pretty well for me as an initial iteration. Which then I can fine tune later. AI may not make the best UI for your application, but it’ll definitely generate something for you to get going. I experienced some theme changes with AI. I didn’t like the colors, so I asked it to reimagine the colors, use its creativity (or hallucinate, depends on how you look at it). Colors turned out great for that specific use case.

Planning with AI

When you’re brainstorming and you’re looking for some ideas, you can create a README file and ask AI to populate the specific details. It’ll spit out some ideas about the project, particular features, gotchas, etc. Now you have a playbook to fine tune. You can go through the docs and you might get some insights to that. But if you’re well versed in that subject, you may not like the idea and you should rather go with your own.

Learning with AI

You can learn a lot of things from AI. You can tell it to implement certain things, and you can now visit those docs and go through the code. You need to understand why it wrote that thing. And while you’re verifying those things, you can learn about operating system APIs, patterns, specific ways of doing things that you may not be aware of.

Be in control

As of today, the big bump you’ll hit is the context size. Try to keep chat size very small. For unrelated things, create new chat. It can create messy situations quite easily if you’re not careful enough. Once I tried to replace the theming system in a react application, oh boy! It deleted a lot of code and totally messed things up. Because it went through all the project files and eventually created a messy situation. But when I instructed it for smaller changes, it worked quite well out of the box.

Git is your friend

Previously, I said I use the vibe branch a lot. Why? When working with LLMs in your codebase, you want to keep track of your changes. If you think some changes are good. Just commit it. If you’re not careful enough, it’ll mess up with good code as well. And if there are lots and lots of changes and if you’re not managing them with git, you’re cooked. So always commit, revert, reset. Git integration with VS Code based code editors is very good for most tasks. You can stage hunks, restore hunks, or reset the whole file. Which will save a ton of time. Learn git basics and apply them effectively. Not just when you’re using LLMs. In general, you should learn and be proficient in git.

Language matters

All these things will only work if you choose a domain which LLMs can help you with. If you’re using React, ReactNative, TypeScript, or Golang, it’ll help you very well to write code and implement features. Not so when it comes to obscure things like windows driver development. I once tried windows callout driver development, and LLMs hallucinated lots of Operating System APIs that don’t exist on windows. That was pre sonnet-4 era. Maybe it has changed, who knows! Sonnet-4 mostly gives working code, which is quite good, but if it starts messing things up, you better stop it right there.

The way you think changes with LLMs

When working with LLMs, you also need to think about a lot of constraints. You need to know the limitations of the LLM. You need to explain your requirements such a way that LLM can make sense of it. You can’t just be vague and assume the LLM will understand what you’re talking about. Maybe some human will understand given that previous context. But with LLMs, you need to think about the context, what it knows, what context you should give it. Effective usage requires you to go through some trial and errors. But if you get the idea, you’ll only get better using LLMs.

Cursor Rules

When working on a project, you might set some base rules to attach to every message. For example, if you’re using cursor with a ReactNative project and you don’t specify this, the LLM might get you wrong and implement something which only makes sense in the context of web. For example, usage of html tags, localStorage, etc. But if you set the rule to let the LLM know this project is a ReactNative project, it won’t do that mistake. Same thing goes for a package manager. It may try to run npm for most tasks, but if you’re using bun for your project, you better set a rule for that. That way it’s much more effective and you don’t have to fight with it for that.

It’s been pretty fun experimenting with all of these. I’m just enjoying my last few days as a developer, because AI will eventually replace me and all the developers. Then we all will start farming… See you there…

comments powered by Disqus