When thinking about the role of AI in education, it’s hard to ignore the debates. Some see it as a game-changer, revolutionizing how we learn and work. In contrast, others worry it might make us too dependent or take away the human element of problem-solving. As someone studying software engineering, I’ve seen both sides of the argument. But in my experience, AI has been more of a helping hand than a crutch—a tool that supports rather than replaces the effort I put into learning.
Picture this: it’s late at night, and a student is hunched over their laptop, coffee in one hand, eyes locked on a stubborn piece of code that won’t cooperate. The clock ticks, deadlines creep closer, and the frustration builds. Then they remember—they are not alone. Just a few clicks away is an AI-powered companion—one that never sleeps, never judges, and always has your back. It’s ready to break down confusing error messages, offer hints, or explain tricky concepts, making the late-night grind a little less daunting. (At least, that’s been my experience.)
In the world of software engineering, AI has become more than just a tool—it’s your biggest supporter, personalized mentor, patient teacher, and brainstorming buddy all in one. It catches the tiny bugs you missed, suggests clever and enhanced code snippets, and even pushes you to explore new ideas. It’s like having a study partner who knows your strengths, spots your weaknesses, and helps you code smarter, not harder.
In ICS 314: Software Engineering I, I’ve had the chance to explore a variety of AI tools like ChatGPT, DeepSeek, Claude, and GitHub Copilot. Of these, ChatGPT has been my main go-to, because it’s an AI tool that I am already used to and most comfortable with. I’ve relied on it for almost everything—break down tricky concepts, write and debug stubborn lines of code, or even help me brainstorm essay ideas, making my workload much more manageable. Additionally, as I got deeper into the course, I started using GitHub Copilot more often, especially when working in VSCode. It’s been a nice addition, speeding up my workflow by suggesting code snippets and handling some of the more repetitive parts of my projects. Overall, it’s been an excellent opportunity to get comfortable with these AI tools, knowing they will be essential in the real world for software engineers.
1. Experience WODs
I usually try to avoid using AI for experiential WODs because the primary purpose of these WODs is to prepare myself for the real WODs (aka in-class WODs). I think it’s important to challenge myself by working through problems on my own first, rather than leaning on AI. For me, that is the best way to truly understand these new concepts and build the problem-solving skills I’ll need later on. Plus, it’s sometimes unnecessary to use AI for these types of WODs, because many of them are provided with video solutions made by the instructors, which are usually enough to get me back on track if I’m stuck. For example, the first few experiential WODs at the beginning of the semester weren’t too bad, mainly because the video solutions were up to date and easy to follow, making it unnecessary for me to use AI.
That said, I occasionally turn to AI when I hit a roadblock that even the video solutions or provided tutorials can’t clear up. For example, later in the semester, some of the video solutions provided were a bit outdated, which made it confusing to follow along. In one case, the video was using IntelliJ instead of VSCode, which made it challenging for me to follow along since the interfaces and workflows are quite different. This threw me off a bit, so I turned to ChatGPT and asked something like, “How do I do this in VSCode?” It quickly walked me through the process, helping me get back on track and avoid unnecessary frustration.
2. In-class Practice WODs
For practice WODs, the approach is a bit different from experiential WODs. While the problems are often similar, they’re designed to push me to think more critically and independently. Unlike experiential WODs, practice WODs don’t come with video solutions, which means I don’t have that immediate guidance to lean on when I get stuck. Because of this, I find myself turning to AI more often, especially if I’ve been wrestling with a problem for a while without making much progress.
For instance, during one of the early TypeScript WODs, I remember struggling to get my function to produce the correct output. Instead of the clean, structured result I expected, my code was returning a messy, jumbled output, and I couldn’t pinpoint where I went wrong. With the clock ticking, I didn’t have the luxury of spending too much time troubleshooting, so I turned to ChatGPT for a quick assist. I remember typing something like, “Here’s my TypeScript function, but it’s not returning the expected output. Could you help me figure out where the problem might be?” ChatGPT walked me through the logic step by step, highlighting where my approach was slightly off and suggesting a cleaner way to structure my function. It was a bit of a last resort, but it helped me get back on track and finish the WOD on time, which was a huge relief.
3. In-class WODs
I’m not a big fan of time pressure, especially when my grade is on the line, but I can’t deny that it gives me a bit of an adrenaline rush. In these high-stakes moments, I often turn to AI for a quick sanity check or a bit of guidance when I’m stuck. I always try to work through the problem on my own first, but if I find myself spinning my wheels for too long, I’ll ask ChatGPT for a nudge in the right direction. Sometimes, it’s as simple as confirming a small detail I might have overlooked, and other times, it’s about untangling a logic error that’s throwing my entire solution off.
For example, during the Ko Hana mock-up page WOD, which had a similar structure to the Murphy mock-up page practice WOD, I felt pretty confident going in. However, just to be safe, I ran my final code through ChatGPT along with the WOD’s instructions to make sure I didn’t miss any small but important details. I remember typing something like, “Here’s my Ko Hana mock-up code. Could you check if I’ve missed any key details from the instructions?” ChatGPT pointed out that I had forgotten to underline the navbar contents, which was a seemingly minor detail but one that could’ve cost me points.
4. Essays
I’m not the best when it comes to grammar and structure in essays, so I’ve developed a little system to help me polish my writing. I like to start with a step I call “type it away,” where I just dump all my thoughts onto the page—everything I want to say or use to answer the prompt. It’s a messy but honest first draft, capturing all the ideas I want to include without worrying too much about the wording or structure. Once I have that rough draft, I run it through ChatGPT to refine the structure, tone, and phrasing, making sure the piece flows well and captures the tone I’m aiming for. Finally, I pass it through Grammarly for a final grammar check, catching any leftover typos or awkward phrasing. And just like that, the essay is ready to go!
For example, this essay I wrote called Meet Your Perfectionist Coder is a piece I poured my heart into for this class. I knew exactly what I wanted to say as soon as I saw the prompt, so I jumped straight into my usual process. I dumped all my thoughts onto the page and then ran the draft through ChatGPT with a prompt like, “Could you improve this for me?” to help tighten the structure, tone, and phrasing. Finally, I ran it through Grammarly for a final polish.
5. Final Project
For the final project, Sync’d Study, I relied heavily on AI throughout the development process. I mainly used two AI tools: ChatGPT for most of my work and GitHub Copilot for minor tasks within VSCode. ChatGPT became my go-to for troubleshooting stubborn errors and refining the various pages of our project. It’s like having a second pair of eyes to catch the little things I might have overlooked—whether it’s remembering the correct way to import a module, fixing an ESLint error, or correcting a TypeScript syntax mistake.
For example, when my team and I were struggling with the authentication setup for the project, we turned to ChatGPT with a prompt like, “How do I handle user authentication in our Next.js app using Supabase?” It walked us through setting up secure user sign-ups, logins, and admin sign-ins, which was a critical part of our project. ChatGPT also helped us figure out the best way to structure our API routes and manage user sessions, saving us from hours of trial and error.
6. Learning a concept or tutorial
Not just in ICS 314, but in every class, I find myself relying on AI tools like ChatGPT to break down complex concepts into simpler, more digestible pieces. Whenever I come across a topic that feels too advanced or just doesn’t click right away, I turn to AI for a more straightforward explanation, often using prompts like, “Can you explain this to me like I’m a beginner?” or “Break this concept down step by step.” It’s like having a teacher who’s always available, ready to guide me through the tricky parts, no matter the time or how many follow-up questions I have.
I’ve always considered myself a visual learner, someone who needs to see the pieces fit together rather than just hearing technical terms thrown around. For example, when I first started learning React, I struggled to understand the basic flow of components, props, and state management. No matter how many times I read the tutorials, the ideas just felt abstract and disconnected. But when I asked ChatGPT, “Can you explain the basics of React to me in a way that’s easy to understand?” it broke things down into manageable chunks, using analogies like “components are like building blocks” and “props are the data you pass between them” that made the whole concept much more approachable. Moments like these have been game changers for me, making the learning process less overwhelming and a lot more rewarding.
7. & 8. Answering a question in class or in Discord & Asking or answering a smart-question
I’ve never really been the type to ask or answer questions on Discord or in class. It’s not that I don’t have ideas or opinions—I just tend to get a bit shy or nervous when speaking up in front of a large group. There’s always that little voice in the back of my mind, worrying about saying the wrong thing or not being as clear as I’d like to be. Because of this, I don’t always use AI in the same way some of my classmates do, but I do find myself turning to ChatGPT when a professor asks a question that piques my curiosity. For instance, when we covered topics like “Why is risk management important for software development projects?” or “What is the mythical man month?” I might have a rough idea of the answer, but I’ll often ask ChatGPT to “Explain why risk management is crucial in software development” or “Summarize the concept of the mythical man month” to confirm my understanding. It’s a way of validating my thoughts and filling in any gaps in my knowledge.
9. Coding Examples
When I need coding examples, I usually start by checking the tutorial sites provided on the class website. These resources are often specifically tailored to the concepts we’re learning, which makes them a good first stop. Outside of those, I also rely on sites like GeeksforGeeks or Stack Overflow, which are great for finding code examples and quick solutions to common coding problems. Of course, it’s often faster to just ask AI like ChatGPT for help, but I still find myself going back to these tutorial sites. I like the structure they provide, and it helps me get a better understanding of how a particular component or function works, rather than just copying and pasting code. For example, when I needed to figure out how to set up a navbar in React Bootstrap, I went straight to their official docs at React Bootstrap Documentation to get a more complete picture of how it should be implemented. Overall, it’s a habit I’ve built to remind myself of the proper syntax and structure, rather than just jumping to quick fixes.
10. Explaining Code
Whenever I come across a line of code that just isn’t clicking, my first instinct is to try to figure it out on my own. As I’ve mentioned before, I believe it’s important to wrestle with a problem before jumping straight to a solution, as it helps me build a deeper understanding of the concepts behind the code. That said, if I find myself stuck for too long, I’ll eventually turn to AI tools like ChatGPT for guidance. For example, I remember first encountering methods like map() and filter() in React. At first, I thought I understood them, but when they came up again in class, I realized I was a bit lost. I tried rereading their definitions, hoping the pieces would fall into place, but it just left me more confused. So, I decided to ask ChatGPT something like, “Could you explain map() and filter() in simpler terms?” It broke it down step by step, cutting through the fog of overthinking and helping me see the logic behind these methods. It clarified how map() is used to transform each element in an array and how filter() is used to create a new array based on a specific condition, which finally made the whole concept click for me.
11. Writing Code
I rarely relied on AI to write code for me, preferring to tackle the logic myself. However, I’ve found it can be a real time-saver in situations where the code is more repetitive, like in the TypeScript 1 WOD. For example:
if (windChill >= 32) {
message += "No Risk - Minimal danger of frostbite.";
} else if (windChill < 32 && windChill >= 16) {
message += "Caution - Increased risk of hypothermia over prolonged exposure.";
} else if (windChill < 16 && windChill >= 0) {
message += "Moderate - Frostbite possible on exposed skin within 30-45 minutes.";
} else if (windChill < 0 && windChill >= -20) {
message += "High - Frostbite possible within 10-30 minutes.";
} else if (windChill < -20 && windChill >= -40) {
message += "Very High - Frostbite likely within 5-10 minutes.";
} else if (windChill < -40) {
message += "Extreme Danger - Frostbite possible in less than 5 minutes. Exposed skin freezes rapidly.";
}
In cases like this, where the structure is already clear to me, but there’s not enough time to type everything out and double-check the logic during an in-class WOD, I would ask an AI like ChatGPT to “Draft the if-else logic for wind chill warnings.” It’s not about skipping the problem but about being efficient when the clock is ticking.
Another example, though I’m not sure if this technically counts as “writing code,” is when I run into formatting issues, like those frustrating ESLint indentation errors. Rather than manually adjusting every line, I often rely on GitHub Copilot to quickly clean things up. It’s a bit of a time-saver, especially when the problem is more mechanical than logical, and I’d rather focus on the actual functionality of the code. So, while I generally prefer to work through the code myself, there are definitely moments when leaning on AI feels like the smarter move, whether it’s for speeding through a repetitive task or untangling a particularly messy block of code.
12. Documenting Code
I never really ask ChatGPT or any AI to document my code, mainly because I see comments as a way to communicate my thought process or remind myself (or others) what specific lines of code are doing. It’s a habit I’ve developed to make my code easier to revisit and understand later, especially when coming back to a project after a long break. I like the idea of leaving a trail of breadcrumbs for my future self or anyone else who might work on the project, making it less of a mystery when trying to debug or extend the code.
That said, I’m not sure if this counts, but when I share a code snippet with AI to explain it to me, I sometimes ask it to “Comment each line” or “Document the function” so I can fully grasp what each piece of code is doing. For example, when a WOD solution is provided and I still find myself puzzled by certain parts, I might type something like, “Could you walk me through this code and add comments to explain what each line does?” It’s not exactly the same as having it document the code for me, but it definitely helps me break down the structure and purpose of each line, reinforcing my understanding as I read through the explanations.
13. Quality Assurance
We’ve all been in that frustrating situation where a single bug can grind progress to a halt, especially when the error message isn’t clear about which line or file is causing the problem. In these cases, I often turn to AI for help. As I’ve mentioned before, I try not to spend too much time chasing down a single issue, particularly in larger projects where the codebase is spread across multiple files.
For example, during our final project, Sync’d Study, debugging became a real challenge. With so many interconnected components, even a small mistake in one file can ripple through the entire project, leading to a cascade of confusing errors. In these moments, I found it much more efficient to drop the entire block of code into ChatGPT and ask for guidance, rather than manually combing through each file to find the culprit. One specific example was when we ran into an issue with our schema.prisma file. We struggled to figure out why it wasn’t migrating or seeding properly, which was a critical part of our database setup. After multiple failed attempts to troubleshoot it ourselves, I turned to ChatGPT with a prompt like, “Our schema.prisma file isn’t migrating or seeding correctly. Could you help us figure out why?” It walked us through a series of possible issues, including checking our data types, relation mappings, and database URLs.
14. Other uses in ICS 314 not listed
I work as a student advisor, which means I send a lot of emails. Whether it’s reminding students about their mandatory advising sessions, following up on what we discussed during an appointment, or helping my two supervisors draft messages for larger groups, I’m constantly communicating through email.
And, just like with writing essays, I sometimes find myself second-guessing the tone or wording. That’s when I’ll turn to AI for a bit of polish. I might ask something like, “Can you improve this email?” or “Can you make this message sound friendly and professional?” It’s a small step, but it makes a big difference in making sure my messages come across clearly and respectfully, while still sounding approachable.
AI has definitely had an impact on my learning experience, especially as I’ve gotten deeper into software engineering. It’s become one of my go-to tools for breaking down complex concepts and finding quick answers when I’m stuck. For example, when I first started learning React, I found the idea of components, props, and state management a bit overwhelming. No matter how many times I replayed the lectures, the pieces just didn’t fit together. But after asking ChatGPT to explain it in simpler terms, everything started to click. Beyond just comprehension, AI has also pushed me to think more critically about my code. It’s one thing to have an AI generate code for me, but it’s another to understand why that code works. I’ve found that using AI for quick checks or to confirm my logic forces me to be more intentional about how I approach problems. That said, relying too much on AI can be a double-edged sword. There’s a fine line between using it as a helpful guide and leaning on it as a crutch. I’ve had to remind myself not to reach for AI too quickly, so I don’t miss out on the learning process. Overall, though, it’s been a valuable tool, helping me develop my skills and build confidence as a programmer.
Outside of ICS 314, I’ve seen practical applications of AI in various real-world projects and collaborative activities. One example that comes to mind is the Hawaii Annual Code Challenge (HACC), where teams work together to solve real-world problems using technology. In these hackathons, AI often plays a critical role, whether it’s automating data analysis, improving user experiences through personalized recommendations, or enhancing security through anomaly detection. AI can be incredibly effective in addressing real-world software engineering challenges. For instance, it can significantly speed up debugging, streamline code reviews, and even predict potential bugs before they become major issues. It’s also great for automating repetitive tasks, freeing up developers to focus on more creative aspects of their projects. However, the effectiveness of AI really depends on how well it’s integrated into the workflow and the quality of the training data it’s based on. In my own experience, AI has been a valuable tool for overcoming technical roadblocks. While it’s not a perfect solution for every problem, it can definitely make a big difference in the speed and quality of software development.
One of the challenges I’ve encountered when using AI in this course is that it sometimes struggles to interpret exactly what I’m looking for, especially if my prompt isn’t specific enough. If I ask something too general or don’t break the problem down into smaller parts, the responses can come off as a bit too polished or overly complex, trying to anticipate my needs without fully understanding the context. This can be more frustrating than helpful, particularly when I’m looking for a straightforward, precise answer.
For example, there was a time during Murphy’s Mockup WOD–I can’t quite remember if it was the React or Next.js version–when I ran into a bit of a mess. I asked ChatGPT to help me recreate the layout based on the mockup provided in the instructions, hoping to save some time. While it technically built the page, it started adding extra elements I never asked for, like a navbar that looked nothing like the mockup and a footer with extra content I didn’t need. It felt like it was trying to be too clever, adding design choices that didn’t match the instructions, which ultimately made things more confusing. In the end, I had to go back and strip out all the unnecessary elements, which took more time than if I had just built it from scratch. It was a good reminder that while AI can be a huge help, it doesn’t always capture the exact vision you have in mind, especially when you’re trying to match a specific style or layout.
That said, I think there’s a real opportunity to integrate AI more effectively in software engineering education. For example, if AI tools could better understand the context of specific assignments or the coding style expected in a course, they could provide more targeted, context-aware assistance, helping students stay on track without introducing unnecessary complexity.
Both traditional teaching methods and AI-enhanced approaches have their strengths and weaknesses when it comes to software engineering education. Traditional methods, like lectures and textbooks, provide a solid foundation for understanding core concepts and theories. They offer a structured approach that many students appreciate, with clear expectations and well-defined learning paths. However, this approach can sometimes feel rigid or out of touch with the rapidly changing tech landscape.
In contrast, AI-enhanced learning tools like ChatGPT, GitHub Copilot, and interactive coding platforms offer a more personalized and responsive learning experience. They can provide instant feedback, adapt to different learning paces, and even suggest code snippets, making it easier for students to grasp complex topics. This kind of immediate support can be especially helpful in a field like software engineering, where practical skills and real-time problem-solving are critical.
When it comes to engagement, AI tools tend to hold an edge, as they allow students to actively participate in their learning process, rather than just passively absorbing information. This hands-on approach can lead to better knowledge retention, as students are more likely to remember concepts they’ve applied in real-world scenarios. However, without the structured guidance of traditional methods, there’s a risk of becoming too reliant on AI, potentially missing out on the deeper understanding that comes from struggling through a problem.
Ultimately, the best approach likely involves a blend of both. Traditional teaching provides the necessary theoretical background, while AI tools can help reinforce that knowledge through practical application, giving students a more well-rounded and adaptable skill set.
The future of AI in software engineering education is full of potential, but it’s not without its challenges. As AI continues to evolve, it has the potential to transform how students learn and practice coding, making the process more personalized, efficient, and engaging. For instance, we’re already seeing AI tools like ChatGPT and GitHub Copilot that can assist with code generation, debugging, and real-time feedback, helping students overcome roadblocks and gain confidence in their skills.
One major advantage is that AI can provide instant, context-aware support, which is especially valuable in fast-paced environments like coding bootcamps or in-class WODs. It can also help bridge the gap between theory and practice, guiding students through complex algorithms, data structures, and design patterns with more interactive examples. This kind of personalized learning can lead to faster skill development and deeper understanding, which are critical for aspiring software engineers.
However, there are also challenges to consider. One of the biggest concerns is over-reliance on AI, where students might become too dependent on these tools for problem-solving, potentially missing out on developing their critical thinking and debugging skills. There’s also the risk of AI reinforcing bad habits if it suggests suboptimal or insecure code patterns. To address these challenges, future AI systems should focus on promoting best practices, encouraging deeper learning, and providing more context-aware guidance. This might involve integrating AI more closely with traditional teaching methods, creating a balanced approach that emphasizes both the fundamentals and the practical application of code.
Looking back at my journey through ICS 314, it’s clear that AI has played a significant role in my learning experience. From breaking down complex concepts to helping me polish my essays, it’s become an essential tool in my academic toolkit. However, it’s not just about convenience or cutting corners—it’s about enhancing my understanding, building confidence, and becoming a more efficient programmer. While I still believe in the value of struggling through a problem to truly grasp it, I’ve come to appreciate the balance that AI provides. It’s a powerful ally, one that complements my efforts rather than replacing them. It’s helped me bridge gaps in my knowledge, streamline my workflow, and tackle challenging projects like Sync’d Study without getting overwhelmed by the technical details. As I move forward in my software engineering journey, I know I’ll continue to rely on these tools, not as a crutch, but as a supportive partner in my growth. After all, the goal isn’t just to write code, but to write it thoughtfully, confidently, and with a deeper understanding of the craft.
This essay was written with the help from AI. I collaborated with AI to help brainstorm and organize the structure of this essay, but all the final content, voice, and personalization were reviewed and tailored by me.