I begun learning programming a few years ago, and it feels like I barely progressed. I know the basics and a bit of advanced python(I have learnt to use a few libraries), html and css plus a tiny bit of c++, but not much outside of those. I enjoy programming and solving problems using code, and it’s an enjoyable hobby of mine. But I feel like all I do is extremely basic and I want to advance but it feels overwhelming seeing the countless of things I could learn.
I wanna know what are ways I can actually apply the things I have learnt/will learn on somewhat worthwhile things, because the main problem right now is that I don’t really have anything to do with the things I’ve learnt other than silly projects that don’t really last more than a day and aren’t that complex. I also want to advance my knowledge as previously stated since I feel like I know too little for the amount of time I’ve been learning to program.
For context I’m still in school but not too far off from higher ed, and I have a decent amount of free time on most days(~2-4 hrs).
Thanks if you reply
Does your school have a robotics team or something along the lines of computing? That would be a good option. Also if you are still in high school and plan on going to college, you still have plenty of time to learn.
Join in on your school clubs and research projects, or start some with friends!
There are many great competitions where previous programming experience would come in handy.
One competition that takes place in the U.S.:
NASA Student Launch
It actually IS rocket science! Student Launch is a 9-month long challenge that tasks student teams from across the U.S. to design, build, test, and launch a high-powered rocket carrying a scientific or engineering payload. It is a hands-on, research-based, engineering activity and culminates each year with a final launch in Huntsville, Alabama home of NASA’s Marshall Space Flight Center. The activity offers multiple challenges reaching a broad audience colleges and universities as well as middle and high school aged students across the nation.[1]
Culminating Event Dates: April 30 – May 4, 2025
Culminating event location: Huntsville, AL
Eligibility: Open to U.S. Students
Grade Levels: Grades 6-12, College and University
I do not live in the US so I unfortunately cannot join that competition. Not sure if my friends and I can commit ourselves to a project but we’ll try.
There are many competitions that are open to people outside the US, so I would check others out if you are interested in rockets!
Here is another: https://www.soundingrocket.org/sa-cup-home.html | https://www.soundingrocket.org/2024-sa-cup.html
Teams that competed last year from outside the United States:
- Mexico
- Philippines
- Canada
- Thailand
- United Kingdom
- Turkey
- Algeria
- Brazil
- India
- Argentina
- Romania
- Germany
- Australia
- Spain
- New Zealand
- Poland
2024 Team List (Last updated 6-11-24 acb): [https://www.soundingrocket.org/uploads/9/0/6/4/9064598/published_team_list_061124.xlsx_-_for_output.pdf]
I like to pick a fun project, pick a language I don’t know / wanna learn better, and then just go for it. Don’t be discouraged if somebody’s already made it - nothing says your learning project has to be useful in the real world, tho it’s kinda nice if you think of something that can be. If your project seems intimidatingly hard, remember the programmer workflow of breaking it down into manageable pieces and tackling those. If it doesn’t seem hard enough to teach you anything, I sometimes like to write it without using any external code or libraries (or a minimum of them; if it’s something like a GUI program I’ll use direct vulkan bindings instead of like Qt). This is also one of the few areas I get some use out of LLMs, cuz bullying ChatGPT or a local equivalent into giving me huge and tailored lists of program ideas can be really helpful. Either way my main advice is just to pick something that interests you and have fun with it; things don’t have to be worthwhile to other people to be worthwhile to you.
Its a tough problem. You have to find something that you want to exist; like an app or a website or a game. For example, try making a GUI for managing SSH keys. You know, like the ones github makes you create in order to clone and push to a repo. Make a visual representation of those keys (stored in the .ssh folder), and tools to add/delete them.
Along the way you’ll find tons of missing things, tools that should exist but don’t. Those are the “real” projects that will really expand your capabilities as a developer.
For example, I was coding in python and wanted to make a function that caches the output because the code was inherently slow.
- but to cache an output we need to know the inputs are the same
- hashes are good for this but lists can’t be hashed with the built-in python hash function
- we can make our own hash, but hashing a list that contains itself is hard
- there is a solution for lists, but then hashing a set that contains itself is a serious problem (MUCH harder than hashing a list)
- turns out hashing a set is the same problem as the graph-coloring problem (graph isomorphism)
- suddenly I have a really deep understanding of recursive data structures all because I wanted to a function that caches its output.
If you want to improve significantly, go read someone else’s code and modify it. Try to fix a bug in a program you use, add a feature you want that doesn’t exist already, or even just do something simple for the sake of proving to yourself that you can do it – like compiling it from source and figuring out how to change some small snippet of text in a message box. Even if you don’t succeed, if you put in a serious effort attempting it, you will almost certainly learn a lot from trying.
Edit: changed wording to try to be clearer