Help doing something useful

So I've been taking C++ and reading books on it while coding a ton of completely useless programs at the side. I can't seem to find anything on actually creating software that is not restricted to simple text editing or basic computation.

Are there any books/tutorials out there that can show me how to start writing programs that do something useful?

I'm not asking for GUI I don't mind not learning that now (Although I have succeeded at creating a window). But What I'm talking about is, how do you get started writing something like a Music Converter or player, or something like simple 2D or 3D game, or anything that is remotely interesting beside super simple text editing or stuff that will be WAY more efficient using a pencil and notebook for.

<edit> and yes, I have gone through arrays, pointers, OOP, classes, and everything. I'm at the point where every book I read is just some useless repeat of the RAW basics or just explanations on how to "Plan" your software project.

What use is planning your software project if you can't even think of how to start creating a program that does something beyond display some text or number?
Last edited on
how do you get started writing something like a Music Converter or player
What exactly is a problem here? Do you have sufficient knowledge to do that? Do you have format specifications to know how read and write corresponding files? Do you have any knowledge of signal processing theory and corresponding math knowledge?
It is a complex field if yo want to do it from scrach.
If you just want to get some existing library, feed it files and get the result, start with searching for library which suits you.

or something like simple 2D or 3D game
You might try this: https://www.binpress.com/tutorial/creating-a-city-building-game-with-sfml/137
http://codeumbra.eu/series/complete-roguelike-tutorial-using-c-and-libtcod
I did not look into it, but it seems like something you requested.

Also you may want to check Google Code and somethng like http://www.codingame.com/games to learn to solve problems with your skills.
There are many books out there.

You could try a stock screener, an option pricer, etc etc, interface with excel and then you have a nice little trading tool.

Pattern recognition?

There are many useful things you can code in C++, you just need the right background and a good book.

For example J London has a big fat book on Derivatives pricing

http://www.amazon.co.uk/Modeling-Derivatives-C-Wiley-Finance/dp/0471654647

M Joshi has a few books, one Mathematical Finance, another C++ Design Patterns and Derivatives Pricing.
Though there are prerequisites for even trying to understand such books.

I never watched it but bucky builds some stock screener I think.

Here is another finance guy, Andy James Duncan

https://www.youtube.com/watch?v=IlPnRvDioGQ

Not sure if this is what you are looking for.

I thank you for your responses. But...
Maybe including advance topics that require DirectX/OpenGL Might've made my question a little bit hard to answer. Although, these do look promising.

I was more shooting for continuing my skills. I feel strange using API's and other external dependencies because of 2 aspects:
1: it feels lazy.
2: if something happens, I don't know how to fix it.

I don't want to start using any external dependencies yet, because I simply do not know how to write them myself. Yes I have Exhaustive knowledge on how just about anything in a computer works, but like my "Music Converter" example earlier. How do you get started after having the program load the music file? Every time I look up a book on any subject it gets obsessed with using Unknown code written by someone else, and it just confuses me completely because whenever I see a Macro appear I don't understand it's aspects, I know what it's supposed to do, but how do you recreate them?

What I'm asking for in short: How do you invent the Wheel in C++?
There has to be a RAW programing guide around or something of the sort.

I will learn external libraries, APIs, all that non-standard code stuff AFTER I can at least confidently write my own code that uses NO code besides my own. I mean, how do the APIs exist if there is no origin point?
A more exact example would be on the Music Converter one that I listed.

How would I go about Recreating the mp3 codec?

If I look up a book on something like this it'll tell me to use LAME 3.xx <- this is my problem right here. I don't want to try using external code. I would like to create my own encoder!

In a metaphorical way. I'm asking how to create my own building blocks.
If I wanted to build a house, I would have to plan it out, then select my materials. I pick Bricks! So APIs and other things like .NET and OpenGL are Bricks... I know that bricks are made from clay(In this case Clay would be C++). How would I go about creating my own Bricks to use on my house project? Not even College tries to answer my question.
Last edited on
http://sourceforge.net/projects/lame/files/lame/3.99/

The source code for LAME, try and decipher how they have done it?
The reason why most books force you to write useless programs is because they cannot make assumptions about your knowledge. Everybody can read and knows basic calculus so books can safely refer to that, but anything else is no-go.

To write a program solving problem in some area, you need to have knowledge in that area. If you want to write a program calculating result of chemical reaction, you need to have extensive chemistry knowledge on top of programming knowledge.
To "create my own encoder", you need to understand all theory behing it. Litmus test: if you do not know what FFT abbreviation means in context of signal processing, you do not have enough knowledge.

... I know that bricks are made from clay(In this case Clay would be C++).
Clay is OS API, C++ is fermions and bosons.
As most people never learn particle physics, most programmers do not feel competent enough to tackle system programming: you need to be able to write programs before you will write systems for them. In other words, you need to use existing bricks to understand what is important fot bricks and what to look for when creating them.

A suggestion: write data compressor (archiver) using run-length encoding. They you write stream wrapper: class inheriting from ostream which takes another ostream as constructor argument. It should compress data you send to it and send compressed data to another stream. Do the same for istream and decompressing. That way you will have stream adapter which allows you to directly read/write compressed data.

Last edited on
This is actually a far better explanation than any I've ever come across before in my internet searches.

I do admit that I am not fit for creating my own encoder or codec, yet. Though I was planning on learning the different APIs that are out there to create my own converter. Although I am understanding what MiiNiPaa is saying.

So I guess I got a ton of source code to start reading and decomposing if I'm to make any progress in my studies. Welp... I didn't want to take on APIs yet until I could've had a basic understanding of the creation of software from point 0 to end, I guess I'll accomplish that some other time.

Thank you all for your responses.
Topic archived. No new replies allowed.