I get that sometimes:
And I know a lot of people who only seem to keep me in their Skype contacts because I help them with problems on a regular basis.
Wow. Thanks for the fame, but I would not consider me particularly good. I know the basics. No, probably not all of them. I dislike a lot of frameworks which are popular right now. I have my own opinion and I like to share it with everyone (even if you don't like it >:) ). I am not good. I just know a thing or two which helps me cheat my way around a lot of situations. It seems, that a lot of people think that would be a good thing, and yeah, it is handy!
So, let me explain, how I grew to who I am today. How I learned what I know now. This story is for everyone who wrote a question à-la "How do I become a FOO ninja? How do I become a master of BAR? How do I become good at BAZ? Where do I even start?" or always wanted to know my take on things.
Yeah. I know. I am 24 years old, so I am very inexperienced. Yeah, even then I already wrote an answer or two for these kind of questions. Practice. Practice even harder. Indeed, that might be the single most important message of this whole story.
Es ist noch kein Meister vom Himmel gefallen. (No master came out of thin air, yet.)
- German proverb
Being so young, how was I able to get so many up-votes and answer questions? And how can my (short) story help you practice? What should you do, what should you learn? Should you stick to web development, or should you learn some compiled language, like C++? Does anyone even need something like that in today's world? We have Electron. We have Cordova. You do not want to build an operating system any time soon, do you? So, as a matter of fact, wouldn't staying with one single language and all the concepts around it be the fastest way to become a master? Maybe. Then again, what does that make you? In my opinion, it makes you someone, who can learn stuff others invented, but you are missing out on being at the programming-front, building what moves the world tomorrow. I wouldn't call someone like that a "master", but someone who is very single-minded. Just like there is no good or bad in the world, the essence of becoming better is finding a healthy mix of many trades. There are people who fear they might get lost, learning too many things, but mastering none. Fear not, having a broad foundation is important and I guess most of the people with such fears are still young. You have a lot of years ahead mastering a skill or two! I am not a master of anything. But I know my way around and it's enough to get my job done. So read this little story about me and maybe you find your fears where just in your head and you are just on a track to becoming someone with a solid base.
My story begins with 16 y/o me. I was at "Gymnasium", a type of school in Germany, just three years away from the "Abitur", the graduation before you can start studying. At the time, I was a gamer. I already knew a thing or two about computers (my father bought and built my first computer together with me when I was two. I knew how to install programs and Windows before I even could read :D ). However I did not know anything really useful. No programming, no HTML, no nothing. So I decided I would like to take the computer science course at my school. Hell, never has a subject been more boring! My teacher talked about programming and something called "Delphi", how variables and simple math works. We used Borland Delphi 5. We learned how to build forms applications with the VCL (Visual Component Library, something like .NET, but without the VM). We built applications to calculate Pythagoras and other stupid math formulas (I hope my teacher won't read this ducks away). BORING. In my experience, it's the same for everyone. Programming is plain boring. There might have been some ideas of what I want to do with it, but I did not even know where to start :/
Until one fateful day. I was playing a game called "Metin2". A MMORPG full of twelve year old cheaters. I was one of them :D It kind of made the game fun to play because it's concept was based on lots of farming :( Before starting the game, I had to start a hack. Then I started the game. Then I had to ALT-TAB out of the game and start another hack. It was then, when I thought: This is stupid. Can't I do that better? Yep, I could I was able to write a Delphi program which automated the whole thing. AMAZING! I started my program, pressed a button, and just played the game. I improved the tool. I added more hack-combinations. I added music for the menu. I added a server from which the tool would download the latest versions and I distributed the tool to other annoyed people. They liked it, even though it was a hundred lines of very bad code, packed into ten MB of an un-optimized mess, playing annoying music on every single start. People liked it so much, that I decided to improve it even further. I added a premium version (I cannot even remember what feature would be "premium" about that tool). It was that simple tool which helped me and a bunch of other people. It really got me hooked on programming!
The second program I made at home, also bad Delphi, was a tool to list different TV shows I watched, planned to watch, or finished watching. It even had a video player and you could select videos yourself which would be played at random. I was so proud of myself! The third, fourth, etc. programs followed. Each of them something I thought was useful. Small tools which I could have downloaded from the cyberwebs, but decided to write myself. Then I started writing games. Pong. Snake. Space Invaders. Tetris. I didn't know nothing. I even used a graphics API directly at the time (DirectX10 D2D) without middleware. I implemented networking, saving current state, themes,... I read lots and lots of tutorials; and I had a lot of fun doing so! At the time, I even joined some game developers (I was 18 or so) and we had a good time exploring new ways of doing things. We all knew nearly nothing. While having fun, I learned PHP and JS at school and C++ for game development. We used a middleware called Ogre3D at the time, which is quite easy to use, but still too much work for newbs like us. We did not care and after a long time, we split up. But what I learned was amazing: By having fun, you can make great personal progress!
It was about while we were still in the middle of game development and working as a team, when I started writing one of the tools which might be the most successful hobby project of mine, today. For the game we were working on, I wanted to make a homepage. I knew PHP. So I made a big site with lots of glitter and carefully crafted (still looked like the crap you do at school). I learned many new things. For example it was very tiresome always copying over the whole HTML to knew files. It was really bad, when I had to make changes to the layout. So I started writing a framework which let me write stuff once and then include it anywhere. I wanted our team to be able to login and store files, like assets, on our webspace. So I wrote a login system. Then I learned about different databases and started writing an interface to SQL. And I improved the system. Polished it. Gave it a name: SHPS. Then deleted hundreds of lines just to rewrite things in a better way. I learned rapidly.
Some time, I graduated from school and started studying. My studies contained learning electrical engineering (which is very interesting and useful for many things today) and also computer science. I learned C, C#, Java. I learned about how rendering and computer graphics work. i learned about DB optimization. I learned a great deal of things which are really important today. You do not have to study to learn most of these things. They are readily available on the net. It was just more like a knowledge boost for me. But even then, I continued working on my homepage system.
Two years later. That's when I finally had the courage to try out Node.JS. Want to know how I quickly learned many things? Right. It took me several years (until earlier this year... or at the end of last year? can't remember...), but I managed to port my whole web application framework over. By then, it was more like its own little system than a framework, that's why today I would rather call it an "application host". Software which can be used to write other software on top of it. Additionally I started getting into many new areas, which remained unknown to me before. IT security, for instance. I am still improving my tool. I am using it at home, I am using it at work, I am teaching how to use it to colleagues. From the first moment until today, the system has grown for six years and one month. That's some dedication :D
About the same time as I started porting the web application, I also started exploring the wonderful world of OpenGL. Let me tell you something: It's all about concepts and how to be performant, because you have to render billions of triangles in less than 17ms constantly without spikes (for ~55-60 FPS). My knowledge of C++ finally payed off. I was able to write a small game engine. Then I deleted all the code and started over, making a better engine. Now I am working with Vulkan on a new engine, with new concepts and ideas. Still working on performance.
You might wonder, what happened to all the other stuff I learned. I made use of it at work. Even as a student, I could quickly wrap my head around Powershell. Many of my scripts still do the most important jobs over here, like doing daily online backups of all the servers. There are some ASPX sites up and running and a bunch of C# applications, initially written by other students, but in terrible ways so that I had to rewrite them in order to extend them. Now, at my current position, I just introduced web development with Node.JS. We have several applications running in production, based on my six year old application host, running happily and being very stable.
Since starting my job, I learned quite a handful of new things about web development. For example I started reading csswizardry, found out about how awesome streams are, got into UX, and so on!
I am not good. Really. I did not do a whole lot of awesome stuff, yet. Nothing to really show off. I am just learning something new all the time, which in my opinion is far better than that. It even has become my motto: Being a little better every day than I was the day before.
Do not learn stuff, because others tell you it might be important. Do not learn frameworks or try to clone twitter or select some random project from a list. Let the world offer you an opportunity. Grasp what is important to you, what will get you hooked and which is a lot of fun for you. That's all there is to improving quickly to a level with which you can find a job and be someone who can help your coworkers and other people. I am a mentor at work. Anyone can be one. Just be active and have fun whatever you are doing!
Since I am still lacking myself, I really hope you guys here at Hashnode will also help me become better and know more, just as I try to share whatever I know and what experiences I made. There are a lot of very wise people here. I want to learn form you. I want to grow with your help and I want to help others grow. Let's work together and make this an awesome time and experience on this growing platform! Thank you!
PS.: Yap. I am not good at drawing.