"Self-taught" 18yo programmer asking for carrier advice. Seriously.

Started by
4 comments, last by Matias Goldberg 7 years, 7 months ago

Hi,

I am an 18-year-old high school student. These are the last months of my school now and I need some advice from you guys regarding my future as a gamedev. I need to choose a university (or work/set up company?), generally I ask myself a question: what to do next?

I've been thinking about it a lot, because I really need to apply soon and it struck me that... my game development skills are my worst curse. :-( I have been learning programming since I was 7 and, as you can imagine, I managed to learn quite a lot through this time. In short, I can program in c++, c# and full web development (JS, css, html, jquery, all that stuff), software engineering, agile stuff, etc. I've been working on projects for real money and I also sell stuff (XML Localization) on Unity asset store. Countless courses on Udacity and so on. Now I work in my own indie team with a few other guys from around the world in Unity and UE4.

I read through programming curricula of a few unis in my country (Poland) and it turns out that there is little I could learn from them. Seriously. So I'm wondering, if instead I could pick a very different degree just because I'm interested in some other stuff too and then work in gamedev anyway. So, I'm really asking whether I could get a programming job after my own studio failed coutless times and I'd need money.

It's not that simple though. As you can probably imagine, as a child I didn't complete many serious projects. Now I'm a bit older, but serious projects take serious time. I can demonstrate my skills, but I don't have a nice portfolio built up. Sure I can dig up some pretty impressive work from the past like an octree-based voxel procedural world (minecraft with blocks as small as you wish) made in Unity. I have what i sell on Asset Store, etc but these are not complete projects with thousands of downloads.

So what would you recommend? Doing the programming degree, that probably won't teach me much, or doing something else while building my portfolio? Or maybe I should get an internship somewhere? (if you happen to offer one, I'd happily agree to join). Look, guys, this post is not so that I can boast about how awesome my skills are. I just spent all these years on hard work and would really like to hear your opinions so that I don't have to go back in time and start all over again at uni, because that would really hurt.

Thanks,

Jarek

Advertisement

I need to choose a university (or work/set up company?)...
I have been learning programming since I was 7 and, as you can imagine, I managed to learn quite a lot
through this time. ...
Now I work in my own indie team with a few other guys...
I read through programming curricula of a few unis in my country (Poland) and it turns out that there
is little I could learn from them. Seriously. So I'm wondering, if instead I could pick a very
different degree just because I'm interested in some other stuff too and then work in gamedev anyway.
So, I'm really asking whether I could get a programming job after my own studio failed coutless times and I'd need money....
I don't have a nice portfolio built up. ...
So what would you recommend? Doing the programming degree, that probably won't teach me much, or doing
something else while building my portfolio? Or maybe I should get an internship somewhere? ...
Jarek


