What's the Vibe
Origin Story
    One day I was sitting in the lab when one of my friends stopped by and chatted. We were talking about how our respective research papers were going and he noticed I had chat pulled up(Chat is short for ChatGPT, it's just the slang now). He asked me what I was using chat for. Suprised, I just said I use chat for boiler plate code. After discussing how AI should be used in research, he introduced me to Cursor. Although he didn't use it personally, he had mention that a lot of his friends had been hopping on this wave to get code out quicker.
    A couple of months later, I was in a time crunch for a paper deadline. In my original implementation, I had messed up the dataloader implementation so now the way data was being passed in was wrong and now all of our metrics were wrong. One of my mentors had suggested to start using Cursor simply because it was really fast at coding and as long as you told the Large Language Model(LLMs) what to exactly change/fix your code would come out looking perfect. At first, it was a great tool, I was able to refactor a majority of my code and then start running metrics. Some other bugs had appeared but they were easy enough for me to fix on my own. However, about two weeks before the deadline, I was getting an random freeze. At first I thought it was some sort of resource lock due to the way we were distributing weights during initialization, but that didn't work. A couple of prompts turned into days and nights of trying to prompt the LLM to fix the bug. On occasion it would fix the bug but it would come back when I made another change. Eventually, I decided to roll up my sleves and go old fashion and search the internet for answers. A couple of google searches later, and voila, bug fixed(maybe I'll write about it later but essentially it was some bug with NVML not matching older systems on newer CUDA distributions).
    This got me thinking, what is the hype behind vibe coding? It was able to solve a lot of my problems, but when I really needed it, it wasn't able to solve the problem. Furthermore, it seems like it's impossible without going one day without seeing something about LLMs and Agentic AI changing our lives. But really will it? During my internship with Capital One, the team I was on was working on Call Summarization with RAG. It seems like more than ever, everyone is trying to capitalize on this AI boom. But really what can AI currently do in the hands of an CS student/junior SWE, someone who's supposed to be replaced by AI. So over the weekend, I decided to do some digging and find out really what this was all about.
Training Arc
Context
    For context, I've always wanted to build my own personal blog. Personally, I've began to realize that I enjoy writing a lot, and this is a great way to build something for myself and test the limits of vibe coding. This was a pretty simple project, being able to generate content from .md files and being able to display them. Furthermore, orginially this was supposed to do be able to post to Medium, but Medium took away the API tokens prevnting that and now you have to pay(AFAIK). Also to be able to truly see the power of the vibes, this was a great task as there was lots of random youtube Next.js and React.js tutorials to show the prowess. Warning I know how to use these technologies and have shown knowledge over these fields in different projects and profesional settings
    I first decided to search up how to vibe code. There's definetly a bad meme where some guy accidently leaks his API keys and people end up spamming his website costing him hundreds of dollars(unfortunately I'm a broke college kid and can't really aford that). There's a great reddit post [link to reddit post] describing the best practices. If you're too lazy to read the entire post, it essentially goes through the process of creating .md files so that it can always provide context to the LLM. There's multiple ways to do this but for specifically Cursor, it requires all the context, mistakes, and information that the LLM might use to be placed in a .cursor folder. In addition the reddit post specifically asks to use a popular framework(i.e Next.js, React.js Angular.js).
    First, as someone who's not the best with design, I decided to use ChatGPT to start helping formulate an idea of what the blog would look like. After prompting GPT for this, I was able to have Cursor generate this and was able to solve most problems within a few-shots. However, I don't think everything is as pretty and rainbows as most people think it is.
It's Just A Tool
    Before I continue, I think it's good to preface this. I think Cursor is a great tool. Without this tool, this would've definetly taken me a week or two to get this all done. Definetly saved me a lot of time. However, after prefacing this, I think that's where Cursor stops.
    First and foremost, if you go into this speific repo, I would like you to notice that they're are technically two Next.JS projects. One in the root location of this file and the other is located in the frontend folder. For clarification, I had no play in this. However, when I prompted Cursor to take my image and turn it into code it did exactly that, but not in the location that I wanted. I remember I had specifically said monorepo and under the frontend folder. However if you wanted to, you could in theory run pnpm dev in the root and see what the original design that V0 spit out was(I've customized it to my liking).
    Outside of just not being able to organize the folders correctly, I think the bigger issue is that it's not up to date. I believe that this project is specifically built in Next.JS 13, but one of the issues is that this is soon to be deprecated. Next.JS was also causing a lot of package conflicts that took more than a few shots and when I was reading them(don't worry I didn't actually try to solve them) it was supposed to be a simple downgrade but it couldn't really figure that out.
Results
    Cursor is a great tool under two pretexts: 1 there's a lot of data already on it and 2 if it's the user is able to correctly prompt the LLM in such a way that it fully understands the context. Although it might seem like I'm a huge doubter of LLMs genearting code, I think it's important to understand the direction that Software Engineering is going. In all honesty, I am worried about the future of junior roles. Not only in Software Engineering but in general. The great part about these junior roles is being able to learn from more senior people while doing grunt work. When I look at software engineering as a whole, it's becoming a more complete engineering. Other engineers(i.e electrical, mechanical, or civil) don't directly go and do the specific grunt work. Mechanical engineers don't go sauder, electrical engineers don't directly create the bread board, and civil engineers for sure don't go and mix concrete. I think software is heading in that direciton. Design patterns, latency, and all of these other qualities will become more and more important. With this, it'll become even more important to understand the fundamentals of programming/computing. Understanding these things will be what seperates the us in the future.