There is a class at Georgia Tech I colloquially referred to as "making sure your coworkers don't hate you." It covered design patterns, software testing, and project management. I'd tack on a basic knowledge of databases to that. These are things you can gain a true functional knowledge of in a couple of weeks, and which not knowing might make senior engineers hate working with you.
So to mimic the class:
The Mythical Man Month
Design Patterns - Even if some of the particulars are not as relevant, it still provides a useful framework for thought.
Lessons Learned in Software Testing: A Context-Driven Approach
I'd also add Harry Potter & The Methods of Rationality. A lot of engineers can think empirically, but its not their first reaction. Going through this book helped make it second nature for me. Can't remember if a certain data structure is immutable? Now I'll write a couple of lines of code to see rather than go looking for documentation. A lot of big problems start as false assumptions. Having the instinct to think to test them and knowing how to will prevent a lot of wasted effort, regardless of your role.
How to Solve It by Polya also gets an honorable mention for similar reasons.
Not only does no-one at all talk about them, most of the design patterns themselves were harmful and are now completely unnecessary due to functional language features being available in modern languages.
Design patterns are like TDD, no-one wants to come out and admit it, but they were really, really bad outside of theory.
An addition directed particularly at cofounders: The Freelancer's Survival Guide by Kris Rusch. It is the single best book on entrepreneurship/running a small business I have ever read. It covers pretty much all the bases. It also covers an enormous number of the issues that you will inevitably encounter if you start a business, but likely have never experienced otherwise.
2340 (the mandatory group project course) also covered a lot of this stuff, though not in as much detail.
The suggested reading for that course is a book that blew my mind when I first saw it as an undergrad: Clean Code by Robert Cecil Martin. I believe the examples are all Java, but the lessons are applicable to any language. Stuff like naming your variables more carefully than you name your children.
"How to Win Friends and Influence People" by Dale Carnegie.
I'm not saying my coworkers are a bunch of jerks, but it's got a lot of great advice for working alongside others and resolving differences.
---
"How to Not Write Bad" by Ben Yagoda.
I'm not saying my coworkers are all terrible writers, but for many of them, writing just isn't their thing. But learning how to avoid the most common writing problems is important for programmers, because everybody ends up writing some degree of documentation.
--
"Experimenting With Babies: 50 Amazing Science Projects You Can Perform on Your Kid."
I'm not saying my coworkers are a bunch of babies, but I wrote the book, so I want _everybody_, not just my colleagues, to read it.
For most people, though, it's hard to beat Jurassic Park, the morality tale that goes something like "Myopic optimization leads to BEING EATEN BY DINOSAURS."
In terms of books to (gently) influence colleagues... I generally find myself looking for pretty-much the opposite. Something that emphasises the joy of stealing fire from heaven.
Old-school sci-fi (lots to choose from) could be pretty good in that regard. Newer stuff often leans a bit too much in the morality tale direction.
Both have a huge impact on how I work with code and design them. Trying to explain these concepts are hard without context. Sometimes i just copy/paste the sections i think they could benefit from.
If anyone is interested in SICP, I strongly recommend finding videos of the lectures (which are free online) and watching those, then going back to the book for reference and exercises. I found the SICP book very hard work until I discovered the actual lectures that it is meant to support.
Snow Crash - Convincing possible future dominated by media, corporations, computers, and drugs.
The Origin of Consciousness and the Breakdown of the Bicameral Mind - Fascinating delve into, among other things, why Homer is boring but gets better, prehistoric art in early human cultures, schizophrenia, and perception and the points it breaks down.
Don’t Make Me Think: A Common Sense Approach to Web Usability.
The chapter about “religious debates” in particular was hilariously accurate, about how teams of people will argue about strongly held personal beliefs about things that can’t be proven.
Seconded. At a couple of places I was actually thinking about leaving this book as a good-bye gift for managers when I quit. But that wiuld most likeky be effort and money wasted.
I am a proponent for depth over breadth. To read is one thing but to understand is another. Rather than read 5 books and superficially grasp their concepts, read one closely and carefully.
The one book I wish my colleagues would read and learn from is "Man's Search for Meaning" by Victor Frankl [1].
"Between stimulus and response lies a space. In that space lie our freedom and power to choose a response. In our response lies our growth and our happiness."
- Nassim N. Taleb: Black Swan and Antifragile[0]
- Robert Cialdini: Influence: The Psychology of Persuasion[1]
- Franklin Foer: World Without Mind: The Existential Threat of Big Tech[2]
- Herbert Marcuse: One-Dimensional Man: Studies in the Ideology of Advanced Industrial Society[3]
1. W.R. Stevens books on Unix and Tcp/ip.
2. Rochkind's Advanced UNIX Programming.
3. Most of the Unix/Linux manual pages.
4. Bash FAQ
As a Unix systems programmer I would choose
1. Mythical Man Month
2. Jon Bentley's Programming Pearls.
3. K&R C and Stroustrup C++
4. A recent Java reference and Bloch's Java Puzzlers
5. a reference and cookbook for the language of your choice -- Python, Ruby, Perl, etc.
6. Google's style guides
The books made me realize how horrible my codes are. No matter how long you've been programming, I think these books should be read by every single programmer out there.
Clean Architecture is a plague on Android development undoubtedly unleashed by some obscure IDE programmer paid by the number of times you use the “Go To Definition” function.
Just about anything. Too many coworkers don't read any technical books at all. Some will pick up books to learn specific tools or languages, which is better, but not enough...
[+] [-] conjecTech|8 years ago|reply
So to mimic the class:
The Mythical Man Month
Design Patterns - Even if some of the particulars are not as relevant, it still provides a useful framework for thought.
Lessons Learned in Software Testing: A Context-Driven Approach
I'd also add Harry Potter & The Methods of Rationality. A lot of engineers can think empirically, but its not their first reaction. Going through this book helped make it second nature for me. Can't remember if a certain data structure is immutable? Now I'll write a couple of lines of code to see rather than go looking for documentation. A lot of big problems start as false assumptions. Having the instinct to think to test them and knowing how to will prevent a lot of wasted effort, regardless of your role.
How to Solve It by Polya also gets an honorable mention for similar reasons.
[+] [-] mattmanser|8 years ago|reply
Not only does no-one at all talk about them, most of the design patterns themselves were harmful and are now completely unnecessary due to functional language features being available in modern languages.
Design patterns are like TDD, no-one wants to come out and admit it, but they were really, really bad outside of theory.
InitiatorFactoryFactory I do not mourne thee!
[+] [-] conjecTech|8 years ago|reply
[+] [-] framebit|8 years ago|reply
The suggested reading for that course is a book that blew my mind when I first saw it as an undergrad: Clean Code by Robert Cecil Martin. I believe the examples are all Java, but the lessons are applicable to any language. Stuff like naming your variables more carefully than you name your children.
https://www.amazon.com/Clean-Code-Handbook-Software-Craftsma...
[+] [-] godelmachine|8 years ago|reply
[+] [-] mettamage|8 years ago|reply
[+] [-] jawns|8 years ago|reply
I'm not saying my coworkers are a bunch of jerks, but it's got a lot of great advice for working alongside others and resolving differences.
---
"How to Not Write Bad" by Ben Yagoda.
I'm not saying my coworkers are all terrible writers, but for many of them, writing just isn't their thing. But learning how to avoid the most common writing problems is important for programmers, because everybody ends up writing some degree of documentation.
--
"Experimenting With Babies: 50 Amazing Science Projects You Can Perform on Your Kid."
I'm not saying my coworkers are a bunch of babies, but I wrote the book, so I want _everybody_, not just my colleagues, to read it.
[+] [-] aembleton|8 years ago|reply
[+] [-] guan|8 years ago|reply
[+] [-] kabdib|8 years ago|reply
[+] [-] zhte415|8 years ago|reply
[+] [-] invalidOrTaken|8 years ago|reply
For most people, though, it's hard to beat Jurassic Park, the morality tale that goes something like "Myopic optimization leads to BEING EATEN BY DINOSAURS."
[+] [-] matfil|8 years ago|reply
Old-school sci-fi (lots to choose from) could be pretty good in that regard. Newer stuff often leans a bit too much in the morality tale direction.
[+] [-] gaius|8 years ago|reply
[+] [-] hawktheslayer|8 years ago|reply
R for Data Science - because it is such a solid foundation for a career in business analytics: http://r4ds.had.co.nz
And for extra credit two books I hope my collegues DON'T read since they are best kept secret are Cialdini's two books on influence: https://en.m.wikipedia.org/wiki/Robert_Cialdini
[+] [-] craftyguy|8 years ago|reply
[+] [-] Recursing|8 years ago|reply
[+] [-] skittleson|8 years ago|reply
Both have a huge impact on how I work with code and design them. Trying to explain these concepts are hard without context. Sometimes i just copy/paste the sections i think they could benefit from.
[+] [-] peterkelly|8 years ago|reply
Full text is available here: https://mitpress.mit.edu/sicp/full-text/book/book.html (or PDF at https://github.com/sarabander/sicp-pdf).
It is IMHO the most important book on programming and programming languages ever published.
[+] [-] sjellis|8 years ago|reply
[+] [-] Kapura|8 years ago|reply
The Origin of Consciousness and the Breakdown of the Bicameral Mind - Fascinating delve into, among other things, why Homer is boring but gets better, prehistoric art in early human cultures, schizophrenia, and perception and the points it breaks down.
(I work in VR games so take with a grain of salt)
[+] [-] take4|8 years ago|reply
The chapter about “religious debates” in particular was hilariously accurate, about how teams of people will argue about strongly held personal beliefs about things that can’t be proven.
[+] [-] odiroot|8 years ago|reply
I mostly wish this to my ex and future managers, but colleagues wouldn't hurt as well.
Working in Berlin I'm constantly baffled how ignorant of the "old" research people are. Time and again.
[+] [-] rimliu|8 years ago|reply
[+] [-] olavgg|8 years ago|reply
[+] [-] bor0|8 years ago|reply
Mathematics doesn't. Learn CS foundations, logic, proofs to get better at understanding and gain abstraction experience.
Edit: books: How to prove it by D.Velleman, Proofs and concepts, Discrete Math by S.Epp
[+] [-] Dowwie|8 years ago|reply
The one book I wish my colleagues would read and learn from is "Man's Search for Meaning" by Victor Frankl [1].
"Between stimulus and response lies a space. In that space lie our freedom and power to choose a response. In our response lies our growth and our happiness."
[1] https://www.amazon.com/Mans-Search-Meaning-Viktor-Frankl/dp/...
[+] [-] DyslexicAtheist|8 years ago|reply
[1] https://www.amazon.com/Influence-Psychology-Persuasion-Rober...
[2] https://www.amazon.com/World-Without-Mind-Existential-Threat...
[3] https://www.amazon.com/One-Dimensional-Man-Ideology-Industri...
[+] [-] jxub|8 years ago|reply
I'm in!
[+] [-] emmelaich|8 years ago|reply
As a Unix systems engineer, I would choose
As a Unix systems programmer I would choose[+] [-] androa|8 years ago|reply
For me it is the most influential book on how I think about "agile" , what that really means, and which factors really matter.
[+] [-] tzhenghao|8 years ago|reply
This is a good start for crafting better mental models and thought frameworks before engaging others in meetings.
[+] [-] sus_007|8 years ago|reply
The books made me realize how horrible my codes are. No matter how long you've been programming, I think these books should be read by every single programmer out there.
[+] [-] raverbashing|8 years ago|reply
It turns development teams into a judgemental arena, demeaning of other colleagues and a race to see who follows "the gospel" closer to the letter
Who says their code is clean? Who says that's the best way of doing things? In all cases?
It just reeks of "I'm better than the rest", which is already a problem in the industry.
[+] [-] BoorishBears|8 years ago|reply
Clean Architecture is a plague on Android development undoubtedly unleashed by some obscure IDE programmer paid by the number of times you use the “Go To Definition” function.
[+] [-] oldcynic|8 years ago|reply
From the 80s, and talking of TV, but it's worth reading again today as it's so applicable to the current landscape. More so than its original target.
[+] [-] Jach|8 years ago|reply
If you made me pick one, though...
The Practice of Programming - Brian W. Kernighan, Rob Pike - http://www.amazon.com/Practice-Programming-Brian-W-Kernighan...
[+] [-] beeskneecaps|8 years ago|reply
[+] [-] icantdrive55|8 years ago|reply
[deleted]