Jarek,
While you believe that you have nothing to learn from the programming courses at university, employers
might disagree (especially after they give you a programming test). I concede that it is possible you
already taught yourself everything, and it is possible you would pass a programming test - one way to
find out is to apply, and take a programming test.
I don't know if Polish employers are as insistent on degrees as US, Canada, and UK employers are. One
way to find out is to go ahead and apply for an internship or for a full-time job. The big problem
might be your portfolio.
As for the other options you mentioned, it doesn't sound like you're quite ready to start up your own
company just yet (you wouldn't be asking, if you were). Taking a non-programming degree is a
reasonable option. Maybe a Business or Management or Marketing degree (especially if you're going to
start your own company).

-- Tom Sloper -- sloperama.com

While it is possible you have learned all that students typically learn in a standard CS program, it is much more likely that you simply don't know what you don't know.

Algorithms and data structures form the absolute core of computer science, and it is an area most younger programmers are severely lacking. That's fine that you can get stuff on the screen, but can you do it efficiently?

For example, good CS graduates will frequently pick and choose between various sort algorithms. One frequent question I use in technical interviews is to ask for as many ways to sort as the person can think of, and when each is better. Most CS programs will teach ten or so, along with the reasons why each is superior for different cases. Most industry veterans can name off several methods that they use frequently, and some they never or seldom use.

After algorithms and data structures are math topics. How is your statistics? Modern games are stuffed full of statistics and probabilities, and not just as loot drop tables. You need to know your distribution curves and how to write them. How is your linear algebra? The math of 3D worlds is linear algebra, so get that down solid. How is your calculus? While some programmers get by with iterative methods, being able to write code that directly calculates positions and variable changes over time is an important skill set. Schools also typically require study of technical writing which will be helpful for all programmers, and often have some courses on basic business which is important over a career.

If all those are down solid that's great! You can test out of those courses and jump into the meat. Fill your days with study of artificial intelligence and machine learning, or with distributed processing and networking, or with digital signal processing, or with machine theory and computing theory so you can improve how your software maps to actual hardware.

Assuming you live in a part of the world where higher education is important for breaking in, if you already know the fundamentals you can spend that time focusing on even more useful content. It is an opportunity many people never get, and one that is usually once-in-a-lifetime around age 18-25. If you already know about a subject ask the teachers how you can test out of the class so you can use the time more productively.

What you typically get out of being self-taught -- even if you are accomplished in the result of that self-teaching -- is a fairly broad, but also not-very-deep understanding. Speaking as someone who was similarly self-taught (with a few small-and-medium-sized accomplishments to show by the time I had graduated high-school), the odds are good that your understanding is neither as deep, nor as broad as you assume, as were my own.

My advice would be either to engage fully in academics (and if you already have marketable skills, you can engage in freelancing or entrepreneurship on the side to pay your way -- you'll be earning a lot more than your classmates doing deliveries or waiting tables), or engage fully in making your own way as an entrepreneur. In all likelihood, self-taught is not a path towards a typical industry career that's successful -- it happens for some, but it is by far the exception.

If you choose the academic path, I suspect you'll find a lot to benefit from in the standard course progression -- you should be seeking out a school that's challenging and has a good reputation anyways, but especially so if you already have the level of experience that you do. Don't choose a program that you know you can glide through just to get the paper at the end, that's not giving you real value. If, even in choosing a challenging program, you find it to be less than you'd like, that's an excellent opportunity to specialize -- take additional credit hours and perform independent, deep research into AI or another area that interests you; get a minor in mathematics, or some other topic that's adjacent to computer science; take courses in management or business that will prime you for leadership roles, or to run your own business more effectively. Heck -- be a mentor or teacher's assistant after you advance some in your degree: the experience of teaching others can be a great catalyst to cement and deepen your own understanding of things, and it develops a great leadership skill as well.

If you choose the path of self-study and entrepreneurship, throw yourself at it fully, and accept that its not a substitute for a degree -- its a challenge and an achievement valuable in its own right, but not a replacement for a degree as far as most organizations are concerned. Realize that this path is putting you fully in charge of succeeding or failing, and demands that you're accountable for your growth, for recognizing and correcting your own blind spots, and for knowing when you're in over your head. If its possible, try to find a mentor who can help you recognize your shortfalls and help you grow, you'll be better off than going entirely alone; if that's not an option, its important to find other venues to make connections and be stimulated by other people doing smart things -- join in, attend, and participate in local entrepreneur or developers' groups. If you don't have them locally, find them online. Watch presentations online -- many top-tier conferences, top schools, and local user groups put tons of great presentations, lectures, and courses on YouTube or other places for free. Khan Accademy, Udacity, and others -- I do believe there's enough information out there to give you a good education and that eventually those with jobs to offer will realize that Universities don't hold a monopoly on knowledge like the once did, however, Universities are still very good at knowing what you need to know, and that's not something the average individual is very good at knowing for themselves, or which the a'la carte internet education ecosystem has figured out yet.

throw table_exception("(? ???)? ? ???");

If you ever want to work outside of the EU - and most of the games industry is outside of the EU, especially if the UK leaves in a couple of years - then you're going to find your employment chances significantly improved if you have a degree as it makes it easier for employers to comply with immigration law. That alone may be enough reason to get a degree if you're passionate about games enough to want to travel the world to make them.

If you're so good that you won't learn much from university, you can look at it as an opportunity to work on your own projects in your spare time - which you will have a lot of, as you will find the course so easy! I believe Poland pays for your higher education so they are basically paying for you to spend 3 years working on your portfolio and get a degree at the end - so why not?

There will also be various things university will teach you that you will find useful, even if you don't know it yet, and they're not always practical to pick up from internet articles or from experience.

My experience is the complete opposite of the other answers given here.

I am also self taught since 14 years old. By the time I graduated from school I was 17 and knew x86 assembly, C & C++. I had fully read the Intel architecture manuals, and I had completed small projects, one of which I posted on Sourceforge and I learnt the fundamentals that would help me years later with vertex shaders (it was a library that did vertex TnL transforms in assembly); and other small apps, from a simple program that enumerated all processes and allowed you to change its window position and size (even if the original program didn't allow you to), to a full blown image viewer (which sadly I never released) that dealt with a lot of image formats (BMP, JPG, PNG, TGA, GIF, TIFF, DDS) back in a time where image viewer struggled to support them all, and this program in particular gave me a lot of useful tools that would later help me with pixel shaders because I had developer lots of screen space filters back then in C.

But I didn't pursue a CS course. Programming to me was a hobby. I did it for fun, and I felt doing it professionally would end up like those NBA players that started out having fun playing basket and ended up with stressful professional careers where money was everything.

I ended up studying accountancy. Luckily, here accountancy is a very thorough career. There was a lot of math & statistics mandatory courses that helped me with programming. I learnt:

  • Limits
  • Derivatives
  • Integration
  • Definite Integration
  • Cauchi theorem
  • Taylor series, Maclaurin series
  • Matrices
  • Probability theory
  • Combinatorics
  • Bayes Theorem
  • Binomial, Gauss, Poisson curves
  • Chi Squared test

(note that in school I had already seen stuff like conics & solving polynomials via Ruffini rule)

So... I was really lucky. A lot of stuff needed in CS I learnt at Uni by studying something completely different (note that I never gave up being self-taught! btw I read every GDC and SIGGRAPH that came out for free every single year!). At some point while studying I got approached by a small startup (due to my increasing notoriety in open source communities and gamedev forums... that's how I built my portfolio) to work with them. Working alongside with very talented people allowed me to hone further my skills. I learnt a lot from them. And that's how I slowly started working professionally, getting more and more gigs; eventually getting NDAs with big companies and doing lots of contacts and getting good references. Turns out I was wrong, doing what you love and getting paid is great.

When I graduated I hung the degree on the wall, but I don't practice. Note however that this degree wasn't useless:

  • As a freelancer, becoming an accountant helped me a lot with my own finances, as well as dealing with foreign commerce, banks, taxes, Law, and protecting my rights (and knowing my obligations!).
  • Things like governments care a lot whether you have a degree.
  • In the end I had the rare trait of both knowing finances and accountancy in depth, and programming in depth. I prefer working on multimedia stuff (3D, graphics, audio... games), but I have to admit the finance programming world is very profitable.

So what would you recommend? Doing the programming degree, that probably won't teach me much, or doing something else while building my portfolio? Or maybe I should get an internship somewhere? (if you happen to offer one, I'd happily agree to join). Look, guys, this post is not so that I can boast about how awesome my skills are. I just spent all these years on hard work and would really like to hear your opinions so that I don't have to go back in time and start all over again at uni, because that would really hurt.

That will happen whatever field you study. Back when I started accountancy everything was new to me and it was awesome. But by the time I was in my last years we tend to clash a lot of with the professors.

Some professors are awesome and know a lot, some may not know the answer to everything but accept student input.

But you know when you see a charlatan who somehow got his/her degree yet can't do anything better than teaching. And everything he/she says will always be always right (don't you dare prove them wrong!). You suffer a lot and can be very frustrating.

The only difference knowing programming beforehand is that this frustration will come in sooner. That's all. I had a friend who was studying CS at the same time I was doing accountancy, and we had this conversation:

  • Hey man... in this question here the teacher corrected this last year's exam about the behavior of a C++ constructor. What do you think?
  • Let me... <analyzes the question and the student's answer>. Nope, your teacher is wrong, the student was right.
  • How's so... ?
  • <I proceed to show him proof the teacher was wrong with code that denies her assertion using printf() inside constructors and custom operators in Clang, GCC, MSVC in both Release & Debug builds>
  • No... it can't be... Are you... sure? but... but.... she corrected the student...
  • <I look up the C++ standard, after a several minutes I find what I was looking for and point him the clause that proved the teacher wrong definitely>
  • Oh man.... this sucks! You're right! But... well what should I do... mmm.... if the teacher corrected him, I guess I should write down what the teacher says it should happen.
  • Yep, that's what we do when the teacher is a @!!###!@.
  • Yeah, tell me about it

Same thing happened when a teacher told a friend OOP was perfect, it made everything better, should be obsessively aggressively applied everywhere, and would get angry if someone hinted otherwise. This friend contacted me because he really felt OOP couldn't be that good, and I had to show my friend talks from Mike Acton and the PS3's OOP pitfalls presentations which made him feel a lot better and less crazy.

But the thing is... I've had the same problems studying accountancy with specific issues to that field I won't share.

Something you need to learn this problem doesn't go away when you finish university. This same problem will come back as the form of employers telling you to do something that you know there is a better way or you disagree strongly. If you are your own employer, you will have clients that will try to impose you which language should you use and how to do your job (even if they don't know nothing about programming!!!). You learn to either walk away or smartly deal with them (i.e. find a way to show them you did things the way they want it, while behind the scenes it isn't really so. Keeping them happy). But remember that a client that is a problem isn't a client, it's a problem.

There's also awesome employers and awesome clients. Not everyone is bad. It just happens that one awful guy makes a bigger imprint on your memory than 4 great employers/clients in a row.

So... in the end, if you're going to study a different field, like frob said make sure the basics are still covered (algebra, calculus, combinatorics, statistics, algorithms) and look into something that would complement what you know. In my case I got Law & Business. But it could be as well medicine if you're into bioengineering (or... you know... the bioengineering career).

This topic is closed to new replies.

Advertisement