Who is Teaching Software Developers How to use a File
When I was about 14 I got a really interesting present from my uncle: A construction set for a ship. Not one of those plastic thingies that I often glued together in an hour at that time, but a wooden one, which meant I had to cut out every single piece with a saw, file it until all the edges had exactly the right shape and then glue it together. This way attaching a single piece easily became half an hour or an hour of very concentrated work. I did this together with my uncle who learned in his youth the profession of a cartwright and is a perfectionist, so he knew how to do this right and wasn’t willing to accept anything less.
I learned a lot of stuff during my work on that ship model, but I remember one lesson especially well: How to use file.
You might think using a file can’t be that hard, but trust me you still need quite some advice and practice to do it well.
If you just use it without such practice, you will file of some wood.
The surface will become smooth.
But it won’t become straight.
And you won’t get perpendicular, sharp edges.
You might be able to replace the advice with more practice and maybe some books. But the advice will make progress much faster (and also more frustrating in the beginning because you’ll hear over and over again: “No, you are doing it wrong”).
So my question is who is teaching how to use a file to junior software developers? “File” doesn’t stand in for things like the usage of design patterns or practices like Baby Steps. I’m talking about very basic things that many people consider easy:
- Always start work with a fresh and clean checkout from version control.
- What to do before checking in your code.
- What to write into a commit comment.
- How to write a bug report.
- …
Most developers learn this kind of stuff at some point in their career, but we as an industry waste a lot of time be forcing them to learn that really slowly. Most teams I have seen do discuss difficult stuff, like design questions and how to use version control to best support the teams work flow. But often there is very little done for teaching the very junior developers.
Often they only get a quick introduction into a tool and then they are left alone with their task. They work along, do some stuff and only hours or days later they might get some feedback. That feedback often is unspecific and not very helpful like: “Who wrote this stupid commit comment?”
Basically this is a workflow that looks like this:
give task to junior that he might master -> junior works on task -> time goes by -> if lucky junior gets feedback -> repeat with possible adjustment of task difficulty
This might be comfortable for the junior, because he doesn’t get criticized very often, but it slows down learning and this is something we just cannot afford in IT. It also leaves traces of the failures in the results.
I therefore propose to a different approach:
give the simplest task to the junior that you can think of that he hasn’t proven yet to perform well -> watch him doing it -> stopping him whenever he does something you don’t want to end up in the end result -> explain what is wrong, why it is wrong and how to do it better -> let him try again.
The obvious way of doing this is pair programming, but pair programming for this purpose has some problems. When two developers of very different skill levels work together the senior developer easily ends up doing the work while the junior is watching her. Not helpful. This kind of stuff is about learning, not so much about producing results.
Also with pair programming you have one senior training one junior. While this is awesome for the junior, it is also very expensive. With a little practice on the side of the senior it should be possible to supervise easily six juniors, maybe more.
This again might sound like the typical workshop or tutorial and it is indeed similar. But a typical workshop often stays on the surface of things, because it tries to cover as much as possible. What I propose is an intense training that goes slowly, but strives for perfection.
What do you think? Does this make sense? Is it already happening somewhere?






I´m trying to approach teaching like that in my Clean Code Developer workshops. That´s why the whole topic is stretched out over almost 10 days – which still is not enough to be thorough.
Real learning takes time. But most companies are not willing to invest enough. They like offering of 1-2 days. And on top of that they think devs coming back from such a training are able to teach what they heard to their colleagues.
Also hardly ever homework is done properly. Devs find all kinds of excuses for not accomplishing their assignments between trainings blocks. But homework is important: time on your own trying to solve a problem. That´s a different mode from sitting with a teacher.
Bottom line: Yes, their is some teaching like you described available – but the willingness to invest into it is limited.
File != File. I thought the article is about files in the filesystem.
Ontopic: I agree that in most teams the base knowledge of software development isn’t tought to new members. If they are experienced developers, there’s no problem. If they are green, they should be brought up to speed as soon as possible.
@Steven yeah I liked the double meaning of file
I disagree on what you say about experienced developers. I have seen my share of really bad practices from experienced developers. Many of these incidents are worthy of The Daily WTF. I think this happens because hardly anybody teaches this stuff. Many developers will sooner or later teach it themselves, but others won’t and in either case lots of time is wasted.
[...] Who is Teaching Software Developers How to use a File (Schauderhaft) [...]
[...] mass assignment and SQL injection ( zweitag.de ) How Resharper rocks my average work day. ( DZone ) Who is Teaching Software Developers How to use a File ( schauderhaft.de ) We Can’t Measure Anything in Software Development ( simpleprogrammer.com ) A [...]
Hmmm … I’m afraid you’re right about experienced devs who write bad code. At least some of them visit conferences and read books and articles to sharpen their saw every once in a while, but not all of them. But: Will the devs listen to a forced pair-programming-session if they are not willing to read a book in their spare time? I think some of them would just ignore the lessons learned and go on with their usual behavior.
Hi Steven,
of course it is hard to FORCE knowledge, skill or discipline in the head of an unwilling developer. BUT I have seen very little of that kind of developer.
But I’m talking more about training that should happen at the beginning of the career of a developer. At that stage there is a strict contract explicitly or implicitly: You as a developer do what I (when I’m in the role of the teacher) tell you. You can and should ask for reasons. You can ask all the whys you want, but in the end you do as I tell you. If you don’t this will have consequences for the work and in the end for your employment relationship.
Of course this assumes the developer chooses to actively ignore the advice (which I almost never saw). This is not what happens when a developer makes mistakes.
My expectation is that the absolute majority of junior developers would
a) appreciate the training they get.
b) see after some time the benefit of the advice and follow it.
c) in few cases come to the realization that they don’t have the discipline needed for a career in software development. That of course is a sad realization but it’s better to have it in the beginning than after 5 years.