
Artificial Intelligence (AI) is changing how education is taught, especially in subjects like Software Engineering where problem-solving, creativity, and technical precision are things we need to recall. In the context of ICS 314, AI was what guided me through my learning journey. By using AI tools–mostly ChatGPT– I was able to access live guidance and help with my assignments, which at first was challenging to get used to since I didn’t want to heavily rely on ChatGPT to generate things for me. Using AI has become increasingly useful in Software Engineering because of its ability to help with debugging, generating, and auto-completing a line of code that has an error, providing explanations or examples for complex concepts. In ICS 314, I take it as an advantage in different ways: to learn new concepts, debug issues, brainstorm project ideas, and refine my understanding of software engineering concepts. Each interaction with AI, whether through a structured task or casual experimentation, brought new insights into how these tools can enhance learning while also revealing their limitations. This essay reflects on how I integrated AI into my coursework, analyzing its impact on my learning process, its practical applications, and its broader application for software engineering education.
Doing the WODs was one of the most stressful experiences for me because it required applying newly learned concepts under timed conditions. One of the hardest WODs was E18, which focused on functional programming and underscore.js methods. I struggled to understand how functions like .pluck and .map worked within the constraints. To tackle this, I asked ChatGPT for help: “How do you use underscore.js .pluck to extract values from an array of objects?” The response included clear examples, like extracting student names from an array of student objects, which gave me the confidence to start. However, the WOD also required chaining multiple functions, such as combining .filter and .map into a single pipeline. This added complexity meant I had to experiment further, as the AI’s suggestions were only partially helpful. Using AI in this process was both helpful and challenging. It saved time in understanding documentation and gave me a starting point, but it also required me to critically evaluate and adapt its output. This iterative process—consulting AI, modifying its suggestions, and testing my understanding—ultimately improved my grasp of functional programming. I learned that AI works best as a guide, not a shortcut.
The in-class practice WODs were designed to reinforce course concepts and prepare us for more challenging tasks. During these sessions, I experimented with GitHub Co-Pilot. For example, when working on a JavaScript exercise to manipulate arrays, I began by commenting my intent: “Sort an array of numbers in descending order and remove duplicates.” Co-Pilot quickly suggested a function using sort and filter together. While this was a good starting point, I noticed it didn’t handle edge cases like empty arrays or non-numeric values. I improved the code by adding type-checking and logic to make it more robust. In another session, Co-Pilot suggested using the reduce function to aggregate data. Although the initial implementation worked, I realized it wasn’t efficient for large datasets. This led me to research alternatives, blending Co-Pilot’s suggestions with my thinking. Though, through these experiences, I learned that AI tools like Co-Pilot are excellent for generating quick, functional code snippets. However, their lack of contextual understanding limits their usefulness. I discovered the importance of looking through AI-generated code and using it as a head start for deeper understanding rather than a final solution to my assignments.
In-class WODs were unique because they emphasized speed and accuracy under timed conditions. To meet these challenges, I always try not to use AI tools during the sessions, but the majority of the time I use them to guide me with my coding. However, I applied concepts and strategies we had practiced in class. While it was tempting to turn to ChatGPT or Co-Pilot for quick fixes, I realized that relying on AI could slow me down or distract me from the main goal: improving my problem-solving skills under pressure. Looking back, this decision was important for building self-reliance and confidence. Working without AI forced me to think critically, identify gaps in my understanding, and develop solutions independently. While AI could have offered shortcuts, I valued the chance to test my abilities and grow through the challenge, even though sometimes I break through and use it from time to time. This experience taught me the importance of balancing AI use with personal effort, especially in high-pressure situations where quick thinking and adapting are important.
AI had a significant impact on my productivity and creativity in essay writing. For instance, when writing about functional programming, I began by asking ChatGPT: “What are the main benefits of functional programming in JavaScript?” The response outlined key advantages like immutability, cleaner code, and reusable, composable functions—providing a strong foundation for my essay. To add depth, I used follow-up prompts such as: “Can you give real-world examples of functional programming in JavaScript?” and “What are the trade-offs of functional versus imperative programming?” These responses encouraged me to think critically and explore new perspectives. For example, I learned how functional programming is applied in Redux to manage state in React applications—a real-world example I included in my essay. While AI served as a valuable brainstorming tool, I deliberately rewrote and expanded on its outputs to ensure my essays reflected my voice and understanding. This approach not only enhanced the quality of my writing but also deepened my engagement with the material.
The final project in ICS 314 was one of the most collaborative and creative aspects of the course, with AI playing a key role in our team’s workflow. During brainstorming, we used ChatGPT to generate feature ideas for our productivity-focused task management app. For example, I asked: “What innovative features could a task management app include to improve user productivity?” The AI suggested ideas like time-blocking, priority tagging, and real-time collaboration, some of which became core features in our project. During implementation, GitHub Co-Pilot helped streamline repetitive coding tasks. For instance, when setting up API endpoints, Co-Pilot generated boilerplate code for CRUD operations based on my comments, saving us time to focus on refining functionality. However, some suggestions—like handling asynchronous API calls—were inefficient, requiring us to rewrite the logic for better performance.
ChatGPT was also invaluable for debugging. When we faced issues with our authentication flow, I pasted the error message into ChatGPT and asked for help. The AI suggested several solutions, one of which helped us identify a misconfigured environment variable. This experience showed how AI can enhance collaboration by reducing repetitive work and offering quick solutions to technical problems. However, it also highlighted the importance of teamwork and critical thinking, as we often had to evaluate and adapt AI-generated suggestions to meet our project’s unique requirements.
AI was helpful when learning new concepts and teaching my self new things, especially React.js. When I struggled with understanding useEffect, I turned to ChatGPT as a tutor. I asked: “How does the useEffect hook work in React, with examples?” The response broke it down step by step, including a practical example of fetching data from an API and updating the state. This explanation cleared up many of the misunderstandings I had from tutorials and documentation. What made this experience even more valuable was the ability to ask follow-up questions. For example, I asked: “Why does useEffect run multiple times when the dependency array is empty?” The AI explained the nuances of React’s rendering cycle and how it impacts useEffect. This interactive, iterative process felt like having a personal tutor, making complex topics more approachable and far less intimidating.
Using AI to assist with answering questions in Discord was another valuable experience. For example, when a classmate asked about resolving ESLint errors, I used ChatGPT to validate my understanding before responding. I asked: “How do you resolve common ESLint errors in React projects?” The AI provided a clear explanation of best practices, including configuring .eslintrc and using plugins like eslint-plugin-react. Armed with this information, I was able to provide a concise and accurate answer in Discord, which my peers found helpful. This process demonstrated how AI can enhance peer learning by improving the quality and confidence of my contributions. However, it also highlighted the importance of integrating personal experience to ensure responses are both relevant and practical.
Before asking or answering smart questions in class or on Discord, I often used AI tools like ChatGPT to refine my thoughts and ensure clarity. For instance, I wanted to ask about improving performance when handling large datasets in JavaScript, but I wasn’t sure how to frame the question. To prepare, I asked ChatGPT: “What are efficient techniques for handling large arrays in JavaScript?” The AI suggested methods such as lazy evaluation, batching, and memoization, providing a deeper understanding of the topic. Using these insights, I framed my question more effectively in class, focusing specifically on the trade-offs between these techniques. This led to a more engaging discussion and a better understanding of the practical applications of performance optimization strategies. Similarly, when answering a peer’s question about managing state in React applications, I used ChatGPT to validate my explanation, ensuring that I included key concepts like the importance of immutability and state reducers. By using AI in this way, I was able to contribute more meaningfully to discussions. It gave me confidence that my questions and answers were well-informed, while also providing an opportunity to clarify and expand my knowledge.
When practicing with underscore.js or preparing for WODs, I frequently used ChatGPT to generate examples. For instance, when I needed to practice chaining methods like .map, .filter, and. reduce, I asked: “Show how to chain underscore.js functions to manipulate data.” The AI responded with a clear and detailed example, demonstrating how to filter an array of numbers, double the filtered values, and then calculate their sum.
I adapted this example to create variations that aligned more closely with course assignments. For instance, in one exercise, I modified the AI-generated code to work with an array of objects, extracting specific fields before performing operations. This hands-on adaptation helped me internalize how chaining works and how underscore.js functions can be combined for more complex data manipulations.
These experiences highlighted the practical value of AI as a resource for learning and experimentation. While AI-generated examples provided an excellent starting point, the process of customizing and extending them was where the real learning happened.
While collaborating with my teammates on the final project, I often found myself needing to explain complex pieces of code to others. When I struggled to articulate the functionality of a particularly intricate function, I turned to ChatGPT for assistance. For example, I pasted a block of code and asked: “Can you explain what this function does step by step?”
The AI provided a detailed breakdown, explaining the logic in a way that was easy to understand. This not only helped me explain the code more clearly to my teammates but also gave me a deeper appreciation for its structure and purpose. In one instance, the function involved a series of nested loops and conditionals to process a user’s input data. ChatGPT’s explanation helped me simplify the logic and suggest improvements to make the code more efficient. This experience underscored the value of AI as a tool for demystifying complex code. It also reinforced the importance of communicating effectively about code, particularly in collaborative settings where clear explanations are key to team success.
GitHub Co-Pilot became a powerful ally for writing repetitive or boilerplate code, such as setting up API endpoints or handling form validations. For instance, when I was tasked with writing a set of CRUD operations for a database, I began by typing comments like “// Create a new user in the database” and “// Fetch all users from the database.” Co-Pilot generated functional snippets for each endpoint based on these comments, saving me hours of manual work.
However, I also encountered challenges with Co-Pilot’s suggestions. In one case, it generated a function for handling asynchronous operations but failed to include error-handling logic. Recognizing this limitation, I added try-catch blocks and other safeguards to ensure the code met the project’s requirements. This process reinforced the need to critically evaluate AI-generated code, treating it as a starting point rather than a finished product.
The combination of speed and flexibility that Co-Pilot offered was invaluable during the final project, allowing me to focus on more creative and complex aspects of the codebase.
Documenting code is often an overlooked but essential part of software development, and ChatGPT proved incredibly useful in this regard. For example, I used prompts like “Generate JSDoc comments for this function” to produce clear and concise documentation for our project. By pasting in a function, the AI generated descriptions of its parameters, return values, and overall purpose.
While the AI-generated comments were helpful, they sometimes lacked the specificity needed for our project’s unique context. For instance, in one case, the AI described a function as “fetches user data,” but I needed to clarify that it fetched data based on specific query parameters. I revised the output accordingly, ensuring that the documentation was both accurate and useful for my teammates.
This process highlighted the importance of maintaining consistency and accuracy in code documentation, as well as the value of AI as a productivity booster for such tasks.
Debugging was one of the most frequent and impactful ways I used AI in ICS 314. Whenever I encountered syntax errors, logic bugs, or unexpected behavior in my code, I turned to ChatGPT for assistance. For example, I encountered an issue where a React component wasn’t re-rendering as expected. I pasted the relevant code snippet into ChatGPT and asked: “Why is this component not updating when the state changes?” The AI quickly identified the problem: I had mistakenly used a mutable variable within a useState hook, which prevented React from detecting the change. It suggested a solution involving the correct use of immutability, which resolved the issue. In another instance, I used ChatGPT to debug an API call that was returning an empty response. By pasting the error message and code, I received a detailed explanation of possible causes, including incorrect headers and improperly configured endpoints. The AI’s guidance saved me hours of trial and error, allowing me to identify and fix the problem efficiently. These experiences demonstrated the immense value of AI as a debugging assistant, particularly for identifying subtle errors and providing actionable solutions. However, I also learned to cross-check its suggestions, as they weren’t always perfectly tailored to my specific scenario.
Beyond these specific tasks, I found other creative ways to integrate AI into my learning process. For example, I used ChatGPT to generate test cases for functions by asking: “Write edge cases for this sorting algorithm.” The AI provided a range of scenarios, including empty arrays, single-element arrays, and arrays with duplicate values, which helped ensure the robustness of my code. Additionally, I used AI to brainstorm potential essay topics and refine project ideas. For instance, when our team was exploring features for the final project, I asked ChatGPT: “What are some unique ways to improve task management apps?” The suggestions included gamification elements and AI-based task prioritization, which inspired us to incorporate similar features into our project. These unconventional uses of AI added a layer of creativity and innovation to my coursework, demonstrating its versatility as a learning and productivity tool.
The incorporation of AI into ICS 314 had a profound impact on my learning experience. By providing instant feedback, alternative perspectives, and practical examples, AI tools accelerated my comprehension of complex topics and improved my problem-solving skills. For instance, using ChatGPT to learn React hooks or debug issues allowed me to quickly identify gaps in my understanding and address them effectively.
However, the experience also taught me the importance of balancing AI assistance with independent learning. Over-reliance on AI can hinder the development of critical thinking and foundational skills, particularly in scenarios where AI outputs need to be heavily adapted or validated. By consciously using AI as a supplement rather than a crutch, I was able to enhance my understanding without compromising my ability to work independently.
Overall, AI tools enriched my learning process, offering new ways to approach challenges while encouraging me to think critically and creatively.
Outside of ICS 314, I found practical applications for AI in real-world projects and collaborative activities. During the HACC hackathon, for example, I used ChatGPT to troubleshoot an issue with a third-party API integration. By pasting the error message and relevant code, I received targeted advice that helped resolve the problem quickly. Similarly, I used AI to brainstorm project ideas and refine user interface designs, enabling my team to focus on execution. These experiences highlighted the real-world value of AI as a productivity booster and problem-solving tool. By reducing the time spent on repetitive tasks and debugging, AI allowed me to focus on higher-level aspects of software development, such as feature design and user experience.
While AI tools offered significant advantages, they also presented challenges. One of the biggest limitations was the occasional inaccuracy of AI-generated content. For example, Co-Pilot sometimes suggested code that was inefficient or poorly suited to the problem at hand, requiring me to invest additional time in debugging and refinement. On the other hand, the opportunities for integrating AI into software engineering education are immense. Personalized learning systems, context-aware debugging tools, and collaborative AI assistants could revolutionize the way students learn and apply technical concepts. By addressing current limitations and promoting ethical use, educators can unlock the full potential of AI in the classroom.
Comparing traditional teaching methods with AI-enhanced approaches revealed the strengths and weaknesses of both. Traditional methods emphasize foundational understanding and critical thinking, while AI accelerates practical application and exploration. The combination of both approaches was particularly effective in ICS 314, fostering deeper engagement, stronger knowledge retention, and greater confidence in tackling real-world challenges.
Looking to the future, I see AI playing an even more significant role in software engineering education. Advancements in AI-driven tutoring, real-time collaborative tools, and intelligent project management systems have the potential to transform the learning experience. However, it will be essential to address challenges such as over-reliance and ethical concerns, ensuring that students develop the skills and independence needed to thrive in their careers.
My experiences with AI in ICS 314 were transformative, offering new insights into how technology can enhance learning and productivity. By integrating AI tools strategically and balancing their use with traditional methods, I was able to improve my understanding of software engineering principles while developing practical skills for real-world applications. As AI continues to evolve, its role in education will undoubtedly grow, offering exciting opportunities to reshape the way students learn and succeed. My recommendation is to embrace AI as a powerful tool for learning while fostering critical thinking and creativity to ensure a well-rounded educational experience.