Here is a little bit of my convoluted history with programming.
I started C++ programming some years ago at a local community college. Since then, I moved onto DeVry University for a Gaming Simulation Programming degree. My ultimate plan was to shoot for video game programmer, and fall back on being a software programmer if I couldn't get hired as a designer. I'm 3/4 the way to my 4 year degree.
I have a very strong grasp of most of the concepts I've come across in C++. I know about recursion, OOP, and all that wonderful stuff. However, all I can do is write console programs with a few classes and structs, and make them do pretty neat things with data entry prompts and data processing.
But this is hardly software development. What steps do I need to take to start learning how to write a real program- Something with some GUI. Not that I don't love the command prompt in all its Matrix-y glory, but I want to be able to call myself a programmer, not a wannabe programmer.
Can anybody help me? I'm not even sure of the proper questions I should be asking... Totally lost my way here.
I don't think making GUI programs takes you any closer to any goal, it is pretty simply especially since most have drag-drop features to create the GUI part along with auto generated files.
It automatically generates all of these classes and functions, and almost all of them are foreign to me. I always thought I needed to learn how to write those files that are automatically generated? Is this not the case? Should I just learn how to manipulate the items rather than how to write them all from scratch?
That's the native Windows api for creating windows. It's still written in C you might as well use something like WTL or another that is cross platform such as Qt. All GUI API are going to be different so unless you only develop on one system there is no use going that in depth. I think GUI programming is probably one of the easiest things (with the right API). The windows api is outdated (to me), it also isn't very easily expandable if you want to create your own controls.
GUI applications are just smoke screens, they catch the users eye but not the programmers heart. A real programmer, in my own opinion, is not a guy (or girl, depends) that can design GUI applications (that's probably beginners trial until they can get something more in depth in developing an application), but one that can solve complex problems through simple and efficient solutions. And keep control of the code (keep it organized, nice and tidy).
If you wish to move on you can simply think of an idea (not something big, not something small, somewhat balanced) that you know you cannot do with your current knowledge (well maybe just a part of it), that will make you learn new stuff, experience with other things than the ones you are used to and you get the idea.
Also simple applications that, for example store an address book, may look simple on the cover, but in depth they can be more complex than the eye lets to see. Make a small address book application, wire it to a sever, then store the data in a database, transcend your application into a service application and turn it into a web application accessible from everywhere using the Internet, then add extra services (more searches, more sorts, more contact details, more everything). Just an idea of a spare time project that can end up useful to a lot of people (and an extra line to your CV).
However it all gets down to the question: "What do you wanna do for a living?" Programming is a vague answer, you can program lots of stuff in different languages using different frameworks.
What a strange perception. The majority of software operates without any gui. The software that moves billions of dollars between hedge funds and broker-traders, the software that runs power plants and satellites, feeds paper into your printer and adjusts the spark timing in your car engine, the software that fetched this page from the database and the software that routed the packets across the Internet to your computer.
Perhaps it's my C++ bias, but GUI programming is what isn't "real". Connecting models and views is nowhere as rewarding as pushing hardware to the limits or developing new and improved algorithms.
LilJoe & Cubbi make very good points and if you consider, Linux can exist without Gnome or KDE, but those GUI applications cannot exist without the kernel. Maybe your getting caught up in the notoriety aspect of software, such as a gamer may get. In actual fact though, if it wasn't for the engineers writing OpenGL, DirectX and a miriade of other engines, these programmers would be looking a blank screens.
All software is real, it just what you don't see is often more important than its representation to the user, GUI or Console
Wow, I'm really grateful for all the responses I've gotten here, and so quickly too. I frequent this website all the time for references when I'm coding, but I was always hesitant to try the forums because of negative experiences I've had before, either not getting responses, getting false information, or getting trolled. So thank all of you very much.
I believe I may have misrepresented myself here a bit though. It's not that I'm focused on GUI, it's that I thought it was the next logical step. I am writing a program that would help me log a fitness schedule. It started out just being able to enter, save and retrieve food data, like nutrition facts. But then I decided to modify it to have users, and be able to log information on various exercises as well.
It started a long time ago, and as I developed my skills and learned new things, I'd rewrite certain parts over and over again to make them more concise and efficient. But it is a C++ console program, and I thought to myself, "None of the programs I download online run in the command prompt", so I tried to figure out what I needed to do. I don't have any formal training yet in the field, so I was just stabbing in the dark. I looked at mine, and I looked at others, and the difference was that they could make windows and controls and run installers and so many other things I just don't understand.
If what you're all saying is true, that I am a little bit misguided here, what would you suggest I do or start to learn next? I was under the impression that, when finished, my little fitness logger would not suffice on my resume when I go to get a job or an internship. Perhaps I was wrong and I was on the right track all along?
EDIT: I suppose my question really is- "If I'm already on the right track, and I should continue with my fitness logger, what should I do with it once it's running and finished?"
Right now, like I said, it's just a console program that runs pretty independent of anything else. I don't know how to connect it to the internet, or to servers or databases (But I did learn a little database material with .php). Is that what I should try to learn next?
Having side projects always helps, when you presents your CV, the people who's reading it sees that you have side projects and will figure out that you like to code and want to code.
Indeed you have a point, I don't think of any fitness coach that will use a console application if there's a GUI one available. However the UI layer is one easy to replace layer, learning how to make GUI applications with different frameworks is more like a side thing than rather a step forward, you will notice that what GUI is all about is using some classes and sometimes inheriting from classes then making small changes, it's no big deal (it just takes time to make a GUI, many little details as you may of observed).
About your fitness program, your client may have 2 options, along side others, when being run, store stuff locally, store stuff on a server, or both. For connecting two applications via Internet, dig into socket programming.
The database thing may be tricky, using a database server will slow down data storage, however it will make it more easy to use for PHP to access. Still you can redesign your application into a web applications and the client (either a desktop app or a php script) will use services, the service (ask for data, give data, stuff like that) will connect to the server and do the actual job. This way a database server is optional and you can store your data into files (much more fast access than a database connection).
You should definitely continue your project, it illustrates that you know how data is moved inside an application. Also before your application is even finished, start promoting it, make a small website where you fill updates, list the application features so search engines can crawl on your website and get a lot of info about what you're planning on doing. You need to get people to want to use your application before it's actually finished.
ok, im a beginner here and i dont know how to pose a question. sorry LilJoe for using your message please. I have a c++ project to create that involves constructors, classes and separation of interface from the implementation. The thing is that my idiotic teacher never explained us how to do that. I found out how to create a xxx.h and xxx.cpp that create a file and writes data on it. Now i have to create another cpp that deletes, modifies or creates new record. But when I put it into the first cpp it doesnt work (it was supposed to, since I took it from a deitel book). When I create it on its own, it doesnt link to the header file. The due date is 7 hours later, and those who asked the stupid teacher to explain it to them took answers of the type "Go and read it in the book". The separated codes may be on the book, but it doesnt say how t put them together. Help please. Cant let that teacher win.
So if anyone knows about these topics and is willing to help, please contact me within the next 5 hours at soahwhoami@yahoo.com . Thanks a million :D
Firstly, I didn't start this topic, mstine87 did.
Secondly, don't call people in different ways, I understand your problem (believe me I've been through it). You need to change your way of learning, instead of getting all you ever need from the teacher, get ideas, titles and so on from the teacher and dig into whatever information he gives you on the Internet, books, people that work in the respective domain etc.
The teacher is a mentor, he doesn't tell you how to do stuff, he tells you what to do. How to do it is only up to you. For instance, what you're talking about is GRASP and common application layers.
A few useful links:
http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29
http://en.wikipedia.org/wiki/Common_layers_in_an_information_system_logical_architecture
http://en.wikipedia.org/wiki/Multitier_architecture