TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Ask HN: What Have You Learned at Google as a Software Engineer?

246 点作者 aalhour超过 5 年前
Hello Googlers (former and current ones),<p>What have you learned at Google, as a Software Engineer, that you think was interesting and helped you up your game as an engineer? Anything you can share with people outside of Google that can help them improve as engineers?

25 条评论

Zach_the_Lizard超过 5 年前
Not Google, but another Big Tech company.<p>Visibility is very important to getting a promotion at a large company. Selling your work is important.<p>To move up, you must be playing the &quot;choose a good project or team&quot; game for at least 6 months before you try to get promoted. Preferably for a year or more to hit the right checkboxes for multiple cycles.<p>If you fail to do so, you can do absolutely amazing work but rigid processes and evaluation criteria will conspire to defeat you in a promotion committee setting.<p>At least, that&#x27;s true in my company. From my ex-Google peers it seems to be true there as well.<p>Being in a smaller office means you get fewer of the best projects available to you. Reorgs sometimes steal them. Cancelling projects makes the last half a waste of time from a promotion standpoint.<p>As for what constitutes a good project. It will:<p>* Let you lead it<p>* Have peers at your level + one or two<p>* Work with multiple other teams<p>* Ideally work with multiple teams outside of your group, e.g. you&#x27;re in, say, a chat app team and get to solve issues for some other app<p>* Good product manager and designers with a well thought out product; it&#x27;s not fair, but if the project is successful business-wise people will often incorrectly attribute that to your own skills<p>* Have large engineering scope. Committees get confused and sometimes think simple designs to solve complex problems are bad. You want to solve problems that are complex even in terms of the solution (or can be made to sound complex) to check more boxes.<p>* Allows you to solve problems for other teams<p>I haven&#x27;t optimized for promotion and thats personally hurt me in the quest to get to L6. I very, very close but didn&#x27;t quite make the leap.<p>Don&#x27;t ignore the flaws in this committee process. Exploit them.<p>Don&#x27;t be me.
评论 #20912234 未加载
评论 #20912086 未加载
评论 #20912236 未加载
评论 #21028760 未加载
评论 #20912766 未加载
评论 #20926235 未加载
评论 #20912149 未加载
评论 #20912280 未加载
评论 #20920618 未加载
评论 #20916036 未加载
评论 #20912025 未加载
评论 #20912126 未加载
jorawebdev超过 5 年前
Other than having “Google” on my resume there is nothing special or applicable outside of Google. Most tools are internal, isolated and the choices are restrictive. Management is shitty - micro-management is in full bloom, display lack of management knowledge, skills and there’s plenty of abuse of power. They don’t show their appreciation to what we do. All developers are very competitive. My entire time of over a year in 2 different teams is spent in isolation and self learning without much help or directions. I’m currently actively interviewing outside.
评论 #20912246 未加载
评论 #20912262 未加载
评论 #20912414 未加载
评论 #20912815 未加载
评论 #20912249 未加载
评论 #20912198 未加载
dannypgh超过 5 年前
I spent 9 years at Google, just left at the end of July.<p>The biggest thing I grew to appreciate was that for iterating large scale production systems, rollout plans are as important as anything else. A very large change may be cost or risk prohibitive to release at once, but with thought you can subdivide the release into easier to rollout and verify subcomponents, you can usually perform the same work as a series of lower risk well understood rollouts. That&#x27;s critical enough where it&#x27;s worth planning for this from the design phases: much as how you may write software differently to allow for good unit tests, you may want to develop systems differently to allow for good release strategies.<p>Google is a large company, and I think there are software engineers learning very different things from what I focused on. I worked on large scale machine learning in ads; someone working on chrome or Android likely learned very different things.
评论 #20912215 未加载
cmrdporcupine超过 5 年前
8 years; what I&#x27;ve learned -- working in absolutely huge code bases, good C++ style, good code review culture, intellectual humility.<p>What I haven&#x27;t learned: how to thrive in a huge organization with people more bureaucratically ambitious&#x2F;motivated than you. How to turn a blind eye to broken waterfall method dysfunction. Starting to get to me. Probably looking for the door soon; p.s. entertaining offers for remote (Canada) work.
评论 #20911945 未加载
评论 #20912514 未加载
jeremysalwen超过 5 年前
Everybody comments about how there are all these amazing tools that help your productivity (which is true), but they don&#x27;t talk about how the opposing force of organizational complexity ultimately results in &quot;just normal&quot; levels of productivity.<p>They don&#x27;t cancel each other out exactly though, so some things are <i>way</i> easier (spinning up a huge computation), while some things are <i>way</i> harder (making a small change to shared components).
评论 #20911877 未加载
评论 #20911893 未加载
apollo_超过 5 年前
I&#x27;ve been at Google for 1.5 years and before that startups. I&#x27;ve learned a lot about working at a large company (getting adjacent teams on board with my ideas, writing compelling design docs, etc). I haven&#x27;t observed any changes in the quality of my code or ideas.
_jjca超过 5 年前
* Always be learning and doing. Never be stagnant. Even if you are in a very boring team you can still learn and supplement your skills &#x2F; knowledge on the side. This may or may not help immediately but definitely helps long term.<p>* Really practice open&#x2F;active listening and critical thinking: there are very smart people and it&#x27;s really good to assume good intent when they talk. Critical thinking and question is more around &#x27;where is the disconnect? How do I try and actively move towards and see their point of view&#x27;.<p>* Questioning authority and being able to say no.<p>* Don&#x27;t use code reviews as a debate forum but instead as a learning forum. Granted time is of essence, so a timely resolution may be necessary but learning and actively listening through reviews helps your skills as a coder.<p>* Cut through heirarchy and organizational politics to achieve the larger goals for the team, the project and ultimately for Google.
bt848超过 5 年前
The most important thing I learned there was that you hire and promote people not so management can tell them what to do, but so they can tell management what to do. I didn’t even realize it at the time but the first post-Google job I had there was some clueless manager trying to set the roadmap and I was like “LOL what is this guy’s problem?” That when I started noticing the reasons that Google succeeds.
awinter-py超过 5 年前
A friend who spent a short time there said &quot;you know that tool that you want to build before you start working on your real job? At G, it already exists&quot;<p>This is less true now because a lot of their tooling has been exported either directly or by rumors leading to it getting rebuilt outside. I&#x27;m talking containerization &#x2F; orchestration and protobufs specifically.
评论 #20912465 未加载
octocode超过 5 年前
Not Google but similar. I learned that my motivation is proportional to the quality and amount of free food I receive. This includes willingness to participate in pointless meetings.<p>Note: this is not something I&#x27;m particularly proud of or anything. Just an observation.
评论 #20912467 未加载
评论 #20911951 未加载
pembrook超过 5 年前
1) All big companies inevitably devolve into Dilbert, no matter how cool they seem from the outside<p>2) Humans are easily fooled by signaling and vanity metrics, exploit this quirk<p>3) Depends on the team, but in general working at a big company is 10X easier and more relaxing than working at a startup. You’ll probably never go back to working at a small company after realizing this.<p>4) Buddying up to the right people will dramatically alter your experience in a big company—meritocracy can never exist when human emotions are involved<p>5) the difficulty of the interview process is just plain bizarre given how simple the daily jobs of 95% of the engineers are<p>6) you will have the nagging feeling a high school kid could do most of the (non engineering) jobs in the company with a few months of on the job training<p>7) due to 5 and 6, unless you are a sociopath, you will feel guilty on a daily basis for building generational wealth while an immigrant contractor struggling to get by dishes out your free food<p>8) you will learn that at most big companies, the innovation is in the past<p>9) on the bright side, google does have really cool internal tools and perks<p>10) after leaving, people will grossly overestimate your intelligence and skill level due to the name google being on your resume (see #2)
brianolson超过 5 年前
Big organizational problems can&#x27;t be fixed by writing better code. Meritocracy sounds nice but you have to learn to play office politics. New products and new features should have a business case (yes, even at Google) so that eventually they can stand and be valued.
amelius超过 5 年前
Perhaps nice to mention here: &quot;Talks at Google&quot;<p><a href="https:&#x2F;&#x2F;talksat.withgoogle.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;talksat.withgoogle.com&#x2F;</a><p>Not restricted to just software engineering, though.
评论 #20920592 未加载
aappleby超过 5 年前
Even really smart people sometimes write really dumb code. Including you. :)
rictic超过 5 年前
At Google for 9 years, startup before that. Roughly half my time at Google I worked on individual products, and the other half on open source infrastructure (common libraries, compilers, linters, IDE plugins, etc).<p>The biggest thing I&#x27;ve learned is how software changes over time. Previously I thought of a good program as like a crystal. Write it correctly the first time, and it doesn&#x27;t need to change much, if at all. Sure you might want to add features or fix bugs, but otherwise you write it once and it&#x27;s good forever, right?<p>Most programs are closer to organisms than crystals. They&#x27;re adapted to specific niche, and when the world changes around them they need to either adapt or die. This is the biggest gap I notice between senior devs and strong junior devs. Junior devs have mostly built things, released them or turned them in for credit, and then moved on. It&#x27;s rare to find a junior dev that has maintained an app for the long haul, and it accounts for so much of the advice that I found strange when I was junior:<p>* code is read many more times than it is written<p>* be very mindful of your dependencies, if push comes to shove you could end up owning them<p>* commenting why is often more important than commenting how. it&#x27;s good to comment about both, but it&#x27;s much more important to comment why. the source code explains how, but it has nothing about why<p>* it&#x27;s ok to love your code, but delete it the first chance you get. it will save you and the people around you a lot of time<p>Do you think I&#x27;m overselling things? Maybe that&#x27;s a problem for people who write code in $cursed_language on $bad_platform but your tools favor writing True and Long Lasting Solutions That Stand the Test of Time!<p>Let me give a handful of real world examples:<p>* A major security vulnerability is found in an API that previously seemed safe. Refactor your code not to use it.<p>* Turning on a certain compiler optimization breaks a pattern common in your code. After some experimentation, you discover an ugly fix that you then need to apply to everywhere in the code that uses that pattern.<p>* A compiler&#x2F;browser&#x2F;hardware update adds support for a feature that your code has been using a bunch of ugly workarounds to cope without. Do you use the new feature? Do you still support running without the feature? Is it a breaking change to users downstream of your code? How much does it improve things, how hard will it be for your users to update, and how many users do you have?<p>* You need to migrate to the new version of one of your dependencies. Maybe this is just a version bump, maybe you end up needing to review every single line of your app.<p>* Your app for phones and desktops is working great! We want to run it on TVs as well! This means a brand new (and super weird) matrix of features that are and aren&#x27;t supported, from hardware to OS to UI.<p>In short, the only constant is change. Write your code so that you can go away for six months and forget just about everything about it and still be able to maintain it. Lots of tests, document why decisions were made, and it&#x27;s like Bruce Lee said, be like water.
评论 #20916710 未加载
评论 #20912769 未加载
zuck9超过 5 年前
You should replace Google with &quot;big tech company&quot; or FAANG to get more responses.
评论 #20911717 未加载
justicezyx超过 5 年前
Google showed me the fine engineering at large scale. And the key is the people as they are behind everything.<p>That’s why I changed my view on who was the key person for google success. I used to believe Larry and Sergei, then urs, now I put on Laszlo Bock.
评论 #20912189 未加载
评论 #20912564 未加载
评论 #20912064 未加载
samueljackson超过 5 年前
decades of working for big companies on projects budgeted at billions. Sometimes as part of large teams, other times a three man operation!!! seen it all. Big companies taught me to be a politician and that skills alone were not enough. You&#x27;d need to make a strong relationship with everyone and I mean everyone. Insane working hours, a few projects had expectation of 24&#x2F;7 and had I refused, they&#x27;d politely replace me with another without notice. Lots of talented people to do the work under that condition. Had enough of it, not like they paid me millions and when I complained, they&#x27;d say &quot;make your own company and do it as you like it to be&quot;. Every big company I&#x27;ve been to had that sort of culture. As for small companies, there isn&#x27;t much to the future. Lots of work to be done for free, always welcome to work for free. Finally here I am, looking for a remote job of sorts that&#x27;d allow me to travel without having to be online all day. At least I can enjoy programming and travel.
StephenAmar超过 5 年前
Code search is a game changer.
评论 #20913646 未加载
评论 #20942048 未加载
admils超过 5 年前
Contract Python &#x2F; JS engineer, working on the largest GAE app (internal, but 2400% RoI so well regarded). - GAE was missing basic functionality that we (as their biggest customer) couldn&#x27;t get them to work on. The engineer in charge of GAE had other tasks and didn&#x27;t care for this role. We ended up doing this work ourselves and I&#x27;m relatively sure this is now inside the App Engine SDK.<p>- Delivery was incredibly badly managed, I have to shut one one eye when I sneeze due to sinus damage caused by working when ill on a project with global visibility and no cover.<p>- &#x27;Decisions based on data&#x27; isn&#x27;t a thing: if you want an outcome, you research to that outcome or don&#x27;t depending on how you feel.<p>As others have said having Google on your resume is great.
nailer超过 5 年前
Contract Python &#x2F; JS engineer, working on the largest GAE app (internal, but 2400% RoI so well regarded).<p>- GAE was missing basic functionality that we (as their biggest customer) couldn&#x27;t get them to work on. The engineer in charge of GAE had other tasks and didn&#x27;t care for this role. We ended up doing this work ourselves and I&#x27;m relatively sure this is now inside the App Engine SDK.<p>- Delivery was incredibly badly managed, I have to shut one one eye when I sneeze due to sinus damage caused by working when ill on a project with global visibility and no cover.<p>- &#x27;Decisions based on data&#x27; isn&#x27;t a thing: if you want an outcome, you research to that outcome or don&#x27;t depending on how you feel.<p>As others have said having Google on your resume is great.
Xlythe超过 5 年前
I&#x27;ve been at Google for almost 4 years, mostly working at startups before that. First and foremost, there&#x27;s nothing special about Google (compared to any other tech company) and it&#x27;s best not to evangelize any one company. Learning comes from experience, which means trying things (even if you end up making mistakes) and figuring out the shortcomings of a particular solution. I&#x27;ve seen a lot of bad (and a lot of good) code at Google.<p>What I learned, design-wise, came from a coworker. They planned everything out in advance and would draw out components on a whiteboard and define what they&#x27;d do. A few weeks would pass before they&#x27;d write any code. In contrast, I would start with writing skeleton classes and intuit the breakpoints for building a new class. We ended up with similar code structure at the end of the day, since we were both designing the architecture (even if our methods were different). But in code reviews, I would focus on if the new code made sense within the scope of the change; are there any clear bugs, code duplication, is there a more simple approach, etc. My coworker always went back to the whiteboard and drew up the components again, making sure the new code fit within the originally defined scope or if a larger change would make more sense. Because my skeleton classes were quickly replaced with implementations, I lost my original frame of reference and only focused on what was in front of me. I could still tell when something was obviously wrong (stop sending me CLs with global state to cross talk between components!), but there was creep in the CLs I approved and the code would slowly get more complicated until I realized it needed to be refactored.<p>There&#x27;s a tradeoff (like in anything). You can&#x27;t design your own solution for every code review, as it takes too much time and removes autonomy from your peers. But remembering to step back and look at the big picture was something I needed.<p>There were other things I learned, like structuring code in ways that it&#x27;s hard to write bugs. For example, you could write a method like...<p><pre><code> void foo(Callback callback) { if (error1) { callback.onError(); return; } if (error2) { callback.onError(); return; } if (error3) { callback.onError(); return; } doWork(); callback.onSuccess(); } </code></pre> but it&#x27;s easy to forget to call &#x27;callback.onError()&#x27; in a future CL. A small refactor, like...<p><pre><code> void foo(Callback callback) { if (bar()) { callback.onSuccess(); } else { callback.onError(); } } boolean bar() { if (error1) { return false; } if (error2) { return false; } if (error3) { return false; } doWork(); return true; } </code></pre> has the compiler help you catch mistakes. Unit tests obviously help too, but doing both reduces the number of bugs that slip through. Similar tricks include annotating methods as @Nullable so you don&#x27;t forget to nullcheck, annotating which thread is calling a method (eg. @FooManagerThread, @UiThread, etc), and doing all the if checks as close to the top of a method as possible so that you only do work if you&#x27;re in a good state.<p>Oh, and here&#x27;s one last tip that I only realized needs to be reiterated because most of my coworkers forget it. Validate incoming data! Every API needs a wrapper around the entry point that...<p><pre><code> * Verifies the caller is allowed to call that method * Verifies the method can be called at this point in time (eg. hackerNewsApi.postComment(threadId, msg) only works if the threadId is valid) * Verifies that the arguments make sense (eg. &#x27;msg&#x27; is not empty&#x2F;null&#x2F;above the max comment size). </code></pre> And this is needed at every layer (application, server, etc). Trust no one, even if the only caller is supposed to be yourself.<p>Glossary: CL = changelist ~= pull request
评论 #20912233 未加载
评论 #20912616 未加载
opportune超过 5 年前
All big tech companies are approximately the same, since people job hop a lot and these places have tens of thousands of engineers, it’s basically the same people at all of them anyway. I am not sure why people have these starry eyes views of them
评论 #20914349 未加载
mav3rick超过 5 年前
My quality of code has been immensely helped by code reviews by senior people. My team also has a good culture of getting feedback on design. I&#x27;ve learnt a lot on designing with security on mind - sandboxes, SELinux etc. I had no clue about them before I joined.<p>Design docs and comments by great engineers like Jeff Dean are openly accessible. Treasure cove of knowledge that I try to dip into everyday.
crimsonalucard超过 5 年前
I think I&#x27;m a good engineer, but I don&#x27;t think I have the intelligence to get into google. Most people can&#x27;t. There&#x27;s definitely some sort of difference between an engineer who can get in google and one who can&#x27;t as displayed by the interview.<p>Most companies that interview people outside of FAANG tend to have easier interview questions in my experience. Some even forego algorithms all together.<p>For googlers who worked at companies outside of FAANG or startups. Is there a noticeable difference when working these people? Will you learn more from a google level engineer then you will from someone who can&#x27;t pass the google interview? What are your thoughts about it?<p>If you think that FAANG engineers are genuinely better, say it. There&#x27;s no need to be politically correct here, honesty is appreciated.
评论 #20913725 未加载
评论 #20914359 未加载