- Free Code Camp: https://www.freecodecamp.org/
- CS50: https://cs50.harvard.edu/x/2023/
- How to Design Programs (HTDP): https://htdp.org/
- Nand2Tetris: https://www.nand2tetris.org/
These are geared towards making you a better programmer in general, though it won't necessarily bring you closer to an AI/ML career.
Also, math is pretty important if you want to get into AI and similar things. Even otherwise math is important; don't listen to people who say you can get by without the math! So, try to get a head start on probability, calculus, linear algebra etc.
Good luck!
Gosh, I'm embarrassed about what I was up to when I was 16.
For AI, there is lots of content these days. The directions you take depends on if you want to use AI or develop AI. Learning how they work a the theory level will help you use them better and know what kind to use for different situations.
As others have said, you are well ahead of the curve. Keep putting in the effort and building! For projects, pick something ambitious that you are very interested in. It should require things you don't know how to do, but be a passion so you can cruise through the hard parts. This will give directions for what to learn and leverage next too.
Also think about breadth vs depth. There is a saying "be T shaped" which is really a visual for this idea. I prefer being pi shaped, which means you have two deep expertises, something to aim for as you continue to grow in your career.
That will teach basics of code organization and writing technique, which is so much more than just squeezing out a few code samples.
As for education don’t bother with a computer science bachelors degree unless you are dead set about getting a masters, which I highly recommend. Most of the developers I have worked with through my career who were educated through a CS bachelor program were savagely incompetent compared to developers who were either self taught or had a graduate degree.
College is also not just about the paper, but the connections. I worked closely with a nationally renown robotistist and she gave me a recommendation for grad school if I wanted it (I did not. So burnt out by the time I got here). Does any self-taught person get to really do work with actual robotics stuff?
I was exposed to so many more disciplines and ideas to get a sense of what I wanted to do along with make connections that help me in my career to this day over a decade later.
I've had recruiters and interviewers tell me straight out that I got first pass because of the college I walked out of. This still happens after a decade. People say it's a hard market to get a job right now? I haven't noticed. Me and all my college friends snagged a new job in a month. I've never had a hard time getting a job. Ever. That's the power of a degree. It gets you pass HR filters and when there's a tie, people pick you first to try and that's powerful and compounds as time goes on.
Being self taught is great when times are good, but it's very hard to get that next job when times are bad. I'd never recommend a 16 year old skip college. A piece of paper from a ho-hum state university still allows you into the stack of places with stupid degree filters.
That is true. It's also true irrespective of job and industry, but that isn't the point. If you want the greatest possible career mobility then earn that CS bachelor's degree and be a beginner developer forever who only follows trends. I doubt though, that is the advise they were looking for. If you want to make more money and have a career with real growth then absolutely do not do this. I am speaking from experience.
Their best bet at a real career with any real decision input is to get a graduate degree in CS or be self-taught with a different unrelated bachelor's degree that teaches communication skills. The best way to differentiate from other beginner developers is some combination of ability to write original software and to write with natural language. Its astonishingly staggering how badly most CS bachelors perform at these even well into their careers.
I disagree.
At least in the United States (I'm not even from the United States, but I studied there), a master's in Computer Science (CS) does not add that much more value than a bachelor's. Infact, as far as coursework go in some schools there's quite a bit of overlap between senior undergrad and grad school classes for CS.
Go for masters only if you want to go for PhD immediately afterwards. And trust me, PhD is NOT the correct path for everyone. Infact, I know a lot who join the PhD program after bachelors, realize it's not for them after a couple of years, and then exit with a masters.
As for bachelors study whatever you find interesting. Maybe that's CS. You'll also probably be just fine taking math, EE etc.
There are two great failures that occur from a bachelor level CS degree. There are actually many failures, but two reign supreme. First, most developers graduating with that degree cannot communicate in writing even at a child level. It is absolutely mind blowing how bad it is and completely sets the tone for the profession.
Second, the practical application of that degree is at best superficial. Many people who graduate with a bachelor's CS degree will tell you they learned so many things of such great diversity they never would have learned otherwise. In practice though, their skills appear to apply extremely narrowly, so what they claim as diverse appears to many other people as average or less and even then never applied. If you want a magnitude greater diversity of technical skills do equivalent work for the military. I can personally testify to this as I have worked in both environments, military and corporate software, for more than 15 years each.
Anybody smart enough to program, at least on real original products that ship, is smart enough to teach themselves to program. They can do that and simultaneously earn an education that teaches life skills like advanced written communication, finance, or whatever. If you want to be a beginner, or practical equivalent, with maximum career mobility then stop at that CS bachelor's. Most developers get burnt out on that after 12-15 years after learning to stop repeating the same mistakes over and over only to be burned by junior peers who cannot operate a higher capacity.
I learned to code at 12, and went to university at 19. I went in thinking "I know how to program" (and I did), but after the first few months (where they taught programming) I found so much more to learn.
I could point to specific modules (databases, algorithms, and some others) that I've used all career, but the real value came from elsewhere.
The depth of understanding in all the modules meant I felt equipped to do anything. I went to my first job and promptly used a language I'd never seen before. I wrote a function, used in production, on my first day. I soaked up the Language Reference manual in a couple weeks.
Basically uni taught me that new stuff can be learned -really quickly-. That when given a task in something new, I can approach it with confidence. Learning (especially today, with Internet resources) is very accessible.
The other thing I discovered at uni were smart people. Smarter than me. I found a group who wanted to suck the marrow dry. We pushed each other, sharing new accomplishments - competing if you like to push the boundaries. Most of our code was not "handed in" - it was tangential to the course work. It forced me to "be better".
It also showed me that helping others is it's own reward. Part of my job is training (and writing), and being good at that was a big part of my early career.
So, in my context, my bachelors degree has been my foundation. Everything that came after was built on it. But I didn't stay past my first degree - I couldn't wait to get into the world and apply it. I've never regretted that, but I've no idea how that path-not-taken may have panned out.
College is like most things, you get out what you put in. They don't "give" you anything, but they offer you the chance to "take" as much as you can.
As an aside, I wrote my first commercial program in 2nd year. It was a simple program for printing medical genetic diagrams on laser printers (this is pre Windows.) It was commissioned by our genetics department. He suggested I sell it to others. Again, this is pre-internet so I went to the med school library, found a research directory, and wrote a letter to everyone in the genetics section. Sold a handful (at $250 a pop) to universities all around the world. Now THAT was a serious rush!
Above all, the lesson I learned was that adding value is valuable. My career is built on adding value to others - which, it turns out, generated a decent living. Find the value you can add, and people are happy to pay.
Many top universities in the US publish their courses online for free. Students from other countries who do not have a good learning experience in their universities can “create their own CS degree” by taking these courses. However, even though you can learn almost everything that you would learn in a university from these courses, what really matters are your networking and your school name on your resume when you are looking for internships.
One thing Im personally missed out (now 27; started at 12 with web stuff) is writing. Not only writing blog articles or documentation, but writing for the sake of documenting small hacks or bigger concepts. So that would be one tip I personally would loved to get.
About projects: - either do things like features for small projects (e.g. dark mode for something like altcha.org) - try to fix some bugs - or try to recreate small projects based on a framework or vanilla for the sake of learning stuff.
As a tip for learning more things etc. in the web dev space -> Look into accessibility. Its a huge and interesting topic.
Also "that is hard and might be too hard for my skill level." -> Do it. Get started with something "easy", read papers, do tutorials, write stuff about what you learned. You wont learn if you wont try :D
In general -> Keep on learning. Don´t waste time on chasing the next framework and ask. Asking questions can be interpreted as being annoying. But if you try to understand different view points, different tech etc. you will end up talking with people that will bring you forward.
It´s nothing against docker, but keeping a bare web server secure and then introducing databases etc. with self build images is nice.
If you can't afford to buy the book then there are online libraries like Anna's archive which should help you get a copy and then buy the book once you have a job and can afford to spend money on books.
1) Emphasize completing courses/books before 11th grade.
2) Focus on projects rather than numerous courses.
3) Watch 3blue1brown's series on linear algebra, calculus, and deep learning.
4) Recommended resources include Free Code Camp, CS50, How to Design Programs, and Nand2Tetris.
5) Stress the importance of mathematics in AI/ML and suggest studying probability, calculus, and linear algebra.
6) Encourage the individual to start with simple projects and gradually tackle more ambitious ones.
7) Suggest writing a complete, original application with documentation to understand code organization.
8) Advise joining projects, looking for internships, and exploring open-source contributions.
9) Recommend Francois Chollet's book on AI and learning TensorFlow and Keras.
10)Encourage learning practical aspects of ML/AI, such as data partitioning and avoiding overfitting.
11)Suggest building something personally interesting or cloning an existing project.
12)Emphasize the importance of soft skills and understanding the human side of technology.
However if you end up studying for NEET/JEE you'll have absolutely no time at all to do anything fun.
Also instead of doing many courses/tutorials try doing projects. Not your generic social media base or restaurant ordering service UI, something that interests you and you want to work on.
That said, CS50x is a great course that doesn't require an extemely large time investment.
I see that you wish to go into AI/ML. Watch 3blue1brown's series on linear algebra, calculus, and deep learning. Learn to love math. You will need a lot of it.
And these days it is even simpler. There are cool projects on github! Some are even friendly to newcommers! You could dabble with videogames and do a jam on itch.io.
If you are aiming for an internship, you could research the sorts of companies you like, and find if they have cool projects/technologies you want to learn. I.e. I got internship at RedHat over 10 years ago and as I was already i.e. using Fedora and writing for a local linux website, we did click with the interviewer quite well.
Or, find something you think you can build that already exists, and clone it.
That's kind-of how web stuff gets built anyway; I've built many projects that were just a PSD file that looked like a website, and I had to build it from that one design file.
Just put in some reps. GL.
Thanks to TensorFlow, and Keras, etc.. you can just use the work of others as you learn AI and ML, just as many have no idea how a car engine works, or how exactly dynamic RAM in their computers works.
There are many practical aspects to ML/AI that you can learn straight away, like how to partition up your training data into training, validation, and test datasets to keep things honest, and avoid overfitting.
Stay curious, and dig in anywhere it seems interesting. More knowledge is generally a good thing.
Good luck
Technical skills plus domain specific knowledge is how you increase your value, perhaps even building a startup that solves a worthwhile problem.
But if software is your "native land", it's fine for you to be more comfortable there. Really. It's fine! If you enjoy code more than people, it's OK to like what you like. But learn to speak "people" at least as a second language, even if you're not a native.
But that's not the advice that was requested. Swayam didn't ask for life advice. So to try to get back on topic: Do whatever interests you that will push you a little. You want to go towards AI/ML, but you think it may be beyond you? Well, frankly, it's beyond me too, and I'm your age with the digits backwards (I'm 61). But I could learn it. You can learn it, too, but not in one day.
What can you do that is in that direction, that you would find interesting and challenging? (Or is that what you are asking us?) Maybe you could implement a small back-propagation system. It doesn't have to be either efficient or scalable; build a small one, by hand, and play with it to really learn what's going on.
As others have said, make something and enjoy the work of your hands :-)