Ask HN: How can I grow as an engineer without good seniors to learn from?

577 points by prathameshgh ↗ HN
I am a fresh graduate data engineer working at a small company in the oil and drilling industry.

I was hired 6 months ago as a freelance data engineer, and after proving myself through my work quality, I am now essentially functioning as a tech lead, with full responsibility and ownership of designing, implementing, and hiring for the projects I'm assigned.

Our company is not a tech company, so I only have a couple of tech-oriented colleagues, and I barely interact with them. Now I directly report to the director of the company, who in all senses is awesome, with 40+ years of combined experience in some of the biggest oil and drilling companies globally.

However, I have some strong FOMO about not being able to learn much technical stuff from my peers or seniors. I am trying my best to learn and pick things up on my own, learning design principles, getting code reviews from chatGPT, etc. But even then, I'm afraid I am not producing the software to the highest standards of the industry since we don't have any rigorous cross-checking, and might be missing out on a lot of learning.

Can someone who has been in positions similar to these please guide me?

303 comments

[ 5.4 ms ] story [ 403 ms ] thread
If "technical stuff" is your primary interest, you should probably consider changing jobs.

If technical proficiency was all that important to your employer, you probably wouldn't be in position you're in.

> If "technical stuff" is your primary interest, you should probably consider changing jobs.

This 100%. It seems that you're doing things proficiently enough to keep your job, but just want to improve your capabilities as a coder. It's going to be difficult without a proper structure or mentors around you. So you've to make a decision whether you'd prefer to stick with the role and get slowly better over time using blog posts and AI reviews, or jump in the deep end and get another role in a more tech industry aligned company. And if you decide to jump to another role, just be aware that you're going to spend 3 to 6 months panicking about whether you're in over you head, and probably won't get "comfortable" in the role for a year.

"AI reviews" is actually a really interesting use-case that I hadn't considered-- but makes so much sense. I feel like it might be good to use Cursor or another AI assistant just for the purpose of suggesting improvements rather than a way to code quicker.
Strongly agree. I have been doing data engineering for 14 years and, in my experience, new grads need a lot of on-the-job training. There are a lot of real-world problems (e.g. consistency problems, scale problems, distribution problems) that benefit from a little bit more than just theoretical knowledge. A lot of data systems are full of problems because they were designed and implemented by inexperienced people. People don't know what they don't know and there are a lot of teams that say things like "oh yeah, this takes 3 days to run because it's pretty big" or "we release code daily but it would be too expensive to re-process past data to fix bugs" or even "what's a schema?".

YMMV, though. Some data engineers are writing basic SQL or playing with Azure Data Factory and there isn't too much complexity. Read Designing Data Intensive Applications. If that sort of thing resonates with you then find someone to work with who has experience with those kinds of problems!

[Edit: no disrespect to ADF! Just pointing out that the data engineering discipline is broad and different practitioners will have different expectations of complexity]

Maybe you could try to informally get together with the other tech-oriented colleagues.

Perhaps they feel equally isolated.

It sounds like you are doing better than many in corporate jobs; you are being proactive. ChatGPT is quite valuable here, as is studying.

Where in the world are you? That determines your options.

I am primarily self trained and it took a long time to get "good". I wish I could have worked under a master, but that opportunity never arose and I was starting when web development was all new – so there were no masters.

Read and study and learn from your mistakes and the mistakes of others – you will believe things and realize later that your beliefs were wrong.

If there was one book I had to recommend that I have read it would be Sandi Metz's 99 Bottles series.

Oh, and learn multiple programming languages.

Getting thrown into the deep end is awesome. This is a great opportunity to apply things you can learn. Keep studying and reading, ultimately solving problems even not perfectly you will learn a lot.
Grow in the areas that are open to you. People skills and domain knowledge. These are the foundation of a career.

Let go of FOMO, youth is the only reason you think it is possible to not miss out. You have and will miss most things because they were not hit your way. The only things you can actually miss are the opportunities that are yours.

But the only way to miss them is because your attention was somewhere else. You have an awesome opportunity for a mentor in the director. You caught a lucky bus, stay on it.

Right now people can look at you and see potential. In just a few years, they will look at you and see squandered potential. Sure technically you are an adult, but you have almost zero adult experience (your mentor has forty years of adult experience). Good luck.

