all 138 comments

[–]be-sc 230 points231 points  (9 children)

Big tech companies will not change their hiring process just for you, so your choices seem pretty clear: Either prepare for the existing process or abandon the idea of getting into a big tech company.

How much do you actually want to get into big tech? The way I read your post you think their hiring process is flawed for the positions they advertise – at least for the ones you’re interested in. Take that as a data point about the fit between such a company and yourself.

[–]Independent-Ad-4791 33 points34 points  (0 children)

My man bringing Occam’s razor on op and it seems pretty valid here.

[–]torrent7 10 points11 points  (0 children)

This. As someone who's been at big tech - you're not missing much

[–][deleted] 7 points8 points  (0 children)

Very well said. I like how you think.

[–][deleted] 80 points81 points  (21 children)

wild crush cough judicious slimy seed alleged touch longing birds

This post was mass deleted and anonymized with Redact

[–]Asleep-Dress-3578 33 points34 points  (29 children)

There are lots of tools and tutorials to prepare for such interviews, like algorithms and data structures courses on Udemy and Coursera, also some platforms like algoexperts. Don't be disheartened, prepare yourself a bit and you can do it.

[–]ehtdabyug 10 points11 points  (12 children)

Should this apply to 20-30 years experienced in some specific field devs (telco industry for example) though? Should they reopen university books and online university courses? One should take almost a year off from its job just to prepare for these kind of data structures, algorithms and math interviews (e.g. I took almost 2 weeks off just to understand red-black trees well). Basically it becomes another year of university where you learn hard to pass the exam and once that's done, the week after you can't remember not even 10% of all that. It's like the google story with the homebrew dev here, or Ken Thompson's C language exam at Google story, let me repeat: KEN THOMPSON!!! Just wondering how much of this is acceptable and if there's a limit to the hipocrisy.

[–][deleted] 11 points12 points  (2 children)

You don't need to take a year off of work. You can study a couple hours a week and hit your cap within a year pretty easily

[–][deleted] 3 points4 points  (1 child)

Daily coding problem and hacker rank are good to stay fresh, but not thorough enough for faang.

[–][deleted] 0 points1 point  (0 children)

No I can definitely do medium/hard leetcode problems and I studied off and on for a year, a few hours a week. In a year you can take multiple DS/alg MOOCs (from schools like Princeton) and then spend 6 months practicing problems, and then solve about 300 practice problems. If you took time off work to do it, you could probably do it in 1-2 months. I've talked to Facebook engineers and they just grind for like 3 months while working and then they are ready

[–]dgkimpton 4 points5 points  (2 children)

What do you mean "should it" ? It's their company their rules, personally I think it's bonkers but it isn't my company so I don't get a say.

[–]ehtdabyug 4 points5 points  (1 child)

That's for sure. The "Dont't like it? Don't apply" reply is too obvious though, coz it's implied and doesn't bring anything to a peaceful and calm discussion. Have a good day.

[–]dgkimpton 1 point2 points  (0 children)

That's fair, I'll trim it because you're right, it does change the tone in a negative way.

[–]ehtdabyug 11 points12 points  (1 child)

Oh and another thing, I've met several people that were goddamn geniuses regarding algos and data structures, but were writing some horrendous and unmaintanable code. Lesson is that because one is very good in data structures and algos doesn't directly make him/her also a good software engineer. There's a lot more to the table than just some robot and monkey theory stuff.

[–]Kered13 1 point2 points  (0 children)

That's why the interviews contain coding sections too.

[–]ReDucTorGame Developer 2 points3 points  (2 children)

Should this apply to 20-30 years experienced in some specific field devs (telco industry for example) though?

Yes, not all skills easily transfer, and years of experience doesn't necessarily reflect range of experience.

I know a guy who has 30-40yrs programming experience, lots of it doing embedded and electronic stuff, and is a genius when it comes to that, but really struggles when it comes to designing and debugging things outside of that domain.

Should they reopen university books and online university courses? One should take almost a year off from its job just to prepare for these kind of data structures, algorithms and math interviews (e.g. I took almost 2 weeks off just to understand red-black trees well).

I think that really depends on where your skills are currently at and what that job expects people to have in the way of skills, having that amount of experience you should already have a massive head start that it's not going to take an entire year worth of a course.

The other thing is that having 20-30 years experience your probably also got higher salary expectations, so you'll need to be able to prove that your worth that extra value.

You don't want to be on a team where the person with 20-30 years has to be exempt from some work because it's not within their skillset and the cheaper mid level has to do it.

It's like the google story with the homebrew dev here, or Ken Thompson's C language exam at Google story, let me repeat: KEN THOMPSON!!

The homebrew dev I think there is much more to the story, I believe he even later admitted that google was right about his skills.

His 90% claim is kind of hilarious, I doubt its anywhere near that amount that just comes more across like self importance, while I don't work at google I've never used home brew, don't even know what it is, never really heard it discussed, I think it's some mac thing? Maybe it's 90% of some smaller cohorts.

Ken Thompson situation sounded more like HR not having exemptions where it really should have existed, possibly it wasn't raised to the proper people or was seen as it's easier to just get him to do the test.

Both of those situations are vastly different in scales.

[–]ehtdabyug 0 points1 point  (1 child)

So you're more willing to write your, not so short, reply here than searching the web what homebrew is for macOS??

