I am a high school student working with dreams of working at Microsoft or Google after graduating from college (so about six years from now). I started programming about six or seven years ago, using Java. I have taken CS classes in Java for all three years of high school, with A's in the class and a 5 (best possible score) on the AP Computer Science A exam. On the side, I am a ReactJS / React Native developer with about two months of experience working towards building a mobile app. I am a web developer for my robotics team and have about a year of experience in that area. I also run a team of about 17 developers at my high school working on building a game in Unity.
Sorry if I come across as cocky and overconfident - I am really not. I have some friends of mine who are already extremely successful already - they have already worked at some great tech companies, have clients and really successful apps, and they have even started their own company with big dreams of developing innovations in machine learning. I don't know if I can compete with guys like that. Not with the knowledge I have now.
With this in mind, what advice do you guys have for me in becoming a better software engineering? How can I improve, and what should I study?
Just keep going, but ensure you have down time (non-coding time) and exercise in your schedule. You have college to go yet and then you start work life... pace yourself :)
During college I suggest you look into placements/internships/graduate programs/whatever they are called in your university/college. Experience in real workplaces will help.
With your side projects, be sure to pick one at some point that you can maintain for a few years. The experience of keeping something working for a long period is very different to bashing out a short project.
Maybe start contributing to open source projects. This will teach you to work with other people, with all the ups and downs that entails. You probably already know from your group work that the hard bit is the group and not the work ;)
Above all: don't worry about competing with your friends, just work on yourself. Work on the skills you want to work with, do projects you enjoy. Keep improving your skill set. You will never, ever, EVER, know everything and you will be much happier if you can get comfortable with that. https://pbs.twimg.com/media/CCfUQh_UsAAXNKv.jpg
I feel identified with your situation, and I think the only thing you can do is do not give up. There is a phrase which the around people use here, "The perseverance everything reaches". Just keep yourself learning, practicing, improving, and eventually you will get the change you want.
By the way, i would prefer facebook instead your options :)
Jesus, I am jealous. Back in my day, they only offered Basic, VB6, and Javascript. Also technically C++, but not enough students signed up for it since it was an elective, so I had to take it post secondary.
Hmm, now when you say Computer Science classes, do you mean Computer Science topics taught using Java or mostly just teaching the Java language. If the former, which concepts have you covered?
I think it would do you a world of benefit to simply expand your horizons a little. Rather than focusing on what to study, try your hand at different ways of thinking. This will help you identify what you're interested in so that you can make an educated choice for yourself.
For example, if you're an imperative programmer, then read up on functional programming techniques (Monads and category theory in FP will unlock a whole world of knowledge that will help you better understand things like Observables, Promises, Immutable collections, etc) as well as teach you how to use a Y combinator to implement recursive functions in languages that do not support recursion. If you find you're interested in this, then perhaps a mathematically involved university course will be something you're interested in.
If you're used to SQL and NoSQL databases, then learn a Graph database. That'll expose you to concepts useful when dealing in the Big Data realm (heavily used in market research, social networks, traffic analysis, etc). Maybe a statistically involved university course will be of interest to you if you like this stuff.
Try learn a language with a syntax that is incomparably different to the one you're used to writing (i.e. if you're primarily a Java/C# type person - then try Haskell or Python - something where the syntax differs quite a bit) - this won't really help you identify anything worth studying at university, but it will make you a better programmer, because you'll be able to borrow concepts from one language and abstract them into another (should you need to) if they lack the functionality you need for whatever use case.
If you write your code top-down (define a function, then use it), try writing it bottom-up (use a function first, before you define it later on) instead. If your programs tend to slowly transform initial data into a result, try to instead derive the initial data from the result you expect (i.e. work backwards) - that's something that will be to your benefit in regards to teaching you how to write more elegant code.
At your age, I wouldn't worry too much about working for Google. I think that if you already know what you know (which is impressive), and you keep thirsting for knowledge (like you are/have been), there's a very good chance you'll achieve your goal. :)