I’ve found that everyone learns in different ways, and if having mentors / seniors to absorb knowledge from is how you learn best then I’d agree with the comments suggesting you change roles.

However, if you learn well by doing, or by reading, there are loads of other great ways to improve technically. I’ve made big leaps forward in my skills by building (relatively large) side projects, where I can safely experiment with different design decisions and see the consequences over time. I’ve also got a huge amount out of just sitting down and reading the docs for tech I’m interested in - some frameworks (like React) have fantastic resources that can take you from good to great.

Good luck!

Read and write a lot of projects. Early career you need to get out there and see things. If you find stuff others are working on too all the better (e.g. OSS but there are other things like charity or public projects too)
+1 for reading projects. There's rarely one, perfect way to solve a problem, and there's certainly no silver bullet pattern in software. The more patterns and types of solutions you've seen, the bigger the set of tools you'll have in your mental toolbox when faced with a new problem.
Also, try to find people to speak to that have built major projects.

Ask them what the original goal was, how that changed, what proved to be important, what was unexpected.

I learned a ton from contributing to large open source projects.

Find some software that helps your company, and don’t be afraid to dive into the codebase. There may be times you can even contribute as part of your job.

It is unfortunately not efficient compared to what you get when working with actual colleagues within a company.

Open source projects maintainers very likely have their own day jobs that are unrelated or only marginally related to the projects, have different priorities or just don't care enough. A previously important feature that has seen lots of activity may be on the shelf, but that's only known among maintainers with no public notes. You don't get to go into meetings or just send a Teams/slack message to get a quick response, let alone a casual chat at the coffee machine.

Unless you are working on prioritized features on a project like linux, VSCode or Chromium, chances are that your issues or pull requests go in the log until someone works on it months or even years later.

Speaking from real experience.

(comment deleted)
Why not look for a job with a established development team? I cannot imagine how anything could replace the experience you get from working directly with other developers. You will learn more than just technical skills. You'll learn more about how to predict time estimates, how to interact with other groups in the company, how to set up good infrastructure for development, deployment and support. If you learn all these things yourself, you will make lots of mistakes along the way which can harm your current employer.
There's great value in quality technical mentorship, but they're trading it off for an opportunity to learn leadership, autonomy, and cross-functional skills at a very fast pace... That's not a route for everyone but it could be a massive opportunity for the right person.
There’s no better teacher than running code in production.

I am self taught and had no mentors for the first decade of my career. During that time I did things nobody else could do, things I was told were impossible.

Eventually I read some books and they added useful tools.

Read all the books from SICP to Superintelligence (ie concrete to speculative fiction).

But nothing is as educational as putting what you read into production, or putting it into production and fucking it up. I’d rather work with someone who has deleted a production database (ideally a preproduction database to be fair) than someone who hasn’t.

Try to forget the mindset that you need an authority in order to learn. Better to pretend authorities do not exist.
Open source is your friend. I wonder why more people do not take advantage of it. It's one of the greatest hacks available in our industry. Imagine in other industries like if you wanted to be a doctor, he could be a part of someone's greatest surgeries in the world like that is the power of open Source. Choose a project that you like lurk for some time, learn the styles and idioms of the project and then start contributing and take the feedback that you get seriously and improve upon it.
Couple of important lessons that will keep you in good stead for a long time:

1. Learn how to learn well, continuously, and sustainably. Tech changes rapidly. And you will want to hop from one domain to another, just for keeping things interesting and to move with markets. This is both a blessing and a curse. It is a blessing because you can start late and still be in the top percentile if you have the brains and work hard for it. It is a curse because you will be doing this no matter how many years of experience you have.

2. Hone your non-technical skills– caution: these are compounding over time (both good and bad habits) – being disciplined, thinking clearly, articulating clearly, being professional, being trustworthy, managing your physical and mental health, being dependable/reliable, having a growth mindset, thriving in ambiguity and uncertainty etc. then, honing your communication skills – effectively collaborating with people, give/receive effective feedback, do/get mentoring/coaching, working with cross-functional people, working with very seniors, very juniors, peers etc. read a lot, develop mental models, deeply craft your personal approach to first principles problem solving, to making tradeoffs/bets etc.

