Why Should We Learn Algorithms in the AI Era?
I disliked the atmosphere of studying algorithms out of inertia just because previous generations had done so. I agree with the fact that new study methods must emerge in the AI era. Therefore, I wanted to create a structure where the learning curve rises steeply once you surpass the 'minimum absolute time' required to get used to something. Wouldn't surviving require learning faster and more through a learning method that was impossible before? So, I kept contemplating what exactly I should learn within this minimum absolute time, and it was narrowed down to the following three things:
- Computer Hardware
- Algorithms
- Practical Code Analysis
The minimum absolute time I considered is 6 months, up to a year. I believe that once this period passes, a starting line is created where I can seriously 'study' graphics or the source code of large, open projects like Unreal Engine, based on the background knowledge built here.
Making what I want to make right now and writing code is sufficiently meaningful, but I chose algorithms as the background knowledge to absorb even more.
I think studying algorithms is the first step in aligning the 'grain of thought' among developers. I'll write more about this later, but it is truly difficult for multiple people to align their thoughts in the same direction regarding a single plan. So, what is an algorithm? I consider it a kind of template. It's a formalized framework of thinking created by computer science while solving countless problems. By sharing this framework, the direction of problem-solving among developers converges to one place, and it becomes a base for utilizing previously proven efficient methods. Even if I don't use it immediately in practice, I am certain it will definitely be useful as background knowledge. That is why I learn algorithms.
This week's keywords were as follows: Arrays, Strings, Exhaustive Search, Recursion, Backtracking, Complexity (Big O, Time, Space), Sorting (Bubble, Insertion), Number Theory
The problem was that while I easily solved the basic and low-difficulty levels, the medium-difficulty ones were split between those I could solve and those I couldn't. It was hard because the level of application varied for each keyword, and especially for problems like the 'Tower of Hanoi', where it didn't intuitively resonate with me why I even had to solve it, I just didn't want to do them and couldn't immerse myself. I enjoyed solving application problems that tested whether I grasped new concepts, but when the difficulty got too high, I think I wandered off thinking, 'Do I really have to go this far?'. However, I should make an effort to accept up to the medium-difficulty problems as mandatory tasks assigned to me.
Since I was advised that algorithms require grasping the basic framework and thinking flexibly, I need to internalize the application methods of how to use this framework moving forward.
AI Team Project - Wednesday Coding Club -
I consider planning important, so I poured a lot of time into the planning stage. The hardest part during planning was making the 'grain of thought (direction)' point to the same place with my teammates. I had to explain the final output several times, unfiltered state my train of thought to get agreement on an idea, and find and show various references before I could fully convey my thoughts. The question that arose here is: right now, it's a team of 4 including myself, but in the future, when doing team projects with 30, 40, or even hundreds of people, can everyone really have the same goal for a single plan? What on earth is the company system that makes this possible? How can I carve my 4D or 3D ideas into 2D or 1D language to communicate them?
Looking closely, this feels similar to dealing with AI. It's like the process where even if you input the same prompt, each person's brain calculates and imagines it on its own. The precision used when dealing with AI and the attitude toward colleagues might surprisingly need to be the same. Perhaps it is time for a redefinition of the word 'collaboration'.
When writing the prompt for the proposal, we gathered together to write it, and went through a process of reviewing the proposal output by the AI together. I think it was an excellent choice because we could finally check what each other was thinking. The original plan was to actually build what each person imagined, bring it in, and then pick the best one, but that would have lowered overall productivity. Thanks to the process of refining the prompt together, it resulted in the team members' thoughts becoming more solid.
Afterwards, we divided the tasks generated by the AI into four parts, implemented the features on our respective local computers, and finally merged them into GitHub. What I felt here is the question of whether we really had to work in a fragmented manner in our own environments, when using the thread feature would essentially yield the same result as running four units on a single computer.
Separately from that, if we had first set up the overall database, which is the most fundamental, and then split the features into four and implemented them, it would have been a much smoother team project.
What I felt deeply during this project was the fact that 'there is no one who can take responsibility in an AI project'. The coaches asked, "Is it possible to create a project at a level that can be deployed trusting the reliability of AI?", and for that to be possible, it seemed that at the very least, you shouldn't use a tech stack you don't know. (Or if you don't know it, make sure to study it later.) A developer must take responsibility for what they have made, and to take responsibility, they must be able to directly read and verify the code themselves.
And a good developer using AI must share their trial-and-error process with the team to make the code robust. While using AI allows you to whip up a web page in a day, that doesn't mean you should set the project deadline to one day. I felt that the absolute time to verify the code and do R&D is essential. I strongly felt that I shouldn't think, 'I can produce the same quality of output in less time, so I'm done', but rather entirely change my perspective on saving time towards 'increasing perfection within the remaining time'.
In the end, while the fundamentals are the most important, I think it's really great to have time to code with AI every week in an AI era like these days. I want to utilize it more actively in the future!
p.s. This is the video material I used when conveying my thoughts on AI during the retrospective with my teammates. It is good to watch for reference.
