Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: What are some educational resources for more senior engineers?
224 points by irishloop 11 months ago | hide | past | favorite | 56 comments
I recently had a more junior coworker take an AWS Solutions Architect course, and I realized I am missing out on my company's personal development resources, but I am not all that interested in an AWS Solutions Architecture course, in part because a) I don't want to, and b) I know a bunch of AWS stuff by now anyway

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?




Read good books like Designing Data Intensive Applications and High Performance Browser Networking.

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.


Seconding Designing Data Intensive Applications by M. Kleppmann. Gets you from “zero to hero” in fundamentals on scaling large distributed data platforms.

Wondering if there are equivalents on modern approaches to security.


It's a little bit dated and probably not what you mean by security but The Shellcoder's Handbook is a fun and educational one (at least if you, like me, come from an application development background).


In my book, if you want to go for architect/principal/staff, you will have to work on communication, documentation and leadership skills. At work, the group of most senior engineers has a couple of roles:

- 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.


Documentation is a necessary skill at senior levels in large orgs. There will never be a shortage of interested parties eager to vampire away your cycles. Being able to send them docs, diagrams, etc. will save you so much oxygen.


Very much so. We're kind of arriving at a workflow which dictates: If one of the experts or architects has to be asked about some topic, the documentation in that area has to be improved, ideally together with that expert and based on their answer. Similar to how an SLA relevant outage requires a post mortem to fix or mitigate root causes.

Not gonna lie, initially this was somewhat annoying. You had to type up long aeswers, or talk about a topic a lot, and then you had to write the same thing down again. So much repetition and so much markdown! So much time not doing tech stuff.

But doing this for a while.. well initially we ran into the problem of having too much documentation and needing to organize it. We enlisted help from technical writers in the company there a bit. But doing this for a while has resulted in very effective documentation for the teams. Not just architectural decisions written from an ivory tower. Very hands-on design guidelines, explanations and how-tos from practical projects in the company. If the ivory-tower-architect yells at you with a direction, those tell you how to get there.

And this generates a lot of velocity and trust in the teams. You have a problem, you pick up the guide, and for seasoned topics, your problem disappears within that sprint with that guide.


imho, more senior engineers ought to be the trailblazers and support the teams that are building the products.

Yesterday I experienced getting chewed by very senior engineers who instead of trailblazing, seem to just sit and complain, and the actual trailblazing comes from the bottom up.

It was very disappointing and a large degree of trust was lost.


I answered a similar question[0] back in April. Quoting[1] from it:

>"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]


* Networking - (routing and switching) Start by studying for the CCNA (many text books) and then move onto advanced switching with routing for L3 switches as required for the CCNP

* 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


I appreciate your comment. Would you be able to provide some links to books related to Security, Architecture and History?


this is a good blog on Architecture in general - https://architectelevator.com/


CCNA is one book from CISCO no or is that two...I forget now.


What is OCEAN? Links please


The big 5 personality traits. Openness conscientiousness extraversion Agreeableness and neuroticism. It is a more scientific way to talk about team dynamics and personality.

https://hyp.is/go?url=https%3A%2F%2Fsocialsci.libretexts.org...



I don't know if anyone would consider me senior in terms of rank on any team, but I've been a professional developer in some capacity for ~10 years, depending on how you count time between jobs.

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


>third-party data wrappers (don't recall their actual name)

Foreign Data Wrappers. We used them quite a bit on my team at Apple.


That's the one. I haven't had a chance to use them yet myself, don't know why you were downvoted, but they seem like something that could be very powerful on the right project at the right company. Worthwhile to know about at the very-least.


What Postgres books that you’ve read would you recommend?


Pretty sure it was the most recent version of this one: https://www.oreilly.com/library/view/postgresql-up-and/97814...


Thank you


The biggest resources you have access to:

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 ;)


My favourite resource is my blog (not for you dammit, get your own, my blog is teaching me) - I start out with a question - eg "How does Go decide where to put something on the heap" and then spend days or weeks trying to answer that, and writing a coherent explanation on my blog so that I can refer back to it when I want to refresh my memory.

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.


This is something that the computer security does amazingly well. At most conferences, the core money maker is trainings. You have advanced topics, taught by experts, usually 2 to 5 days of training. Topics like program analysis, reverse engineering, obfuscation, exploitation, fuzzing, etc.

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.


As a fan of deliberate practice, it helps to first understand where you have room for improvement as a senior engineer. Your feedback reviews at past jobs can be a great place to start.

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)


I don't know about AWS Solutions Architecture specifically, but I've found that advanced learning typically doesn't come from "courses" in the traditional sense. More typically blogs, research papers, self-contained lectures, and textbooks. One unfortunate aspect of these is that they often tend to be filled with extreme levels of technical language and so there's often a difficulty finding that middle area, especially when you know enough to skim or skip intro works to a subject.

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.


