Hacker News new | ask | show | jobs
16-year-old Looking For Guidance
11 points by SwayamShrimali 928 days ago
Hello, I'm a 16-year-old seeking guidance for the next steps in my software journey. I've completed 100 days of coding on Replit and have undertaken several HTML, CSS, PY and JS courses and tutorials. My goal is to enhance my programming skills and eventually secure an internship. While I still am not sure, I am interested in ML or AI engineering but am aware that is hard and might be too hard for my skill level. Currently, I'm exploring ways to further improve, such as engaging in projects or any other suggestions you may have. If you have any project ideas, it would be helpful. Any other advice would be much appreciated.
14 comments

A few resources which you may want to check out, in roughly increasing order of difficulty:

- 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.

lol, thank you for the fantastic resources and insightful advice! I appreciate your time and encouragement. Ill take a look at all the links, currently i am in grade 10 so i cannot take any courses yet but i might take some outside of school
Data structures and algorithms are important, there are some good college lectures recordings on YouTube, MIT's is quite good iirc. The recorded lecture series as a playlist are under rated and available for many topics.

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.

Thanks for the tips! I'll definitely look into the MIT lectures on YouTube. Your thoughts on AI and project choice make sense, and I'll aim for a good balance. Appreciate the encouragement.
Next step: write an application. I mean a complete original application with documentation. It does not have to be big but it should be something complete that others can use.

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.

> don’t bother with a computer science bachelors degree unless you are dead set about getting a masters

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.

You are completely missing the point. Ultimately, higher education is not about learning more about computers. It is only about natural language communication and research. Nothing more follows.

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.

So I'm in the middle on this. And of course my opinion is colored by my person experience.

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.

This is absolutely wrong advice in this climate. Self-taught people have a massive survivor's bias. You _can_ make it without a degree, but having a degree greatly increases your chances especially at entry level.

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.

> This is absolutely wrong advice in this climate. Self-taught people have a massive survivor's bias. You _can_ make it without a degree, but having a degree greatly increases your chances especially at entry level.

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.

Thanks for the advice! I've decided on a Ph.D. and a master's. I'll follow your suggestion to create a complete app with documentation for a deeper understanding of code organization.
https://cs144.github.io/ https://www.cs.cmu.edu/~213/ https://15445.courses.cs.cmu.edu/fall2023/ https://pdos.csail.mit.edu/6.824/ https://pdos.csail.mit.edu/6.828/2023/

https://csdiy.wiki/en/

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.

Sounds good, any in particular you recommend?
First of all: Awesome! Most people do not try to understand the basics and jump right in to specific frameworks. Understanding the basics will help you in the long run to adapt to different things.

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.

Ohhh and before I forget it -> one skill that helped me a lot -> Hosting my own stuff securely on bare servers without docker for example. It helped to understand security concepts, how much resources a website really needs and what I even need to host a website.

It´s nothing against docker, but keeping a bare web server secure and then introducing databases etc. with self build images is nice.

Most things are not hard if you spend the time and effort to learn. I recommend Francois Chollet's book on AI. It has good reviews so it will help you learn the tools, techniques, and concepts in AI and ML.

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.

Got it, I'll get the book. I did not know there were up-to-date books because of recent years, guess I was wrong ¯\_(ツ)_/¯.
Ok, so in summary(just if anyone else needs anything from this), these are the links:

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.

number one does not apply to me because I'm in the USA/CA, but included just incase someone from Inda views: 1) Emphasize completing courses/books before 11th grade.
I assume from your username that you are from India, in which case I'd recommend you to start finishing all these courses/books before 11th strikes. If you plan to take A-Levels/IBDP you'll have at least some free time to work on projects.

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.

I was born in India but my whole life since I was 3 has been in Canada and just recently I moved to Palo Alto in California. Ill watch 3blue1browns series as well
Just go and intern at any startup that takes you. That's how you will learn the most.
Find yourself friends and a project. When I was your age, best thing I managed to do was to help a friend create a small graphing-calculator in Java? It was fun, we learned a ton and as he already was doing odd-jobs for his dad with Java EE I could have him both as a peer and a mentor.

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.

Yea, I'll try to look for some projects on git, I just feel like I might not have the skills to help people as I might mess it up XD.
You can always start with something simple, and maybe just fork it for your own use. Do a little improvement here and there ...
Build something. Just build something you want.

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.

While diving into the nitty-gritty of exactly how gradient descent and backpropagation work might (and only might) be beyond you, it's a temporary thing. You can learn it all, if you want, at some point.

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

Thanks a bunch! Your support means a lot. I'll take a look at TensorFlow and Keras.
Any will do, so I do not want to nitpick too much. I want to point out that most people are using pytorch these days. If you use the book that uses Keras it is also fine, but I would not start with Tensorflow today.
Learning soft skills should be better use of your time, people who are changing the world have less to do with programming.
There's nothing wrong with focusing on technical skills. But you have to remember you will always be implementing somebody else's ideas / vision.

Technical skills plus domain specific knowledge is how you increase your value, perhaps even building a startup that solves a worthwhile problem.

There is nothing wrong with doing something you enjoy without changing the world. Especially at 16.
Well, how about putting it this way: People matter too. It's easy (especially at 16) to think that, if I can code, I'm on the path to success. And, in a way, you are. But people really matter, and they take a different skill set than programming does. Put at least some focus on getting better at dealing with people.

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.

You sound like my dad, hahaha, ok will do :D
I made a simple web booking system 15 years ago and people are still using it. I had very little idea of what I was doing.

As others have said, make something and enjoy the work of your hands :-)

got it! also 15 years and people are still using it? wow!
The learning for me has been to solve existing problems. Maybe create something that solves a problem for yourself or someone in your family? You will be surprised how happy the average person is when you make something that makes their life easier.
I'd say in general getting into the best university you can if a good idea. CMU/MIT/Berkeley for example.
yup,thats my goal. Currently, I want to try to get into Standford as my top pick as I live close to it.
Good luck with it!