Middleware for wireless sensor network (WSN) abstracts a network as an entity and hides programming difficulties from programmers. Many middlewares have been proposed, but they use different programming languages to manipulate functions in WSNs. This inhibits usability when manipulating multiple WSNs managed by different middlewares, because the primitives of each language have different descriptive capabilities. In this paper, we propose and apply design patterns in WSN programming to complement the capabilities of language primitives, and discuss the effectiveness of these design patterns. First, we discuss major middleware languages and compare the capabilities of their primitives. Second, we extract design patterns from the representative middlewares to cover the missing capabilities identified in the comparison. Finally, we discuss the effectiveness of design patterns for WSN programming. The discussion indicates that design patterns improve the usability of manipulating multiple WSNs.