As a request, this is extremely underspecified :) Job titles in our industry are notoriously vague, so it'd help to hear what you consider "more senior engineer" (I've seen definitions range from "more than 2 years experience" to "deep subject matter expert with decades of knowledge"), and what you envision your staff/principal/architect role to be like.

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.


System Design Interview Volume 2 contains a great overview of all kinds of architectures if you are into this kind of things. From there just pick the techs that you don't know and learn. This book is like a table of contents of other techs


Many staff level engineers love going through https://codecrafters.io (YC S22) when they want to master a language, dive deeper into the internals of devtools that they use, or when they’re simply looking for a complex project idea for the weekend. You can Build your own Git, Docker, Redis, etc from scratch.


This is the coolest thing I have seen all day, thanks fren!


:)


The senior engineer's job is managing engineering intangibles:

- 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


Knowing the course material covered in https://bradfieldcs.com (most of which comes from the book https://csapp.cs.cmu.edu/) will make you a better engineer.


Bradfield founder here: thanks for the recommendation but it's really not true that "most of [the course material] comes from CS:APP". It's a great book—which is why I recommend it so strongly in teachyourselfcs.com—but we use it only as a supplementary resource, for one of the eight courses we teach.


Sorry about the misrepresentation, Oz. I am past the edit window, so I can't edit my original comment above.


Respectfully, I'm simply not paying just for some swe classes. It seems ridiculous to me nowadays and others share this sentiment I'm sure.


It will depend if you’re learning for curiosity or for your career path. I too have training available at work but the work endorsed courses for my career path aren’t as interesting as learning about adjacent business areas…


I concur with warrenm I got into deep learning because of the opensourcing of Tensorflow, PyTorch and FOSS and BECAUSE I had worked with Neural Networks before they became convolutional. I did not want to do the same old thing Principal Component Analysis. For more senior engineers I always advocate for learn train and see what in your past should be updated. If your goal is Architect then learn algorithms and interconnections. If the goal is Principal Engineer then processes. Are you able to combine these roles into a new role a Principle Architect ?


I'm a big fan of https://codecrafters.io. You can build your own X, where X is redis, git, grep, etc. in multiple languages.

Disclaimer: I'm an advisor


http://highscalability.com/ is one of my favorite blogs for distributed systems.


I wish they would make their TLS highly available. Or available at all


wish it wasn't looking so ... abandoned :|


libgen (definite #1) + open courseware + youtube for occasional novel practicalities + open source scientific/engineering software and hardware communities. I've gained solid professional competency in entire branches of engineering with these resources. A teacher also helps. Don't be afraid to pay a consultant to mentor you in difficult areas with high iteration costs.



I’ve been following several SANS courses. If you aren’t 100% on a specific subject yet they’re pretty good.


Do you follow tech blogs of various companies? There’s some serious inside and hands-on knowledge available for free. You can also follow various open source code repositories, also compare commits. Check bug log. Listen to podcasts.


https://AllEngineeringBlogs.com covers all company engineering blogs and sends daily updates.


At the senior and beyond level, the universe itself becomes the best teacher.


read books. help everyone. and fundamental papers


I’ve been an engineer for 9 years and I’ve never seen my technical skill set level up like it has going through this course: https://mirdin.com/the-advanced-software-design-course/


This course is what took me to the next level as well -- it's like "The New Turing Omnibus" for software design.


nice $2,000 course plug


Hey, it's been worth my money. If you're down to shell out some of your engineering salary for it, I've gotten a lot out of it. It's not like you're sending the money to me.

I can buy cheap courses off Udemy, I can read books on my own time (not tons of it these days), or I can pay someone super effing knowledgable to teach me. This guy's super knowledgeable, I stand by my downvoted post


There is now $1199 Self-Service version! (this is a real plug, i'm one of the co-founders) https://self-service.mirdin.com/offers/A7LiY2U7/checkout

Happy to see positive reviews in the wild like this! The syllabus for the course can be found here https://syllabus.mirdin.com/


If you don't want to, you don't want to, but that's on you. If you don't have the patience to sit through stuff you don't know in order to get to the stuff you do know, that's on you. If having someone tell you that EC2 is a VPS service sends you into a conniption fit because you already know that, then maybe it's time to retire. There are over 200 AWS services and you can't possibly know what every single one of them does. You know which course might help you become an AWS architect? The AWS Solutions Architecture course. It goes over the things to help one move into an architect role. What it really sounds like is that this junior is going to pass you by because you "don't want to".

That said I'd recommend, Staff Engineer, by Will Larson. https://lethain.gumroad.com/l/staff-engineer


OP didn’t say “don’t want to” in the way that you think he did lol. He’s not interested in being an AWS solutions architect. He was just using that as a specific example of a personal development course that his company offers that’s more suitable for junior engineers.

OP is looking for 2 things:

1) some resource that matches his interests

2) some resource that’s more suitable for his experience level

What you got confused with and also what OP did not clarify is Number 1. Someone else picked up on this and commented that OP was too vague with his asks.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: