As someone who will be entering the industry, I loved your perspective on your job at Google. Also, having read Cal Newport's "So good that they can't ignore you", I couldn't help but notice the hunger for independence in good software developers. Would you recommend newcomers to join smaller unstable( more independence) companies or bigger, more stable( Top 4) companies(lesser independence)?
>Would you recommend newcomers to join smaller unstable( more independence) companies or bigger, more stable( Top 4) companies(lesser independence)?
I recommend new developers start at large, successful companies where software is a first-class citizen (e.g. Microsoft, Google, Facebook).
My first full-time job ever was a developer at Microsoft, and I'm really thankful for that job. I felt like within a large company, it was much easier to learn effective development practices and why they're important. At successful companies, good practices have a good way of percolating through, whereas at smaller companies, it's easier to fall into "cargo culting" of just doing things because that's how everyone else is doing them.
I think you can see this in things like the Google Python Style Guide (https://google.github.io/styleguide/pyguide.html). It only allows imports at the package or module level, even though most examples online do star imports or imports of particular functions. But when you build large systems that way, it creates ambiguity when you read the code because if you see a function call, it's hard to identify where it came from. There are a lot of things like that where the rule seems arbitrary, but in a large company, you can get context about why it helps you maintain your code and helps others understand it.
I highly recommend optimizing for salary for the first 4 years.
~10k/year * ~40 years of compound interest is significant. Most young people have debt and getting rid of that fast opens up a lot more options and flexibility.
On top of that company's that pay more have more incentive to maximize your value. On the other hand if you make little then they have incentive to burn you out and replace you ASAP.
If you already know what you love, then additionally pick a company that's great at that.
If you don't, then pick a company where you get a chance to be exposed to a wide variety of different things. If you aren't getting that in the company you pick, quit and pick another one.
I have had people say this to me before but I think it is silly advice for where I am at. No one has really explained what a mentor is supposed to do in regards to a software engineer who is mid-level.
When I think "mentor", I think "hand-holding". I don't need hand-holding. I just need to be on a team with peers who push each other. Is that mentoring? What does "mentoring" look like when someone grows beyond a junior role?
The existence of a BigCo is stable, but a job there isn't always. Between up-or-out, re-orgs, RIFs, defrags - you just might find yourself effectively reapplying for your own job on a yearly basis.
If you are still in college I would recommend joining your university's co-op program and try to work for companies that have gotten decent reviews from former co-op students.
Almost everything this guy learned except the exact details of the process, could be learned while you are still in college so you can make an informed decision on your first real job and probably have the opportunity to continue with whichever company you co-oped with after graduation if that is desired.
Personally, I would recommend a smaller unstable company. At the time, I didn't recognize it as being such (but certainly not Top 4), and I wouldn't have possibly learned as much and as quickly in a less dysfunctional organization. To be fair, that's also why I eventually ended up leaving, but responsibility and opportunity can be very available in understaffed and unstable companies. Definitely find some good mentors wherever you end up.
A smaller company will certainly give me more independence but it will be difficult later when I want to transition to a bigger company. How can we identify good mentors?
I started 4 years ago and want to recommend starting somewhere with a good program for new hires and preferably some kind of follow up program after starting.