In regards to software engineering, which is an ever-growing, expanding, and evolving field, software engineers have to constantly learn new tools, techniques, frameworks, applications, etc. to keep up with the industry. What seems like every day, some brand new thing comes out that everyone needs to switch to in order to stay at the top of the competition. But at some point, we have to stop cramming our toolbox and ask ourselves, “how much of this do we really need?”
With the advent of artificial intelligence, or AI, to many it may seem that ChatGPT may very well be the only tool we need to be software engineers. Heck, software engineers may not even be needed in a couple of years. But as of right now, I think it would be beneficial for many software engineers to re-evaluate their use, or lack thereof of AI to see how much this wonder tool can really impact our work, negative or positive.
My first experience learning software engineering concepts and skills was in my first software engineering course in college, ICS 314 Software Engineering I. This was the first course I ever took that actively encouraged the use of AI in our coding assignments and projects. At first, I was in this stuck-up mental state of thinking that AI has no place in coding and should never be used in any real world application. I thought it was merely a novelty thing and that what it could generate would never match the level of what a real coder could do, so for the first half of the course I adamantly avoided the use of generative AI like ChatGPT, or Copilot, the AI recommended by the course.
After a while, however, it came the time to get started on our final project, which was to create a small-scale website using Meteor. Meteor is a full-stack framework that implements React for frontend and MongoDB for the backend database. I took charge in taking the first steps to model and implement a solid database schema, and almost immediately I ran into a problem I did not know how to solve.
Put simply, MongoDB allows you to create collections of JSON-like objects, called “documents,” each of which can contain a field and its corresponding value:
{
field: 'value'
}
Each document can contain as many of these fields as you want:
{
field1: 'value1',
field2: 'value2',
field3: 'value3',
...
}
Every document also has a field generated by MongoDB, called _id. The _id field is guaranteed to correspond to a value completely unique to that document:
{
_id: 'n4NAniZKC2SCdGp8j'
field1: 'value1',
field2: 'value2',
field3: 'value3',
...
}
While implementing our application’s database, one thing I ended up needing to do was to filter from the database all documents that had an _id field that equaled to some _id value in a list of _id values we had specified beforehand. This having been practically my first real experience working with MongoDB, I hit the docs and came up with… nothing. Either I simply didn’t know how to work a documentation site, or my fetus brain was not enough to be able to read slightly dense documentation. Regardless, I was unable to rack my brain for a solution.
After several days of pain and agony from trying a bunch of weird, quirky combinations of different coding techniques to accomplish this goal, I finally caved, and typed my first ChatGPT prompt:
In Mongodb, how do I find all documents that have an _id field that matches some value in a an array?
The answer:
In MongoDB, you can use the $in operator to find all documents that have an _id field that matches some values in an array. Here’s an example using the find method in the MongoDB shell:
// Assume you have an array of _id values
var idArray = [ObjectId("id1"), ObjectId("id2"), ObjectId("id3")];
// Use the $in operator to find documents with _id in the idArray
db.yourCollection.find({ _id: { $in: idArray } });
That’s it. “$in” was the answer. Three characters and a little bit of syntax research was all it took. It was at this moment that I realized, “hey, this thing is actually kind of useful.” Instead of being stuck on a single problem for several days, I could have asked ChatGPT and gotten the answer immediately.
After this, I immediately incorporated ChatGPT into my workflow following the rest of the project, and found it immensely useful. The following is a list of every chance I had to use AI in ICS 314, and explanations of my applications:
Meteor.call('methodName', arg1, arg2, (error, result) => {
if (error) {
// Handle error here
console.error('Error:', error.reason);
} else {
// Handle successful method execution here
console.log('Result:', result);
}
});
ChatGPT can be really useful, but also really detrimental to one’s learning. If you are just starting to learn the fundamentals of computer science, I think ChatGPT can actually set you back pretty far if you use it right off the bat. I am very grateful I started learning computer science concepts just as the advent of generative AI really took off. I was still learning and doing schoolwork the old-fashioned way, so I really had to study to excel in my early courses. But if I had access to ChatGPT in, say, my freshman year, my understand of computer science concepts would likely be much worse than it is now, as it likely would have discouraged me from studying and doing my homework assignments myself.
Another thing to consider is that real-world experience is something that can be a little challenging for students to obtain, so when writing code for homework, assignments, and projects, it can sometimes be difficult to know if we’re writing code that is acceptable in an industry environment or not. Personally, I would love to know if I am writing spaghetti code that is nearly incomprehensible to another human being. ChatGPT helped me a lot in this regard, as when I asked for real-world examples of certain coding techniques that I was familiar with, ChatGPT’s way of doing it would look way different from mine, and often cleaner and more readable. In this way, I think AI can really help bridge the gap between a student who’s still learning the basics of computer science and someone who has been in the field for years.
Alongside taking ICS 314, I did an REU (Research Experience for Undergraduate students) with a software engineering team that coincidentally uses React and Typescript, which is a super-set of Javascript. My learning experiences in ICS 314 was crucial to my success in this REU, and my experiences in this REU directly complemented my ICS 314 work as well.
During this REU, I was tasked with implementing small UI changes for a React application written primarily in Typescript. There was a ton of code that I had never seen before, but ChatGPT was extremely useful in deciphering a lot of Typescript syntax that I otherwise would have needed to spend hours upon hours of researching to figure out. I also used it to help me with my tasks in a manner very similar to that in ICS 314. Thus, I strongly believe AI has a proper place in a software engineering setting.
The foremost challenge I have with AI is not a challenge with AI itself, but with people, specifically me. Thankfully, I managed to narrowly escape the deathtrap of using AI to do my intro-coding course assignments, but looking forward, I fear I may grow to rely on AI for my future studies and work. If I do so, I may end up losing out on major opportunities to develop as a coder.
On the other hand, I think AI is kind of a double-edged sword. Despite having extremely destructive potential on a student’s learning experience, it can also drastically enrich it. If used and incorporated into learning correctly, I think it can surpass even some professors in not only teaching a course’s concepts, but being a resource and source for help. I can easily see myself asking ChatGPT for clarifications on future computer science concepts I may learn.
A typical lecture-based college course usually goes like this: a professor lectures in front of a hall full of dozens, maybe hundreds of people at once, and then the students go home, read the textbook, do the homework, turn in the homework, get a grade, rinse, repeat. It’s not a bad system, as it’s straight forward and easy to follow. But this presents a number of problems, particularly for the students. For one, there is a major disconnect between the professor and the students. The sheer number of students in some of these lecture-courses makes it impossible for the professor to remember every student’s faces, let alone their names. At this point, the professor might as well just record themselves lecture and upload it for the students to watch each semester, which some courses already do.
Here’s my hot take: this is fine.
Well, this is fine for the beginner-level courses. Intro courses exist to not only provide students the core fundamentals of their corresponding major, but now that AI is a thing, they can also indirectly filter out students that wouldn’t be a good match for the major. In regards to computer science in particular, if you don’t have the work ethic to study, learn, and research, and you’re just using AI to automatically complete all your coding assignments, you will probably not make it very far after the intro courses. Like I mentioned earlier, AI is a deathtrap for students learning the fundamentals, so only those with enough work ethic to at least write their own code will succeed.
However, this class structure will definitely not work for higher-level courses. Courses that cover more advanced topics, such as algorithms or software engineering, would work way better with a smaller scale classroom with perhaps two dozen people at most. This way, the students have a much deeper connection with the professor and therefore the concepts the professor teaches.
These types of courses can actually work really well with AI, provided the students know how to use it efficiently and effectively. The potential to cheat and ChatGPT everything is still there, but it will get progressively harder the more advanced and complicated the topics are. Thus, if students want to use ChatGPT to help with their coursework, they will need to know what ChatGPT is capable of, what it is not so capable of, and, I think this is especially important, be able to tell what answers the AI gives may be inaccurate.
If you think about it, if you can tell that a ChatGPT answer to a complex question is inaccurate, and if you can figure out which parts are wrong and replace them with correct parts, then that’s how you know you understand something. It doesn’t take much brainpower to paste a question to ChatGPT, copy its entire answer, and submit it. It often DOES take brainpower, however, to read through ChatGPT’s answer, completely understand it and why it’s correct or incorrect, and then be able to personalize the answer for your circumstances.
I think AI can be a great tool for learning. You just gotta know how to use it.
Discuss your thoughts on the future role of AI in software engineering education. Consider potential advancements, challenges, and areas for improvement.
As AI becomes smarter and smarter, it will become easier and easier to use. Software engineers will have endless opportunities to apply AI to their work as over time, AI like ChatGPT will likely develop enough to answer even the most detailed, difficult, and rigorous problems professors may give their students. Right now, I believe AI is best at providing detailed information that already exists on the internet or giving examples of certain concepts, but is not very good at answering more complicated problems. Eventually, AI will develop enough to be able to do this, and that will present its own benefits as well as concerns as AI gets ever so closer to replacing us humans.
Now begs the question: how exactly are you supposed to know how to use AI for education? To be honest, after spouting all this nonsense, I still don’t really know. This is all from personal experience, and my ability to use AI in my studies was not taught to me. But what about students who don’t have such experience? Who will teach them what they really need to learn on their own and what should they use generative AI for?
For a future ICS 314 course, I think it would be worth having a module teaching the ethics of using AI in software engineering. Take the feedback from the current students writing these essays, consider what may be the most important to keep in mind for students as they continue in their computer science degrees, and teach the future generations.