Edward Tufte's books, "Envisioning Information" and "The Visual Display of Quantitative Information".
Why suggest these books that seem just about graphic design, to an audience of mainly software developers? Well, aside from the stylistic points about graphical plots and figures, it is more deeply about being able to communicate effectively, with intention.
I find that all too commonly, many junior people who code are unable (or maybe more charitably, unpracticed) at formulating arguments or explanations for why something exists in the form it does, or how it ought to be designed, in a way that they can coherently explain to someone not deep in their code. It usually means that they have not spent time thinking about it deeply, and are stuck in the "show me lines of code to explain what something is" mode of thinking. Or that they can only explain the approach in terms of the specific lines they are writing -- they have not moved beyond that level of understanding.
I won't say it to the person generally, but I really have to bite my tongue when working with someone who has no way of explaining something (at an overall approach level) other than showing me lines of code. Stepping out of that realm into graphical communication is one way.
Being able to think graphically in a coherent way as a software developer means you start to think about how to explain your work to others as more than lines of code -- and in explaining to others, improving your own understanding of what you're writing. Btw, it also probably means that you're more likely move beyond the role of just a plain old software developer and become someone responsible for the design of systems, the direction of work.
Why suggest these books that seem just about graphic design, to an audience of mainly software developers? Well, aside from the stylistic points about graphical plots and figures, it is more deeply about being able to communicate effectively, with intention.
I find that all too commonly, many junior people who code are unable (or maybe more charitably, unpracticed) at formulating arguments or explanations for why something exists in the form it does, or how it ought to be designed, in a way that they can coherently explain to someone not deep in their code. It usually means that they have not spent time thinking about it deeply, and are stuck in the "show me lines of code to explain what something is" mode of thinking. Or that they can only explain the approach in terms of the specific lines they are writing -- they have not moved beyond that level of understanding.
I won't say it to the person generally, but I really have to bite my tongue when working with someone who has no way of explaining something (at an overall approach level) other than showing me lines of code. Stepping out of that realm into graphical communication is one way.
Being able to think graphically in a coherent way as a software developer means you start to think about how to explain your work to others as more than lines of code -- and in explaining to others, improving your own understanding of what you're writing. Btw, it also probably means that you're more likely move beyond the role of just a plain old software developer and become someone responsible for the design of systems, the direction of work.