I've been thinking a lot about apprenticeships over the last year and specifically the lack of apprenticeships in tech.
My mental model of apprenticeships is primary formed around how they apply to the arts -- people learning a craft from a single practitioner who has worked their life to develop a personal style or system. But apprenticeships also exist in trade, maybe even more so. Fundamentally, apprenticeships facilitate knowledge transfer -- all industries can benefit from that, no? So, I wonder why apprenticeships are far less common in software?
- Is it because so many industry vets were themselves self taught and so that mindset has lingered?
- Is it that so much of our industry is focused on access, democratization, and open sharing of information?
- Could it be that we need to train more software engineers than we have hours in the day, and that need for more qualified minds has pushed us beyond the 1-on-1 learning paradigm and towards bootcamps etc?
- Maybe so much of software and the knowledge around it is already accessible, so apprenticeships are just overkill? That said, there are still pockets of software where subject matter expertise and knowledge silos outweigh what is either 1) commonly taught in schools or 2) generally available.
- Software doesn't have the same requirements around professional certifications -- could that be at play?
Generally, do you all think there's value in apprenticeships or should we (continue to) move in the other direction entirely -- teach the masses? In that sense, I could see the argument that apprenticeships border on nepotism and are actually a form of gatekeeping. Have any of you been part of a formal apprenticeship (on either end)? If so, what conditions made that possible?
Generally, do you all think there’s value in apprenticeships or should we (continue to) move in the other direction entirely -- teach the masses?
Why not both?
I think they meet different needs and communities. They’re not 2 ways of approaching the same thing.
We have a person starting an apprenticeship with us soon! It's through a local link here in London. Seems like a great scheme. Previous years have been very successful, but unfortunately - this year, we're one of the only companies taking on board an apprentice from them. I think it's one of the first things to drop with budget cuts. It's a shame! A big part of it is introducing tech to a wider range of demographics. By appealing to the masses we run the risk of attracting more of the same. I hope the scheme can find some more industry links for the next cohort...
I think there's enormous value in mentoring, formal or not. I've had many mentors, in different areas, and value them highly. I try to give back as well, mentoring as best I can.
Why don't we have it in software? My personal opinion, 100% biased and anecdotal, having done this professionally for a bit over 30 years now is... devs don't want to be mentored. Some young people, fresh to learning the craft are open to it, but not all. And while skepticism is important, ego is the main barrier.
As an industry, we also don't ask about it when grooming new recruits. We don't chat socially and say "Who is your favorite coder or designer from the 60s, 70s,..." etc. "What UI from the past do you love and why?" "What are the most important, timeless values in software, to you?" We don't learn from other great artists, stand on the shoulders of giants, and carry things forward to the extent artists do. It's one of our major failings.
Dave Hoover and Corey Haines have a lot to say on this subject. Their two organizations (Obtiva and 8th Light) experimented with apprenticeships quite heavily around 2010, and Dave literally wrote the book on software apprenticeships ("Apprenticeship Patterns"). Happy to put you in touch if interested.
💯 Mentorship/apprenticeship is very powerful and under-utilized in tech culture.
I think it's an inertia thing where it's easier to do things the way most people have been doing things. For a new company that is probably focused on just surviving, trying a "new" model of training like apprenticeships might seem unnecessarily risky. For a mature company the existing way of doing things could be too ingrained and the incentives for any individual to change things might not be there. Also in tech there's a perception (and reality?) people change jobs more frequently so putting a lot of investment into an individual's initial education would probably not be worth it unless that person had to stay at the company for a certain period of time.
I really do think so, especially with people starting their first programming job remotely its tough.
There's another aspect I encountered is I don't know how to mentor people properly & I realized I don't think many people do. There's no gold standard I can point to & say, we should do it this way.
More so, when I've gone and done this myself, I essentially got told to stop from my managers, but never got provided tools/ideas to do it better.
Especially important for those in under represented groups (even more with low confidence). My biggest concern is capable people getting completely turned off tech due to cultural problems. I've experienced it, and I know many who have.
Lots to respond to
there are also historical examples of one phasing into the other
@Eli Mellen I'd love more context here if you have some.
We have a person starting an apprenticeship with us soon!
Lu Wilson in your opinion, where's the line between internship and apprenticeship? I ask only because you used the first person plural here, so I'd imagine your apprentice will learn from a few folks and receive instruction from a team.
devs don't want to be mentored. Some young people, fresh to learning the craft are open to it, but not all. And while skepticism is important, ego is the main barrier.
This is an interesting callout @Gregg Irwin. I hadn't considered the ego part. I try to keep a beginners mindset at all times but probably fail at it more often than not. I'll have to think more on this -- I think you're digging at a cultural issue that I've noticed but never formally identified
Dave Hoover and Corey Haines have a lot to say on this subject.... Happy to put you in touch if interested
I haven't read this but certainly will put it on the reading list. Might even reach out for that conversation if I have follow-ups -- thanks!
Also in tech there's a perception (and reality?) people change jobs more frequently so putting a lot of investment into an individual's initial education
I recently moved into a fairly specialized space (video encoders and infra) and found that more folks have either worked with each other in past or at least know about each others work.
From the few folks I've talked to about knowledge transfer, there seems to be a pretty real fear that 'young people' aren't investing the time necessary to learn the industry.
In that sense, people are willing to teach you (even if you do leave) because it benefits the industry as whole -- plus you might boomarang back at some point.
In a way I feel this connects to the earlier point about ego. The "I don't need to be an apprentice when I can bounce between companies every 2.5 and maximize profit"
@Marcelle Rusu (they/them) so many good points to unpack
I don't know how to mentor people properly & I realized I don't think many people do.
Did you have a mentor yourself? I wonder if this is a 'chicken and egg' problem. Potential mentors themselves need a good example to emulate. What in your mind does a "proper" mentorship look like?
More so, when I've gone and done this myself, I essentially got told to stop from my managers
😞 ugh, I'm sorry. Mentorship programs don't start and end between mentor and mentee, there has to be a support system to facilitate that relationship.
My biggest concern is capable people getting completely turned off tech due to cultural problems
I've noticed most mentorship or apprentice program in software only start when you're in the door. On the other hand, trade apprenticeships are paired with school and take you from square 0 to 100. Do you think there's room for industry vets to reach outside of the industry to students considering CS or broadly 'people interesting in software'.
It's an "apprenticeship scheme", which is a national government thing here. I don't know what the difference is between that and 'internship', as I suspect it might mean different things in different English-speaking countries. 'Apprenticeship' just means that it's officially recognised here. Whether it's officially led by one person or many, I'd certainly expect them to learn from multiple people! Different people have different skills and backgrounds, and being exposed to that variety of people is a huge benefit of schemes like this. In my original career (not tech), I did a similar thing.
@Walker Griggs
Did you have a mentor yourself? I wonder if this is a 'chicken and egg' problem. Potential mentors themselves need a good example to emulate. What in your mind does a "proper" mentorship look like?
I didn't, and I completely agree. I'm still trying to figure out what a "proper" mentor looks like, but I'd think it'd have to incorporate the following with some frequency.
work with the mentor on something - pair programming (?)
talk through problems mentee is facing & get encouragement + advice
I've noticed most mentorship or apprentice program in software only start when you're in the door. On the other hand, trade apprenticeships are paired with school and take you from square 0 to 100. Do you think there's room for industry vets to reach outside of the industry to students considering CS or broadly 'people interesting in software'.
Would love to do this and I think many would, but I wouldn't know how.
On another note: my sister is in planning and after you start the job, you need to go through a mentorship to get to a certain title. It's mostly just talking + encouragement from what I know, but I think the encouragement is at least as important as technical if not more.
@Walker Griggs I've been fortunate to work with may types of people, around the need/love of building software. Where my ego comment comes from leans heavily toward those (broad brush here) who are off-the-charts smart as engineers, but struggle on the social/empathy/human side. I think I'm somewhere in the middle. :^) People in this group are interested in constructive collaboration, learning together. That's why I feel safe posting things that may be flat-out wrong, or make me look ignorant.
We're all somewhere on this journey, via different paths. Some of my favorite memories are working with someone who was way smarter than me on the math/code side, but also able to meet me in the middle on the need to make things accessible to "normal" devs. Many times, though, working with people so much smarter than me on the machine side is tough, and even at my advanced age I can doubt the value of my experience and design values. I've also been on the other side, where maybe I wasn't so great at being mentored, because I thought I was right. :^)
A direct analog for me is theatre. When I direct, it's very intuitive and comes from my passion for it, just like software. And, just like software, sometimes the most talented actor just won't take direction. Sometimes it still works out, but it can also make the whole show less than it could be, because the vision doesn't hang together when one or more pieces don't mesh (this is true for the tech aspects like lighting and set design as well).
As for how to mentor, I can only say I've had some great ones who probably taught me by example and osmosis. Don't try to mentor everyone. Find the right mentees, who have a spark, and just share your love for your craft with them. Be the student as much as the teacher. I probably learn more than I teach, because seeing through new eyes make you question and try to understand more.
When I started out as a junior developer I was yearning to be mentored. But I received the message from my leads that I do a great job, and I should strive to be more independent, do things my own way. At my next job I worked in a team where I was the only one with a programming degree and experience so again there could not have been any mentoring.
And at my last job I was working with great people and my leads were open to mentoring me. But here I experienced that they did not have a talent for it yet, they did not really listen to my problems, just giving me general good advice. For me that resembles more like watching youtube videos about programming then an actual two way discussion.
When I tried to teach people younger then me I also noticed the ego problems that @Gregg Irwin mentioned. A lot of times young developers just want to play around with their own solutions, and they don't want to deal with learning something. Also I met people who openly said they are doing this for the money, and they don't care about learning if they don't need to. And of course developers mainly care about technologies, libraries, tools and programming tricks. Its very hard to have discussions about the human side of the job, communication skills, psychological safety, etc, although these can have a lot more impact on day to day work and these are the things that are not taught in programming courses.
Also I met people who openly said they are doing this for the money, and they don’t care about learning if they don’t need to.
While I understand the drive to maximize the rate at which one can trade labor for capital, I do not enjoy working with people who approach their work (their lives!) from this perspective. 😞
I noticed pretty early on in undergrad that my peers could be roughly broken down into categories.
- those who were in it purely for the money
- those who were interested but not convinced that software was their calling
- those who ate, drank, bled, and obsessed over software
I also found that people's success and happiness in their career was strongly correlated. Nothing groundbreaking about that observation and it can probably be applied to most fields of study. BUT I also noticed that ego in that last category could run rampant -- in myself even. I think mentors actually serve to reduce that ego -- to show their mentees just how big the pond really is.
You don't know what you don't know. But once you know how much there is you don't, you're forced to either adopt that beginners mindset (good) or dig your heels in (bad)
It's an "apprenticeship scheme", which is a national government thing here. Apprenticeship' just means that it's officially recognised here.
Lu Wilson I really like this. I'll give it a read through. I didn't know that is was govt supported
For me, a related area to mentoring is community leadership. I've seen many people and manners of interaction. It helped me see that someone (I'll call out the especially smart ones; the elite) didn't just resist me or my ideas, but almost anyone. They could also be hard on those of us not as gifted or adept. Encouraging empathy here, and trying to get them to do the mentoring has helped at times. Not always, but I love, love, love, to see someone else get that big Thank You for their help and seeing it affect their future interactions. We can all fall back on habits of course, but it's a journey, right? And this empathy has to go both ways, because we get some very special people in the modern view of neurodiversity, and dealing with that is hard as well. We all need each other.
Some of us are deeply connected this craft, but we're still social creatures with all that history in play as well.
Living my own example, as a re-newbie here, I'm flooding thoughts out that I haven't had a chance to get out otherwise, so I appreciate everyone's patience with that. :^)
A nearly ten year old artifact of mentoring Paul Ford (in this case, in Clojure):
I'm reminded of Beautiful Code and Beautiful Architecture, which I really enjoy and think the idea should be much more widespread. Exercism is a site that works along the lines of mentoring, at the small scale of functions and problems.
Here's an old gist I made, which falls somewhere in two venn circles of mentoring and literate programming: gist.github.com/greggirwin/38883ca5109175a60896d2f406ee49f6
Gist updated for a recent change in Red, for anyone who wants to run it, and also updated the code-only version at gist.github.com/greggirwin/6745b96d0531ee88f5755d6e62515a9d