Answers.Body: <p>As a software developer, I used C++ on several projects.</p>
  <ul>
  <li>First I learnt C.</li>
  <li>Then on the first C++ project I learn encapsulation.</li>
  <li>Then on the third C++ project I learn some more.</li>
  <li>Then on the forth C++ project I learnt Eiffel. In Eiffel I learnt polymorphism, inheritance, generics (templates), return type covariance, etc. ...</li>
  <li>I then learnt how to do these in C++.</li>
  <li>Then realised that C++ is a bad idea: It has some improvements to C, but also a load of blot, that gets in the way.</li>
  </ul>
  <p>I wish I had learn Eiffel first, it is a much quicker language to learn. It is quicker to learn Eiffel and then C++. Eiffel is also a much quicker language to program in. And compiles to programs of similar speed to C++: faster for big complex programs, slower for simple programs (but not much).</p>
  <h1>Conclusion:</h1>
  <ol>
  <li>Learn to program: Eiffel, Lisp.</li>
  <li>Use a high level language for most jobs.</li>
  <li>Use a hybrid of languages when you need to do low-level stuff.</li>
  <li>Use <code>golang</code>, <code>Eiffel</code>, or if you must <code>C</code>, for speed. There may be others.</li>
  </ol>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-31T14:46:39.643Z
Answers.Text: Eiffel  ? can you plz explain what is this ? btw I know the concepts of OOP but I don't know about modern C++ .
Answers.UserDisplayName: Hamza
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-31T14:50:43.497Z
Answers.Text: `Eiffel` is an OO language. When you have used it, you will realize that `java` is not real OO. (smalltalk is another interesting OO)  It compiles to `C`. It is fast. It is easy to learn. It is easy to use. It is powerful.
Answers.UserDisplayName: ctrl-alt-delor
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-31T14:54:31.947Z
Answers.Text: much batter then C++ . ?  : |
Answers.UserDisplayName: Hamza
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-05T14:12:37.117Z
Answers.Text: Eiffel... Yeah it's a good reminder.  70-80s Pascal was the de facto teaching language. 80s shifted to scheme.  Eiffel never became as big as these but it (was) still a good teaching language in the 90s.  Post 2000 everyone's jumped onto some industry omnibus such as Java, Python, C++. And this baby — to teach programming one needs a *teaching oriented* language — is forsaken and destitute
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-31T14:39:01.437Z
Answers.LastActivityDate: 2022-01-31T14:48:20.063Z
Answers.LastEditDate: 2022-01-31T14:48:20.063Z
Answers.UserDisplayName: ctrl-alt-delor
Answers.Body: <p>I will try to answer this question from a Computer Science Educator point of view.</p>
  <h2>C++ is a tool</h2>
  <p>First and foremost, C++ is a tool. Like any other language, it's designed to make accomplishing <em>certain</em> types of tasks easier, but it <em>always</em> comes with a cost.</p>
  <p>C++ tries to be usable almost everywhere with a great deal of flexibility. This inevitably comes with a cost of complexity. Some say it's the most complicated language out there (to know all the rules, not to accomplish certain tasks - this confusion leads to incorrect assertions that C and Assembly are more complex).</p>
  <h2>It can give you everything</h2>
  <p>Teaching C++ has its benefits. You can use one tool to teach pretty much everything there is - high level abstractions like generics, dependency injection with polymorphism, framework interactions, various package managing, resource acquisition and control, interactions with hardware in the lowest level.</p>
  <p>It's convenient to be able to teach pretty much everything while using one tool. But it has its costs.</p>
  <h2>It is incredibly complex and makes some tasks disproportionately harder</h2>
  <p>Computer Science students have many reasons to learn a programming language. It is important to not only provide reliable information, but to also encourage them to explore the possibilities on their own. C++ makes it hard. Very hard.</p>
  <p>Scott Meyers (a notable author from the C++ community) was once asked, what, in his opinion, is most lacking in C++. He said something among the lines of:</p>
  <blockquote>
  <p>I am an author, so naturally I would want to know how is my book selling. I need to fetch those information from some online source, so in C++ I... yeah...</p>
  <p>Okay, forget networking. I have the data and I want to display them in a nice chart, so in C++ I... yeah...</p>
  </blockquote>
  <p>C++ does not have many of the common (some would even say <em>fundamental</em>) features that are expected to be bundled in the language. Most students will be way more amazed by easily making some simple GUI application than by creating a console game for the 5th time. There is still no networking or GUI application in standard C++, and C++20 is almost implemented by the Big Three compilers.</p>
  <h2>Not everything can be solved by a third party library</h2>
  <p>Some would argue that third-party libraries exist for a reason. What's the problem with introducing a simple dependency and using it? After all, every programmer should be aware of such possibility and get familiar with project dependencies.</p>
  <p>Except for the fact that C++ makes it incredibly hard to bundle additional dependencies. It was designed before Internet-aware package managers were a thing. Some decisions have been made that made sense during that time. But new tools were being created and integration reached a new level. Multiple times I had to mentally sigh when I was asked by a student why it takes 4 hours of researching accompanied by trial and error to install OpenCV with CMake, while in Python it takes one <code>pip</code> command. The situation is bad and it's unlikely that it'll improve.</p>
  <h2>Every tool has its purpose</h2>
  <p>Every tool has its purpose and while C++ may as well be an academic language, I do not believe the pros outweight the cons in terms of learning programming. Make a distinction that is already omnipresent - don't use one tool to do everything, even though such a tool <em>can</em> be used with everything. Want to learn programming and get hooked? Chances are that Python, Kotlin, C# or TypeScript will be much more engaging and pleasurable experience. Want to start with or migrate to low-level language? Choose C or C++, but remember - nowadays C++ is not really used as a &quot;<em>just</em> more powerful C&quot;. The &quot;modern&quot; part of it is more common and it's not really a tool used to primarily interact with hardware directly. Its aim is to provide a high level of abstraction with almost zero-cost overhead. This comes with complexity.</p>
  <h2>What to choose, then?</h2>
  <p>Ultimately, this is your question about your situation. You have learnt some basics of C++, good. It's not bad to make a transition to another language, nor is it bad to stay with C++. Ask yourself whether you're enjoying C++. If yes, try to delve deeper. If not, make a change. A programmer ough to know more than one tool, so learning more languages is inevitable.</p>
  <hr />
  <p>A word of disclaimer - I have been programming in C++ for almost ten years. It is (and has always been) my primary language. I am engaged in both business solutions and education and, unfortunately, I more and more believe that my favorite tool (C++) is becoming more and more ill-suited for being an academic tool. Want to teach high-level? Use Kotlin, Python, TS, C# or Java (or other tools that make it easier by doing some work for you). Want to teach low-level? Use C.</p>
  <p>Don't bother with the fact that C++ <em>can</em> do both of those things, unless you have a <em>very</em> good curriculum planned. &quot;Can&quot; doesn't mean &quot;should&quot;.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-31T21:09:07.173Z
