Results 1 to 8 of 8
  1. #1
    Join Date
    Jun 2015
    Posts
    5

    Lightbulb C++ for Application/Software Development & Software Engineering

    Hey Hi !

    I am getting started with C++ and I have always wanted to do these things. But now that I am here, a few of the things that kind of bother me even though I have looked around and found some useful sources to teach me, like a few of them on 3D-Buzz itself.

    The things that I wonder about are like how would I get into Large Scale Application Development ? And by Large Scale, I mean softwares like Adobe's & Autodesk's as well Operating System. Now, OS are much complicated; I know, but I want to know about others at least. And also how do I get into Graphics Work ? Open GL is there but that it itself is kind of like Programmable, and how is that made ? I want to know that ! I'm so much intrigued with such/these things.
    And also, AI work, in C++.

    Now, I have seen Qt & Visual C++, but how can I and is it possible to create my own GUI Toolkit with C++, maybe with console ? Because when we start fresh, all we do is work with Consoles, right ?

    But anyways. And oh, yes, I would defintely like to know This One Thing.

    What Books would you people suggest for Getting Close to Mastering Programming Languages & Computers ?
    Of course C++, but I mean the whole hardware as well as software. It is going to take time and I know that but I can take that, and all of that knowledge too. These things have always been fascinating to me, I don't know why, or maybe I do.

    Books from Basics to Master, say a list. Just add in whatever you can. I want to have all those books that can get me each and every or atleast most of the electronics knowledge. Yes ! I have looked for books myself, and I have bought a lot of them and I read them and I still have a lot in mind, and in my Online Cart as well, but I want to make the list a final one, at least for now. Knowledge is not finite, I know that, but I want to buy as many books as possible so that I won't have to look around for a long long long time.

    Any suggestions or ideas or comments are welcomed. Rude, yeah but might just hurt me but you can add that even though I don't think anyone will. And yes, helpful ones, Thank You in advance !

    Thanks & Regards.

  2. #2
    Join Date
    Jan 2014
    Location
    Lynnwood, WA
    Posts
    46
    Your post gives me the feeling you're trying to go from step 1 to step 200 in one step. I know it can be exciting to get going on these things, but the early phase is just learning basics. I would pick 2-3 projects that interest you, and learn the building blocks of how to get there. That way in a few years time, you have actually focused (most) of your learning in the specialization that you want to do. (Don't pick an OS, Adobe or other extensive projects in this list, yet)

    I personally am working towards bipedal robot controlled by neural network. Games make a fantastic testbed for learning those building blocks. They are remarkably complex compared to most 'business' software. In general (i thought) the game stuff i learn has nothing to do with that goal, but then when i go to try and work on it, i am realizing there is far more in common than meets the eye.

    Focus less on the language and more on what you want to learn. For that, find training that you like, a lot. 3dbuzz has great C#training, and I have learned to program, to the point i have done 'production' codes at work, and my day job is not a programmer. But through shear repetition and copying of Nelson's work in the lessons (which sometimes i didnt fully understand what or why he was doing something), I was recently able to hammer out a 4k LOC program literally from my mind (no spec, no guide, no copy/paste code) over a one week that saved my company millions of dollars and months of schedule. It was in that moment, i realized, I really actually have learned a lot from this site. Language matters less than ability to understand code in general.

    If you're dead set on c++, then see this post. I have read Code, and it helped my understanding of how a computer works, a lot. it still hurts my brain to try to understand it at the same time though. I'd read it for a overview of how and why computers work, not to learn the individual details per say. Its a great foundation though.

    From experience - Buy one book, read it, finish it. Then buy one book, and repeat. if you buy 5 books at once, 4.5 of them sit completely unseen by your eyes, or obsolete by the time you do decide to look at them.
    Last edited by sdiguana; 07-02-2015 at 08:16 PM.

  3. #3
    Join Date
    Jun 2015
    Posts
    5
    Your words are really motivational. And that is true, that if I buy several books most of them are staying as they are. I bought four books for C & C++ altogether, but after a while, I dropped on C and moved onto C++ (I was reading C just for reference, just for basics of C because C is an integral part of C++). Then on moving to C++, I went over basics, over and over again without even completing the book and I realized there are several things at some part that I do not understand, so I look at my second book and it also has the same thing.

    I even tried Dummy Book series. Indeed it is a famous franchise in books but I didn't really find it much helpful. Then I tried Plural Sight and it was helpful and things were quite similar but the author always mentioned that it was Modern C++ and I didn't know the difference. And I was unsure if my books were Modern C++ or not (Bjarne Stroustrup's).

    Currently, I am delved into Mathematics & Science (have always been) a lot. Because of the fact that Algorithms are much more important in Application Development. I can have a buddy of mine to do that work but I want to have it in me. And whenever I hear or read that a 12 Years old kid has made an application, or a game, I am literally shocked because it is nearly impossible to do so without adding how physics should work and for that, you need to know a lot which takes a lot of time. Sure, there are prodigies but I don't think in this department.

    There are several people in my family who are Software Engineers and Programmer themselves, and most of them work in .Net framework. I asked them how they started, they always tell me to keep a balance. They said and I quote "Read for Hardwares how a electronics and computers work and then keep Working with Codes as you go. This way, you won't have to worry much when you are asked to switch Department or in case, if you want to leave the company and start working somewhere else."

    But as I keep going (I am on basics as for now), I get questions in mind like how is that happening, how do They do so etc. etc.
    I know it seems like I want to take huge leaps, but it is not so. I just want to have several books and references, so I could look at one another from time to time to understand a particular part.

    It might seem like I am dumb and just wasting my time, but I actually want to know the History & Present of It so I could determine the Future or at least make guess.

    Just something I would like to tell. I have worked in Computer Graphics, but as Modeling & VFX. I have not done any person's work in particular, for money or anything, but I have learnt and I do work for my family members, like my brothers. And one thing I know for sure, is that you can learn to model, composite, but the work Industry people put in it, is really far away from ours.

    Like for example, in Batman : The Dark Knight, a whole Camera Rig came into the shot and it had to be removed. Now, I don't really know how they did it. Not even Digital Tutors (part of PluralSight) taught me any of that. There are work-arounds but hefty ones. You can model the whole car and person and animate it (pretty much the whole scene in CG, or the part with the rig in it). Or you can somehow generate data from previous frames (like Mocha) and somehow manage to composite and matchmove it seamlessly.

    And then again, working with these tools, I got really interested in knowing how these 0 & 1 when manipulated, can cause beautiful images to happen.

    How do I manage or am I just boasting ? No, I am not just boasting uselessly. I manage it by skipping my classes or staying up for long long time. I somehow do.

    The fact that it's just a circuit with electricity running through it but we have the power to manipulate it with words is really intriguing to me, and fascinating as well. I was into programming even before Animation, or got into both at the same time, but I always had the zeal to know ever since I watched that Spider-Man : The New Animated Series (2003) and then later on, played games. How can a character jump with me pressing Space Bar was so damn incredible to me.

    But anyways, Thank You for your help. And yes, I have heard of Code, and it is on my list as I mentioned above. I am getting it first because you suggested it.

    But I wanted to know this one thing. Will taking 3D Buzz's courses on C++ get me going with work ? I won't give up on books of course, but are these courses sufficient enough to get into Application & Game Creation ?

    Thanks & Regards.

  4. #4
    Join Date
    May 2011
    Posts
    95
    Hello rajc, and welcome to the world of C++!

    So, I want to start by saying that there is not enough time in the year for me to fully answer every question, though you pose many good questions and I applaud you for doing so! Below I will paraphrase each question you posed in the way I interpreted it. Hopefully, I can at least point you in the right direction Keep in mind that some of your questions I have paraphrased to the best of my understanding.

    How would I get into Large Scale Application Development?
    Learn to walk before you learn to run. Adobe and Autodesk software was not written by one guy. It took many, many teams to develop their software. In those teams you have artists, designers, project managers, stake holders, engineers, web developers, and all of the sub roles within each of those categories. In the engineering category you likely have server engineers, UI engineers, frontend engineers, backend engineers, web engineers, the list goes on. And there may be many in each role. Any large scale application is the result of many, many people collaborating to make something awesome. For this reason, it is important to focus on social skills just as much as engineering skills. It is very important to learn team collaboration software such as Git so that when you get there, you will be prepared.

    How do I get into Graphics Work?
    Graphics work is 80% math and 20% programming. You're basically turning math formulas into algorithms in whatever language you end up writing, though its usually C, or a C++ wrapper around lots of C code. In this sense, your math formula is your algorithm, you're just translating it. There are many libraries you may study to see what I'm talking about, which leads me to your next question.

    What is OpenGL?
    There seems to be some confusion over what OpenGL is and what Visual C++ is. Microsoft Visual Studio is technically the IDE (integrated development environment) that programmers may use to compile Visual C++ code using specifically Microsoft's compiler (you may see MSVC a lot, that is the compiler that Visual Studio uses).

    OpenGL is a library written in C that communicates directly with an OpenGL compliant graphics card. You may also hear of these libraries as you get more into programming:
    - SDL
    - Glut
    - SFML
    - GLEW

    These are all wrappers around OpenGL with varying degrees of usability enhancements. They pretty much all provide a cleaner API than just using raw OpenGL. To use OpenGL in any of your projects, you will need to grab the .dll from somewhere, but you should learn the basics of programming before diving into that or you will be totally lost in setting things up.

    What about AI work in C++ ?
    AI code can be written in any language. Keep in mind that AI is nothing more than simulation of intelligence. Programmers cut many corners to make their AI actors appear more intelligent than they actually are. For example, in Halo: Combat Evolved, you can see how the Elites dodge grenades and navigate around obstacles. This may look to the player as if they're taking in the entire environment and considering everything in their calculations, when in reality they may only be making one or two decisions at any given time. You throw a grenade, the elite doesn't "see" the grenade. Some system in the code may have merely notified an elite that a grenade was tossed in blast range causing the elite to jump out of the way. An over simplification might be something like this:

    Code:
    OnGrenadeNotification(Point position)
    {
        if (position.y > this.position.y)
        {
            // Jump in the direction that avoids the grenade (differs depending on coord system).
        }
    }
    The elite never has to consider grenades until one is thrown and he is notified of it. Again, this is just an example, probably not how their system is actually implemented, but its important to note that AI programming is not always this complicated system. Sometimes its just a bunch of if-else statements. Other times, all of the AI is just scripted and the AI does the same thing every encounter. In any case, the best place to start with AI is to build Checkers or Chess in C++, and implement AI there.

    Could I create my own C++ GUI Toolkit? Maybe with Console?
    So, let's define what a GUI is. A GUI is nothing more than a graphical user interface. It typically has buttons, switches, text fields, etc. A GUI toolkit usually provides a convenient way for programmers to rapidly build a GUI application. If we start at the root of GUI toolkits we have WPF or Windows Forms, also known as WinAPI programming. Typically WinAPI is a bit more low level than most people want to go, and there are certainly some very convenient tookits already made. Sure you could make your own, but my advice is that you use somebody else's and gain experience so that you understand how one is built, what you like about it, what you dislike about it, and you can have an idea of how to improve it or know what you're building at least. Here is a list of very popular GUI toolkits with varying degrees of robustness and feature lists.
    - Qt
    - FTLK
    - SFGUI
    - wxWidgets

    I use Qt professionally and while it has quirks and I've fixed quite a few bugs in their library, I can't say there exists something with more versatility, stability, and coverage of features, despite its short comings. Its open source too so feel free to browse their code!

    When starting fresh, everything is a console, right?
    I will assume that you mean the typical start new project that all of the C++ tutorial videos start off with. I actually know what your real question is, because I remember being exactly in your shoes just a few short years ago. How do I start? Do I just create a console window and work from that? What is the entry point into making apps?? I will clear a couple of things up. A program that starts with a console can be created in Visual Studio with a specific project setting. To make one that gives access to Window's application program, you simply need to start a project template that supports that. All it does is change a few project settings a set up a slightly different looking entry point (main function) for your program.

    What resources are suggested from beginner to master programming in C++?
    I will give a list of resources I have used and am using to rapidly power level my engineering skills. However, let me be clear, nothing is more important than experience. The trap I fell into was, "If only I read all the books, if only I took all the classes, if only I researched everything, I would be the perfect engineer". Engineering is about problem solving. The guys who have been programming 30 years and can solve any of your engineering questions in seconds, have the ability to do so not because they're infinitely smarter than you, but because most problems fall into a class or subset of problems that they have solved before through running into it themselves and either succeeding or failing. They are then able to apply that experience to the situation at hand. That said, program, program, program! Anything. Build an app, re-implement a simple game that was already made before (checkers, astroids, Zelda), anything you find interesting, build it. Here are some resources I highly recommend

    Books:
    - Effective C++ (covers pre-C++11) by Scott Meyers
    - Effective Modern C++ (covers features new to C++11/14) by Scott Meyers
    - Design patterns by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
    - A Tour of C++ by Bjarne Stroustrup

    Holy grail of C++ things
    - https://github.com/fffaraz/awesome-cpp

    Blogs:
    - www.reddit.com/r/programming/
    - www.drdobbs.com/
    - www.madebyevan.com/obscure-cpp-features/
    - www.randomascii.wordpress.com/
    - www.concurrencyfreaks.blogspot.com/
    - www.codecapsule.com/
    - www.gameprogrammingpatterns.com/

    Web Resources
    www.stackoverflow.com/
    www.doc.qt.io/qt-5/classes.html
    en.cppreference.com/w/ (I prefer this site way over cplusplus.com)

    What considerations should I give to picking a GUI library?
    There are no absolutes in programming. No GUI toolkit is better than another, they all have their uses. FLTK is insanely lightweight at around 10% the size of Qt, though it doesn't have nearly as many features and doesn't look as nice out of the box. But if you must have something light, you can't use Qt. If you need an entire suite of features, use Qt. It just depends on what you need. You should at least ask yourself these questions.

    - What are the feature requirements for my app?
    - What are the size requirements for my app
    - What languages will my app use
    - What is the cost of the library

    Its nearly impossible to make a game without knowing how to implement a physics system
    Most indie developers use game engine suites to write their games. The best one for large scale games in my opinion is Unreal Engine 4. Its very difficult to come up with a reasonable argument as to why anybody would use anything else given that UE4 is almost a flawless engine in just about every corner you look. Its free unless you actually sell something made by it, and then its only a 5% royalty, its open source for the most part, its amount of features is endless, it supports any type of game you could possibly want to make, and it has one of the best graphics engines ever conceived. It has really given Unity a run for its money and really the only defense Unity has is that it uses C# as its core language, which in the AAA title gaming industry is more of a minus than a plus. This isn't to say that Unity isn't a great engine, it certainly is! These days just about anybody with programming knowledge can build something given any engine they choose.

    A game engine is just a collection of systems that are all used to form a game. In a game engine you will have things like the graphics system, AI system, Input system, Audio system, etc. A full game engine will implement as much of these systems as possible leaving the developer to only worry about the actual game logic.

    Final Advice:
    That said, I see a lot of myself in your curiosity and ambition. I too wasn't quite sure where to go and spent many many hours going through 3DBuzz videos, asking on forums, going to school, creating side projects, everything you're getting into now! Since I've been a developer working alongside some of the most talented engineers in the industry, I've learned engineering skills at an exponential rate compared to when I was just studying in school and online. There are so many things that I wish I would have been told or learned before getting into the industry that would have made me more efficient from the beginning and would have sped up my "power leveling process".

    Because of this I have just started a youtube channel that aims to teach to people exactly in that position, maybe they're in college or highschool and want to now how to become an effective engineer. I want to be able to pass on all of the industry level knowledge I've gained thus far and as I grow. Most places you find teach mainly academic knowledge which can be quite different from the field.

    Its a new channel and I've only so far uploaded videos that detail the development tools I use everyday at work to be more efficient and how to set them up. I'm starting this weekend a video series that explains in detail how to use Git! I feel like all developers should know Git. Unreal Engine 4 uses github, we use github, most indie developers are using github, and with the introduction of Git LFS, there's really no reason to not use it. Even if the company that you work for doesn't use Git, most other versioning software uses similar versioning strategies to Git that can very easily be picked up after a good understanding of how Git works.

    So for my channel you can search for DevForgeNetwork on youtube. Definitely watch videos on 3DBuzz! The C++ videos are a bit dated but still include excellent information. Even though XNA is dead, the XNA videos they have teach solid game programming concepts that are very useful to learn.

    I wish you luck! And feel free to reach out to me if you have any progarmming questions while embarking upon your programming adventure!
    Last edited by frostbytes89; 10-19-2015 at 12:06 AM.

  5. #5
    Join Date
    Jun 2015
    Posts
    5
    Thank You so much frostybytes89 and sdiguana as well. Things are getting clear to me.

    I will definitely be on it, that is practicing, of course. And surely I will check out your Youtube Channel. And yes, I do know about UDK, and it's really affordable is what I also know.

    Thanks You again and best of luck to you people too. I hope you all do well.

  6. #6
    Join Date
    Oct 2015
    Location
    Wellington, FL
    Posts
    1
    Hello,

    I am a webmaster of a school website. I have a good command in PHP but unfortunately I am not good in C++. What will be the good source to learn C++?

  7. #7
    Join Date
    May 2011
    Posts
    95
    I will give a list of resources I have used and am using to rapidly power level my engineering skills. However, let me be clear, nothing is more important than experience. The trap I fell into was, "If only I read all the books, if only I took all the classes, if only I researched everything, I would be the perfect engineer". Engineering is about problem solving. The guys who have been programming 30 years and can solve any of your engineering questions in seconds, have the ability to do so not because they're infinitely smarter than you, but because most problems fall into a class or subset of problems that they have solved before through running into it themselves and either succeeding or failing. They are then able to apply that experience to the situation at hand. That said, program, program, program! Anything. Build an app, re-implement a simple game that was already made before (checkers, astroids, Zelda), anything you find interesting, build it. Here are some resources I highly recommend

    Books:
    - Effective C++ (covers pre-C++11) by Scott Meyers
    - Effective Modern C++ (covers features new to C++11/14) by Scott Meyers
    - Design patterns by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
    - A Tour of C++ by Bjarne Stroustrup

    Holy grail of C++ things
    - https://github.com/fffaraz/awesome-cpp

    Blogs:
    - www.reddit.com/r/programming/
    - www.drdobbs.com/
    - www.madebyevan.com/obscure-cpp-features/
    - www.randomascii.wordpress.com/
    - www.concurrencyfreaks.blogspot.com/
    - www.codecapsule.com/
    - www.gameprogrammingpatterns.com/

    Web Resources
    www.stackoverflow.com/
    www.doc.qt.io/qt-5/classes.html
    en.cppreference.com/w/ (I prefer this site way over cplusplus.com)
    I'll just quote the rather large section I wrote that answers that exact question

  8. #8
    Join Date
    Oct 2015
    Posts
    1
    From quick research it looks like Objective-C is an extension of C++.

    So an app for Android and iOS has to be developed from scratch in two different languages. It cannot be developed in a base language and then ported over to the other OS?

    Excuse my lack of programming knowledge. It seems very labour-intensive to create an app for several platforms.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •