Whether or not Uncle Bob is still "beloved" is surely a topic for longer discussion :-) but I agree with much of his reasoning around pace of change. The key point where we differ is the phrase around "you owe it to your employer" which is patently rubbish. You are already in a time/effort-for-opportunity/money arrangement with your employer which needs to be seen as win-win by both sides without any burden of guilt on either side.
Learn extra stuff if you are intrinsically motivated to do so for the pure pleasure of learning and the benefits acquiring knowledge brings. Internal motivation is the only way this is going to stick. If this extra knowledge can be shown to bring more value to your employer, then by all means make this a point of discussion during your next pay review, but that shouldn't be the main driver.
Many of the things Uncle Bob says make sense, but the endearing nickname and accumulated fame make it dangerously easy to fall into the pits of authority bias.
Never assume something to be true just because "Uncle Bob" (or any other author) said it. Come to me with independent reasons.
I especially have an issue with his "learn in your own time" stance — he quotes that doctors do not get paid by patients to practice sutures and football fans do not pay to see players run through tires. Both are not really true: in both cases the employers will generally pay for training, and training time is calculated into the final price of the service.
Of course that doesn't mean that you should work on your random hobby projects during office time, but in my opinion when you ask about learning opportunities during a job interview, it should never be answered with "If you read Uncle Bob's books, you should know to do that in your own time".
Nicely put! In the end it's all about your own choice, and matching the learning to your own priorities.
I would like to turn it upside down:
Since you started your career in programming, you have a certain interest in the field. You typically work 8 hours a day 40 hours a week in this demanding field. You get paid to solve problems. And mostly as long as you solve problems you are getting paid for longer.
This makes you a good (sic!) programmer. And there is nothing wrong with it. You do not need to have a twitter account, a githubrepo or blog about what you do, to be good at what you are doing - though the hype wants you to believe otherwise.
If your employer wants you to improve, it is in his own interest to pay you (or to give you time) to do that. Of course he could fire you and hire others, but that works only for some time - it is a sign for bad corporate climate, which doesn't bind people to the company and which is detrimental in the long run; although, the company doesn't realize at first.
So, what to make out of Uncle Bob's advice? You could read it in two ways:
1) If you are dedicated to your job and love what you do, it will be natural to do more than others - even in your spare time: because it is fun to you. That's the way it works for me. I spent time beyond my workday on education, because I like to do so. And when I am doing nothing, I have no guilty conscience about it.
A side-effect is, that my knowledge about things may be broader than that of others. But, that doesn't degrade their knowledge or make me magically better.
2) You could read it as a general advice: If you want to get better at something, you should perhaps spent more time on it. If you want to be a competitive programmer, you should invest more time in training your skills. But that is nothing, one wouldn't have known without Uncle Bob.
Uncle Bob's advice is ill advice, because it is a recipe to feel bad about yourself.
You are not your job.
"You are not your job."
This is an important fact which Uncle Bob seems to forget sometimes. It's a good thing that software devs are not only trained to code, but also to think! So I hope that most of his readers remember that fact, even if Bob doesn't.
Love how you look at this, thanks for sharing your vision!
I learn on my own because I want to know things outside of what my job requires. Because they are more exciting. And maybe because I would like to change my job eventually and I need relevant skills for that. So I tend to invest more time in learning when I am especially bored at work.
Anything I need to learn for the job I do during work hours, it is just a part of whatever task that requires new skills and knowledge. I don't feel in any way obliged to do it on my own free time.
thats interesting, just curious if you have a system for learning ? and how do you decide on what to learn ?
I just follow whatever sparks my interest, this way I am faster and more efficient getting that knowledge into my head. I rarely follow courses from start to finish, getting only things I need at the moment and while I am still interested. Sometimes I think I should be more organised but it never works out, I just waste time dragging myself through.
I like watching videos as well as looking at many examples of similar thing in different context and from different sources. And apply it, better to something I am already working on, if I can. If I cannot think of practical applications or the thing seems too vague and complicated to grasp then I assume it is too far from my current bubble of knowledge and I need to get to it later.
For example, if you are just starting learning a musical instrument, playing a complicated melody with two hands is out of your reach. Maybe you need to try to get comfortable with one hand first and with simpler things, but keep getting back to the complicated stuff to check if this time you are close enough. Same with tech.
I agree, some courses are just too long and sometimes you just need the relevant parts atm.
yeah, its always best to start with simple then aim towards complicated parts! :)
I think Uncle Bob's idea comes from the (misguided) idea that the software industry is comprised of folks who live and breathe code, love solving complex problems, and want to be the best of the best. For a lot of people, this might be the case. Maybe it used to be like this in the early days of tech. The problem is - for many, perhaps even most developers, software development is a job. It's not their passion (maybe it used to be!), they don't want to study and prep after hours, they just want their paycheck. A paycheck to support themselves, their family, their lifestyle, whatever it may be.
It can breed a toxic work culture to believe that yourself and your coworkers should be studying and advancing their skills outside of work. This isn't required for other professions. Yes I read the bit on doctors and lawyers, but are software developers comparable? Is it not a bit presumptuous to compare our work to those who studied for a minimum of about 10 years in universities, go through licensing exams, etc when our work doesn't even require a university degree? There's no 6 month bootcamp to be a doctor or lawyer. They're legally required to keep up to date on their skills because the requirements to enter the job are so high to begin with.
The fact that a company values your output casts a hierarchy ordering individuals by the quality, quantity and character of their output. All else being equal, people who put in more time to learn will be more effective (and therefore valuable) than those who don't. It's not a "toxic" fact, it's just a fact.
Bob's advice is merely an estimate for what it takes to gain upward momentum in the hierarchy. It seems from your argument (correct me if I'm wrong) that you find Bob's ideas "misguided" because your analysis is rooted in the notion that the number of people actively trying to climb the hierarchy somehow diminishes its existence. The hierarchy exists whether you participate actively or not---because it's induced by the free market.
And sure, there's no 6-month bootcamp to become a doctor. But there are no doctors working on non-critical projects. If you were hiring a team to craft software for a life-critical medical device, you wouldn't hire someone out of a 6-month programming bootcamp either.
There's certainly evidence in the psychometric literature showing conscientiousness is a strong predictor of professional success. The explanation for that is precisely the one I give above. You can therefore argue that the number of hours in Bob's estimate of how much time should be spent learning is too high, but you can't argue that it's misguided.
Wow, this is a great article, I'm glad someone touches this topic since it's been a while very controversial. I personally believe that you should learn whenever you feel like, or whenever there is a need for, but not to put a number on it (4h a day or similar) that will definitely make learning obligation, not fun.
I think the freedom of it makes sense but how do you keep yourself accountable ?
Depends, sometimes I rely on people which carrier I respect, and keep up with their recommendations (what to read, which conference to attend, what's hot) or by listening to the community. Then I have an idea what should be nice to learn/understand + something which personally interests me and that's the recipe. Really not more than that. As I said I do not put any number on my tempo, I read/listen/watch material in tempo which is every week different, but it is most comfortable for me
I see, thats interesting. Thanks for sharing
I believe that in any job, you need to constantly improve and I totally agree that you should Do so in your spare time. But learning/education also has to be Part of your Job - an employer who wants to have devs with up to date skills needs to invest in These skills. But: Improving my skills is something I owe to myself, not to my employer.
I think you hit the nail on the head by saying you owe it to yourself. This shows me that you value, maybe even prioritize your job / career / skills enough to make the investment. And that is great! Don't get me wrong, I'm not telling people not to learn. I'm trying to tell people to get to think about why they are learning, it should be because of an alignment in your own live priorities, not because that's just what you need to do when you are a software engineer.
One thing to be aware of for any recommendations from Robert Martin:
They are written for a very specific, highly simplified version of reality. A spherical cow for programming.
The more specific and fine-grained his recommendations, the less susceptible they are to change due to real world factors; guidance on code is more likely to remain applicable than guidance on Coders.
The result of this simplification is that when you try to apply behavior-based ideas to actual people, messy reality steps in.
When you accept his definition of how a Coder behaves, the only people who can meet that definition will be people who are the most like him.
Anyone who has a different reality and cannot (or will not) follow his rules of behavior is therefore either "not a real Coder" or is a less valuable Coder. It is a form of gatekeeping, and we need to recognize it as such.
Wow, just wow! I really like the way you look at it and how you describe it. Thanks for sharing!
I spend a lot of my free time learning, not only work related, it's what makes me happy. I always found that spending my time on things I'm intrinsically interested in to be worthwhile. For example in 2003 or so I discovered this weird "Ruby" language, and for years people told me not to waste my time on it. Well guess what, it's 2018, I still use Ruby and it was a cornerstone of my career.
And if it's making you happy, keep doing it! Glad things worked out for you!
Everything has been said, but when I read the article from the rss feed I was so upset that I really need to rephrase that is just 2 lines:
• You don't owe your employer anything more than what's been contractually agreed upon: you sell your labor and you get a pay check for that.
• Learning is many orders of magnitude more effective if you enjoy the way you learn and if you enjoy what you learn. And you owe that to yourself and the people you love.
Thank you for researching the actual hours practitioners in the two mentioned fields need to put into learning to stay in their field. It really helps putting Bob's numbers into perspective.
While I do think that Bob's numbers are severely flawed, and I think that about quite some of his statements, I can see where he's coming from. He sees software professionals as some "hardcore coders" who love to code outside work, and to whom coding is not just a hobby but the hobby. And since his perspective is far from my own, I can only disagree with him.
A lot of my university colleagues do entirely different things from coding in their free time. They go climbing, they they perfect their cooking, or they read through several (thick!) books a week. I myself spend a lot of time making and analysing music, as well as with cooking. Are we bad software professionals because of that? Uncle Bob would certainly say "yes" and, again, I would disagree. Doing different things in your life can only benefit your coding skills, since they provide you with different ways to tackle problems. And - at least to me - coding professionally is nothing else than solving other people's problems.
So, in a way, you could say that we do spend those 20 hours per week on learning work-related things. It's just not that obvious how and when our work will benefit from them.
Cooking together, for example, is nothing more than applying parallelization and caching algorithms to biochemistry problems. In fact, we often talk about interesting technical problems we encountered at work/uni projects, so we learn in several ways - all while having fun (and an awesome meal). Playing Jazz makes you "think on your feet" - you don't have a lot of time to think about your chord progression when you're playing. And if a few measures sound shitty, you still carry on, hopefully doing a better job next time. Yes, there are "idiomatic" solutions to many situations (like II-V-I progressions and established Blues solos), but the really interesting stuff happens when those are not enough or are ignored for really good reasons. Sounds familiar? ;)
As for the part of "owing" someone something: I owe my employer what my contract (and the law) says I owe them. Nothing more, nothing less. That doesn't mean I don't put 100% effort into it. That only means that I have a somewhat healthy relationship towards working, or at least I hope so.
I love the view you have on this, very interesting how your connect other free time activities to increasing yourself general skill level and reflecting that on your skills as software engineer. Thanks for sharing!
It depends on your values. If it’s super important for you to be top of the pile, knowing it all and so on, go nuts. If, like me, its ok to just do good work and live a balanced life, avoiding burnout - then choose how you use your time - it’s totally fine (I’ve done some work I’m proud of).
Nicely put, this is a great summary of my intended message :)
Irrespective of Bob's assertions that "you owe it to your employer", we do owe it to our co-workers and colleagues to not create implementations that are harder to work with than necessary.
The value of learning (and mastering) patterns, principles, methods, languages, etc, is so that we start to see the mistakes that we habitually make that we often don't realize are mistakes at all. We do it so that our decisions of what is good or bad - especially in regards to the tools we choose - are not influenced by mere dev community social identity, and are instead rooted in the objective science that underpins software design, and thus implementation and testing.
It's about not being made a sucker by fads and fashions, and so that these indulgences don't leave behind work that we were once socially-enthusiastic about, but now know is objectively undesirable.
It's about respect for our co-workers. It's about not making their work harder. And when we do that, we can even free up more time to allow them to further their studies and practice in pursuit of their life dreams. It's about not increasing someone else's suffering in order to optimize for our own expediencies and conveniences.
Hi John, thanks for your article. I started to write an answer, but it became way too long... Here are my two cents on this topic.
In short, I think we should all keep learning and I don't see anything bad in learning at working hours and indirectly charge for that. 15-20 hours might be a bit too much either you do in at working hours or at home, but I think there should be a golden mean.
Nice article! One part of my PhD research was to capture what constitutes software development expertise and which factors foster or hinder its formation (see this blog post). I asked my participants what employers could do to facilitate expertise development, but I didn't look into how much learning should happen at work, and how much in the spare time. It would definitely be an interesting direction for future work to investigate how much spare time developers sacrifice to improve their skills.
Thanks! I've put your article on my reading list, I'm really interested in your findings.
Let’s rephrase this (in)famous phrase: Learn 15-20 hours a week. You owe it to yourself.
I learn a lot. About the software i use at work, the libraries i use at work or in pet projects, about software i never use (but our customers or competitors do). I also learn about woodworking, masonry, carpentry, psychology, and whatnot. If not for doing it myself then just to see and understand the opinion of other people. About anything.
You might work for the biggest compony in your industry, but what if they go bankrupt? What if AI takes over computers, or the constant cryptomining renders them useless, and you have to do something completely different? Or just what if a woodworker, mason, carpenter, or psychologist comes in your door and becomes your Biggest Customer Ever?
Learn something new every day. You owe it to yourself.
Thanks for sharing! Although I don't completely with you on this. You bring it like everybody owes it to themselves, they don't. It all depends on what your goal is, what you want to reach in life. It might work for you, and if so, please learn something new every day!
The problem is the expectations we set when role figures in the industry make such black and white definitions. This makes people not think for themselves and simply assume that this is what is expected from them. People should think what they want to reach in live, what they value and align their time with reaching this. Is your career import, please make some time for learning. Is your job just a job for you, well you can do with a lot less and spend time on things you actually find important.
Although there is some truth your statement about the uncertainty of the future, it feels very toxic to me. You basically say anything can happen, you won't know what, but you better be prepared for it! I'd turn it around, anything can and probably will happen, you can't prepare for most of it, so just deal with it as it comes along. I think dealing with stuff this way gives you a lot less stress than trying to prepare for a lot of things that will probably never happen.
It's not so much the learning here that bothers me but the time. We all learn at different rates, some things are easier than others, so that time to learn each day can differentiate depending on what you are doing and what you are learning. When trying to grasp something, it may take longer than some concept that gives you an AHa! moment and things move along.
There is a ALOT to learn in software, and depending on what sort of environment you are in (Front or Back, Application or Web, Java or C#, AWS or whatever) there is a huge amount of choice to make. You can learn for the sake of learning, or learn to keep yourself up to date, or learn more about what you are doing. It's all up to us, and we all have different paths to keep and follow.
Notwithstanding the time commitment it IS a lot of time, but that is all relative to what you are doing and what you want to do. I'm more committed to learning and am always trying to learn more about something, and for me that's fine and at times I might want to learning something completely unrelated to my work just to keep myself amused, learning, and have some fun.
You owe it to yourself to learn ( I read it somewhere in this thread). This is the biggest take away from this.
I agree 4 hrs week is a byte to much.
But I disagree with you on some level.
Because no one really controls what we do as Doctors or Lawyers. And I believe our world turns faster than other disciplines. So we have to put in more hours. And if we don't keep updating ourselves, we contribute to the death of the discipline. It obviously won't die, but it will however make many miserable.
Great read John!! I agree on it 🙃 And BTW, a huge fan of Uncle Bob
Great article. Thanks for sharing!
15 hours a week. So that's 2 hours a day roughly including weekends. Will take me some serious self-discipline. But if Uncle Bob says I must, then I will.
Funny think that on the end people who don't code have more money then you.. it's good to learn more more more more more...
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.