I finally realized that I want to be a software developer when I grow up. But the thing is, I set my up schedule for the upcoming school year months ago. And I picked a graphic design class. Is that good? Or should I switch and take something like, C++/Programming. I am an incoming freshman.
The first thing to do is make sure you understand what it means to be a software developer, and ask if that’s really what you want to pursue. (In my experience, an awful lot of freshman end up majoring in something different than they thought they would, sometimes very different.)
There’s programming - more of a skill really, and then there software ENGINEERING, a professional discipline. And there’s Computer Science - more the research & development end of things. And a few related disciplines like Data Science (applied math, really), Computer Engineering and Electrical Engineering (more of the hardware side of things), Information Technology (usually a focus on business computing), etc.
Now, if you’re going down a Software Engineering path (what people usually mean when they say “developer”), you should start with is a good grounding in all the same things someone would study if they were aiming at an engineering degree - all of the sciences, and as advanced math as you can (Calculus certainly, but if your school offers a statistics elective - jump on it.) You might want to join a FIRST Robotics team - actually build something and get some experience working as part of a development team. And… take a couple of good writing electives - it’s amazing how much you have to write a developer - documentation, product literature, conference papers, proposals, etc. Being a good writer will help a lot, both in college, and when it comes time to get a job.
Or, another way to approach things is to think about WHAT YOU WANT TO DEVELOP. There’s a big difference between general purpose developers, and folks who specialize in a discipline. For example, Data Science is really applied math - an one might be better advised to pursue a math degree, with a minor in computer science. If you want to design control systems for spacecraft, then you might want to major in Aeronautics & Astronautics. If you want to animate movies - maybe major in film, with a minor in computer science (unless you want to build animation tools, in which case major in Computer Science and minor in film). Etc.
By and large, my advice is to focus on the core subjects that have the broadest applicability - specialize after you’ve been in college and are forced to pick a major. Until then go for breadth and flexibility - keep your options open.
I'm sorry to tell you this, but computer science is not taught very thoroughly in public high schools.
As you already have a strong background, I suggest taking AP Computer Science in 9th grade if your school offers it. If you already understand Java, it will be a blow-off class, but, assuming it's the only possible course, that's okay. Many schools will try to argue against you taking such a course so early, and instead push you to a prerequisite, but you should be able to easily win the argument after enough emails and meetings with the department chair.
Looking ahead, in 10th, 11th and 12th grade, I suggest that you ask for independent study courses in computer science. Working on a long-term project by yourself will give you knowledge as well as practice for the real world. Should your school not offer independent study, talk to someone in charge about your project.
If you really want to pursue computer science as a future career interest, however, you should probably apply to a computer-science-focused private school.
Else, buy lots of books.
Thanks for the request!
From what is described in the question details I’m guessing you’re from the US. Well, the high school system in my country was very different from that, but I’m even guessing it could vary a lot from state to state in there. But yes, any class on a related topic would be good, and programming has a stronger relation to software development. But no need to be in a hurry…
Being a high school freshman you have a lot of time in your hands to learn, make mistakes and correct them, so don’t be too desperate. Besides that, you live in the information age, so you don’t even need to wait for your formal education to deliver you any knowledge. If you really want to go deep now, there’s a lot of great content available. Take a look at Igor Benício de Mesquita's answer to Is there any guide that teaches how to write a software? for some ways to start. And regarding that graphic design class, watch this: How to live before you die.
Learn all you can and enjoy it. Best regards!
Different countries, different school districts… different states ALL have different curriculums and ‘options.’ Taking a Graphics Design course is ALWAYS good IMHO.
However, for California, many HS’s now use the Computer Lab as a dump-site for students with attitude issues (the ‘Wood Shop’ or ‘Machine Shop- courses used to be their lair), so… it’s tough to suggest just what may be available within your HS system. Even the best however tend to adhere to State guidelines, and push Java. HOWEVER… for those with a SERIOUS interest (in Kalifornia), the Community Colleges CANNOT discriminate based on education, race, age or even lack of a ‘proper’ citizenship. You should take note of the evening offerings of your local CC, and sign-up for a University acceptable course. Intro to Java would be good (and a mick as well)… and go on from there. [However, if you do this, DO WELL; bail on it at half time if you arn’t shooting for a 4.0 in it; it GOES on your HS transcript as a College course with DOUBLE the units].
A couple other answers recommend AP Computer Science, and my school was lucky enough to also have Advanced Computer Science (the second class to AP Comp. Sci.) as well as a third level class that was an independent type, however still taught by the same man. If this is true for your high school, take all of the above.
However, as mentioned below, few high schools extensively have classes on computer science, and it is embarrassingly neglected in middle school and high school. I tried to learn some on Khan Academy, but most of their programs are very basic, and while you can go outside their set parameters and create your own thing, it's still no replacement for a good class.
For books, my brother (a programmer) recommended JavaScript 24-Hour Trainer. You can probably find it in a library.
There are also some summer camps that he went to that he liked. However, your best bet for an actual high school class would still be to do an independent study after taking AP Comp. Sci. your freshman year.