Seasons change
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. :)

Spring time

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.

I quickly realized that web programming is pretty easy and extremely fun actually. I really enjoyed writing html and playing with css. I spent many, many hours creating pretty websites and learning css tricks. I was avoiding javascript at the time. For almost two years I was playing with front-end. And there was also a point when I realized that I need to conquer the php. Oh, that was the most hated language by me, ever. I picked a php book and started reading it. And I gave up near the beginning. I picked it up again. And gave up again. And picked it up, and gave up, again. I just hated the language, how awful its syntax it was, I didn’t understand how it was functioning and where php execution happens and I just ended hating every single part of it. I started reading the book between 6 and 12 times, I lost the exact count. And one day, I started the book again. And I managed to pass through the first few chapters. And I started reading about creating dynamic content via php. And I was amazed how powerful that concept is. When I realized how easy and nice it was to generate dynamic content, I finished the book in the next few days and moved to writing more advanced websites. I was slowly becoming good at it, I was very skilled with css and I learned Photoshop and Illustrator, and I thought that I would end up doing web design for a living; I wanted to do that for the rest of my life.

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.

I was just browsing the web, casually, searching for websites and inspecting their code and css tricks. I ended up on some web page that demonstrated something called webGL. I didn’t know anything about it. I saw a demo that showed bunch of cubes spinning, while arranged in a spiral shape. I didn’t have even the slightest clue how that was achieved, but it really interested me. So I started looking into this thing – webGL. I found Three.js and websites that had introductory tutorials for webGL. It all seemed very hard, some graphics cards were mentioned, buffers, a lot of code that I never saw before and all that in javascript. I told myself that I would have to learn that technology some time in my life, but not just now.

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…

Early summer

I’ve finished my webGL project, I’ve learned a lot about Three.js and the following summer was spent mastering javascript. I eventually fell in love with javascript and there’s a good chance that is still my favorite language (but I use C for real programming). For the next eight months or so, I was very confused by what’s happening inside the computer graphics, and my main mistake was that I was using engine from the beginning instead of focusing on the more low level stuff (closer to the drawing API and hardware). There were some textures and buffers mentioned, and something very hard called “shaders” which was way too abstract for me at the time, and there was some “post-processing”, some “lights”, and I didn’t understand why we needed to have ambient light and what is “Phong”, and how the hell 3d textures work. It was all too much and I just couldn’t connect the dots and figure out stuff. So one day, November 2012, I decided to start learning those shaders. Few days into it and my head imploded. Holy moly, I didn’t understand a thing. I would lie in a bed and read about shaders on the phone late into the night. And during the day I was trying to write and understand what is the thing with post-processing and how it was done. I felt my energy falling apart and my knowledge being insufficient to grasp all the concepts. I was ready to give up…

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.

Summer

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.