You can do the above all by yourself, through reading, and observing people from afar, and engaging with people (even strangers on forum like this one) in dialog.

How do you learn how to learn well?
This is a difficult question to prescribe an answer for that works for everyone, but the best I personally can think of is "practice".

To make that more actionable... My approach in life has generally been to find a project (even something seemingly incredibly dumb, as long as it is fun), then work through it, learning what I need to know as I go along. To learn "well", you must then also constantly question what you have done as you complete various stages of the project to see if you have done them as effectively as possible, and try to incorporate any lessons learned into future projects.

I have found that how individuals do the learning required for this differs significantly from person to person, so it is hard to recommend any particular approach.

The key is to figure out what your learning process looks like.

For example, I discovered early on that I learn in three phases: 1. I get exposed to something (a concept, a process, etc); basically discover that something exists. 2. I then see how that thing is used whether through mentorship or tutorials or, increasingly, through trial and error. 3. I apply that thing to some novel problem.

Through this cycle of Discovery-Tutelage-Application, I can assess my level of comfort with new material and understand when my struggles are due to trying to short circuit the process.

It's likely that you have some form of learning process that is equally cyclical, yet undefined -- once you identify and codify those steps, you can evaluate your progress when it comes to acquiring new skills.

You're doing it right now, i.e ask questions and seek answers.
I tell myself to not adhd it and instead take time and read through a whole manual, experiment in a local sandbox, grasp the limits of knowledge and features and also where it gets deep.

Then in a regular work I explicitly detect where it pays off and feel “see I told you”. This creates a motivational loop to continue not-adhd-ing through tech.

Sometimes I still fly over the knowledge, but then may note that what I’ve been doing in a complex way could be solved with one parameter, if only I knew about it. This creates negative feedback against flying over.

This is ofc only one facet of learning, but I find this “see I told you” method very effective, cause my main issue with learning is unwillingness to learn for no clear reason.

My issue with this method of learning is… deadlines. During work time, I often feel that I need to solve something “quick”, which then leads me to usually learn and really deep dive outside of regular work hours instead.

Now, I mostly actually enjoy doing this and thus it has not really limited me. But I wish I could just spend some actual work time on more ‘non adhd-ing’ what I learn.

Yeah, deadlines suck. Historically I managed to "manage the management" into a reasonable rush/cook balance most of the time, which allows for healthy exploration, but that is absolutely "ymmw" thing.
Have you chatted with your manager about expectations and your personal growth goals?
I love the manual method and occasionally used it. Basically assuming there is no Internet, just a book and a repo of source code and try to figure out how to do something.

Sadly I'm now so easily burnout that even setting a dev env up can burn me out.

At its simplest, rewrite and interface regularly with knowledge. There’s an entire hobby around personal knowledge management, and it‘s all up to you to find what works best, but taking meaningful notes and rewriting those notes, processing them further and further, will help form deeper mental connections regardless of method.
i learnt that at university - by essentially not being taught, but being given curiosity on the subject and told to research it.

I am not sure there's any hand holding that can be given to someone to learn how to learn.

You learn to learn with time and imo it's different slightly from field to field. In tech field you just learn by doing, asking questions, making mistakes and gaining experience. Take a sample code in a new language, make it do something slightly different. Then add one more thing on top. Then something slightly more complex, then finally try to make it do what you want. Once ready, deploy, test, and iterate.
I've been in a similar position of having to learn solo for 10+ years and lesson #2 above has been FAR more important than #1 in my experience. Clients and bosses care much more about communication, dependability, etc. than whether a product has been coded elegantly via best practices.
I would argue that articulating clearly is not a non-technical skill, it's the essence of what software engineers do.
There is a big difference between articulating "code" clearly and articulating clearly when you speak / write to other humans.
Code is written for other humans
Ideally, yes. And I agree that there's some correlation of how well clearly people can write prose and write code. But, articulating yourself with your teammates is not only about writing well. It's also about saying the right things. I have seen many engineers that write code well, can write a paragraph in English well, but just don't communicate enough and don't communicate the right things at the right time etc.
I can see some differences, but none of them seem "big".

