Ask HN: Reading material on how to be a better software engineer?
388 points| OneOffAsk | 3 years ago
What I’m seeking is reading material regarding how to manage project scope, be better team member, converting asks to deliverables, managing expectations from management, enabling team members by opening communication channels across teams, time management, etc.
Any suggested reading material? Preferably books, but excellent blog posts are welcome.
markshead|3 years ago
The Goal - Eli Goldratt - It is a novel about optimizing a factory, but it is immensely valuable in thinking through what are the actual constraints on your team's ability to deliver software and how do you fix it without making other things worse. The Phoenix Project is kind of a modern retelling, but I'd start with The Goal.
The Principles of Product Development Flow - Reinersten - Great for thinking deeply about how you deliver value through your system and the tradeoffs you are making in what you choose to focus on next. Once again it isn't specific to software, but very relevant.
The 5 Dysfunctions of Teams - Lencioni - Common team problems and what to do instead.
Influence: Science and Practice - Cialdini - How to get people into agreement so you can move forward--a skill that can be used for both good and evil.
The Little Schemer - Friedman and Felleisen - It is kind of hard to describe why this would be useful, but I felt it made me think more deeply about what it means to program a computer in ways that indirectly supported the topics you mentioned. Or maybe I just happened to work through it at a point in my life when I was growing in those other areas too.
joeriddles|3 years ago
rjha|3 years ago
bitsofawesome|3 years ago
The Effective Engineer by Edmond Lau - Covers how to focus on what you work on based on the leverage it provides you. http://www.effectiveengineer.com/
ChrisMarshallNY|3 years ago
+1. Also, Rapid Development, by McConnell[0]. I would say that it's even better than Code Complete.
It would be considered "quaint," these days, but Writing Solid Code[1], by Steve Maguire, was a seminal book in my education. I still use many of the techniques he mentioned.
And I cannot say enough about The Design of Everyday Things, by Don Norman[2]. That book changed my life. I would consider it required reading, for anyone that develops anything that will be used by other humans.
[0] https://www.microsoftpressstore.com/store/rapid-development-...
[1] https://writingsolidcode.com
[2] https://jnd.org/the-design-of-everyday-things-revised-and-ex...
TruffleLabs|3 years ago
https://www.abebooks.com/products/isbn/9780201006506
Aeolun|3 years ago
avg_dev|3 years ago
Breza|3 years ago
rubicon33|3 years ago
Deep Work: Cal Newport
What you need to know from this book is that to write good software (both quality and quantity) you need to go deep. You need to fully absorb and understand the problem in your mind, BEFORE you begin writing code. And then, you need quiet undistracted time to map the thoughts in your mind, to code on paper.
This process of turning a mental model in your mind, into a well designed code model, takes more focus than you think (if you want to do it well). Give yourself a quiet room with no visual distractions. Just you, and your code. Set aside a few hours.
Most importantly of all - Remove the possibility in your mind, that a distraction could happen. I cannot emphasize this enough. Your mind will not go deep if, even on a subconscious level, you think a distraction could come. A text message, a spouse walking in, a co-worker asking a question, etc. These all need to be (as reasonably as possible) NOT possible so that your mind can go quiet, and you can take on the work.
ArcMex|3 years ago
Overall, it is also my recommendation, in that when you develop a good habit of churning out quality work, it enhances your contributions to the team.
pjmorris|3 years ago
'Making Things Happen', Scott Berkun. Berkun was a successful developer and product manager at Microsoft and the book captures his reflections and research on project management.
hardwaregeek|3 years ago
I found The Mom Test pretty helpful for honing a product mindset. I’ve fallen into the trap of writing code simply because I find it less daunting than talking to users. The Mom Test is a good reminder on priorities.
mooreds|3 years ago
randomsearch|3 years ago
rahimnathwani|3 years ago
Peopleware
kiernanmcgowan|3 years ago
https://staffeng.com/guides
pkoird|3 years ago
"Here are a few books that may be helpful for improving your skills as a software engineer:
"The Pragmatic Programmer" by Andrew Hunt and David Thomas: This book offers practical advice on a wide range of topics, including how to write clean and maintainable code, how to work effectively with others, and how to manage your time and priorities.
"Clean Code" by Robert C. Martin: This book focuses on the importance of writing code that is easy to read and understand, and provides specific guidance on how to write clean and maintainable code.
"Peopleware" by Tom DeMarco and Timothy Lister: This book discusses the human side of software development, including how to create effective teams and work environments, and how to avoid common pitfalls such as overwork and burnout.
"Agile Software Development" by Alistair Cockburn: This book provides an introduction to agile software development methodologies, which are designed to help teams deliver high-quality software quickly and efficiently.
In addition to these books, there are many excellent blog posts and online resources on these topics. Some websites that may be helpful include the Pragmatic Programmer blog, the Agile Alliance website, and the ACM SIGSOFT Software Engineering Notes journal.
Another helpful resource may be attending conferences and workshops on software engineering and related topics. These can provide opportunities to learn from experts in the field, network with other professionals, and stay up to date on the latest trends and best practices. Many conferences and workshops also offer certification programs, which can be a valuable way to demonstrate your knowledge and expertise to potential employers. Some well-known conferences in the software engineering field include the ACM SIGSOFT International Symposium on the Foundations of Software Engineering (FSE), the ACM SIGCHI Conference on Human-Computer Interaction (CHI), and the International Conference on Software Engineering (ICSE). "
slowmovintarget|3 years ago
The ACM has some interesting work, but is often impractical in day-to-day practice, unless your day-to-day involves constructing databases or researching generative algorithms (for example).
Rather than seeing this as great I see it as... superficial.
KunafaPizza|3 years ago
kace91|3 years ago
Any attempt I do at recommendations or summaries of books is met with a cookie cutter response that it can not do recommendations because it can't access the internet.
aerovistae|3 years ago
loloquwowndueo|3 years ago
Of course my all time favorite is The Mythical Man-Month. But that’s already mentioned elsewhere in this thread.
I haven’t read “Drive: The Surprising Truth About What Motivates Us” but some of the concepts it talks about are also of interest (on how to ensure workers are motivated and I’m not talking about “the beatings will continue until morale improves” :) )
summertime42|3 years ago
* Extreme Programming Explained by Kent Beck
* Clean Code and The Clean Coder by Robert C. Martin
* Soft Skills by John Sonmez (1st edition)
* Pragmatic Programmer by Andrew Hunt and David Thomas
* Working Effectively with Legacy Code by Michael Feathers
* The Mythical Man-Month by Frederick Brooks
(Selfish plug) Additionally, I wrote my own book concerning the entire industry, from just starting out to becoming a self employed consultant when you get sick of fulltime work - all soft skills from my decade or so of the industry, as well - https://www.amazon.com/dp/B0B43V1JJW
cokeandpepsi|3 years ago
charles_f|3 years ago
cauthon|3 years ago
unknown|3 years ago
[deleted]
ArcMex|3 years ago
My personal recommendation would be Deep Work by Cal Newport as it is my most recent read, having completed it just the day before yesterday.
I applied what I learned and discovered that I was able to meet deadlines much easier than before. I’m also in the process of applying deep focus techniques to my work weeks to ensure I have a tangible build or product every Friday. Could be a document, a repo, a feature, etc. So far so good. This past week I delivered a Design Spec document in record time.
Thanks again and take care.
mikehollinger|3 years ago
Re: Communication, this book starts there and builds upon that foundation. It’s targeted at line managers, but anyone in a leadership position can and will benefit. For example, I don’t do one-on-one’s with my team. I do “Project Management 1:1’s” or “Weekly project status updates.” I don’t always give feedback the way they prescribe (because the team doesn’t formally report to me). I do, however, go out of my way to say “Just to let you know, when you do X, Y happens.” And from the book, learned that there’s a 10:1 ratio of positive to negative feedback to strive for.
Side note: Manager Tools has a great podcast series that is arranged into a “map of the universe” [1] which shows a huge list of topics, and how to discuss everything from good or bad performance, dealing with various types of conflict, to even how to structure emails or how to address a personal scent issue (which I’ve actually used).
[1] https://www.manager-tools.com/map-of-the-universe
plugin-baby|3 years ago
How did that play out?
jpgvm|3 years ago
I will advise something different, find a mentor.
The most important parts of actually -engineering- software, not bashing out code come from intuition and taste and these are best taught through a mentor.
If you can't find a mentor at your current company then consider getting involved in OSS, particularly in well engineered projects like Linux, PostgreSQL, Apache projects, etc. If you have the capacity for this it's one of the strongest ways to increase your capability and strengthen/widen your network which will help further your career in other ways.
Once you have found a mentor focus on being a good student. Learn how to ask the questions that will prompt insightful answers, the "why" rather than the "how". Especially try to learn what -not- to do. Experience doesn't always need to come first hand... getting burnt isn't necessary to understand not to touch hot stuff.
Not the answer you asked for but I think perhaps even more important than what you can learn from a book.
ldjkfkdsjnv|3 years ago
Sakos|3 years ago
> Its like reading about math without doing the exercises
But you do learn math from reading and then you practice it to improve your understanding with exercises. It's not an either or. It's both. You should be reading about software development as well as actively improving your code in practice. I don't think you'd get even half as far if you only did one of the two things.
This is such a bizarre point of view that I'm seeing increasingly. "Reading does nothing". Since when?
nouveaux|3 years ago
I am self taught in how to write good code by reading books, watching videos, and reading recommended open source code. I was never in an environment with other great coders who reviewed my code. HN was my guide in how to learn to write better code.
It is possible to be self taught at writing good code.
rerdavies|3 years ago
Code reviews will get you through the start of your career. But as an intermediate software developer, you should be reading and considering new paradigms and practices in relation to your own organizations' practices, and be willing and able to discuss and, if necessary, champion new ideas. And as a senior software developer, or development manager, you should be thinking about how to cultivate a healthy coding culture where those kinds of discussions can and do take place.
The way we code has changed dramatically since the dawn of the PC era, as has the way we manage software development. And it will continue to do so. Even as a junior programmer, you should be cultivating the habit of continuous professional development, seeking reliable sources of professional coding culture on the internet, and reading important new books as they become available.
It's like inventing new math instead of just doing it.
hardwaregeek|3 years ago
paulryanrogers|3 years ago
Even better is learning from people better than me. Video tutorials can help too, especially where seeing output is important.
ericmcer|3 years ago
iwsk|3 years ago
garfieldnate|3 years ago
allenleee|3 years ago
https://web.mit.edu/6.001/6.037/sicp.pdf
pieterr|3 years ago
https://www.amazon.com/Managers-Path-Leaders-Navigating-Grow...
https://www.elidedbranches.com/
eastbayjake|3 years ago
leetrout|3 years ago
https://web.stanford.edu/~ouster/cgi-bin/book.php
Righting Software
https://rightingsoftware.org/
squeegee_scream|3 years ago
dxs|3 years ago
As with everything else, check it out, adopt what looks good, adapt it to your needs.
> Watts Humphrey: https://en.wikipedia.org/wiki/Watts_Humphrey
> Personal software process: https://en.wikipedia.org/wiki/Personal_software_process
> Team software process: https://en.wikipedia.org/wiki/Team_software_process
> More at Libgen: http://libgen.rs/search.php?req=watts+humphrey&lg_topic=libg...
> More at PDF Drive: https://www.pdfdrive.com/search?q=watts+humphrey&pagecount=&...
antipaul|3 years ago
https://nostarch.com/missing-readme
“The Missing README fills in that gap—a distillation of workplace lessons, best practices, and engineering fundamentals that the authors have taught rookie developers at top companies for more than a decade”
Get it just for the “Design Doc” template!
_dain_|3 years ago
bwb|3 years ago
And, John Sonmez wrote about great books for software developers on the soft skill size - https://shepherd.com/best-books/fun-for-software-developers
bilsbie|3 years ago
mooreds|3 years ago
I didn't see all the letters outlined in any location, so why not here:
https://www.joelonsoftware.com/2000/05/12/strategy-letter-i-...
https://www.joelonsoftware.com/2000/05/24/strategy-letter-ii...
https://www.joelonsoftware.com/2000/06/03/strategy-letter-ii...
https://www.joelonsoftware.com/2001/03/23/strategy-letter-iv...
https://www.joelonsoftware.com/2002/06/12/strategy-letter-v/
https://www.joelonsoftware.com/2007/09/18/strategy-letter-vi...
Hard to beat his writing style.
ayewo|3 years ago
Structured Design from 1975 by Larry L. Constantine and Ed Yourdon is another excellent book that I am currently reading now.
Multicomp|3 years ago
These all sound like David Allen's Getting Things Done, the art of stress free productivity.
> converting asks to deliverables
GTD teaches you to ask what the correct outcome is and what the next action item to get there is (and what those questions even mean) so your projects are always moving forward
> managing expectations from management
GTD talks about setting up project lists so you are current and keeping you current when you meet with management
>enabling team members by opening communication channels across teams
GTD teaches you how to brainstorm with the group and how to ensure everyone in a meeting knows what the next step to move the project forward is
>time management
GTD teaches you someodels to help you best know what your time landscape is and give you reminders of what tasks need to be when and where if known otherwise it has a model of helping set priorities based on contexts available to you
jshen|3 years ago
The Science of Storytelling - Will Storr
Influence - Robert Cialdini
Thinking Fast and Slow - Daniel Kahneman
Antifragile - Nassim Taleb
How Innovation Works - Natt Ridley
The One Thing You Need to Know - Marcus Buckingham
Team of Teams - General Stanley McChrystal
ilaksh|3 years ago
Also here are a few ideas for managing scope, deliverables, expectations, time management. Structure things financially so that they are tied to relatively short iterations that require direct interaction with working software and between the engineers and the users and management at regular intervals. The communication with users AND management, payment, and deployment of working software at regular intervals should be strictly enforced. The project should not continue into the next iteration until all of those requirements are met for the current one.
ArcMex|3 years ago
Soliciting for business and sustaining good relationships, in particular, will enrich one’s experience overall.
I’ve learned many lessons - everything from improving my craft to knowing when to drop a problematic client or project.
mooreds|3 years ago
Consulting is way way easier.
Signed, a former consultant and startup CTO.
la_fayette|3 years ago
chiefalchemist|3 years ago
It's not at all software related but it will make you a better teammate, partner (i.e., client relationship), manager and/or leader.
Technology is the easy part. People, that's the difference between average and above.
tonto|3 years ago
mystickphoenix|3 years ago
Assorted Non-Book Readings:
- https://randsinrepose.com/dont-skip-this/
- http://www.stilldrinking.org/programming-sucks
- https://sysadvent.blogspot.com/2019/12/day-21-being-kind-to-...
- https://donellameadows.org/archives/leverage-points-places-t...
- https://grugbrain.dev/
- https://changelog.com/posts/rich-hickeys-greatest-hits
- https://github.com/papers-we-love/papers-we-love/blob/master...
- http://www.cs.unc.edu/techreports/86-020.pdf
Books:
- The Phoenix Project: Gene Kim, Kevin Behr, George Spafford
- Deep Work: Cal Newport
- The Art of Leadership: Michael Lopp (Rands)
- Extreme Ownership: Jocko Willink and Leif Babin (once you get through the ho-rah stuff it's a fantastic read)
- Time Management for System Administrators: O'Reilly (fantastic for interrupt driven work)
- Elements of Clojure: Zachary Tellman (not just for Clojure devs)
LanternLight83|3 years ago
jm1271|3 years ago
mooreds|3 years ago
cpitman|3 years ago
vl|3 years ago
They often state obvious things, but I didn’t guess them myself.
Mythical Man-Month also provides important historical perspective.
foobazgt|3 years ago
For everyone else, I think I've created an interesting backlog of topics, but I'd love any advice about additional topics that would interest folks, how to kickstart an initial audience, what platform to use, how to moderate without losing my mind, and anything else that'd be useful to know doing this kind of thing.
mooreds|3 years ago
What are your goals? Just to get your stuff read, help other folks be better engineers, to build a consulting business, to build a recruiting pipeline, something else?
Your goal affects any advice I'd give.
kyawzazaw|3 years ago
https://youtube.com/@ALifeEngineered
Substack is a popular platform if you want to go longform writing route - see the pragmatic engineer
ArcMex|3 years ago
My main topic of interest is how much has changed over time and perhaps what the next 20+ years hold. Such discussions can be eye opening when considering what direction to take, for example, when adopting frameworks and methodologies.
Looking forward to your content.
merolish|3 years ago
vasco|3 years ago
mooreds|3 years ago
I think reading code is great for learning more about code, but don't see how it helps with the other items on that list.
Solvitieg|3 years ago
I found these channels to be helpful:
- Rahul Pandey (e.g https://www.youtube.com/watch?v=ADWkkJtZna4)
- A life engineered (e.g https://www.youtube.com/watch?v=4i5iFlP01mQ)
gandalfgreybeer|3 years ago
medler|3 years ago
soheil|3 years ago
astrange|3 years ago
Except for the Bob Martin one, which you just shouldn’t read since he is not good at programming and his advice is bad.
ljf|3 years ago
Taught me so much about all the things you mentioned
turtledragonfly|3 years ago
Even if you don't read the book, I think this talk he gave on it is a good watch: https://www.youtube.com/watch?v=4NvRnkz6jVM
Noe2097|3 years ago
It will give you concrete examples on how to broaden your scope out of just your individual contribution, by learning to care for all the rest, and pushing you to realize that to a large extent, the things you see as broken you can actually fix.
Even when they are not inside the codebase you are in charge of. Even if they aren't even on engineering side.
jdougan|3 years ago
zb|3 years ago
rglover|3 years ago
pkdpic|3 years ago
> Of Ants and Dinosaurs by Liu Cixin
> The Unix O'Reilly Guide
All quick entertaining reads. All written by software engineers. All utterly useless for managing state in your React apps.
brnstz|3 years ago
unknown|3 years ago
[deleted]
smcleod|3 years ago
unknown|3 years ago
[deleted]
mooreds|3 years ago
I'd consider these books/articles/podcasts:
* Secrets of Consulting by Gerald Weinberg: http://geraldmweinberg.com/Site/Consulting_Secrets.html Every problem is a people problem.
* Refactoring by Martin Fowler et. al: https://martinfowler.com/books/refactoring.html talks about how and why to refactor, as well as providing a nomenclature for the process.
* Code Complete by Steve McConnell. https://stevemcconnell.com/books/ A bit dated (the last version I could find was from 2004) but a great overview of the entire software process, from requirements to maintenance.
* The Mythical Man-Month by Fred Brookes: https://www.oreilly.com/library/view/mythical-man-month-the/... best practices about software development, written about a project from the 1960 and 1970s.
* The Joel On Software Strategy Letters: https://www.joelonsoftware.com/2000/05/12/strategy-letter-i-... is the first one. All of them (I think there are five) are great.
* Letters to a New Developer: https://letterstoanewdeveloper.com/the-book/ Please note I wrote this, but I still think it does a good job of discussing the "soft skills" in an easily digestible format.
* Pragmatic Programmer by Dave Thomas and Andy Hunt: https://pragprog.com/titles/tpp20/the-pragmatic-programmer-2... Haven't read the revised 20th anniversary edition, but the first one opened my eyes to the craft of software.
* High Output Management by Andy Grove: https://bookshop.org/p/books/high-output-management-andrew-s... a great way to think about throughput
* The Phoenix Project by Gene Kim et. al: https://itrevolution.com/product/the-phoenix-project/ Fun novel(!) about applying lean management principles to software engineering.
* Radical Candor (haven't read, but it's been recommended): https://www.radicalcandor.com/ About communication.
* Good to Great by Jim Collins: https://en.wikipedia.org/wiki/Good_to_Great Focuses on what great companies bring to the table. Helps me evaluate where to work.
* Mastery Autonomy and Purpose: A great video about what people really want in work: https://www.youtube.com/watch?v=MzXXC4MZZnY
* https://www.manager-tools.com/podcasts a podcast about managing people. You didn't say you wanted to be a people manager, but knowing what managers think about will make you more effective in any org.
* Managing Humans by Michael Lopp: https://managinghumans.com/ The whole Rands site is work reading, but I enjoyed this book about how to manage teams and build software. See above.
* Don't Make Me Think by Steve Krug: https://sensible.com/dont-make-me-think/ Easy ways to think about usability, focusing on webapps. Short and easy.
* Badass: Making Users Awesome, by Kathy Sierra: http://seriouspony.com/badass-users-the-book Will help you put yourself in the shoes of your users and think about how to build software they will love. Short and easy.
Hope this helps.
unknown|3 years ago
[deleted]
jll29|3 years ago
That's a bit like "Ask HN: Reading material on how to be a better pianist?"
You will need to write and maintain a lot of code, and make a lot of mistakes, then you will get gradually better.
supr_strudl|3 years ago
Refactoring (Folwer)
dunk010|3 years ago
boredemployee|3 years ago
black_13|3 years ago
[deleted]
kyleee|3 years ago
[deleted]
OJFord|3 years ago