So I am curious what are some interesting educational resources for people in more advanced engineering roles? Courses or resources that might help one move to an Architect or Principal/Staff role?
Learn how to communicate with folks outside of engineering. i.e. by spending time with peers in product management, customer support, marketing, etc.
Do projects that push your understanding: https://austinhenley.com/blog/challengingprojects.html and https://austinhenley.com/blog/morechallengingprojects.html.
Join a startup if you haven't worked for a startup. Join a massive corporation if you have only worked for startups.
Read more source code of projects and your dependencies. Make contributions to the docs, improve the error messages of projects you use.
Write blog posts or just notes to yourself to organize your thoughts and ensure you understand what you think you do.
Join companies or teams within your company where you feel challenged to grow, not being complacent. Don't worry about feeling like an idiot.
Just a couple of ideas.
- They need to collect the needs, challenges and plans of different teams across the company. Based on this, they have to use deep technical knowledge of the stack to distill this into a technical direction for the overall environment to move towards (together with other experts of course). This will usually require implementing some principal cases and some hard edge cases, but then they'll have to document and hand this over to the posse of other development teams to push.
- They must support the trailblazer teams coming after them with hard technical problems. Even if you have a few strong PoCs, if an early adopter of a proposal gets stuck badly and you can't support them, you will lose trust. Call it politics, but losing this trust is very bad in the grander context. The direction they chose with the other principals must be true and trustworthy within a small margin of error.
- They often need to bridge the gap between the business world and the technical world. Technical decisions are technical decisions, but beyond a certain point, they have to be able to translate technical decision into required manpower, required money and tradeoffs to management. Like, we've been asked what the different tradeoffs between manpower investment, money and development velocity a windows-on-prem deployment for a solution would cost us and to compare this to potential revenue from a number of customers.
- They have to be able to say no, and maintain no. As other comments have said: Holding difficult situations. Understand what they need, understand that their need is stupid, and then start guiding them into a discovery process that their idea doesn't fit where we're going.
All of this is skillful communication, understanding and leading. On top of knowing your technical domain very well.
>"Fairly senior experienced" people learn in a variety of ways ... but mostly we learn via diffs
In other words, we have a baseline of knowledge, and we're looking for what has changed / is new / is different
>This can come from videos, books, papers, blog posts, one-on-one examples, seminars, conferences, etc
>The best folks then take what they think they have learned, synthesize it into a teachable format, and teach others the "new" thing (crystallizing it in our own minds)
As for specific resources, what are you "interested" in? Re:AWS in particular ... if you "know a bunch of AWS stuff by now anyway", why not go take the exams and get the certs (especially if $WORK will pay for them)?
What kind of "Architect or Principal/Staff role" are you looking for?
--------
[0] https://news.ycombinator.com/item?id=35724696
[1]
* Security - Start with text books studying for the Security+ and work your way up to CISSP (security management)
* Accessibility - WCAG 2.0
* Psychology - Start by studying emotions, motivations, and intentions from academic literature. Learn about OCEAN in applied contexts
* Architecture - Best learned from fully separated parallel means of applied process refinement put together (refactoring) and do it all again many times. What shakes out is a vision for scale applied through simple schemes of organization.
* History - The best way to avoid catastrophic mistakes is to be aware of past failures, understand human motivations, and avoid troubled organizations
What I've learnt as someone who's mostly self-taught, is that while I can probably pick up the important bits of any tech I need for getting a job done, much of my knowledge is incomplete, and it can be interesting to fill out the nooks and crannies in any given domain by applying some rigor and going through a course or reading a book end-to-end.
Take Postgres for example. Yes I understand what I need to work with it, do basic data modelling, maintenance, backups etc.. but until I picked up a book I didn't know about inheritance or third-party data wrappers (don't recall their actual name)
In terms of what would be useful for your job, I think it would be great to simply find where you can improve you/your team's developer experience, perhaps by evaluating tools that fill invisible gaps, or writing them yourself with skills you pick up in those courses.
Maybe you suck at interaction design and you can get your company to fund a degree in it
1. Your manager. Simply expressing that you want to advance is important.
2. The example of people in those positions. Especially the people in those positions you RESPECT.
3. Start working on your interpersonal skills. Books like: "Getting to YES" and "Difficult Conversations" are important to learning critical skills you will need at the next level. Understanding how to work ethically in a win/win way will move you forward in ways you can't imagine.
4. Realize leadership is a learned skill. People talk about natural born leaders. Bullshit. Leadership is taught. I was taught how to lead. It took some time for me to find my personal leadership style based on my personal strengths. But now that I know it... it ain't hard for me.
In the end: Engineering stops being about silicon and software, and starts being about the "ugly bags of mostly water". https://www.youtube.com/watch?v=LAlqp0_a0tE ;)
I learn a hang of a lot from books, but having to research code/blogs/mailing lists and ask questions from people ends up being a LOT more educational, the write up is just as educational because I notice when I don't have a complete understanding, when I wave my hands or when it doesn't "fit" logically, which means I have some more research to do.
I have my foot in both industries so I am happy to have these, but I have always wished for an equivalent for software engineers. Stuff like show up for 5 days and learn the concepts to write your own SMT solver, or implement a neural net framework from scratch in the language of your choice. This could be applied to any flavor of development - graphics, games, mobile, web, GPU, etc. Basically crash courses for competent people to get up to speed in an advanced area.
If you have non technical areas of improvement, you can check out resources like those below to absorb the info and then ofc implement those learnings in practice:
1. Books (eg. Effective engineer, radical candor, Manager's path)
2. Conferences (eg. ELC, LeadDev)
3. Podcasts (most conferences above have podcasts)
4. Coach / mentor
5. Blogs (staffeng, pragmaticengineer, charity.wtf)
On the technical side, it depends on the expertise you'd like to build but here are some general examples:
1. Books (eg those specific to your domain, designing data intensive applications, clean code, language specific books to learn idioms)
2. PR reviews from experienced engineers
3. Blogs (technical blogs of companies you admire)
4. Tech talks (from companies you admire, YouTube has plenty)
5. Courses specific to your domain like algorithms or deep learning)
6. Company conferences (again depending on your domain)
These seem particularly difficult to find though. Maybe someone knows of a listing that these can be found in aggregate and built by the communities? If not, might be worth building.
Without that, all the useful advice you get will be extremely vague. You'll likely hear about communication, leadership, and influencing as the core skills. They are - at that level, people will be a large part of any problem you solve. And of course, learn to learn efficiently, because any of those roles live in a constantly shifting knowledge landscape. But that's about as concrete as it gets without further details.
What attracts you about those roles? Do you want a portfolio career, a deep subject matter expert career, a people leadership career, something process oriented, an organizational troubleshooter,...?
There's a million different ways to tackle those roles, and you'll only have success if you pick a way that's tailored to your strengths. It's impossible to learn "all the skills" - part of this path is getting clarity on which ones matter to you, and which ones you're just fine ignoring.
- psychology
- team work
- understanding economics, business context
- establishing reinforcing and refining culture
- setting a strong example, inspiring through practical demonstration + theory/reasoning
- improving standards in every aspect of engineering
- championing the system, making it work, but also making it shine
- retaining the best people, raising their standards even further
- dealing with politics at an above average level (not necessarily at grand-master level)
- "wisdom" - humility, strong will, reasonable words, firm decisions, etc
I'd recommend reading about Admiral Rickover. If I had to recommend one book - "The never-ending challenge of Engineering".
If you have less time, read his essay "Doing a job": https://govleaders.org/rickover.htm
Disclaimer: I'm an advisor
https://littleblah.com/post/2019-09-01-senior-engineer-check...
hn discussion - https://news.ycombinator.com/item?id=20914236
That said I'd recommend, Staff Engineer, by Will Larson. https://lethain.gumroad.com/l/staff-engineer