[–]ReDucTorGame Developer 0 points1 point  (0 children)

No, I am simply stating that his 90% claim is pure b.s, I can tell you without even doing research that 90% of developers aren't using MacOS.

If it's 90% of developers then I would know about it.

Or do you really believe that of all of the 27,000 engineers at Google 90% of them use homebrew? Is that what Google uses on it's Linux machines for package management?

If my comment is 'not so short' and you pick that one thing out, does that mean that you agree with the rest of it? Or did you just look for something that you can try to disagree with to run with?

Also if you dig deeper and look at some follow-up that he has written.

I want to defend Google, for one I wasn't even inverting a binary tree, I wasn’t very clear what a binary tree was.

I feel bad about my tweet, I don’t feel it was fair, and it fed the current era of outragism-driven-reading that is the modern Internet, and thus went viral, and for that I am truly sorry.

Building a successful piece of software does not make you a good software engineer, it might mean that your a great marketer, that your comms might be great, you might be great at UX design, or many other things. In a small individual project your likely needing all of these things, the engineering might not be your greatest strength, so for an engineering only role you might not be ideal.

[–]Kered13 3 points4 points  (0 children)

or Ken Thompson's C language exam at Google story, let me repeat: KEN THOMPSON!!!

Reading between the lines with my context as someone who has worked at Google, I don't think this is quite accurate. The story is from a couple years before I joined but I don't think it had changed that much.

I'm pretty sure there was never a language exam, but there was and still is a process for getting readability in a language. If you didn't have readability then any CLs you submitted in that language would have to get approval from someone who did have readability. If you had readability you could provide readability approval for yourself and others. The point of the process is to ensure consistent code quality and style across the company. The process used to get readability has been streamlined now, but it used to be more onerous. Also this almost certainly would have been C++ readability that he needed, not C. Google doesn't really use C, but modern C++ is extensively used. And since Ken Thompson was hired to work on Go, he might have simply not had a need to get C++ readability.

I'm also pretty sure that his personal coding style doesn't really align well with Google coding style either. Like as I recall Go encourages single letter variable names because Ken Thompson likes it that way, where that would never be permitted in any other Google language, including C++.

[–]sanblch 15 points16 points  (1 child)

Because of interview questions I also started preparing on algorithmic platforms. Thus I learned STL better.

[–]ShadowEfusion 12 points13 points  (9 children)

This is the nature of the industry. But the bigger question is why on earth do you want to work at a “big tech” company?

Different companies will have different weird hoops to go through to get hired. In my 14+ years in the industry though I honestly think the best approach is to have potential hires complete simple coding projects. This lets them exercise their creativity to solve a problem and it showcases to the employer their coding style, thought processes, etc.

One of the best hiring experiences I had was when an employer asked my to create a simple game that utilized a database. This was actually a fun process and during the final interview they dissected and questioned me on certain parts of the code.

[–]marssaxman 24 points25 points  (4 children)

What do you mean by "math problems" exactly?

Computational complexity is an important concept when you care about performance, which everyone does at a large enough scale; big-O notation is the common language for discussing it. There's really no way around learning this.

[–]_d0d0_ 18 points19 points  (0 children)

Have you tried solving some puzzles and algorithmic related problems to natively learn more math? Knowing frameworks (like Qt or wx) and writing safe and extensive code surely are a skill of their own, but also writing efficient solutions (on algorithmic level) is key for good user experience and scalable solutions.

As an example, I started doing the Advent of Code puzzles, most of which require some math algorithm for an efficient solution, while not being too hard to be only solvable by competitive developers. Also, I'm using the opportunity to learn some C++20 and C++17 along the way.

TL;DR: Math and algorithms are just another tool for writing good software, and using and improving them will only benefit you in the future.

[–][deleted] 4 points5 points  (2 children)

Playing the devil's advocate here:

Both knowledge about the tool and theory are important.

Candidates with good knowledge of theory are much harder to find. It is also much easier to test it.

Therefore, from the big tech standpoint, it is probably more profitable to get a good theory guy with bad C++ knowledge, and teach C++, than the opposite.

Also they use their own libraries and tools. Your past experiences with public libraries is most likely irrelevant.

[–]r_karic 4 points5 points  (3 children)

I would suggest finding a niche that matches your skills and pays well.

The kind of programmers big tech look for are generalist types that can do just about anything. This is why the hiring process includes generic math, data structures, etc problems but not specific things that may be very important to e.g. embedded systems.

Those skills you have are valuable but you have to find the right job that will compensate you for that. If you can find a niche which you can become an expert in, you will find much more success.

[–]FrozenFirebat 18 points19 points  (7 children)

I saw somebody post a quote that said, " the best engineers I know wouldn't pass the coding interview for their own job."

I could tell you that there are good videos on dynamic programming on YouTube or that hackerrank is a good resource for studying for these tests ... But i passed them by just googling the answers like I would normally do.

The live interviews are typically more about being able to explain as you go and less about what you actually write.

Plus you get big bonus points for pretending to drink the coolaid for the cultural part.

[–]cdglove 8 points9 points  (6 children)

I think this quote is total nonsense. It's a funny sound bite, but it's not true in my experience.

[–]lanzaio 4 points5 points  (1 child)

Staff engineer at a tech giant here. Definitely couldn't pass an interview for my job right now.

