The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)
About This Book
Few books on software project management have been as influential and timeless as The Mythical Man-Month. With a blend of software engineering facts and thought-provoking opinions, Fred Brooks offers insight for anyone managing complex projects. These essays draw from his experience as project manager for the IBM System/360 computer family and then for OS/360, its massive software system. Now, 20 years after the initial publication of his book, Brooks has revisited his original ideas and added new thoughts and advice, both for readers already familiar with his work and for readers discovering it for the first time. In this twentieth anniversary edition, the original text is accompanied by Fred Brooks' current advice and thoughts based on the newest developments in the computer industry.
The added chapters contain
(1) a crisp condensation of all the propositions asserted in the original book, including Brooks' central argument in The Mythical Man-Month: that large programming projects suffer management problems different from small ones due to the division of labor; that the conceptual integrity of the product is therefore critical; and that it is difficult but possible to achieve this unity;
(2) Brooks' view of these propositions a generation later;
(3) a reprint of his classic 1986 paper "No Silver Bullet"; and
(4) today's thoughts on the 1986 assertion, "There will be no silver bullet within ten years."
The Mythical Man-Month: Essays on Software Engineering - https://www.amazon.com/Mythical-Man-Month-Software-Engineeri...
Hackers: Heroes of the Computer Revolution - https://www.amazon.com/Hackers-Computer-Revolution-Steven-Le...
The Cuckoo's Egg: Tracking a Spy Through the Maze of Computer Espionage - https://www.amazon.com/Cuckoos-Egg-Tracking-Computer-Espiona...
Where Wizards Stay Up Late: The Origins of the Internet - https://www.amazon.com/Where-Wizards-Stay-Up-Late/dp/0684832...
Open: How Compaq Ended IBM's PC Domination and Helped Invent Modern Computing - https://www.amazon.com/Open-Compaq-Domination-Helped-Computi...
Decline and Fall of the American Programmer - https://www.amazon.com/Decline-American-Programmer-Yourdon-1...
Rise and Resurrection of the American Programmer - https://www.amazon.com/dp/013121831X/ref=sr_1_1?dchild=1&key...
Accidental Empires: How the Boys of Silicon Valley Make Their Millions, Battle Foreign Competition, and Still Can't Get a Date - https://www.amazon.com/Robert-X-Cringely/dp/0887308554/ref=s...
Softwar: An Intimate Portrait of Larry Ellison and Oracle - https://www.amazon.com/Softwar-Intimate-Portrait-Ellison-Ora...
Winners, Losers & Microsoft - https://www.amazon.com/Winners-Losers-Microsoft-Competition-...
Microsoft Secrets - https://www.amazon.com/Microsoft-Secrets-audiobook/dp/B019G2...
The Friendly Orange Glow: The Untold Story of the PLATO System and the Dawn of Cyberculture - https://www.amazon.com/The-Friendly-Orange-Glow-audiobook/dp...
Troublemakers: Silicon Valley's Coming of Age - https://www.amazon.com/Troublemakers-Silicon-Valleys-Coming-...
Hard Drive: Bill Gates and the Making of the Microsoft Empire - https://www.amazon.com/Hard-Drive-Making-Microsoft-Empire/dp...
Masters of Doom: How Two Guys Created an Empire and Transformed Pop Culture - https://www.amazon.com/Masters-Doom-Created-Transformed-Cult...
The Supermen: The Story of Seymour Cray and The Technical Wizards Behind the Supercomputer - https://www.amazon.com/Supermen-Seymour-Technical-Wizards-Su...
Bitwise: A Life in Code - https://www.amazon.com/Bitwise-Life-Code-David-Auerbach/dp/1...
Gates - https://www.amazon.com/Gates-Microsofts-Reinvented-Industry-...
We Are The Nerds - https://www.amazon.com/We-Are-Nerds-audiobook/dp/B07H5Q5JGS/...
A People's History of Computing In The United States - https://www.amazon.com/Peoples-History-Computing-United-Stat...
Fire In The Valley: The Birth and Death of the Personal Computer - https://www.amazon.com/Fire-in-Valley-audiobook/dp/B071YYZJG...
How The Internet Happened: From Netscape to the iPhone - https://www.amazon.com/How-Internet-Happened-Netscape-iPhone...
Steve Jobs - https://www.amazon.com/Steve-Jobs-Walter-Isaacson/dp/1451648...
The Idea Factory: Bell Labs and the Great Age of American Innovation - https://www.amazon.com/Idea-Factory-Great-American-Innovatio...
Coders - https://www.amazon.com/Coders-Making-Tribe-Remaking-World/dp...
Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software - https://www.amazon.com/Dreaming-in-Code-Scott-Rosenberg-audi...
The Pentagon's Brain: An Uncensored History of DARPA, America's Top-Secret Military Research Agency - https://www.amazon.com/Pentagons-Brain-Uncensored-Americas-T...
The Imagineers of War: The Untold Story of DARPA, the Pentagon Agency That Changed the World - https://www.amazon.com/Imagineers-War-Untold-Pentagon-Change...
The Technical and Social History of Software Engineering - https://www.amazon.com/Technical-Social-History-Software-Eng...
Also...
"The Mother of All Demos" by Doug Englebart - https://www.amazon.com/Jobs-Vs-Gates-Hippie-Nerd/dp/B077KB96...
"Welcome to Macintosh" - https://www.amazon.com/Welcome-Macintosh-Guy-Kawasaki/dp/B00...
"Pirates of Silicon Valley" - https://www.amazon.com/Pirates-Silicon-Valley-Noah-Wyle/dp/B...
"Jobs" - https://www.amazon.com/Jobs-Ashton-Kutcher/dp/B00GME2NCG/ref...
And while not a documentary, or meant to be totally historically accurate, the TV show "Halt and Catch Fire" captures a lot of the feel of the early days of the PC era, through to the advent of the Internet era.
https://www.amazon.com/I-O/dp/B00KCXJCEK/ref=sr_1_1?crid=U6Z...
And there's a ton of Macintosh history stuff captured at:
https://www.folklore.org/
https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959
Buy him or her this. It's worth it.
https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/
Only for tasks that can be effectively divided among that many people. In software development, adding more people tends to cause the project to take longer, because it requires substantially more coordination and communication.
Check out the Mythical Man-Month to learn more.
Cara... interessante esse teu desabafo, porque acredito que isso se passa na cabeça da maioria dos devs.
Trabalho como desenvolvedor há 15 anos já. Como eu vim do Java e sou Backend Engineer, a preocupação (na época que eu comecei a trabalhar) era em certificações (poxa, não tenho a SCWCD etc) e frameworks (Spring, Struts, Hibernate) ou outras API (JasperReports e o escambal).
E ninguém botava fé que na época JS iria ser tão poderoso hoje.
Esse sentimento vem se arrastando por anos mas a real é que as coisas sempre vão mudando, sempre com a preocupação de não estar trabalhando com uma coisa nova como linguagem funcional (Scala, Haskell, Clojure) etc, mas te falar que... no final das contas, qualquer nova tecnologia em TI a gente aprende sem muito esforço (tirando Scala) e nunca vamos saber tudo.
A loucura é que em 2006-2007 eu imaginava que 10 anos depois Java sequer iria existir, tudo ia ser Ruby e on Rails etc mas no final, Java continua firme e forte, sendo o meu ganha pão só que... Os problemas de gestão de projetos continuam a mesma merda, tal como era na década de 70.
A dica que dou é que tu não precisa se preocupar com todas essas sopas de letrinhas. Você não precisa saber COMO usar tudo, mas tendo IDEIA do que é cada coisa (tipo, o que é React, Angular, NodeJS, containers, serverless etc) já é ótimo. Talvez fazer um hello world naquela hora de procrastinação no trabalho já vai ser super lucrativo.
Ah, só um bônus sobre "as dores" dos devs nos últimos 50 anos: https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959
https://www.amazon.com/Domain-Driven-Design-Tackling-Complex...
https://www.amazon.com/Clean-Code-Handbook-Software-Craftsma...
https://www.amazon.com/Clean-Architecture-Craftsmans-Softwar...
https://www.amazon.com/Patterns-Enterprise-Application-Archi...
https://www.amazon.com/Refactoring-Improving-Existing-Addiso...
https://www.amazon.com/Code-Complete-Practical-Handbook-Cons...
https://www.amazon.com/Pragmatic-Programmer-Journeyman-Maste...
https://www.amazon.com/Mythical-Man-Month-Software-Engineeri...
And just because it’s asked at every interview.
https://www.amazon.com/Design-Patterns-Object-Oriented-Addis...
I’m focused on AWS these days, but a lot of these principals are universal.
https://d1.awsstatic.com/whitepapers/architecture/AWS_Well-A...
"The Mythical Man Month" (1975) - because human nature hasn't changed [https://www.amazon.com/Mythical-Man-Month-Software-Engineeri...]
"The History of Fortran I, II, and III" (1979) - because this historical piece by the author of the first high level language brings home the core principles of language design [https://archive.org/details/history-of-fortran]
"The Unix Programming Environment" (1984) - because the core basics of the command line haven't changed [https://www.amazon.com/Unix-Programming-Environment-Prentice...]
"Reflections on Trusting Trust" (1984) - because the basic concepts of software security haven't changed [https://www.archive.ece.cmu.edu/~ganger/712.fall02/papers/p7...]
"The Rise of Worse is Better" (1991) - because many of the tradeoffs to be made when designing systems haven't changed [https://www.jwz.org/doc/worse-is-better.html]
"The Art of Doing Science and Engineering: Learning to learn" (1996) - because the core principles that drive innovation haven't changed [https://www.youtube.com/playlist?list=PL2FF649D0C4407B30] [https://www.amazon.com/Art-Doing-Science-Engineering-Learnin...]
"xv6" (an x86 version of Lion's Commentary, 1996) - because core OS concepts haven't changed [https://pdos.csail.mit.edu/6.828/2011/xv6/xv6-rev6.pdf] [https://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf]
To quote the book: "Adding manpower to a late software project, makes it later". There's some really good stuff in there, even for those of us that are less interested in management.
[1]: https://www.amazon.com/Mythical-Man-Month-Software-Engineeri...
The Mythical Man-Month
by Fred Brooks
Should I using other patterns?
No, you should not insist on a single pattern.
No design pattern books will ever advise you to use a single pattern. Just like you cannot chop all ingredients in one single way (are you going to dice the spaghetti?), you cannot organise all logic in one single pattern.
Sure, you can make all your Objects use the initialiser pattern, and don't use constructors at all. This is ok. Been there, done that. I like it.
But these objects can be used with Builder or Abstract Factory (if it make things simpler). As long as the builders/factories themselves have initialiser, and that they properly initialise the created objects, then your use of the initialiser pattern will be consistent. Outside of creational patterns, it is usually good to organise objects with structural and behavioural patterns. They do not conflict with initialiser at all.
For example, look at DOM. All nodes are created by the Document object - elements, text nodes, comments, even events. This is the Factory pattern.
Yet the Document object is also a Facade! From it you access the whole system's status, objects, data, you can even write to it! Every DOM operation starts from the Document, it is the Facade of the DOM system.
DOM nodes also implements multiple patterns. They are organised in Composite, let you listen to events with Observer and Command, and handle events in a Chain of Responsibility. They are certainly parsed by an Interpreter, DocumentFragment is a Proxy, svg elements are implemented as Decorators, and createNodeIterator obviously gives you an Iterator.
The point is, good object-oriented design will yield multiple design patterns as a result, intentional or not.
What are the secrets for good code appearance
I think the best looking code is the one that is easiest to understand to you, and the way you read code changes as you gain more experience.
For example my style is too condensed for most programmers, but to me it strikes a good balance. So do develop your own style - you are not me, and you are not yesterday's you either.
Remember this as we go through the styles.
At the lowest level we have coding style - most importantly indent and bracket.
This one is simple, pick the one you like and stick with it. There are language specific styles, and they are often good starting points. Configure your IDE's formatter so that you can format all your code with hotkey.
Above the code syntax we have comment style and naming convention.
Setting rules on comment is fine, sometimes it is necessary for documenting tools. Avoid too much comment in practice. You may also want to decide your namespace and your stand on naming function expressions.
Above these structures, we have logic conventions.
The same code logic can often be done in many ways, some more 'beautiful' than the others in your eyes. Look at this example.
I picked the second style on first sight: no duplicate, logic is sectioned cleanly, format is not my style but reasonable. But many programmers would prefer the first style: logic is plain as day, a few duplications is worth it. While abstract, this level is quite deep - present your logic the wrong way actually increase the chance an experienced programmer read it wrong.
Finally, we arrives at the level of design pattern, about as far as code beauty goes.
The key to keep your code structure beautiful, is using the right patterns at right level to consistently accomplish loose coupling and code reuse, while avoiding pitfalls and over-design.
There are quite some books about beautiful code, and then there are even more books about designing and implementing beautiful software. (Decide for yourself which are beyond your level.) Knowledge is as important as experience, and you can gain them only by spending your time to study, to write, and to revise/refactor your apps.
Feel free to change your mind as you explore and experiment with your code. Changing your mind is a good sign of learning.
But first, familiarise yourself with design patterns. Just don't forget, they are the generic result of applying object-oriented principals to common tasks. It is still up to you to do the design.
Design Patterns Are Not Silver Bullets.
Have a look at The Mythical Man Month, Peopleware, and Slack. Then cite the hard work and real numbers of those more credible than yourself.
From one perspective, the attitude(s) you're quoting are understandable. Software development isn't cheap, and most people/businesses are trying to save money everywhere they can. However I think they're usually shooting themselves in the foot with this sort of behavior.
One suggestion for dealing with this is to get a copy of The Mythical Man Month and read the section on why adding more programmers to a late project will only make it later (it's the title - and second (in my copy) - essay). Many of the same ideas apply to replacing a developer ... except that if you're working solo, it's likely you may as well start over, as figuring out what the previous person did may take longer than starting from scratch. After you've read the essay, give a copy to anyone who's taking the attitude you cite and ask them to read it. No guarantee that it will help, but it's worth a try.
Honestly I'm kinda surprised that didn't come up sooner...but only half-surprised.
http://www.amazon.com/The-Mythical-Man-Month-Engineering-Ann...
No Silver Bullet: Essence and Accidents of Software Engineering, Frederick Brooks (1987) - http://www.amazon.com/Mythical-Man-Month-Software-Engineerin...