Independent Study, What Should I Study?

In summary, TylerH has the opportunity to do an independent study on CS in high school and is seeking suggestions. He can study anything from learning a library and creating a project to working on a hobby kernel. He prefers to focus on theoretical CS rather than software engineering and is interested in AI, machine learning, axiomatic systems, language design, and object oriented, microkernel design. Suggestions include implementing searching algorithms using optimal data structures, creating a mini task manager using threads, creating a class factory and plugin framework, exploring COM interfaces, or working on a thread pool and multithreaded searching and sorting. Some other suggestions include creating an interpreter using boost::spirit or a more generic PROLOG, or studying genetic algorithms. Another idea is to
  • #1
TylerH
729
0
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.
 
Technology news on Phys.org
  • #2
How about a compiler?
 
  • #3
TylerH said:
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.

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.
 
  • #4
chiro said:
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.

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.
 
  • #5
DavidSnider said:
How about a compiler?

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.
 
  • #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.
 
  • #7
TylerH said:
I think I'll take the task manager idea, but modify it to just a thread pool.
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.

TylerH said:
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.
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.
 
  • #8
chiro said:
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'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.
 
  • #9
swartzism said:
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.

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.
 

1. What is independent study?

Independent study is a type of learning in which a student takes responsibility for their own education by selecting and studying a subject or topic of interest on their own. It is a self-directed and self-motivated form of learning, allowing students to pursue their academic interests beyond the traditional classroom setting.

2. How do I choose what to study independently?

Choosing what to study independently can be a challenging but rewarding process. Start by identifying your academic interests and goals. Consider your strengths and weaknesses, and choose a subject that you are passionate about and that will help you achieve your academic and career objectives. Consult with your academic advisor or mentor for guidance and suggestions.

3. What are the benefits of independent study?

Independent study offers several benefits, including the opportunity to develop self-discipline, time management, and critical thinking skills. It allows students to explore their interests and passions in depth and at their own pace. It also provides a more personalized and flexible learning experience, which can be beneficial for students with different learning styles.

4. How do I create a successful independent study plan?

To create a successful independent study plan, it is important to have a clear and specific research question or topic, as well as a detailed plan and timeline for completing your study. Set realistic goals and objectives, and regularly check in with your academic advisor or mentor for feedback and support. Use reliable and credible sources to conduct your research, and make sure to stay organized and on track with your progress.

5. Can independent study count towards my academic credits?

Yes, independent study can count towards your academic credits, but it ultimately depends on your institution's policies and guidelines. Some universities allow students to earn credits for independent study, while others may have specific requirements or limitations. It is important to consult with your academic advisor or department to determine if your independent study can count towards your academic credits.

Similar threads

  • STEM Academic Advising
Replies
1
Views
439
  • Programming and Computer Science
Replies
6
Views
1K
  • STEM Academic Advising
Replies
11
Views
1K
  • STEM Academic Advising
Replies
4
Views
1K
  • STEM Academic Advising
Replies
14
Views
1K
Replies
4
Views
836
Replies
2
Views
1K
  • STEM Academic Advising
Replies
9
Views
1K
Replies
2
Views
862
Back
Top