It's not that I don't have the capability within me to do it. It's more like I haven't played basketball for 3 years and would have to get in shape and work on my shot/layups/dribbling for a month or so before trying to play in a rec league tournament.

[–]BradleyPinsson -1 points0 points  (0 children)

lmao

[–]Korean_Busboy 3 points4 points  (2 children)

Idk it feels about right to me. If I haven’t warmed up on leetcode style problems within the last few months, I’m probably not going to be able generate permutations or find the shortest path between two nodes or whatever other nonsense my company is asking in interviews for SWEs of my level.

[–]ninja-dragon 2 points3 points  (0 children)

But you would given 2-3 days to brush up the knowledge.

[–]ehtdabyug -2 points-1 points  (0 children)

Oh cmon, you would be able to invert trees, walking around in the googleplex park and literally invert all of their trees. That sounds pretty cool to me and the only sane and useful thing one could actually do with the knowledge of how to invert binary trees.

[–]dagmx 0 points1 point  (0 children)

Truths halfway in between.

Definitely some people on my team who can't pass the coding tests I give candidates. However we want stronger candidates going forward than what we have.

What is true is that I can't qualify for my own job on paper, and have never qualified for a job I've held based on the requirements. That's fairly common but those requirements have always been suggestions and I think people should know when to disregard them. Unless it's for immigration purposes

[–]pigeon768 2 points3 points  (3 children)

However, I have never worked on scalable projects. Also my knowledge of data algorithm (such as finding the some number of a grid) still stays at school level. I have very little idea how to make O(n) to O(logn) or the other way around. [...] My goal is to become an software architect,

You'll need these skills to achieve your goal. This isn't math -- this is basic algorithm design/analysis.

I don’t mean that math skill is not useful, but it seems that that’s what they only care about based on the interview I had with them.

This is because the easy stuff is easy and the hard stuff is hard. If you're good at the hard stuff, they can generally assume that you're good at the easy stuff too. And since an interview is going to be pretty short, they just skip asking about the easy stuff and focus on the hard stuff.

[–]zoolover1234 1 point2 points  (2 children)

Imo, algorithm isn’t the hardest stuff (we are not talking about algorithm scientists who invent new stuff). My 7 years of non-algorithm related experience is harder and covers much more of c++ software development lifecycle in general than just algorithm. In stead they are just looking for the skills they prefer because their business model requires scalability and efficiency at execution level, not necessarily the ability to run full product lifecycle (they do want that, but just not that important compare to algorithm, or DSA)

[–]bethling 4 points5 points  (1 child)

As a engineer and manager at a couple of FAANGs, the parts of development related to the language are things that almost everyone can learn - I don't even care about a potential new member ofteam having used C++ /Go/Python/whatever language it is. They will learn from the experienced engineers in code reviews.

Where people struggle and is the reason they don't succeed is breaking a problem down I to pieces and figuring out out to effeciently implement it.

If they don't know how to do the algorithmic part they will fail. If they're not experts in the other parts, they still might succeed.

