How important is it to learn from your peers or be surrounded by peers that you can learn from?
I've had the fortune to be in that position for a very long time, and I wouldn't do it any other way. Many people / teachers / mentors don't know the limits of their knowledge, regardless of how well meaning they are (and some aren't). Intellectually aim the highest you can afford to. Luck has a lot to do with it, but you can (and should) help luck.
That's true about your career, but also about other stuff like sports, music, or any other hobby.
I learned everything about programming myself with just online materials available to everyone. When I started stagnating & had issues managing this work project, I set aside a budget to subcontract more a much more experienced developer. Then I started attending meetups, starting working on nonprofit projects so I can learn from others smarter than me.
The lesson here is that even if you aren't the stupidest person in the room, you can make yourself not the smartest either. You are just a few emails away, a small sized budget to pretty much getting any teacher / mentor you want, and communicating via slack. You can always crowdsource answers and advice on reddit/stackoverflow
I don't know if this is true for everybody but there was a window of time where I got to work with senior developers before I became a tech/people manager. That was the time I worked at several different companies and learned from experienced developers before I got put in that position. You want to absorb as much as you can during that time because opportunities become slimmer down the road.
I was 23 at the time with about 3 years of experience, so still a junior but I was the longest-tenured employee on our team. We kept picking up new hires, but never internal transfers. That put me in a position where I was the most familiar with our tech, stack, and business intent. I really enjoyed teaching everything to our new hires again and again, as it helped me further understand the how and why of my job.
Ultimately I realized I wasn't growing as much as I wanted to and looked for another position. Being in charge was fun, but I felt like I needed to surround myself with better developers.
Longer answer: I think one's skill level starts to taper off (or degrade / converge down to) the peers that they work closely with in time. This works both ways. Books and online sources can steer you in the right direction too, but generally with smaller effects. Approximately 1/3 of your day is spent in the office anyway.
Having worked at two startups now, both have very different senior engineers that have different philosophies on what good code is like. Neither camp is wrong, but I've learned to see things from another angle ever since. You then can bring cross pollination to the table to make contributions that one party isn't aware of before, or fill up a gap in your knowledge / skillset that you otherwise would've missed by not being exposed to others outside your common circle.
Another thing I would point out is that your peers offer more than just textbook-style knowledge. They can offer concise, intuitive explanations tailored for someone at your level. They can demonstrate the things they're teaching. They can provide immediate responses to any questions you may have.
At my last job, we had a rubber-duck in the middle of the development floor. The first test was "Explain your problem to Ducky". About half of the time, the developer doing it would have a sudden epiphany half way through the explanation.
You could even book meetings with Ducky on Outlook... "Five-minute standup meeting with Ducky, meeting room 1"...
Aside: I’m rather sad Stack Overflow didn’t keep their April 1st rubber duck feature. I wonder if it actually worked “too well” and cut down on questions submitted...
What I have mostly learned is that everyone has different opinions as to which approaches are best and that engaging in discussions with your peers is an important part of teaching each other different aspects and perspectives of your work.
Learning programming languages and its quirks are generally things you can learn on your own, but there are a lot of little tidbits and good practices you can pick up from peer code review. As my horizon expands from working with different people on different projects, I feel more confident with my work and while coaching others afterward.
For instance, here are some benefits of working at least one job where you're the 'smartest' in the room:
1. You get to experiment more with new technology, and learn more skills and languages that you may not otherwise have bothered with.
2. There's no one to turn to if things are tough, hence you're given a real reason to put the work in and learn things for yourself. Being the 'dumbest' in the room all the time makes it too easy to coast on the knowledge of others.
3. It gives you a chance to experience what it's like when a major responsibility or project is on your shoulders, as well as how you deal with working under pressure (like say, being the one guy who has to fix a major client's website after the database crashed at 4pm on a Friday).
4. You get the responsibility of teaching others, rather than always being the one taught by them. Again, that's a nice thing to have experience with, especially if you want to get started with conferences and ebooks or what not.
5. And if you're literally the lead developer there, it also teaches you a lot about how to talk with management and make your case for new technology, best practices, etc. Yeah that's more people skills than tech ones, but you really need both if you want to do well in your career, and being the go to guy forces you to get better at that.
So yeah, I'd say while it's important to be with peers you can learn from, you also want at least a few jobs where you're the one other people are learning from as well. Don't always be the dumbest or smartest in the room, mix it up a bit and use both situations to learn as much as you can. You'll be a better developer or software engineer for it.
Putting in the best-practice and infrastucture to do a good job was interesting though. We've gone from zip files on a network share to automated builds an CI, and the CI tool even generates the final release ZIP files and test reports. From bug tracking in Word to bug tracking in Jira...
And on a budget of "zero or as close as possible" too.
Listen to the perspectives of those around you, but don't regurgitate what they say or follow what they say blindly. Ask them questions, challenge conventional wisdoms and ask "Why".
Experience is a form of bias and must always be taken with a clear head and a grain of salt.
My grandfather would always say: Advice is free, until you take it.
Good luck!
Brilliant jerks, people who incessantly complain are not worth your time. :)
Another factor to consider is variety in your workplace education. There's a lot of value in working in different environments, industries, surroundings. It comes at a cost, but brings many benefits.
But then that changed when I brought on a senior engineer on my team that was worse than mediocre. I can't do anything about it because he plays office politics better than he can write code.
Because of this experience, my number one priority with my job hunt is finding a small, talented team to work with. Compensation and the product itself fight for second place.
It's advice I don't think most people have the privilege of exercising, there are bills to pay, but you really ought to not work with anyone you can't invision yourself working with for the rest of your life (or maybe a decade or two at the least).