Search

Appendix C — The end?

Congratulations! You made it all the way through the tutorials! Take a moment and give yourself a well-deserved (insert something you enjoy here).

Now, after breathing a long sigh of relief, you’re probably asking the question, “What next?”.

What next?

By this point, you should have a solid understanding of the core C++ language. This sets you up well to continue your learning journey into other adjacent areas. So if there’s something you’re really interested in learning about, now’s a good time to see whether you have enough knowledge to jump into that.

However, for most users, I think there are a few natural next steps.

Data structures and algorithms

If you haven’t already learned about these, this is my strongest recommendation.

A data structure is a collection of data and a well defined set of methods to access or manipulate that data. The most common data structure used in programming is the array, which holds a number of elements of the same type in sequential memory. You can manipulate the data inside an array by using array indexing to directly access (or modify) the elements inside the array. In the lessons, we also covered the stack data structure, which provide push, pop, and top functions to access the data on the stack.

An algorithm is a self-contained set of operations that typically manipulate or calculate outputs from the data in a data structure. For example, when you look through an array to find the median value, you’re executing an algorithm. Binary search is an algorithm to determine if a given value exists in a sorted array. Sorting routines (such as selection sort and bubble sort) are algorithms that sort data sets.

Over the years, mathematicians and computer scientists have come up with a fairly standard set of reusable data structures and algorithms that are useful for constructing more complex programs. These all have various tradeoffs. For example, arrays are fast to access data and sort, but slow to add or remove elements. Linked lists, on the other hand, are slow to access data and sort, but very fast to add or remove elements (if you already know where those elements are).

Why does it matter? Let’s use an analogy. If you were going to build a house, you could build all of your tools from scratch if you wanted. But it would take a long time, and you’d probably mess quite a few things up and have to start over (ever created a hammer? Me neither). Also, if you use the wrong tool for the job, your quality would suffer (try nailing in nails with a wrench).

More likely, you’d go to the local hardware store and buy a few tools: a hammer, a level, a carpenter’s square, etc… and then read some internet tutorials on how to use them properly. These would vastly accelerate your house construction efforts.

Data structures and algorithms serve the same purpose in programming: they are tools that, if you know how to use them, can vastly accelerate how quickly you can get things done at quality.

The good news is that many of these data structures and algorithms have already been implemented in the standard library. You’ve already encountered some of these in the preceding tutorials: std::array, std::vector, std::stack, std::string, and std::sort, to name a few. Learning to use these effectively and appropriately is a great use of your time.

If you’re short on time (or patience), learning how to use the most common data structures and algorithms is the minimum you should do. But if you have the inclination, try recreating those data structures yourself, from scratch. It’s really good practice on writing reusable code, and will help you down the road when something you need isn’t in the standard library. But then throw them out, and use the ones in the standard library. 🙂

The C++ standard library

The bulk of the C++ standard library is data structures and algorithms. However, the standard library contains other things too, and another next step could be to explore those. Among other things, there are numerics (math) libraries, input/output routines, functions to handle localization and regionalization, regular expressions, threading, and file access. Every new release of C++ (which has been happening about every 3 years now) adds a batch of new functionality into the standard library. It isn’t critical that you know how everything in there works, but it’s worth at least being aware of what exists, so that if you happen upon the need for it, you can go learn more as needed. http://cppreference.com/w/cpp is my go-to reference for discovering what exists.

Graphical applications

In our tutorial series, we developed console applications, because they’re easy, cross-platform, and don’t require installing additional software. Unlike many modern programming languages, C++ does not come with functionality to create application windows, or to populate those windows with graphical elements or graphical user interface widgets (checkboxes, sliders, etc…). To do those things in C++, you’ll need to enlist the help of a 3rd party library.

Getting a graphical application up and running requires a few additional steps. First, you’ll need to actually install the 3rd party library and connect it to your IDE, so you can compile it into your program. Most graphical libraries should come with instructions on how to do this for the most popular IDEs. Next, you need to instantiate an OS window, which requires calling certain function from the toolkit. Most, if not all, of the libraries should have sample programs that you can compile and dissect if you’re not sure how to do something basic.

There are a lot of libraries out there, and which one you should use depends on your requirements (you’ll have to do your own research to determine which one is right for you). Popular choices include Qt, WxWidgets, SDL, and SFML. If you want to do 3d graphics, all of these frameworks support OpenGL, and there are great OpenGL tutorials on the internet.

