Read Code Complete by Steve McConnell Online


Widely considered one of the best practical guides to programming, Steve McConnellOCOs original CODE COMPLETE has been helping developers write better software for more than a decade. Now this classic book has been fully updated and revised with leading-edge practicesOCoand hundreds of new code samplesOCoillustrating the art and science of software construction. CapturingWidely considered one of the best practical guides to programming, Steve McConnellOCOs original CODE COMPLETE has been helping developers write better software for more than a decade. Now this classic book has been fully updated and revised with leading-edge practicesOCoand hundreds of new code samplesOCoillustrating the art and science of software construction. Capturing the body of knowledge available from research, academia, and everyday commercial practice, McConnell synthesizes the most effective techniques and must-know principles into clear, pragmatic guidance. No matter what your experience level, development environment, or project size, this book will inform and stimulate your thinkingOCoand help you build the highest quality code.Discover the timeless techniques and strategies that help you: Design for minimum complexity and maximum creativityReap the benefits of collaborative developmentApply defensive programming techniques to reduce and flush out errorsExploit opportunities to refactorOCoor evolveOCocode, and do it safelyUse construction practices that are right-weight for your projectDebug problems quickly and effectivelyResolve critical construction issues early and correctlyBuild quality into the beginning, middle, and end of your project"...

Title : Code Complete
Author :
Rating :
ISBN : 9780735636972
Format Type : ebook
Number of Pages : 960 Pages
Status : Available For Download
Last checked : 21 Minutes ago!