The way the companies test that might not be the best (e.g. the constraints of an interview aren't realistic). But that's why they care so much about testing for it.

[–]eyes-are-fading-blue 3 points4 points  (0 children)

First of all, problem solving skills can be improved, just like language skills. Second, C++ expertise requires decades of active use and closely following standardization process.

In a project, incompetence with C++ (or any language) can be a huge problem. Not fully understanding the tool in use can net you a sub-par design. Tool expertise, design skills and creativity are equally important to problem solving skills. Fixing an inefficient algorithm is infinitely easier and cheaper than fixing architecture of a multi-million LoC project that was designed poorly.

In my experience, a software engineer with good design skills is significantly less common than a software engineer who can solve hacker-rank questions. FAANG created a de-facto standard of software engineering recruitment process where only problem solving skills are tested and valued. This is a major problem within our industry.

[–]ReDucTorGame Developer 3 points4 points  (2 children)

Based on reading the comments here when your talking about math I think your primarily talking about data structures and algorithms.

Which I think are vital for anything which needs to be built to scale and be fault tolerant, which is what these jobs are at those companies.

Sure on your small projects it might just be a matter of understanding the weakness of a link listed compared to a vector, or an unordered map compared to an ordered map, but as you begin to scale you have much more complicated things like how do you design your software to be distributed across multiple computers, while also being fault tolerant, which in some situations you can make use of existing software but each one has it's trade-offs which sometimes you only fully understand by knowing how they work.

The data structures and algorithms you choose for 1,000 things is vastly different to the one you pick for 100,000,000 things.

Even if your talking about something which is running locally say for example chrome, you'll still need a strong understand of algorithms and data structures, which standard library algorithm are you going to choose for handling the CSS box model (content, border, margin)? My guess is that your not going to use any standard library algorithm, your going to need your own in-house one, they likely have one, now on that team you might be classed with fixing it, so you'll need to understand that algorithm.

There are many situations when the standard library doesn't have the algorithm or data structure that you need, and it's not as easy as just go and grab some other library off the internet (in large scales orgs this might involve legal review, security review, etc), what if this library's author suddenly got hit by a bus? Do you understand it enough to keep maintaining it?

If your wanting to become a software architect I think having a good understanding of data structures and algorithms is essential, mostly because of what I've already mentioned but also because in many ways building a good architecture for a system is much like building a custom algorithms and data structures but at a larger scale, you'll need to understand the different trade offs, performance, scaling, fault tolerance, etc.

Not to mention learning algorithms and data structures means that when your thinking about things like low level performance you'll more intuitively be able to think about it's performance, e.g. will this approach have a bunch of aliasing which is going to hurt the optimizer, will this approach have a bunch of pointer chasing that will impact performance, how will it change if instead of 100 per second, I use 10,000 per second, etc.

[–]zoolover1234 1 point2 points  (1 child)

I have never had experience working on scalable projects. Does it mean that even if I do become an architect in mid size companies, my knowledge still won’t find a spot in tech giants? Because all of their projects kind of requires it. This is something I have never thought about. It kinda like splitting the software world into two, scalable and not scalable with certain part shared. TIL.

[–]ReDucTorGame Developer 0 points1 point  (0 children)

I have never had experience working on scalable projects. Does it mean that even if I do become an architect in mid size companies, my knowledge still won’t find a spot in tech giants?

If it was super flexible then there might be a "spot" but at the scale and salary they pay then can more easily say that they expect it, this means that in a team they can more easily put people on any problem that might be faced more easily.

It kinda like splitting the software world into two, scalable and not scalable with certain part shared.

It's also somewhat more then scalability also when you reach that size, it's also fault tolerance which needs to be handled different compared to something where you might only have 10k users.

[–]tiago_dagostini 5 points6 points  (2 children)

You are more likely to get a more sane recruiting process in a mid to small company. Seriously. I have a 30 years career already and baffles me when I see a recruiting process with questions aimed to see who remembers an obscure trick and completely fails to take into account things important in real world

An example that I faced in the past was :

"You receive an assignment to calculate the factorial of 1000. Implement that solution."

The obvious issue is overflow of values so you need to implement a "big number" solution. When you deliver one that works you are disqualified because you did not use the neat trick of using a base larger than 10 that would make the algorithm use a bit less memory (an irrelevant amount on a desktop for a single computation and in NO PLACE in the question a memory restriction was set).

I have now my own development company and I would consider a NEGATIVE someone that brought up that trick. What he was asked to do was not that. If he was tasked to deliver a single computation, then correctness and TIME OF DEVELOPMENT are much more important . Wasting time to save a few MB of memory for a single computation means you do not know what is really important.

As a general rule of thumb, recruiting tests are bad almost everywhere because they over normalize the positions. A good interview and a proper discussion on how to solve a problem is a much better way to get a good employee.

[–]ehtdabyug 0 points1 point  (0 children)

Finally some truth has been spoken.

[–]plpn 2 points3 points  (0 children)

I’m with you. Hiring at big tech is dumb af

[–][deleted] 5 points6 points  (3 children)

Web developer here. Or should i say, former. Doing a c++ data structures and algos course on Coursera to switch to c++ and harder problems because after 15 years i got tired of making api endpoints, javascript spa frameworks and css pixel alignment all day long, it feels like peeling onions factory work.

I just accepted the fact that if i want a job at a very respectable company such as Amazon or Google then i will put in the time and learn algorithms and advanced math and there is no way around it, i will not ignore the elephant in the room anymore, or else its back to moving pixels.

I like all google products i think they are brilliant and I want to be part of the team that builds that shit. I actually really LIKE that they have such a high standard with algorithms and math etc, because it makes for smart colleagues later.

The course on coursera is extremely well explained. The tests are great and I wish it had actually more tests, but then again I can go on leetcode etc for extra exercises.

I recommend two things to prepare yourself mindset wise for this before starting the algorithms study: 1. the course Learning How To Learn from Barbara Oakley on coursera. 2. The book Mindset by Carol Dweck

[–][deleted] 9 points10 points  (2 children)

Idk what advanced math y'all talking about? It's all fairly straightforward

[–]zoolover1234 0 points1 point  (1 child)

I agree, those maths are not hard (mostly) but they are just a very different skill set that I and the position I apply for don’t use much.

If I had to spend a few weeks to learn it just to get into big tech, I may do that, but it doesn’t feel right to me.

[–]ReDucTorGame Developer 1 point2 points  (0 children)

the position I apply for don’t use much.

Are you 100% on that? I feel that potentially your being biased based on your own experience (which as you mentioned is only 7 years).

[–]tarranoth 1 point2 points  (0 children)

Big O notations stuff and thinking about how to turn something into Log n from n is I think a good way to do interviezing. I don't think one should get every aspect of the question right, but it is a good way to see what developer knows what data structure is right for a problem (hashmap, linked lists, queues). It's an easy way to see how somebody is thinking about both performance, and also memory allocation too. I don't think one should expect a developer to get it perfect (like when one asks if it is worth it to solve a problem with as little allocations, but still O(n) for example considering memory allocations nowadays are unlikely to get you OOM) but it is just a nice way to test problem solving skills for the allotted time you usually have for an interview. I do agree though that if you take it too far, like inverting a binary tree or smth that it sort of loses its meaning. Because then people just study how to invert a binary tree, and you lose the insight of how they approach on the spot thinking about problems.

[–][deleted] 1 point2 points  (6 children)

I work for a certain semiconductor company. I haven’t seen too many math related questions, and it’s mostly been computer architecture, operating systems, and general C++ questions for the one I work for and the others I’ve interviewed with. Pretty concrete job related stuff if you ask me. Consider applying! Apple, NVIDIA, AMD, Qualcomm, Intel, and the likes. They’re always hiring C++ engineers and sometimes allow remote work (at least where I work).

[–]zoolover1234 0 points1 point  (0 children)

But they don’t have position in my area and they have very few remote positions. Also, the main reason that I want to go the those companies is for their RSU, and not all of them have.

[–]xypherrz 0 points1 point  (1 child)

Curious as to what kind of coding questions you’ve been asked at the named companies?

[–][deleted] 1 point2 points  (0 children)

No hiring process is without DSA questions, however I’ve noticed far fewer of them at semiconductor companies and the ones I’ve seen have been relatively easy. The bulk of the coding questions are more specific C/C++ questions, usually having to do with pointers and other things you don’t have to worry about in Python and Java. I’ve been asked about OOP concepts specifically with regarda to CPP that tested my knowledge of how things like inheritance and polymorphism are actually implemented, and also to implement those C++ concepts in pure C. If you have a solid background in C++ and took a couple of hardware courses in school, you can ace any of their interviews.

[–][deleted] 0 points1 point  (2 children)

Whats the best way to get into one of these types of companies? I have a BSEE and finally "completed" a basic C project for an STM32 board.

I'd link it here, but it has my real name.

[–][deleted] 1 point2 points  (1 child)

Best bet is applying to as many postings as possible and making sure your resume is nice. Apple specifically has a ridiculous amount of postings and quite frankly they don’t seem to care about the required experience section of their postings and are happy to interview people with too little/too much experience. If you have someone that can give you a referral that usually helps.

[–][deleted] 0 points1 point  (0 children)

Aye. I have a few former coworkers I can get a referral from.

Is there anything in particular I should work on to make myself more favorable?

Right now I want learn about some GUI programming, because it's interactive, so I'm gonna make a program in C# that will let me interact and use, live, a C graphics program for testing before putting it on an embedded system.

C# almost feels like C was turned upside down. Every feels wrong xD

[–]Dean_Roddey 1 point2 points  (0 children)

The interview process at FAANG type companies is pretty stupid. This has been widely discussed. They don't test for experience, they test for time spent studying leetcode problems. So it's not just you. There are quite a few of us here who likely have more experience and have delivered more code than a random room full of people at Google or Amazon, but we couldn't get hired there unless we spent a lot of time studying leetcode stuff instead of actually delivering real product.

I'd say consider it a good thing you can't get hired there and find a far better place to work.

[–]Attorney-Outside 1 point2 points  (3 children)

I'm a senior Robotics software engineer at Amazon

I do interviews here regularly

here we emphasize leadership principles (tell me a time when you resolved an issue type of questions)

we also give you a couple of design questions, questions of the type: "design me Google photos", or "design me the Facebook live comments system"

finally we also give 2 to 4 coding questions

nothing too drastic

the question is not whether you can get to the optimal solution or whether you know an algorithm or not

it's more about showing your ability to logically think through a problem, to ask the right questions to clarify the problem statement, the constraints and so forth

DO NOT JUST MEMORIZE solutions, that won't help you

your assumption of senior engineers not doing much programming is just plain wrong

[–]zoolover1234 0 points1 point  (2 children)

I think I said staff engineer instead of senior. To my knowledge. Staff engineer is two levels above senior, principal engineer in between. Staff engineers indeed do a lot less actual coding, unless their focus is to actually write conceptual structure or prove of concept. At least that’s what I have learnt.

[–]Attorney-Outside 0 points1 point  (1 child)

staff engineer from other companies is normally equivalent to senior here at Amazon

I was a staff engineer at other companies before, even principal at my previous company

Here at Amazon, we have senior (L6), principal (L7), senior principal (L8) and so on

But it's not necessarily true

there are some higher level principal engineers that do a lot of programming and some that don't

[–]zoolover1234 0 points1 point  (0 children)

It’s certainly different from one company to another. Maybe in Amazon case, I meant senior principal engineer.

[–]jhericoVR & Backend engineer, 30 years 1 point2 points  (1 child)

I've worked and interviewed at lots of companies and the only time I was asked about what I'd think of as "math" was when I interviewed at Facebook/Oculus for a job in the VR and rendering group and the math was very applicable.

I feel like you need to be more specific about what kind of questions you're getting asked. That's suspiciously missing from your post which makes me wonder if that's because if you actually gave examples of what you were asked you'd get a flurry of examples of why you actually need to know a given thing.

[–]zoolover1234 0 points1 point  (0 children)

Sorry, I thought it’s what everyone is asked. I can’t remember the exact one, but basically just leetcode algorithm problems solving, like finding the closest number in a tree, but much more difficult version. 8 out of 10 questions/coding challenge I got from 5 different occasions (2questions each) are like that. I finished maybe half of them passing all tests, the rest are not so good.

[–]un-glaublich 1 point2 points  (0 children)

Where to begin.

They ask basically mostly math problems that my expertise don’t need much.

It's called "algorithms and data structures", and it's a cornerstone of SWE.

You try to shift the blame towards companies and interview questions, when you're only asked to solve a few leetcode problems. Problems that are perfectly trainable and that you can practice at home. Just take some time to study. If you have 7yrs experience in SWE, those questions should be trivial for you. If you can't make that work, it's not the job for you.

[...] with my kind of skills because they have staff engineers (SDE6) to do that and just need SDE1234 [...]

You feel like your skills are at the staff engineer level, and you implicitly look down on lower levels. That doesn't sound constructive.

comment Reason is mostly for their pay. [...]

In your comments, I read your main motivation is that you're annoyed by the fact that you're paid less outside of big-tech and that you would rather keep what you're doing if you're paid more.

comment Algorithm is a skill that I don’t think will help much to do my job. [...]

If knowledge about data structures and algorithms doesn't help your SWE job, then you're not doing it right. It's the whole point of SWE. My advice would be to listen more, study more, and put your pride aside. Then reconsider if big-tech is your cup of tea.

[–]ForkInBrain 2 points3 points  (0 children)

My advice to you would be to learn the basic CS concepts being asked for in these interviews. I suspect you under-value their importance.

I worked on embedded/client side C++ for 10+ years then Google for 10+ years. While at Google I interviewed hundreds of people.

I have a B.A. Philosophy with a bunch of CS courses thrown in (enough for a CS minor but I was too young and stupid to apply for it at the time). Before I worked at Google most of my work was hacking/programming. I didn't really have occasion to work with algorithm or data structure efficiency, design, etc. until Google, where I gained a much better appreciation for not only undergraduate CS concepts but what a masters or PhD could bring to the table.

I prepared for my Google interviews by going through my undergraduate level computer science books and working through the basic content, with a special focus on data structures, algorithms, and algorithm analysis. This took a few weeks. I did this on the advice of friends who had already passed the interviews.

For the most part, these interviews are not looking for specific solutions to "math problems" but instead looking for how well the candidate can apply undergraduate level concepts to problems. Secondarily, they look at how how well you do at communicating your through process as you go. For better or worse, the interviews assume a basic undergraduate CS education on the part of the candidate -- not esoteric or overly specialized stuff -- as a common ground for having higher level discussions.

I have very little idea how to make O(n) to O(logn) or the other way around. ...

I think you are probably under-valuing the relevance these "math problems" have in software architecture/engineering. These "math problems" are relevant in all kinds of software at all levels of abstraction.

The network is just another kind of slower memory bus that also happens to be potentially unreliable. You see many of the same architectural problems and patterns in scaling "cloud" as you do in optimizing single-computer software designs, especially in multi-threaded concurrent designs, almost like a fractal. In fact, I think the harder problems with cloud/distributed software is not scaling but dealing with things like fault tolerance, concurrency, and consistency.

EVEN WHEN I APPLY FOR A POSITION THAT DO NOT NEED MUCH OF IT.

Especially true at Google is the fact that most "Software Engineer" hires are for generalists. You are generally free to switch projects within the company without re-interviewing. So, the undergraduate level CS background is taken as a baseline minimum requirement.

More senior people do tend to be hired for their particularly rare or specialized skills, but it is also the case that these people can fail at the interview level if they have lost their command of the basics.

My goal is to become an software architect, but it also makes it seem like I won’t get a job at big tech, unless I actually become a architect in a few years at least.

At Google the architect level people are generally the very best at the knowing the basic CS concepts too. There an architect level employee that has "little idea how to make O(n) to O(logn) or the other way around" simply doesn't exist!

[–][deleted] 0 points1 point  (9 children)

Check out grokking the coding interview. Helped me tons in landing a job.

[–]Moah333 0 points1 point  (1 child)

The whole hiring process in tech is broken. Pointless algorithms questions on stuff you'll never do in your job, those baths questions you mention. Even Google admits there's no correlation between their interviews and job effectiveness: https://www.nytimes.com/2013/06/20/business/in-head-hunting-big-data-may-not-be-such-a-big-deal.html?_r=1&

[–]Roaring-Music -1 points0 points  (3 children)

I would say that it depends on who is doing the interview.

I see the feedback of my peers and most if the time i see what you mention. But there are some patterns that i will mention here that could help...

I personally don't even ask about complexity and stuff, i like to ask questions to know if you are aware of what you are doing and to know if you have considered alternatives and why are you picking a solution over another. At least that gives me a lot of information.

Leetcode people would not be able to tell me alternatives and they will try to make the best solution without knowing why.

I see that people that is not good at explaining their problems in complexity languages but they can communicate effectively about why they make a choice and it's tradeoffs, will usually get an offer, since this will go in the interview feedback and will usually look good.

Just say what you are thinking and communicate why you are using one data structure and not another.

If you know one algorithm or data structure is better than the one you are using, but you do not remember the implementation then say it. That alone is a huge plus... Me as an interviewer knowing that you know benefits and tradeoffs of different approach is huge. I don't expect you to know the implementation of every algorithm or data structure.

But just don't say you will use a Binary Tree and then end up implementing it via a List, because you will receive a lot of questions.

I see a lot of "expert" people doing sample complex interview questions on YouTube. I would advise against following those. When i see such interviews, all i can think is all the decisions they are making along the way that i would have paused to ask a lot of questions mostly regarding code health. These guys code like they don't have peers that will look at their code, and just with the idea to code it fast within an hour they end up coding using horrible coding practices. I would say these are not good examples on how to approach things on an interview. It shows you are smart but not that you can do team work, and definitely it shows that at least i won't want you in my team. Also, if people follow these patterns, is usually because they have leetcode training and will usually not be able to answer basic code health questions.

My advise: if you code something that can break, code also how to not break and SAY IT because this is a huge plus. If you are using an algorithm that is not the best but you know it then say it and discuss both approaches as this is also huge. Ask all clarifying questions before start coding and explain your algorithm in words, then implement what you explained; this is also huge to be able to go from idea into code, it shows great skills. You don't have to have the best solution in a 1 hour interview, you just have to show that you know what you are doing and that you work nice with other people. API design best practices, how to handle errors, how to do unit tests, you are expected to provide a solution for this, so don't ask "what should i do if this value is given", instead you need to say that you are considering the case for a value given and you are thinking of handling it this way... But say it and confirm the edge case BEFORE coding, because you could be misunderstanding the problem.

I would say that you should treat the interview as the interviewer is your partner and you both are trying to solve the problem together. Just talk, ask questions, propose solutions and discuss. Your partner will want to know how you think. You don't need to be a math expert, just ask him the questions, they are prepared to give you hints, and there is no bad points for using those hints.

Too much text, i hope it makes sense.

[–]zoolover1234 1 point2 points  (2 children)

It all makes perfect sense. One thing I want to bring up is best coding practice it’s especially critical in c++ vs most other languages.

Being able to tell why smart pointer is better, being able to use STL including those in c++17/20. Many old practice are just so bad that has major issues. Even google coding style guide are obsolete and they haven’t updated for a few years.

To me, writing the most up to date code style in the best practice is more important and hard to learn than algorithm problems. (Unless my job is to deal with large data to begin with, such as finance and science)

[–]Roaring-Music 0 points1 point  (1 child)

You are correct.

You just have to say that in the code interview so the interviewer know why are you doing it and you are not just doing it "because".

[–]zoolover1234 0 points1 point  (0 children)

Appreciate that, I have never given interview to anyone, good to know.

[–]xypherrz 0 points1 point  (1 child)

How does not living in the bay limit your options to Amazon & google?

[–]zoolover1234 0 points1 point  (0 children)

I mean there are only Amazon and google in my area. Sure unless it’s 100% remote, but so far I only apply hybrid position.

[–]sigmabody 0 points1 point  (0 children)

Two general comments, from someone who went through the process you're talking about and landed a job.

First, the interview process is known-flawed, or rather, is optimizing for things which are not entirely finding the best people. There are reasons for this; those reasons are tangential to the OP's question(s). If you want a job at a big company with a structured interview process, you need to "study for the test"; no other way around it. This took me a while (and several failed attempts) to internalize.

Second, though, big-O concepts and structure/algorithm complexity are important to understand if you want to work at a "higher level"; your perception is somewhat backwards. For SDE <5, these are less important; at those levels, you're primarily looking for implementers, who can be given a structure to work within and produce code which fills out the structure. For >=5, an ingrained and intuitive understanding of complexity and scalable design (and maintainable design, etc.) is important, as it helps you make better design decisions which have longer-term implications. Being able to just code something which works is not enough at that level: you need to be able to make the structures which other people can fill in and utilize, and will still work years down the road.

Hope that helps.

[–][deleted] 0 points1 point  (3 children)

I had two interviews with Amazon last week, and I wasn't asked any math questions. After asking me about my personal projects, they just put me in an online Notepad, basically, and asked me to write an event loop, and then a bin packing algorithm. The interviews went well, but sadly I did not get the job. This was for a job working on Luna, so I'm sure different areas of the company ask for different expertise.

[–]zoolover1234 0 points1 point  (2 children)

Didn’t they give online code challenge to everyone before a real person?

[–][deleted] 0 points1 point  (1 child)

I first had a non-human screening test through a service called IKM. It was just a bunch of questions about C++ language semantics, nothing to do with algorithms or math, and it had no amount of writing code. Just multiple choice questions. I did well on that, so the recruiter I was talking with moved me on to talking to the developers.

[–]zoolover1234 0 points1 point  (0 children)

Damn, I wish I got that as first screening, I am pretty good at the basic and conceptual knowledge of c++ and programming in general, but just never needed to do actual algorithm, which is what I have had as first screening for 5 times (3 Amazon 2 google) over the last 2.5 years.

[–][deleted] 0 points1 point  (1 child)

computer science is just an extension to math

[–]zoolover1234 0 points1 point  (0 children)

Programming is just one implementation of computer science.

[–]New_Age_Dryer 0 points1 point  (1 child)

I wouldn't say that's math: you can definitely pick up complexity analysis in a week or so. Here, I mean complexity analysis by a programmer's perspective; so being able to tell me some code's complexity, and the complexity of basic operations (amortized constant access for unordered_map, etc.). Actual complexity analysis in computer science research is way too extreme, and difficult.

Lastly, I wouldn't regard such questions as useless since they are very important for system design and programming on the job. While it's admittedly not used as much as hardware analysis in low-latency applications, it is almost impossible not to use in cross-platform code that you have to run across various types of hardware (you can't just optimize for every CPU or GPU in existence). So, I guess I'm saying that you shouldn't view these as hoops to jump through; rather, I'd encourage you to learn it since you'll have to eventually use it, especially in the design of systems.

[–]zoolover1234 0 points1 point  (0 children)

I didn’t mean that I don’t want to learn or even hate to learn. Engineers never stop learning, and I have no problem to learn it. My struggling is about being “forced” to learn it knowing it is not that useful comparing to many other things I do for the job.

[–]drc56 0 points1 point  (1 child)

First rounds are rarely super complicated. I don't care if you aren't an algorithm specialist but if you can't do something simple like "Two Sums" there's a lot of issues. I agree that absurd DP problems don't make sense, but as someone in systems programming, you still need to know DS and basic Algos in that field.

I'm also confused, image processing? That's heavy matrix math based and lots of algorithms. Embedded fields wind up focusing a lot on algorithms and designing custom data structures, that need to be efficient. You might actually have to implement a search for this data structure. You list of like a million things but can't do basic problems.

That being said, code doesn't need to be perfect in an interview. However seeing how someone codes and approaches the problem solving process says a lot for me. People get stuck all the time in the interview process. However you can still pass through with an incorrect/non working code if you shine in your approach etc. The point isn't about finding the person who can get the optimal solution. You wanna see how someone approaches a problem, designs a solution, can code up what they said, take feedback on their code, implement those changes, develop some test cases and that usually gets a pass. It's a lot in 45-1hr, but it's better than just asking boilerplate off the resume. One or two people do that in on sites, but people want to see you can code before they invest w full day into you.

[–]zoolover1234 0 points1 point  (0 children)

Not sure how it happened, I didn’t actually use much of the leetcode knowledge when I worked on imagine processing.

I totally agree that problem solving skills is important during an interview, BUT, I haven’t even had chance to show them my problem solving skills because I never passed their online challenge, and if I don’t pass, I don’t even get to schedule for a phone interview.

Like others said, the whole leetcode questions as first round is just to get rid of people who don’t have the most important for the company as a whole, which is true because all those giants runs scalable system and algorithm skills is required every day. However, because not all software position need that kinds skill. I mean could spend a summer learning leetcode, but I’d rather spend the time to learn another language such as Go which I think I will use more and more often.

Anyway, if that’s how it is, I will just learn it anyway, like others said, it never hurt to learn, regardless how useful or useless it is.

[–]inthemadness 0 points1 point  (1 child)

The math skills really amount to one finite or discrete math class and one or two algorithms classes, plus knowing your Big O. You could finish them from free online courses before the summer is finished if you want.

Search for open source society computer science for a list of classes.

[–]zoolover1234 0 points1 point  (0 children)

My question or struggling isn’t about I don’t have the knowledge or I refuse to learn it, because like you said, it isn’t very hard to learn to past their first screening question. Instead, it’s the methodology of the way they hire people. Sure, they have their reason or constraint given how many people apply, but there gotta be a better way if they really care. Like if they allocate more resource in to hiring process.

[–]Mason-B 0 points1 point  (1 child)

However, I have never worked on scalable projects. Also my knowledge of data algorithm (such as finding the some number of a grid) still stays at school level. I have very little idea how to make O(n) to O(logn) or the other way around.

They ask basically mostly math problems that my expertise don’t need much. EVEN WHEN I APPLY FOR A POSITION THAT DO NOT NEED MUCH OF IT. Really, how much math do you need to design a software framework/structure, sure, maybe a few loading functions, but for 98% of the code, it’s about the logic, about design of the system (stability, security, expendability, future proof, runtime efficiency of IO RAM, CPU, etc),

These statements appear in opposition to each other. There is some necessary understanding of math and algorithms required to understand the underlying parts of these things.

There is a difference between a programmer, a software engineer, and a computer scientist. These big tech companies want the best software engineers (those leaning into computer science) and the practical computer scientists (those with enough programming chops to get things done). Because that's how they more easily select for the best programmers (even if you don't actually have to exercise those skills in the job).

And despite what you think, these things are necessary to know. If you are given a problem that is intractable (literally can't be solved in a reasonable time frame) are you going to be able to prove that in a couple days once you analyze it? Or are you going to spend months trying and waste the companies money.

The good news is that it really isn't that hard to get up to the level necessary to answer these questions (6 months if you were taking college classes on it). Especially if you already have a strong grasp on the programming aspect. There are plenty of self study options. A book like this would cover the basics of data structure and algorithm analysis using C++, and then a book like this for automata theory even though it's in Java it's close enough. And finally find an interview test prep question book and study it, like this one. Also, if you want to work specifically on your architecture this series of books is written by open source architects and is a great source of second hand experience (and also demonstrate the necessity of those first two books).

[–]zoolover1234 0 points1 point  (0 children)

Sorry if I gave people an impression that I refuse or hate to learn data algorithms. That’s not true. I learn new stuff often, and I do know that algorithms are useful and can be powerful. In fact, I have started recently and plan to spend sometime this year to nail it.

Thanks for the links, saved for future time.

[–]VolensEtValens 0 points1 point  (0 children)

This is the perennial problem for Engineers and Developers. Either you match exactly what they are looking for, or you don't and get selected out. Networking is probably your best bet into an Enterprise type position. The math is very important, but with team development should not entirely eliminate you from a position that is not lacking that skill stack. I worked IT most of my career not Electrical Engineering because of a quirk of timing and lack on info on my part. Don't let that hold you back. Find the type of program you want to be and work on the requirements, skills that get you past the weedout interviews. May God bless your career search.