In code you don't have all the extra communication avenues that we have when speaking, like body language, intonation, sarcasm and so on.

On the other hand, when writing code we are not speaking in real time. We can think about a problem for a while, consider the best possible way to solve a problem and how to explain it.

What do you see as a big difference?

1) Coding clearing in the moment vs (2) coding clearly for future selves is two different mindsets/contexts right there.

(3) Communicating clearly is an orthogonal skill to coding clearly. I think this skill is barely acknowledged in engineering cultures in comparison to the above.

I feel you have to have an engineering culture that values institutional knowledge retention, team education and growth — and not treating engineers as fungible — to get to level (2). Level (3) would be a great place to work.

I agree. Writing well is _highly_ technical.
Any recommendations on learning to "think clearly"? I feel like this is something I struggle quite a bit with and haven't found any good resources on improving it other than "sleep" and "exercise", which I'm not lacking in.
Unironically, that's what school is supposed to be for.

There's keeping the engine well maintained (the sleep and exercise part, for example) and there's driving the engine down new paths and honing you driving technique. You work on the latter by exposing yourself to novel and interesting arguments (interesting philosophy or argumentative non-fiction, for example) and then working through the argument again with counter-arguments in mind. I would not recommend pop-sci books for this, because their arguments and writing tends to be quite flabby.

I'd actually recommend something like RG Collingwood's "The Principles of Art" which is a relatively plain English example of well written philosophy:

https://archive.org/details/in.ernet.dli.2015.188470/page/n1...

You will disagree with him. The point is to understand how and why you disagree with him and to explain that clearly, not only to yourself but others as well. Thinking clearly is about responding and communicating clearly while displaying a sure and succinct understanding of the problem at hand.

You can apply that to everything you read or are confronted with, but the key thing to realize is that "thinking clearly" is something you practice. There is no one trick --- it's an approach.