Graphical applications typically run differently than console applications. With a console application, the program starts executing at the top of main() and then runs sequentially, usually stopping only for user input. Graphical applications also start executing at the top of main(), typically spawn a window, populate it with graphics or widgets, and then go into an infinite loop waiting for the user to interact with the window (via mouse click or keyboard). This infinite loop is called an event loop, and when a click or keypress happens, that event is routed to the function(s) that handle that type of event. This is called event handling. Once the event is handled, the event loop continues to run, waiting for the next bit of user input.

TCP/IP / Network programming (aka. the internets)

These days, it’s pretty rare to find programs that don’t connect to the internet, a back-end server/service, or leverage the cloud in some way. Any program that requires you to have an account and log in is connecting to a server and authenticating a user. Many programs connect to some service to check whether an update is available. Social applications maintain a persistent connection to a social infrastructure, to allow users to communicate with each other on demand. These are examples of networking.

Networking (broadly) is the concept of having your program connect to other programs, either on your machine, or on network-connected machines, to exchange information. Networking is a powerful tool -- in the past, if you wanted to change the behavior of your application, you had to release an application update. Now, with some good program design, you can simply update information on a server somewhere, and all instances of the program can leverage that change.

As with many things C++, there are libraries out there to help make your C++ programs network capable. The Asio C++ library is a commonly used one (there are two variants -- a standalone version, and a version that integrates with Boost, which is a library that provides a lot of different functions, much like the standard library).

Multithreading

All of the programs we’ve seen in this tutorial series run sequentially. One task is completed, then the next one starts. If a task gets stuck (e.g. you’re asking the user for input and they haven’t entered any yet), the whole program pauses. This is fine for simple academic programs, but not so great for actual applications. Imagine if your program couldn’t handle the user clicking on something because it was busy drawing something on the screen, or if the whole program paused/froze when a network call was happening. The program would feel unresponsive.

Fortunately, a method exists to allow programs to execute multiple tasks at the same time. This is called threading. Much like how (most of) you can walk and chew bubble gum at the same time, threading allows a program to “split” its attention and do multiple things in parallel.

For example, some graphical applications (such as web browsers) put the rendering (drawing graphics) portions of the applications on a separate thread, so that updating the screen doesn’t block other things (like accepting user input) while the drawing is happening. Network calls are often done on separate threads, so that if the network call takes a while to resolve, the application doesn’t grind to a halt while its waiting.

Threading is powerful, but it introduces additional complexity, and a lot of room for additional errors. Therefore, I wouldn’t recommend starting here -- but it is a good area to learn about eventually, especially if you want to do complex graphical applications or network programming.

A good bye!

At this point, I’d like to take a moment to thank you for stopping by and reading this tutorial series. I hope you enjoyed your time here and have found this site useful. Special thanks to those of you who have helped keep this website a free resource available to everyone by viewing ads that interest you. Please drop by again!

Good luck (and skill) in your future endeavors, and happy programming! And remember, old programmers never die -- they just go out of scope.

-Alex

PS: If you have any feedback or other suggestions for things to explore next, please mention them in the comment section below.

No Next Lesson
Index
B.3 -- Introduction to C++17

