The Architecture of Open Source Applications Programmers Don't Read Books -- But You Should One of the central themes of stackoverflow.com is that software developers no longer learn programming from books, as Joel mentioned: Programmers seem to have stopped reading books. The market for books on programming topics is miniscule compared to the number of working programmers. Joel expressed similar sentiments in 2004's The Shlemiel Way of Software: But the majority of people still don't read. If programmers don't learn from books today, how do they learn to program? I lay part of the blame squarely at the feet of the technical book publishing industry: Most programming books suck. As an author, I'm guilty, too. The internet has certainly accelerated the demise of programming books, but there is some evidence that, even pre-internet, programmers didn't read all that many programming books. Pat yourself on the back for reading this book. I believe the same text is present in the original 1993 edition of Code Complete, but I no longer have a copy to verify that.
Advice for Computer Science College Students by Joel Spolsky Sunday, January 02, 2005 Despite the fact that it was only a year or two ago that I was blubbering about how rich Windows GUI clients were the wave of the future, college students nonetheless do occasionally email me asking for career advice, and since it's recruiting season, I thought I'd write up my standard advice which they can read, laugh at, and ignore. Most college students, fortunately, are brash enough never to bother asking their elders for advice, which, in the field of computer science, is a good thing, because their elders are apt to say goofy, antediluvian things like "the demand for keypunch operators will exceed 100,000,000 by the year 2010" and "lisp careers are really very hot right now." I, too, have no idea what I'm talking about when I give advice to college students. So you'd be better off ignoring what I'm saying here and instead building some kind of online software thing that lets other students find people to go out on dates with. Nevertheless. Next:
Alpha list of refactorings You have constructors on subclasses with mostly identical bodies. Create a superclass constructor; call this from the subclass methods. more… Two subclasses have the same field. Move the field to the superclass. more… You have methods with identical results on subclasses. Move them to the superclass. more… A field is used only by some subclasses. Move the field to those subclasses. more… Behavior on a superclass is relevant only for some of its subclasses. Move it to those subclasses. more… You have conditional code that is unnecessarily verbose and does not use the most readable Ruby construct. Replace the conditional code with the more idiomatic Ruby construct. more… Remove Assignments to Parameters The code assigns to a parameter. Use a temporary variable instead. more… You have a variable that is acting as a control flag for a series of boolean expressions. Use a break or return instead. more… A class is doing too much simple delegation. Get the client to call the delegate directly. more… more… Remove it. more…
John Fremlin's blog: frontpage The Rise of ``Worse is Better'' Previous: Lisp's Apparent Failures Up: Lisp's Apparent Failures Next: Good Lisp Programming is Hard I and just about every designer of Common Lisp and CLOS has had extreme exposure to the MIT/Stanford style of design. The essence of this style can be captured by the phrase ``the right thing.'' To such a designer it is important to get all of the following characteristics right: Simplicity-the design must be simple, both in implementation and interface. It is more important for the interface to be simple than the implementation. I believe most people would agree that these are good characteristics. The worse-is-better philosophy is only slightly different: Simplicity-the design must be simple, both in implementation and interface. Early Unix and C are examples of the use of this school of design, and I will call the use of this design strategy the ``New Jersey approach.'' The MIT guy did not see any code that handled this case and asked the New Jersey guy how the problem was handled.
resources - What is the single most influential book every programmer should read? Piracy is Progressive Taxation, and Other Thoughts on the Evolution of Online Distribution - O'Reilly Media by Tim O'Reilly12/11/2002 The continuing controversy over online file sharing sparks me to offer a few thoughts as an author and publisher. To be sure, I write and publish neither movies nor music, but books. Lesson 1: Obscurity is a far greater threat to authors and creative artists than piracy. Let me start with book publishing. Sites like Amazon that create a virtual storefront for all the books in print cast a ray of light into the gloom of those warehouses, and so books that would otherwise have no outlet at all can be discovered and bought. Many works linger in deserved obscurity, but so many more suffer simply from the vast differential between supply and demand. I don't know the exact size of the entire CD catalog, but I imagine that it is similar in scope. There are fewer films, to be sure, because of the cost of film making, but even there, obscurity is a constant enemy. Lesson 2: Piracy is progressive taxation Lesson 3: Customers want to do the right thing, if they can.
What “Worse is Better vs The Right Thing” is really about I thought about this one for a couple of years, then wrote it up, and left it untouched for another couple of years. What prompted me to publish it now - at least the first, relatively finished part - is Steve Yegge's post, an analogy between the "liberals vs conservatives" debate in politics and some dichotomies in the professional worldviews of software developers. The core of his analogy is risk aversion: conservatives are more risk averse than liberals, both in politics and in software. I want to draw a similar type of analogy, but from a somewhat different angle. So what does this have to do with software? I'll claim that the view of economic evolution is what underlies the Worse Is Better vs The Right Thing opposition - and not the trade-off between design simplicity and other considerations as the essay states. So the essay says one thing, and I'll show you it really says something else. Much of the work on technology is done in a market context. First, "is it real"?
Absolutely No Machete Juggling » Top 10 Career-Changing Programming Books When I graduated with a Computer Science degree ten years ago, I was excited to dive into the world of professional programming. I had done well in school, and I thought I was completely ready to be employed doing my dream job: writing code. What I discovered in my very first interview, however, was that I was massively underprepared to be an actual professional programmer. Here I reflect on my 10-year experience programming professionally and all of the books I've read in that time, and offer up the ten that had the most profound impact on my career. None of these books are language books. So, without further ado... The Pragmatic Programmer I know, I know. If you were to read only one book on this list, this is the one to read. Many programmers got into the field because they liked hacking on code in their spare time, writing scripts to automate tasks or otherwise save time. How groundbreaking is this book? Continuous Delivery Release It!
Code Bubbles Home Page Documentation Documentation, while limited, is becoming available on our wiki. In particular you might want to look at the mouse usage and the key bindings. Code Bubbles is supported by the National Science Foundation (grant 1012056), Microsoft, and Google. Papers "Code Bubbles: A Working Set-based Interface for Code Understanding and Maintenance", by Andrew Bragdon, Robert Zeleznik, Steven Reiss, Suman Karumuri, William Chang, Joshua Kaplan, Christopher Coleman, Ferdi Adeputra, and Joseph LaViola, Jr. "Code Bubbles: Rethinking the User Interface Paradigm of Integrated Development Environments", by Andrew Bragdon, Steven Reiss, Robert Zeleznik, Suman Karumuri, William Chang, Joshua Kaplan, Christopher Coleman, Ferdi Adeputra, and Joseph LaViola, Jr (ICSE 2010) Contributing Code Bubbles is now an open-source project. Code Bubbles source is available on SourceForge. The Code Bubbles bug site is here. Introduction Running Code Bubbles If you have questions, you can send email to Steve Reiss.
The 50 Books Everyone Needs to Read, 1963-2013 The thing about reading is this: it takes a long time. There are innumerable books in the world, and many more good ones than can be read by any mortal in a lifetime. It’s hard to choose — especially if you’re a slow reader. 1963 — The Bell Jar, Sylvia Plath Sylvia Plath’s only novel manages to be both elegant and filled with raw, seething emotion – no small feat, and not the least of the reasons the reading world is still obsessed with her. Also recommended: Where the Wild Things Are, Maurice Sendak; The Group, Mary McCarthy; V., Thomas Pynchon; Cat’s Cradle, Kurt Vonnegut; The Feminine Mystique, Betty Friedan Presentation Model Represent the state and behavior of the presentation independently of the GUI controls used in the interface Also Known As: Application Model GUIs consist of widgets that contain the state of the GUI screen. Presentation Model pulls the state and behavior of the view out into a model class that is part of the presentation. Presentation Model may interact with several domain objects, but Presentation Model is not a GUI friendly facade to a specific domain object. Presentation Model is known to users of Visual Works Smalltalk as Application Model How it Works The essence of a Presentation Model is of a fully self-contained class that represents all the data and behavior of the UI window, but without any of the controls used to render that UI on the screen. To do this the Presentation Model will have data fields for all the dynamic information of the view. Figure 1: Classes showing structure relevant to clicking the classical check box When to use it Figure 3: The album window.