If we had a keen vision and feeling of all ordinary human life, it would be like hearing the grass grow. We should die of the roar that lies on the other side of the silence. –George Eliot, Middlemarch (1872)
You have to take risks. We will only understand the miracle of life fully when we allow the unexpected to happen. –Paulo Coelho
hard to explain to a fresh computer-science graduate why you need
conventions and engineering discipline. When I was an undergraduate,
the largest program I wrote was about 500 lines of executable code.
As a professional, I've written dozens of utilities that have been
smaller than 500 lines, but the average main-project size has been
5,000 to 25,000 lines, and I've participated in projects with over
500,000 lines of code. This type of effort requires not the same
skills on a larger scale, but a new set of skills altogether. –Steve
Nowadays people know the price of everything and the value of nothing. –Oscar Wilde, The Picture of Dorian Gray (1890)
Any fool can criticize, condemn, and complain, but it takes character and self-control to be understanding and forgiving. –Dale Carnegie
Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. –Charles M Strauss
You are not big enough to accuse the whole age effectively, but let us say you are in dissent. You are in no position to issue commands, but you can speak words of hope. Shall this be the substance of your message? Be human in this most inhuman of ages; guard the image of man for it is the image of God. –Thomas Merton
Return to top
Using an observation of John D. Cook, this author extends the concept of code complexity thresholds (based on number of lines of code) at which developers of various experience levels reach significant impediments. He says that ~2000 LOCs is the limit for novice programmers to be able to work with code and ~20000 LOCs (an order of magnitude increase) is most that experienced developers can maintain. While these are certainly anecdotal references, it’s an interesting idea to consider when trying to effectively manage your code base.
While I’m personally skeptical about ever being able to completely stop doing work estimation, this article reviews a couple of experiments in comparing relative story point estimates to actual with various results and in comparing the sum of iteration velocity to count of stories completed. The second metric turned out to be a good predictor and would allow a team to simply estimate the number of stories that they could do as a proxy for other estimation.
Let’s cut straight to the heart of the matter on this one. The author says that the key to good application development is: data first, not code first. In other words, define your data entities and data structures at the beginning and then develop your objects and methods around them. This tracks very closely to Linus Torvalds’ comment: … [T]he difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships.
This article gives an interesting perspective on agile methodologies and the apparent paradox that, in particular, the scrum approach is almost universally loved by managers and loathed by developers. The author claims that main drawback of scrum methodology is that it involves a trade-off between predictability and speed in favor of the latter. Moreover, he suggests that Kanban offers a better compromise for this problem.
In most organizations, even tacit acceptance of shadow IT (sometimes called “black ops” IT) is considered heresy by IT insiders. This author says that IT needs to develop a collaborative relationship with business-led IT work as part of its overall effort to make the organization successful.
Most of us are familiar with the concept that slow performance of web applications causes users to abandon your site. But what is it that underlies users leaving your site? This excellent article discusses the psychology of time perception and how it relates to web applications, including considerations for web design.
Unit testing. Every developer knows that it’s the right thing to do. But sometimes getting started can be difficult. This excellent tutorial explains the principles and process by considering a handful of questions that you should ask to do test-driven development. Hey, self-talk is good, right?!
Sometimes, when we are fixing a really difficult problem in code, we are so relieved to have it fixed that we skimp on explaining the cause and solution. This article provides a good example of the value, not just to you, but to your team, of providing the details behind the problem and how you fixed it.
Return to top
This interview-style article addresses some of the common misconceptions about what testers do, especially those in the game industry. The author emphasizes that testing requires strong technical and communication skills.
One of the age-old questions in software testing is: How do you know when you are “done”? In this essay, the author suggests that defining a bug-detection rate threshold (i.e., number of bugs per hour of testing) beforehand is a good way to (more or less) objectively determine when testing should end.
This article discusses that at the same time as the profile and importance of software testers to the success of projects increases, the role is also changing. One of the key points is that testers often act more in a facilitator role than as a strictly technical person on the team.
After more than 100 years of fine tuning, most of the mechanical problems with motor vehicles have been systematically addressed. The new frontier for auto problems is the plethora of software that manage all of the various systems. And with recent demonstrations, such as remotely disabling a vehicle over the Internet, software quality and security are a top priority for automakers. And they are rising up to the challenge, if slowly.
When starting out in software testing, most of us think that our job is to uncover each and every defect lurking in the code. As we mature, we soon learn that the main role for testers is risk management and mitigation. This article gives you a handful of practical ideas for how testers can support their teams by identifying and lessening risks.
Return to top
You may think that this topic is passé, but it’s a worthwhile read. Even though RDBMSs are quite well understood, you’ll probably pick up a tip or two that will help you design your databases more efficiently or index them appropriately.
In agile practice, user stories tend to be the center of gravity for the project team. Therefore, it makes sense to ensure that your stories are the best possible. This comprehensive guide provides some best practices for writing and maintaining stories, including several factors that are often overlooked.
While the author of this article considers some of these practices to be excessive, they all seem to be good habits to use to write good quality code. You probably already use some of these, but you’ll likely pick up a few good tips, as well.
While the CQRS (Command Query Responsibility Segregation) architecture pattern has been around for a while, it has recently started to gain more popularity with the advent of distributed systems and microservices. This comprehensive tutorial explains the principles and how to use it in practice in the context of domain-driven design.
Not too long ago, a lot of pundits claimed that NoSQL meant the imminent demise of RDBMS platforms based on SQL. Well, not surprisingly, that didn’t happen and, today, it seems clear that both SQL and NoSQL have places at the table. This balanced review compares and contrasts them generally and gives advice about when each are appropriate to use.
Return to top
Certainly, we’ve all worked with our share of negative people. Perhaps you are one of them (like I used to be!). But which mindset, positive or negative, is better at work? This article notes that cynicism has the distinct effects of lower income and impeding collaboration.
The fallout from the NY Times article about the work culture at Amazon continues. This article discusses the significant body of research that shows that consistent overwork is damaging not only to workers, but also their organizations, as well. The indication is that a culture of overwork is simply a proxy for other organizational problems.
An interview (kind of meta, huh?!) with the lead developer at LivingSocial discusses some of the problems with technical interviewing and then offers some suggestions on how to streamline the process and improve the results of hiring.
One of the leadership buzzwords of the past several years is ‘empowerment’. In this article, the author turns the concept on its head by pointing out that, in many cases, management needs to stop “dis-empowering” employees instead of practicing a disingenuous effort of empowerment.
Social scientist Barry Schwartz, who gave us The Paradox of Choice, considers the meaning of work and the sociological and psychologic aspects of it in this excerpt from his new book, Why We Work. He discusses the cultural aspects of work and presents some suggestions for how to find happiness in any kind of work.
Return to top
In some ways, HTTPLang is a bit of a curiosity, but it’s still a handy little tool to have, especially for ad hoc testing and troubleshooting. You are probably familiar with cURL and it’s a great tool, but sometimes it’s overkill. To do some simple HTTP scripting HTTPLang might be just the alternative. It allows you to write simple scripts, including loops and conditionals, to interact with HTTP hosts and display the output.
Most Java developers are familiar with JDBC and JPA as well as the variety of popular ORMs, such as MyBatis and Hiberate, for data access in Java applications. However, sometimes you don’t need all of the bells and whistles (and complexity!) of these tools. JDBI provides database access using a fluent interface with parameter binding and automatically uses the native Java collections API to store results. Check out this tutorial to learn more.
Sift is a cross-platform (developed in Go language) alternative to the venerable grep utility with a focus on performance. For each platform supported, it comes as a single file and it’s performances tends to be 1-2 orders of magnitude better than grep and other similar text search tools.
Return to top
In Windows Explorer, if you want to open a Command Prompt in the folder currently displayed, just enter cmd in the Address bar and press <Enter>.
Return to top
This brief list is only partly tongue-in-cheek. A couple of these sound like they would actually be useful, especially with respect to learning the tricks to developing software with good performance. Maybe there is a bright future for software archeology.
Doubtless you studied (and, perhaps, even had to memorize) Robert Frost’s most famous poem, “The Road Not Taken”. But did you really learn it? In this excerpt from a new book examining the poem and what it tells us about America, the author says that it occupies a distinct position between understanding and meaning. Quite philosophical, but perhaps not!
What if the Internet had a page that was a mile long? Well, now it does! This site, if scrolled is a mile long. Along the way, it tells you some interesting facts about things are the length that you are currently on.
Instead of scrolling in your browser for a mile, maybe you’re more interested in comparing the relative size of geographic areas. Check out this site where you’ll learn some interesting facts about geography by doing visual comparison.
So, you probably know about cowsay, right? But who doesn’t want to get a little bit of pithy programming wisdom from a manatee? Too bad it’s not Barbara Manatee, but that’s probably because she doesn’t speak French!
Certainly, you are familiar with buzzword bingo. Well, here’s an interesting twist on the concept specific to words or phrases that you are likely to here in your daily standup for scrum.
Return to top