Answers.Text: You say "but remember - nowadays C++ is not really used as a more powerful C." And I say, any time someone says "remember" they are about to say something completely unsubstantiated. Case in point: I write a lot of stuff that I could write in C, but C++ 1. has automatic memory management, so no leaks 2. parameter passing without having to count "**"s. Seriously, how do you teach students to write a routine that outputs a malloc'ed array in a parameter? 3. Arrays know how long they are through ".size()". 4. The copy constructor. In C you have to write your own copy routine. Horrors. Etc.
Answers.UserDisplayName: Victor Eijkhout
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-31T21:14:31.760Z
Answers.Text: "GUI application [versus] console game for the 5th time." There is more to life than graphics and games. I teach "scientific programming", and my students do stuff like infectuous disease propagation, delivery truck planning, climate change, et cetera. (At the end of their first semester.) All of those require substantial programming, and with no ancillary libraries. If they want to visualize something, they pipe their numbers into some simple graphing tool. I guess it depends on your audience. Just don't think that your audience is representative. Mine isn't either, but I don't generalize.
Answers.UserDisplayName: Victor Eijkhout
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-31T21:35:45.253Z
Answers.Text: @VictorEijkhout there are no universal points that hold true for every single instance, although by "nowadays C++ is not really used as a more powerful C" I didn't mean that C++ cannot replace C in certain areas. It can, just as you explained. But many people tend to treat C++ as the same hell with `**`s and lack of memory safety, *but with classes and templates*. This is what I meant by "more powerful C". C++ is not C. It's not an add-on. It's a completely distinct language in which you need a different mindset to program compared to C. And I feel like you proved my point in your comments :)
Answers.UserDisplayName: Fureeish
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-31T21:52:46.913Z
Answers.Text: Ok, if you're talking about "C with classes", yes, that is pretty much universally recognized as a bad idea. See Kate Gregory's "Stop Teaching C" talk. I see you've edited your answer to clarify, so I guess we agree. Except that I think C++ is great for getting close to the hardware, on anything but a Linus Torvalds level. I do my bandwidth/associativity/false sharing epxeriments all in C++. It's just easier to write for the reasons given. So I'm far less down on C++ than you are. But I'll grant you the network/graphics/package manager points. That's why I also speak python.
Answers.UserDisplayName: Victor Eijkhout
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-31T22:07:31.600Z
Answers.Text: I've seen "Stop Teaching C" around 5 times. It's a great talk! I also agree that C++ is great for getting close to the hardware. I just don't think that if the goal is to teach hardware interaction, it is wise to choose C++ over C and bring the whole complexity package with it. My high-level language of choice is Kotlin. Have done some serious things in Python and dynamic typing seems to not really be my thing :)
Answers.UserDisplayName: Fureeish
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-01T11:25:29.283Z
Answers.Text: @Fureeish : can you tell me how C++ is close with hardware  as compare to python ?
Answers.UserDisplayName: Hamza
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-01T18:53:41.750Z
Answers.Text: @Hamza C++ *can* be very close to the hardware. Python *is* very far from it - by design. C++ has *language features* that enable you to interact with hardware directly, but Python needs *library features* to do the same. What's more, those libraries that Python relies on are usually written in C or C++!
Answers.UserDisplayName: Fureeish
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-03-31T13:51:57.203Z
Answers.Text: @VictorEijkhout "C with classes" is substantially better than "C without classes".
Answers.UserDisplayName: gnasher729
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-31T17:43:08.853Z
Answers.LastActivityDate: 2022-01-31T21:36:02.167Z
Answers.LastEditDate: 2022-01-31T21:36:02.167Z
Answers.UserDisplayName: Fureeish
Answers.Body: <p>There is nothing wrong with learning C++ as your first or main language. It's an extremely big and complicated language, but that's only if you want to learn everything about it. &quot;Modern&quot; C++, meaning C++11 or newer can actually be used as an elegant language to teach programming in. Try to find a book that teaches C++17: there is a lot in older C++ versions that has been improved and there are <em>lots</em> of tutorials out there that teach stuff you really should <em>not</em> use.</p>
  <p>One of the main attractions of C++ is that you can write very high performance code in it. For example, C++ is really the language of choice for video games. But that's mostly for the deeper stuff, the actual video stuff. If you're interested in GUI applications you <em>can</em> use C++ but you don't <em>have to</em>. In your case I would let the choice of language be dictated by the platform you want to code for. If there is a de facto standard, use that.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-30T16:26:15.263Z