Code Complete Reviews

  • Jon Fuller
    2019-01-23 12:36

    Code Complete 2... A ReviewOne-liner: Read it. 3.5 starsI came into this with super high expectations. Things I'd heard people say: "I make everyone on my team read this." or "Every developer should start with this book". So, I thought, "sweet, a great 'back to basics' book... I can't wait!". I read through this book with a host of colleagues all with quite different experience levels and in different areas of expertise.It was the best of times. It was the worst of times.Well... maybe not the worst, but not my favorite ;)Needless to say the book didn't live up to my expectations... however, the book is still a gem. I think the book is best approached (especially for more experienced devs) with a 'back to basics' mindset or an 'I'm starting fresh here... forgetting everything I know' type of attitude. It can be incredibly easy to completely discount large portions of this book without that type of attitude.The BestThe absolute best part of the experience was having a group of peers to bounce ideas off of. Many pieces of information in the book invoked questions in my head that needed some consideration. Having a discussion forum like a book club was an excellent way to solidify my understanding of things I thought I already knew, and to break down some misunderstandings with opinions and feedback from the group.Some specifics...Simplicity is a common theme throughout the entire book... and I think rightly so. Software has such a knack at becoming complex, and without always striving for simplicity, the complexity will overwhelm anyone.In particular, I appreciated the performance chapters where he talks about how to improve performance (loaded term...) in your system. The gist of the story is that you have to measure. If you don't measure how do you know you got better? Developers almost always assume the bottleneck is in the wrong place (odd isn't it?). And this gem of a quote "if it isn't worth profiling [/measuring:] it isn't worth improving". PLEASE keep that in mind the next time you're performance hacking! Oh yeah... just in case that bit didn't do it for you... MEASURE BEFORE AND AFTER you enhance performance! It's so simple, really.He talks about standardizing in many areas of the book. Standardizing on naming, style, layout, design concepts, standards themselves, etc., etc. Standardizing is great, and keeps things simple... until someone puts out an eye. It's easy after reading this thing to want to go CRAZY on standards. "Spaces here, not there; Braces here, not there; Capital letter here, and there, and there, but not over there!". "A good style applies to most cases" (emphasis mine). I think this holds true for most standards. When a standard is defined in absolutes, I think, it becomes less about simplicity and more about rigidity (BTW, simplicity != rigidity).Steve gives some amazing stats that are often quite surprising and inspiring, and are usually well backed (although, I'm guessing he could've found stats to back any statement he wanted to make). The wealth of information and completeness of the book in the areas that it touches are impeccable and spot on.The WorstI don't want to hate on the book too much (or at all really), but I do have some nits to pick.This thing is freakin' huge! I had to use a hand-truck to haul this thing around! I needed a social contract to get myself through this book. I had been trying to read it for years. A group of us set out to read this together, meeting once a week as a book club, so that gave me the social commitment I needed to get through this monster.I felt a general 'anti-Agile' undertone, though he never really stated it explicitly. I'm no Agile Zealot, but I do like to be lean and nimble.Many of the things I felt like I already knew, or already had opinions on. Some of his suggestions (PPP in particular) just seemed weird, and not generally (or even specifically) applicable to how I work. Maybe I was just looking to be shocked and awed by the experience and wasn't. I think had I approached some of the book with a more open mindset I might've been able to glean more out of those 'basics'.

  • Erika RS
    2019-01-14 12:33

    Code Complete is a massive work, so this summary is, necessarily, very high level. It is not a book that one can absorb completely in one reading, but one can absorb its high level themes (summarized nicely in the second to last chapter). "Conquer Complexity". High quality code manages complexity. No one can think of all of the levels of abstraction needed to fully understand a program at once; just admit it and try to make your code less complex. Complexity can be managed at every level of the development process from having a well thought out high level design to choosing good variable names."Pick Your Process". Having a process is important. It does not matter exactly what the process is; in fact, the process should be tailored to the problem at hand. The purpose of a process is to allow for coordination between people. When a project is small (1, maybe 2 people), then it is the talent of the individual that matters most. When a project is large, it is managing communication that matters most."Write Programs for People First, Computers Second". Computers do not care about programs being readable, but people do, and people are going to read your programs many time. Readable code has a plethora of advantages including lower error rates, being easier to debug and modify, and having shorter development time. Make code readable first, and only optimize when you can make measurable improvements to measurable performance bottlenecks."Program into Your Language, Not in It". Do not limit your programming by the features your language supports. Write libraries that will support the programming features you want for the problem at hand. One example McConnell gives writing an assertion library if your language does not support assertions."Focus Your Attention with the Help of Conventions". Conventions, like processes, do not matter in their particulars. Some conventions are better than others, but for the most part, conventions tend to be arbitrary. However, having conventions makes code easier to read and modify because a convention can communicate a lot without using much space or requiring much thinking."Program in Terms of the Problem Domain". This is a particular method of managing complexity. Higher level code should be supported by lower level code that hides implementation specific details from the higher level code. When done well, this makes the code easier to read and easier to modify. Even at the construction level, this can be done by choosing good class names and abstractions, factoring code into methods to maintain a common level of abstraction, and choosing good variable names."Watch for Falling Rocks". Look out for warning signs, such as classes with an abnormally high number of defects. These warning signs do not necessarily mean that something is wrong with that part of the program, but they are a good indicator that you should be a little bit suspicious. These warning signs could show up after construction (error rate) or during construction (compiler warning, indications from your self or other that your program is hard to understand)."Iterate, Repeatedly, Again and Again". In addition to being my favorite section heading in the book, this principle emphasizes that iteration is appropriate at all points of the software development process. Requirements are rarely fixed in stone, bugs are always present, and developers can always find a better way to rewrite code. Iteration gives all of these improvements a chance to actually make it into the product under development."Thou Shalt Rend Software and Religion Asunder". No one convention, process, or tool set is the be all and end all of software development. Developers should be wary of absolutes and try to avoid blind faith in the processes they use. Solutions should be adapted to the problem at hand, not vice versa. The key to keeping an open mind and becoming effective and flexible is experimentation. Be willing to try new things, measure the effectiveness of those experiments, and be willing to change based on the results.Those are the high level principles. These principles occur over and over again through the seven parts of this book. The first part, titled "Laying the Foundation" discusses the general process of software development and the role of construction (a.k.a. programming) in that process. Construction is important, according to McConnell, because it is the only part of the software development process that absolutely must happen to produce a working software project. Construction is also an area that, traditionally, has not has as much attention to it as other areas (such as high level design or testing). However, McConnell stresses that all parts of the development process are important in creating a successful project and gives pointers throughout the text to resources that discuss other parts of the software development process in more depth. He notes that pre-construction planning is particularly important since no amount of good construction and through testing can save a bad design.Section two is "Creating High-Quality Code". This section introduces a point emphasized again and again throughout the book. Software's "Primary Technical Imperative" is managing complexity. High quality code exposes people reading it to consistent levels of abstraction separated by clear boundaries. Complexity is managed by minimizing the essential complexity one has to deal with at any given time and trying to keep accidental complexity from spreading throughout the code base. High quality classes and routines provide consistent abstractions, document their assumptions, and check their invariants defensively; they fail sooner rather than later. Even a simple class or routine is worthwhile if it decreases the complexity of reading the code where it is used. One of the most practically useful facts I got out of Code Complete was learning about the "Pseudocode Programming Process". This process is a way of developing code by starting with detailed pseudocode. When constructing a program, a developer should (iteratively) write pseudocode that is high level enough to be in the domain of the problem but low level enough for translation to real code to be nearly mechanical. Developing pseudocode ensures that the developer understands the problem at a low enough level for implementation, encourages the programmer to think about error checking before implementing the nominal path through the code, may indicate what when to factor code into separate routines (and suggest names for those routines). Those parts of the high level pseudocode that the developer decides to leave in provide automatic, high level commenting of code.The third section is entitled "Variables" and discusses the effective use of variables. The chapters in this section discuss data initialization (do it close as close to the declaration as possible), variable scope (keep it as small as possible), limiting variables to a single purpose, effective variable names (keep them specific, use a naming conventions), and tips for using fundamental and more complex data types.Statements are covered in section four called, not surprisingly, "Statements". This section discusses methods for effectively organizing and using straight line code, conditionals, and loops as well as more exotic control structures such as exceptions, gotos, and various table driven control structures. This section discusses how deep nesting of control structures tends to make code complex. If possible, it should be avoided by restructuring the code or factoring the nested code into its own routine. The more paths there are through a code fragment, the more complex it is; the number of paths a developer must consider at a single time should be minimized.Section five, "Code Improvements" discusses a mishmash of techniques for improving code. It discusses software quality, collaboration, developer testing, debugging, refactoring, and code tuning. One key point of this section is that the goals of a certain construction project should be clear. Some goals are bound to go against each other, and if developers do not know which are most important, they will do a bad job of trying to optimize all of them at once. The most obvious example of this tendency is that aggressive optimization may make code less readable and prevent beneficial refactorings. This section also points out that code reviews, testing, debugging, refactoring, and code tuning all have the potential to improve code quality, but it is when they are used thoughtfully in unison that their potential is maximized.Section six, "System Considerations" discusses some higher level issues in constructing a system. As project size increases, project quality and development speed tend to go down in a faster than linear manner. This is because as the project increases, more and more overhead gets taken up by managing communication and more details tend to get lost in the cracks. It is for this reason that having a process and conventions becomes more important on large projects; the more that is automatic, the less that quality and and development time will suffer. This section also discusses how to manage programmers and essential tools that every developer should know about and use. This section also discusses several integration processes and emphasizes that which process is right depends on the project being developed.The final section of Code Complete is "Software Craftsmanship". This section talks about good practices in actually structuring code and how to write good, effective comments and code that documents itself as much as possible. This section also describes the importance of personal character in becoming an excellent developer. McConnell posits that intelligence is less important than other personal characteristics such as humility, curiosity, intellectual honesty, communication and cooperation, creativity and discipline, effective laziness, and good habits. The point emphasized throughout the discussion on personal character is that a good developer needs to be happy and willing to learn from other developers and be willing to admit when their are right and wrong if they want to earn the trust and respect of others.A useful part of the final section was McConnell's summary of where to find more information. In particular, he presents "A Software Developer's Reading Plan" reproduced below for my future reference. Note that the plan should be supplemented to the needs and interests of particular developers.Introductory level:Adams, James L. Conceptual Blockbusting: A Guide to Better Ideas, 4th ed. Cambridge, MA: Perseus Publishing, 2001.Bentley, Jon. Programming Pearls, 2d ed. Reading, MA: Addison-Wesley, 2000.Glass, Robert L. Facts and Fallacies of Software Engineering. Boston, MA: Addison-Wesley, 2003.McConnell, Steve. Software Project Survival Guide. Redmond, WA: Microsoft Press, 1998.McConnell, Steve. Code Complete, 2d ed. Redmond, WA: Microsoft Press, 2004.Practitioner level:Berczuk, Stephen P. and Brad Appleton. Software Configuration Management Patterns: Effective Teamwork, Practical Integration. Boston, MA: Addison-Wesley, 2003.Fowler, Martin. UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3d ed. Boston, MA: Addison-Wesley, 2003.Glass, Robert L. Software Creativity. Reading, MA: Addison-Wesley, 1995.Kaner, Cem, Jack Falk, Hung Q. Nguyen. Testing Computer Software, 2ed. New Yor, NY: John Wiley & Sons, 1999.Larman, Craig. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process, 2d ed. Englewood Cliffs, NJ: Prentice Hall, 2001.McConnell, Steve. Rapid Development. Redmond, WA: Microsoft Press, 1996.Wiegers, Karl. Software Requirements, 2d ed. Redmond, WA: Microsoft Press, 2003."Manager's Handbook for Software Development," NASA Goddard Space Flight Center.Professional level:Bass, Len, Paul Clements, and Rick Kazman. Software Architecture in Practice, 2d ed. Boston, MA: Addison-Wesley, 2003.Fowler, Martin. Refactoring: Improving the Design of Existing Code. Reading, MA: Addison-Wesley, 1999.Gamma, Erich, et al. Design Patterns. Reading, MA: Addison-Wesley, 1995.Gilb, Tom. Principles of Software Engineering Management. Workingham, England: Addison-Wesley, 1988.Maguire, Steve. Writing Solid Code. Redmond, WA: Microsoft Press, 1993.Meyer, Bertrand. Object-Oriented Software Construction, 2d ed. New York, NY: Prentice Hall PTR, 1997."Software Measurement Guidebook," NASA Goddard Space Flight Center.For more details and up to date reading lists see (requires an account, free with purchase of code complete).Other interesting things from a quick skim of the bibliography:Baecker, Ronald M., and Aaron Marcus. 1990. Human Factors and Typography for More Readable Programs. Reading, MA: Addison-Wesley.Various works by Kent BeckVarious works by Barry BoehmDijkstra, Edsger. 1965. "Programming Considered as a Human Activity." Proceedings of the 1965 IFIP Congress. Amsterdam: North-Holland, 213-17. Reprinted in Yourdon 1982 (Writings of the Revolution).Disjkstra, Edsger. 1972. "The Humble Programmer." Communications of the ACM 15, no. 10 (October): 859-66.Knuth's Literate Programming.Paul Oman and Curtis Cook. "The Book Paradigm for Improved Maintenance" and "Typographic Style is More than Cosmetic".Schneiderman, Ben. 1980. Software Psychology: Human Factors in Computer and Information Systems. Cambridge, MA: Winthrop.Spinellis, Diomidis. Code Reading: An Open Source Perspective.Various by Gerald Weinberg.

  • Mark
    2019-01-01 08:18

    All the while reading this book, I struggled with how to rate it here. In many ways, this is an extraordinary piece of work; it's extremely comprehensive, and reveals a remarkable level of insight.This second edition is from 2004, and although obviously some of its content may seem a little dated, most of it still holds up well in 2015. Given that context, I find it difficult to find fault with most of the book. Much of the advice given is good advice, and as a programmer, you should adopt and internalise most of it.On these grounds, the book deserves 4 or 5 stars, so why do I rate it as I do?There are two reasons for this.The first is that, having programmed for some 15-20 years already, I learned little. Although I think this tome could be indispensable for a so-called junior programmer, I only gained little from it.The second reason is probably an effect of the first, but I was bored to tears most of the way through. Still, I kept reading, a chapter per month or so, since there was an occasional gem here and there.The rating I've given therefore reflects my experience reading the book, more than the quality of it, which is indisputable.If you're a seasoned programmer, you may consider skipping it. If you have only a few years of professional experience, you should consider reading it.

  • Vasily Fomin
    2019-01-05 12:22

    После повторного прочтения данной книги окончательно убеждаюсь в том, что данная книга должны быть прочитана, как минимум раз, каждым развивающимся разработчиком, менеджером связанным с разработкой, и тем, кто так или иначе связан с областью разработки.Мое мнение может быть предвзятым, так как на момент написания - это единственная книга по разработке, которую я прочитал, но могу сказать, что автору удалось пролить свет на разработку как таковую, и мне, как начинающему разработчику она очень помогла, не смотря на то, что некоторые главы пока просто не понятны. Также, хотелось бы отметить, что в книге есть главы, которые традиционно являются поводом для многих "религиозных" войн, но автору удалось преподнести предмет спора, в нейтральной манере, благодаря чему, например, выработать хороший стиль кодирования и форматирования, после прочтения книги, не такая уж и большая проблема.В заключении хочу сказать, что эту книгу я буду стараться перечиывать как можно чаще, по мере получения опыта, так как с каждым чтением, эффект после прочтения все больше и больше.

  • Stijn
    2019-01-03 07:33

    Terribly bloated. Long-winded and trivial. I do not get the high score for this book; in a related area, but much more crisp is Programming Pearls (it even engages your brain, imagine that).

  • Aaron Boushley
    2018-12-23 08:16

    This book was a pretty good read. Most of what is discussed is extremely valuable information. Although with only 5 years of experience I felt like many of the points that Steve brought up were fairly obvious once you've been working as a Software Developer. If you are new to programming, want to move to a more professional level of programming or just plain have plenty of time on your hands this is a great book. However, if you already have a fair amount of experience developing software professionally, I would suggest you look elsewhere for good reading.

  • Yevgeniy Brikman
    2019-01-03 04:42

    A must-read for any programmer. Although I don't agree with everything in the book and a few parts feel out of date, it provides an excellent framework for how to think about programming and software engineering. It can help programmers of all experience levels to focus on the right things: that code is harder to read than to write, that managing complexity is the main goal of programming, and so on.The book is filled with nuggets of wisdom. Some of my favorite quotes, some from McConnell, some from other writers that he includes in the book:Managing complexity is the most important technical topic in software development. In my view, it's so important that Software's Primary Technical Imperative has to be managing complexity.A "wicked" problem is one that can be clearly defined only by solving it.It's OK to figure out murder mysteries, but you shouldn't need to figure out code. You should be able to read it.Eighty percent of the errors are found in 20 percent of a project's classes or routines.Don't document bad code - rewrite it.Jackson's Rules of Optimization: Rule 1. Don't do it. Rule 2 (for experts only). Don't do it yet - that is, not until you have a perfectly clear and unoptimized solution.No programmer has ever been able to predict or analyze where performance bottlenecks are without data. No matter where you think it's going, you will be surprised to discover that it is going somewhere else.The Fundamental Theorem of Formatting says that good visual layout shows the logical structure of a program. Making the code look pretty is worth something, but it's worth less than showing the code's structure.Build one to throw away; you will, anyhow.One downside to the book is that it seems to largely focus on OO languages (C++, Java) and even older imperative ones (C, Ada, etc). There is virtually no consideration given to functional programming. This is a shame, as immutable variables, pure functions, and lack of side effects inherently solve or mitigate MANY of the code complexity and readability problems he discusses in the book. I chuckled at a line in the book where he says "Recursion isn't useful often...", which is true in the languages he used, which don't support tail call optimization.The book also pre-dates the open source explosion, github, cheap/free access to amazing tools and cloud services, and the growth of continuous integration/deployment. These have had some pretty profound impact on software development that are not taken into account in the book.

  • Jennifer
    2018-12-24 08:23

    Steve McConnell's Code Complete 2 is a classic piece of literature in Software Development. I joined a book club for reading this book, and the discussions along the way were some of the most valuable I've had. It was very rewarding to me to see many of the pieces of advice given reaffirming my own coding practices and the way things are done here at SEP, but I certainly took some new information away. One of the main lessons taught throughout the book is that code should be easy to understand. Levels of abstraction, clear class and variable names, information hiding, coding standards - they all leave one less detail you have to juggle in your mind when trying to understand the code you're reading. If you write code that is as close to possible to self-documenting, you'll make your life and everyone else's life that much easier. Mostly this book was just the tip of the iceburg, a good overview of several key topics in the industry. It was very well-researched and cited, though quite a bit of the research was as old or older than I am! There was a recommended reading list at the end of the book which seems very valuable, and I intend to go through it. This book left me with a feeling of 'just getting started' and seems like it would be a good thing for new-hires to read.

  • Vladimir
    2018-12-26 12:15

    So it’s a #1 must read programming book according to this poll on StackOverflow. That raises quite some expectations, and if you ask me, the book doesn’t really meet them.I mean, it doesn’t even feel like a proper programming book - it’s written in some “Easy way to quit smoking for dummies” style. Every idea is explained verbosely, then illustrated with some numeric stats, then with a 3D chart, then with some real-life anecdote, then with a reference to a 1973 paper, and finally reiterated in a checklist in the end of the chapter.But still, this book makes a lot of good points, it’s easy to read, there’s not much prerequisites (“If you’re rusty on polynomials, they’re the the things that look like Ax² + Bx + C”) – maybe it makes sense to read it in high school.

  • Alan Fay
    2019-01-13 07:27

    I probably got less out of the book, having worked as a developer for a couple of years out of school, than say, a college student or somebody fresh out. Or maybe dinosaurs that are out of touch and need to get back into the game.The second half of the book is pretty much a catalog of refactoring techniques. It's definitely geared towards the aforementioned audiences. McConnell covers a few other topics, related to design, teamwork, testing, and configuration management, but doesn't go into depth for many of them.Still, it's an excellent book to have around, if there's confusion about what you're trying to explain to someone.

  • Joe
    2019-01-11 05:33

    Steve McConnell's Code Complete is absolutely essential to every software developer. The lessons contained in Code Complete are based on solid, time-tested principles. The time spent reading Code Complete is time spent bettering your career as a developer.

  • David
    2019-01-23 12:18

    It's a great book for fresher developers, as it contains a lot of practices and hard facts to back them up. I''m already aware of quite of bit that the book advocates so I wouldn't get as much out of it as a new developer. But having said that, I did get to learn bits and pieces here and there of stuff I hadn't thought about, so it's good. I guess the downside about this book is that it can be pretty long-winded in trying to explain why a certain practice is a good practice.

  • Inna Baikova
    2019-01-01 09:23

    Книга полезна разработчикам, которые хотят научиться писать качественный код. Но сама по себе в печатном издании книга очень объемна и поэтому ее не удобно читать или брать с собой, язык в ней академический, много сносок, поэтому под нее так легко уснуть. Похоже на чтение большого советского словаря) Между этой книгой и "Чистым кодом" дядюшки Боба, советую выбрать вторую.

  • Lowell Paige Bander
    2018-12-27 04:31

    I'd give a 1-star review to a book that was wrong, or that purported to be scientific and yet was absent of references. This book gets 2-stars because although there were a tiny handful of useful tips, the vast majority of the text was a stream of minutiae, such as an entire chapter on variable naming (Should you capitalize the first letter of method names? What about prefixing constants with "c_" vs making the whole name upper case?).I've been reading a few articles lately about "tricks" for reading more, and one recurring theme that stuck out to me was the recommendation to put a book down that "isn't really doing it for you" because it's stopping you from reading the books you may enjoy more. I think this book meets that criterion.

  • Tadas Talaikis
    2019-01-01 06:32

    All concept can be just added into few sentences, like, before you start programming, think (and predict) very well what functions you'll need, as not Mather how well you though, damn thing anyway will grow into something too complex. It is tempting to add features, but that's a suicide if those not thought off before the project. Complexities have tendency to fail.

  • Nemantro
    2019-01-15 09:27

    This book should be mandatory for all computer science student and developer to be. A great receipe of writing Clean code and software craftmanship.

  • Seth Johnson
    2019-01-12 12:23

    This is a solid overview of the practice of software design at a low level: not how to solve problems with logical architecture, but how to organize code (or what the author calls "construction"). As of time of reading, I've been programming for fifteen years. For me, much of this was tread ground but I think reading this book would be as good as a year or two of practical experience, at the least, for a beginning programmer. It would certainly set them off on the right foot. If I'd read it a decade or so ago it would have saved me a lot of unnecessarily painful learning experiences and teachable moments.Even as an experienced programmer, I still picked up a few concepts from this book. Beyond that I picked up a lot of useful metaphors and documented research which I plan to employ in the future when explaining concepts to other professionals.Code Complete is a bit dry, but it's also well-organized so the reader can easily skip to the sections most relevant to their interests. There's also a fantastic extended reading list at the end which I'm now planning to dive into.

  • Jaroslav Tuček
    2018-12-28 12:21

    Code Complete is a highly regarded book in the software engineering industry and I approached it with pretty high expectations - however, the actual reading experience has turned into something of a nightmare for me. It took me almost a year to finish (several times seriously considering abandoning the effort), and I have to say this is probably the driest and the most boring book I've ever read.Don't get me wrong, it's hard to find fault with the content itself - all of it is excellent advice, focusing mostly on the construction phase of software development. Unfortunately, I cannot imagine a software engineering with any amount of real-world experience who'd learn much new information reading it. Most of the chapters feel like common sense mixed with fluff and it's hard to avoid thinking this shouldn't have been a 900+ pages book.I'd probably recommend the book to university students or to self-taught developers just starting their careers, but others would likely be wasting their time.

  • Yehuda Prizont
    2019-01-23 04:27

    The bible of practical programming.I bought the first edition, read about 400-500 pages and then the book was lost in a move. A few years later I got the second edition and read it again from the beginning and probably got to something like page 700. I then moved overseas and once again the book didn't make it across the ocean. Therefore, I have to include a small disclaimer that I didn't read the whole book. It is close to 1000 pages.I don't remember any useless or impractical chapter. The book is filled with suggestions and techniques to improve everyday programming and I would still be going back to it today as a reference book if it were sitting on my shelf. I remember specifically citing the book in something I wrote about programming techniques for a large, international corporation and I have cited and discussed the techniques often in interviews (both as interviewer and interviewee).If there were one non-language-specific book I would recommend to someone who wants to improve their programming - this would be it.

  • Russell
    2019-01-04 05:26

    Purchased this book as a textbook for a Software Engineering class at school. The teacher said he enjoyed it quite a bit and that we weren't going to reference it as much as he'd like (considering the other texts for the class). His comment piqued my interest. Upon finishing the first reading assignment I continued along to the next chapter. Like it so much I began the next and then halted, remembering the other reading I first needed to complete.So, I finished the other book (Mythical Man Month) and took Code Complete with me on trip. I was enthralled with the style of writing and ideas presented as much as Mythical Man Month. In fact, on the way home from the trip I read almost 400 pages. McConnell really has a knack for presenting his material in a thought provoking and entertaining manner. I kept underlining and scribbling notes. I fully intend re-reading every 18 months or so to check up on myself and evaluate the suggested best-practices.

  • Erkut Demirhan
    2019-01-12 06:14

    This was my second attempt to read this book. The first time was 5 years ago, just after finishing my computer science degree. At that time, I had difficulty understanding importance of the ideas presented in the book. Eventually I lost my interest and stopped reading it. After spending some time in the industry and facing with harsh realities of software development, I decided to give it a try again. This time I gained much more insight than my first reading. Because now I had a chance to reflect on my past experiences while reading. Even though it has been more than a decade since the book was published, I think most of the ideas presented in it still apply. The book is huge as it includes all of the stages in software development process. So it is so hard to read it from cover to cover. I suggest taking notes from each chapter while reading the book. So that you can revisit your notes from time to time in order not to forget most of the ideas.

  • Rick Kober
    2019-01-12 12:41

    When starting my first job out of college, part of the training was to read selected chapters from this book. The way that Steve McConnell presents the topics in story form made the reading effortless and even entertaining. Although I had initially suspected that the book reading was some useless filler task while they found something for me to do, looking back I probably learned more about programming on a team than I did during the first two years of college programming courses.The book tackles more than just the technical look at coding, but delves into the deeper thought processes involved in writing software. I would strongly recommend this book to anyone interested in working with software of any kind. In fact, in the time since starting my job I have helped train two new members to my software team, and reading Code Complete was the first things I had them do.

  • Robert
    2018-12-27 11:32

    Excellent book on software development. I read the first version years ago. It was well worth picking up the second version as a refresher. The book covers everything from personal character to how to format a for loop, it's a must read for improving your skills and to help you realize how far you still have to go.The only problem I have with the book is the formatting. It's a nightmare of little quotes, references and key point icons (with a picture of a key - thanks...) cluttering up each page, with section headlines aligned on the quotes rather than the sections and further reading material listed every few pages rather than at the end. Given the focus the book has on readable code it's a shame the book format is such a dog's breakfast.

  • Toby Reiter
    2019-01-15 05:28

    This book is a really good examination of low-level design of code. This older version was written before widespread adoption of Java, web development, or object oriented development. However, it's focus on well-designed routines (methods/functions) meant that the meat of the content was still highly useful and actually unencumbered by more hyped up features of more recent programming trends.The new version, Code Complete Second Edition includes content about newer programming techniques, including object oriented development and design patterns.

  • Henrik Warne
    2019-01-04 04:40

    The focus of Code Complete is software construction, i.e. the coding part of software development. As Steve McConnell notes in the preface, "construction is the only activity that is guaranteed to be done". You can skip almost any step (requirements, testing etc), but if you don't write any code there is not going to be any software.I bought my copy of the first edition of Code Complete in 1997, and I was immediately fascinated. I had never read anything like it before - a book that concentrated on the actual writing of the code. For example, it had a whole chapter on if- and case-statements, and another chapter on the naming of variables. I had no idea there was so much to learn about these seemingly straight forward activities. It was immediately useful to me, and I started to apply as much as I could of what I learnt from it.Although it concentrated on coding, it covered a broad spectrum of activities around coding, from requirements and design to testing, debugging and optimization. It also had a great reference section with suggestions of further reading in the area of software engineering. This became my starting point for finding lots of other good books to read, like Peopleware: Productive Projects and Teams and Programming Pearls.So this summer I decided to re-read this seminal book, partly to see what's new in the second edition, and partly to see if still think it is such a great book.To answer my own question - yes, it is still the number one book on writing code. It is near encyclopaedic in its coverage of the nuts and bolts of programming. There are chapters on the naming of variables, on organizing straight-line code, on conditionals, on loops, on lay-out, on good commenting and on how to write good methods.In it, there are frequent references to scientific studies that support the advice given in the book. For example, how long should variable names be? Instead of just giving us his opinion, McConnell summarized the findings of several scientific studies on the subject.Each time there is reference to a study, there is a little "hard data" symbol in the margin. There are other symbols in the margin as well, "Coding Horror" for code examples of what not to do, and "Key Point" for, well, key points. The margin is also used for cross references to other chapters, and for quotes related to the subject discussed. For me, this works really well. It is both useful and makes the text easier to read. In general, the book is very well laid out.Some of my favourite advice from the book (all of which I remember from reading the first edition) are:Chapter 7.1 Valid Reasons to Create a Routine - for example: Reduce complexity, Introduce an intermediate understandable abstraction, and Avoid duplicate code (there are 6 more valid reasons in this chapter). The second part of the chapter is called Operations That Seem Too Simple to Put Into Routines and contains a great example of why it can be good to put even a one-line calculation in a routine - the code becomes more readable, and small operations tend to turn into larger operations.Page 172 (and 264 for variables) Use opposites precisely. When naming "opposite" methods and variables, be careful to use the correct pairs, like add/remove, begin/end, create/destroy etc. This makes the relationship between them clear and obvious.Page 433 Break complicated tests into partial tests with new boolean variables. This is such a simple thing, but it makes the code a lot more readable.Page 754 "Make the incompleteness of a statement obvi". For example, when breaking up a logical and over two lines, end the first line with && - that way, it is clear that the statement continues on the next line.Even though the book truly is great, there are a few things to complain about. In the first edition, the chapters on layout and comments came right after the chapters on the different control structures. But in the second edition, these two chapters have been moved further back. To me, that doesn't make sense, since they too are related to how you actually write your code. Now there are chapters on testing, debugging, optimization and refactoring in between.And talking about refactoring: while this is an important subject, I don't feel the chapter on refactoring is particularly good. This chapter is new in the second edition. The summary of refactoring is OK, but a good part of the chapter consists of just listing different kinds of refactorings.Overall though, the second edition is a nice face lift. The code examples are now mostly in Java, C++ or Visual Basic (in the first edition they were in Pascal, C or Ada). But since all the major themes of the book were already present in the first edition, it does not make a big difference if you happen to read the first edition instead of the second edition.Code Complete is thick - 862 pages (not counting the bibliography and index). If that feels like a lot to read, then I suggest you start by just reading one or two chapters, for example "Using Conditionals" or "Layout and Style". They (and pretty much any chapter in the book) can easily be read without first reading the preceding chapters, and these will give you a sense of what you can expect from the other chapters. Even if these are all you read, you will still get a lot of value from the book.However, if you are a programmer and care about how you write code, you owe it to yourself to read the whole book. It is considered by many (including me) to be the best book available on programming, and it will almost certainly make you a better programmer. Highly recommended.

  • Jim
    2019-01-05 06:33

    Well, it's definitely long. If you've been programming for a while, and haven't read this (like me), then you'll find it to be a good structured outline of what you're doing already, with quite a few new things sprinkled in.For a recent grad, I think this book will be filled with lots of information that can help the new grad avoid the gotchas that had to be learned the hard way by other people.I think Steve McConnell takes a fairly pragmatic approach in this book, in that he's for the most part strictly covering processes/conventions that any developer at any size shop should be following.I think this is a must read for any professional programmer.

  • Sanjiv
    2019-01-19 04:32

    It is a nice book but too MS-centric. Some of the things are going to confuse you if you come from a different environment. For example, it took me a while to realize that the term "magic number" was used for hard-coded constants; in Unix, the magic number is used to identify file type as described in /etc/magic. Similarly, the author did not like the indentation standard use by Gnu. There was something he did not like about Kernighan and Ritchie either Overall, I still think it was a decent book..

  • Jason
    2018-12-27 07:16

    Often called "'The Joy of Cooking' for coding", Code Complete is an excellent book that doesn't say HOW TO code, but is ABOUT coding. Considerations with project size and complexity, coding style, comments, testing strategies, even developer communication are all touched upon.Many things won't click with people who don't have at least a year or two of development under their belt, but for any kind of programmer, this book contains many gems that are worth referencing for years to come.

  • Senjutsu
    2019-01-12 12:18

    Not terrible, but not great, this book has a much higher stature among Microsofties than is strictly deserved, and little visibility beyond that group. Says nothing in 960 pages that The Practice of Programming doesn't manage to convey more clearly and succinctly in 267. Ok as a supplement to the latter for those looking for longer justifications for the same recommendations, or those deathly allergic to Unixisms. Pointless otherwise.

  • Andre T
    2018-12-29 12:30

    Often regarded as the one book you must read if you care about programming well and I'm beginning to understand...Only a five chapters in, I can see it's already improving not only my programming skills, but also with how to correctly deal with clients and bosses in order to minimize risk and increase productivity. More thoughts on it will be posted later.