November 25th, 2015
I recently saw the talk of my friend, Dario Manesku, about his beginning with the programming, tries and fails and how he ended up where he is now, and so, inspired by that idea, I would like to share the information about my own path.
Winter (baby steps)
Fast forward around 17 years into my life, and I’m in my 7th grade, in Mathematical Grammar school. My whole life is revolving around my love to math at the moment. There’s a free school for programming and I go to some written test for those classes. I have no idea what programming is or how it functions. I haven’t done my test well and haven’t managed to do at least one programming question on the test, since I don’t know anything about it. Oh, well, you can’t do everything… That same day I went to my friend’s house and he tried to talk to me about programming, about some for loops and ifs, and I was very confused, to say the least.
Few days later, I still get an invite to go to the programming classes, because I managed to demonstrate how small my programming knowledge is, and that is what they were actually searching for. Okay, it’s about time I start preparing myself for that then. I go to my friend’s again and I ask him to show me some of that “programming” thing. He starts visual C# application from VS, and there is only one square and a button. You click a button, color palette gets drawn inside the square. I get super excited because I know for sure that that friend of mine wrote that abstract thing called code and he manually managed to get the pieces together and force that previously empty square getting filled with all those pretty colors. Immediately, I wanna make the same program. So he creates a new project and explains to me drag-and-drop toolbox and we make our form with that square and a button. It looks almost identical to the original application. He starts the application and I’m now ecstatic. I click the button and… nothing happens. I click it few more times and still – nothing. I am confused, disappointed, sad, and I start gazing into my friend’s eyes searching for the answers why nothing’s happening. He then tells me that I need to “write the code, to tell the computer what I want to do when button is clicked”. My entire world gets inverted and logic splatted against the wall. It’s my first experience with programming, ever, and it seems that it’s not that easy. You need to tell that button what it needs to do.
Looking from today’s perspective, you might say that I didn’t like the fact that you can’t just drag-and-drop a button and everything ends up automagically working, but I enjoyed the challenge, because I wanted to see those colors displayed so badly.
Several minutes later (or was it hours?), we managed to copy the application. It’s working and drawing colors. And so it began…
I think I need to thank my friend – Teodor von Burg, for showing me the application and helping me with a kick off. I would have never guessed that was the day my life slowly started changing, but nevertheless, I am grateful to where it’s led me to. Thanks, Teo. :)
Several months later, I finished those programming classes and got a certificate. But I didn’t want to stop there. I’ve invested some of my free time during the rest of the primary school and first half of the high school into programming. I was writing my own small applications and games. I was writing my own browser, alarm application and a virus. Sounds big, but those were actually child games, because apps were written really bad, I didn’t have neither enough experience nor knowledge how to do things properly. But, hey, you’ve got to start from somewhere, right?
There’s one particular thing that I remember sharply. There was a competition in the 8th grade, and everyone could submit their application. So I wrote my arabesque program. You could load an image, and that image gets copied in a 5×5 grid and an arabesque formation gets displayed. You could manually rotate each cell in a grid to try different arrangements. From today’s perspective, it is painful to remember that I was once actually proud of that app, because it was so silly and unimaginative. I thought that I would “sweep the floor with other contestants and get the prize”. It was hard for me to accept that I was just a beginner, because I saw applications made by other people. They were doing complex math problems, writing audio applications etc. My app looked ridiculous. I thought that I needed to do better. I didn’t even have a clue how they managed to write such complicated apps and I’ve realized that I needed to work more, to learn more.
There was a point during the summer break between the 10th and 11th grade when I got bored of application programming. I wasn’t satisfied any more. And then I remembered that a very long time ago, one other friend (he was few years older than me and was doing programming), mentioned that he was doing “web programming”. At the time, that sounded to me like he said “I’m programming entire Internet” and I thought that he was doing some super advanced stuff and that he was responsible to manage the Internet itself. I had no idea what a job of a web programmer is. So I Googled for it.
At the end of my 11th grade, I had my first job-like experience. I worked in a IT department of our city’s medical center. I was spending few hours a day printing whole bunch of papers. And that was it. I hated it. That was the time when I concluded that no matter what I do for a living, it must be a creative job. Not this. I was surprised that I enjoyed the feeling of a paycheck in my hands even though the job itself was boring and I hated it. But I didn’t want to get deceived, I remembered what I’ve told myself.
It was a final year of my high school and I needed to decide what I will write about for my final project. I had already made Android application sometime before and I could just write a little text about it and everything’s done. But something happened few days before that.
So I could use an Android application that was already done, or… I could learn webGL. The easy way, or the hard and interesting way? (Isn’t that what life is all about?) I was just too curious to know how I could make spinning cubes myself, so…
And one night, I came across an article that talked about implementation of a full post-processing pipeline, every single line of the code was explained and shaders were very detailed and well explained also. I was reading through an article, and as I was approaching to the end of it, I felt that beating of a heart and I was aware that I’m about to resolve every single dilemma I had at the moment. For the second time in my life, I felt that much incredibly nervous and excited about something. As soon as I finished the article, I started smiling like an idiot. After additional month of pain and confusion about shaders, I’ve finally managed to put the pieces together and understand how things function. I knew that I would spend quite some time with computer graphics since it excited me that much, and I’ve decided to write my own engine. Always go big, right? :D I remember boring my sister with explanations how post-processing works, even though she didn’t understand a thing I needed to “talk with myself” and reassure myself that I in fact did finally understand how it’s working.
It is now almost exactly three years since I felt that amount of joy because of the computer graphics, and almost four years in total since I started taking interest into graphics in general. I’ve dug deep into the theoretical aspect of the gfx and I focused my time onto research and physics behind the things. I know that I much more prefer experimenting with things and trying different techniques and ideas, than just making a product (I don’t play games that much, but I enjoy starring at their graphics). I am aware of the fact that’s not how games are made, they are a lot of tweaking and trying and then choosing what suits the needs. They are experimentation, but of a different kind than a research/academic. Nevertheless, I enjoy making pretty stuff. I love knowing the phenomena that lay behind everyday things and how to simulate those effects on computers. I like learning about materials, rendering algorithms and different optimizations. I like to spend my time thinking about those stuff. The time we spend simply thinking and reasoning about things is the most precious way we can spend our time, yet we do it so very rarely. Being creative and imaginative about the ways you see the problem, how you compare one problem against some other problem that is seemingly totally unrelated. How you build your knowledge and gain new views of the things, and then manage to put the pieces even better, that you can even explain things to other in a easy way. Then you reach a point when you have enough knowledge to doubt the fundamentals, to question their correctness and validity. I like asking questions that people don’t have an answer for or they avoid answering them because it would hurt the stability of their believes and work they are doing.
There’s also one more thing that I remember all to well that probably played a significant part in my pursue of the future career. At the end of the 11th grade, we had a physics exam, and the topic for it was – optics. For some reason, I really enjoyed that part of physics and I had no troubles learning lessons from the book. It was literally the first and the last time that I even learned things written in margins and separated as extracurricular knowledge and facts. I liked it. Yet, I did my exam and got a lowest mark in all 12 years of my pre-college education, and it was the lowest mark that you can theoretically get on a test (F). I was very angry at that, I made mistakes everywhere and none of my calculations went right. None! And few years later, I am doing graphics and optics still. I feel strong sense of irony in that, but it always puts a smile on my face when I remember that exam.
I see myself doing graphics in the years to follow, because there a few things that are still bugging me and I won’t give up until each and every one of them is cleared up. I enjoy graphics, and every time I implement some technique or read about it, I can feel the excitement. I am passionate about this field because there is something magical in the combination of the physics, math, programming and pure beauty involved. It’s fun to look at the things and know why they look the way the look.
One part of me is also very much into artificial intelligence. But I’m not talking about machine learning (even though that is a necessary part of it), but a creation of a truly intelligent system. Things like thinking, imagination or dreaming are also very interesting to me. And so is explanatory gap and problem of subjective perception. But currently, I want to devote my time to solving graphics just a bit more, and maybe some time in the future I’ll try and switch towards AI more.
So, today, I read graphics papers and articles on a daily basis, I write code and learn about good programming practices. I want to learn something new each day, and I try to do that. Several years ago I would never guess that I would end up doing graphics and making games. I didn’t realize that I love graphics that much until I started doing it (+ eight months more). One could say it caught me by surprise. And I really do love it.
Learned from mistakes
Do a creative job. Be passionate about what you do. If your interests get stale, then switch to something new. It is common for programmers to reorient their goals. Even for me, the pursue of finding the right area of programming that I would stick to wasn’t easy. There were four years when I thought I would make C# applications all my life. Then, for about three years, I was sure that I would end up as a web designer. And for the last three years, I’m pretty sure I’ll do some amount of graphics in my life, but I’m still not sure whether or not will I switch to AI completely some time in my life. So experiment with things, try different areas, languages, technologies, try being artistic, try, try, try… You never know where you’ll end up and what new thing you would enjoy doing unless you try. So be prepared to spend your free time finding your passion. It’s totally worth it, because it’s your life you’re investing in.
If you make mistakes, make them fast. If you don’t like something, then figure out why fast, then switch and then you’ll have more time to spend on other things, things that you’ll enjoy more. And if you find something that you like, spend some time doing it. Reading about it, playing with stuff, trying to be creative with what you know so far. It will pay off, and if you sincerely enjoy it, then why would you not do it anyway?
If you coarsely split one’s life into personal/emotional and professional/career life, then you’ll see that the job you’ll do during your lifetime is a pretty big thing. But it’s not about job itself, it’s about what makes you happy and what you can contribute to. And you want to do things you like, and it takes some time finding what those exactly are. So, find your passion and then do it.