Answers.Text: yes you are right but which  resource is for learn new features of C++ ? there is site know as cpp reference but this one is not for me :( because i don't  understand  the concepts form documentation  . can you plz guide me !
Answers.UserDisplayName: Hamza
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-30T17:18:29.503Z
Answers.Text: The books by Stroustrup (the author of C++) are good, for instance "Programming, principles and practices using C++". However, they are expensive, so I hope your library has them. You can also check out my book: https://tinyurl.com/vle322course
Answers.UserDisplayName: Victor Eijkhout
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-30T15:25:44.757Z
Answers.LastActivityDate: 2022-01-30T15:25:44.757Z
Answers.UserDisplayName: Victor Eijkhout
Body: <p>I am learning C++. I learned basics concepts  and OOP. The main things peoples are working on are GUI and API development with the help of C++. My question is, as a C++ learner is it a must for me to learn these in C++, because there are other languages to learn and develop these concepts (GUI , APIs ...)?</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-30T14:56:57.480Z
Comments.Text: If you look at Linux running... Lets see... from desktops to Android to most of the world's cloud servers to random devices IOTs modems... etc, Linus Torvalds is arguably the world's greatest programmer. And this is his view of C++ http://harmful.cat-v.org/software/c++/linus . Ten years on he seems to not have changed his mind https://medium.com/nerd-for-tech/linus-torvalds-c-is-really-a-terrible-language-2248b839bee3 .Do I believe Linus???  That's a non-trivial question and you will have to ask it with some care and research to get good answers.  If you dont your questionsstart getting closed
Comments.UserDisplayName: Rushi
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-30T15:07:06.953Z
Comments.Text: @Rusi : But in my case i prefer the languages  which is best in there fields/use . for example we use python for DS , ML etc.  And also use its framework for backend web development .On the other hand we use Java or Swift for app Development . and most of programmer who prefer me to learn C++ as a beginner and for DSA .
Comments.UserDisplayName: Hamza
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-30T15:55:46.063Z
Comments.Text: What are your actual goals. Do you want to just become a developer or do you want a deep understanding of computing in all of its facets?  Is your goal graduate school and beyond or not?
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-30T16:00:42.467Z
Comments.Text: @Buffy : yes I want deep understanding  of computing !!!
Comments.UserDisplayName: Hamza
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-31T08:28:10.243Z
Comments.Text: @Rusi What I've read of Linus' comments on C++ can be said of any high-level language/process/anything: it introduces useful features which everyone can understand, but which inevitably are not perfectly suited to every scenario to which they are applied, so there is always dissonance. The fact that everyone and his dog can use those features and that you don't have to re-implement them for each and every project is a massive practical benefit that he clearly values less than his performance considerations. Personally, I would encourage people to ignore such debates when learning.
Comments.UserDisplayName: VisualMelon
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-31T08:45:50.973Z
Comments.Text: You — we all — are free to choose our favorite desiderata (and bugbears) @VisualMelon. But you are misrepresenting Linus views as *performance considerations*, when he makes it clear that he dislikes C++ because «**C++ leads to really really bad design choices**».  I am not remotely in the same league as LT. And I am sure there are many great C++ programmers who would give strong arguments to him re C++. But I am teacher who's taught for decades. And I can vouch for the LT observation from the pedagogical side: **C++ early spoils kids**
Comments.UserDisplayName: Rushi
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-31T09:03:58.347Z
Comments.Text: @Rusi perhaps I am, for which I would apologise (to mention performance wasn't meant as a negative remark: it _is_ a real concern, but the point like any concern it is one among others, and without a serious project they cannot always be weighed); I must say I was unsure what your original comment is getting at, and personally I wouldn't point a newbie at that sort of thing (by LT or anyone else): I'd welcome some expanded discussion on the learning side of things in one of your full answers (reading back I'm not sure how much the OP knows already, and I was probably under-estimating it).
Comments.UserDisplayName: VisualMelon
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-31T09:10:35.537Z
Comments.Text: @VisualMelon Happy for a fuller discussion on some other q/as here! Regarding exchange with *this OP* see this recent comment thread https://cseducators.stackexchange.com/q/7252/8837. And if thereafter you feel something is still inappropriate/out-of-line I'd like to know!
Comments.UserDisplayName: Rushi
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-31T09:20:41.627Z
Comments.Text: @Rusi sorry, I hope I didn't come across meanly, certainly nothing inappropriate! My own experience is that such discussions can confuse and disenchant beginners (regardless of their merit), but I don't have anything like the teaching experience you do.
Comments.UserDisplayName: VisualMelon
Tags: <secondary-education><programming><c++><gui>
Title: Is C++ much better than other languages?
ThreadText: # Is C++ much better than other languages?
  
  (Asked by: username_0 on 2022-01-30)
  
  I am learning C++. I learned basics concepts and OOP. The main things peoples are working on are GUI and API development with the help of C++. My question is, as a C++ learner is it a must for me to learn these in C++, because there are other languages to learn and develop these concepts (GUI , APIs ...)?
  
  **Tags:** secondary-education, programming, c++, gui
  
  > **Comments:**
  > **username_1**: If you look at Linux running... Lets see... from desktops to Android to most of the world's cloud servers to random devices IOTs modems... etc, Linus Torvalds is arguably the world's greatest programmer. And this is his view of C++ http://harmful.cat-v.org/software/c++/linus . Ten years on he seems to not have changed his mind https://medium.com/nerd-for-tech/linus-torvalds-c-is-really-a-terrible-language-2248b839bee3 .Do I believe Linus???  That's a non-trivial question and you will have to ask it with some care and research to get good answers.  If you dont your questionsstart getting closed  
  > **username_0**: @Rusi : But in my case i prefer the languages  which is best in there fields/use . for example we use python for DS , ML etc.  And also use its framework for backend web development .On the other hand we use Java or Swift for app Development . and most of programmer who prefer me to learn C++ as a beginner and for DSA .  
  > **username_2**: What are your actual goals. Do you want to just become a developer or do you want a deep understanding of computing in all of its facets?  Is your goal graduate school and beyond or not?  
  > **username_0**: @username_2 : yes I want deep understanding  of computing !!!  
  > **username_3**: @Rusi What I've read of Linus' comments on C++ can be said of any high-level language/process/anything: it introduces useful features which everyone can understand, but which inevitably are not perfectly suited to every scenario to which they are applied, so there is always dissonance. The fact that everyone and his dog can use those features and that you don't have to re-implement them for each and every project is a massive practical benefit that he clearly values less than his performance considerations. Personally, I would encourage people to ignore such debates when learning.  
  > **username_1**: You — we all — are free to choose our favorite desiderata (and bugbears) @username_3. But you are misrepresenting Linus views as *performance considerations*, when he makes it clear that he dislikes C++ because «**C++ leads to really really bad design choices**».  I am not remotely in the same league as LT. And I am sure there are many great C++ programmers who would give strong arguments to him re C++. But I am teacher who's taught for decades. And I can vouch for the LT observation from the pedagogical side: **C++ early spoils kids**  
  > **username_3**: @Rusi perhaps I am, for which I would apologise (to mention performance wasn't meant as a negative remark: it _is_ a real concern, but the point like any concern it is one among others, and without a serious project they cannot always be weighed); I must say I was unsure what your original comment is getting at, and personally I wouldn't point a newbie at that sort of thing (by LT or anyone else): I'd welcome some expanded discussion on the learning side of things in one of your full answers (reading back I'm not sure how much the OP knows already, and I was probably under-estimating it).  
  > **username_1**: @username_3 Happy for a fuller discussion on some other q/as here! Regarding exchange with *this OP* see this recent comment thread https://cseducators.stackexchange.com/q/7252/8837. And if thereafter you feel something is still inappropriate/out-of-line I'd like to know!  
  > **username_3**: @Rusi sorry, I hope I didn't come across meanly, certainly nothing inappropriate! My own experience is that such discussions can confuse and disenchant beginners (regardless of their merit), but I don't have anything like the teaching experience you do.  
  
  ---
  
  ## 3 answers
  
  ### Answer by username_5 on 2022-01-31. Score: 2 | Accepted answer
  
  I will try to answer this question from a Computer Science Educator point of view.
  
  ## C++ is a tool
  
  First and foremost, C++ is a tool. Like any other language, it's designed to make accomplishing *certain* types of tasks easier, but it *always* comes with a cost.
  
  C++ tries to be usable almost everywhere with a great deal of flexibility. This inevitably comes with a cost of complexity. Some say it's the most complicated language out there (to know all the rules, not to accomplish certain tasks - this confusion leads to incorrect assertions that C and Assembly are more complex).
  
  ## It can give you everything
  
  Teaching C++ has its benefits. You can use one tool to teach pretty much everything there is - high level abstractions like generics, dependency injection with polymorphism, framework interactions, various package managing, resource acquisition and control, interactions with hardware in the lowest level.
  
  It's convenient to be able to teach pretty much everything while using one tool. But it has its costs.
  
  ## It is incredibly complex and makes some tasks disproportionately harder
  
  Computer Science students have many reasons to learn a programming language. It is important to not only provide reliable information, but to also encourage them to explore the possibilities on their own. C++ makes it hard. Very hard.
  
  Scott Meyers (a notable author from the C++ community) was once asked, what, in his opinion, is most lacking in C++. He said something among the lines of:
  
  > I am an author, so naturally I would want to know how is my book selling. I need to fetch those information from some online source, so in C++ I... yeah...
  >
  > Okay, forget networking. I have the data and I want to display them in a nice chart, so in C++ I... yeah...
  
  C++ does not have many of the common (some would even say *fundamental*) features that are expected to be bundled in the language. Most students will be way more amazed by easily making some simple GUI application than by creating a console game for the 5th time. There is still no networking or GUI application in standard C++, and C++20 is almost implemented by the Big Three compilers.
  
  ## Not everything can be solved by a third party library
  
  Some would argue that third-party libraries exist for a reason. What's the problem with introducing a simple dependency and using it? After all, every programmer should be aware of such possibility and get familiar with project dependencies.
  
  Except for the fact that C++ makes it incredibly hard to bundle additional dependencies. It was designed before Internet-aware package managers were a thing. Some decisions have been made that made sense during that time. But new tools were being created and integration reached a new level. Multiple times I had to mentally sigh when I was asked by a student why it takes 4 hours of researching accompanied by trial and error to install OpenCV with CMake, while in Python it takes one `pip` command. The situation is bad and it's unlikely that it'll improve.
  
  ## Every tool has its purpose
  
  Every tool has its purpose and while C++ may as well be an academic language, I do not believe the pros outweight the cons in terms of learning programming. Make a distinction that is already omnipresent - don't use one tool to do everything, even though such a tool *can* be used with everything. Want to learn programming and get hooked? Chances are that Python, Kotlin, C# or TypeScript will be much more engaging and pleasurable experience. Want to start with or migrate to low-level language? Choose C or C++, but remember - nowadays C++ is not really used as a "*just* more powerful C". The "modern" part of it is more common and it's not really a tool used to primarily interact with hardware directly. Its aim is to provide a high level of abstraction with almost zero-cost overhead. This comes with complexity.
  
  ## What to choose, then?
  
  Ultimately, this is your question about your situation. You have learnt some basics of C++, good. It's not bad to make a transition to another language, nor is it bad to stay with C++. Ask yourself whether you're enjoying C++. If yes, try to delve deeper. If not, make a change. A programmer ough to know more than one tool, so learning more languages is inevitable.
  
  ---
  
  A word of disclaimer - I have been programming in C++ for almost ten years. It is (and has always been) my primary language. I am engaged in both business solutions and education and, unfortunately, I more and more believe that my favorite tool (C++) is becoming more and more ill-suited for being an academic tool. Want to teach high-level? Use Kotlin, Python, TS, C# or Java (or other tools that make it easier by doing some work for you). Want to teach low-level? Use C.
  
  Don't bother with the fact that C++ *can* do both of those things, unless you have a *very* good curriculum planned. "Can" doesn't mean "should".
  
  > **Comments:**
  > **username_6**: You say "but remember - nowadays C++ is not really used as a more powerful C." And I say, any time someone says "remember" they are about to say something completely unsubstantiated. Case in point: I write a lot of stuff that I could write in C, but C++ 1. has automatic memory management, so no leaks 2. parameter passing without having to count "**"s. Seriously, how do you teach students to write a routine that outputs a malloc'ed array in a parameter? 3. Arrays know how long they are through ".size()". 4. The copy constructor. In C you have to write your own copy routine. Horrors. Etc.  
  > **username_6**: "GUI application [versus] console game for the 5th time." There is more to life than graphics and games. I teach "scientific programming", and my students do stuff like infectuous disease propagation, delivery truck planning, climate change, et cetera. (At the end of their first semester.) All of those require substantial programming, and with no ancillary libraries. If they want to visualize something, they pipe their numbers into some simple graphing tool. I guess it depends on your audience. Just don't think that your audience is representative. Mine isn't either, but I don't generalize.  
  > **username_5**: @username_6 there are no universal points that hold true for every single instance, although by "nowadays C++ is not really used as a more powerful C" I didn't mean that C++ cannot replace C in certain areas. It can, just as you explained. But many people tend to treat C++ as the same hell with `**`s and lack of memory safety, *but with classes and templates*. This is what I meant by "more powerful C". C++ is not C. It's not an add-on. It's a completely distinct language in which you need a different mindset to program compared to C. And I feel like you proved my point in your comments :)  
  > **username_6**: Ok, if you're talking about "C with classes", yes, that is pretty much universally recognized as a bad idea. See Kate Gregory's "Stop Teaching C" talk. I see you've edited your answer to clarify, so I guess we agree. Except that I think C++ is great for getting close to the hardware, on anything but a Linus Torvalds level. I do my bandwidth/associativity/false sharing epxeriments all in C++. It's just easier to write for the reasons given. So I'm far less down on C++ than you are. But I'll grant you the network/graphics/package manager points. That's why I also speak python.  
  > **username_5**: I've seen "Stop Teaching C" around 5 times. It's a great talk! I also agree that C++ is great for getting close to the hardware. I just don't think that if the goal is to teach hardware interaction, it is wise to choose C++ over C and bring the whole complexity package with it. My high-level language of choice is Kotlin. Have done some serious things in Python and dynamic typing seems to not really be my thing :)  
  > **username_0**: @username_5 : can you tell me how C++ is close with hardware  as compare to python ?  
  > **username_5**: @username_0 C++ *can* be very close to the hardware. Python *is* very far from it - by design. C++ has *language features* that enable you to interact with hardware directly, but Python needs *library features* to do the same. What's more, those libraries that Python relies on are usually written in C or C++!  
  > **username_7**: @username_6 "C with classes" is substantially better than "C without classes".  
  
  ---
  
  ### Answer by username_6 on 2022-01-30. Score: 2
  
  There is nothing wrong with learning C++ as your first or main language. It's an extremely big and complicated language, but that's only if you want to learn everything about it. "Modern" C++, meaning C++11 or newer can actually be used as an elegant language to teach programming in. Try to find a book that teaches C++17: there is a lot in older C++ versions that has been improved and there are *lots* of tutorials out there that teach stuff you really should *not* use.
  
  One of the main attractions of C++ is that you can write very high performance code in it. For example, C++ is really the language of choice for video games. But that's mostly for the deeper stuff, the actual video stuff. If you're interested in GUI applications you *can* use C++ but you don't *have to*. In your case I would let the choice of language be dictated by the platform you want to code for. If there is a de facto standard, use that.
  
  > **Comments:**
  > **username_0**: yes you are right but which  resource is for learn new features of C++ ? there is site know as cpp reference but this one is not for me :( because i don't  understand  the concepts form documentation  . can you plz guide me !  
  > **username_6**: The books by Stroustrup (the author of C++) are good, for instance "Programming, principles and practices using C++". However, they are expensive, so I hope your library has them. You can also check out my book: https://tinyurl.com/vle322course  
  
  ---
  
  ### Answer by username_4 on 2022-01-31. Score: 1
  
  As a software developer, I used C++ on several projects.
  
  * First I learnt C.
  * Then on the first C++ project I learn encapsulation.
  * Then on the third C++ project I learn some more.
  * Then on the forth C++ project I learnt Eiffel. In Eiffel I learnt polymorphism, inheritance, generics (templates), return type covariance, etc. ...
  * I then learnt how to do these in C++.
  * Then realised that C++ is a bad idea: It has some improvements to C, but also a load of blot, that gets in the way.
  
  I wish I had learn Eiffel first, it is a much quicker language to learn. It is quicker to learn Eiffel and then C++. Eiffel is also a much quicker language to program in. And compiles to programs of similar speed to C++: faster for big complex programs, slower for simple programs (but not much).
  
  # Conclusion:
  
  1. Learn to program: Eiffel, Lisp.
  2. Use a high level language for most jobs.
  3. Use a hybrid of languages when you need to do low-level stuff.
  4. Use `golang`, `Eiffel`, or if you must `C`, for speed. There may be others.
  
  > **Comments:**
  > **username_0**: Eiffel  ? can you plz explain what is this ? btw I know the concepts of OOP but I don't know about modern C++ .  
  > **username_4**: `Eiffel` is an OO language. When you have used it, you will realize that `java` is not real OO. (smalltalk is another interesting OO)  It compiles to `C`. It is fast. It is easy to learn. It is easy to use. It is powerful.  
  > **username_0**: much batter then C++ . ?  : |  
  > **username_1**: Eiffel... Yeah it's a good reminder.  70-80s Pascal was the de facto teaching language. 80s shifted to scheme.  Eiffel never became as big as these but it (was) still a good teaching language in the 90s.  Post 2000 everyone's jumped onto some industry omnibus such as Java, Python, C++. And this baby — to teach programming one needs a *teaching oriented* language — is forsaken and destitute  
  
  ---
  
  