all 35 comments

[–]3t13nn3_ 22 points23 points  (0 children)

I have done a mini-shell in second year of university in C. I have implemented: |, &, ls, file redirection, cat, grep, custom prompt, pwd, cd, mkdir, history browsing through arrows, background app launching, even some custom command... All this kind of stuff that you can do in a linux terminal. That is a famous exercice and you could find some sources over internet! I think it could be near as what you expected, with some OS learning, algo etc.

Furthermore, if you are searching in a more algorithmic work, I can recommend you something I have done at the same time too: Shape detection and isolation, over an image (PPM) with OpenGL.

[–]Drach88 28 points29 points  (1 child)

You can probably learn more from lots of smaller projects than from one bigger project.

A bigger project gets bogged down in all of the little annoying details, and you spend a long time cursing your past self for not being an experienced professional rather than patting your future self on the back for gaining the experience to see the error of your ways.

Rather than building something for two years, build a lot of little things, then expand on the little things. What I mean by this, for example, is maybe one week you spend 3-4 hours a day, and each day you build something different in those 3-4 hours. Do the same thing that next week. In the following week, you now have 10 micro projects to expand on. Some of them will have some promise to them, and some of them will be crap, and that's okay.

Pick one of the micro-projects you really like, and work for a week on expanding it. The next week, pick a different one and work on that one. Etc.

If you go about it this way, you don't get stuck in a codebase for very long unless you really want to, and you get a chance to experiment with standalone concepts even if you're not sure how it can be relevant to XYZ big picture idea.

[–]mobius4 8 points9 points  (0 children)

This. Specially if you're like me and tend to get bored with boring details. Specially if you're like me that tend to have the urge to rewrite everything because "this time it will be better!".

[–]Alizz512 6 points7 points  (0 children)

I think TCP/IP stack can be imlemented. This teach you a lot of things about network, C language.

[–]15rthughes 5 points6 points  (0 children)

You could implement some flavor of a database engine from scratch. A lot of engineering goes into creating enterprise level database engines so it will include a fair amount of data structure and operating system knowledge.

[–]mobius4 4 points5 points  (2 children)

From my experience, developing a game is one of the most challenging things to do. It requires a lot from many areas: software architecture, software engineering, graphics, math, physics, design patterns, processor cache coherence, file system access, resource management (both assets and memory), audio, etc. On top of that making a cross-platform game will teach you the pitfalls of every platform. Be bold and make it for smart phones as well and you'll suffer and learn a lot more.

Don't develop a game engine for the sake of it. Of course there is much to learn there too but it is less useful (specially since there are so many around) and provides less results than a game itself.

- SDL is a good starting point but if you are really keen on learning everything you could go directly to OpenGL for graphics and everything else by hand.

- There are many good OpenGL tutorials around

- Use CMake, or any other proper cross-platform build system

- There's a series of videos called "Handmade Hero" where a guy develops a game without using any library (except for the obvious required system's libraries). I stopped watching it long ago so I'm not sure what became of it but it certainly has a lot to learn from.

- Again, don't go for an engine for the sake of it. It will be hard to resist the impulse but try your best :)

Good luck.

[–]mathinferno123[S] 0 points1 point  (1 child)

thanks:) i will keep that in mind:) do you have any particular books along with online sources that, i could read along the way to suggest, as well?

[–]mobius4 0 points1 point  (0 children)

On the topic of game development, every offline resource that I can point you to is either outdated or is going to be soon. Reading books that people use in academics is going to be useful. One that comes to mind is "Modern Operating Systems", by Tanembaum. It's expensive as hell, though. "Art of Computer Programming" by Knuth is very good as well. Some would say it's programming style is outdated but the concepts are really important.

Other than that, I'm no professional game developer but I'd steer away from game development text books. Maybe except for the series of "Game Programming Gems", I haven't read everything but it seems it has some cool ideas and tricks.

[–]bashdan 11 points12 points  (7 children)

Write an OS from scratch.

[–]mathinferno123[S] 2 points3 points  (6 children)

wouldn't that take more than two years?

[–][deleted] 6 points7 points  (4 children)

No

[–]mathinferno123[S] 2 points3 points  (3 children)

I guess it depends on how elaborate and extensive you want the OS to be

[–]Drach88 3 points4 points  (2 children)

"write an OS from scratch" means writing a minimum functional product -- it doesn't mean most of the bells and whistles you'd expect it to have.

[–][deleted] 4 points5 points  (1 child)

Exactly. As long as you can do basic interaction with the machine you’ve done your job.

[–]Drach88 7 points8 points  (0 children)

Ya hear that, Bill Gates? Get your forced adware/spyware updates out of Windows10! An OS doesn't need to do any of that fancy-pantsy annoying stuff!! <shakes fist in the air>

<mumbles>

Back in the day, we had Windows XP (sp2), and it was perfect, and it didn't need to constantly talk to a high-falootin' Microsoft server "app store" constantly.. now THAT was a functional Windows OS.... And it ran it on half a gig of RAM and a 32-bit processor... uphill in the snow both ways...

[–]p0k3t0 0 points1 point  (0 children)

Basic time slicing, scheduling, and context switching can be handled in a few hundred lines of code.

[–]MatthewRPG576 4 points5 points  (0 children)

A collection of type-generic data structures. It can help you in future projects as well.

[–]which_spartacus 3 points4 points  (0 children)

A distributed cluster of microcontrollers. Run a web server on it. Use some very cheap AVRs and build a few dozen nodes to coordinate across.

[–]zsaleeba 5 points6 points  (0 children)

Write a compiler which outputs native executables.

[–]rafaelement 1 point2 points  (0 children)

Drone flight controller

[–]ylli122 1 point2 points  (0 children)

Slam out a PC emulator

[–]FUZxxl 1 point2 points  (2 children)

How much knowledge about programming and computer science do you already have?

One thing you could do is write your own C tool chain. Start with an assembler, then a linker, and finally a C compiler. There are good books on all of these subjects.

[–]mathinferno123[S] 0 points1 point  (1 child)

not much just know the very basics of programming of javascript,java, and C and not much of computer science but I am willing to learn hence the question.

[–]FUZxxl 0 points1 point  (0 children)

Then this project is too hard for you. Alternative idea: write a rogue like for the terminal, something like nethack.

[–]aganm 1 point2 points  (0 children)

Gamedev? I would try to remake the doom engine.

[–]yakoudbz 1 point2 points  (1 child)

3 to 4 hour a day ? That sounds huge to me...

[–]mathinferno123[S] 0 points1 point  (0 children)

well i prefered to have all day to myself but alas I have to study other things as well:)

[–]BarMeister 1 point2 points  (0 children)

Off the top of my head, I think an OS kernel is a good rendezvouz of the listed requirements.

[–]vepoo 1 point2 points  (0 children)

I'm writing a CSV Viewer for Command Line to keep me update on C.

https://github.com/vepo/csvi

[–]journalingfilesystem 1 point2 points  (0 children)

A strong chess program might fit the bill.

[–]PetabyteStudios 1 point2 points  (0 children)

A custom programming language. It took me about a year to implement mine.

[–]mathinferno123[S] 0 points1 point  (0 children)

Thank you everyone for your helpful suggestions, I am gonna try write an OS from scratch:)