John about rust: "I've done a little bit beyond 'Hello world', I've wrote some video decompression just as an exercise" How to trigger other people's impostor syndrom 😅
I found that the best defense against imposter syndrome, especially when it comes to programming, is to recognize that there's just so fucking much within the field as a whole that you'll never know anywhere near most of it, and that everybody's skill sets are all over the place. Undoubtedly, people are better programmers than me, in that there are people who have the knowledge and experience to better conceptualize a solution and better structure their code for a more simple and sophisticated program. But much like John up there, I'm not familiar with Rust a whole lot, all I did was just jump straight from hello world to writing a quick protype of a sound engine with no external libraries save for some win32. However, I'm also over here shutting the bed on OpenGL right now.
The thing is, there are some programs, some algorythms you could like to implement or to think about them. Following the known patterns leads to the feeling not of a challenge, but of a pleasant walk.
Naturally everyone can agree John is indeed a god of programming but don’t be quick to hit yourself down. I’d argue you could do roughly the same by following a spec or paper. After the obligatory console logging I try to make a non trivial toy app in a new language, web server, bitmap or jpeg reader, dumb synth or something with concurrency by doing the same. You can get very far in a language with just arrays and variables and very minimal use of their stdlib.
I've coded in Assemby, C, C++, C#, Javascript, Pascal and various versions of Basic... But my first love will always be C/C++... Although I am very fond of C# and, for some reason, I've always liked Javascript! Despite the deep flaws in that language. But yeah, people keep banging on about the coming end of C/C++... And it just ain't gonna happen... Not for the foreseeable future at least! And yes, people still code in assembly too! It's niche...Some might say antiqued but, the need to code at the lowest levels possible is still there. Perhaps now more than ever!
@@sdwone If you don't mind me asking, how I can learn C and C++ at the same time, I really love the idea behind of each one of these language's, and my goal to expose my self to a deep undergrounding for CS and be one of those who built the tools we are using today, so how should I do it I'll be thankful for answer from someone have an experience like you I really want to do it, I feel really frustrating ppl say that it's impossible to learn them both or C++ and it's so large you can't master it, etc... All what I want to understand what and how tech we use today is built and how to build my own and achieve something like this guy
@@0_Dseven Dude, John's work at id is open source. Go grab the Quake code. Q3 had C and C++. Go mod the shit out of it as a challenge/educational experience. Before they released the whole engine, moding the game DLL in Q2 is how I learned C.
He speaks with the depth of knowledge and experience that I've heard from George Hotz on UA-cam, but Hotz is wily and seems quite quite sceptical of people. When I was graduating college the general view was that we needed a very simple language (syntax and mechanisms), but with great controlled power (do stuff without shooting yourself in the foot). C++, once advanced enough does a lot of that and I'm hoping Scala can get there with a ton of complementary capabilities. Getting the speed is a problem for all the interpreted languages though. Where I'd like to hear more is about program design for resilience to change and the ease of management with new programmers (which he mentioned). Google is good with generating ideas, but they require time to really hone their products. Go might eventually become excellent, but it will take a while. "A better C" has been a goal for many people for a while and C++ seems closest.
@@DanHaiduc not only decades of work, but decades of work at the forefront of innovation. I was going to say it’s like he lives and breathes programming, but to say he dreams about it speaks for itself.
I don’t understand a damn thing he said I can barely operate Microsoft word lol. but yet here I am watching. Your uncle is responsible for Wolfenstein? that’s wild I played that back in the day when I was a young kid
"Train wreck of over-abstraction." I love it. "It's not about the writing of the program but the life span of the program." I wish John Carmack can do a masterclass that teaches all the Professors and Computer Science teachers what to teach.
It has been attempted. The problem is, you get a few dozen up and coming youths at a time and the lesson they don't want to acknowledge is one learnt after spending months trying to understand old code bases. It's very slow progress when it goes well, and when it doesn't, it's extremely hard to tell; and meanwhile they'll blithely claim "this would all be better to just rewrite completely with «tool they heard of this week»". There's much to learn if you just meet your professor privately and ask when they wish they could teach!
That man speaks my mind. My experience. The wisdom I gained over years. I mean, I don't dare to compare with John Carmack but what he says is exactly what I learned through my experience and mistakes. Couldn't agree more. There's no best programming language and great programmers are not defined by language they use. Great programmers write code that lasts.
Carmack is one of those legendary programmers that truly deserves the accolades. When he speaks on these topics, it's always worth a developers time to listen - even when what he is talking about here is essentially common sense to senior developers, the fact that he has considered it and agrees says we're on the right track.
C++ dev here, my 2c... I agree with JC 💯 in that I don't overly embrace metaprogramming or functional paradigms as my core approaches, but I love the lessons learned, like DRY separation of concerns, and immutability of data as it is passed around threads. C++ is a scalpel that gives you complete control. You will always pay more than you think for garbage collection and weak typing. For me, C++ is powerful and simple read: elegant) to start with, and finish with. Coupled with inescapable JavaScript, it's all I need at this stage. I use node modules for all my scripting needs. Focusing on just these two languages as my core is very helpful for my productivity.
What John starts at 2:43 is perhaps the most important part of ANY programming. It has been true since the 1970's when I started and is still true today. It is a KEY concept many, many programmers miss in their work....to the detriment of all that come after them...and to their organizations. It was true with assembler, COBOL, BASIC, and everything after that. There is NOTHING worse than a uselessly tricky programmer.
And that's why C is king, and people who don't write C will never be understand. It doesn't matter if it takes you one month to write something in C that could have been written in Python in a day, because once it's written, literally every programmer of C will be able to understand it without problems, and appreciate it. Linus Torvalds has mentioned this aspect as well. There are no variants of C: C is C. Whereas in C++, Trolltech C++ is a different beast than Mozilla C++, which is different than Google C++.
That's not what he said, though. He made a general comment about how the most useful thing to do is to write code that is long-term sustainable and easily adaptable. This is a separate issue from "tricky code" entirely.
I studied C and C++ primarily back in the 1990's when in CS curriculum at university. While I have dabbled in other programming languages from time to time. C and C++ are still very much my go to languages for anything commercial or personal. These languages are about as mature now as they ever will be, even though they may (and hopefully will) still continue to grow and evolve. There has been very little I haven't been able to do with them. They work and I am comfortable working with them. I don't foresee either dying off anytime soon as they are interwoven in everything we do. While many of these newer languages may have certain things that are appealing, I just haven't found a solid reason to put a lot of effort into fully learning another language.
I started on C, spent many years with it in embedded stuff. Then we started using python for tooling around it. And with python turning problem into solution is just sooo much faster. I followed the python into web dev. I don't do much that cares about performance, the database, webserver and bit math/ai libraries do that. What I do is the logic that binds it all together and being able to easily express that in a very readable way is core and not something I could give up.
I had the pleasure to meet John back in the Mesquite TX iD cube building around 2000, I was invited by Graeme and got to test Q3 team arena . I then got to listen to John at QuakeCon 2001 also in Mesquite TX. Being a huge Doom and Quake fan, I've always admired John.
i was in school for programming a few years ago and they were pushing java. they were acting like c/c++ was obsolete. after that level i think it just gets more specific, but the industry at that time was more based on java. i taught myself c/c++ when i was a kid, so that kind of bothered me.
It's so refreshing to see someone who's both smart and understands maintainability. If someone breaks the product because they misunderstood your code, it's your fault too. If they misunderstood because you broke a convention, it's your fault exclusively.
I've met programmers who loved the idea that they wrote a program that was difficult to read and understand. That it made them smarter than everyone else. They're fucking idiots. Code maintainability & readability are required to be considered good code. Leave your ego behind & write something others can actually use and extend.
These guys are both brilliant. When I was in IT back in the day, I was a serviceable, average programmer who could setup databases, run reports, whatever, -- minor stuff. I even worked at a place that brought in tons of foreign contract programmers who were below average in my opinion. So my question is, what is all this stuff I hear advertised such as "Tired of your current job? Learn to code in 10 weeks". -- "Don't like being a waiter? Don't like being an auto mechanic? Learn to code in 10 weeks". How is this even possible these days that everyone should turn to "coding" as a career? I assume they aren't getting hired by Google and Facebook.
I think people can "learn to code" in a week with their nose in a book, enough to teach themselves and try new things anyways - that's how I did it as a kid. 10 weeks is enough for an entry level cybersecurity+networking course, introductory web dev, introductory IOT. sure, they're not getting hired by google or facebook, but maybe a local school or state facility needs an "IT guy".
There are two type of courses. The 10 week / x hour courses are a social media industry. It's nice to refresh a language but these doesn't make you a programmer. They just take you by the hand and guide you trough an environment. Then there some older experts or profs giving courses. These are really great for people who are allready programming. As they show you a lot of problems and tools and how they link to things you already know. But the once Google, Facebook, "Elon" needs are those that know enough math and computer sience that they can design an algorithm and implement it in an ever increasing mess of a codebase. To get there you need to be skilled with math, because the easy tricks are most likely done already, and you need to constantly work on or evan solve real problems. So getting a certificate or a degree is a good starting point but the company you work for and the tools and problems they make or give you make great programmers like these two.
I am very into coding not because I want to get a job as a programmer, but I am owner of my own architecture firm and I want to learn to automate a lot of stuff I know that need automatization but there is no solution for me right now. I had experience in other stuff, but now, there is no programs that serve my needs. So I want to learn to solve those problems that only someone in my position of being a professional in a no software business can solve.
One, nearly every company can benefit from programmers automating some process, so there is huge demand for devs. Two, many problems do not require expertise in software or CS. Often, business just need code that runs. The last bit of expertise is not required unless the code is crucial for business operations. It's cheaper for businesses to hire 3 average dev and 1 expert dev than 4 expert devs.
While I absolutely do not want to discourage people from going into Software development I have to say those courses are somewhere between rip-off and misleading people. 1) Nobody ever became a good programmers least he had some affinity to Computer, mathematics and logic beforehand. This can come in different shapes and there are those cases where the 30 year old car-mechanic who had an affinity for Sudoku and building mechanical gadgets and tools suddenly discovers that he always had this affinity for mathematics. But those are rare. 2) There is lots of rip off course addressing people in economically disadvantaged countries for whom becoming a silicon valley coder is the dream. It a shame because at worst people loose money in sham course and at best they produce sub standard, unmotivated Software people. 3) And then there are genuine companies trying to fish for the gems in a sea of unskilled people. The signs to look for, for a good course is: 1) There is co-sponsoring from a company, which is genuinely looking for people. 2) There are entry criteria and tests. They actually reject people. NEVER take such a course if they just take everybody. The best way to test your willingness and talent is: 1) Find a person who knows programming. Ask them to give you direction, NOT to teach you in detail, nobody has the time to do this. 2) With their direction, find place in the Internet offering free tutorials and excercises. 3) Once you done with basic tutorial, let them give you some "boring" real life tasks. Parsing and scanning files, reading a table in a database in filtering results into another one, cleaning up file system, Exporting and cleaning Excel sheets etc.
This is really great to hear, as a C programmer who studied first Java and then Functional Languages in school but then wanted to go work for a company that uses C and had great C programmers I wanted to learn from. Just like John says imo functional languages are a great way to expand your view of programming and software design but then personally I wanted to actually learn from the bottom up professionally and in an environment where good engineering and performance was really required. This "C flavored C++" is something I've heard from several programmers I look up to, like Jon Blow, Casey Muratori and now Carmack as well. It seems to me like good advice, though I would probably lean a bit more towards the C side than maybe these would. I feel the few times C++ clearly outshines C I can usually feel C's simpleness still be a strength in its solution to the problem. Eh, you can't copy your hero completely I guess :P
Following what you said I think C has a lot of virtues and the future at least of C and of C++ is to tighten up the language and their paradigms. There are a few things that appear to have grown uncontrolled. There are some interesting suggestions coming from the designers of new languages. I think it would be better to have a more convenient approach to build systems that is provided with the language standard rather than tools associated with scripts.
@@jwadaow Yeah don't get me wrong, there are several things bad and wrong about C (and even more wrong with C++ imo :P ) and I don't hesitate learning and testing out new languages. It is just that if you want to go deeper and learn how the computer actually work and how to actually make it work fast and what actually are good solutions and what actually is hard problems in a computer system C is probably your best option. I feel like all programmers should know a little C and probably coded some programs in it to get a feel for how it is like. And it will probably always be useful to know, since there will always be C code out there in use. I agree the build story for C (and C++) is horrible and clearly something that should be improved. Personally I think Zig's approach is very good for this, where you keep the build system within the same language (heard Jai does it similar). I am also very open to what Rust is bringing. I know from experience pointer and memory management in a large codebase can be horrible and scary. However, I am a bit scared it is walking to towards C++ a bit but I like the ML-flavor it is adding so I think it will do good in the space.
I wouldn't even bother with Java these days. Start with C/C++ then go for a higher level C=based language and master that. Something like JavaScript or C#
@@jwadaow One of the wonderful parts of C as well is that because of how absolutely simple it is, there are also a whole sea of different compilers available for it, for almost any platform you could ever possibly imagine. And not only that, these days you can even straight up write scripts in plain C code for performing very specific but extremely performant computations with almost no overhead (except for the system calls, which are of course a big one). To top it all off, it is also very easy these days to bootstrap. C++ is absolutely NOT very easy to bootstrap in no way shape or form.
For me the good thing about C, if done right for sure, it only does what you wrote. And also hardware design languages are very C like so you stay within a set of rules. Where C++ shines is encaptulating and messing with seriell or parallel compute. It can hide algorithms, implementations and hardware specific data so well that you don't need to care and see it while building the system. Also for dynamic programming where the data format and the right algorithm are just known in runtime C++ is really great with it's way of linking operations as lists and swaping the elements on the fly.
I've been through the whole lot. From BASIC, Pascal, early C++, right through "web languages", Java, modern C++, Obj-C, the whole OOP, MVC, MVVM paradigms- creating systems and abstractions with all the design patterns - and finally come back out the other side, to simple, elegant, C. It truly is the best way to go.
I'm getting there myself. I do a lot of (very) full stack work in the IOT space - with everything from C to PHP to Scheme. The best code is code that's easy to maintain and doesn't try to do anything tricky. There's a lot to be said about the different paradigms however - especially how they affect maintainability and elasticity down the road when reqs change. And they always will.
the best way to go WHERE? the best FOR WHAT? will you write a web app, or a mobile app in C? apples and oranges... programming languages are just TOOLS, and tools are suited to specific purposes. you sound like a carpenter who decided: "hammer is the best, hammer is the way to go" or a doctor who goes "i think stethoscope is absolutely the best"
What makes this guy a great programmer is not his choice of C++ but that his choice of C++, largely influenced in reality by his niche and era overlap, was secondary to his desire to get as much done as he possibly could.
@@judgedbytime At first, maybe not. But over the years, as options appeared, Carmack is the type of programmer that would evaluate and look at whatever was happening in computer science. If moving to something else made sense, I feel confident he would have done it.
From a maintainability perspective, I think the best attribute of a programming language is how many compile time guarantees the language provides. So newer languages that have optionals built in to avoid null pointer exceptions such as Swift and Kotlin are strong choices for the best programming language.
You've clearly never seen Swift 5 projects or Swift code written explicitly in implicitly unwrapped optional. Swift offers you the door to paradise, but also gives you a gun that shoots infinite ice bullets containing active anthrax and smallpox.
@@alexfrank5331 You can write bad code in any language. The idea that the compiler can give you additional information and catch more errors if code is written well makes it better than a language that doesn't do that if code is written well. I'm sure you can rip the safety off of any language with anti-patterns.
I still can't believe the first thing John talks about is Python. If I was him, I'd Linus Torvalds it up and say something weird like "Yeah, if you like programming languages without brackets, you should try x86 Assembly"
Nice! a mention of OpenBSD which isn't talked about enough. My favorite programming language is any language that allows me to get a task done without too much hassle. Lately, that's been Python, but I've also programmed in Java, PHP, Perl, and sh. I learned C and C++ but never used it for work, since most my work is more Sys Admin stuff.
There's certainly a difference between bad Python code and good python code. Though the problem is that the number of bad programmers in the python world greatly outnumber the actual engineers who actually know the language and not just copy-paste and cross-fingers, so... RIP.
I've used Python in a limited amount for a coding challenge processing and plotting a 9M record log file, but got great performance (~2.5 minutes) by using Pandas to take a relational approach in order to avoid looping the data, which would be disastrous with any scripting language.
I like the respect towards functional languages or functional style of programming - it seems like anyone still programming past a certain age gains it because of the reason John articulates. I've been programming for 30 yrs now and I have colleagues who program for "only" 15 years, and they seem perfectly comfortable with mutable state, as I have once been. I don't know whether I grew wiser, or my brain has deteriorated somewhat and can't wrap itself around mutable state. It's a little of both, I guess. I suppose you don't write an operating system kernel using functional style.
Operating systems are indeed written in particular styles; mostly state machine, but some higher algorithms in scheduling and memory management, with a focus on actual steps in hardware. While they likely won't have a mark and sweep style garbage collector, they will have reference counting and implicit priorities (e.g. which memory page can you discard when you need more? when do you run the work of wiping freed pages for reuse?). The key tends to be isolation; if you're mutating your state, make sure you're alone in accessing that state. If your work takes time, see if you can do it without interrupting other work. Side effects remain anathema; so make very clear where they exist, e.g. scheduling points. If your work doesn't take notable time, make sure to squeeze it in before you do the overhead of switching back to user space. OS developers thus focus on costs and risks that are often further from mind in functional styles, even if they're not necessarily less efficient at them. If we could have a class of drivers that operate entirely in STM with bounded RAM, that could provide a considerable gain. Engineers have planned for such usages, e.g. with microkernel architectures and multiple privilege rings, but it hasn't quite caught on. I think two factors tend to dominate why not: short path to understanding what precisely is executed, and (sometimes excessive) focus on overhead. The really sad thing is, a lot of that overhead could have been removed on a hardware level. If you have the interest, take a look at e.g. CRASH/SAFE. A seemingly more successful initiative today is F* and Project Everest.
In terms of simplicity, Go seems to be a good option. There isn't tonnes of syntactic sugar. For most operations, there is only 1 good way of doing it. In other languages, there are 10 ways to do the same operation, which makes code bases differ significantly.
Very accurate tho. Still, Java is probably the one you should learn if you want a job. C++ or python you should learn if you actually want to build programs.
Not really a jab. JS is what you need to use for working with the DOM. Any other non-dom related operation/algorythm/data structure can be referenced to C++ that's compiled down to op codes
The great programmers in my mind are the ones who do the best things for the lifecycle of a project and have the skills to build systems with minimal defects escaping while not requiring a fully specified description of the system to do so. That's my team leader brain working, but I've written code for more than 3 decades, and that's all I've been able to derive to answer that question. It's not so much them working on big things or having a big following as much as it is just what's the brass tax. It's that.
Coming from primarily a C++ background I took up Golang a while back for a specific research project and initally I really liked it as it was quick to get going but with time and size the restrictions, the abscense of a sensible standard library and poor encapsulation really started to get to me. The addition of generics is a good thing but it just feels like there're some serious basic flaws that will be hard to overcome. At this point i'm not convinced, but wouldn't classify myself as fully proficient. I probably wouldn't do it again.
Python for me has the best syntax to read, when well written is compact and it speaks for itself (I started with C back in the early 90s, I'm just 7 years into python)
You can do the most with the least lines of code. Ideal for ideas, but the speed isn't suited for high speed applications that use nested loops. But extremely easy when debugging, no compiling necessary.
Nothing beats python's syntax in terms of readability. I just wish it didn't use indentation to define code blocks, I want to write donut-shaped progams :(
@@jessejayphotography depends on what you mean by production environment and depends on what you mean by easy. For example I took a look at how you read and write data from an SQL database, and calling it easy to write and easy to understand is strong statement :)
Im just starting out learning programming, but my take away from most amazing programmers I’ve heard is that great programmers follow some rules: - make the program simple, not complicated - document the code well. If no one else understands it but you, you just wasted more overall time than you saved - understand what it is you are actually doing. It’s easy to see a method and know it does what it does but not know how it does it - always strive to improve. Revisit old work and redo it as you progress - practice a lot. It’s like a spoken language. A comparison might be that you “know some” French but talking it alot and with someone else will greatly speed up your progress - plan your work before you start. Jumping into coding can easily make you lose yourself in abstraction, while also making it harder to seek guidance since you might not be able to explain what it is you seek to accomplish If you have anything I missed or got wrong don’t hesitate to correct me! :)
Good programming language is one which does job well. Javascript is good front-end tool to make websites work. Assembler is great for firmware and controllers. Assembler may be great, but try to use it to make a date picker in a browser...
Last 20 seconds at 8:09 are exactly my condition right now. C++ really beautifully brings my creativity and to make big(long-term) projects But being adult about it, maintaining it, refactoring, design patterns and stuff... But I love it. I'm learning.
Sometimes I hate working in C because I feel like I'm making the bricks to build my house myself when I should just be buying them. Then when I use a higher level language for my bricks I end up wasting an entire week trying to find the ones I want, not finding exactly what I want then end up making them myself anyway lol
as a beginner level python user, i already have a love hate relationship with it. i use it for some minor project management automation. i can stitch together a program in 20 hours but it would take 100+ hours to optimise to the point where it doesn't crash our server. like this dude said, 3 layers of _for loop_ is enough to test the limits of the best cpu and ram. recently i've started playing around with LUA for inspiration. LUA has only 21 reserved words. it forces you to be creative in solving complex issues. i might use LUA as draft outline for future python projects.
That's what makes python so ideal for prototyping. You're not meant to do nested for loops if you can avoid it! So python uncovers bad algorithms early on... then when you re-write in rust, you'll have it 99% correct the first time. Just use dictionaries liberally in python. The python dict is comparable to C++ STL unordered map performance.
IF - THEN -ELSE IF - OTHERWISE IF(a.k.a BUT and watch out double-t or it hits you well...). Removes nested clauses if{if{}else if{}} to if{}else if{}otherwise{}.... Provides clear view to code (no nesting) and opens pathway to 2-way logical programming. if A==1, B==2 then .. .. otherwise if A==-1, B==-2. then... No nesting no need for processor to run backward to main clause. Easy to understand when reading code what is aimed.
John: "I've done a little bit beyond 'Hello world', I've wrote some video decompression just as an exercise" Me: "I've done a little bit beyond 'Hello world', I've wrote 'Hello world ' just as an exercise" 😅
1:23m Python for the cobbler! I like it! 2:10m The value of years studying Functional Programming (LISP, Haskell, etc) on "C-Flavored C++" non-abstracted work." (Para.) to effect life of program adaptability ("how programs can bend and adapt".)
I would say the best language is the one that pays the bills. Don't really love Java as a language (though it's getting better), but that's where all the jobs are.
PROGRAM Hello ! This is a ForTran program "Enough Said!" WRITE (*,*)'Hello world!' ! default input (Text) and standard output (screen) PAUSE ' ' ! This is a pause to allow the message to be read END ! before the program closes with the END Can also put the first man in space.
I believe that Python is the best language in terms of syntax, but of course C++ is best for performance. I think that the best language possible is easy to read, powerful, and compiled. Memory management should (ideally) be solved by compiler. Pointers need a better syntax, as *x can mean "pointer x" in one context and "dereference x" in another I really think Python needs to become a compiled language...It is just as powerful as C++ in terms of application, while being way easier to read. Would you prefer #include char *msg = "Hello world"; std::cout
"I believe that Python is the best language in terms of syntax" Python is a total loss. If, no matter how, your source file loses tabulations, your script has to be thrown away...
It really does make me a little bit sad that Python can be that inefficient for "serious" applications, because as someone who's not a particularly talented programmer, I've always loved how easy it is to write Python that just works.
@@slowtyper95 Because its a very easy scripting language that can call fast c/cpp code that does the heavy lifting. The feedback loop of writing python is very short so you can write a lot in a short time.
There has always been a trade-off between performance and ease of use when it comes to programming. As I see it, Python is the modern-day equivalent of the BASIC that was built-in in 1980s microcomputers; You feed it to the interpreter, and it handles all the details like type checking or memory management for you. Inefficiencies are just par for the course.
I’d love Lex to define what a “great programmer” is. To me someone who is pushing the boundaries of a language and creating genuinely new things I would consider great. But many consider those who are quickest to solve for a problem the best.
A large project needs programmers to collaborate and support each other. The genius's role is to push the boundaries, but they can't make the thing on their own.
For me, a great programmer is somebody who produces elegant code that has a logical structure that is immediately recognizable to anyone who reads it. Fluency, in other words.
Hes so right about the multi-language projects and maintainability of overly customisable languages Like I absolutely love scala and its a great language for prototyping and portable data management, often even better than python for simplicity just lacks libraries in some areas, but I would never want to work in a large team project on it because you'd have to spend more time on reviews and documentation than coding to keep it maintainable Ashame he hasnt spent more time on rust, would be interesting to hear his opinion on it
@@fluffysheap having broader choices doesnt make managing large code bases easier, in fact it often makes it more difficult, and the fact that you can have such different paradigms and implicits means its insanely easy to write code that very few people can read, you have to have either senior devs that all share similar opinions or a lot of criteria in your cosing standards and a lot more time in reviews to stop both "too clever" and messy paradigm shifting from happening And what do you mean by "best" type system its my favourite for sure, but best at what? Theres no best type system for all purposes, thats like saying blue is the best colour Like if youre comparing it to java, c++ or javascript then sure its not likely to have more standard management overhead than them, but thats a very low bar to set
Python. Ya I agree on the loop stuff. You have no choice but Cython's static typed variables, which alone can reduce times exponentially. Ya know 8 sec down to . 2 or 0.02 for an abstract loop performance test. I don't wanna like his C++ choice but it's true. I wanted C# because I loved the method signature and the various arrays like jagged but Microsoft CLR is also slow. ANSI C is tedious but almost essential to mix with python. I think python was made not realizing it would take off except for plugin frameworks. Like why dynamic typing and why not binary compile? I feel like java was given new life simply because of Android ART compile.
Haha, I love how he didn't like about the JavaScript/React, and indeed it's always easier to keep one language across the entire stack. It's fine, just my typical day of backend developers despise JavaScript/typescript along with web/frontend development. But hey, don't forget we can always deliver best user experience by chance. Don't limit yourself into programming perspective solely, we work with designers and have a lot of chances to share thought across industries, which indirectly benefits the way of writing maintainable/readable (because it's somehow UX related) and performant code with whatever languages I need to pick up. Web development is so crazy (I guess it's because JavaScript is so bad, haha) that there is a new framework out along with its own syntax almost every year, I constantly heard about experienced backend devs rant about them, comparing different tools without any knowledges. In comparison, I rarely see experienced frontend devs rant about backend tools/langs they don't know. The reason is probably because frontend still need to understand a little bit of backend so we can communicate to request the data efficiently. So I'm totally OK if I need to switch languages from js/ts to web assembly. rust or even a C++ web language that is far superior than typescript in 5, 10, 20 years. It's such a chaos, but it keeps me open-minded, I never keep myself into particular language or programming paradigm (such as OOP). I guess im at least better than stubborn devs who are pretentious about the language they are using.
Lmao it's very accurate what you describe here. As a backend myself, I catch myself sometimes having elitist thoughts regarding frontend: "everybody knows that frontend isnt even programming"
@@ilikecommenting6849 I think another sad truth is that many backend devs' daily jobs is not further than writing SQL to query data from DB, and then send the data to somewhere. It's purely CRUD and data -> data. Most (including frontend devs) wouldn't touch bleeding edges technologies, or architect a whole structure. In comparison, frontend might need to handle many application level optimizations (avoid duplicate API call, extra component rendering, client side data management/synchronization) besides getting data from backend, and checking lib combability issue. In worst case we need to write many "smart"(hacky sometimes) code to smooth out huge data rendering. It's actually math and algorithm intense. Of course, ideally we just want to render whatever from backend without any further actions. So it's data -> (data, optional) -> UI. I believe it's because our end result is tied to UI, it gives a false impression to the backend devs. You just don't know how many times I remind backend devs to check their data process (like n+1 issue, unnecessary handle data after using sql, accidentally override existing apis) when the entire process of getting and rendering data is being slow. I just can quickly figure out the issue is from the frontend or backend. Another subjective observation from me is that many backend devs constantly flex about how fast the tools/language they are using. All the fancy concurrency behaviors and low level memory address manipulation/optimization. Those has nothing to do with the code they are writing. They are just benefiting from those works but never being part of them. Frontend devs just love to comparing how fast the tools they are using, and then say X framework is dead, it's also really annoying
@@doc8527 I do both frontend and backend. I would definitely be more impressed by a great frontend dev than a great backend dev, since javascript and the whole ecosystem around it is constantly working to throw you into the pit of despair. Whenever I'm stuck on some horrible intense problem there's a 95% chance it's in javascript. Meanwhile when I need the backend to do something I just tell it do it and it does it, quickly and with little room for error. It helps of course that most of the backend work i'm involved with is in fact CRUD, that's just what most businesses need, but even when there's something actually fancy to do it still ends up being way easier to get right with static languages
@@HamidKarzai While I love frontend work because of the immediate visual feedback from the browser, it’s kind of hell on earth. Not only are you having to implement designs with CSS but also a lot of business logic and keeping it all scalable. When the Scala guys get a task, they just write it, test it and done. It seems like FE is the most frustrating role on the team.
6:30 "and you have C++ for real work" yep. I mean, everything is just an abstraction on top of C++ at this point anyway, the browser is written in C++ and has the main native application loop, it's just that cross platform is so intensely in demand so for most developers a browser running the code is the most convenient way.
I wrote my first C++ application 7 years ago and I just fell in love with it to the point that I went out of my way to write machine learning in C++. it's difficult to write good C++ code but it's very rewarding
I only code in c++ (I make video games in UE). What's difficult about it compared to other languages? I've never even studied a language other than cpp or JAZZ (blizzards proprietary language for wc3).
@@mr.doctorcaptain1124 I think Lex said it all. C++ expects you to be an adult writing your code. you certainly can write bad C++ code but when it scales it will be a nightmare to maintain that of course given you actually manage to get to run in the first place.
To Lex's comment, I would say that "really great" programmers are really great in whatever they put their programming attention on. That's because it has more to do with the mind of the programmer and the way he or she thinks and is able to construct elegant solutions, much more than whatever language they happen to use. If John Carmack wrote a program in Basic and put his mind to it, you can bet that would be a "really great" basic program. This what today's HR personnel and recruiters miss when they use cold algorithmic searches to find programmers with "5 years" experience in "version 18.2.0" of React, or whatever flavor of the day forked spinoff language is popular at the moment. Their searches miss the true talent of "really great" programmers, who generally speaking, could be tasked with any project or any language and still produced stellar results. This is also why people spent years going to a university to specialize in a degree on Computer Science. To them, a language is just another tool they use to apply their well earned skill. Would you reject hiring a highly skilled scientist simply because they had never used a "Heidolph 50ml glass beaker"? That's essentially what recruiters are doing when they filter very narrowly on select a specific set of language or framework skills. Imagine if the Armed Services asked questions like "well, I see here your resume says that you are a 4 star general, you've flown over 150 wartime sorties, and have successfully led several battalions in strategic military campaigns, BUTTTT.... have you ever used a GAU-21/A heavy machine gun? No? Well, I'm sorry, those are the skills the client is looking for. It completely diminishes what a person with a Computer Science background does and forces them to compete with "script kiddies" that have no real formal training in the field.
It's not "today's" recruiter. It's always been that way. Notice that there's plenty of resource on how to be an interviewee. There's pitiful little amount of resource on how to be an interviewer. Is it a surprise that most interviewers are all kinds of bad? It also doesn't help that many bad managers (and as Steve Jobs said, "most managers are bozos") just randomly call up a employee "hey can you go and interview this guy at 2pm today?" Even if that employee has never interviewed anyone before. lol
the best programming language is the one requires less lines of codes for the job. it's all about money. to produce "good software", you need a "compatible" language. a "general purpose" language is not really general purpose at all, IF the supporting libraries are good enough for the job, then it is your language. I don't really want to write 10 lines of codes to implement an algorithm, I would like to use the ones already implemented in the STL, put them together, make it work, precise and fast.
controversial opinion: Ive heard many smart people recommend learning multiple languages.. my response? to hell with that! I do not consider myself a naturally gifted programmer; my approach has been to immerse myself completely into C++ and the incredible, boundless array of libraries written for the C languages.. of course, one cannot escape the various scripting languages you constantly run into, but C++ is home for me
My favorite is C++. I also use Python, but I like C++ for performance. I think that C++ programming can become easy when you use it a lot. I tend to like to use just one language for everything and that would be C++. Takes a lot of mental bandwidth to jump around.
Great programmers may use and produce great work in any language. Their greatness is determined by how well they understand the problems in hand and how well they can devise solutions for them in the chosen language. The language only determines whether or not the problem can be solved for the target platform and how elegantly and with what kind of performance it can be solved
"Great programmers may use and produce great work in any language." Perhaps you are right. But : 1-- Some languages should always be avoided ; 2-- Great programmers should never let average programmers tell them in which language to write code. (When choice has not been made centuries before)
Many people have an irrational fear of C++. I had the fear too, until I really began to learn C++. Now I love it. And, I disagree with the”C-flavored C++” idea. A problem is that not enough people have properly learned contemporary C++. Good C++ is much more readable, bug-free, and reusable than C-flavored C++.
The problem with C++ is that the language is changing too fast. I feel like C++11/14 striked a good balance with a lot of very useful concepts, and I hoped that the following standards would have been minor adjustments only. However each new version brings too many changes. 10 years from now, 'modern' C++ would look completely different from now and I bet C++11 will be deemed as the new 'old' C++ style.
@@alefratat4018 But in my opinion if you're a newbie those changes ought not to make a big difference mainly because the fundamentals of programming remain the same.
C, and C++ are the best and fastest programming languages in terms of efficiency for intensive CPU applications. Assembler is the fastest but inconvenient to code. However, assembler can be used to optimized C/C++ loop/call subroutines.
assembly is also tricky because it has the potential to be the fastest, it doesn't mean it will be. sometimes people do assembly not quite as good and it ends slower than C or C++.
If you write Assembly code, %99 it will be slower than CPP code because compilers are much better at optimizing ultra-low-level code. Rust is as fast and sometimes faster than C++
@@Navhkrin It's optimization not coding in Assembler. Just do a simple program that add two operands in c and compare it in assembler, you will see what I mean.
@@BattousaiHBr It's optimization not coding in Assembler. Just do a simple program that add two operands in c and compare it in assembler, you will see what I mean.
Many forms in the "hierarchy". Machine code and/or Assembly. (OG mode. ++ if custom compiler for higher levels) Procedural, that also integrates well with hardware. Memory must be manually managed. (Procedural C. Super powerful. Very difficult. Dangerous if memory management is not centralized to combat security flaws...) Managed languages (C++, C# kinda, etc) Object focused languages(Java, etc) Function focused languages(Haskell, etc) Very High Level Languages. Category: scripting (python, command line macros in Bash or Powershell, javascript and HTML...Kinda, etc) Python++ (script the scripts) Category: GPU (Vulkan, HLSL, GLSL, etc) That is when things get weird. Compute shaders for example are not even nearly unlocked to their full potential for anything other than perhaps nft calcs, coin processing(?) and mining... And certainly not in a form that harnesses optimized cpu multi-threading. Then the final weird not(?) is when you realize you can sometimes properly handle the usage of different languages. Cython and IronPython for example. Maybe Shaderlab or Vulkan for GPU stuff, or combined with various CPU uses for specific task optimizations. The GPU is absurdly powerful, yet sometimes inaccurate. (Swizzles, hardware code choices, etc) The CPU is absurdly powerful, yet slow af if misused. (Inefficient calculations that add up additively or exponentially, bad code and bad language choice, etc) Edit: That is all. I am done.
Those looking for a language that has advantages in concurrency, scalability and reliability should look into Elixir. It’s basically using the BEAM and Erlang created by Ericsson decades ago but is much easier to adopt for modern developers. Especially those familiar with Ruby.
When John Carmack speaks I hear my mind grow. I was planning on doing something else today but this turned out to be the most important place for my attention
My personal pick is Python. It's incredibly rich and has active communities in so many areas. It's not the peak when it comes to computing performance, but that can easily be done with C++ or C, and you can still use Python as a the interface to make the whole framework. Python is also very easy to learn.
When asked which Language is better. I ask what do you want to do, and what is your budget. My primary language is python, because I write "disposable" code. Which a rather small program to solve a problem that I need to do. While the program may run for decades, it isn't normally the main app, just a method of solving the problem for my org.
I have a feeling a couple people here in the comments didn't quite catch what he means by "real work" and completely misses the very message he sent in this interview. He's not talking about unimportant things, but performance sensitive areas - using the right tool for the job.
His comments on functional programming is awesome. Had I not delved into functional programming myself I would never had that ah ha moment learning how to think about programming.
it is obviously a provocative statement and sure if you ask Carmack, sb who is in the industry since the early days, he will probably go with the languages he is most familiar with and worked the most with, so C/C++ for anyone in the comments doubting which language they should learn: it really depends on your use case. there is no universal language for all use cases. languages like java, python or javascript exist for a reason, and you might get things done with it quicker than with c++. also the hate against Java / Kotlin in some communities is ridiculous. those are very nice languages to use. i feel like too many developers are salty about anything that does not put them on the throne of all developers
I had a pretty cool transition between coding languages. I went from VisualBasic -> Pascal -> Java -> HTML/CSS/Ajax -> PHP -> Actionscript 2.0/3.0 -> Javascript -> UnrealScript -> Unreal C++. Of all of them I have to say I enjoyed Actionscript 3.0 the most because in it's environment it was crazy powerful yet simple and did the job a treat both inside the browser and as standalone apps.
I haven't watched the 5 hour interview in it's entirety so idk if this came up but did John Carmack ever voice his opinions on programming for quantum computing?
He is(was?) not excited about it. I don't remember on which podcast he mentioned it. We have plenty of power right now with GPU/Dedicated ASICs stuff, Q computing is still too slow and unpractical, the only value about Q computing the community is bragging about is the promise to break into crypto stuff, there's(was?) no real interesting ongoing work according to him. Ruffly what I remember. It was 1 or 2 years ago. Maybe on Joe Rogan Experience's podcast.
python is the best language to learn vectorized operations because the disparity in performance when doing a for loop vs vectorized is astonishing. Then it has infinite packages to do absolutely anything you want in the back-end. Specially ML stuff with tensorflow and pytorch, i mean the libraries work most of the computation time in the gpu through CUDA or in the cpu through C, even though you are supposedly on python. Python provides code readability and extreme low coding difficulty, its libraries provide speed and versatility It's a shame Nim isn't more popular since it shares many aspects of code readability with Python while also being a low level language. Even in terms of speed it's comparable to C++
And Python has so much potential for video game and professional Application development. With its C/C++ extension, it can even match the speed of C/C++ language.
As someone that only ever learned and worked with Python (well except for the odd Bash script and "hello world" scripts with other langs): learning some C++ would be nice as I'm interested in quite a few projects that are built with C++, but it seems like such a big language and I'm looking for a path to learn just a subset of it so I can get a feel for a lang that's closer to the metal. What's a good book (I like books) to start with?
Always bear in mind that different C++ compilers, using the exact same source code and compiler settings, will produce very different machine code - especially as the source code becomes larger and more 'complex'. --> Where executable speed and/or size matters, there is always, ALWAYS room for hand-written assembly language from an expert.
There is no such thing as "best programming language" for the same reason why there is no such thing as "best hand tool". What would the best hand tool be? A hammer? Try polishing paint with a hammer. There only ever is the best tool for the job. And furthermore, that tool changes as technology improves. 40 years ago the best programming language for games was Assembly. Then it was C. Now it's C++. But C# is really gaining ground. Who knows about the future. So before asking "What is the best programming language?" maybe you should ask "What job am I trying to do?"
if 2:43 is right then rust is going to win, the most popular rust packages arent updated since years, it means once you written rust, it doesn't need to be changed often, finishing projects in rust is easier. Rust is actually good, just need some more adoption by big companies
that makes all the difference in the world, 30 years of; what did you actually produce again? Terry Davis wrote a Kernel, a compiler and a fully featured operating system in 7 years. What did you say you built?
Java java java Hard to learn But when you cracked it everything becomes so easy to code and maintain. Python is so slow. That is why internet is getting slow day by day even though hardware and internet speed is so fast. Also, in python or node for every work so many packages have to install all the time. After installation the package then have to make it compatible with other packages. Then have to update all the packages because God knows when some package is deprecated by the author with no backward compatibility. After sometime your code would be nothing but messed up. Java, c# makes things so simple. Write once port any where. So easy to debug, just put break points in ide. Maintaining is so easy also the expansion or adding new features.
John about rust: "I've done a little bit beyond 'Hello world', I've wrote some video decompression just as an exercise"
How to trigger other people's impostor syndrom 😅
I found that the best defense against imposter syndrome, especially when it comes to programming, is to recognize that there's just so fucking much within the field as a whole that you'll never know anywhere near most of it, and that everybody's skill sets are all over the place.
Undoubtedly, people are better programmers than me, in that there are people who have the knowledge and experience to better conceptualize a solution and better structure their code for a more simple and sophisticated program. But much like John up there, I'm not familiar with Rust a whole lot, all I did was just jump straight from hello world to writing a quick protype of a sound engine with no external libraries save for some win32. However, I'm also over here shutting the bed on OpenGL right now.
The thing is, there are some programs, some algorythms you could like to implement or to think about them. Following the known patterns leads to the feeling not of a challenge, but of a pleasant walk.
That made me laugh as well!
Naturally everyone can agree John is indeed a god of programming but don’t be quick to hit yourself down. I’d argue you could do roughly the same by following a spec or paper. After the obligatory console logging I try to make a non trivial toy app in a new language, web server, bitmap or jpeg reader, dumb synth or something with concurrency by doing the same. You can get very far in a language with just arrays and variables and very minimal use of their stdlib.
if you compare yourself with a living deity of programming well no shit, he is very good at what it does its that simple
I had forgotten how Carmack can just go explaining things forever almost without pause, with great clarity at that. What a great guy
I feel the same way about Wozniak.
And not answer the question while doing it
Isn't that typical of a programmer?
@@Little-bird-told-me old school programmer, from the 80s and 90s. probably from all diet coke + pizza
that's what happens when you put 100,000 hours into a skill.
I love how he says "We use Javascript then we have C++ for real work"
Even though JS performance has tremendously improved, C, C++ and Rust are simply still the performance kings.
I've coded in Assemby, C, C++, C#, Javascript, Pascal and various versions of Basic... But my first love will always be C/C++... Although I am very fond of C# and, for some reason, I've always liked Javascript! Despite the deep flaws in that language.
But yeah, people keep banging on about the coming end of C/C++... And it just ain't gonna happen... Not for the foreseeable future at least! And yes, people still code in assembly too! It's niche...Some might say antiqued but, the need to code at the lowest levels possible is still there. Perhaps now more than ever!
@@sdwone
If you don't mind me asking, how I can learn C and C++ at the same time, I really love the idea behind of each one of these language's, and my goal to expose my self to a deep undergrounding for CS and be one of those who built the tools we are using today, so how should I do it I'll be thankful for answer from someone have an experience like you
I really want to do it, I feel really frustrating ppl say that it's impossible to learn them both or C++ and it's so large you can't master it, etc...
All what I want to understand what and how tech we use today is built and how to build my own and achieve something like this guy
@@0_Dseven Dude, John's work at id is open source. Go grab the Quake code. Q3 had C and C++. Go mod the shit out of it as a challenge/educational experience. Before they released the whole engine, moding the game DLL in Q2 is how I learned C.
@@meeponinthbit3466 can you explain more, I didn't understand what you said or what should I do really
John Carmack is stunningly intelligent. How coherent and fluent his answers are yet always well thought out. Only respect for that guy
You get that with decades upon decades of work.
He speaks with the depth of knowledge and experience that I've heard from George Hotz on UA-cam, but Hotz is wily and seems quite quite sceptical of people. When I was graduating college the general view was that we needed a very simple language (syntax and mechanisms), but with great controlled power (do stuff without shooting yourself in the foot). C++, once advanced enough does a lot of that and I'm hoping Scala can get there with a ton of complementary capabilities. Getting the speed is a problem for all the interpreted languages though. Where I'd like to hear more is about program design for resilience to change and the ease of management with new programmers (which he mentioned). Google is good with generating ideas, but they require time to really hone their products. Go might eventually become excellent, but it will take a while. "A better C" has been a goal for many people for a while and C++ seems closest.
@@DanHaiduc not only decades of work, but decades of work at the forefront of innovation.
I was going to say it’s like he lives and breathes programming, but to say he dreams about it speaks for itself.
That's what I thought too. He effortlessly has some kind of a storyline without Lex having to point him in a certain way.
That’s my uncle!!
nice! cool uncle!
I don’t understand a damn thing he said I can barely operate Microsoft word lol. but yet here I am watching. Your uncle is responsible for Wolfenstein? that’s wild I played that back in the day when I was a young kid
Noice!!
do you program?
Awesome
"Train wreck of over-abstraction." I love it.
"It's not about the writing of the program but the life span of the program."
I wish John Carmack can do a masterclass that teaches all the Professors and Computer Science teachers what to teach.
It has been attempted. The problem is, you get a few dozen up and coming youths at a time and the lesson they don't want to acknowledge is one learnt after spending months trying to understand old code bases. It's very slow progress when it goes well, and when it doesn't, it's extremely hard to tell; and meanwhile they'll blithely claim "this would all be better to just rewrite completely with «tool they heard of this week»". There's much to learn if you just meet your professor privately and ask when they wish they could teach!
Things change. The tools and requirements when I got my BSCS 35+ years ago are not the tools and requirements of today. 🙂
That man speaks my mind. My experience. The wisdom I gained over years. I mean, I don't dare to compare with John Carmack but what he says is exactly what I learned through my experience and mistakes. Couldn't agree more.
There's no best programming language and great programmers are not defined by language they use. Great programmers write code that lasts.
You, you, you.
I agree. IMO, this video is 100% programming wisdom
Carmack is one of those legendary programmers that truly deserves the accolades. When he speaks on these topics, it's always worth a developers time to listen - even when what he is talking about here is essentially common sense to senior developers, the fact that he has considered it and agrees says we're on the right track.
Uncle Bob? Is that you?
how can i be a good programmer kasuha
"I did basic hello world and video decompression" LOL
I can't write a video decompression script in a language i have eight years of experience
C++ dev here, my 2c... I agree with JC 💯 in that I don't overly embrace metaprogramming or functional paradigms as my core approaches, but I love the lessons learned, like DRY separation of concerns, and immutability of data as it is passed around threads. C++ is a scalpel that gives you complete control. You will always pay more than you think for garbage collection and weak typing. For me, C++ is powerful and simple read: elegant) to start with, and finish with. Coupled with inescapable JavaScript, it's all I need at this stage. I use node modules for all my scripting needs. Focusing on just these two languages as my core is very helpful for my productivity.
What John starts at 2:43 is perhaps the most important part of ANY programming. It has been true since the 1970's when I started and is still true today. It is a KEY concept many, many programmers miss in their work....to the detriment of all that come after them...and to their organizations. It was true with assembler, COBOL, BASIC, and everything after that. There is NOTHING worse than a uselessly tricky programmer.
And that's why C is king, and people who don't write C will never be understand. It doesn't matter if it takes you one month to write something in C that could have been written in Python in a day, because once it's written, literally every programmer of C will be able to understand it without problems, and appreciate it.
Linus Torvalds has mentioned this aspect as well. There are no variants of C: C is C. Whereas in C++, Trolltech C++ is a different beast than Mozilla C++, which is different than Google C++.
very few new shops and projects depend on Java and Java-based technologies...OMG jajajaja with this you lost us all..dude.
That's not what he said, though.
He made a general comment about how the most useful thing to do is to write code that is long-term sustainable and easily adaptable.
This is a separate issue from "tricky code" entirely.
@@kurzackd This is true but I was using tricky to mean something not easily maintained/overly complex/ poorly designed etc etc
@Ayy Leeuz Sooo true. You hear 10,000 keystrokes per hour from an Indian's cube...but they accomplish almost nothing.
I studied C and C++ primarily back in the 1990's when in CS curriculum at university. While I have dabbled in other programming languages from time to time. C and C++ are still very much my go to languages for anything commercial or personal. These languages are about as mature now as they ever will be, even though they may (and hopefully will) still continue to grow and evolve. There has been very little I haven't been able to do with them. They work and I am comfortable working with them. I don't foresee either dying off anytime soon as they are interwoven in everything we do. While many of these newer languages may have certain things that are appealing, I just haven't found a solid reason to put a lot of effort into fully learning another language.
@@carlk.3264 How about Golang?
I started on C, spent many years with it in embedded stuff. Then we started using python for tooling around it. And with python turning problem into solution is just sooo much faster. I followed the python into web dev. I don't do much that cares about performance, the database, webserver and bit math/ai libraries do that. What I do is the logic that binds it all together and being able to easily express that in a very readable way is core and not something I could give up.
Nice!! You got John Carmack! This guy is one of my heroes!!
I had the pleasure to meet John back in the Mesquite TX iD cube building around 2000, I was invited by Graeme and got to test Q3 team arena . I then got to listen to John at QuakeCon 2001 also in Mesquite TX. Being a huge Doom and Quake fan, I've always admired John.
i was in school for programming a few years ago and they were pushing java. they were acting like c/c++ was obsolete. after that level i think it just gets more specific, but the industry at that time was more based on java. i taught myself c/c++ when i was a kid, so that kind of bothered me.
It's so refreshing to see someone who's both smart and understands maintainability. If someone breaks the product because they misunderstood your code, it's your fault too. If they misunderstood because you broke a convention, it's your fault exclusively.
I've met programmers who loved the idea that they wrote a program that was difficult to read and understand. That it made them smarter than everyone else. They're fucking idiots.
Code maintainability & readability are required to be considered good code. Leave your ego behind & write something others can actually use and extend.
These guys are both brilliant. When I was in IT back in the day, I was a serviceable, average programmer who could setup databases, run reports, whatever, -- minor stuff. I even worked at a place that brought in tons of foreign contract programmers who were below average in my opinion. So my question is, what is all this stuff I hear advertised such as "Tired of your current job? Learn to code in 10 weeks". -- "Don't like being a waiter? Don't like being an auto mechanic? Learn to code in 10 weeks". How is this even possible these days that everyone should turn to "coding" as a career? I assume they aren't getting hired by Google and Facebook.
I think people can "learn to code" in a week with their nose in a book, enough to teach themselves and try new things anyways - that's how I did it as a kid.
10 weeks is enough for an entry level cybersecurity+networking course, introductory web dev, introductory IOT. sure, they're not getting hired by google or facebook, but maybe a local school or state facility needs an "IT guy".
There are two type of courses. The 10 week / x hour courses are a social media industry. It's nice to refresh a language but these doesn't make you a programmer. They just take you by the hand and guide you trough an environment.
Then there some older experts or profs giving courses. These are really great for people who are allready programming. As they show you a lot of problems and tools and how they link to things you already know.
But the once Google, Facebook, "Elon" needs are those that know enough math and computer sience that they can design an algorithm and implement it in an ever increasing mess of a codebase.
To get there you need to be skilled with math, because the easy tricks are most likely done already, and you need to constantly work on or evan solve real problems. So getting a certificate or a degree is a good starting point but the company you work for and the tools and problems they make or give you make great programmers like these two.
I am very into coding not because I want to get a job as a programmer, but I am owner of my own architecture firm and I want to learn to automate a lot of stuff I know that need automatization but there is no solution for me right now. I had experience in other stuff, but now, there is no programs that serve my needs. So I want to learn to solve those problems that only someone in my position of being a professional in a no software business can solve.
One, nearly every company can benefit from programmers automating some process, so there is huge demand for devs. Two, many problems do not require expertise in software or CS.
Often, business just need code that runs. The last bit of expertise is not required unless the code is crucial for business operations. It's cheaper for businesses to hire 3 average dev and 1 expert dev than 4 expert devs.
While I absolutely do not want to discourage people from going into Software development I have to say those courses are somewhere between rip-off and misleading people.
1) Nobody ever became a good programmers least he had some affinity to Computer, mathematics and logic beforehand. This can come in different shapes and there are those cases where the 30 year old car-mechanic who had an affinity for Sudoku and building mechanical gadgets and tools suddenly discovers that he always had this affinity for mathematics. But those are rare.
2) There is lots of rip off course addressing people in economically disadvantaged countries for whom becoming a silicon valley coder is the dream. It a shame because at worst people loose money in sham course and at best they produce sub standard, unmotivated Software people.
3) And then there are genuine companies trying to fish for the gems in a sea of unskilled people.
The signs to look for, for a good course is:
1) There is co-sponsoring from a company, which is genuinely looking for people.
2) There are entry criteria and tests. They actually reject people.
NEVER take such a course if they just take everybody. The best way to test your willingness and talent is:
1) Find a person who knows programming. Ask them to give you direction, NOT to teach you in detail, nobody has the time to do this.
2) With their direction, find place in the Internet offering free tutorials and excercises.
3) Once you done with basic tutorial, let them give you some "boring" real life tasks. Parsing and scanning files, reading a table in a database in filtering results into another one, cleaning up file system, Exporting and cleaning Excel sheets etc.
This is really great to hear, as a C programmer who studied first Java and then Functional Languages in school but then wanted to go work for a company that uses C and had great C programmers I wanted to learn from. Just like John says imo functional languages are a great way to expand your view of programming and software design but then personally I wanted to actually learn from the bottom up professionally and in an environment where good engineering and performance was really required.
This "C flavored C++" is something I've heard from several programmers I look up to, like Jon Blow, Casey Muratori and now Carmack as well. It seems to me like good advice, though I would probably lean a bit more towards the C side than maybe these would. I feel the few times C++ clearly outshines C I can usually feel C's simpleness still be a strength in its solution to the problem. Eh, you can't copy your hero completely I guess :P
Following what you said I think C has a lot of virtues and the future at least of C and of C++ is to tighten up the language and their paradigms. There are a few things that appear to have grown uncontrolled. There are some interesting suggestions coming from the designers of new languages. I think it would be better to have a more convenient approach to build systems that is provided with the language standard rather than tools associated with scripts.
@@jwadaow Yeah don't get me wrong, there are several things bad and wrong about C (and even more wrong with C++ imo :P ) and I don't hesitate learning and testing out new languages.
It is just that if you want to go deeper and learn how the computer actually work and how to actually make it work fast and what actually are good solutions and what actually is hard problems in a computer system C is probably your best option. I feel like all programmers should know a little C and probably coded some programs in it to get a feel for how it is like. And it will probably always be useful to know, since there will always be C code out there in use.
I agree the build story for C (and C++) is horrible and clearly something that should be improved. Personally I think Zig's approach is very good for this, where you keep the build system within the same language (heard Jai does it similar).
I am also very open to what Rust is bringing. I know from experience pointer and memory management in a large codebase can be horrible and scary. However, I am a bit scared it is walking to towards C++ a bit but I like the ML-flavor it is adding so I think it will do good in the space.
I wouldn't even bother with Java these days. Start with C/C++ then go for a higher level C=based language and master that. Something like JavaScript or C#
@@jwadaow One of the wonderful parts of C as well is that because of how absolutely simple it is, there are also a whole sea of different compilers available for it, for almost any platform you could ever possibly imagine. And not only that, these days you can even straight up write scripts in plain C code for performing very specific but extremely performant computations with almost no overhead (except for the system calls, which are of course a big one).
To top it all off, it is also very easy these days to bootstrap. C++ is absolutely NOT very easy to bootstrap in no way shape or form.
For me the good thing about C, if done right for sure, it only does what you wrote. And also hardware design languages are very C like so you stay within a set of rules.
Where C++ shines is encaptulating and messing with seriell or parallel compute. It can hide algorithms, implementations and hardware specific data so well that you don't need to care and see it while building the system.
Also for dynamic programming where the data format and the right algorithm are just known in runtime C++ is really great with it's way of linking operations as lists and swaping the elements on the fly.
I did a Video Decompression with Rust, just for exercise ^_^
I've been through the whole lot. From BASIC, Pascal, early C++, right through "web languages", Java, modern C++, Obj-C, the whole OOP, MVC, MVVM paradigms- creating systems and abstractions with all the design patterns - and finally come back out the other side, to simple, elegant, C. It truly is the best way to go.
I'm getting there myself. I do a lot of (very) full stack work in the IOT space - with everything from C to PHP to Scheme. The best code is code that's easy to maintain and doesn't try to do anything tricky.
There's a lot to be said about the different paradigms however - especially how they affect maintainability and elasticity down the road when reqs change. And they always will.
the best way to go WHERE?
the best FOR WHAT?
will you write a web app, or a mobile app in C?
apples and oranges...
programming languages are just TOOLS, and tools are suited to specific purposes.
you sound like a carpenter who decided: "hammer is the best, hammer is the way to go"
or a doctor who goes "i think stethoscope is absolutely the best"
What makes this guy a great programmer is not his choice of C++ but that his choice of C++, largely influenced in reality by his niche and era overlap, was secondary to his desire to get as much done as he possibly could.
He didn't have a lot of options though. It was almost inevitable that he would pick C/C++ when he started writing the code that made him famous.
@@judgedbytime sure he did, he just chose the best option.
@@sprenten1 What options was he choosing between?
@@judgedbytime he had other options, but c/c++ was easily the best option as it is now.
@@judgedbytime At first, maybe not. But over the years, as options appeared, Carmack is the type of programmer that would evaluate and look at whatever was happening in computer science. If moving to something else made sense, I feel confident he would have done it.
From a maintainability perspective, I think the best attribute of a programming language is how many compile time guarantees the language provides. So newer languages that have optionals built in to avoid null pointer exceptions such as Swift and Kotlin are strong choices for the best programming language.
You've clearly never seen Swift 5 projects or Swift code written explicitly in implicitly unwrapped optional.
Swift offers you the door to paradise, but also gives you a gun that shoots infinite ice bullets containing active anthrax and smallpox.
@@alexfrank5331 You can write bad code in any language. The idea that the compiler can give you additional information and catch more errors if code is written well makes it better than a language that doesn't do that if code is written well. I'm sure you can rip the safety off of any language with anti-patterns.
I still can't believe the first thing John talks about is Python.
If I was him, I'd Linus Torvalds it up and say something weird like "Yeah, if you like programming languages without brackets, you should try x86 Assembly"
Nice! a mention of OpenBSD which isn't talked about enough. My favorite programming language is any language that allows me to get a task done without too much hassle. Lately, that's been Python, but I've also programmed in Java, PHP, Perl, and sh. I learned C and C++ but never used it for work, since most my work is more Sys Admin stuff.
PHP was so much fun. I wrote a custom forum system in php in 2004-2006. And then they added objects... 😭
There's certainly a difference between bad Python code and good python code.
Though the problem is that the number of bad programmers in the python world greatly outnumber the actual engineers who actually know the language and not just copy-paste and cross-fingers, so... RIP.
John Carmack is such a skilled programmer.
As always, it depends completely on what you want to build.
No way, you got John Carmack. I've got to watch this one. He's probably my favorite Rogan podcast episode
I've used Python in a limited amount for a coding challenge processing and plotting a 9M record log file, but got great performance (~2.5 minutes) by using Pandas to take a relational approach in order to avoid looping the data, which would be disastrous with any scripting language.
This isn't mentioned, Python forces you to optimize
We love dynamic programming :)
I like the respect towards functional languages or functional style of programming - it seems like anyone still programming past a certain age gains it because of the reason John articulates. I've been programming for 30 yrs now and I have colleagues who program for "only" 15 years, and they seem perfectly comfortable with mutable state, as I have once been. I don't know whether I grew wiser, or my brain has deteriorated somewhat and can't wrap itself around mutable state. It's a little of both, I guess. I suppose you don't write an operating system kernel using functional style.
Operating systems are indeed written in particular styles; mostly state machine, but some higher algorithms in scheduling and memory management, with a focus on actual steps in hardware. While they likely won't have a mark and sweep style garbage collector, they will have reference counting and implicit priorities (e.g. which memory page can you discard when you need more? when do you run the work of wiping freed pages for reuse?). The key tends to be isolation; if you're mutating your state, make sure you're alone in accessing that state. If your work takes time, see if you can do it without interrupting other work. Side effects remain anathema; so make very clear where they exist, e.g. scheduling points. If your work doesn't take notable time, make sure to squeeze it in before you do the overhead of switching back to user space.
OS developers thus focus on costs and risks that are often further from mind in functional styles, even if they're not necessarily less efficient at them. If we could have a class of drivers that operate entirely in STM with bounded RAM, that could provide a considerable gain. Engineers have planned for such usages, e.g. with microkernel architectures and multiple privilege rings, but it hasn't quite caught on. I think two factors tend to dominate why not: short path to understanding what precisely is executed, and (sometimes excessive) focus on overhead.
The really sad thing is, a lot of that overhead could have been removed on a hardware level. If you have the interest, take a look at e.g. CRASH/SAFE.
A seemingly more successful initiative today is F* and Project Everest.
In terms of simplicity, Go seems to be a good option. There isn't tonnes of syntactic sugar. For most operations, there is only 1 good way of doing it. In other languages, there are 10 ways to do the same operation, which makes code bases differ significantly.
Agree and that leaves more headspace for thinking about the actual problem. I like Go a lot
Myself to a senior dev "What is the best language for automation?"
Senior Dev: "What are you best at?"
Exactly. There's no best language , coding is an art and the syntax is the brush. Code what you want with what you want
D is a fantastic language :-) ... high performance, lots of paradigms available.
"We use JavaScript here and then we use C++ for real work". What a jab.
Very accurate tho. Still, Java is probably the one you should learn if you want a job. C++ or python you should learn if you actually want to build programs.
Not really a jab. JS is what you need to use for working with the DOM. Any other non-dom related operation/algorythm/data structure can be referenced to C++ that's compiled down to op codes
He's phrasing along the lines of UI vs business logic (server side). Not really a jab. My days are in JS these now and this makes sense
The great programmers in my mind are the ones who do the best things for the lifecycle of a project and have the skills to build systems with minimal defects escaping while not requiring a fully specified description of the system to do so. That's my team leader brain working, but I've written code for more than 3 decades, and that's all I've been able to derive to answer that question. It's not so much them working on big things or having a big following as much as it is just what's the brass tax. It's that.
Coming from primarily a C++ background I took up Golang a while back for a specific research project and initally I really liked it as it was quick to get going but with time and size the restrictions, the abscense of a sensible standard library and poor encapsulation really started to get to me. The addition of generics is a good thing but it just feels like there're some serious basic flaws that will be hard to overcome. At this point i'm not convinced, but wouldn't classify myself as fully proficient. I probably wouldn't do it again.
Python for me has the best syntax to read, when well written is compact and it speaks for itself (I started with C back in the early 90s, I'm just 7 years into python)
You can do the most with the least lines of code. Ideal for ideas, but the speed isn't suited for high speed applications that use nested loops. But extremely easy when debugging, no compiling necessary.
Nothing beats python's syntax in terms of readability. I just wish it didn't use indentation to define code blocks, I want to write donut-shaped progams :(
Go is my favorite as far as something that is easy to right, easy to understand, and can actually perform in a production environment.
@@jessejayphotography depends on what you mean by production environment and depends on what you mean by easy. For example I took a look at how you read and write data from an SQL database, and calling it easy to write and easy to understand is strong statement :)
Im just starting out learning programming, but my take away from most amazing programmers I’ve heard is that great programmers follow some rules:
- make the program simple, not complicated
- document the code well. If no one else understands it but you, you just wasted more overall time than you saved
- understand what it is you are actually doing. It’s easy to see a method and know it does what it does but not know how it does it
- always strive to improve. Revisit old work and redo it as you progress
- practice a lot. It’s like a spoken language. A comparison might be that you “know some” French but talking it alot and with someone else will greatly speed up your progress
- plan your work before you start. Jumping into coding can easily make you lose yourself in abstraction, while also making it harder to seek guidance since you might not be able to explain what it is you seek to accomplish
If you have anything I missed or got wrong don’t hesitate to correct me! :)
Good programming language is one which does job well. Javascript is good front-end tool to make websites work. Assembler is great for firmware and controllers. Assembler may be great, but try to use it to make a date picker in a browser...
Last 20 seconds at 8:09 are exactly my condition right now.
C++ really beautifully brings my creativity and to make big(long-term) projects
But being adult about it, maintaining it, refactoring, design patterns and stuff...
But I love it. I'm learning.
lekker jy
I've learned many, and c# is the one for me, just keeps getting better and better
C# and powershell is all I want to use
yes! c# is the best
Sometimes I hate working in C because I feel like I'm making the bricks to build my house myself when I should just be buying them. Then when I use a higher level language for my bricks I end up wasting an entire week trying to find the ones I want, not finding exactly what I want then end up making them myself anyway lol
as a beginner level python user, i already have a love hate relationship with it. i use it for some minor project management automation. i can stitch together a program in 20 hours but it would take 100+ hours to optimise to the point where it doesn't crash our server. like this dude said, 3 layers of _for loop_ is enough to test the limits of the best cpu and ram. recently i've started playing around with LUA for inspiration. LUA has only 21 reserved words. it forces you to be creative in solving complex issues. i might use LUA as draft outline for future python projects.
That's what makes python so ideal for prototyping. You're not meant to do nested for loops if you can avoid it! So python uncovers bad algorithms early on... then when you re-write in rust, you'll have it 99% correct the first time.
Just use dictionaries liberally in python. The python dict is comparable to C++ STL unordered map performance.
IF - THEN -ELSE IF - OTHERWISE IF(a.k.a BUT and watch out double-t or it hits you well...). Removes nested clauses if{if{}else if{}} to if{}else if{}otherwise{}.... Provides clear view to code (no nesting) and opens pathway to 2-way logical programming. if A==1, B==2 then .. .. otherwise if A==-1, B==-2. then... No nesting no need for processor to run backward to main clause. Easy to understand when reading code what is aimed.
John: "I've done a little bit beyond 'Hello world', I've wrote some video decompression just as an exercise"
Me: "I've done a little bit beyond 'Hello world', I've wrote 'Hello world
' just as an exercise"
😅
1:23m Python for the cobbler! I like it!
2:10m The value of years studying Functional Programming (LISP, Haskell, etc) on "C-Flavored C++" non-abstracted work." (Para.) to effect life of program adaptability ("how programs can bend and adapt".)
1:29 Yup, Python is definitely a "glue language" and should be treated as such.
I would say the best language is the one that pays the bills. Don't really love Java as a language (though it's getting better), but that's where all the jobs are.
This guy is the reason I got into C++ after college. He is the goat!
World-class for sure, but I would not deem him as the goat.
PROGRAM Hello ! This is a ForTran program "Enough Said!"
WRITE (*,*)'Hello world!' ! default input (Text) and standard output (screen)
PAUSE ' ' ! This is a pause to allow the message to be read
END ! before the program closes with the END
Can also put the first man in space.
I believe that Python is the best language in terms of syntax, but of course C++ is best for performance.
I think that the best language possible is easy to read, powerful, and compiled. Memory management should (ideally) be solved by compiler. Pointers need a better syntax, as *x can mean "pointer x" in one context and "dereference x" in another
I really think Python needs to become a compiled language...It is just as powerful as C++ in terms of application, while being way easier to read. Would you prefer
#include
char *msg = "Hello world";
std::cout
Look at nim lang 😊
"I believe that Python is the best language in terms of syntax"
Python is a total loss. If, no matter how, your source file loses tabulations, your script has to be thrown away...
As a programmer, listening to this guy talk gives me a massive inferiority complex.
It really does make me a little bit sad that Python can be that inefficient for "serious" applications, because as someone who's not a particularly talented programmer, I've always loved how easy it is to write Python that just works.
Try go then, it is fast, simple
Yeah its slower , not preferred by competitive programming coders.
@@vagabond7988 why it being used for lot of things tho? For example, horst (the person that hacked apple before) use it quite a lot in his stream
@@slowtyper95 Because its a very easy scripting language that can call fast c/cpp code that does the heavy lifting. The feedback loop of writing python is very short so you can write a lot in a short time.
There has always been a trade-off between performance and ease of use when it comes to programming. As I see it, Python is the modern-day equivalent of the BASIC that was built-in in 1980s microcomputers; You feed it to the interpreter, and it handles all the details like type checking or memory management for you. Inefficiencies are just par for the course.
I’d love Lex to define what a “great programmer” is. To me someone who is pushing the boundaries of a language and creating genuinely new things I would consider great. But many consider those who are quickest to solve for a problem the best.
A large project needs programmers to collaborate and support each other. The genius's role is to push the boundaries, but they can't make the thing on their own.
For me, a great programmer is somebody who produces elegant code that has a logical structure that is immediately recognizable to anyone who reads it. Fluency, in other words.
Hes so right about the multi-language projects and maintainability of overly customisable languages
Like I absolutely love scala and its a great language for prototyping and portable data management, often even better than python for simplicity just lacks libraries in some areas, but I would never want to work in a large team project on it because you'd have to spend more time on reviews and documentation than coding to keep it maintainable
Ashame he hasnt spent more time on rust, would be interesting to hear his opinion on it
What? Scala is the most maintainable language. You have the best type system, and your pick of effect systems or actors for concurrency
Scala here too
@@fluffysheap having broader choices doesnt make managing large code bases easier, in fact it often makes it more difficult, and the fact that you can have such different paradigms and implicits means its insanely easy to write code that very few people can read, you have to have either senior devs that all share similar opinions or a lot of criteria in your cosing standards and a lot more time in reviews to stop both "too clever" and messy paradigm shifting from happening
And what do you mean by "best" type system its my favourite for sure, but best at what?
Theres no best type system for all purposes, thats like saying blue is the best colour
Like if youre comparing it to java, c++ or javascript then sure its not likely to have more standard management overhead than them, but thats a very low bar to set
I am a simple man. I wrote my first program in C++ in my high school. C++ is my favourite.
"I've only gone a little bit beyond `Hello World`, I wrote some video decompression work" absolute legend.
Python. Ya I agree on the loop stuff. You have no choice but Cython's static typed variables, which alone can reduce times exponentially. Ya know 8 sec down to . 2 or 0.02 for an abstract loop performance test.
I don't wanna like his C++ choice but it's true. I wanted C# because I loved the method signature and the various arrays like jagged but Microsoft CLR is also slow. ANSI C is tedious but almost essential to mix with python. I think python was made not realizing it would take off except for plugin frameworks. Like why dynamic typing and why not binary compile? I feel like java was given new life simply because of Android ART compile.
Haha, I love how he didn't like about the JavaScript/React, and indeed it's always easier to keep one language across the entire stack.
It's fine, just my typical day of backend developers despise JavaScript/typescript along with web/frontend development.
But hey, don't forget we can always deliver best user experience by chance. Don't limit yourself into programming perspective solely, we work with designers and have a lot of chances to share thought across industries, which indirectly benefits the way of writing maintainable/readable (because it's somehow UX related) and performant code with whatever languages I need to pick up.
Web development is so crazy (I guess it's because JavaScript is so bad, haha) that there is a new framework out along with its own syntax almost every year, I constantly heard about experienced backend devs rant about them, comparing different tools without any knowledges. In comparison, I rarely see experienced frontend devs rant about backend tools/langs they don't know. The reason is probably because frontend still need to understand a little bit of backend so we can communicate to request the data efficiently. So I'm totally OK if I need to switch languages from js/ts to web assembly. rust or even a C++ web language that is far superior than typescript in 5, 10, 20 years.
It's such a chaos, but it keeps me open-minded, I never keep myself into particular language or programming paradigm (such as OOP). I guess im at least better than stubborn devs who are pretentious about the language they are using.
Lmao it's very accurate what you describe here. As a backend myself, I catch myself sometimes having elitist thoughts regarding frontend: "everybody knows that frontend isnt even programming"
@@ilikecommenting6849 I think another sad truth is that many backend devs' daily jobs is not further than writing SQL to query data from DB, and then send the data to somewhere. It's purely CRUD and data -> data. Most (including frontend devs) wouldn't touch bleeding edges technologies, or architect a whole structure. In comparison, frontend might need to handle many application level optimizations (avoid duplicate API call, extra component rendering, client side data management/synchronization) besides getting data from backend, and checking lib combability issue. In worst case we need to write many "smart"(hacky sometimes) code to smooth out huge data rendering. It's actually math and algorithm intense. Of course, ideally we just want to render whatever from backend without any further actions. So it's data -> (data, optional) -> UI. I believe it's because our end result is tied to UI, it gives a false impression to the backend devs.
You just don't know how many times I remind backend devs to check their data process (like n+1 issue, unnecessary handle data after using sql, accidentally override existing apis) when the entire process of getting and rendering data is being slow. I just can quickly figure out the issue is from the frontend or backend.
Another subjective observation from me is that many backend devs constantly flex about how fast the tools/language they are using. All the fancy concurrency behaviors and low level memory address manipulation/optimization. Those has nothing to do with the code they are writing. They are just benefiting from those works but never being part of them.
Frontend devs just love to comparing how fast the tools they are using, and then say X framework is dead, it's also really annoying
@@doc8527 I do both frontend and backend. I would definitely be more impressed by a great frontend dev than a great backend dev, since javascript and the whole ecosystem around it is constantly working to throw you into the pit of despair. Whenever I'm stuck on some horrible intense problem there's a 95% chance it's in javascript. Meanwhile when I need the backend to do something I just tell it do it and it does it, quickly and with little room for error. It helps of course that most of the backend work i'm involved with is in fact CRUD, that's just what most businesses need, but even when there's something actually fancy to do it still ends up being way easier to get right with static languages
@@HamidKarzai While I love frontend work because of the immediate visual feedback from the browser, it’s kind of hell on earth. Not only are you having to implement designs with CSS but also a lot of business logic and keeping it all scalable. When the Scala guys get a task, they just write it, test it and done. It seems like FE is the most frustrating role on the team.
6:30 "and you have C++ for real work" yep.
I mean, everything is just an abstraction on top of C++ at this point anyway, the browser is written in C++ and has the main native application loop, it's just that cross platform is so intensely in demand so for most developers a browser running the code is the most convenient way.
I wrote my first C++ application 7 years ago and I just fell in love with it to the point that I went out of my way to write machine learning in C++. it's difficult to write good C++ code but it's very rewarding
I totally agree with you 👏🏻
I only code in c++ (I make video games in UE). What's difficult about it compared to other languages? I've never even studied a language other than cpp or JAZZ (blizzards proprietary language for wc3).
@@mr.doctorcaptain1124 I think Lex said it all. C++ expects you to be an adult writing your code.
you certainly can write bad C++ code but when it scales it will be a nightmare to maintain that of course given you actually manage to get to run in the first place.
@@mr.doctorcaptain1124 well in UE u dont really write c++, you write archaic unreal's language that resembles c++
Where did you learn to write ML in C++?
Javascript is the best for most application, flexible, forgiving, fast enought, easy to debug 😃 for heavy lifting > C++
To Lex's comment, I would say that "really great" programmers are really great in whatever they put their programming attention on. That's because it has more to do with the mind of the programmer and the way he or she thinks and is able to construct elegant solutions, much more than whatever language they happen to use. If John Carmack wrote a program in Basic and put his mind to it, you can bet that would be a "really great" basic program.
This what today's HR personnel and recruiters miss when they use cold algorithmic searches to find programmers with "5 years" experience in "version 18.2.0" of React, or whatever flavor of the day forked spinoff language is popular at the moment. Their searches miss the true talent of "really great" programmers, who generally speaking, could be tasked with any project or any language and still produced stellar results.
This is also why people spent years going to a university to specialize in a degree on Computer Science. To them, a language is just another tool they use to apply their well earned skill. Would you reject hiring a highly skilled scientist simply because they had never used a "Heidolph 50ml glass beaker"? That's essentially what recruiters are doing when they filter very narrowly on select a specific set of language or framework skills. Imagine if the Armed Services asked questions like "well, I see here your resume says that you are a 4 star general, you've flown over 150 wartime sorties, and have successfully led several battalions in strategic military campaigns, BUTTTT.... have you ever used a GAU-21/A heavy machine gun? No? Well, I'm sorry, those are the skills the client is looking for. It completely diminishes what a person with a Computer Science background does and forces them to compete with "script kiddies" that have no real formal training in the field.
It's not "today's" recruiter. It's always been that way.
Notice that there's plenty of resource on how to be an interviewee.
There's pitiful little amount of resource on how to be an interviewer.
Is it a surprise that most interviewers are all kinds of bad?
It also doesn't help that many bad managers (and as Steve Jobs said, "most managers are bozos") just randomly call up a employee "hey can you go and interview this guy at 2pm today?" Even if that employee has never interviewed anyone before. lol
the best programming language is the one requires less lines of codes for the job. it's all about money. to produce "good software", you need a "compatible" language. a "general purpose" language is not really general purpose at all, IF the supporting libraries are good enough for the job, then it is your language. I don't really want to write 10 lines of codes to implement an algorithm, I would like to use the ones already implemented in the STL, put them together, make it work, precise and fast.
I wrote a lot of python now just because it’s easy to do things. Love c/c++. Wish I could do more with it.
You don't have the temperament to program anything -- you have built nothing
controversial opinion: Ive heard many smart people recommend learning multiple languages.. my response? to hell with that! I do not consider myself a naturally gifted programmer; my approach has been to immerse myself completely into C++ and the incredible, boundless array of libraries written for the C languages.. of course, one cannot escape the various scripting languages you constantly run into, but C++ is home for me
My favorite is C++. I also use Python, but I like C++ for performance. I think that C++ programming can become easy when you use it a lot. I tend to like to use just one language for everything and that would be C++. Takes a lot of mental bandwidth to jump around.
Rust is at 5:52 🦀
A line from a novel I read:
"There's no useless gu, only useless gu masters." - Reverend Insanity
Sums up my understanding of programming [1+Months]
Great programmers may use and produce great work in any language. Their greatness is determined by how well they understand the problems in hand and how well they can devise solutions for them in the chosen language. The language only determines whether or not the problem can be solved for the target platform and how elegantly and with what kind of performance it can be solved
"Great programmers may use and produce great work in any language."
Perhaps you are right. But :
1-- Some languages should always be avoided ;
2-- Great programmers should never let average programmers tell them in which language to write code. (When choice has not been made centuries before)
Haskell is the only language I've seen that's even approximately close to a well designed language.
Many people have an irrational fear of C++. I had the fear too, until I really began to learn C++. Now I love it. And, I disagree with the”C-flavored C++” idea. A problem is that not enough people have properly learned contemporary C++. Good C++ is much more readable, bug-free, and reusable than C-flavored C++.
The problem with C++ is that the language is changing too fast. I feel like C++11/14 striked a good balance with a lot of very useful concepts, and I hoped that the following standards would have been minor adjustments only.
However each new version brings too many changes. 10 years from now, 'modern' C++ would look completely different from now and I bet C++11 will be deemed as the new 'old' C++ style.
@@alefratat4018 But in my opinion if you're a newbie those changes ought not to make a big difference mainly because the fundamentals of programming remain the same.
C, and C++ are the best and fastest programming languages in terms of efficiency for intensive CPU applications. Assembler is the fastest but inconvenient to code. However, assembler can be used to optimized C/C++ loop/call subroutines.
assembly is also tricky because it has the potential to be the fastest, it doesn't mean it will be.
sometimes people do assembly not quite as good and it ends slower than C or C++.
@@BattousaiHBr Assembly is for masochist connoisseurs.
If you write Assembly code, %99 it will be slower than CPP code because compilers are much better at optimizing ultra-low-level code.
Rust is as fast and sometimes faster than C++
@@Navhkrin It's optimization not coding in Assembler. Just do a simple program that add two operands in c and compare it in assembler, you will see what I mean.
@@BattousaiHBr It's optimization not coding in Assembler. Just do a simple program that add two operands in c and compare it in assembler, you will see what I mean.
Many forms in the "hierarchy".
Machine code and/or Assembly. (OG mode. ++ if custom compiler for higher levels)
Procedural, that also integrates well with hardware. Memory must be manually managed. (Procedural C. Super powerful. Very difficult. Dangerous if memory management is not centralized to combat security flaws...)
Managed languages (C++, C# kinda, etc)
Object focused languages(Java, etc)
Function focused languages(Haskell, etc)
Very High Level Languages. Category: scripting (python, command line macros in Bash or Powershell, javascript and HTML...Kinda, etc)
Python++ (script the scripts)
Category: GPU (Vulkan, HLSL, GLSL, etc)
That is when things get weird. Compute shaders for example are not even nearly unlocked to their full potential for anything other than perhaps nft calcs, coin processing(?) and mining...
And certainly not in a form that harnesses optimized cpu multi-threading.
Then the final weird not(?) is when you realize you can sometimes properly handle the usage of different languages. Cython and IronPython for example. Maybe Shaderlab or Vulkan for GPU stuff, or combined with various CPU uses for specific task optimizations.
The GPU is absurdly powerful, yet sometimes inaccurate. (Swizzles, hardware code choices, etc)
The CPU is absurdly powerful, yet slow af if misused. (Inefficient calculations that add up additively or exponentially, bad code and bad language choice, etc)
Edit: That is all. I am done.
I would also choose C++ for its performance, type safety and ability to do pretty much everything. Python is though more compact and easier to read.
So judging by interview
1. C / C-flavoured C++
2. Golang
3. Rust(just a little bit of work done, not that much expertise)
The one that gets the job done!
After your job is done, you have to maintain it, if it's yours of course (not talking about consulting firms, who live mostly on bullshit code).
Those looking for a language that has advantages in concurrency, scalability and reliability should look into Elixir. It’s basically using the BEAM and Erlang created by Ericsson decades ago but is much easier to adopt for modern developers. Especially those familiar with Ruby.
I need to use different languages in different situations, but I only love Elixir and C.
When John Carmack speaks I hear my mind grow. I was planning on doing something else today but this turned out to be the most important place for my attention
My personal pick is Python. It's incredibly rich and has active communities in so many areas. It's not the peak when it comes to computing performance, but that can easily be done with C++ or C, and you can still use Python as a the interface to make the whole framework. Python is also very easy to learn.
Love Carmack, but calling any man other than St. Terry Davis the best programmer ever is heresy.
When asked which Language is better. I ask what do you want to do, and what is your budget. My primary language is python, because I write "disposable" code. Which a rather small program to solve a problem that I need to do. While the program may run for decades, it isn't normally the main app, just a method of solving the problem for my org.
I have a feeling a couple people here in the comments didn't quite catch what he means by "real work" and completely misses the very message he sent in this interview. He's not talking about unimportant things, but performance sensitive areas - using the right tool for the job.
exactly maybe the right tool is a quick python script
You don’t use python for efficacy or security. It’s just for pushing out personal projects quickly and for internal tools
His comments on functional programming is awesome. Had I not delved into functional programming myself I would never had that ah ha moment learning how to think about programming.
Did you learn the programming language patterns?
Lex: "[C++] forces you to be an adult."
Carmack: "No! It *_EXPECTS_* you to be an adult. It does _not_ force you to."
Learning C like the master himself. Beautifull syntax.
it is obviously a provocative statement and sure if you ask Carmack, sb who is in the industry since the early days, he will probably go with the languages he is most familiar with and worked the most with, so C/C++
for anyone in the comments doubting which language they should learn: it really depends on your use case. there is no universal language for all use cases. languages like java, python or javascript exist for a reason, and you might get things done with it quicker than with c++.
also the hate against Java / Kotlin in some communities is ridiculous. those are very nice languages to use. i feel like too many developers are salty about anything that does not put them on the throne of all developers
Agree on the “C flavor of C++” being the best for real work, but I love working with JS for UI.
I had a pretty cool transition between coding languages.
I went from VisualBasic -> Pascal -> Java -> HTML/CSS/Ajax -> PHP -> Actionscript 2.0/3.0 -> Javascript -> UnrealScript -> Unreal C++.
Of all of them I have to say I enjoyed Actionscript 3.0 the most because in it's environment it was crazy powerful yet simple and did the job a treat both inside the browser and as standalone apps.
Will you like Actionscript 3.0 the most even if isn't tied with Flash, just as a generic standalone language?
I haven't watched the 5 hour interview in it's entirety so idk if this came up but did John Carmack ever voice his opinions on programming for quantum computing?
No, I don't think quantum computing came up. Would've been great to get his opinion, maybe they do a round 2 podcast.
they didn't touch the subject.
@@watashiwahatchi 5 hours and the dude needs a round 2 where others (even Elon Musk) are done within 3 hours.
He is(was?) not excited about it. I don't remember on which podcast he mentioned it.
We have plenty of power right now with GPU/Dedicated ASICs stuff, Q computing is still too slow and unpractical, the only value about Q computing the community is bragging about is the promise to break into crypto stuff, there's(was?) no real interesting ongoing work according to him.
Ruffly what I remember.
It was 1 or 2 years ago. Maybe on Joe Rogan Experience's podcast.
I’m new to programming but isn’t c++ complimentary to embedded projects and Python to ml, ai. And isn’t JavaScript a language for the web/iot?
python is the best language to learn vectorized operations because the disparity in performance when doing a for loop vs vectorized is astonishing. Then it has infinite packages to do absolutely anything you want in the back-end. Specially ML stuff with tensorflow and pytorch, i mean the libraries work most of the computation time in the gpu through CUDA or in the cpu through C, even though you are supposedly on python. Python provides code readability and extreme low coding difficulty, its libraries provide speed and versatility
It's a shame Nim isn't more popular since it shares many aspects of code readability with Python while also being a low level language. Even in terms of speed it's comparable to C++
And Python has so much potential for video game and professional Application development.
With its C/C++ extension, it can even match the speed of C/C++ language.
Very encouraging in a way.
A good program should be easy to understand and maintain.
As someone that only ever learned and worked with Python (well except for the odd Bash script and "hello world" scripts with other langs): learning some C++ would be nice as I'm interested in quite a few projects that are built with C++, but it seems like such a big language and I'm looking for a path to learn just a subset of it so I can get a feel for a lang that's closer to the metal. What's a good book (I like books) to start with?
Scheme and the art of programming
I have been in IT 42 years. Your uncle is a cool dude and I agree with him 100%.
I'm always impressed by Lex, he is not afraid to tackle any subject and he has a very wide range of knowledge. Good stuff!
Did you notice how sheepishly he asked "what's the best programming language"?
Always bear in mind that different C++ compilers, using the exact same source code and compiler settings, will produce very different machine code - especially as the source code becomes larger and more 'complex'.
--> Where executable speed and/or size matters, there is always, ALWAYS room for hand-written assembly language from an expert.
There is no such thing as "best programming language" for the same reason why there is no such thing as "best hand tool". What would the best hand tool be? A hammer? Try polishing paint with a hammer. There only ever is the best tool for the job. And furthermore, that tool changes as technology improves. 40 years ago the best programming language for games was Assembly. Then it was C. Now it's C++. But C# is really gaining ground. Who knows about the future. So before asking "What is the best programming language?" maybe you should ask "What job am I trying to do?"
Good analogy 😂
A hammer haha
if 2:43 is right then rust is going to win, the most popular rust packages arent updated since years, it means once you written rust, it doesn't need to be changed often, finishing projects in rust is easier. Rust is actually good, just need some more adoption by big companies
I've been a developer for over 30 years now, and all I can say is that there's a lot of gold in this video.
The entire podcast is gold just to listen to, as are many of Lex’ podcasts.
I'm certainly gonna be watching more in the future!
that makes all the difference in the world, 30 years of; what did you actually produce again? Terry Davis wrote a Kernel, a compiler and a fully featured operating system in 7 years. What did you say you built?
Java java java
Hard to learn
But when you cracked it everything becomes so easy to code and maintain.
Python is so slow. That is why internet is getting slow day by day even though hardware and internet speed is so fast.
Also, in python or node for every work so many packages have to install all the time.
After installation the package then have to make it compatible with other packages. Then have to update all the packages because God knows when some package is deprecated by the author with no backward compatibility. After sometime your code would be nothing but messed up.
Java, c# makes things so simple.
Write once port any where. So easy to debug, just put break points in ide.
Maintaining is so easy also the expansion or adding new features.