Hi Marius,
I wanted to take the time to respond to your post (it's my first one on these forums, but I've been a lurker for a few years but felt your questions were important enough to speak up) and hopefully give you some insight from someone who has been working as a software engineer here in the US for the past 10 years in the simulation and game development industries.
First off, please understand I'll never claim to know everything nor do I think anyone should ever stop learning and take my advice for what it is - some random-guy-with-a-bit-of-experience's words on an internet forum.
- My name is Mark Miller (the real one is Marius Macijauskas, but I guess the former one sounds much more natural for the rest of the world )
Please don't try to change who you are on the account of everyone else. There are enough people in this world who try to be just like everyone else. Be an individual. Be proud of the name you were given and who you are. Don't change it just because someone may not pronounce it properly or is unfamiliar with it. Don't ever tailor yourself to fit in with other individual's ignorance or myopic view of the world, because at the end of the day, you're just lowering yourself to their standards.
All I want is freedom and a job I'd like to work, even if I'd get a minimum wage (actually, I would be satisfied by any amount of money that would let me survive). And I want that ASAP. You don't event imagine how much do I hate the situation I'm in right now. You might think I'm crazy and most probably I am, but...
I remember thinking almost the exact same thing when I was close to your age. And now at the age I am now (almost twice as old), I look back wishing I had spent more time doing the things typical people of that age did. Be happy you don't have to work yet and have your parents to help support you. All parents suck but keep in mind that they are doing what they feel is best for you. Remember that they have a few more years of experience on this planet than you do and they are most likely trying to keep you from repeating their mistakes
.
Also keep this in mind that the working environment sucks for 99% of the world. Theoretically, you may be doing what you love to do, writing code, but it will never be _your_ code that you write when you're working for someone else. It's always _their_ code. It may be satisfying to solve difficult problems for the company you work for and feel accomplishment when you do, but at the end of the day, you work to their standards and specifications and you never get to choose what you work on. And the majority of my job, unfortunately, is not writing code, it's designing systems and creating documentation artifacts to demonstrate how that system works to a team of individuals that work with you to build what was designed. In my industry, nearly 60-70% of the time is spent on front end analysis and design and only 30-40% is spent actually coding (far less on projects that rely on previously written libraries). I can't think of any companies in my industry where this is any different.
Working at a game development company is a little bit different. There's not as much documentation and design involved (depends on the studio of course) and much less structure than formal software engineering companies. This has greatly changed in the past 10 years or so where now game development companies are starting to move more towards formal software engineering practices rather than "cowboy coding" and "shooting from the hip" so to speak.
Also keep in mind that game development companies are beholden to their publishers who invest vast sums of money for a game that they have ultimate creative control over. In this environment, your work is even further removed from your control in that now your boss's bosses have bosses who exert their "creative influences" into a design for better or worse
. At the end of the day, the person actually writing the code has very little say in what gets written.
Going back to what companies look for in potential employees, my experience in the game development industry is pretty much the same. Again, a more well-rounded individual will get the job over someone who only has a narrow focus on their learning. And here's the major problem with working in the game development industry - everyone is a replaceable commodity. EVERYONE. One person leaves and there are a hundred more willing to take their place. Everyone has dreams of creating video games but the reality of actually doing it is pretty horrible. Game development employers expect you to give 100% of your life and energy into creating _their_ game for very little compensation or commendation. If you're unwilling or can't keep up, again, you are replaceable and 100 more people are standing in line behind you to take your place. Don't have a degree? That's ok. There are 100 more behind you that do. This highly desirable competitive environment is how you can get individuals with doctorates and many years of experience working entry level positions for 80 hours a week for not much pay just because they have zero experience working in the game industry. Let me tell you, it's not fun or enjoyable.
And that's what it really boils down to - the working world and life in general is a competitive market where you try to sell yourself and your abilities for the highest bid you can, to do work for something you'll never own yourself. Limiting yourself to only learning computer related subjects really inhibits the industries you can work in and what companies you can work for. Take my advice in that you may not enjoy learning about other subjects (I wasn't fond of them either), but take the approach that it only makes you much more competitive in this competition called "life".
A higher education degree is paramount to obtaining a job in any software related industry. From my experience working in the simulation industry, you need to be familiar with software engineering practices and not just be able to program software to even get a entry level position. You need to understand the engineering process and be able to communicate ideas effectively to other people and be able to document everything you do. This is where a higher education degree and peripheral school subjects come into play. You may only be interested in learning how to program or computer related subjects at this time, but focusing only on those subjects narrows down your abilities which is not desirable when working in either industry. Companies look for individuals who are well rounded and can be tasked with many other things than just sitting down and writing code.
Another word of advice would be to find a well developed open source project you're interested in and offer to contribute. Learn the code base and how to work with other individuals in a single development environment. That's how I started out. I demonstrated my willingness to learn and had great mentorship on a project I really enjoyed learning to develop on.
Whatever you choose to do please keep this in mind. I can't tell you how many people we've hired at the companies straight out of college I've worked for that had no idea how to properly work with other individuals using a content management system. The good ones were the people who already understood how to work with a team of developers and didn't take several months to figure out why blindly committing to SVN or git is a bad idea. Stuff like that isn't generally taught in schools so it isn't just about obtaining a degree either. The strongest individuals in my field are the ones who put in the time to learn the basics as well as many other subjects and have a true desire to continue learning and growing. Having only book smarts or only desire to program is not enough to truly be successful in these industries - you need both.