For 2, I'll single out the skill of tailoring technical explanations to your counterparty's level of understanding and technical knowledge. The ability to explain to less technical people what your new project/feature does without going into too many unnecessary details and without being too high-level is invaluable. It builds confidence in your work for them (I know what this thing is doing - maybe not all nuts and bolts, but enough to operate with confidence) and in you as a professional (this guy clearly understands what he's working on and does not try to bury me in jargon or oversimplify things).
This exact scenario is one of the best interview questions I’ve been asked and have repeatedly re-used when on panels myself.

Taking a complex domain and effectively communicating it (correctly) at different levels requires having not just rote knowledge but an actual understanding.

It sounds like you are in an awesome position where your management respect you and your work output. This most likely won't be the case in all positions you take throughout your career. Leading projects are a great way to learn after making mistakes, you also get to set the direction and get the rewards when things go right.

Practical tips on learn good techniques, do research, find the best tech companies that do similar development to yours. Check out their technical blogs, their githubs, find opensource projects which have been developed to the highest standard. Dig into them and potentially even rewrite your own simple versions to learn, maybe twin it so you could make the new implementation a part of an internal research project... so main possibilities there.

copy the works of masters. that means look at it, think about it, put it away. And then, on your own, try to recreate it
Even as a very experienced engineer, I find that I learn a ton from chatting with Claude about technical decisions.

It is so valuable to take the ideas and questions in your head and get them out. You can then have Claude interrogate and problem solve with you.

By default, I think Claude is very conservative and sometimes comes up with ideas that aren't quite right. But you can actually just tell it to be less concerned about X or Y, to start over from scratch, etc.

Another trick I use is to ask it to ask me one question at a time to help clarify my thinking. I find that the one by one questioning really helps me find the boundaries of my knowledge and crystallize my opinions.

I was in a similar situation right out of college, and it worked out for me in the end. After I moved on from the tiny company I was terrified that I wouldn't have the skills needed to succeed in a "real" company, but I was pleasantly surprised to find that I actually had learned a ton and rapidly became one of the most senior engineers on my new team as well. So: it can work.

What I did:

* Read. All the things. Read HN comments, read tech blogs, read books. Don't put too much weight on any single book/comment/blog post—they'll almost all disagree with each other, and you'll learn the most by comparing and contrasting all of the strong opinions rather than uncritically absorbing any given opinion.

* Be okay with using work time for professional development. Your employer hired someone they knew wasn't experienced into a role that is typically filled by someone more senior. They need to be okay with you learning on the job, and if they're not you need to go somewhere else.

What I wish I'd done but failed to do:

* Don't get overly invested and burn out. This is your first job, but it's not your life, and your career doesn't depend on you completely blowing it out of the water as a brand new developer thrown into the deep end. Don't overinvest.

* Keep your eye out for red flags. Tiny companies that can't hire seniors might be small and niche but sustainable, but they might also stay small because the business side of things just doesn't work for various reasons. In my own case, it turned out the founders of the tiny company were both narcissists (which seems to be a common problem with tiny companies), which led to a ridiculous political implosion that I was lucky to escape.

Find mentors. This is true of any tech field.

Join Discords related to the stuff you’re working on, you’ll find people much smarter than you and any of your colleagues hanging out, talking about good approaches to designs, structures, infrastructure, etc.

You’ll also find idiots not worth listening to.

Remember you’re 6 months in / just doing the job is enough of a challenge. You’re calling yourself a lead for having full responsibility of the projects you’re working on. This is typically common everywhere except large tech companies.

Having full responsibility for the project, sure, but having the authority to hire for it is rare
Craving for a team of more senior people to learn from, "yodas" who guide you - is a fallacy. I hear younger people mentioning it in interviews constantly as to what they dream team would look like.

You can learn from everyone around you, regardless of their status. There is no "universal developer experience curve", everyone has more or less knowledge on a field or with a specific tool/framework.

You can learn almost everything alone - I mean learning from the web. There are great forums, groups, discord chats, ask LLMs carefully and check on the answers. It may sound reassuring that someone watches your back and won't allow mistakes or would help clean up a mess, but you should not keep relying on this anyway. Learning by doing and taking responsibility will make you much more self assured, which is actually most of what makes someone senior.

Learning by yourself is (on average) significantly harder. Some people can do it and succeed, but it's very easy to learn bad habits if no one is talking you out of them, to focus on the "fun" parts to the detriment of important but tedious parts, and so on. Far more people who attempt to be "self taught" fail than become incredibly successful.

You can have bad mentors/seniors, but looking for people to learn from and bounce ideas off is always a good idea.

Well, it's harder, but I don't think it's too hard. You have to keep your motivation high.
Motivation is not the limiting factor. Not knowing what you don’t know is.
Good luck with that when you are not at the stage of your career yet to have enough experience to judge what is good practice - and what is hype, BS and liable to cause problems for your project.

Having a good mentor or two is pretty essential because most of knowledge isn't written down and retrievable by LLMs or about some framework or tool. It is the experience of people who have been there before, done it, got burned and learned to not do the same mistake again.

I can second this. I have learned infinitely more by doing and teaching than I ever have from being taught.

It might be a personality thing though. I’m a stubborn idiot who questions everything he’s taught. I don’t take advice. I listen to people stories. The why has always more important than the how.

I’ve been fortunate to have many teachers and mentors, but I didn’t seek any of them out and none of them guided me. They were people with the right perspective and I had asked them the right questions.

But the two best mentors in my life are my two best friends. All three of us are different and have different things to teach each other.

It is not about "being taught".

But if you are the only technical person around, who is going to show you what a good or bad practice *in your specific field* is? That you won't find on Stack Overflow or by asking ChatGPT.

Being able to talk to an experienced mentor who knows the field you are working in is invaluable. Unlike learning some framework or design patters or what not, this information you won't find anywhere else.

You'd be surprised at how useful Stack Overflow and ChatGPT can be at helping to illuminate knowledge gaps.

I've found that one of the harder aspects of being unguided is figuring out the unknown unknowns.

You might stumble into a solution of sorts that mirrors a best practice but not know there's a "name" for that solution -- until you see it spelled out after googling around. That discovery can lead you down a rabbit hole where you gain fuller context.

Sure, having more experienced people around can help expedite that process in some cases, but then again you're limited by what that person has experienced. There's always some level you reach where you need to be curious enough in your explorations to seek out the next layer of knowledge in a self-directed manner, and the tools today are immensely better at supporting that process than 10-15 years ago.

I think the OP you are replying to points to "you don't know what you don't know". SO and ChatGPT can be useful, if you know what you are doing is fishy and ask for directions.
its the simple things

  fuzzing
  unittest
  scm
  code coverage
if youre programming without those, youre doing it wrong, and chatGPT isnt going to help

any more im missing?

What percent of developers do you think are actively using fuzzing? I would be shocked if more than 1%. Please do not read this as I do not think fuzzing is important! It is very important for system-level software.
I often include valgrind tests before Beta releases, as it is usually going to point out suspect areas needing inspection.

Fuzzing is only really useful for a very narrow range of analysis scenarios. If people understand threading properly: code should be able to take getting hammered, exiting gracefully, and cleanly get re-instantiated.

Also, banning hosts/accounts with an error-rate quota system is more common these days. =3

many languages gracefully handle errors, making those errors transparent to automated detection -- our crashes are now silent correctness failures

this trend in programming culture reduces our ability to do automated error detection!

you make a good point, and a good case for crash early and crash often -- with choice of erlang style recovery, or fuzzing style hard nosed correctness enforcement

Everyone hates hearing this one: Documentation, documentation, documentation. Programming is a social task. Therefore, everything else related to software development best practices branches off from that.
I too learn better by myself.

But I think there's a difference between someone who 'teaches' you and someone who is at a high enough level to discuss ideas or issues with you.

For example, in my first job I 'learned' the most not from the senior engineers around me but from another new grad who was just as curious as me. We would discuss issues we're having, brainstorm solutions etc. It was not so much that I learned from him, but that I had another brain of similar competence that I could fling ideas at.

Not having such a person makes your job more difficult (as you might find yourself in a rabbit hole and desperately need someone else's perspective) and much less enjoyable.

Imagine not having a competent dev in your team to review your code.

Everybody has different learning styles and it's almost condescending to say "well, this method that works well for you is a fallacy, try my method".
> "yodas" who guide you

is not a fallacy because it doesn't work, it's a fallacy because such teams rarely exist. I have worked on one or maybe two such teams in my career, but the truth is to get on a team like this you already have to be exceptional.

If you require a team of elite experts that are not only technically excellent but also love teaching untrained juniors in their ways, then you it may take you longer than the typical span of such a career to find these people. Then, even if you do find such a team, they're extremely unlikely to take you under there tutelage unless you yourself show an impressive potential to learn. And people that are truly exceptional don't wait for the right teacher to start learning.

On the topic of mentoring, I focus on people who ask good questions. I know how to teach a lot, but not that.

I started tutoring my roommate in college, and random people in the computer lab while he was finishing his homework. So I’ve been doing it longer than I’ve been professionally programming which is a long time.

Learning styles is something that's actually not supported by science at all and a common myth that is damaging.

https://onlineteaching.umich.edu/articles/the-myth-of-learni...

There's a good back about how to learn effectively written by cognitive scientists:

Make It Stick: The Science of Successful Learning by Henry L. Roediger III, Mark A. McDaniel, and Peter C. Brown

Definitely worth a read, even reading a summary on the book would be beneficial if you want to become a better learning. The techniques in the book work IME.

OMG, that's great to see. Finally scientific proof that I was right when I refused to do "highlighting" like they were trying to make us in school and university.
Yeah, the book is quite interesting especially in the context of advice you see online regarding learning about programming. It seems the simplest advice would be to just read the documentation then make things, when you struggle refer back to the documentation. Whereas most advice you read on social media is to pay for a course.

Throughout the book you keep hearing stories about how application and spacing are critical for reinforcing concepts.

I don't have it in front of me but I remember they presented one study that students who took a practice exam did better than those that just read the material and took the exam.

In the book they mention often that rereading material isn't useful or an effective way to learn.

    Whereas most advice you read on social media is to pay for a course.
Sounds like the ads of our time. I.e. influencers paid to do promotions. Not unlike the ads for certifications and courses before really. Certifications are BS. Someone with zero experience but "certs" is not gonna win any favours with me in an interview. Show you can do the job. A university degree is somewhere in between as there are many ways to get one. The BS - cert kind of - way and the "real" way.

    It seems the simplest advice would be to just read the documentation then make things, when you struggle refer back to the documentation. 
This has always been how I have learned. Learning by doing. Even in university. Just practice basically. Do whatever you need to learn or remember over and over with some time in between. Just like any other muscle exercise: reps!

Spaced "repetition is the mother of learning" is what my parents always told me. Minus the "spaced" part.

And yes, that's how we learned for most (good) university courses. We had "labs" every week. It was non-mandatory and while some profs would give you credits towards the final grade if you took part in them, the idea really was to get you to practice things over and over with some time in between. By the time you were learning for the final exam, it was already at least the second or third repetition of applying the knowledge.

Reading docs (or the book / your lecture notes) when trying to apply the knowledge is OK. Just reading it multiple times but not actually trying to use it really doesn't do anything in my experience. I passed my initial "learn a programming language" course at university without ever going to a lecture past the first two for example. I was using said language to actually build something that required what I knew was gonna be the main part of the exam (boolean logic - duh - and concurrency - way more fun) for building some actually useful tool for a friend.

"It may sound reassuring that someone watches your back and won't allow mistakes or would help clean up a mess, but you should not keep relying on this anyway."

This assessment totally devalues the experience of having an more senior, more capable colleague to learn from. They are not there to watch anyones back, stop mistsakes, or clean up anyones mess. Rather the point is that the junior member is able to watch the senior person, observe how they solve their problems, and how they approach fixing their own mistakes. It's about tacit learning, not bein nannied/micromanaged.

Agree 100%. Mentorship from more experienced colleagues can save an enormous amount of time in pain by pointing out someone is going in the wrong direction very early on. Mentors can also expose a mentees to “unknown unknowns,” which a mentee might not otherwise know that they need to investigate. I agree that “learning how to learn” is more valuable, but that’s not to say that mentors or more experienced engineers have nothing to provide of value.
You say you agree, but your points are opposite of his points.

Watching a senior is not a senior pointing you to pitfalls, or unknown unknowns.

The parent argues that although there is value in being near a senior, all the actions lay with the junior. This is a transition people need to make when they leave school and enter work.

I am not making points to expand on how I agree.. I am a elaborating on the benefits of having more senior colleagues around. The benefit is not that they watch you and correct you. Indeed, the mentee must drive their own learning. The really valuable part of having a more senior engineer around is not that you just magically learn by osmosis, but that you can ask them questions as they come up _and then level-up rapidly._ That’s the context my points were more meant for.
> You can learn from everyone around you, regardless of their status. There is no "universal developer experience curve", everyone has more or less knowledge on a field or with a specific tool/framework.

There's a big difference between learning from someone and having someone teach you something. The latter expedites your progress and clarifies learning path, whereas the former can even waste your time with political fights pulling you into dead-ends.

Read documentation? Oftentimes you'll get a much better understanding of something by going to the source than by reading quick how-to's and Stack Exchange. This certainly goes for Python and Git.
Personally I find a good linter like SonarLint can actually teach you a lot.
I've been in similar situations.

Keep fighting the good fight.

I would like to stress that your employer should, and will likely be happy to pay (or give you the time) to do many of the following. Don't feel like you need to do all of these by any means, I just wanted to give you everything that came to mind that has helped me in my journey:

- Conferences both in your specific domain (in your case oil and gas), or your specialty, like a more general data science conference. Meet people there and keep in touch with them, both fellow attendees and also speakers and people who have booths there. Your employer should be cool with covering one or two of these a year. If they're reluctant or on the fence it has helped me in the past to writeup a little summary of the conference, what I hope to learn and how it apply to my work, and give them a written summary when you get back including concrete things that you learned that will help your company pragmatically.

- Meet mentors on platforms like this, foster and build those relationships. It seems like you are already doing this well. Other places to meet them are at local and virtual meetups for the software or packages you use, tools you use, industry societies, etc. Linkedin is also an underrated and underutilized tool for this IMO.

- Free or low cost remote courses. I'm just wrapping up a remote class at Stanford, it's been awesome. Many universities offer courses, or even course materials and videos you can get your hands on. Good universities, with good courses.

Do these things during the work day, because they are work. Don't think like you need to do all this stuff above and beyond. Any good company should be investing in you.

-