103 comments to Appendix C — The end?

  • Carlton

    "I feel heroic,and handsome...," Snowball, Secret Life Of Pets (2016)

    Amazing tutorial! I'm so stoked that I've finally reached the end. Every chapter read through, every quiz attempted. I will be revisiting frequently for reference, no doubt. Massive thanks for such great work Alex.

    I will now move on to multi-threading and experimenting with graphical libraries. It will take a lot of personal projects and/or practical experience for one to become a C++ savant but I'm also keen to learn a new language and make use of the transferable skills I've thus far acquired. Pointers would be appreciated.

    Again, thank you for your effort. I choose to learn C++ on your website not because it's free but because it's well written and coherent. Thanks

  • ThuHa Le

    Dear Alex,
    Thank you so much for the tutorial. I am struggling with concepts of Unittest. It might not have much to do with C++ but in programming in general. Would you think that it is possible to add a chapter about Unittest?

    Thank you very much in advance!!!

  • Yves

    Alex,

    At nearly 60, I am not real new in computer programming.
    I did start in the late 70's (with some very limited basic machines), learned the Pascal all by myself on a PDP11/24 (the size of a big fridge !), practiced some Turbo Pascal, and even real-time assembly on 6800 family 8 bits microprocessors. My job also implied PLC programming and HMI specific software.

    However I did never learn nor use C (nor C++) YET. I made a couple a trials but never succeed in really enter the real useful coding level.

    But, after spending a couple hours looking at your Tutorial, and trying the exemples on my PC at the same time, I am now under the impression I can eventually learn something useful.

    THANK YOU SO MUCH

  • Harsh Verma

    Hi Alex, There is no particular site to learn better in GUI. This would be very helpful for me if you add some lessons on GUI programming. Thank You and in case if you want to add some lesson on GUI please update it to me or on my EMAIL-ID

  • Joe

    Hello Alex thanks for every material you provide us for free i really appreciate it !

  • Davis

    Thanks Alex. A lot of the later parts of the tutorial were a little bit too hard for me(I'll make sure to come back later) but still, I'm glad to have reached here. I only had a vague ideas to become a programmer and this series was a really concrete start for me. Appreciated everything you did here. I can't thank you enough.

    • Alex

      Hi Davis. Thanks for your feedback. What parts did you find the most challenging? Odds are other readers are likely finding those same parts challenging, and perhaps I can spend some more time in those areas to try to make them more comprehensible.

      • Davis

        Well pointers for a start. But I'm pretty sure everyone gets stuck there. What really screwed me up was chapters 17 and 18. I was going through them without understanding anything written there. And one word of advice, I kind of started missing those quizzes at the end of each lesson as there were a lot less in the later parts of the tutorial. I was learning the rules and the way c++ works, but had no idea how I would ever use them myself. I think adding more quizzes could really help.

        • Alex

          Thanks for getting back to me on this, as it helps me hone in on where more attention is needed.

          Chapter 17 was originally mean to be more of a reference material chapter, which is out of alignment with the rest of the tutorial (which is presented in teaching style). It's in desperate need of a rewrite.

          I agree more quizzes are needed, and it's a common point of feedback. Coming up with good quiz material is the hardest part of writing these lessons.

  • sivasankar

    Excellent tutorial. I had zero knowledge. But now i am able to do something.

  • Tran Duc Anh

    Hi Alex. I've been in your tutorial series for quite sometime now. Like a month or so. And I just cannot thanks you enough for spending your time on making this tutorial. I am now at chapter 2 but I am spending one to two hour on this tutorial just to learn about c++. Also, I have read ahead to the final chapter. It's sad to see this tutorial end so quickly. It would be very useful if you have also make an tutorial for graphic, networking and GUI too. But anyway, thanks you so much for donating your time to this tutorial.

    P.S: I am from Vietnam and I am just 16 years old!

    • Alex

      Thanks for the feedback! I'd love to do all of those things, but I'm afraid time is not permitting. It's taken me 11 years to get this site this far. Adding graphics, networking, and GUIs would probably take me another 33 years. I suspect that will be too long for you to wait. 😛

    • Tran Duc Anh

      #include <iostream>
      #include <string>
      using namespace std;
      string response;
      int main()
      {
      cout << "good one. But please, if you have free time, add basic of graphics, networking and GUI here. Or if necessary, give us some reference of good sites out there that also have tutorial on those. Or even better, you could collaborate with someone else and do it right on this tutorial, it's your call." << endl;
      cout << "please correct me if I made any mistake in the code too, I am still learning 🙂 " << endl;
      cin >> response;

      return 0
      }

  • Prvz Abbas

    When the next lec. on data structure and algorithm will out.

    • Alex

      Not anytime soon, unfortunately. My attention is focused on updating other parts of the site at the moment, in preparation for adding new articles/chapters in the future.

  • Brueni

    Thank you for this great tutorial. It is by far the best tutorial i ever found to any programming language. I startet with the idea to refresh my old C/C++ knowledge I learned poorly at the university  and wanted to jump in in some simple GUI stuff to visualize some Ideas but what should I say, you chained me to this tutorial, I just had to finish it and realised I knew nearly nothing about C++.
    But I have to admit that I mostly read the last chapters and didn't code all of the examples, I was more motivated with the comprehensive quizes because I just cant jump them but wanted to read further.
    Again: Thank you for this great 2 month I was spending.

  • Kyo

    After a year and a halfway-through pause on this tutorial to learn some Python and Rust, I finally came back and finished this.

    I must say I'm very impressed with the effort you put in this website, keeping it up to snuff with the new ISO standards and everything. (And I mean you've been doing this for a decade ? Damn!)
    Also the fact that this is free. How even.

    All in all an awesome series, helped me tremendously since the new teachers this year aren't really any better than the previous ones. Teaching C++03 and forbidding any use of later standards' features, ouchies. Whatever.

    Thank you, Alex. Keep up the good work.

    • Alex

      Thanks for the feedback! I also can't believe I've been doing this for 11 years now!

      > Also the fact that this is free. How even.

      The hosting fees are covered by the advertising you see around the margins (and the time spent is voluntary).

      This is the ad blocker tragedy of the commons -- we all use them, but once they get to a certain level of penetration the "free web" will atrophy as a consequence (though some interesting attempts to combat this are appearing, e.g. the Brave browser).

  • Soumya

    Hi Alex,

    I know you are busy with other stuff, but I think it's high time to add tutorials on some topics like "Lambda Expression", "Regex" etc. They are very essential part of C++ & anyone who is learning c++ must know.

    This is just a suggestion. Whatever you have wrote is still great!

    Thanks.

    • Alex

      Thanks, I appreciate the feedback. These are definitely on my to-do list and I'll get to them as soon as I can (realistically probably not very soon, as I'm focused on making some long-overdue infrastructural upgrades).

  • sam

    Hi Alex.

    I started going through these lessons pretty much exactly one month ago and just got to the end! Beforehand I had pretty much no programming knowledge and was doubtful about whether or not I had the self-discipline to teach myself. Fortunately your lessons made learning surprisingly intuitive and fun. I also started learning about other aspects of C++ and programming at the same time as going through these lessons (such as the Windows API, threads, and x86 assembly which I incorporated into a couple small projects of mine). I'm excited to branch out further and keep learning more, plus I will surely be referring back to this site and looking out for new lessons.

    Just wanted to give a big thank you for creating such a great resource for new programmers - I don't know that I would have stuck with things without such a good resource to learn from. Also big thanks to nascardriver for all the effort you put into helping new programmers too.

  • Robi

    Hi Alex,

    I just wanted to say a massive thank you for creating this site. This helped me get some deep intuition and understanding of WHY things are done the way they are in programming, which many websites and even real life teachers fail to achieve. It helped me greatly improve my thinking which helps me a lot in other areas too.

    I'll keep coming back as I still haven't learned everything here. Keep up the good work!
    Robi

  • Soumya

    Hi Alex,

    It is a pleasure to read your blog. It's the best C++ tutorial available in internet today. But one suggestion I have is to make things concise because sometimes we don't have time to read everything. You have attempted to make thing simpler of some concepts like the section "4.3a — Scope, duration, and linkage summary". If I read the section, I can sharpen & revise what I learned. I wish you have more such sections.

    Thanks!

    • Alex

      Hi Soumya. Thanks for the suggestion. It's hard to find the right balance between explaining and referencing. I'll have a think about a better way to do this.

  • Nicholas P

    Wow, what a journey it has been for me! I started these tutorials back in July thinking I would be finished within in two months. Back then, I was just a physics student who wanted to know how to program, but had no experience in C++ and little experience in Python. Although it has been a little over two months now, I am so grateful for being persistent and sticking with these tutorials. This is by far the best C++ resource I have come by; its not as dry and arduous as a thick textbook, yet it explains in more detail that a class lecture or an online video series (no disrespect to any authors or those types of resources, people learn in different ways but these were decisive negatives for me).

    I am a bit sad that it is over, but I will come back here often to buff my C++ knowledge and skills when necessary. This site has improved my programming skills, advanced my knowledge of C++ and computer science and showed me the value of hard work and learning from mistakes.

    Thank you Alex for your brilliance and hard work developing this website, your excellent explanations and for helping the many users in the comment section learn C++. Thank you nascardriver for taking the time to help others and providing sound programming advice. Thank you to all the users who are on their own journeys conquering the programming realm, your guys' comments have improved my understanding of the content.

    • Hi Nicholas!

      I'm glad you made it to the end, I know C++ can be hard at times!
      Try to get a small project going so you don't forget about half of the content you learned.
      If you want to keep on learning more you should check out multithreading and networking, as those two are basically essential in modern programs.

    • Alex

      Thanks for the kind words. If you have any other constructive feedback on the material, I'd love to hear about it so that I can improve for future "generations" to come. 🙂

  • Thank you very much for your tutorials! It helped me a lot to take a grip on advanced topics and understand this language better.

    A next topic I'd like to learn more is multithreading. Unlike graphical libraries, it's very hard to find good tutorials on this subject. If you don't intent to make a tutorial on multithreading, do you have a few good links?

    Thank you again!

    • Alex

      I'd love to do a series on multithreading (since support for threading was added to C++ as part of C++11) but realistically I don't think that's likely to happen soon. As for tutorials on the topic, I'm not aware of any good ones offhand.

Leave a Comment

Put all code inside code tags: [code]your code here[/code]