I wont call myself a novice programmer, I have been working for a while now in c and c++ however I have never worked on something of my own. I think a bigger learning can be accomplished if one works on some project on there own apart from there work. Keeping this in mind, could you guys tell me some project I can implement? I recently learned posix threads so something I can do with that would be good. unfortunately I dont know anything about doing and making UI so I would like to avoid that.
You could write your own threadpool, that would be interesting, challenging, and wouldn't require much UI work.
You may not get a lot of threading exposure, but anything on http://projecteuler.net/ is recommended.
Optionally, you could make a program to draw and color the Mandelbrot Set. You could do that with multiple threads and it lends itself to extended features for a larger project as you desire.
Projects that meant a lot to me on the start were:
1) Small picture editing project. Various operations on the .bmp files like rotations, changing contrast, black and white conversions, convolution filters etc. You really see some results so it is kind of cool. You can easily add posix threads in that story.
2) API for B and B* trees.
3) Preemptive multithreaded OS kernel. Things like semaphores, signals, fork function etc. It can be really hard if you don't have mentor, but it is extremely useful.
4) Thread safe FAT16 file system.
5) Distributed image processing.
I did those projects during my first 2-3 years of "programming career" and those meant a lot to me, so you can try some of them.
You could try to code a VST Effect if you like music (MAO).
with a simple interface you could learn more about thread, dynamic plugin, real time constraints ... Another idea could be a basic command line app hosting plugins each plugin implementing a simple action. To process different actions on data depending on the plugin you load. Or implement a parser (or compiler) for basic MIPS for example.
Something I wish I had:
Design a data description language (ddl) that allows you to express some C (and/or whatever) types.
Write a program that, given specifications in the ddl, writes C (and/or whatever) code that :
- defines the types in C (and/or whatever)
- writes text representing instances of the types
- reads text to generate instances of the types
- frees instances of the types
Such a facility could be handy in other projects; one can spend a lot of time, over the years, producing such boiler plate by hand.
Further possibilities:
- converts type instances to binary (e.g. for sending over the network)
- converts binary to type instances
Then there is the tricky part: implement a facility for updating type specifications, so that for example if you have a file of revision a text type instances, you can read that with a rev-b program.
A few suggestions:
- implement a HTTP and/or FTP server;
- implement thread-safe containers and the associated test programs. It will be a good exercise to look for potential deadlocks and improving the locking strategy.
Have you tried the free community-based FOSS advertisements? Those projects are all looking for contributors :)