Programming Languages I used at Google (C++ rant)
ฝัง
- เผยแพร่เมื่อ 27 มิ.ย. 2024
- If you were building a CRUD backend microservice would you actually use C++?
🚀 neetcode.io/ - A better way to prepare for Coding Interviews
🧑💼 LinkedIn: / navdeep-singh-3aaa14161
🐦 Twitter: / neetcode1
⭐ BLIND-75 PLAYLIST: • Two Sum - Leetcode 1 -...
#neetcode #leetcode #python
Bro lives in a Swedish prison cell
Lol funnily enough, it's similar to my Swedish student apartment. Except the prison cells might be a bit larger and better.
Lol
I'd actually live in a Swedish prison cell if it was that uncluttered
OK😂😂😂
hes just minmaxing bro
C does have a hashmap. It's called an array and it's using integers as keys.
🤣
Yeah in-fact it's a template specialized hashmap which is even cooler.
too bad the keys cant be modified hehe
That's certainly *a* way of looking at it. I'll stick to my implementation which allows me to use strings as keys.
It's actually a pretty good exercise to implement a basic hashmap in C. Would recommend
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off" :-Bjarne Stroustrup
Do I know you?
Dissed his own product soo hard LMAO
The funny thing is it's not even true. UB is UB and it's no more serious in C++ than in C.
@@isodoubIethe means that C++ gives you tools to reduce footgubs by a pretty large amount. However, when you fuck them up, they make really hard problems to debug. It's not really about ub, any language that needs performance requires ub (rust included...).
For example, instead of manually handling memory, you can use contructor/destructor pairs to allocate and deallocate memory for an object, making it less likely that you get memory leaks. However, if your class is movable and you fuck up your move constructor, your error will be harder to spot that if you used C.
@@vercolit Yes, I know that, but I still disagree -- the complete lack of structure in a C program will usually make it harder to debug than a C++ program that does the same thing. You'll still need to "move" things in C; the same semantics will be there if you want the program to behave comparably. The main difference is that C++ makes it _possible_ to make programs that would be too complex to write in C. Finding errors in such programs will be hard, but it's not the language's fault.
I work as a C++ developer at a smaller company, and I like doing my leetcode problems in Python because the simple syntax is a breath of fresh air lol
lol, im a python dev and i do leetcode in c++ because its nice to see run times under 400ms
@@penislicker9093 the grass is always greener i guess
Aaah, shut up! 😁
I've been into C++ for a long while, so I follow game developers and C++ experts and compiler implementors and C++ standards committee people on Twitter
A running joke among them is that if you feel like you know C++, you don't know enough C++, and after many years of experience you know enough about C++ to understand you don't know enough C++
I also joked about not even standards committee people not knowing all of the language, and an actual standards committee person replied to me saying they actually don't know all of the language
i saw couple things about c++ on ytb (a video about c++ new stdlib releases, templates, a video showing some standards, compiler reflection, smart pointers, )and more stuff (btw i barely coded in c++) and thought to myself(barely know c++, coded a bit in py, java and go) hmm ill give it a year and learn most of tthe language(it sounds complete whatever that means) well now i know better to not do that)
“the more I learn the more I realise how much I don’t know” Einstein
That was real for me. First eager to learn the power of C++, second feeling confident and third realizing the language is a minefield and go back to Rust where the compiler holds your hand like a child you are.
@@tiagocerqueira9459 Admirable honesty from a Rust enthusiast (Rust users are called enthusiasts). Me, I'm a badass so I only program in C. And by badass I mean that my code is bad and smells like ass. But what are you going to do when you were born an uncompromising bonehead.
@@Anriuko i swear every yt interaction today included some schizo behaviour. Still laughed. (My meds didn't make these comments go away 😩)
I work in Chromium code base and yes C++ still gives me headache even after more than 15 years of experience.
Just to clarify, there are of course more reasons why Google can't keep up with other companies.
Btw I know I've made some negative videos about Google, but that's just because the negative stuff is more interesting to talk about. I would say my experience at Google was 90% positive, but I think there are enough videos out there talking about the WLB, free food, etc.
I think there is a video on youtube about C++ style guidelines at google , so I can understand why you feel that way! As I am a java guy but I am currently learning oops in C++ . I do find the differences . Like there are some concepts like operator overloading , default parameters which are not in Java (and Java has a reason for not having them). But I still love java ,cause it was my 1st coding language, so I am kind of biased towards it.
@@satyamjha68oh boy operators overloading and such is barely the tip of the Titanic-killing iceberg
I'm sorry this comment isn't directly related to the video but man I love these newer videos of you on camera. Your original NeetCode videos helped me a TON when I was learning DS&A, but hearing you talk about larger topics like this and putting a face to the voice is just too cool. Many of your talks like this have sparked curiosity around a topic and then I have to go on a deep dive to learn something new. Thank you for sharing so much!
Personally I find a large C++ codebase more readable than a large python codebase, my exp is from working in aerospace where C++ and Python are the primary languages for everything
Explanation highly desired.
Python in any large project becomes messy. Particularly without types
Legend
Lmao, very funny.
these insights are so informative
You're right, C++ is an extremely performant language, but development time and maintenance often outweigh any major benefit in many cases.
It just requires more discipline.
Corporate C++ may induce fear, but using C++ in private is may all time favorite when it comes to programming languages.
Corporate C++ is really scary for new grads
absolutely. C++ is epic, but Google's style guide is probably the worst i've ever seen and kills joy.
@@carlpittenger wow, for me it's the only ok option. though of course it's a matter of habit. may I ask what exactly you don't like so much about google style?
@@niki4smirn from what i can remember, the main thing for me is that i prefer almost always auto (the language itself is moving in this direction, as well as C++ successor languages), but Google's C++ style guide just generally seems outdated and like it's attempting to keep their C++ as basically C with classes as if doing so keeps their codebases safer and less complex.
@@carlpittenger Good point. Tbh, I violate this almost daily. This is a particularly odd rule, given that I think all editors now support highlighting deducible type...
Still, most of the other rules make sense to me
javascript-on-a-backend-nonsense -- 👌
I do in js...🐐
@@user-qy1dy1ms9m please stop!
the sooner nodejs gets deprecated into oblivion and TypeScript become's a first class citzen, the better it's gonna get.
Maybe for a large company as google it makes sense and they already have services written in different lang.
But for new startup js on backend completely makes sense
people finally start seeing the truth
server-side JS was a mistake
Still I like C++ more than Java lol
I'm encountering a similar issue at my workplace. C++ code can indeed become quite intricate, especially with meta-programming involved. It can be quite challenging to navigate through its complexities 😅😅
c++ is super portable
if they like a feature they can reuse it everywhere
as someone who regulary isocpp content, i find c++ code more readable and flexible than any languages I tried
I can't tell you how relevant this rant is right now. I was pulling my hair out deciphering a backend service (recently!) written in C++, just to figure out that it wasn't doing anything more than simple CRUD functions 😢
If you intend on having a strict style guide for any programming language, enforced by code review, then you should have a linter that runs locally and automatically when you build and it should be double checked by an auto-build attached to the review itself. That way devs don't waste time locally, unless they're pushing stuff just to be casually and quickly seen.
literally clang tidy
Sometimes I had problems reading the GCC errors, I tried to use Clang. Much much better to read and understand what's going on.
the thing is that C++ is also suitable for those high level cases. You can use C++ in a safe way where you don’t have to manage all those things if you are not concerned about performance. Just use RAII and smart pointers for reference and you’re good to go
lot of newer programmers are surprised to hear some things are ran rarely, and don't understand how anything but speed could be a factor. different languages have different strengths and uses
I love these videos.
Thanks
Neetcode, can you do a video on backend vs full stack vs frontend? Seems like full stack is the new norm.
Some lang rules from the experience
1 learn lang at least 25 years old. 90% of coding today is done with the 30+ y.o. languages.
2 if you want to create a new lang you will probably fail, like so many newer langs (python being the exception for now). The world doesn't need a better lang but a better programmer
3 all (old) langs have pitfalls, but generally, all have a purpose
Personally.. i do JS, love C, admire C++. The life is too short for C++
I can see why Google doesn't want every microservice in the same solution be written in a different language. Sure, protobufs and all, but still - maintenance burden of 10 languages vs 1 or 2 is going to take a toll. Having said that, unless it's a mature product and has a large legacy codebase, there is no reason to choose C++ over, well, (almost) anything.
Thanks for making this video. This is really inspiring for us who aspire to C++ and Big Tech
As a C developer that frequently uses hash tables, I find this kind of funny. The standard library has no hash table implementation, but it doesn't need one because several dozen implementations already exist. Granted, they're all different and the standard committee is definitely never going to agree on how to implement such a thing with so many competing ideas, but there's nothing stopping anyone from just picking the one they like and using it. I've been using my own library for about two decades now, and if you've been at it for any length of time you should have one too. However, that said, I would fully expect anyone who's new to programming to not want to go through the effort and they'd be better off learning a programming language that does it for them.
can you share your C hashtable library
@@samuraijosh1595 I have to find some space somewhere that I can upload it first. I refuse to use GH, but I may sign up with GL, though only because setting up a publicly visible server anonymously is next to impossible.
Go feels like that perfect language. It's such a simple language, yet so powerful and performant. Not to mention the build times.
There's a few fundamental design errors in Go that I take issue with. The type system is one of the worst I've ever seen, for example.
@@lucass8119 only huge problem I have with the type system is no enums. But I can manage.
It would be perfect if it didn't have the pascal like syntax
@Bebtelovimab go inherited the := syntax, and the varname before vartype from pascal.
In C you define the variable type before its name. And in go its the opposite(like in pascal)
Joke is there are handful number of people who actually knows C++.
On the serious note the reason why C++ is so complicated are array of features it provides and when you mix them ur creativity is the only limit.
It has multiple class Inheritance(which most modern lang stay away from it) and mind twisting template constructs which produces countless combinations.
A google mention a day, keeps irrelevance away
"The culture at google is write things in C++ even though they don't need to be." Can confirm having worked there fore 4 years.
I was interning at google, C++ code was just unreadable for me
skill issues
Where's the Carbon at when we need it?!
I like the ending😂
Bro post videos on where we cannot avoid c++.
They're trying to fix this with Carbon.
Someday google will understand, that it's required to hire people familiar with language they will write. Someday...
But now they write c++ with 'senior' developers, which not know how to fix simple error
I was gonna learn C++ but I haven't even learned A through to B++
Me, a google dev who does cpp daily, who got scared shitless by the number of things that cannot be done easily in java.
6:13 that smile gets me Every time 😂😂❤❤❤❤❤
How can anyone enjoy JavaScript when there is C++?!
Why not use go vs java, you mentioned it was easy to read even if you never used it, and it's performant.
Yeah either would be fine with me. I just felt Java was the more natural comparison because everyone knows it.
Hence, Rust
surely rust is more easy to use than c++
@@nempk1817genuinely yeah. Its no Go or JS for stupidly simple syntax but its legitimately simpler syntax and semanticswise than java/c# and definitely moreso than c++. It’s somewhere between c# and c for language complexity. People only call it hard to use bc they cant be bothered to fix their bad programs
@@nempk1817Unironically it is easier to use. But some aspects of it are certainly painful. But it's mostly for the the library authors.
@@VivekYadav-ds8oz Can you say an example where Rust is more easier to use than C or C++?
I'd write Odin Lang for ultra performance code. I'm not even good at it yet, but it's just as fast as c or cpp and much simpler. Like..many many times simpler.
surely
C is about as simple as a programming language can be. if you're coming from a hardware point of view it all makes sense (pointers, memory etc)
it's as if you had sonething like a piece of paper and some color at your disposal. nothing fancy. but it all makes sense
the hard part is algortithms and data structures. C has no array, no hashmaps, linked lists, etc... iirc it has no mention of 'stack' in it's specification. (reason being to support old ass hardware that ran through mythic magic; to not limit the functioning of the language through the cpu's abilities)
C can be very inconvenient or nasty at times. error handling, string operations, arrays, lists, hashmaps, type generic stuff (preprocessor/void*)...
I think a better word for Odin would be convenient? Though I could be wrong, tell me what you think
It's easy to make a language simple when it doesn't do as much. Odin is not really a serious contender in any space where C++ is used because it has no answer to the memory management problem. Literally no answer.
I would say Mojo takes things even a step further. Simple syntax, but even deeper optimization opportunities with compile-time guarantees and access to IR.
I love C++ as well, but holy shit there are so many frameworks that have all these macros and other elements that it makes it feel like each one is its own language.
What about python? Without frameworks this language wouldnt even exist😂
“… it doesn’t even have a hashmap” end of video 😂
That backpack is what Amazon gave you when you used to work there ?
I hope I never have to learn google’s c++
At least C++ is not a good language to dabble in. You are probably not even getting the performance, only the headaches.
the elephant in the room - what are your thoughts on Rust?
C++ and c are the two languages I love but I still learn new things in C++.
C is basically on life support (C17 only fixed defects in C11. Though C23 will add a few useful features). C++ is a living language that gets a bunch of features every three years. Bit hard to keep up at times. Sofar every new C++ version has been a significant improvement for me. Though with the right libraries C++17 isn't too bad.
@@philipbotha6718 a good language is a stable language. You don’t want new features all the time - although some features in C++ I do really like and are a great improvement. But that’s why people in the embedded world stick with C, because it’s a simple enough language to prove and test your systems is doing exactly as designed without having to dig deep in compiler specifics and side effects.
Which is crucial for embedded critical systems. C ain’t going anywhere in the critical systems world.
Google should learn how to write decent C++ code, coz on average it looked awful, compared to yandex leaked code .
yandex leaked code? where?
@@phillipanselmo8540 torrents ofc. about 50gibs of them. or you can check some their open source projects they spawned like clickhouse(not sure if it's ain't c) or userver
Yeah apart from a few pockets like absl the quality of google C++ code is consistently awful. Chromium specifically is a disgrace.
@@isodoubIet I wonder which one. Coz I grasped some Fuchsia code (utilities mainly), google tests and some others and they looked terrible on average. What actual gems are there from google?
Were you happy working 9 to 5?
learning intro to coding in java and will have to take dsa in C++ is it cooked?
Yes
If Google was using a Microsoft language "Typescript", why they're just use "C#" to replaced Java and C++. C# exists to fixed both Java and C++ mistakes. I feel like Java should have been more like C#
dot net is horrible
Because by the time C# became good enough (.Net Core and even earlier than that, the whole ecosystem) there was an enormous amount of code written in Java that matured earlier
So why write code in a language that not as many devs in the team know, when you can just use Java
Garbage collection is not for everyone.
"C# exists to fixed both Java and C++ mistakes. "
Actually no, it's literally just to fix Java's mistakes. C# in fact didn't even learn from C++'s successes (see for example IDisposable and try... finally)
@@isodoubIet You know Java existed to fixed C++ problems but Java created more problems from itself.
Microsoft solution was, welp let just combined both C++ and Java into one language and let what we got 😏 .
Bro, that's like saying React existed to fixed Angular problems. Angular existed to fix JS problems. Vue existed to fixed React problems. Microsoft: "let bring Typescript into the table"
Maybe Google chose C++ as its standard because it wants to separate the people who love programming they would spend the time learning C++, or are computer science majors who are taught in C++, from the people who became devs only because they want the better pay but don't really have the talent for it? I don't know. But this choice of a language is definitely a decision made by a team who discussed this and settled for C++ instead of languages de jour like Rust or Java (which is kinda getting unpopular now.)
Google has been using C++ since the early 2000s at least, and Rust wasn't stable until 2015. Java isn't an option for some of the software they write using C++; for instance, Chrome needs to be in C++ primarily for performance reasons.
Bro has beef with C++
Sounds like teaching people Java is the problem. I despise that language.
RUST RUST RUST!!!
Rust when?
kinda knew it'd be the case but a bit disheartened to hear that even google doesn't use golang for their stuff, been learning golang for about a month and I really like the language but feels like a waste of time if no one is using it :( might as well invest my time into learning Rust instead.. sigh
There are lots of companies using Go. And Google does use it, just not for everything.
C++ at Google is great.
as a dev for many years - (now strive to do all coding via llm) I used to think swift should run everywhere - apis etc. Never took off - tensorflow swift died. Is kotlin server side the future? to be seen. I'm doing api crud / logic controller code over last 12 months in python / aws lambda - and arguably - this should have be done with typescript or golang or java. I had free reign to implement however I chose - but it really came down to me wanting to further python skills in lieu of doing more machine learning stuff in subsequent projects. It is clean - succint. In similar way - perhaps the people doing c++ services - really want to do some coding in c++ so they can jump into other projects using c++. I guess attracting staff could be a factor. You want these great minds working for you - but they want to code in c++. The future of coding is prompt engineering - chatgpt is operating at 155 iq - so let it decide what to code in.
Learning C++ at school vs learning C++ on the job are very different. The level of skill you need to do your homework assignment vs getting a project production ready are very different. If all the experience you have is school, you’re basically inexperienced 🤷♀️
Yeah part of why C++ is difficult imo, the same learning curve isnt really there with java.
literrally your content could have just be "I doesn't have a hashmap 💀" *mic drop*
Should I stop learning C++?Is it over for me ?
Yea give up please less competition 🙏
@@levelup2014💀
C++ is a great language, ignore the haters
learn rust
If Java devs face an issue writing in a C++ code base imagine Python devs(who only did Python their whole life), they be like “Now I see why hell appears before God does ”
0:12 Not true dude. A lot of ads stuff has TS "backend" as well as libraries
Really? Do you mean ssr clients or actually backend? They must be older because afaik boq only supported c++, Java and go.
@@NeetCodeIO I use the term backend loosely haha. Not exactly server code but definitely not just code responsible for populating a web app, though it does run client side.
Don't wanna out too much 🤣🤫
Not really a rant on C++ itself but more about a project using C++ while it should better use a different language. As a language, I agree C++ is a mess and hard to learn but I also think it's not going away anytime soon and there are always cases for using C++ even with the existence of new languages like Rust.
broh that's why we need rust :)
Hi Neet. is the microservice b** sc*****ing? I have used the Java version of it and its great. Havent used the C++ version
Yeah, I def liked the Java version better
1:18, what a hell?! It even got ranges! WTF are you saying?! 1:31, this is everything. With that, any tool can be made, thus any problem can be solved in a convenient way.
6:00, despite C is the best part of C++, it's still kind dangerous alone. I write everything in C++, in fast pace, but I prefer to leave C in the past.
Almost all modern programming language resemble human language. Unless we are talking about C, CPP, Assembly
So I've used C++ for going on 30 years now. I don't really understand why people say it's hard. I've not found it to be any more difficult than say other languages like python or rust. C++ has a ton of "features" that you don't necessarily need to use for most things.
You only said that after 30 years, no one would spend at least 5 years learning how to write production-grade C++ just to add some features to legacy code (which competitors are already advancing in) unless they have no friends
People are coming from high order languages like python, JS or Java where you have just int and suddenly they meet int, int32, int32_t, uint32_t, size_t and something like " typedef signed char int8_t;". I used to believe that IDE and compiler can auto suggest or select required type of int because at the end I am specifying to which platform I like to build code, but C++ still has very poor support in that area. But you can see it only if you have good knowledge of other modern languages.
0:12 Javascript nonsense on the backend. I used to think that too but of late I have become more accepting ...in limited cases. It has its place such as for simple sites that need to be brought up qickly and where a 'heavy' language such as Java is an overkill. But it's not a good idea to build large complex/enterprise apps with javascript backend - for a host of reasons.
For ex, Spring Webflux has all the advantages of node and all the advantages of Java but little of the disadvantages.
C++ ❤❤💯✊🏻✊🏻✊🏻🫶👨💻👩💻🧑💻
That’s why we all use Rust now. Easy
no offence but i think these videos only satiate junior engineers. would have been cool if you were a senior and talked about some deeper topics
it doesnt even have a hashmap 💀
is this bait? Is std::unordered_map technically not a hashmap or something?
I said C does not have a hashmap.
@@itsbk6192Technically, you need to clean your ears.😅
Skill issues...
skill issue
C++ stands for Chad!
That's C, C++ is Cuck
c++ haters rise up
bro neither c/c++ are memory safe. sincerely, joe biden.
RUST
JavaScript nonsense.
Correct.
C>>>Rust>>Go>C#>>>Java. Zig is trying to became great and C++ is verbose.
The order of the most used languages now a days, just need to invert place c# in front of rust C in front of C# and go in the back
Firs to like
C++ is the Javascript of the system languages, change my mind.
I've always agreed with this take. Both are wildly successful, endlessly abstractable, and both are a complete pain in the ass, both I choose them over any other language.
@@jonforhan9196 I honestly never write them until I have to, I really dislike the "flow" of JS and C++
Bro don't use this kind of image as thumbnail. It makes bad impression.........(Persoal opinion)........ People those who know you, will must watch your videos. I like your teaching method and following you for a long time.
Trust me, no one hates these thumbnails more than I do. I would rather not put my face in them either.
But they work. Don't hate the player, hate the game. 🎮 😢
the Quality is not good, It might get views, but not the thing people will rewatch or value in the long term
Rust is replacing C++...
Nah C++ won’t be replaced anytime soon
Can't wait. So many exclusively C++ devs can write so terrible code we would be much better of with Go too.
Rust is so much better. Don't have to setup linters, formatters, build systems just to have basic safety. Frick cpp.
As a C++ dev, I recommend Rust.
Most big companies have such terrible C++ codebases it would be cheaper to rewrite them in Rust.
@@rea1m_ Java exists to dominate c++ oop. It did a great job
Keep dreaming. It won’t happen
Hell nah
C++ syntax is pretty amazing, you are going to have to show some examples of unreadable C++ code.
Sure, why dont you explain this function (without using AI):
template
auto f(const T& x) -> decltype(x) {
auto a = [&](auto b) {
return [=, &b](auto c) mutable -> decltype(b) {
auto d = [&](auto e) -> decltype(c) {
return (c < e) ? e : c;
};
return d(b(x));
};
};
auto g = [&](auto h) {
return a(a(h));
};
auto i = [&](auto j) {
return a(g(j));
};
auto k = [&](auto l) {
return i(i(l));
};
auto m = [&](auto n) {
return k(k(n));
};
return m(m);
}
@@virno69420 Your code does not compile when f is called on an integer, which I assume is the intended argument type since it gets compared using less than.
Please show real code that could actually be in a real program. Anyone can create a jumbled mess in any programming language.
@@virno69420 Anyone can write awful looking code in any language. Being able to write an ugly chain of meaningless simple lambdas in C++ does not prove anything. Try harder.
@@virno69420 You can write that in any language that supports generics and lambda functions. Just because you can does not mean that anyone will write code like that.
@@virno69420 naming functions as a, b, c and blaming c++?😂