Sign in to follow this  

Project/Objective that covers a broad subset of Computer Science topics

This topic is 403 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Can you think of a project that would expose someone to a broad subset of Computer Science topics and features? Obviously there is no silver bullet but there are some projects that would expose the developer to a wide variety of CS topics (design patterns, data structures, algorithms, architecture etc.)

 

Ie, throughout your whole Computer Science bachelor you are working on 1 project. Each course/unit you learn, you apply that knowledge to this one project.

 

Things I can think of:

  • Develop a simple Operating System
  • Develop a cross-platform cross-application API (by cross-application I mean; desktop application, web application, smart-phone application)
  • Develop a programming language (incl compiler)

I'm thinking one of the above is suitable but maybe you could expand/elaborate that project/objective to ensure that it targets a large subset of CS topics.

 

Share this post


Link to post
Share on other sites

Seen as we are on a game dev forum the obvious one would be a game. There's a massive amount of things that go into a game, make it multilayer and you've got networking too. You can probably get away without databases but there are plenty of opportunities to squeeze those in to a game too especially a multilayer game with a persistent back end.

 

The downside to that would probably be the amount of content that might be required and the non-typical CS type parts of a game such as rendering and physics. These are perhaps parts that could take up a lot of time while not necessarily being things that would be taught.

 

A vertical slice of a game would be great.

Edited by Nanoha

Share this post


Link to post
Share on other sites
Programming language/compiler is a good subject, albeit not very original for CS study. I've personally written a scripting language compiler that generates fake assembly level binary code to be executed on a virtual machine developed alongside the compiler and would suggest this is an excellent way of demonstrating many core concepts of the more theoretical sides of CS.

One thing to avoid though is the temptation to recreate whatever programming language you are using within the language. It can be very tempting to end up trying to write a C++ compiler in C++ for example. Make some fundamental decision about the language early on that differentiates its from the implementation language you are using. For example, a completely dynamically duck-typed language is a good choice.

Share this post


Link to post
Share on other sites

In gamedev context, you could make a language for creating game assets; data files with properties for game elements, animation builder that takes a bunch of images to merge into an animation in the game. Higher level considerations are that you generally have a whole lot of sprites or game elements, and you want an efficient notation to deal with them.

Text systems for translations aren't quite trivial as well, if you want to properly handle multiple languages with different cases, gender, and plural forms.

 

Maps or level descriptions are other things you can see as a language

Edited by Alberth

Share this post


Link to post
Share on other sites

For me the most challenging and rewarding (in terms of experience) project was development of a 'realistic' voxel engine (basically, trying to replicate Voxel Farm).

First, I've learned about matrix analysis and numerical methods (far from pro, but reading linear algebra textbooks every day), i've learned to love math!

 

Building a voxel engine involves:

 

- spatial data structures (octrees for adaptive triangulation-'contouring', BVH (also, K-d and BSP trees) to accelerate raycasting for scan-converting triangle meshes, hierarchical LoD).

 

- data structures and algorithm analysis (why my new bottom-up linear octree-based out-of-core contouring algorithm is so much slower for chunks > 32^3? because it uses binary search; with the hashtable it becomes much faster)

 

- multithreading, user-space job scheduling with dependencies (chunk generation/loading/CSG/lighting/contouring should happen in worker threads; Dual Contouring makes it worse, because chunks depend on neighbors).

 

- data compression is mandatory if voxel size is like 10-15 cm (RLE, dictionary-based, quantization)

 

- applications of space-filling curves to transform 3D -> 1D (for storing voxel data on disk, to improve data compression, for fast nearest neighbor searches in a linear octree)

 

- again, lots of math, especially involving matrices, and for debug visualization too.

 

- code profiling and optimization (e.g. why is my new optimized-for-csg chunk format noticeably slower? because TripleRayRep::IsPointInside() is very slow -> precompute a bit-array with inside/outside statuses of cell coners).

Share this post


Link to post
Share on other sites

This topic is 403 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this