Jump to content
  • Advertisement
Sign in to follow this  
gretty

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

This topic is 705 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
Advertisement

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

If we are just looking at data structures and algorithms, then I think the AI field has plenty of exercises.

Share this post


Link to post
Share on other sites

Building a Distributed Database will cover a massive sequence of topics. Networking, Graph theory, algorithms, data structures, etc.

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
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!