i have been using linux distributions ( the Ubuntu and suse operating systems ) for two years and I have been well acquainted to the basics like writing commands on the terminal, and a little shell scripting. I have taken a full course on c and c++ and I can write codes to perform meaningful tasks, but still executed on the terminal. I wanted to join the world of software (application) developement for linux system, and I am very eager to know what it takes to write real softwares like gedit, simple ones like typing master software that tells your typing speed and even the complex ones like GIMP. I feel like GUI programming is the most difficult part of any programming language. I once started reading a book titled Beginning Linux programming by Neil Matthew and Richard Stones and I am in dout if it really is the first step I should take to get started with application developement. I would be very glad to see any suggestions regarding where I should get started and if there is a complete reference that can take me to the points I explained above.
Thanks in advance
the first thing to do is review the available compilers / IDE/ tools and make an informed choice. You have g++ installed by default most likely, and can already code in any text editor and compile from commandline for a little program, but a larger project is easier with tools; gui programming specifically CAN be done using only text editors but most have a what you see is what you get or what you see isnt what you get type graphical drag and drop editor. The portable QT for example uses a drag and drop editor that does not show exactly what the final product looks like (its a little frustrating to use due to that, but its also very simple and portable..).
Anyway, a bucket list would look like..
get an IDE you like
choose a windowing/GUI creating library that you like (I don't know how many of these exist in unix, windows only has a few realistic choices).
learn how to deal with makefiles (not required but you may need it)
learn the IDE and makefiles first
make a simple program that reads and writes to the console, like you have already done (can reuse one).
convert that into a gui program and start to learn how to do buttons and text boxes and such in the gui. This is partly a different way of thinking issue... if your existing code did not do it, you will now see why keeping user I/O distinct from any processing/work done is critical to designs. Now, instead of prompting the user, getting input, and doing something to it all in one function, you split that into 3 parts, the getter talks to a text box on the gui, the output may talk to a different text area or draw a picture or whatever, and the processing does whatever else... you will see when you get into it. And you may already design this way, but many people did not get this training in school or in tutorials etc; even if mentioned its unclear about the WHY of it and it does not hit home until you do that first GUI program.
gui programming is also a little different by being event driven. The user can interact with anything you provided at any time, so order of operations issues become more apparent if not careful about that. Like allocating memory before using something, or having a default value before printing something, etc.
I don't know that there is a complete reference. Each of those topics goes deep, but if you search around you may find an overview / get started guide.