@@Pain-Addict C++ is interesting if you need your game needs to be performant, you can make little indie games with other simpler language like Undertale if it's what you're going for.
@@bubble8760 I have learned a lot still don’t understand a lot I already made a lot of small games but all I wanted to make a game like nfs,gta,cod. I am working on my own game engine its time consuming man I wish I could make one like unreal engine man its impossible. Its breaking my spirit day by day if only it was as easy as playing call of duty.
"C++ is still viable... I think most blah blah blah." So the answer to the question in the title is "yes, if you need to do c-plus-plusy stuff i.e. performance".
It is a better language now, then it was 5 years ago. If you are experienced in programming, use this book for learning about c++:www.amazon.com/Tour-C-Depth/dp/0321958314. It's short and effective.
Saving your time, C and C++ are both very valid languages to write in, and something everyone should learn. It shows you a deeper level of what is going on with memory management. It’s similar to learning how to draw a fully realistic human being before learning how to draw simpler or more stylistic artistic pieces. It’s important to learn and know how to use. After learning C++ I learned how to program in Java in less than a week. It was so easy by comparison. Just my opinion, but please do learn c++ and see what it will show you, and how much control it gives you.
I must be getting old. When I was starting out, C was the main language for most development, along with Pascal. C++ was the new hotness. Java didn't exist yet. So when I encounter people talking about learning C or C++ my first thought is "How come you don't know these already?" Of course these are people who get taught Java in school instead. But as Stefan says, the languages you should master depend on what kind of development you want to do. System level stuff requires C for example. Web development doesn't benefit from C since no one is using CGI anymore. Of course the conceptual overlap across most languages is pretty high. A loop is a loop is a loop. Anyone who truly masters one language will go into the study of any other language knowing 80% of what they need to know already.
Lee Renolds Like you I was a c programmer when c++ first came out. Now, there is a tendency to bundle the two languages; c is advertised as c++ or c/c++ .
You don't need to know c or c++ to learn other languages. There are modern languages like rust that are getting pretty close to c++ performance. Also there quite a few scripting languages that get the job done without knowing c or c++. Just because it was the hotness in the 70s doesn't mean still is.
Stefan, I haven't watched your videos in years, and just got this recommended to me, and it hit me in the feels a little bit. I remember watching your HTML and CSS videos like 7/8 years ago when i was 14ish, teaching myself how to make basic websites, and now i'm in my third year of uni studying computer science. I may not be doing much web development anymore, but you helped push me in this direction, so I just wanted to thank you.
Cool bro......am great at web dev and app dev amma start uni soon 2018 but i had to find myself first and coding help me alot....i expressed alot through codes even if i just imagine it.
literally in the exact same position as you now but im in second year of computer science, i did never finish your guides but i sure enjoyed learning to build websties with html
I'm a hard-core C++ dev, and let me say that the thing I liked most in your video is the statement, said raughly "everything is good at something". Tons of beginners come to me and ask me the naive question "what's the best programming language", and I tell them "what do you want to do with it?" and they're surprised that I don't have a single universal answer. No, C++ is not the best for everything. You definitely can do everything with it, but only if you have an infinite amount of money.
What is the best for developing most form of games? I started learning c++ but I'm wondering if I should have learnt js instead. I am already really familiar with python but that is no good for games
Binary Chinese? Sounds like a language I should study. It's like a quantum computer's machine code, except instead of having 1, 0, and 1 and 0, you have over 9000 characters.
I agree with a lot of what you're saying, and my two cents is this; Two points that are important... 1) If you know C++, then you'll often have gained the prerequisite knowledge to tackle other languages, which is something that doesn't always go the other way... 2) Portability. Write something in C++ and you can compile it on Windows, iOS, Android, etc.
I never really thought calling the _language_ itself portable made much sense. Really, any language could be used on any machine with the same expressive power, it's more about the libraries. The libraries of existing code is where the incompatibilities arise.
frtard not really, systems languages like C/C++ are portable because you can target machine code of most systems. you can't do this with, eg, a language like python
C is portable. C++ isn't. Writing a non-optimizing C compiler from scratch is relatively easy. Writing a standards-compliant C++ compiler for a new architecture requires hundreds of thousands of man-hours, because C++ has a ridiculously long and difficult standard to implement. Making a new backend for an existing compiler like GCC or LLVM is only viable for architectures that fit well with the compiler's backend IR, and if you can do an LLVM backend, you can run almost any other language on there as well since LLVM is not C++ specific.
ignoring that writing a C++ compiler is actually quite trivial and that writing a "standards compliant" C99 compiler is not, C++ is absolutely portable. portability has nothing to do with (perceived) complexity.
C++ gives you low level and high level. Basically it combines benefits of C and assembly with benefits of supposedly higher level languages like C# and Java. With C++ you can program in the same manner as in those languages, but not to a virtual machine, to an actual machine.
I agree completely. .. and i am sick of hearing that '...C++ is for low level programming ...' because - as a multi paradigm language - it support's A LOT of different approaches. Not to forget: It serves as a pioneer for a lot of features for other languages. Esp. Java benefits in many ways from developments in C++. Take the 'lambda functions' or 'templates' or .... - decade old features of C++ that are adopted by Java later. What i miss in this discussions about programming languages: The Runtime Environment! In many cases THAT's the key feature for a decision what language to use. Java (as a language) isn't superior to C++ - but a lot of Environments (J2EE, JavaScript, ....) come with direct integration of Java-Code - and THAT's making the Java the perfect match for applications targeted by that environments. Java would have been dead on arrival without the wide support of the JVM (written in C/C++ ;-) ). NO: C++ is not ' the perfect language' or 'the one fits all'-tool. But it is worth learning to widen ones horizont.
lambdas were introduced in C++ 11, it's not a decade old feature. and java's lambdas are probably inspired by C# 3.0 (2007). just saying. i program C++ commercially, i find the out-of-the-box experience lackluster when it comes to high level stuff. it really needs a bunch of 3rd party libraries to do something useful.
C++ lambdas are both really recent, and less useful than they would be in a language with garbage collection, since lacking GC limits your ability to make lexical closures. It's way too easy to accidentally make a lambda with a dangling reference in it. C++ is DEFINITELY NOT a pioneer language, it has always been ridiculously conservative. It never pioneered a single important feature. It has however stayed extremely verbose for decades because it wouldn't adopt core useful features, but did adopt tons of features that solved problems that were only problems to C++ developers.
@decades: I used a hyperbole. But what about templates -> generics? RAII -> try-with-resources? implicit conversion/autoboxing? ... A lot of those features were long and well established in C++ before half-heartedly adpoted in Java. @3rd-party: Try programming pure core Java without any additions and you are similarly 'lacklustered' - despite oracle trying to 'borg' everything in their sight (leading an abundance of duplicities like StringBuilder/StringBuffer). @"ridiculously conservative": C++: (89, 98, 05(TR1), 11) Java: (98, 00, 02, 06, 11, 14) - aside from the 'fast-fixing early years' of Java (98-02) not so different. And it's not that Java8 created a whole new programming world over Java7.... Also I don't see any mistake in concentrating on fewer bigger releases rather than flushing out a new version every month ;-) Nice talk about why it's important to learn different concepts: ruclips.net/video/oB8jN68KGcU/видео.html Both languages still suck major balls regarding time/date ... ;-) BTW. I also programm C++ commercially (and Java too - both on varying platforms) for 20 years now.....
I think C++ is good to learn because it teaches you more about how the computer works. You work more closely to the hardware and understand better what is going on. I also think it is worthwhile to learn Assembly because you are working *directly* with the CPU and memory. Most college curriculums will have at least one course in each. However, I don't think you have to be an expert at all in them unless your job demands it. But it wouldn't hurt to be somewhat familiar with them and get a glimpse on whats happening under the hood.
A good IT'ler should now how a computer works down to the electronic band structure of the semiconductors. At least he should have heared about it. But from CPU architecture on everything is necessary. Knowing about caching technology is so important today for highspeed programming.
Your comment reminds me what my assembly class professor stated on his first day: I'm teaching you this to get you to know about computers and how they work, but if you ever get a job that requires you to program this daily.... just quit as soon as possible.... C++ is more bearable...
Thomas Victorian If your a complete beginner at code, don't start with assembly. Even starting with c++ can be very difficult for people. Id say for complete beginners start with python or JavaScript.
C++ is the Rocket Scientist of programming languages Java is the IKEA of programming languages Python is the Amazon of programming languages: Just order the library and it works out of the box. :D
That is unless you want to run a program that was written with an old version of Python and hasn't been updated, then you have to downgrade all of your packages to older versions just to make it work.
EZCode lol. I jumped the gun by saying that. No, not far. I don’t utilize that tool. although, it’s very interesting. For me coding is our projections and calculations to produce an outcome. Which is odd, as the outcomes can be many. Knowing which ones and how to execute it; Isn’t coding per say but an emotional one.
You should know C++ because of its knowledge gain. You will be an Expert programmer if you know C++ and a C++ programmer is ready to migrate into many language.
I've to say almost everything Stefan says is correct and most of it spot on. Many technically correct comments are not talking about the purpose of this video: "should you learn", "2018", ... it's about getting a job guys, it's not about pissing contests... After diving in the current state of C++ for quite a while, CppCon, tendencies, idioms, compiler support,... it's all very, very convoluted. The famous Stroustrup "Remember the Vasa" open letter was in its origins a direct and hard critic about some things clearly stated in the video.
I'm learning c++ now and i interested with AI. Can you explain the career of c++ developer? Actually, i started learn c++ because of it speed and it famous in competitive programming, i don't know about c++ developer career path. Thank you.
Actually this is true generally for everything in Python. Python libraries depend heavily on something called "ctypes", which is basically a gate to low-level shared libraries. The philosophy of making Python very fast simply uses operations coded with C++ (or C), interfaced with C to Python using ctypes. A very good example of this paradigm is nothing but the very famous numpy! Basically all the matrix operations in numpy are made C (probably C++, too), and are facilitated through Intel MKL (math kernel library). It would be utterly stupid to do matrix multiplication, for example, in Python. It'll be super slow. So basically what numpy does is take the data from python, send it to C, which uses MKL to do the math, and retrieves the result for you. Of course, granularity matters here. Doing this for 2x2 matrices is not efficient. But doing this for 20x20 matrices makes a big gain.
+ Keep moving forward > Can you explain the career of c++ developer? Actually, i started learn c++ because of it speed and it famous in competitive programming, i don't know about c++ developer career path. Thank you. Learn the basics (this is list is applicable for most programming languages): output/print, variables (int, double, string), basic math (2+2, sqrt, ...), input, if statements, loops, functions, references (and reference collapsing rules), global variables (and why they're bad), classes. After that basic theory: - abstraction. The more you understand abstraction the better you will understand functions, math, calc, logic and proofs, programming, of course C++. Abstraction is the the butterfly effect towards learning OOP - divide and conquer. Without this it is difficult to solve most programming problems. It is how to take a difficult or large problem and breaking it into a ton of tiny pieces. Each piece is easy to solve on its own. That is the 101 of C++. Once you know it, you can write just about anything. It will not necessarily be good, or easy, but it will be possible. The 102 begins computer science, specifically data structures: arrays, string internals, linked lists, trees, maps, hash tables. With that the bigO notation of these structures, so you know which is fastest where. Once you get experienced enough with the hardware (It comes with experience and studying x86_64 assembly.) you'll be able to invent your own new data structures. Creating your own data types, for all intents and purposes, is the heart of C++. For 103 learning templates, more stl data types like tuple, optional, and so on. Then constructors (copy constructor, assignment constructor, destructor, ... idioms like the rule of 1,3,5), then shared_ptr, and possibly pointers themselves, then ownership semantics with move symantics, then unique_ptr. Then after that stl algorithms. I'm probably forgetting something.. but that's basically it. Oh and RAII, and operator overloading. After that, C++ idioms, then C++ edge cases, then programming patterns.
i really enjoy c++, its the first language i learnt when i was 16. It to this day (i'm 19 now) helps me in learning everything, basically i can learn any new language i want now because c++ taught me all the concepts. All i had to do to learn javascript was learn the syntax (which isn't as different as i thought it would be from c++) and some other things that javascript offers, same with any other language i learnt. I definitely recommend c++ in 2019
Edward more like you sound like an immature kid trying out his grandpa's favourite insults when you generalize about interpreted languages & sorry, but that asinine spelling trying to be clever & convince php & python is just horrendous. you could've at least gone with 🐍PythonBee🐝💎 if you had to try & make that joke, imho...
Make your own CPU software rasterizer for your own OS and 3D engine? You're a beginner, man. A beginner. I have students of 12 years old who don't mind to learn C++.
Thanks for a very simple and unbiased review on "Should you learn C++ in 2018" in 7 mins. Landed up accidentally and now will follow subscribe like your channel and share it with my friends
I like cpp because of how much access it gives me in windows, with the header, i can read write and edit memory, while taking snapshots of all modules in a program get the process id and all that fun stuff. cpp is great because you can do so much with it.
I'm learning C++ now and taking an ML class. It is so much math. I like UI too so I may go the Qt, OpenGL route. I saw a cool job working for Boston Dynamics doing UI. That would be my dream job. Maybe in 3 years or so.
In response to the basic question of whether or not to learn C++ - I *have* programmed in C++ professionally and have been with the language for over 20 years and my response is a resounding "Hells yea, bitches!" Is it messy and cluttered from the recent standardizations in 2011, 2014 and recently 2017? No, not at all. We've seen some really awesome features come in: native threading, native filesystem support, a new networking library is on the way, new traits, container improvements, parallel algorithms with the addition of an extra argument (std::execution::seq or std::execution::par), lambdas, the new auto keyword (carpal tunnel is a thing of the past in our new language), compile-time constant expressions - I could go on all day. This is amazing stuff. I can't understand how any of this clutters or messes up the language. It's language evolution like every language worth its salt does or should be doing. There are some really cool things in C++ that make coding in it fresh, easy, and easily accessible to those new to the language. For those curious about the language, you really owe it to yourself to spend a weekend playing with a few things. Write a couple of small programs. Use the standard library functions to see how easy it is to do something non-trivial with your data. Clang and GCC are both straightforward to work with and there are free IDE's that make a weekends worth of experimentation much easier. Just don't overcomplicate things by setting out to write a new complex set of stock analytics in an afternoon - that's fricken hard to impossible in any language.
The actual question is whether one should learn programming or just a programming language, not "should you learn X programming language" though. It's good to be able to work with any language thrown at you, that is, be able to adapt when needed, most differences between languages are just semantics anyway.
This is why I don't really like the currently popular terms "coding" and "coder." When here someone talking "learning to code" it seems like a lowered bar, it sounds like learning to write technically correct code in some language -- and I can't help thinking, "Great, you can code, but do you really know how to program, to actually solve problems with code?" I know its just a semantic fad, and people are necessarily meaning it that way, but its why I prefer terms like "programmer" or "developer."
I laugh at everyone who says that they are a "coder", because programming is coding + actually thinking about it beforehand, which in general is problem solving. And I just don't like that word in general, that's all, I don't know why it even exists.
Well, grasping the capabilities and quirks of a language takes its time, so I'd say 'should I learn X' is a fair question. It's true that if you've been coding for a while you can probably handle writing stuff in foreign languages if you're familiar with the paradigm. However, you'll probably be googling, reading SO, docs and stealing code, like, every two seconds. Actually learning and being comfortable what you're working with takes a little more than that.
Started learning Lua because I can, writing my own code, syntax is easy to understand and I can already write almost anything using OOP approach (just mentioning it here because it's not as obvious as typical procedural programming is as Lua doesn't really have such thing as objects) in it since day on. Yes I am googling, and I'm not that comfortable yet, can't write it blindfolded, but I'm not sure why you have to put "stealing code, like, every two seconds", programming is problem solving, not code writing, which language you write your logic in doesn't fucking matter, what matters is which language is best suited for solving your problem. If you can't do that then you aren't a programmer but a skid, because that's who "steals code, like, every two seconds", nobody ever does that but skids. The only way I "copy" code in any way is by using 3rd party libraries. As for quirks of language, you don't need to know all of them to write something in X language, also you'll figure them out naturally as you use it, so that's not a problem.
In addition to the technical information you delivered in all your videos, which are very good for me as developer by the way. Your videos are weirdly soothing and satisfying to watch after a long day of work. It's like listening to veterans telling stories about what happened on the battlefield.
Wonderful description! Each language has its pros and cons. The goal of programming is to solve a problem, and no language is good at solving every problem. When deciding which language to learn, pick the language that is best suited for a problem that you are passionate about.
Being a hobbyist game developer and graphics programmer C++ is the way to go because I have all most total control of how memory is used (both sys and with the introduction of Vulkan, Metal, and D3D12 vram). If your writing a business app use something like Python, Java, Ruby, C#, etc. If you want to create a high speed real time simulation that requires a ton of optimizations to pretty much any aspect of the project, c++ is the winner. I could use Rust or good old C for this but. C++ has so many libraries for this purpose plus has several ways to code up a solution (procedural, Object Orient, Generic). My issue is C is simple, I can do C programming in C++. As for Rust, its to new and doesn't have a big ecosystem just yet.
If you dont enjoy that, perhaps you should consider a career change. Not because you dont enjoy it, but because you dont seem to be good at what you do.
The analogy about sprinting and long distance is so apt. Over the past 2 years I've had to learn Java so I could develop Android apps, and the biggest change was getting used to the dev environment. I have to mentally leave Python mode and switch to Java mode. Now I've recently been doing it all over again for C so I can take advantage of the JNI. If I can be fluent in 2 languages and proficient in one, I'll be happy.
C++ was the first language I learned, and it was way more difficult than if I had learned python. I’m very grateful I learned C++ because I learned so much about proper syntax/coding and the most important thing I learned was THE LOGIC OF CODING. That was the biggest take away for me, even if it was so much harder than learning python first....I agree with this video!
I started to learn programming through C-Sharp (C#) on Unity (Game engine) a couple of years back. My curiosity in game engine pushed my brain to learn more about. (I tried reading lot of books and nothing was really working from that side). Unity's C# isn't like the usual C# stuff as there are special library that only works in Unity (unless you build them back outside of it). Still, it was a good entry-level experience. Then I started to get curious about Javascript can be used and, in Unity, I learned to translate C# into Javascript from the game engine point of view. Then, as I was, back then, a graphic designer for like 6-years and worked on web design (visual side of it) with web programmers, I did have a few idea of the web's structure when it comes to the basics (HTML & CSS) and I trans-positioned my knowledge from Unity's Javascripts to the Web's Javascript. Different things sure, but the structure remains constant. Recently, I started to learn a variant of the HLSL language (shader language) and started to make my own 3D and 2D shaders. In the end, as it's so well explained in this video, the language you should learn is the language that's actually used in what you want to work with. I'm more of a Math-type of guy with a clean structure. Always have been. This is why I prefer C# and C++ to Java and Javascript. While they requires a bit more works and controls, their sets of rules are clearer and easier to follow (for me). It's all about their programmatic logic.
Interesting! I've been working with C# in Unity for about 1.5 years and now and feel like I want to move on to C++ and Python, to create applications outside of unity. How did you go from Unity C# to C++ coding? Any books, online resources, general advice?
I went to the local library and took a look at most of the books that had anything to do with C++. Once you're able to use C# such as what's in Unity, you should already be able to understand about 70% of what's explained in C++ for beginners and about 30% of what's in the intermediary level books. The remaining 30% & 70% are mostly things that are more oriented to standalone sides that comes with the C++. C-Sharp such as in Unity is heavily dependents toward the engine's core and how the engine is made to process things while C++ requires a bit more though about primary processes. One thing I have learned about C++ is that even old books that explains things like how they were back in Windows 98 or even 95 are still valid today when it comes to starting to learn C++. While some information are archaic, you only got to "store" in your brain the information that means something to you. For the newer books, they are mostly useful when it comes to optimization and memory management... because we all have experienced that there's quite a difference between building a game software for Windows 95 or 98 and building a game on Windows 8 or 10 one way or the other. For example, older C++ book will consider minifloat as 8bits float values while some newer book will also consider 16bits floats as minifloats (which has been standardized in 2008). I do suggest to avoid chapters in books that make uses of... floppy disk and diskettes. Not that they aren't fun to read... it's just that it doesn't work the exact same way with USB drives and hard-drives. Hahaha. I learned that the hard way.
I made 3D game in Unity. Now I am switching to Unreal Engine 4 which uses C++. It runs faster. Has better graphics. Have tons of console commands while debugging. You can see FPS and drawcall in realtime. And then there are blueprints which works like Unity playmaker but they are build in engine itself so they are more powerful and can call your C++ classes. In fact you dont even have to write a single line in C++ and make game like GTA. If I ever use Unity again it will be only for android games.
ANSI C is still not low enough. If you really want to get into the bone-marrow of the hardware... the true soul of the CPU, then you have to program in raw Chinese.
It's highly doubtful that you write enough Assembly code to get better at it than the C compiler will generate. And Assembly is *certainly* not as readable a C code is, so you're apt to make far more mistakes than if you were a competent C developer.
I really really thought that you were one of those clickbaity youtubers and always avoided to watch your videos, but you have actually gave a very good and objective advice here! (This is the first time i watch a video of yours by the way).
I work in semiconductor industry, we always use cpp for writing verification test bench. It will continue because all the Intel and AMD processors provide only that linker to convert cpp to ALP that is required for verification of these processor.
This video clearly explains the concept that the developer needs to choose their own path. It was my experience while learning in college that struggling with C++ made learning most other programming languages a breeze. If I had to give someone a cookie cutter answer, it would be that you should have a high, medium and low level language under your belt. As of the time of writing I would say that Python, Java and C++ are the most worthwhile of those categories. Python will increase your speed to write code dramatically. You will be able to solve algorithmic challenges and attack a problem with sooner success. C++ will give you the ultimate power to write very efficient and powerful code, but can be much more time consuming and frustrating. Java falls somewhere between the two as a high level language with many characteristics of a low level architecture. Java is fantastic for building GUI applications and doing network programming. If you want to write a small program that has a limited lifespan that only solves a task today.. Write it in Python. If you want to write code that will be used for years later, do it in C++. Good luck.
languages are not like dating, there are real differences that matter. people just get political about it then everyone acts like it's a wash to stop arguing.
I have a problem with people calling C++ a low-level language. You can call Assembly or C low-level, but C++ is not C and it is not low-level. The C++ standard contains many high-level abstractions of things ranging from data structures to atomic variables to threads and asynchrony. You're given much more control in C++ than in other languages (especially with later standards like C++14 and 17) so you can maximize speed and efficiency. What sets C++ apart from high-level interpreted languages is its ability to stay fast, and what sets it apart from other high-level compiled languages is the fact that its abstractions can be efficiently deconstructed by compiler writers such that compilers can produce fast machine code. This is why nearly all performant code is written in C++ (disregarding embedded systems); this is why companies like Google and Facebook use C++ every day; this is why machine learning libraries that Python bindings are developed for are written in C++. C++ is fucking everywhere because it is a high-level language that, with practice, can be used to produce code that runs with unparalleled efficiency.
C and C++ are not similar languages at all, and if you think that they are then you do not have enough experience with either language. C++ being a superset of C is technically /almost/ true, but pragmatically it is not true at all. C++ among those who actually write it is NOT an extension of C; it is its own language, completely divorced from C.
+James Houghton no! everything you can do in C, is possible in C++. There are no issues at all. What would be the Sense to call it c++ if this wouldnt be the point
That is false. I have run into problems where something works with a C compiler but does not with a C++ compiler (using void* casting; C++ has stricter type checking). Read up before you comment PLEASE: en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B This isn't even the point, though. If you think C++ should be thought of as a superset of C, disregarding all the high-level abstractions that are used in GOOD C++ code, then you don't know how to write good C++ code. Saying that C and C++ must be similar because they happened to be very similar in the 1980s when C++ was just C with classes is a profoundly misguided statement. C++ has come a long way since then and continues to evolve very quickly.
Thanks for taking the time to share your experience with the different programming languages, very helpful for guys like me walking the first steps in programming. Greetings from Costa Rica.
Been working mostly with C#.NET the last few years, still yet to write anything commercial myself, mostly do some in house stuff at my current job...but i really wanna branch out someone. Not sure why i just typed 'c++' into YT just now, but I did, saw this vid, and it was quite helpful as general advice. Thanks for this, great vid :D.
m marcus Lol with C#/C/C++ I meant that you can do anything with the C languages, not just with C++. And there are games that are programmed with both (C++/C#) I think u understood nothing :)
Did you ever code, beyond hello world? C and C++ are system language that give you control over memory layout and small details that other languages don't. C# is like Java, you only use the heap and rely on the garbage collector to manage the memory. They are NOT interchangeable, they are different in what they do and how they feel/make you reason about problems. Though in some games C# is used, it will never be used in critical parts (like graphic/physics engine), maybe for scripting purposes.
If your interest in a subject could be lost due to a bad teacher, the subject probably wasnt your bag anyway tbh. You'd have done it outside of college if it was, found the fun in it, continued at it
I believe your opinion is right on point. Even Stroupstrup says it so in his book. C++ is not the tool that solves every problem, it's a tool to solve specific problem.
Thank you for putting my worries to rest, I am thrilled to get my fingers wet with programming, been doing it for about 10 years now, no commercial/production code for me, yet.
You are missing a huge chunk of knowledge as a programmer if you have not fully immersed yourself into a programming paradigm that is close to the hardware and one that is close to the OS. You can probably earn money all your life by only staying on levels of abstraction above that, but I would feel like I am seriously lacking an area of insight that is essential to programming computers. I am not sure if it has to be C++ in order to sharpen those skills, but it is simply such an established and complex language that I would definitely recommend people learn it. It's not just about whether you need it, but also if it benefits your skill set. If you really had nothing much to learn from C++, you probably won't be spending much time on learning it. And if it provides more of an obstacle than you had assumed, maybe that is a valid indication of what it is teaching you. There are certainly things that are complex just for complexity's sake, and many more recent programming languages have done away with complexities such as multiple inheritance, but I just cannot imagine my development as a software engineer without having had C++ on my road map. If I imagined my view on the programming world without it, it would feel as if it would leave a huge hole in my understanding of compilers, programming, and computers. To build on your analogy with race cars, sure you don't need to test the 10th race car if you have driven 9 others. But C++ is such a genre defining language, it would be more akin to being a gamer into FPS and never having played such genre defining games like Doom - even if you have played countless other FPS games. C++ seems like such an important language to me, it would leave a huge gap in my knowledge. There are so many old source code bases that I have learned a tremendous amount from that I would not have been able to comprehend without my C++ experience. Do you absolutely need in 2018? No ... but there are a lot of things that you can do without in life that are hugely beneficial. I don't know your particular situation, I trust that you are not just talking out of your rear, but anyone reading this, if you learn C++ well, I can promise you that you won't regret it. If you do, feel free to shame me in the comment section, but I would find that hard to believe. What did strike a nerve, though, is C++ struggling to keep up with some more recent programming paradigms that seem a rather awkward fit in an already very complex language. C++ might be the most complex language to parse, compile, and to implement I believe, but I would have to get back to you on specific metrics for that claim. If you are writing software that is on a level of abstraction above that of the OS or hardware, do take the video author's advice and stick with something more high level. And there are languages that stay reasonably high level that let you break through to lower levels of abstraction where needed, such as C# with its P/Invoke, so there isn't really anything that you could do native that you can't do with C# on Windows at least. I am not sure off the top of my head how P/Invoke works on Linux, if at all. If you want to do the plumbing of a UI, for example, quickly, without wasting your or your company's time, do not be ashamed to use as many GUI tools as you can get your hands on. There are people who think it is a display of some kind of elitism to live a life as Spartan as imaginable, because they think it's somehow evidence of their programming prowess, such as the smug look some people get on their face for mentioning at every opportunity that VIM is their favorite editor. Absolutely use the tools that get the job done quickest, easiest, and cleanly, both now and in the future, in terms of maintainability. Languages such as Python are great for that, and ecosystems such as node.js/NPM have gained amazing popularity. It's really exciting to see how much is out there, how quickly you can put modules together and so forth. Whereas we might have had a software crisis in earlier days, we might now have a software explosion. I am very, very happy about that and I am glad to see how many young people nowadays know how to program. I am absolutely unafraid of competition and I welcome any changes that make software better, as well as easier and faster to write. The future is bright for software development - if you know C++ or not.
I really like your thoughts about C++ and programming at all. It's more consistent with my understanding of writings code. Really enjoyed to read that.
Remember leaning RISC assembly programming, to point I could create dynamic data sets, and recursive functions. Later I wrote a very basic C based compiler. That is so useful when trying to speed up any code I write regardless of language because I remember what the higher level language to the hardware is doing. This was very useful when I was working on real-time software. If you know structure and perfecting algorithms, you can write in any language, because the former never really changes. Sure there is difference in objective vs procedural programming , but if you learned structures from procedural programming, you will understand why objective programming was created. The problem it was trying to fix, and write accordingly. If give anything a programmer, should learn, and learn well is discrete mathematics.
Good post. I always thought c++ is painful for doing tools, but very good for fast or complex operations. I would like to point out that one can also have a successful career in learing specific languages for different applications. For example mel (and python) for Maya for doing 3d tools, but also other scripting for Adobe applications etc. So by specializing in programming for these applications you will spend more of your time learning how to program the tool than what you will with the specific language and this knowledge is quite thought after.
Euhm this is wrong. C++ is not low-level at all. C++ is a language to add many high level concepts to C. You can be far more succinct in C++ than you can be in your other examples, like PHP or Java. And the BIG C++ philosophy is "high level, without the cost" (cost at runtime), and that is the great strength, and the great weakness. C++ lets you be high level, at (as close as possible to) zero cost. The reason for the pitfalls is that very behavior. Because of having zero cost abstractions C++ does not stop you from doing dangerous things. There's no bounds checking, it will just crash or use uninitialized memory (because if it works correctly it's way more efficient, and presumably you know what you're doing). There's no one protecting you from using objects you've freed (because if you do it correctly, not checking is way faster). There's no one protecting you from overflowing your ints (they'll just increase and suddenly be negative), there's no one protecting you from using too small float values (meaning a loop that doesn't look all that infinite can suddenly be infinite). When you ask C++ to allocate 10 bytes of memory, it allocates 18 bytes (usually). (it prepends the actual allocation with the size of the allocation, which on 64 bit computers, is 8 bytes). To be fair, for class instances there'll be another 8 bytes pointer to virtual method table. Now that sounds like a lot, but Python ? 47, and then add the 8 that have the same meaning as in C++. I don't know about PHP, but it'll be similar. Java ? 26 bytes. That's because Java needs all sorts of information to do those safety checks, and Python needs even more. Java gets killed on memory performance because all sub-data are pointers to external classes. So "class Vector { Point base; Point dir; }; class Point { int x, int y }", in Java takes up 16 + 16 + 16 + 8 + 8 + 16 + 8 + 8 or 96 bytes. In C++ the same data takes up 24 bytes. I'm not sure about Python, but it's going to be over 100. This also kills cache performance, which matters even more than the raw difference in speed between languages (using memory is ~100 times slower than using cache. So because a C++ program can store close to 3 times more data in the cache compared to a Java program, and something like 10 times more than a Python program. This means a C++ can chug through close to 3x more data than a Java program in the same amount of time). (and yes, you can create totally unrealistic java using absurdly large amounts of variables that doesn't have the slowdown. In any realistic program you will see this slowdown) But if you very quickly want to write a very fast webserver, that is certainly possible in C++. And the thing is, where your python server handles 100 users, php will for the same code allow 1000 users per server. Java, for the same code ? 50000. And C++ ? 1000000 users. No problem. This is why eventually all successfull software gets rewritten in C++. Because in the long term runtime costs exceed all other costs.
Ben D 1 second ago C++ original name is "C with classes". That's what make C++ a low-level language as well. You can do with C++ anything you can do with C! :-)
But the language still has those low level features and can make use of them if it needs to. The fact that the possibility is there and that to really learning the language, you will have to understand them, makes it low level. Now, whether or not these things are commonly used is a different issue, but it has no bearing on what the language (dis)allows you to do.
Php i know that is used for online intergration and some changes to the web. I know that you create a game in js(javascript) and of you want to make it online you are compiling him with php where the php make s the database
I hear what you are saying - I also spent 20 years in software development and once you have worked in more than few languages you can use any language. After a switch in language it always takes a few hours to get adjusted to the syntax and peculiarities of the development environment. It's called transferable skills.
i really love the way c++ changes since c++11. shared pointer, unique pointer, the keyword auto, a lot of nice tools for a high performance language :-)
Bringing Maserati as a first example of a race (sic) car and then following that analogy, perfectly predicted the outcome of your attempt to judge about C++.
Been writing software for over 25 years, most of that time using C++. I've also produced commercial software in various other languages too. You are spot on. I stopped using C++ 2 years ago. I hope to never touch C++ again. Dealing with lib and header file management. There are much more productive languages out there today for various different tasks. A lot of new productive languages such as Golang allows you to focus on the design and architecture instead of code janitoring. I love C++ but these new languages are so much more productive. I will never go back.
I remember first working on C++ back in 1990 after using Borland's Object-Pascal the year before and thinking "Welcome to Hell" (let's start with demo programs that took 60 times longer to compile, then move into operator overloading and all the unchecked pointer insanity). I don't know any 21st century C++, I stopped following it after reading Scott Meyers' "Effective C++" book in the mid-to-late 90s and realizing it was mostly of the form "Don't let C++ screw you *this* way, or *that* way, or ..." Either 21st century C++ still has all the same old crap (and so much more!), or, it's not backwards compatible, and should be called something else.
@kurt its just a personal preference. Yeah sure, header file management is not a big deal. But it just feels unnecessary work for someone that is used to a more higer level language. Garbage collection too. It just feels like you spend alot of time in c++ doing stuff that other languages do for you. I like to prototype my games really fast and work my way from there. If i make games in c++ alot more planning is needed and it will take longer time for me to have a playable demo. Now i understand that c++ is faster and more versitale. But i see no point in using c++ if im going to make a indie game. It just makes it more time consuming and the game will probably have more bugs. Now AAA game titles for sure should be done in c++. But for small developers there really is no need to go c++.
Really hate responding to trolls, but I think my response will resonate with you when you gain more experience. If you've been doing C/C++ as long as I have, it starts to get old. It's still the language I am most fond of, but for me, it's time to move on. In tech, if you don't evolve, you get left behind or lose competitiveness. The choice to leave C/C++ was a personal choice to evolve. Some of us older developers know we must keep up with the times and compete with everyone else in the industry on the terms of where the industry is now and not where it was when we started. I know I'm being cryptic, but read that last sentence carefully as my reasons are completely encapsulated there. I'm going to cap it off with a lesson I learned over 20 years ago. I worked with a guy who had been a mainframe developer doing fortran and cobol. We were on a distributed systems project involving DCOM. He had a rough time, and he told me as such. It was a very cautionary tale. Cobol had it's time. C had it's time. Java had it's time. Now the tech landscape has shifted, and some of the other languages like Go, Rust, Swift, and Python are just better suited for the changing landscape. If all you're doing is writing drivers or embedded systems and never plan to do other software, then by all means, stay with C and never change. Just hope C and embedded systems don't go the way of Cobol and mainframes. For me, I will never want to stay narrowly focused and not evolve.
Kurt Angerdinger "Python isnt any solution at all. "... tell that to Google, IBM, and NASA. Much of their stack is based on it. It is used incredibly heavily in the data science and AI world due to its flexibility. It is funny you diss BASIC. You do realize that is what launched Microsoft into the mainstream, right? But yeah, I guess that didn't actually happen because all the smart engineers avoided BASIC... right? :/ There are no "beginners only" languages - there are only "beginners" who debate about what language is the best. Experienced devs will spend their time choosing a language that works the best given a very specific situation. Like in Algebra, there may be multiple correct solutions. Yes C++ is powerful and is a personal favorite, but would it be wise to use it to build the backend of a blogging system? Heck no, it would take 10x longer than if you used PHP, Java, or Ruby. Just like it would be silly to use PHP to build a game. Each language has its place - good developers will learn when to use each one. As far as why apps today are slower and buggier - if you worked in the industry for any decent period of time you would know why it seems that way - there's a few reasons... I'll lay out two of them. 1) In the good old days engineers would spend a year or two on a single version of software with a ton of QA/QC. In today's fast-paced highly iterative world of new versions every few weeks/monthly - sacrifices such as reliability, security, and execution speed are being made to gain an advantage over competing software and services. This is a huge issue in the industry as a whole. 2) Additionally, software does a heck of a lot more these days than back in the 80s and 90s... so of course it will be more error prone. The KISS approach works with software... always has, always will.
So easy answer for every dilemma in life, Do you need it for your job/goals? Yes, Not yet and possible never? No. That irrational feeling that you need to know every alternative tool for a single task is so frustrating, useless and stupid. Learn as you need, the only exception I find is when you want to apply for your dream job and need to master something new. Again, master as enough as needed, otherwise you will experience something called "anxiety", plain translated to "unsatisfied life".
I did finally learn C++ and it is a really great language.I took php, python and javascript engines and linked them into C++ software, not easy but really powerful. I recommend learning how to write cmake build scripts as well. You can have the best of all worlds if you want it badly enough!
C++ will still be about in more than 10 years. I'm working on greenfield C++ projects now. It's heavily used in embedded systems, its used for games development, multimedia applications, server side development, mobile development... the list goes on! As a language it is evolving and growing and moving further away from its C roots. Although there a problem spaces that C++ isn't well suited for and I wouldn't consider it to be the optimal tool to use, there are many problem spaces that are suited very well to C++ that aren't so well suited to managed languages. If you are a good C++ developer then you join a small number of in demand engineers. I never have to concern myself with being unemployed. There are far more C++ jobs than there are competent engineers with the skill set to do it. For anyone who considers themselves a technically minded developer I would say that learning C++ in 2018 and having it as part of your tool set would do you very well indeed.
As a web developer primarily, the more I work with Javascript, the more I love it. For some applications, it has some limitations, but for the web, it is so powerful. In fact, I'd say the most powerful features it has are not well understood, and can't be used to their fullest without years of study/practice because there's nothing quite like them in most other languages. In that sense, the experience of learning Javascript never gets old, because you're constantly finding ways of doing things, and even architecting your code that completely expand the world of what Javascript can do.
Yeah, I really wanna get into AI but I'm horrible at math, I average B- right now (3rd year of highschool) and I am probably going to drop to C by the end of the year. I have been doing web development for over 4 years, I only got good at it this time last year - around the time I picked up PHP, but now I'm looking to learn Django and pair it with Vue or react, I'm not even going to try for angular...
I'm only an intermediate to lower level programmer after the 10 years I've spent programming but... I look at C++ today and realize that I'll never need to know it well at this point programming video games. You're just copy pasting code at a certain point, but will definitely keep writing toolkits that take the features OUT of this feature heavy software like Unity and Unreal. If I learned C++ it would be so that I can make a 3d engine without all the bells and whistles added on. Every time I see another feature added, and there being no 'simple mode' for these engines, just shaking my head. I'd recommend someone create a simple 3d engine and actually advertise NOT having all these features. "No animation curve editor!" "No navigation mesh system!" "No internal sprite editor!" unless those are the features you're actually gonna use. When Unity takes like 3+ minutes to startup and 10+ minutes to build a game, the bloat is just ridiculous. So to digress, C++ seems useful to me if you're programming something from scratch...You want things on a low level done exactly your way... Or, it's just fun to learn and use to be honest to get to feel what being a 90s programmer was like using the Win32 api for example or Direct3D.
It really depends on the task. If you do embedded stuff especially with sensors, signals, actuators C++ nails it all way all day. First of all C++ can use larger assembly tables, you evan can use assembly directly, and it has it all when it comes to memory management and real time condition. On Top of that you have the sweet tools from object oriented languages which makes your work reusable if done right.
C++ is not only about performance, it is also about determinism and flexibility. And about abstraction/cost ratio. The cost measured where it counts the most: For the user in run time and hardware resources. It is available as a compilation target for web browsers via Wasm and a "low compromise" viable option for web app development we might see more and more. GC languages like Java or Javascript in contrast require significant compromises (translating into cost for the end user) esp. when used on embedded systems. And many other Languages are tailored by their infrastructure/libraries and development environments to a specific market like Web development or "corporate software" development, etc. and thus to a specific audience of developers. Many Languages you have no choice but the Garbage Collector and the user has to pay for it cluttering his ram and stuttering his experience. In C++ you could use "std::shared_ptr" for everything and would be already more run time and memory efficient and deterministic, but you could do even better, if you decide it is worth to invest your brain into it. Everyone who has a more general approach to programming/computing should definitely learn C++, specialized Languages can follow and are often itself written in C++.
Tired dyslectic in a dark room sees a recommended video from Stefan M, the thumbnail is kind of weird, the video is different from the usual philosophical content but since Molynuex did his fair share of programming back in the day, why not, it could be interesting.
I started learning to code on an Atari ST520 first LOGO then Basic, then Assembly on a Commodore 64. Then Pascal, COBOL in UNI etc etc etc, Objective C for 5 years, Now moving into C++ to use in the Unreal Engine alone with Blue Prints. In the end I go with the language most suitable to the end Application.
I love C/C++ precisely because it's so close to the bare metal. That's the type of programming that interests me. I like dabbling in CPU/systems emulation in my spare time, and at work I mainly do embedded development. I also write the occasional desktop GUI tool for my company, but I generally just do that in Visual Basic because you can knock out an app like that real quick. ProTip: If embedded development interests you, learn C/C++ and ideally also get familiar with AVR, ARM and PIC assembly.
We did C++ for GCSE (14-16 years old first set of public exams) and now we're doing Java for A-Level (16-18 years old second set of public exams). Not sure if there's a specific reason.
Thats odd, Java is the best way to learn as it is so big on range. At UoW where Microsoft supports we learned via Java than took side classes in C based languages.
Can be confusing and time wasting. Programming has one thing in common regardless of language, concept and theory. If you learn Java theory and classes - 100% of other languages will have the same idea just differnt syntax for say. Java is a great base point to start learning.
Thank you for spreading the word that C++ is not useless. It's just not what most people use because they aren't interested in native programming and what C++ was built for.
I find it absolutely awesome to see a professional developer give their opinion on a language. All I've heard over the past 5 years is "Don't learn C++, learn Rust. It's the C++ replacement". Which is even more amusing considering that I see next to no jobs requiring the Rust language. I've been attempting to learn C++ for almost 15 years now, I understand what the code is doing, I can debug it to an extent but starting from scratch is a whole different ball game. However, what you said is very true and accurate. Every language has a purpose and C++ is amazing for games/AI. I'm currently using it for Tool Development.
*I JUST CAME HERE TO COMMENT THAT THIS FUCKING VIDEO IS SUGGESTED TO ME FOR THREE DAYS STRAIGHT, I ONLY SEARCH FOR MUSIC AND MEMES ON YT, WTF ALGORYTHM?*
Ditto. I guess YT (google) knows that I have been a programmer for over 30 years though. But here's the thing: I think C++ is one of the most vile, heinous, ill conceived, languages, EVER (vs, say, Eiffel, Object Pascal or even Simula 67 for times you want to do static-OOP paradigm, to say nothing of FP, dynamic or low level, etc approaches). But C++ is available, and God knows how many man-lives were poured down the rat-hole optimizing it, and some jobs doing it are available, if you can stomach it. At least our host on this video has the good sense to point out that there are multiple tools in the tool box. C++ is one of my "rage quit" triggers, I guess :-)
wah, C++ is used to write almost every other language, compiler, and interpreter. That alone should be reason enough to learn it and understand it. Don't compare it to racing, compare it to having a license. I would never hire a programmer who doesn't know C or C++. A scientist or mathematician who uses Python or LabVIEW? Sure. But a programmer who doesn't know C is a hack
Mich Po not that you're wrong, but should every programmer also know how to write binary files directly with no abstractions? since all programming is built on that far more so than c++...
nathan no, but every real programmer should know how the translation to machine code works. and having a proper grasp of system languages is the way to get that without being a master assembler
Yes, it does depend. You want to program for your iPhone, learn Swift, you want to start programming, learn Java or Python. But is C++ still a relevant laguage? Definitly. I program embedded systems and C++ is for me the right choice. It is more complex, but if you don't have a lot of ressources you have more options to program efficient. And if you can program C++ you shure find a job. I also don't see C++ dying in the near future. If you are interested, try it, don't stop when it gets difficult. There are a lot of help and tutorials in the Internet, and if you mananged to get through it, I promise, you don't want to program with anything else ever again.
Spoiler Alert: Answer is YES, and even in 2020 you should! You're welcome :D
thank you. I was wondering the same thing in 2021. lol
Thank you. I wanna learn becuz of vid games
@@Pain-Addict C++ is interesting if you need your game needs to be performant, you can make little indie games with other simpler language like Undertale if it's what you're going for.
@@bubble8760 I have learned a lot still don’t understand a lot I already made a lot of small games but all I wanted to make a game like nfs,gta,cod. I am working on my own game engine its time consuming man I wish I could make one like unreal engine man its impossible. Its breaking my spirit day by day if only it was as easy as playing call of duty.
C++ is most reliable language. It has very minimal job opportunities, yet C++ is the BEST.
Video starts and finishes at 2:22
HERO
Cheers matey.
thank you.
Please, type the text what he did said at this moment. I'm little sick right now and can't hear :(
"C++ is still viable... I think most blah blah blah." So the answer to the question in the title is "yes, if you need to do c-plus-plusy stuff i.e. performance".
I decided to learn C++ 4 or 5 years ago, but unfortunately I didn't start yet, I need to reorganize my time
LOL! Eventually you will get it done!
I don't know why but that comment made me actually lol.
The struggles with finding the time to learn such a wide ranged language are real.
It is a better language now, then it was 5 years ago.
If you are experienced in programming, use this book for learning about c++:www.amazon.com/Tour-C-Depth/dp/0321958314.
It's short and effective.
dont waste your time, learn C# mate
Saving your time, C and C++ are both very valid languages to write in, and something everyone should learn. It shows you a deeper level of what is going on with memory management. It’s similar to learning how to draw a fully realistic human being before learning how to draw simpler or more stylistic artistic pieces. It’s important to learn and know how to use. After learning C++ I learned how to program in Java in less than a week. It was so easy by comparison. Just my opinion, but please do learn c++ and see what it will show you, and how much control it gives you.
I must be getting old. When I was starting out, C was the main language for most development, along with Pascal. C++ was the new hotness. Java didn't exist yet. So when I encounter people talking about learning C or C++ my first thought is "How come you don't know these already?" Of course these are people who get taught Java in school instead.
But as Stefan says, the languages you should master depend on what kind of development you want to do. System level stuff requires C for example. Web development doesn't benefit from C since no one is using CGI anymore. Of course the conceptual overlap across most languages is pretty high. A loop is a loop is a loop. Anyone who truly masters one language will go into the study of any other language knowing 80% of what they need to know already.
Lee Renolds Like you I was a c programmer when c++ first came out. Now, there is a tendency to bundle the two languages; c is advertised as c++ or c/c++ .
You don't need to know c or c++ to learn other languages. There are modern languages like rust that are getting pretty close to c++ performance. Also there quite a few scripting languages that get the job done without knowing c or c++. Just because it was the hotness in the 70s doesn't mean still is.
Stefan, I haven't watched your videos in years, and just got this recommended to me, and it hit me in the feels a little bit. I remember watching your HTML and CSS videos like 7/8 years ago when i was 14ish, teaching myself how to make basic websites, and now i'm in my third year of uni studying computer science. I may not be doing much web development anymore, but you helped push me in this direction, so I just wanted to thank you.
Appreciate the message Danny. This is the most rewarding part of my work. And btw, keep up the good work!!
This made me smile
Cool bro......am great at web dev and app dev amma start uni soon 2018 but i had to find myself first and coding help me alot....i expressed alot through codes even if i just imagine it.
literally in the exact same position as you now but im in second year of computer science, i did never finish your guides but i sure enjoyed learning to build websties with html
@DannyHodge95 Are you still writing code?
I'm a hard-core C++ dev, and let me say that the thing I liked most in your video is the statement, said raughly "everything is good at something". Tons of beginners come to me and ask me the naive question "what's the best programming language", and I tell them "what do you want to do with it?" and they're surprised that I don't have a single universal answer. No, C++ is not the best for everything. You definitely can do everything with it, but only if you have an infinite amount of money.
I'm Batman.
Sam The Quantum Atheist been there too lol
What is the best for developing most form of games? I started learning c++ but I'm wondering if I should have learnt js instead. I am already really familiar with python but that is no good for games
Yeah but if you're a complete newb you probably don't know what you want to do yet.
Money? Do you mean time? Or is that the joke
#include
int main(void){
std::cout
@@quirix6980 yeah sure , high performance and priority.
pfft I program using binary in Chinese
LOL!
Binary Chinese?
Sounds like a language I should study.
It's like a quantum computer's machine code, except instead of having 1, 0, and 1 and 0, you have over 9000 characters.
Dang! C++ is nothing compared to that!
lol wtf
pfff, i program using wooden sticks, smashed stones and leaf.
I agree with a lot of what you're saying, and my two cents is this; Two points that are important... 1) If you know C++, then you'll often have gained the prerequisite knowledge to tackle other languages, which is something that doesn't always go the other way... 2) Portability. Write something in C++ and you can compile it on Windows, iOS, Android, etc.
yup
but there's always lisp, too ;]
I never really thought calling the _language_ itself portable made much sense. Really, any language could be used on any machine with the same expressive power, it's more about the libraries. The libraries of existing code is where the incompatibilities arise.
frtard not really, systems languages like C/C++ are portable because you can target machine code of most systems. you can't do this with, eg, a language like python
C is portable. C++ isn't. Writing a non-optimizing C compiler from scratch is relatively easy. Writing a standards-compliant C++ compiler for a new architecture requires hundreds of thousands of man-hours, because C++ has a ridiculously long and difficult standard to implement. Making a new backend for an existing compiler like GCC or LLVM is only viable for architectures that fit well with the compiler's backend IR, and if you can do an LLVM backend, you can run almost any other language on there as well since LLVM is not C++ specific.
ignoring that writing a C++ compiler is actually quite trivial and that writing a "standards compliant" C99 compiler is not, C++ is absolutely portable. portability has nothing to do with (perceived) complexity.
C++ gives you low level and high level. Basically it combines benefits of C and assembly with benefits of supposedly higher level languages like C# and Java. With C++ you can program in the same manner as in those languages, but not to a virtual machine, to an actual machine.
thought2007 well said. I see it like that too
I agree completely.
.. and i am sick of hearing that '...C++ is for low level programming ...' because - as a multi paradigm language - it support's A LOT of different approaches.
Not to forget: It serves as a pioneer for a lot of features for other languages. Esp. Java benefits in many ways from developments in C++. Take the 'lambda functions' or 'templates' or .... - decade old features of C++ that are adopted by Java later.
What i miss in this discussions about programming languages: The Runtime Environment! In many cases THAT's the key feature for a decision what language to use. Java (as a language) isn't superior to C++ - but a lot of Environments (J2EE, JavaScript, ....) come with direct integration of Java-Code - and THAT's making the Java the perfect match for applications targeted by that environments.
Java would have been dead on arrival without the wide support of the JVM (written in C/C++ ;-) ).
NO: C++ is not ' the perfect language' or 'the one fits all'-tool. But it is worth learning to widen ones horizont.
lambdas were introduced in C++ 11, it's not a decade old feature. and java's lambdas are probably inspired by C# 3.0 (2007). just saying. i program C++ commercially, i find the out-of-the-box experience lackluster when it comes to high level stuff. it really needs a bunch of 3rd party libraries to do something useful.
C++ lambdas are both really recent, and less useful than they would be in a language with garbage collection, since lacking GC limits your ability to make lexical closures. It's way too easy to accidentally make a lambda with a dangling reference in it.
C++ is DEFINITELY NOT a pioneer language, it has always been ridiculously conservative. It never pioneered a single important feature. It has however stayed extremely verbose for decades because it wouldn't adopt core useful features, but did adopt tons of features that solved problems that were only problems to C++ developers.
@decades: I used a hyperbole. But what about templates -> generics? RAII -> try-with-resources? implicit conversion/autoboxing? ...
A lot of those features were long and well established in C++ before half-heartedly adpoted in Java.
@3rd-party: Try programming pure core Java without any additions and you are similarly 'lacklustered' - despite oracle trying to 'borg' everything in their sight (leading an abundance of duplicities like StringBuilder/StringBuffer).
@"ridiculously conservative": C++: (89, 98, 05(TR1), 11) Java: (98, 00, 02, 06, 11, 14) - aside from the 'fast-fixing early years' of Java (98-02) not so different. And it's not that Java8 created a whole new programming world over Java7....
Also I don't see any mistake in concentrating on fewer bigger releases rather than flushing out a new version every month ;-)
Nice talk about why it's important to learn different concepts:
ruclips.net/video/oB8jN68KGcU/видео.html
Both languages still suck major balls regarding time/date ... ;-)
BTW. I also programm C++ commercially (and Java too - both on varying platforms) for 20 years now.....
I think C++ is good to learn because it teaches you more about how the computer works. You work more closely to the hardware and understand better what is going on. I also think it is worthwhile to learn Assembly because you are working *directly* with the CPU and memory. Most college curriculums will have at least one course in each.
However, I don't think you have to be an expert at all in them unless your job demands it. But it wouldn't hurt to be somewhat familiar with them and get a glimpse on whats happening under the hood.
tear728 I kinda think that nobody should program that doesn't understand how it works . You don't need c++ to get that. Maybe a+ training .
and again its going to require more "uber nerdy maths" like stefan said which is not for everyone
A good IT'ler should now how a computer works down to the electronic band structure of the semiconductors. At least he should have heared about it. But from CPU architecture on everything is necessary. Knowing about caching technology is so important today for highspeed programming.
Your comment reminds me what my assembly class professor stated on his first day: I'm teaching you this to get you to know about computers and how they work, but if you ever get a job that requires you to program this daily.... just quit as soon as possible.... C++ is more bearable...
Thomas Victorian If your a complete beginner at code, don't start with assembly. Even starting with c++ can be very difficult for people. Id say for complete beginners start with python or JavaScript.
Nicolas Cage?
Shh ....
Nicolas Cage++
Not even close.
His secret brother maybe.
Picolas Cage
i clicked on your video because you look like my uncle
nice reason, bro !
😂
Legend
lmao
best reason ever!
Q: Should you Learn C++ in 2018?
A: No, you shouldn't learn Ruby in 2018
Yasser Linux Joke???
He was joking cause the video started to tangent and that was the only definitive statement compared to the title.
Pretty sure Go or Node will eliminate Ruby in Web and hope that Scala will compete with Python in field like Machine Learning
That's irrelevant
You should learn HTML and Batch so you can be the top pro leet haxor coder
C++ is the Rocket Scientist of programming languages
Java is the IKEA of programming languages
Python is the Amazon of programming languages: Just order the library and it works out of the box.
:D
That is unless you want to run a program that was written with an old version of Python and hasn't been updated, then you have to downgrade all of your packages to older versions just to make it work.
cryora that’s true but pretty rare in my experience. Plus Python 2.7 will be phased out very soon so it would be a less occurring problem
Python is good for teaching programmers some very bad programming habits.
@@mortenrobinson Like what?
@@mortenrobinson Er? Not sure what that means.
I’ve been learning c++ like for the past two days And let me tell you my brain and the computer are one.
So where did your c++ journey take you, IF you want to share it with the community?
EZCode lol. I jumped the gun by saying that. No, not far. I don’t utilize that tool. although, it’s very interesting. For me coding is our projections and calculations to produce an outcome. Which is odd, as the outcomes can be many. Knowing which ones and how to execute it; Isn’t coding per say but an emotional one.
Circuit Carbon why? Are you struggling
@@jaulloa21 Nice pic thou,Conor throwing the Dolly
Silver XSai aww thanks brother. you like dolly’s?
You should know C++ because of its knowledge gain. You will be an Expert programmer if you know C++ and a C++ programmer is ready to migrate into many language.
std::cout
@JourneyWithJaron #include*
I've to say almost everything Stefan says is correct and most of it spot on. Many technically correct comments are not talking about the purpose of this video: "should you learn", "2018", ... it's about getting a job guys, it's not about pissing contests...
After diving in the current state of C++ for quite a while, CppCon, tendencies, idioms, compiler support,... it's all very, very convoluted. The famous Stroustrup "Remember the Vasa" open letter was in its origins a direct and hard critic about some things clearly stated in the video.
Here for "is it worth learning C++ in 2020" video
i hear from someone that in AI python is use to make the prototype and c++ is use to execute it because of it speed.
They work hand-in-hand.
I'm learning c++ now and i interested with AI.
Can you explain the career of c++ developer? Actually, i started learn c++ because of it speed and it famous in competitive programming, i don't know about c++ developer career path.
Thank you.
Actually this is true generally for everything in Python. Python libraries depend heavily on something called "ctypes", which is basically a gate to low-level shared libraries. The philosophy of making Python very fast simply uses operations coded with C++ (or C), interfaced with C to Python using ctypes. A very good example of this paradigm is nothing but the very famous numpy! Basically all the matrix operations in numpy are made C (probably C++, too), and are facilitated through Intel MKL (math kernel library). It would be utterly stupid to do matrix multiplication, for example, in Python. It'll be super slow. So basically what numpy does is take the data from python, send it to C, which uses MKL to do the math, and retrieves the result for you. Of course, granularity matters here. Doing this for 2x2 matrices is not efficient. But doing this for 20x20 matrices makes a big gain.
+ Keep moving forward
> Can you explain the career of c++ developer? Actually, i started learn c++ because of it speed and it famous in competitive programming, i don't know about c++ developer career path. Thank you.
Learn the basics (this is list is applicable for most programming languages): output/print, variables (int, double, string), basic math (2+2, sqrt, ...), input, if statements, loops, functions, references (and reference collapsing rules), global variables (and why they're bad), classes.
After that basic theory:
- abstraction. The more you understand abstraction the better you will understand functions, math, calc, logic and proofs, programming, of course C++. Abstraction is the the butterfly effect towards learning OOP
- divide and conquer. Without this it is difficult to solve most programming problems. It is how to take a difficult or large problem and breaking it into a ton of tiny pieces. Each piece is easy to solve on its own.
That is the 101 of C++. Once you know it, you can write just about anything. It will not necessarily be good, or easy, but it will be possible.
The 102 begins computer science, specifically data structures: arrays, string internals, linked lists, trees, maps, hash tables. With that the bigO notation of these structures, so you know which is fastest where. Once you get experienced enough with the hardware (It comes with experience and studying x86_64 assembly.) you'll be able to invent your own new data structures. Creating your own data types, for all intents and purposes, is the heart of C++.
For 103 learning templates, more stl data types like tuple, optional, and so on. Then constructors (copy constructor, assignment constructor, destructor, ... idioms like the rule of 1,3,5), then shared_ptr, and possibly pointers themselves, then ownership semantics with move symantics, then unique_ptr. Then after that stl algorithms.
I'm probably forgetting something.. but that's basically it. Oh and RAII, and operator overloading.
After that, C++ idioms, then C++ edge cases, then programming patterns.
Or use Julia to do both at once :)
i really enjoy c++, its the first language i learnt when i was 16. It to this day (i'm 19 now) helps me in learning everything, basically i can learn any new language i want now because c++ taught me all the concepts. All i had to do to learn javascript was learn the syntax (which isn't as different as i thought it would be from c++) and some other things that javascript offers, same with any other language i learnt. I definitely recommend c++ in 2019
Beautiful analogy with the sprinter (Python) vs. long-distance runner (C++)
Thanks!
more like skriptkiddie (pyphhhon) vs professional (c++)
Edward more like you sound like an immature kid trying out his grandpa's favourite insults when you generalize about interpreted languages & sorry, but that asinine spelling trying to be clever & convince php & python is just horrendous. you could've at least gone with 🐍PythonBee🐝💎 if you had to try & make that joke, imho...
Well, actually you will never get pro if you are unable to deal with C++.
Make your own CPU software rasterizer for your own OS and 3D engine? You're a beginner, man. A beginner. I have students of 12 years old who don't mind to learn C++.
Thanks for a very simple and unbiased review on "Should you learn C++ in 2018" in 7 mins. Landed up accidentally and now will follow subscribe like your channel and share it with my friends
Thanks.
I like cpp because of how much access it gives me in windows, with the header, i can read write and edit memory, while taking snapshots of all modules in a program get the process id and all that fun stuff. cpp is great because you can do so much with it.
1:44 A wild coffee cup appears.
Subliminar Java code detected.
prezadent1 It uses decoffein! Its super effective!
ahahaha this got me laughing for some reason
hahahahha
YES, I save you 7 minutes of your time, go learn something about pointers better
Сергей Петров ckntmmenene
Q Beene was sneaky a
Smart Pointers...
They are just a variable that store the memory address of another variable.
@@vectork3 Really dude? that's all?
@@vybhavchaturvedi399 In VERY basic term, yes
I'm learning C++ now and taking an ML class. It is so much math. I like UI too so I may go the Qt, OpenGL route. I saw a cool job working for Boston Dynamics doing UI. That would be my dream job. Maybe in 3 years or so.
do you live in boston?
I go there a couple times a year but don't live there
Do you really think that position (or one like it) would be open for 3+ years until you feel ready?
math? math where?
Dude, you are keeping me working at learning to code; SERIOUSLY
Thanks!
Welcome.
In response to the basic question of whether or not to learn C++ - I *have* programmed in C++ professionally and have been with the language for over 20 years and my response is a resounding "Hells yea, bitches!" Is it messy and cluttered from the recent standardizations in 2011, 2014 and recently 2017? No, not at all. We've seen some really awesome features come in: native threading, native filesystem support, a new networking library is on the way, new traits, container improvements, parallel algorithms with the addition of an extra argument (std::execution::seq or std::execution::par), lambdas, the new auto keyword (carpal tunnel is a thing of the past in our new language), compile-time constant expressions - I could go on all day. This is amazing stuff. I can't understand how any of this clutters or messes up the language. It's language evolution like every language worth its salt does or should be doing.
There are some really cool things in C++ that make coding in it fresh, easy, and easily accessible to those new to the language. For those curious about the language, you really owe it to yourself to spend a weekend playing with a few things. Write a couple of small programs. Use the standard library functions to see how easy it is to do something non-trivial with your data. Clang and GCC are both straightforward to work with and there are free IDE's that make a weekends worth of experimentation much easier. Just don't overcomplicate things by setting out to write a new complex set of stock analytics in an afternoon - that's fricken hard to impossible in any language.
The actual question is whether one should learn programming or just a programming language, not "should you learn X programming language" though.
It's good to be able to work with any language thrown at you, that is, be able to adapt when needed, most differences between languages are just semantics anyway.
"... most differences between languages are just semantics anyway" Exactly!
This is why I don't really like the currently popular terms "coding" and "coder." When here someone talking "learning to code" it seems like a lowered bar, it sounds like learning to write technically correct code in some language -- and I can't help thinking, "Great, you can code, but do you really know how to program, to actually solve problems with code?" I know its just a semantic fad, and people are necessarily meaning it that way, but its why I prefer terms like "programmer" or "developer."
I laugh at everyone who says that they are a "coder", because programming is coding + actually thinking about it beforehand, which in general is problem solving. And I just don't like that word in general, that's all, I don't know why it even exists.
Well, grasping the capabilities and quirks of a language takes its time, so I'd say 'should I learn X' is a fair question. It's true that if you've been coding for a while you can probably handle writing stuff in foreign languages if you're familiar with the paradigm. However, you'll probably be googling, reading SO, docs and stealing code, like, every two seconds. Actually learning and being comfortable what you're working with takes a little more than that.
Started learning Lua because I can, writing my own code, syntax is easy to understand and I can already write almost anything using OOP approach (just mentioning it here because it's not as obvious as typical procedural programming is as Lua doesn't really have such thing as objects) in it since day on.
Yes I am googling, and I'm not that comfortable yet, can't write it blindfolded, but I'm not sure why you have to put "stealing code, like, every two seconds", programming is problem solving, not code writing, which language you write your logic in doesn't fucking matter, what matters is which language is best suited for solving your problem. If you can't do that then you aren't a programmer but a skid, because that's who "steals code, like, every two seconds", nobody ever does that but skids. The only way I "copy" code in any way is by using 3rd party libraries.
As for quirks of language, you don't need to know all of them to write something in X language, also you'll figure them out naturally as you use it, so that's not a problem.
math is important for game development folks
maths is important for programming in general. Even simple Fizz Buzz applications.
Maths is important for life
each maths lesson kills a normie
Physics are important for games
not extremely important, unless you are building an engine. Everyday game dev, is not super necessary.
I once had a nightmare where I found out I would need to use C for the rest of my life because C++ no longer existed.
In addition to the technical information you delivered in all your videos, which are very good for me as developer by the way. Your videos are weirdly soothing and satisfying to watch after a long day of work. It's like listening to veterans telling stories about what happened on the battlefield.
Wonderful description! Each language has its pros and cons. The goal of programming is to solve a problem, and no language is good at solving every problem. When deciding which language to learn, pick the language that is best suited for a problem that you are passionate about.
Interesting thought, indeed! I completely agree with you on the choice of language. Always, use the language which suits your needs! :)
Being a hobbyist game developer and graphics programmer C++ is the way to go because I have all most total control of how memory is used (both sys and with the introduction of Vulkan, Metal, and D3D12 vram). If your writing a business app use something like Python, Java, Ruby, C#, etc. If you want to create a high speed real time simulation that requires a ton of optimizations to pretty much any aspect of the project, c++ is the winner. I could use Rust or good old C for this but. C++ has so many libraries for this purpose plus has several ways to code up a solution (procedural, Object Orient, Generic). My issue is C is simple, I can do C programming in C++. As for Rust, its to new and doesn't have a big ecosystem just yet.
Why write games in C++ today ???? Most of people just use ENGINES.
@@IExSet yea unity and C# is perfect in my opinion
It depends on game. AAA games might not be that suitable to make in Unity. @@clank2269
I'm a 3rd year computer engineering student dealing with threading in C++. It's about as fun as eating glass.
If you dont enjoy that, perhaps you should consider a career change. Not because you dont enjoy it, but because you dont seem to be good at what you do.
The analogy about sprinting and long distance is so apt. Over the past 2 years I've had to learn Java so I could develop Android apps, and the biggest change was getting used to the dev environment. I have to mentally leave Python mode and switch to Java mode. Now I've recently been doing it all over again for C so I can take advantage of the JNI. If I can be fluent in 2 languages and proficient in one, I'll be happy.
C++ was the first language I learned, and it was way more difficult than if I had learned python. I’m very grateful I learned C++ because I learned so much about proper syntax/coding and the most important thing I learned was THE LOGIC OF CODING. That was the biggest take away for me, even if it was so much harder than learning python first....I agree with this video!
I started to learn programming through C-Sharp (C#) on Unity (Game engine) a couple of years back. My curiosity in game engine pushed my brain to learn more about. (I tried reading lot of books and nothing was really working from that side). Unity's C# isn't like the usual C# stuff as there are special library that only works in Unity (unless you build them back outside of it). Still, it was a good entry-level experience. Then I started to get curious about Javascript can be used and, in Unity, I learned to translate C# into Javascript from the game engine point of view. Then, as I was, back then, a graphic designer for like 6-years and worked on web design (visual side of it) with web programmers, I did have a few idea of the web's structure when it comes to the basics (HTML & CSS) and I trans-positioned my knowledge from Unity's Javascripts to the Web's Javascript. Different things sure, but the structure remains constant. Recently, I started to learn a variant of the HLSL language (shader language) and started to make my own 3D and 2D shaders.
In the end, as it's so well explained in this video, the language you should learn is the language that's actually used in what you want to work with. I'm more of a Math-type of guy with a clean structure. Always have been. This is why I prefer C# and C++ to Java and Javascript. While they requires a bit more works and controls, their sets of rules are clearer and easier to follow (for me). It's all about their programmatic logic.
Interesting! I've been working with C# in Unity for about 1.5 years and now and feel like I want to move on to C++ and Python, to create applications outside of unity. How did you go from Unity C# to C++ coding? Any books, online resources, general advice?
I went to the local library and took a look at most of the books that had anything to do with C++. Once you're able to use C# such as what's in Unity, you should already be able to understand about 70% of what's explained in C++ for beginners and about 30% of what's in the intermediary level books. The remaining 30% & 70% are mostly things that are more oriented to standalone sides that comes with the C++. C-Sharp such as in Unity is heavily dependents toward the engine's core and how the engine is made to process things while C++ requires a bit more though about primary processes.
One thing I have learned about C++ is that even old books that explains things like how they were back in Windows 98 or even 95 are still valid today when it comes to starting to learn C++. While some information are archaic, you only got to "store" in your brain the information that means something to you.
For the newer books, they are mostly useful when it comes to optimization and memory management... because we all have experienced that there's quite a difference between building a game software for Windows 95 or 98 and building a game on Windows 8 or 10 one way or the other.
For example, older C++ book will consider minifloat as 8bits float values while some newer book will also consider 16bits floats as minifloats (which has been standardized in 2008). I do suggest to avoid chapters in books that make uses of... floppy disk and diskettes. Not that they aren't fun to read... it's just that it doesn't work the exact same way with USB drives and hard-drives. Hahaha. I learned that the hard way.
Thank you very very much! :)
it not going to be 100% correct but i can say c# = c + .net library. i was able to write c# code on unity when i only know c XD
I made 3D game in Unity. Now I am switching to Unreal Engine 4 which uses C++. It runs faster. Has better graphics. Have tons of console commands while debugging. You can see FPS and drawcall in realtime. And then there are blueprints which works like Unity playmaker but they are build in engine itself so they are more powerful and can call your C++ classes. In fact you dont even have to write a single line in C++ and make game like GTA. If I ever use Unity again it will be only for android games.
I'm an embedded systems student so I'm going even more ancient.. ANSI C :)
LOL. Going to nerd to grow a white beard.
ANSI C is too high level. I prefer assembler.
Heard Gandalf loves his magic pointers :)
ANSI C is still not low enough. If you really want to get into the bone-marrow of the hardware... the true soul of the CPU, then you have to program in raw Chinese.
It's highly doubtful that you write enough Assembly code to get better at it than the C compiler will generate. And Assembly is *certainly* not as readable a C code is, so you're apt to make far more mistakes than if you were a competent C developer.
For the embedded community C++ is the advanced langage! we are only used to C and assembler :)
Go for Rust :)
I really really thought that you were one of those clickbaity youtubers and always avoided to watch your videos, but you have actually gave a very good and objective advice here! (This is the first time i watch a video of yours by the way).
I work in semiconductor industry, we always use cpp for writing verification test bench.
It will continue because all the Intel and AMD processors provide only that linker to convert cpp to ALP that is required for verification of these processor.
This video clearly explains the concept that the developer needs to choose their own path. It was my experience while learning in college that struggling with C++ made learning most other programming languages a breeze.
If I had to give someone a cookie cutter answer, it would be that you should have a high, medium and low level language under your belt. As of the time of writing I would say that Python, Java and C++ are the most worthwhile of those categories.
Python will increase your speed to write code dramatically. You will be able to solve algorithmic challenges and attack a problem with sooner success.
C++ will give you the ultimate power to write very efficient and powerful code, but can be much more time consuming and frustrating.
Java falls somewhere between the two as a high level language with many characteristics of a low level architecture. Java is fantastic for building GUI applications and doing network programming.
If you want to write a small program that has a limited lifespan that only solves a task today.. Write it in Python. If you want to write code that will be used for years later, do it in C++.
Good luck.
languages are not like dating, there are real differences that matter. people just get political about it then everyone acts like it's a wash to stop arguing.
Well I'm a c++ programmer and my take on it is - "I didn't back up then, I can't back up now"
I have a problem with people calling C++ a low-level language. You can call Assembly or C low-level, but C++ is not C and it is not low-level. The C++ standard contains many high-level abstractions of things ranging from data structures to atomic variables to threads and asynchrony. You're given much more control in C++ than in other languages (especially with later standards like C++14 and 17) so you can maximize speed and efficiency. What sets C++ apart from high-level interpreted languages is its ability to stay fast, and what sets it apart from other high-level compiled languages is the fact that its abstractions can be efficiently deconstructed by compiler writers such that compilers can produce fast machine code. This is why nearly all performant code is written in C++ (disregarding embedded systems); this is why companies like Google and Facebook use C++ every day; this is why machine learning libraries that Python bindings are developed for are written in C++.
C++ is fucking everywhere because it is a high-level language that, with practice, can be used to produce code that runs with unparalleled efficiency.
No, like u already said: C is lowlevel: BUT: C++ is C and C is not C++! ~> C++ is lowlevel too!
C and C++ are not similar languages at all, and if you think that they are then you do not have enough experience with either language. C++ being a superset of C is technically /almost/ true, but pragmatically it is not true at all. C++ among those who actually write it is NOT an extension of C; it is its own language, completely divorced from C.
+James Houghton no! everything you can do in C, is possible in C++. There are no issues at all. What would be the Sense to call it c++ if this wouldnt be the point
That is false. I have run into problems where something works with a C compiler but does not with a C++ compiler (using void* casting; C++ has stricter type checking). Read up before you comment PLEASE: en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
This isn't even the point, though. If you think C++ should be thought of as a superset of C, disregarding all the high-level abstractions that are used in GOOD C++ code, then you don't know how to write good C++ code. Saying that C and C++ must be similar because they happened to be very similar in the 1980s when C++ was just C with classes is a profoundly misguided statement. C++ has come a long way since then and continues to evolve very quickly.
honestly i prefer unity engine tbh xddddddddddddd
Thanks for taking the time to share your experience with the different programming languages, very helpful for guys like me walking the first steps in programming. Greetings from Costa Rica.
Been working mostly with C#.NET the last few years, still yet to write anything commercial myself, mostly do some in house stuff at my current job...but i really wanna branch out someone.
Not sure why i just typed 'c++' into YT just now, but I did, saw this vid, and it was quite helpful as general advice. Thanks for this, great vid :D.
With c++ u can do everything!!
Blender, really popular games, whole programming languages were written with c++/c/c# !!
True
Blender is written in Python.
You put in the same category C# with C and C++. You understood nothing.
m marcus
Lol with C#/C/C++ I meant that you can do anything with the C languages, not just with C++. And there are games that are programmed with both (C++/C#)
I think u understood nothing :)
Did you ever code, beyond hello world?
C and C++ are system language that give you control over memory layout and small details that other languages don't. C# is like Java, you only use the heap and rely on the garbage collector to manage the memory. They are NOT interchangeable, they are different in what they do and how they feel/make you reason about problems.
Though in some games C# is used, it will never be used in critical parts (like graphic/physics engine), maybe for scripting purposes.
I wish I had someone like this guy teaching me in my early college years ...I probably would've stuck with computer science.
If your interest in a subject could be lost due to a bad teacher, the subject probably wasnt your bag anyway tbh. You'd have done it outside of college if it was, found the fun in it, continued at it
After he said Maserati...
At 0:55 his voice sounded like an Exhaust of a sports car..🤣
I believe your opinion is right on point. Even Stroupstrup says it so in his book. C++ is not the tool that solves every problem, it's a tool to solve specific problem.
Thank you for putting my worries to rest, I am thrilled to get my fingers wet with programming, been doing it for about 10 years now, no commercial/production code for me, yet.
You are missing a huge chunk of knowledge as a programmer if you have not fully immersed yourself into a programming paradigm that is close to the hardware and one that is close to the OS. You can probably earn money all your life by only staying on levels of abstraction above that, but I would feel like I am seriously lacking an area of insight that is essential to programming computers. I am not sure if it has to be C++ in order to sharpen those skills, but it is simply such an established and complex language that I would definitely recommend people learn it. It's not just about whether you need it, but also if it benefits your skill set. If you really had nothing much to learn from C++, you probably won't be spending much time on learning it. And if it provides more of an obstacle than you had assumed, maybe that is a valid indication of what it is teaching you. There are certainly things that are complex just for complexity's sake, and many more recent programming languages have done away with complexities such as multiple inheritance, but I just cannot imagine my development as a software engineer without having had C++ on my road map. If I imagined my view on the programming world without it, it would feel as if it would leave a huge hole in my understanding of compilers, programming, and computers.
To build on your analogy with race cars, sure you don't need to test the 10th race car if you have driven 9 others. But C++ is such a genre defining language, it would be more akin to being a gamer into FPS and never having played such genre defining games like Doom - even if you have played countless other FPS games.
C++ seems like such an important language to me, it would leave a huge gap in my knowledge. There are so many old source code bases that I have learned a tremendous amount from that I would not have been able to comprehend without my C++ experience. Do you absolutely need in 2018? No ... but there are a lot of things that you can do without in life that are hugely beneficial.
I don't know your particular situation, I trust that you are not just talking out of your rear, but anyone reading this, if you learn C++ well, I can promise you that you won't regret it. If you do, feel free to shame me in the comment section, but I would find that hard to believe.
What did strike a nerve, though, is C++ struggling to keep up with some more recent programming paradigms that seem a rather awkward fit in an already very complex language. C++ might be the most complex language to parse, compile, and to implement I believe, but I would have to get back to you on specific metrics for that claim. If you are writing software that is on a level of abstraction above that of the OS or hardware, do take the video author's advice and stick with something more high level. And there are languages that stay reasonably high level that let you break through to lower levels of abstraction where needed, such as C# with its P/Invoke, so there isn't really anything that you could do native that you can't do with C# on Windows at least. I am not sure off the top of my head how P/Invoke works on Linux, if at all.
If you want to do the plumbing of a UI, for example, quickly, without wasting your or your company's time, do not be ashamed to use as many GUI tools as you can get your hands on. There are people who think it is a display of some kind of elitism to live a life as Spartan as imaginable, because they think it's somehow evidence of their programming prowess, such as the smug look some people get on their face for mentioning at every opportunity that VIM is their favorite editor. Absolutely use the tools that get the job done quickest, easiest, and cleanly, both now and in the future, in terms of maintainability. Languages such as Python are great for that, and ecosystems such as node.js/NPM have gained amazing popularity. It's really exciting to see how much is out there, how quickly you can put modules together and so forth. Whereas we might have had a software crisis in earlier days, we might now have a software explosion. I am very, very happy about that and I am glad to see how many young people nowadays know how to program. I am absolutely unafraid of competition and I welcome any changes that make software better, as well as easier and faster to write. The future is bright for software development - if you know C++ or not.
oss!
You seem to like writing essays don't you?
I really like your thoughts about C++ and programming at all. It's more consistent with my understanding of writings code. Really enjoyed to read that.
people wanting to start coding c++ are procrastinating by watching this video.
Is it just me or does this guy sound like Godfather if you're reading this dude your voice 10/10 👌👌👌
Remember leaning RISC assembly programming, to point I could create dynamic data sets, and recursive functions. Later I wrote a very basic C based compiler. That is so useful when trying to speed up any code I write regardless of language because I remember what the higher level language to the hardware is doing. This was very useful when I was working on real-time software. If you know structure and perfecting algorithms, you can write in any language, because the former never really changes. Sure there is difference in objective vs procedural programming , but if you learned structures from procedural programming, you will understand why objective programming was created. The problem it was trying to fix, and write accordingly. If give anything a programmer, should learn, and learn well is discrete mathematics.
Good post. I always thought c++ is painful for doing tools, but very good for fast or complex operations. I would like to point out that one can also have a successful career in learing specific languages for different applications. For example mel (and python) for Maya for doing 3d tools, but also other scripting for Adobe applications etc. So by specializing in programming for these applications you will spend more of your time learning how to program the tool than what you will with the specific language and this knowledge is quite thought after.
Gotta think high demand low supply. What's a language, maybe Ruby or something, that less people know and more companies need I guess.
Euhm this is wrong. C++ is not low-level at all. C++ is a language to add many high level concepts to C. You can be far more succinct in C++ than you can be in your other examples, like PHP or Java. And the BIG C++ philosophy is "high level, without the cost" (cost at runtime), and that is the great strength, and the great weakness.
C++ lets you be high level, at (as close as possible to) zero cost. The reason for the pitfalls is that very behavior. Because of having zero cost abstractions C++ does not stop you from doing dangerous things. There's no bounds checking, it will just crash or use uninitialized memory (because if it works correctly it's way more efficient, and presumably you know what you're doing). There's no one protecting you from using objects you've freed (because if you do it correctly, not checking is way faster). There's no one protecting you from overflowing your ints (they'll just increase and suddenly be negative), there's no one protecting you from using too small float values (meaning a loop that doesn't look all that infinite can suddenly be infinite).
When you ask C++ to allocate 10 bytes of memory, it allocates 18 bytes (usually). (it prepends the actual allocation with the size of the allocation, which on 64 bit computers, is 8 bytes). To be fair, for class instances there'll be another 8 bytes pointer to virtual method table. Now that sounds like a lot, but Python ? 47, and then add the 8 that have the same meaning as in C++. I don't know about PHP, but it'll be similar. Java ? 26 bytes. That's because Java needs all sorts of information to do those safety checks, and Python needs even more.
Java gets killed on memory performance because all sub-data are pointers to external classes. So "class Vector { Point base; Point dir; }; class Point { int x, int y }", in Java takes up 16 + 16 + 16 + 8 + 8 + 16 + 8 + 8 or 96 bytes. In C++ the same data takes up 24 bytes. I'm not sure about Python, but it's going to be over 100. This also kills cache performance, which matters even more than the raw difference in speed between languages (using memory is ~100 times slower than using cache. So because a C++ program can store close to 3 times more data in the cache compared to a Java program, and something like 10 times more than a Python program. This means a C++ can chug through close to 3x more data than a Java program in the same amount of time). (and yes, you can create totally unrealistic java using absurdly large amounts of variables that doesn't have the slowdown. In any realistic program you will see this slowdown)
But if you very quickly want to write a very fast webserver, that is certainly possible in C++. And the thing is, where your python server handles 100 users, php will for the same code allow 1000 users per server. Java, for the same code ? 50000. And C++ ? 1000000 users. No problem.
This is why eventually all successfull software gets rewritten in C++. Because in the long term runtime costs exceed all other costs.
If u want really fast webserver (web service), better take Erlang, because C++ will not work for 1000000 users LOL!!!
Ben D
1 second ago
C++ original name is "C with classes". That's what make C++ a low-level language as well. You can do with C++ anything you can do with C! :-)
TLDR lmaooooo
But the language still has those low level features and can make use of them if it needs to. The fact that the possibility is there and that to really learning the language, you will have to understand them, makes it low level.
Now, whether or not these things are commonly used is a different issue, but it has no bearing on what the language (dis)allows you to do.
Php only used for web development
Php i know that is used for online intergration and some changes to the web. I know that you create a game in js(javascript) and of you want to make it online you are compiling him with php where the php make s the database
Donald Abbott awesome. I do you have some sample code? What was the security model for the application? Just trying to learn how these apps are coded.
I hear what you are saying - I also spent 20 years in software development and once you have worked in more than few languages you can use any language. After a switch in language it always takes a few hours to get adjusted to the syntax and peculiarities of the development environment. It's called transferable skills.
i really love the way c++ changes since c++11. shared pointer, unique pointer, the keyword auto, a lot of nice tools for a high performance language :-)
Bringing Maserati as a first example of a race (sic) car and then following that analogy, perfectly predicted the outcome of your attempt to judge about C++.
Been writing software for over 25 years, most of that time using C++. I've also produced commercial software in various other languages too. You are spot on. I stopped using C++ 2 years ago. I hope to never touch C++ again. Dealing with lib and header file management. There are much more productive languages out there today for various different tasks. A lot of new productive languages such as Golang allows you to focus on the design and architecture instead of code janitoring. I love C++ but these new languages are so much more productive. I will never go back.
I remember first working on C++ back in 1990 after using Borland's Object-Pascal the year before and thinking "Welcome to Hell" (let's start with demo programs that took 60 times longer to compile, then move into operator overloading and all the unchecked pointer insanity). I don't know any 21st century C++, I stopped following it after reading Scott Meyers' "Effective C++" book in the mid-to-late 90s and realizing it was mostly of the form "Don't let C++ screw you *this* way, or *that* way, or ..."
Either 21st century C++ still has all the same old crap (and so much more!), or, it's not backwards compatible, and should be called something else.
@kurt its just a personal preference. Yeah sure, header file management is not a big deal. But it just feels unnecessary work for someone that is used to a more higer level language. Garbage collection too. It just feels like you spend alot of time in c++ doing stuff that other languages do for you. I like to prototype my games really fast and work my way from there. If i make games in c++ alot more planning is needed and it will take longer time for me to have a playable demo.
Now i understand that c++ is faster and more versitale. But i see no point in using c++ if im going to make a indie game. It just makes it more time consuming and the game will probably have more bugs. Now AAA game titles for sure should be done in c++. But for small developers there really is no need to go c++.
Really hate responding to trolls, but I think my response will resonate with you when you gain more experience. If you've been doing C/C++ as long as I have, it starts to get old. It's still the language I am most fond of, but for me, it's time to move on. In tech, if you don't evolve, you get left behind or lose competitiveness. The choice to leave C/C++ was a personal choice to evolve. Some of us older developers know we must keep up with the times and compete with everyone else in the industry on the terms of where the industry is now and not where it was when we started. I know I'm being cryptic, but read that last sentence carefully as my reasons are completely encapsulated there. I'm going to cap it off with a lesson I learned over 20 years ago.
I worked with a guy who had been a mainframe developer doing fortran and cobol. We were on a distributed systems project involving DCOM. He had a rough time, and he told me as such. It was a very cautionary tale. Cobol had it's time. C had it's time. Java had it's time. Now the tech landscape has shifted, and some of the other languages like Go, Rust, Swift, and Python are just better suited for the changing landscape. If all you're doing is writing drivers or embedded systems and never plan to do other software, then by all means, stay with C and never change. Just hope C and embedded systems don't go the way of Cobol and mainframes. For me, I will never want to stay narrowly focused and not evolve.
Kurt Angerdinger "Python isnt any solution at all. "... tell that to Google, IBM, and NASA. Much of their stack is based on it. It is used incredibly heavily in the data science and AI world due to its flexibility.
It is funny you diss BASIC. You do realize that is what launched Microsoft into the mainstream, right? But yeah, I guess that didn't actually happen because all the smart engineers avoided BASIC... right? :/
There are no "beginners only" languages - there are only "beginners" who debate about what language is the best. Experienced devs will spend their time choosing a language that works the best given a very specific situation. Like in Algebra, there may be multiple correct solutions.
Yes C++ is powerful and is a personal favorite, but would it be wise to use it to build the backend of a blogging system? Heck no, it would take 10x longer than if you used PHP, Java, or Ruby. Just like it would be silly to use PHP to build a game. Each language has its place - good developers will learn when to use each one.
As far as why apps today are slower and buggier - if you worked in the industry for any decent period of time you would know why it seems that way - there's a few reasons... I'll lay out two of them.
1) In the good old days engineers would spend a year or two on a single version of software with a ton of QA/QC. In today's fast-paced highly iterative world of new versions every few weeks/monthly - sacrifices such as reliability, security, and execution speed are being made to gain an advantage over competing software and services. This is a huge issue in the industry as a whole.
2) Additionally, software does a heck of a lot more these days than back in the 80s and 90s... so of course it will be more error prone. The KISS approach works with software... always has, always will.
Kurt Angerdinger use the right tool for the right job. C++ is the screw driver while c# is an electric drill.
So easy answer for every dilemma in life, Do you need it for your job/goals? Yes, Not yet and possible never? No. That irrational feeling that you need to know every alternative tool for a single task is so frustrating, useless and stupid. Learn as you need, the only exception I find is when you want to apply for your dream job and need to master something new. Again, master as enough as needed, otherwise you will experience something called "anxiety", plain translated to "unsatisfied life".
Muito obrigado.
I am learning c++ and I really like it.
IT REALLY LIKES YOU TOO WHY DONT U MARRY IT
ooooooooooooooh buuuurn
@@garetclaborn that hurt me mentally
@@vlad3223 so would you say that you're...
....FEELING THE BURRRRN!!?¿
;]
@@garetclaborn no it burnt me mentally
mwahahahaha!
I did finally learn C++ and it is a really great language.I took php, python and javascript engines and linked them into C++ software, not easy but really powerful. I recommend learning how to write cmake build scripts as well. You can have the best of all worlds if you want it badly enough!
C++ will still be about in more than 10 years. I'm working on greenfield C++ projects now. It's heavily used in embedded systems, its used for games development, multimedia applications, server side development, mobile development... the list goes on! As a language it is evolving and growing and moving further away from its C roots. Although there a problem spaces that C++ isn't well suited for and I wouldn't consider it to be the optimal tool to use, there are many problem spaces that are suited very well to C++ that aren't so well suited to managed languages.
If you are a good C++ developer then you join a small number of in demand engineers. I never have to concern myself with being unemployed. There are far more C++ jobs than there are competent engineers with the skill set to do it. For anyone who considers themselves a technically minded developer I would say that learning C++ in 2018 and having it as part of your tool set would do you very well indeed.
Doctor Octavious? Is that you?
I left my tentacles in the other room.
You just made my day!
His voice is so calm that I slept.
I hear that a lot! ;)
The video starts at 1:20
you're welcome.
As a web developer primarily, the more I work with Javascript, the more I love it. For some applications, it has some limitations, but for the web, it is so powerful. In fact, I'd say the most powerful features it has are not well understood, and can't be used to their fullest without years of study/practice because there's nothing quite like them in most other languages. In that sense, the experience of learning Javascript never gets old, because you're constantly finding ways of doing things, and even architecting your code that completely expand the world of what Javascript can do.
You are right about choosing what you want to do and choosing tools which help you achieve that.
you pissed off so many people when you said PHP
LOL! I am language agnostic. You learn that with experience.
yea ofc, I'm not saying that I'm pissed off, just saying that were are people that will xD
php is the shit, how much crack have you been smokin
Edward there it is!
People using PHP are already pissed of because of it's "features"..
Yeah, I really wanna get into AI but I'm horrible at math, I average B- right now (3rd year of highschool) and I am probably going to drop to C by the end of the year.
I have been doing web development for over 4 years, I only got good at it this time last year - around the time I picked up PHP, but now I'm looking to learn Django and pair it with Vue or react, I'm not even going to try for angular...
Not with that attitude about it
I wouldn't question the credibility of your experience having purchases your book on web design..great book!
Thanks!
where can I find your book on web design?
Hi! On amazon: a.co/fnbqogg
I'm only an intermediate to lower level programmer after the 10 years I've spent programming but...
I look at C++ today and realize that I'll never need to know it well at this point programming video games. You're just copy pasting code at a certain point, but will definitely keep writing toolkits that take the features OUT of this feature heavy software like Unity and Unreal. If I learned C++ it would be so that I can make a 3d engine without all the bells and whistles added on.
Every time I see another feature added, and there being no 'simple mode' for these engines, just shaking my head.
I'd recommend someone create a simple 3d engine and actually advertise NOT having all these features.
"No animation curve editor!" "No navigation mesh system!" "No internal sprite editor!" unless those are the features you're actually gonna use. When Unity takes like 3+ minutes to startup and 10+ minutes to build a game, the bloat is just ridiculous.
So to digress, C++ seems useful to me if you're programming something from scratch...You want things on a low level done exactly your way... Or, it's just fun to learn and use to be honest to get to feel what being a 90s programmer was like using the Win32 api for example or Direct3D.
It really depends on the task. If you do embedded stuff especially with sensors, signals, actuators C++ nails it all way all day. First of all C++ can use larger assembly tables, you evan can use assembly directly, and it has it all when it comes to memory management and real time condition. On Top of that you have the sweet tools from object oriented languages which makes your work reusable if done right.
Great insights and I loved the ending.
"I even forgot the point of this video" :D
Thanks!
sounds like this guy smokes 20 packs a day.
20 plus 1
21 lol
20++;
@@tianzhuzhang3876 lol
alternate reality Nolan North
you should learn c/c++, it's where all the fun is
By fun you mean late nights going over mountains of code to find a missing semicolon then yes it is fun.
Fun?!
If you want to have fun, use Crystal, Ruby or Python.
Great video! Also your camera is amazing. Great positioning and lens selection.
C++ is not only about performance, it is also about determinism and flexibility.
And about abstraction/cost ratio.
The cost measured where it counts the most: For the user in run time and hardware resources.
It is available as a compilation target for web browsers via Wasm and a "low compromise" viable option for web app development we might see more and more.
GC languages like Java or Javascript in contrast require significant compromises (translating into cost for the end user) esp. when used on embedded systems.
And many other Languages are tailored by their infrastructure/libraries and development environments to a specific market like Web development or "corporate software" development, etc. and thus to a specific audience of developers.
Many Languages you have no choice but the Garbage Collector and the user has to pay for it cluttering his ram and stuttering his experience.
In C++ you could use "std::shared_ptr" for everything and would be already more run time and memory efficient and deterministic, but you could do even better, if you decide it is worth to invest your brain into it.
Everyone who has a more general approach to programming/computing should definitely learn C++, specialized Languages can follow and are often itself written in C++.
なるほど。。。 わかりました!
My thoughts exactly :D
damn it mate I got you mistaken with Stefan Molynuex lol
LOL
Przemek Wielgosz don't insult the man
Tired dyslectic in a dark room sees a recommended video from Stefan M, the thumbnail is kind of weird, the video is different from the usual philosophical content but since Molynuex did his fair share of programming back in the day, why not, it could be interesting.
I am not completely bald though. ;)
It's an exotic language.
I started learning to code on an Atari ST520 first LOGO then Basic, then Assembly on a Commodore 64. Then Pascal, COBOL in UNI etc etc etc, Objective C for 5 years, Now moving into C++ to use in the Unreal Engine alone with Blue Prints. In the end I go with the language most suitable to the end Application.
I love C/C++ precisely because it's so close to the bare metal. That's the type of programming that interests me. I like dabbling in CPU/systems emulation in my spare time, and at work I mainly do embedded development. I also write the occasional desktop GUI tool for my company, but I generally just do that in Visual Basic because you can knock out an app like that real quick.
ProTip: If embedded development interests you, learn C/C++ and ideally also get familiar with AVR, ARM and PIC assembly.
My school is switching from java and C to C++
Really? Wow. That genuinely surprises me.
We did C++ for GCSE (14-16 years old first set of public exams) and now we're doing Java for A-Level (16-18 years old second set of public exams). Not sure if there's a specific reason.
why not both..
Thats odd, Java is the best way to learn as it is so big on range. At UoW where Microsoft supports we learned via Java than took side classes in C based languages.
Can be confusing and time wasting. Programming has one thing in common regardless of language, concept and theory. If you learn Java theory and classes - 100% of other languages will have the same idea just differnt syntax for say.
Java is a great base point to start learning.
dag nabbit, my trig and math theory teacher was right. i do need math after school! well crap on a map
Summary : YES!
Thank you for spreading the word that C++ is not useless. It's just not what most people use because they aren't interested in native programming and what C++ was built for.
I find it absolutely awesome to see a professional developer give their opinion on a language. All I've heard over the past 5 years is "Don't learn C++, learn Rust. It's the C++ replacement". Which is even more amusing considering that I see next to no jobs requiring the Rust language. I've been attempting to learn C++ for almost 15 years now, I understand what the code is doing, I can debug it to an extent but starting from scratch is a whole different ball game. However, what you said is very true and accurate. Every language has a purpose and C++ is amazing for games/AI. I'm currently using it for Tool Development.
*I JUST CAME HERE TO COMMENT THAT THIS FUCKING VIDEO IS SUGGESTED TO ME FOR THREE DAYS STRAIGHT, I ONLY SEARCH FOR MUSIC AND MEMES ON YT, WTF ALGORYTHM?*
Maybe the universe is sending you a message? ;)
Same haha (not just, but music send me here)
Have you been thinking about going into ICT?
You are aware that YT scans your thoughts right?
Ditto. I guess YT (google) knows that I have been a programmer for over 30 years though. But here's the thing: I think C++ is one of the most vile, heinous, ill conceived, languages, EVER (vs, say, Eiffel, Object Pascal or even Simula 67 for times you want to do static-OOP paradigm, to say nothing of FP, dynamic or low level, etc approaches). But C++ is available, and God knows how many man-lives were poured down the rat-hole optimizing it, and some jobs doing it are available, if you can stomach it.
At least our host on this video has the good sense to point out that there are multiple tools in the tool box.
C++ is one of my "rage quit" triggers, I guess :-)
wah, C++ is used to write almost every other language, compiler, and interpreter. That alone should be reason enough to learn it and understand it. Don't compare it to racing, compare it to having a license. I would never hire a programmer who doesn't know C or C++. A scientist or mathematician who uses Python or LabVIEW? Sure. But a programmer who doesn't know C is a hack
Mich Po not that you're wrong, but should every programmer also know how to write binary files directly with no abstractions? since all programming is built on that far more so than c++...
Kris B The consensus I've seen from web developers is that they're not. Javascript is though.
I mean you can, it would just be a giant waste of time. Whereas learning C isnt
Nathan Smith I guess C++ is the border of two realms, software engineer and IT worker
nathan no, but every real programmer should know how the translation to machine code works. and having a proper grasp of system languages is the way to get that without being a master assembler
5:07 I'm a Uber Nerd Senior Game Designer ROFL!!!
Yes, it does depend. You want to program for your iPhone, learn Swift, you want to start programming, learn Java or Python. But is C++ still a relevant laguage? Definitly. I program embedded systems and C++ is for me the right choice. It is more complex, but if you don't have a lot of ressources you have more options to program efficient. And if you can program C++ you shure find a job. I also don't see C++ dying in the near future. If you are interested, try it, don't stop when it gets difficult. There are a lot of help and tutorials in the Internet, and if you mananged to get through it, I promise, you don't want to program with anything else ever again.