Ask HN: How important is it to be with peers you can learn from?
I am a younger developer (3 years) who has been fortunate enough to be given a lot of responsibility in the projects I work in. I spend most of my time teaching myself what I need to know or have to know for the job. I realized I currently don't learn much from my surrounding peers (small team: 2 other senior level developers). To increase velocity, my company recently contracted some of the work for our project. And from my experience working with these contractors I have learned new things that I wouldn't have gotten from my peers or teaching myself.
How important is it to learn from your peers or be surrounded by peers that you can learn from? Always strive to be the stupidest person in the room, despite being as smart as you can be - as long as the people you interact with don't make you feel bad (either because they are being a-holes, or because the difference in knowledge/experience/attitude is too big to be useful). 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'm in the unfortunate situation where I'm not the dumbest person in the room. It sucks, having to learn things the hard way digging through stackoverflow questions / blog posts when you can ask a question right away / get an answer. 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 Extremely important. As a junior developer, it was important for me to have people smarter or more experienced than me to bounce ideas off of and to help me understand concepts. Things like "Why use Git? SVN is perfectly fine!" 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. Are you absolutely certain you’re not following fashion here? To pick your example... yeah, there are some advantages of Git over SVN, and in particular some scenarios where the “distributed” side of DVCS becomes important. On the other hand, there’s every chance that SVN really was perfectly fine for your project (after all, in its heyday it was very common, and there are still large projects using it today). IMO very important, it actually lead me to leave for another opportunity within my company. 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. Short answer: Very. 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. Not a developer but I'll echo the sentiment above. I think especially in your career it is critically important to be surrounded by people you can learn from. This also implies (to me) that they are 'high performers' with something worth teaching and therefore likely to be promoted and/or do something interesting in the future and these are the type of people you want to be around for general career development and network as well. I would say it's critically important. You may be a good self learner, but even then you may not know _what_ to study. It's the whole unknown unknowns situation. 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. Very, but even more important is to be around people you want to learn from. I've worked remote at a previous job for 8 years. The company really didn't handle communications with remote employees very well. Between that and not having the daily "coffee" chat with other employees, I felt I was missing out a lot. You can read all the stuff you like, but at times there is nothing better then bouncing ideas off your co-workers and seeing what sticks. I'll second this. So many bugs become easy to solve when you try to explain the problem to a co-worker. 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"... The fact that the duck can work (and pretty clearly it can for many folks) rather makes me question whether the co-workers are as important as some make out... 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... As someone who has spent about 10 years in the software development industry, I have mostly worked with people with either less experience than me or no experience at all. I felt like I wasn't progressing much and the feeling of a stagnation in self-growth became a burden, so I sought a new job where I thought I could learn different methodologies from people who have been in the industry longer than I have. 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. You are the mean of the 5 people you spend the most time with. So always try to surround yourself with people you can learn from, especially in the first years of your career.
I personally find that the best growth comes from people that challenge you and make you challenge yourself. I'm going to be a bit different here and say that it's important, but not something you should have through your entire career. That's because in my opinion, teams where you're the best in the room and teams where you're the worst in the room both have their pros and cons, and I believe a good developer/software engineer should experience both. 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. Definitely a big thing for me. I've spent a couple of years as the "smartest person in the room". As much as it's great to teach, but it's even better to learn. Or maybe that's just me. The skill gap has been huge though - me plus a team who learned "on the job". 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. Learning from others is invaluable. 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! I learn most stuff by myself. Sure it speeds up the process a bit when someone teaches you, but often making all the mistakes by yourself you get a deeper understanding. I agree. I worry about processes like Scrum which put so much emphasis on resolving “blockers”. Being able to spend a couple of days bashing your head against something thorny is a really important part of learning practical knowledge. I am kind of surprised at everyone here saying how important it is. I would say its a far more crucial skill to be able to learn by yourself for this industry. This is very very important IMO. It doesn't matter if you're a junior developer or a senior developer, it always pays to be around people who know more than you and at the same time have the right attitude when it comes to dispersing knowledge. Brilliant jerks, people who incessantly complain are not worth your time. :) It's important. But not totally. 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. The product itself used to be my #1 priority when searching for a developer job. Dating apps? No thanks. Smart doorbells? Yeah ok... 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). To add some more practical advice, I would search for employers that have good internship programs. I think it's ideal to learn from both students/new grads and senior engineers with proven experience. The most enjoyable learning experience I had on the job was when I had a recent CS grad on my team.