My eyes ached from staring at the screen for so long. The code was starting to become jumbled and inscrutable. But my fingers continued their work, writing symbol after symbol, line after line, procedure after procedure. I was close; too close to stop before the finish. When the last expression was entered, I promptly saved and opened up the terminal. Compile! I was going through a rite of passage for computer programmers: writing a Lisp interpreter. It was not hard, since thousands of others had done it before. But I think I was unique in the way I went about it. Instead of writing yet another Scheme with the guidance of SICP, I thought up a new dialect, and set about implementing it from scratch using Haskell. Of course, I'm not saying that I did not receive any input at all. Articles and documentation were abundant on the internet, and the people in Freenode IRC possessed a lot of collective knowledge. I would consult them all the time when I ran into trouble and did not know what to do. “Argh.” I grunted as the error messages filled the screen. I rubbed my eyes, and focused. At times, I had wondered why I was doing this. I already finished AP Computer Science, and I wasn't exactly set on a career in software engineering or computer science. But somehow, I just had to finish what I started as an idealistic and naïve effort to “improve” on existing Lisps. Oh how naïve indeed. Existing dialects were well studied and widely accepted, so mine would have zero consequence. Upon further research, even the ideas that I hoped were original were revealed to have been thought of decades before. Nevertheless, I continued on. Who cares if I'm reinventing the wheel? This was educational. This required thought. Writing a program took much more effort than playing a game, watching a movie, or reading a book. As a result, it was also much more fun. “That ought to do it.” Nope, more errors. Once again, I went through the messages and tried to satisfy the compiler one bug fix at a time. From experience, I know that this is to be expected. I've been programming since my family bought its first computer a decade ago. Using a 20-year old book from my elementary-school library, I taught myself BASIC. After I moved to America, computers became an even more integral part of my life. After buying some more books, I taught myself C++ and Scheme. In my time as a coder, I learned two things. One: no first-draft code, except for the most simplistic of programs, will be error free. There's always bad syntax to correct, or a logic error to fix, or sometimes entire sections to rewrite. Two, every problem has a solution. The only thing preventing one from finding it is one's own lack of determination or time. Lately, I found myself applying these principles to other subjects as well. History and Science require as much independent reading and research as learning computer science from scratch. Essays and projects require as much restructuring and revision as maintaining coded programs. Math or physics problems require as much creative and logical thought as solving algorithmic challenges. “Whoo!” This time, compilation did not produce any errors. Finally, I started the resulting executable. As the REPL prompt greeted me, waiting with alacrity for my commands, I felt my heart beating. I entered some expressions, and they all evaluated to what they should. At least, it seemed so. Testing and refinement would come later; I needed sleep. I crawled into bed with a feeling of completion, and dozed off dreaming of what else I can accomplish in the future.