Hacker News new | ask | show | jobs
Ask HN: Where to go after learning "beginner" CS like coding?
6 points by MarioCircuit 901 days ago
Hello all, I'm a high school senior and a longtime lurker. You can guess by my presence here that I'm interested in all things CS, as a hobby if not necessarily a profession, but I've got no idea what to actually do with that interest.

I've done all the "beginner" stuff like learning Java/Python, making scripts and projects for my own computer, trying archlinux on a VM. I've taken all the CS courses at my school (they're frustratingly shallow) and I just don't know how to go from playing with my own glorified "Hello World" scripts in noob world to actually making projects people use, seriously tinkering with my computer, etc.

Seeing that post from a week or so back about the 16 year old self-hosting with their own servers was kind of my wakeup call. While I've been twiddling my thumbs dreaming of doing something like that, sort of justifying it with the mentality of "I'll just wait until I'm older", they actually went and did it in the exact same few years I'd had (if you're reading this, btw, you're my hero and congrats on the achievements!) I'd like to actually make progress that feels meaningful, but I'm not really good at finding out how to do that and more often than not I end up wasting time.

What resources/forums/communities, literally anything really, would you all recommend for me to take a look at; or what would you all recommend for me to learn/do next? Stuff about basically any CS-related, computer-related, etc. topic would be appreciated! I'd really value advice from people like you all, who've gotten past this level already, on how to go past it. Thank you all and have a great day! :)

4 comments

The most important thing is to figure out what you want to achieve. Banal, easier said than done, but always important to keep in mind. Your goals and understanding of them are likely to change, but having more understanding is always better than having less. This understanding can only be gained through practice, and is personal to you, which makes it hard to give specific advice.

CS is not really a field that can be mastered as a skill. The skill sets of people developing web services, games, robots, programming languages, hardware architectures, and software that runs on space shuttles will be somewhat different. There are also purely theoretical and mathematical aspects: algorithms and data structures, type theory, formalized logics, etc, etc. All of those have their own resources and communities.

There are some general things that would be good to know for anyone working on anything CS-related. Check out a few computer science courses in big universities, and the things they all teach in first and second years would be the most universal ones.

As for the practical stuff you can do right now: for engineering aspect, I would recommend picking a simple project (website/app/game) and implementing it end-to-end using best practices you can find for everything: code style, testing, repo, CI/CD, and so on. For theoretical aspect you can check out Project Euler and see how far you can go in solving the challenges on there.

And I wish you best of luck on your quest.

Few truisms: learn as much Mathematics as possible because this is how things work, get rid of Qwerty because the younger you are the more benefits you get, always prefer FOSS because our tools ought to be controllable by us and learn SQL because how else are you supposed to manage your data.
> learn as much Mathematics as possible because this is how things work,

I disagree: I spent 10 years in math and theory, ending up in grad school at Berkeley. I took something like 6 semesters of Calculus and I just about never use any of it. It was mostly a waste of my time, and the further it got form computing, the more it was a waste of my time. I certainly regret terribly how much of my time was wasted by listening to those Modern ("pure") Math assholes.

Note that Modern ("Pure") Math is distinct from Numerical ("Applied") Math which is quite useful if you are dealing with physical reality, but it is really just the computing approach again.

The important thing is that whatever abstractions you are studying, that their value is measured by their ability to help you solve problems in _reality_. Abstractions by themselves have no value and the Neo-Platonist belief that they do just makes people pathological. Notice how friendly Numerical Methods people are compared to how nasty Modern Math people are. (Seriously: you can tell people in each field apart just by their personalities.) The feedback loop with _reality_ is what makes the work valuable and the people normal and happy.

Does "infinity plus 1 equal infinity"? I can prove that the first transfinite cardinal, aleph-0, cardinal-plus 1 cardinal-equals aleph-0, whereas, in contrast, the first transfinite ordinal, omega, ordinal-plus 1 does not ordinal-equals omega. That is the formally correct answer according to ZFC (see below). Who cares? It will not help you with anything.

Modern mathematicians teach a formalism called Zermello-Frankl Set Theory Plus Choice (ZFC). It is a terrible abstraction for thinking about reality. In reality the mathematicians are now coming to computing people to ask for help proving their theorems formally using Calculus of Constructions. That shows that the computational approach is better than the mathematical approach. Computing has literally beaten mathematics at its own game.

My former boss ended up as Chair of Computer Science at Stanford. His specialty included formal methods for ensuring software correctness. Pretty mathematical, right? He likes to brag that he cannot remember the formula for the circumference of a circle. That's some pretty basic math to not remember and be a specialist in formal methods at Stanford.

If you want to code, do that. Do not let anyone tell you that any work in reality needs math. It is the other way around: math needs reality or it is just useless junk. Some formal methods may help, but only if it bubbles up from reality. Always make sure you work is in touch with reality. The way to do that is to always work on real problems and only use abstractions that help you with real problems.

In other words, just build something that helps someone solve a problem in reality. Everything else is secondary. Once you see your work help someone in reality, you will never forget it and you will have the path towards a life worth living.

> learn as much Mathematics as possible because this is how things work,

Agreed. Definitely learn as much linear algebra as you can, particularly if you're interested in graphics -- but it's useful for all kinds of things.

You say you've been learning Python and Java. Work on learning JavaScript, and maybe even start looking into WASM. Ignore the people who tell you JavaScript sucks (yeah, it kinda does suck in many ways, but nonetheless there are scads of jobs for it, and zillions of libraries to do just about anything you want).

Perhaps get your feet wet with LLMs. There's a lot of hype in that area right now, but I don't think it's going anywhere.

Find a project or problem that interests you and you want to solve. Then apply what you have learned so far to it.

This will open up avenues of research as you find out what you don’t know.