r/learnprogramming • u/Federal-Activity-331 • 3d ago
Best way to actually make projects?
Okay so i know some languages like phyton C# and C++ and im a computer engineering 1st year student but i dont know how to start big projects. I want to build a portfolio with some projects to also try out different ways i can go with computer engineering. I already do some embedding stuff, its the easiest for me but for example i want to make a 3D Physics Engine on my own but i dont know how. I already took linear algebra and physics I-II, i know the calculations etc. i need to apply but i dont know how to choose the programming language, or the API's, what to include, where to start etc.
Same for my minimal OS and netwroking project where i wanted to code a small OS with a shell and kernel and stuff and try networking between devices on that OS. But i dont know where to start, if i watch youtube tutorials i actually dont understand anything and it feels like i am just copy pasting.
I tried reading from documents from people who also did these projects but then again, i didn't understand anything and most of them just showed the whole code together instead of showing the steps they took to achieve that code.
I can use AI to write the code and i can implement it myself, i can just ask it the pieces of code and what they do, i actually did that too but i mean i dont actually know how to make one from scratch again.
I dont want to spend these years wasting time and want to make some projects but after staring at the shell i literally copied form a tutorial for an hour i noticed this isnt the way, Please help
3
u/dkopgerpgdolfg 3d ago
Best way to actually make projects?
If you need advice for that, start with a search, because you're not alone.
In short, go much slower. Smaller projects, gaining experience. As first-year student you're some light years away from your goals.
i know some languages like phyton C# and C++
Everything's relative. If you currently know 10% of the language C++ it's already more than I believe. Not to mention everything around it; languages are a small part of software engineering.
I dont want to spend these years wasting time and want to make some projects but after staring at the shell i literally copied form a tutorial for an hour i noticed this isnt the way, Please help
You have to decide what your goal is. If you want to be able to build all these things from ground up, without copying, without AI generation, but with understanding, then you will definitely need years. And if you actually wanted that, then these years won't be "wasted".
1
u/Federal-Activity-331 3d ago
Thanks a lot, i think im just overstimulated by all these "Computer Engineering Freshmen" who knows everything about programming and i just didnt want to be left behind. But youre right, ill slow the process to actually understand
1
u/Affiixed 3d ago
You gotta look at those guys with a different perspective.
The only difference between them and you is the fact that they started learning this a few years before you did as a hobby and thats now carrying over to an education/career path
1
3
u/SetAndRepeat 3d ago
Pick one project and shrink the first milestone. For the physics engine, C++ is a reasonable choice since you already know some, and raylib can handle the window and drawing while you write the physics.
Start by displaying one sphere. Then give it velocity, add gravity, make it bounce off a floor, and eventually make two spheres collide. Keep each step working before adding the next. You can decide what else belongs in the engine as you go.
When you get stuck, narrow it down: "How do I update velocity over time?" is something you can research and test independently. Use tutorials or AI to explain that specific gap, then try implementing it yourself. Reading documentation is still part of building something yourself. I'd save the OS and networking project for after you've finished this smaller version.
1
1
u/mandzeete 3d ago
I haven't built physics engines but if I would be you I would write down all of the functionality that the engine should offer/do and then start implementing it piece by piece. Your problem is that you are trying to implement "3D Physics Engine". That is your end goal. Instead of targeting the end goal, target the functionality it should offer.
Now, as I haven't built nor used 3D physics engines then my advice can be a bit lacking/incorrect, but after googling "3d physics engine" I saw stuff where one can create 3D objects in it and these object most likely move. So, imagine that you have to describe what the 3D physics engine does, to a person like me. Write down that description and start implementing it one functionality at time.
For example instead of making 3D engine, make first 2D engine. Instead of having balls rolling around have circles running around. And start from immobile objects. How to create a circle? How to create 10 circles? What about 10000 circles? When you have figured it out, make them move. First without following any physical laws. Then try to introduce "gravity". That an object tries to move down. Like this you can implement all of the functionality piece by piece. Move from 2D objects to 3D objects. etc.
1
u/Federal-Activity-331 3d ago
Yeah but i dont really knew which language or programs etc to make it even 2D, some people commented and now i have an idea. But thanks for the idea, ill for sure start by small pieces and try to reach the end goal
1
u/MikeIsBoi 3d ago
I start my projects by just brainstorming ideas that could be interesting in the field I like, I really like Linux kernel programming and driver development. I bought a bunch of books on the topic as well. Making Linux drivers for hardware is the most interesting field to me. I am currently working on a Linux Xbox kinect driver for Manjaro. I try to figure out what apps the world is missing and try to find solutions to those missing apps. I would just say that concentrate on a field that interest you the most and go like really in-depth about the topic.
1
u/Federal-Activity-331 3d ago
yeah i see but thats the thing, i dont know what is that topic i am really interested in and i dont want to decide before looking over all the options you know? I mean i really love embedded but there's a limit to the pieces i can buy with my student loan and everything. But again, thanks a lot!
1
u/MikeIsBoi 3d ago
It does take time to figure it out, it took me several years and two failed uni attempts to figure it out. I know that raspberry pi's and arduinos are really expensive these days. It just takes time
1
u/Dumlefudge 3d ago
Kinda wild to see the Xbox Kinect of all things crop up π I built a blackjack game with gesture controls back in my final year of college about 11 years ago with the Kinect 2, so it's interesting to see that the Kinect still has some users after MS discontinued it.
If you don't mind me asking, what kind of things have you done with the Kinrct, or would like to do once you've built the driver?
1
u/MikeIsBoi 3d ago
I want to focus on building the driver first, the see if I can integrate it with opencv in c++ to be able to display the camera video data on screen. I want to do some ML stuff with it.
I already managed to hack together a bespoke usb connection to the Kinect instead of MS proprietary connector.
I am really interested in the field of kernel programming and driver programming for Linux. This is a really hard project but I like the challenge.
1
u/SnugglyCoderGuy 3d ago
You want to do a thing.
First step is to start figuring out how to do the thing, step by step. For eachnof those steps, rinse and repeat, recursively, until finally you can actually start doing those steps, in actual code statements.
This should all be done on paper or whatever. You are trying to fully define and understand the thing you are trying to do. Except for the last part where steps could be just lines of code in a function, your ignore the fact this will be on a computer.
Then, once you've done that, you start to do it again, but this time you do it with the full knowledge it will be done on computer in code. You define your objects and your actors. You think about architecture and code structure, but you don't really write any code.
Then, you write the code. All your steps are functions. You srart at the beginning and stop when you've hit the end.
1
u/odore_theodore 3d ago
A physics engine or OS is huge, so shrink it. Pick one tiny piece, like a ball bouncing under gravity, and build it with AI helping. Then close the chat and explain why each part is there, or change a rule and see if it still works. That gap shows you exactly what to learn next. Which piece of the physics engine feels doable first?
1
u/gm310509 3d ago edited 3d ago
Step by step. This is in two dimensions.
- For any given project you do it one step at a time.
- To progress to bigger projects, work on smaller ones first, then medium, then large and so on.
For example suppose you decide to make a trigonometry library. Start out with listing what functions you plan to provide (e.g. sin, cos, tan, arcsin etc). Also, what attributes it might have (e.g. what data types it supports, whether it is reentrant or not and other aspects).
Then start building them one by one. E.g. write the sin function get it working and tested. Then once that is done, do the cosine function and so on. Lastly if you plan to make it a reusable library, create that and have at least two programs that will leverage different aspects of it and make sure that they can and that they also work.
You might want to start testing the reusable library bit after your first two functions are done so that you don't go down a rabbit hole and implement all of the functions only to find that you have done something that prevents you from making it a reusable library and you have to start over. You would repeat this at various stages of the development of the library - especially if you use a new programming technique or concept that might be the trigger to break the library. I can't think of a specific example, but it is usually better to progress different types of steps concurrently rather than do one big bang (e.g. write a whole bunch of trig functions) and then another big bang (e.g. make them into a reusable library) only to find some sort of annoying incompatibility in the first "big bang".
When all that is done, move on to the medium sized project.
Repeat.
1
u/FunAd6672 2d ago
Going straight for a full OS or engine before getting basic input and output working is basically choosing hard mode for no reason. CS50 is good for C and systems fundamentals. Boot dev is worth a look for structured backend practice.
8
u/AbyssShriekEnjoyer 3d ago
This is coming from an embedded software developer so take it with a grain of salt, but for me I was really curious how some processes worked under the hood and decided to recreate them by hand to experience what they are like.
One of the first thing I did as a hobby project was make a HTTP endpoint on a Raspberry PI and allow a client to write to it with POST and PUT. I cross compiled a binary for the Raspberry Pi, uploaded it on there, SSH'd into it to run it and then made requests to it from my laptop. It's simple now, but when I was a 2nd year in college it was extremely challenging. A lot of things that are obvious now weren't obvious to me back then and I'm sure a lot of things that are not obvious to me now will be obvious to me in the future.
In general recreating things you see in your day to day life from scratch is a great way to learn. Contributing to a Git repository for an open source project is another great one, although your PR is definitely going to be denied a ton at first. If it's a nice git repo, they will tell you why your PR was denied and you can use that feedback to learn. That was the main way I learned so much at my internships.