Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Independent Study, What Should I Study?

  1. Aug 10, 2011 #1
    I have the chance to do an independent study on CS this semester, and I'm here for suggestions. Since it's only high school, and the teacher has no CS knowledge, I can get away with studying anything from learning a library and making a small project with it to working on my hobby kernel. The teacher likes me, so just about anything legitimate would be okay by her.

    Literally anything is an option, but I'd prefer it to be more towards theoretical CS and farther away from software engineering. I'm interested in AI, specifically, machine learning, axiomatic systems, language design, and object oriented, microkernel design.
  2. jcsd
  3. Aug 10, 2011 #2


    User Avatar
    Gold Member

    How about a compiler?
  4. Aug 10, 2011 #3


    User Avatar
    Science Advisor

    Hello TylerH

    You could do a few implementation of some searching algorithms based on optimal data structures. One example is a binary-tree representations with the leaves of the tree being the elements, and the intermediate nodes being comparison information that tells the search algorithm the classification information for both sides of the rest of the sub-tree with respect to the node.

    You could also work on creating some code for a mini task manager. Instead of using heavyweight objects like processes, just use threads inside your existing programs process and add a basic framework that allows you to register processes, create, destroy, and so on.

    If you were going to do the above, I would strongly recommend you create template definitions for a class factory, publish/subscribe system (used for sending messages and subscribing to event systems that send messages), and some kind of plugin framework linked to the class factory that allows you to easily create libraries (aka DLL's or SO files) so you can extend things easily which allows you the ability to create a SDK for your platform.

    I strongly recommend you do the above when you want to create a new project. Typically you will just use existing code you have written when you do a new project, but if you don't have the framework it's a good time to look into it.

    If you are interested you should look at some key COM interfaces. I'm not saying you have to write a COM platform, but the interfaces give you a good idea of how to create software that by design, is easily modifiable and easy enough to create a SDK so that you can upgrade the software without changing the design or having to recompile your executable.
  5. Aug 10, 2011 #4
    I think I'll take the task manager idea, but modify it to just a thread pool. I was really disappointed by C++0x's lack of a thread pool to go along with thread, so I'll implement that. Then, I'll work on multithreaded searching and sorting. Maybe a binary tree that spawns threads to search the subtrees.
  6. Aug 10, 2011 #5
    Meh. How 'bout an interpreter?

    I've been trying to find an excuse to use boost::spirit. I think I'll invent a more generic purposed PROLOG.
  7. Aug 10, 2011 #6
    I did a FORTRAN independent study. Final project was creating a evolutionary algorithm to minimize the sum of squares of a 3D cost field. Was a really beneficial project. I'd recommend a genetic algorithm study - used all over the place in the applied mathematics community.
  8. Aug 10, 2011 #7


    User Avatar
    Homework Helper

    I think what he meant was for you to write a mini-kernel of your own, not to use the multi-tasking features of an existing OS. For the mini-kernel, it would help if you had some type of software emulator / debugger in addition to an assembler, compiler and linker for some CPU architecture that you could run on a PC. There are tools like this for the ARM processor, but I'm not aware of free ones, unless they make a free set of tools for students.

    I think the issue with the thread pool was how to define the tasks to be performed, and if a master process would assign tasks to be performed versus child processes grabbing tasks from a common queue. This can get as complicated as job scheduling for multi-tasking mainframes (note that job scheduling normally includes an estimate of execution time for each task to help prioritize the tasks to be performed). In other cases, the tasks may be required to run in FIFO order.
  9. Aug 10, 2011 #8
    I'm unfamiliar with the concept of a class factory and a publish/subscribe system. Could you give me an example of what the API would look like for that? (The function declarations, and a small note on what each does.)

    I would greatly appreciate it.
  10. Aug 10, 2011 #9
    I don't know about Fortran. I've been told a lot of times that it's an old and obsolete language. I like the machine learning related part. I'll consider doing it in C++, if I have time left at the end of the semester.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook