1. Trang chủ
  2. » Công Nghệ Thông Tin

Becoming a better programmer

362 114 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 362
Dung lượng 23,78 MB

Nội dung

Becoming a Better Programmer A HANDBOOK FOR PEOPLE WHO CARE ABOUT CODE Pete Goodliffe www.it-ebooks.info Becoming a Better Programmer Goodliffe presents sound advice that he's learned in 15 years of professional programming The book's standalone chapters span the range of a software developer's life—dealing with code, learning the trade, and improving performance—with no language or industry bias Whether you're a seasoned developer, a neophyte professional, or a hobbyist, you'll find valuable tips in five independent categories: ■■ Code-level techniques for crafting lines of code, testing, debugging, and coping with complexity ■■ Practices, approaches, and attitudes: keep it simple, collaborate well, reuse, and create malleable code ■■ Tactics for learning effectively, behaving ethically, finding challenges, and avoiding stagnation ■■ Practical ways to complete things: use the right tools, know what “done” looks like, and seek help from colleagues ■■ Habits for working well with others, and pursuing development as a social activity book will fuel your “ This passion for the art and science of programming Pete understands that great software comes from good people doing their best work ” —Lisa Crispin Author of Agile Testing: A Practical Guide for Testers and Agile Teams Pete Goodliffe is a programmer, software development columnist,musician, and author He never stays at the same place in the software food chain Pete writes a magazine column called “Becoming a Better Programmer,” and has contributed to several software development books He regularly speaks on software development topics US $39.99 Twitter: @oreillymedia facebook.com/oreilly Goodliffe PROGR AMMING Becoming a Better Programmer If you're passionate about programming and want to get better at it, you've come to the right source Code Craft author Pete Goodliffe presents a collection of useful techniques and approaches to the art and craft of programming that will help boost your career and your well-being Becoming a Better Programmer A HANDBOOK FOR PEOPLE WHO CARE ABOUT CODE CAN $41.99 ISBN: 978-1-491-90553-1 Pete Goodliffe www.it-ebooks.info Praise for Becoming a Better Programmer Becoming a Better Programmer oozes experience and communicates the wisdom drawn from a career in the software business Snappy, single-topic chapters make the book really readable with common themes being tackled from every angle If you are a software engineer looking to go from good to great, this book is for you I will be using it with the junior developers I’m responsible for mentoring — Andrew Burrows lead developer Goodliffe takes the very broad subject of computer programming and manages to break it down into a clear, compelling, and engaging narrative He has a particular flair for saying things that seem obvious, but I hadn’t realised before he said them Any programmer who aspires to be a great programmer should read this book — Greg Law cofounder and CEO of Undo Software Pete Goodliffe successfully blends the theoretical with the practical Where things must be done in a particular way, he pulls no punches Where grey areas exist, he clearly explains different points of view If you consider and apply what he says you’ll benefit and be better; you’ll become a better programmer Overall this book is full of distilled real-world experience, mixed with humor, to provide gentle wisdom — Dr Andrew Bennett BEng/PhD/MIET/MIEEE This book will fuel your passion for the art and science of programming Pete understands that great software comes from good people doing their best work He illustrates how to this through good coding practices, a good attitude, and good relationships, with lots of examples Bonus: it’s really fun to read! — Lisa Crispin coauthor of Agile Testing: A Practical Guide for Testers and Agile Teams www.it-ebooks.info Pete’s got a wealth of experience being a programmer and mentor In this book, he’s applied the same attention to detail categorising and describing those experiences as he does to the task of actually being a programmer Knowing about programming is only one part of “being a programmer,” and whether you’re new to the Code Factory, an old hand, or starting to mentor someone, this is a treasure trove of advice about how to go about it—from someone who really knows It’s a manual about many of the hurdles you’ll encounter, and how to negotiate them safely and effectively — Steve Love editor of C Vu magazine All too often, programmers are divided into average programmers and rockstar or ninja developers Where there’s a rockstar, there’s a trashed codebase with broken classes and spaced-out control flow Where there’s a ninja, there’s mysterious bugs and build problems that appear in the middle of the night Where there’s an average, there’s a distribution In the longterm, what matters is less where on the distribution someone is than where they are headed If you want to divide programmers into two groups, there are programmers who get better and programmers who don’t You care about the first group This book is for them — Kevlin Henney consultant, speaker, and author of 97 Things Every Programmer Should Know This book is quite dull, and I’m not convinced by the fish on the cover — Alice Goodliffe age 12 www.it-ebooks.info Becoming a Better Programmer Pete Goodliffe www.it-ebooks.info Becoming a Better Programmer by Pete Goodliffe Copyright © 2015 Pete Goodliffe All rights reserved Printed in the United States of America Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472 O’Reilly books may be purchased for educational, business, or sales promotional use Online editions are also available for most titles (http://safaribooksonline.com) For more information, contact our corporate/ institutional sales department: 800-998-9938 or corporate@oreilly.com Editors: Mike Loukides and Brian MacDonald Production Editor: Melanie Yarbrough Copyeditor: Jasmine Kwityn Proofreader: Sonia Saruba October 2014: Indexer: Pete Goodliffe Cover Designer: Karen Montgomery Interior Designer: David Futato Illustrator: Pete Goodliffe First Edition Revision History for the First Edition: 2014-10-01: First release See http://oreilly.com/catalog/errata.csp?isbn=9781491905531 for release details The O’Reilly logo is a registered trademarks of O’Reilly Media, Inc Becoming a Better Programmer, the cover image, and related trade dress are trademarks of O’Reilly Media, Inc While the publisher and the author have used good faith efforts to ensure that the information and instruc‐ tions contained in this work are accurate, the publisher and the author disclaim all responsibility for errors or omissions, including without limitation responsibility for damages resulting from the use of or reliance on this work Use of the information and instructions contained in this work is at your own risk If any code samples or other technology this work contains or describes is subject to open source licenses or the intel‐ lectual property rights of others, it is your responsibility to ensure that your use thereof complies with such licenses and/or rights ISBN: 978-1-491-90553-1 [LSI] www.it-ebooks.info For my wife, Bryony, who I adore And our three wonderful girls Psalm 150 www.it-ebooks.info www.it-ebooks.info Table of Contents Also by Pete Goodliffe xi Introduction xiii Care About the Code Adopting the correct approach and attitude to code Part I you.write(code); Keeping Up Appearances Code presentation: layout and naming Write Less Code! 17 Avoiding unnecessary lines of code Improve Code by Removing It 29 Identifying and removing dead code The Ghost of a Codebase Past 37 Learning from the code you wrote in the past Navigating a Route 45 How to start working with unfamiliar code Wallowing in Filth 55 Dealing with unpleasant, messy code Don’t Ignore That Error! 63 Healthy attitudes for error handling vii www.it-ebooks.info Expect the Unexpected 69 Writing robust code that considers all possibilities 10 Bug Hunting 75 How to find and fix bugs 11 Testing Times 87 Developer testing: unit, integration, and system tests 12 Coping with Complexity 103 Designing code well, to avoid unnecessary complexity 13 A Tale of Two Systems 113 The consequences of good and bad design Part II Practice Makes Perfect 14 Software Development Is… 131 What is this software stuff? 15 Playing by the Rules 141 Inventing rules that define your development team 16 Keep It Simple 145 Striving for simplicity in our software 17 Use Your Brain 153 Programmers are allowed and encouraged to use their brain; don't be stupid! 18 Nothing Is Set in Stone 157 No code is sacred, everything changes 19 A Case for Code Reuse 165 The healthy way to reuse code 20 Effective Version Control 171 Using version control well viii | Table of Contents www.it-ebooks.info www.it-ebooks.info CHAPTER 38 An Ode to Code All bad poetry springs from genuine feeling — Oscar Wilde Gerald was a coder who worked in a small team The thing was: other coders coded code that was not clean The mess was detrimental, distracting, diabolic; The inhumane detritus of an evil workaholic But Gerald had a conscience He wouldn’t let this lie He lay awake at night devising schemes to rectify The awful internal structure, the confusing variable names, And the contrived control flow that was consistently insane Those early days the “Boy Scout Rule” was how he planned to beat The bugs and turgid software that had formed beneath his feet A tidy here, a bug fix there, refactors left and right Pretty soon, he thought, (with work) they’ll all be out of sight But poor old Gerald, plan in action, missed one vital fact: To make a dent, all programmers must enter in the pact His slapdash coding colleagues, just saw a rule to flout And continued writing drivel whilst he tried to sort it out One step forwards, two steps back Gerald danced this dance Until he learnt he needed a more militant stance Agile teams are excellent and clean code is the best To achieve this: the team, and not the code, would have to be addressed Conway’s law describes to us how software follows team— Sympathetic software is born from a well-oiled machine If cogs get stuck or grate, and stop doing what they ought Then there’s only one option: to remove them, Gerald thought So the team refactor started, with the pattern: “Parameterise from Above”: The manager, on his cycle home, received a surprise shove 329 www.it-ebooks.info He landed down a manhole You might call it homocide Gerald called it team hygiene One problem had then died One by one his team mates met with unusual fates The unsuspecting QA team were hit by flying plates (The lesson learned from this event was: never hold team meetings In a diner with bad furniture, and poltergeisty leanings.) The programmers who caused such ire each met a gory end One “caught his tie in the printer”; his face will never mend Another tripped atop the stairs on his way out for a break, A pile of deadly Unix manuals flying in his wake Gerald’s life was vastly better; the team was little more Than one coder, a sys admin, and the guy who manned the door The problem with this setup, Gerald shortly found: The code got no worse—good!—but it hardly changed, as no coders were around Progress was slow and tough, though heroic Gerald tried Deadlines made a “whooshing” sound as often they flew by With features sadly lacking, the project was a farce Then one day a policeman came, and put Gerald behind bars The moral of this simple tale is to react with care When callous coder colleagues deign to drive you to despair The only sensible way there is to retaliate Is British: maintain a healthy level of pent-up angst and hate Coding Is a People Problem Hopefully you’ve read the chapter on ethics, so you probably agree that it is inadvisable to perform such a dramatic cull of the poorly performing members of your software team However, how should you react when working with team members who not perform adequately, or seem to willfully make the code worse? What if the software team leaders not notice or comprehend the problem? What if, heaven forbid, they are part of the problem itself? Sadly, at the bleeding edge of the codeface, this is not entirely unusual Although some teams are full of awesome codesmiths, many are not Unless you are unusually blessed in your coding career, you will at some point find yourself in sticky situations that seem to have no solution KEY ➤ Often, the tricky part of software development isn’t in the tech‐ nical aspects of the code; it’s the people problems When the programmers just don’t seem to get it, and fail to understand that they are making things worse, not better, you must respond 330 | Chapter 38: An Ode to Code www.it-ebooks.info Consider introducing practices that promote responsibility for the code and illustrate (in a way that avoids apportioning blame) how to work most effectively: introduce pair programming, mentoring, design review meetings, or the like Set an excellent example yourself Do not fall into a trap of those bad habits; it’s very easy to lose enthusiasm and cut corners because everyone else is If you can’t beat them, don’t join them KEY ➤ When surrounded by coders who not care about the code, maintain healthy attitudes yourself Beware of absorbing bad practices by osmosis It will not be simple or rapid to change a coding culture and steer development back towards healthy principles But that doesn’t mean that it can’t be done Questions How healthy is your current development team? How can you quickly recognise when a developer is not performing as diligently as she should? Which is most likely: people work sloppily on purpose, or they are sloppy because they don’t appreciate how to work better? How can you be sure that you’re not adopting sloppy practices yourself? How can you prevent yourself from slipping into bad practices in the future? See also • Care About the Code You have to care about the code But can you care too much? • The Ethical Programmer Please reread this chapter, just in case you are about to go on a murderous rampage • Wallowing in Filth How to cope with the mess left by colleagues who don’t know better Try this… Consider whether you have adopted any bad habits recently How can you rectify this? Chapter 38: An Ode to Code www.it-ebooks.info | 331 332 | Chapter 38: An Ode to Code www.it-ebooks.info Epilogue Not every end is the goal The end of a melody is not its goal, and yet if a melody has not reached its end, it has not reached its goal — Friedrich Nietzsche Far out in the uncharted backwaters of the unfashionable end of the western spiral arm of the Galaxy lies a small unregarded yellow sun Orbiting this at a distance of roughly 92 million miles is an utterly insignificant little blue-green planet whose ape-descended life-forms are so amazingly primitive that they still think computer programs are a pretty neat idea This planet has—or rather, had—a problem, which was this: most of the programmers on it wrote poor code pretty much all of the time, even when they were being paid to a good job Many solutions were suggested for this problem, but most of these were largely concerned with the education of programmers, which is odd because on the whole the programmers didn’t want to be educated And so the problem remained; lots of the code produced was rubbish, and most of the users were miserable, even the ones who could write good computer programs.1 Well done: you got to the end of the book That’s a lot of chapters digested (If you just skipped here to ruin the ending for yourself: the butler did it Now go back and read why.) Over the last few hundred pages you’ve seen techniques for writing technically elegant code, for creating beautiful designs, and for constructing pragmatic, maintainable sys‐ tems You’ve learnt approaches for dealing with legacy code and seen how to work effectively with other people With apologies to the late, great Douglas Adams 333 www.it-ebooks.info But all of this head knowledge, the understanding of specific skills, won’t help you at all unless you are driven by the correct attitude: the desire and passion to work well Do you have that? Attitude Attitude is what sets the good programmers apart from the bad ones; it’s what distin‐ guishes exceptional programmers from merely adequate ones Attitude trumps technical skill: intricate knowledge of a programming language does not guarantee maintainable code Understanding many models of programming doesn’t always lead to elegant designs It’s your attitude that determines whether your code is “good” and whether you are a pleasure to work with The dictionary definition of an attitude is: Attitude: (n) at-ti-tude A state of mind or a feeling; a disposition The position of an aircraft relative to a frame of reference That first definition isn’t surprising, but the second is actually more revealing than the first There are three imaginary lines of axis running through an aircraft; one from wing to wing, one from nose to tail, and one running vertically where the other two cross A pilot positions his aircraft around these axes; they define the aircraft’s angle of approach This is known as the attitude of the aircraft If you apply a little power to the aircraft whilst it has the wrong attitude, it will end up missing the target massively A pilot has to constantly monitor his vehicle’s attitude, especially at critical times like takeoff and landing This parallels our software development experiences The plane’s attitude defines its angle of approach, and our attitude defines our angle of approach to coding It doesn’t matter how technically competent a programmer you are, if your abilities aren’t tem‐ pered by healthy attitudes then your work will suffer With the wrong attitude you can shoot miles off in the wrong direction A wrong attitude can make or break a software project, so it’s vital we maintain the right angle of approach to programming Your attitude will either hinder or promote your personal growth To become better programmers, we need to ensure that we have the right attitudes 334 | Epilogue www.it-ebooks.info KEY ➤ Your attitude determines how you will progress as a program‐ mer Aim for better attitudes to become a better programmer Go Forth and Code So care about good code, and seek to create it in better ways Always learn Learn to design, learn to code, learn to collaborate Seek always to work alongside excellent en‐ gineers who will challenge and encourage you to improve Be diligent, be conscientious, and be professional Enjoy programming And more than anything else, enjoy becoming better! Try this… Read this book again in a few months Revisit the material, and see what speaks to you next time around Attempt the questions afresh; and observe how your perspectives, experience, and understanding have changed If you are diligent, and concentrate on deliberate practice, you’ll be amazed at how you’ve developed Epilogue www.it-ebooks.info | 335 www.it-ebooks.info Index A accountability, 160, 293, 305 administrivia, 276 aesthetics, Agile, 284 alpha, 196 Alphabetti custard, 131 API, 12, 57, 59, 98, 146 APIs, 158 archaeology, 49, 57, 79, 83, 115 architecture, 49, 113, 120 arguments, art, 132 assertion, 78, 95, 97 assumptions, 148 attitude, 1, 60, 159 to code, 244 to people, 246 audience for code, automation, 88, 190, 201, 207, 277 B backups, 171 bad code, 55, 65 battles picking, 58 picking your, 161, 274 beginner, 220 behaviour-driven development, 100 beta, 196 binary chop debugging, 78 version control, 79 blame, 60 blobs, 104 body language, 318 Boy Scout Rule, 27, 58 brain, 153 branches, 178, 198, 206 bugs, 18, 41, 75, 248 and testing, 92 fault report, 175, 190 Heisenbug, 83 non-reproducible, 82 builds, 47, 188, 206 C C++, 40, 255 caring, 1, 232 cars, 225 change, 120, 157 making, 160 tests, 161 changing code, 58 changing code, 314 We’d like to hear your suggestions for improving our indexes Send email to index@oreilly.com 337 www.it-ebooks.info check-in, 176 child’s play, 136 chores, 137 code, 313 as communication, 9, 313 bad, 55, 65, 153 comments, 23 dead, 22, 30 dialects, 315 ownership, 124 quality, 48, 55, 115 readability, 18, 314 removing, 17, 29 replacing, 59 reuse, 165 simplistic, 145 too much, 17 unnecessary, 17, 18, 30 verbose, 24 code coverage, 79 code freeze, 195, 197 avoiding, 200 code of conduct, 243 code ownership, 159 code review, 8, 278, 307 coding standard, 11 cohesion, 106, 115 collaboration, 171 command line, 277 comments, 10, 23, 314 commits, 176 common sense, 153 communication, 9, 257, 278, 313 code, 313 interpersonal, 316 competence, 219, 225 complacency, 226 complexity, 103 necessary, 104 comprehension, 106 computer posture, 261 computer science, 133 consistency, 11, 120, 147 continuous delivery, 201 continuous integration, 47, 161 and testing, 92 Conway’s law, 187, 319 copy-and-paste, 165 coupling, 107, 115–116 338 courage, 59, 155 crap, 55 creativity, 132 cross-sensory feedback, 218 customer, 278, 319 cut-and-paste, 21, 165 CVS, 173 D dead code, 22, 30 debug code, 31 debugging, 75, 263, 291 decisions deferring, 121 declarative languages, 254 decomposition, 284 dependencies, 108 cyclical, 108 design, 25, 41, 113 abuse, 146 for change, 160 for re-use, 166 misuse, 146 simple, 146 simplistic, 104, 145 disagreements, discipline, 135 discoverability, distributed self, 109 documentation, 48 done, 196, 285 Dreyfus, 219 driving, 225 DRY, 21, 150, 165, 177 dummy objects, 99 duplication, 18, 21, 165 E education, 217 employer, 248 end-to-end tests, 90 errno, 64 error code, 64 error prevention, 278 errors, 63, 69 estimation, 247, 283 ethics, 243 evil, 18 | Index www.it-ebooks.info exceptions, 64, 69 experience, 225 experts, 220, 301 eye strain, 267 F fault, 190 fear, 157 feature complete, 196 feature freeze, 197 feature toggle, 179 feedback, 87 file structure, 48, 51, 175 fizzy milk, 131 Four Stages of Competence, 219, 225 fun, 137 functional languages, 254 G geek, 313 Git, 173 Godwin’s law, gold master, 195 H Heisenbug, 83 Hippocodic Oath, 249 Hippocratic Oath, 243 history, 110 holy wars, 7, 325 I idioms, 40, 147, 257 imperative languages, 254 indirection, 147 integration tests, 90 interpreter, 313 invariants, 78 investing time, 57 investing time, 274, 275 ironed cutlery, 314 J JIT, 313 job security, 244 K KISS, 145, 276 knowledge, 221 L languages, 216, 253 code, 315 data, 315 dead, 254 declarative, 254 functional, 254 imperative, 254 libraries, 39 Logic, 254 natural, 315 last responsible moment, 208 latency, 83 layers, 49, 51 layout, 7, 10, 38, 57, 58 learning, 60, 136, 215 code, 45 languages, 254 models, 219 legacy code, 26, 59, 94 features, 31 legal issues, 245 libraries, 48, 167, 274 licenses, 245 lines, 107 little-and-often, 79, 176 logic, 18 Logic languages, 254 love, 183, 256 M maintainability, maintenance, 31 manager, 17, 247 manure, 184 meetings, 278, 319 memory corruption, 83 mental state, 218 mentoring, 300 Mercurial, 173 metaphors, 138, 259 mindlessness, 154, 225 Index www.it-ebooks.info | 339 mistakes, 154 are OK, 159 mock objects, 99 modifiability, 106 motivation, 300 multi-tasking, 276 QA, 160, 183, 184 and TDD, 93 quality, 48 quicksand, 55 R N nagging wife, 314 names, 8, 12 navigating, 45, 56 network, 83 not invented here, 274 novice, 219 O Oath Hippocodic, 249 Hippocratic, 243 obfuscation, 147 optimisation, 149 ownership of code, 124, 159 P pair programming, 307 parameterise from above, 98 people, 109, 299, 306 attitude to, 56, 60 employer, 248 manager, 247 team, 246, 319 yourself, 248 politics, 115, 118 Pomodoro, 275 presentation, 7, 38, 147 pride, 293 prioritisation, 275 process, 135 ownership of, 121 release, 204 procrastination, 277 programming languages, 315 project size, 146 340 Q | rcs, 173 README, 51 refactoring, 20, 59, 159, 167 release, 47, 175, 195, 203 release branch, 178, 198, 206 release candidate, 196 release notes, 189 removing code, 17 replacing code, 59 requirements, 48, 93 respect, 256 responsibility, 155, 159, 248 return value, 31, 64 reuse, 165, 274 revision control, 57 rigor mortis, 157 RTM, 195 rubber duck, 82 S science, 133 scripting, 277 self-improvement, 231, 233 shutdown, 70 side effects, 64 simplicity, 104, 136, 145, 204, 276 singleton, 83 skills, 225 social, 299 software archaeology, 171 software license, 245 software release, 203 software stuff, 131 source control, 171 sport, 135 stability, 147 static analysis, 48 storage, 83 stub objects, 99 stupidity, 145, 153 Index www.it-ebooks.info style guide, 11 Subversion, 173 success, 285 sufficiency, 149 survey, 56 SUT, 89 system tests, 90 T tag, 206 TDD, 87, 91 team, 246, 319 teamwork, 115, 133, 135, 187, 216, 221, 294 technical debt, 122, 161, 200 test-driven development, 91 test-first, 91 testing, 87, 116, 160–161, 184, 187, 207 tests, 47, 50, 59, 79, 201, 275, 278 bad, 94 change, 122 code, 89 doubles, 99 good, 93 integration tests, 90 system tests, 90 TDD, 87, 91 test-first, 91 unit tests, 90 threads, 56, 70, 83 tidying, 59 tidying code, 27, 58 to-do list, 276 tools, 47, 161, 278 town planning, 113 unexpected, 69 unit tests, 90, 187 use cases, 165 V VCS, 171 VDU, 261 verbosity, 24 version control, 32–33, 46, 171, 275 archaeology, 49, 79 branches, 178 centralised, 173 distributed, 173 presentation changes, 14 release branch, 198, 206 tag, 206 W waterfall, 185, 192 whitespace, 10, 12, 26 wizards, 31, 104 work/life balance burnout, 278 overtime, 278 working smart, 89, 274 too hard, 284 Y YAGNI, 29, 121, 150, 166 yak shaving, 276 U UI, 51 Index www.it-ebooks.info | 341 About the Author Pete Goodliffe is a programmer, software development columnist, musician, and au‐ thor He never stays at the same place in the software food chain; his projects range from OS implementation, to audio codecs, to multimedia applications; from embedded firm‐ ware, to iOS development, to desktop applications He has a passion for curry and doesn’t wear shoes Pete’s popular development book, Code Craft, is a practical and entertaining investiga‐ tion of the entire programming pursuit In about 600 pages No mean feat! It has been translated into many languages He writes a magazine column called “Becoming a Better Programmer,” has contributed to several software development books, and regularly speaks on software development topics Colophon The animal on the cover of Becoming a Better Programmer is a two-winged flying fish (Exocoetidae) The flying fish can be distinguished by its unusually large pectoral fins As the name suggests, it makes powerful, self-propelled leaps out of the water into the air by moving its tail up to 70 times per second In the early 1900s, flying fish were studied as models for developing airplanes Once in the air, it spreads its wing-like fins and tilts them upward, which enables it to glide for considerable distances The pectoral fin, or “wing,” has a similar aerodynamic shape as a bird wing At the end of the glide, it either reenters the sea by folding the pectoral fins, or dropping its tail into the water to lift itself for another glide The record is 45 seconds in flight, as recorded by a Japanese television crew in 2008 Their ability to fly into the air is often used as a defense mechanism against predators, which include dolphins, tuna, marlin, birds, squids, and porpoises They’re commer‐ cially fished by gillnetting in Japan, Vietnam, and China, and by dipnetting in Indonesia and India In the Solomon Islands, flying fish are caught during flight in nets from outrigger canoes Commercial fishing of this species is done in complete darkness when no moonlight is available, as the fish are attracted to lit torches Flying fish feed mainly on plankton, and live in all of the oceans, mostly in warm, tropical or subtropical waters Many of the animals on O’Reilly covers are endangered; all of them are important to the world To learn more about how you can help, go to animals.oreilly.com The manuscript was prepared using asciidoc, love, and vim The cover image is from loose plates The cover fonts are URW Typewriter and Guardian Sans The text font is Adobe Minion Pro; the heading font is Adobe Myriad Condensed; and the code font is Dalton Maag’s Ubuntu Mono Cartoons are drawn in AutoDesk SketchBook with layout in Adobe Photoshop www.it-ebooks.info ... is a programmer, software development columnist,musician, and author He never stays at the same place in the software food chain Pete writes a magazine column called Becoming a Better Programmer, ”... serve you Becoming a Better Programmer aims to help programmers at any level improve That’s a grand claim, but there’s always something we can learn, and always room for im‐ provement, no matter... (fax) We have a web page for this book, where we list errata, examples, and any additional information You can access this page at http://bit.ly /becoming_ a_ better_ programmer To comment or ask

Ngày đăng: 11/03/2019, 16:19