Two years ago I walked into a classroom in our office. Not a meeting room. An actual classroom, whiteboard, rows of chairs. The company had hired an instructor to teach the new hires Java. Two hours a day, three days a week, for three months.
The training gave me syntax. Objects and classes. How inheritance works. What an interface is. The words for the things you do in code. Every week we wrote a small program and the instructor reviewed it.
For the capstone we built two projects in teams. Karobar was a virtual trading simulation – buy and sell, track profits and losses, render the portfolio. DejaView was a browser, written in Java, that rendered web pages with basic controls. Two of us, three months. That tells the full story.
The point of the exercise was not the product. The point was to write enough Java to realize we did not know how to design anything.
What the training did not give me was taste. That came from my first manager.
What he taught
The training ended. We were assigned to teams. My first manager started reviewing my code.
He would pull my changes up on his screen and ask questions. Why does this class know so much? What is this method really doing, and what else does it do that it should not be? Where does the data that this object carries come from, and who decides when it is stale?
He drew things. On a scratch pad, on the office whiteboard, in the margin of a printout. Boxes with names in them, lines between boxes. He called them designs. I had been writing code for two years in college and had never heard the word used that way. Design, in my head, had been about screens.
I started reading his code too. Looked at his class boundaries, the shape of his method signatures, how he named things. I copied the style deliberately at first. After a few months I noticed I was drawing boxes before I wrote classes. Not every time. Often enough that the code coming out was a different shape than what I had been writing.
What stayed
The Java I write now is still Java. The syntax has become second nature – classes, interfaces, inheritance, the words for the things you do. What my first manager gave me has not become second nature. I still reach for it deliberately.
When I open a file that someone else wrote and the shapes are clean – the responsibilities where they belong, the boundaries where the dependencies break – I can feel it without reading carefully. The training taught me to read the syntax. He taught me to feel the shape.
That is what clean design means. Not a set of rules. A thing you can recognize when it is there and miss when it is not.
