Avram Joel Spolsky (born 1965) is a software engineer and writer. He is the author of Joel on Software, a blog on software development, and the creator of the project management software Trello. He was a Program Manager on the Microsoft Excel team between 1991 and 1994. He later founded Fog Creek Software in 2000 and launched the Joel on Software blog. In 2008, he launched the Stack Overflow programmer Q&A site in collaboration with Jeff Atwood. Using the Stack Exchange software product which powers Stack Overflow, the Stack Exchange Network now hosts over 170 Q&A sites.
Joel Spolsky at the Stack Exchange London office, June 2014.
|Born||1965 (age 53–54)|
Albuquerque, New Mexico
|Nationality||American, New Zealand, Israeli, Dual citizenship|
|Alma mater||Yale University|
CEO, Stack Exchange Network
Co-founder, Fog Creek Software and Trello
Spolsky was born to Jewish parents and grew up in Albuquerque, New Mexico, and lived there until he was 15. He then moved with his family to Israel, where he attended high school and completed his military service in the Paratroopers Brigade. He was one of the founders of the kibbutz Hanaton in Lower Galilee. In 1987, he returned to the United States to attend college. He studied at the University of Pennsylvania for a year before transferring to Yale University, where he was a member of Pierson College and graduated in 1991 with a BS summa cum laude in Computer Science.
Spolsky started working at Microsoft in 1991 as a Program Manager on the Microsoft Excel team, where he designed Excel Basic and drove Microsoft's Visual Basic for Applications strategy. He moved to New York City in 1995 where he worked for Viacom and Juno Online Services. In 2000, he founded Fog Creek Software and created the Joel on Software blog. Joel on Software was "one of the first blogs set up by a business owner".
Spolsky also co-founded Stack Overflow, a question and answer community website for software developers, with Jeff Atwood. He is now CEO of the resulting Stack Overflow and the Stack Exchange Network.
He is the author of five books, including User Interface Design for Programmers and Smart and Gets Things Done. He is also the creator of "The Joel Test".
Spolsky coined the term fix it twice for a process improvement method. It implies a quick, immediate solution for fixing an incident and a second, slower fix for preventing the same problem from occurring again by targeting the root cause. His use of the term Shlemiel the painter's algorithm, referring to an algorithm that is not scalable due to performing too many redundant actions, was described by salon.com's Scott Rosenberg as an example of good writing "about their insular world in a way that wins the respect of their colleagues and the attention of outsiders."
Spolsky recently made an appearance at the WeAreDevelopers Conference 2017, stating how developers are writing the script for the future. In his speech, Spolsky talks about how software is eating the world, how it is becoming more evident in everyday life as people interact with more software on a day-to-day basis, and how developers are helping to shape how the world will work as technology keeps evolving. He uses the metaphor "we are just little vegetables floating in software soup", referring to our constant use of software for the most mundane activities, including work, social networking, and even taking a cab.
Schlemiel the Painter's algorithmEdit
In software development, a Shlemiel the painter's algorithm (sometimes, Shlemiel the painter algorithm, not to be confused with "Painter's algorithm") is a method that is inefficient because the programmer has overlooked some fundamental issues at the very lowest levels of software design. The term was coined in 2001 by Spolsky, who used a Yiddish joke to illustrate a certain poor programming practice: Schlemiel (also rendered Shlemiel) is to paint the dotted lines down the middle of a road. Each day, Schlemiel paints less than he painted the day before, and complains that it is because each day he gets farther away from the paint can, and it takes him longer to go back and put paint on his brush.
The inefficiency to which Spolsky was drawing an analogy was the poor programming practice of repeated concatenation of C-style null-terminated strings. The first step in every implementation of the C standard library function for concatenating strings is determining the length of the first string by checking each character to see if it is the terminating null character. Next, the second string is copied to the end of the first.
In Spolsky's example, the "Schlemiels" occur when multiple strings are concatenated together:
1 strcat( buffer, "John" ); // Here, the string "John" is appended to the buffer 2 strcat( buffer, "Paul" ); // Now the string "Paul" is appended to that 3 strcat( buffer, "George" ); // ... and "George" is appended to that 4 strcat( buffer, "Ringo" ); // ... and "Ringo" is appended to that
After "Paul" has been appended to "John", the length of "JohnPaul" (or, more precisely, the position of the terminating null character) is known within the scope of
strcat() but is discarded upon the end of function. Afterwards, when
strcat() is told to append "George" to "JohnPaul",
strcat() starts at the very first character of "JohnPaul" (which is "J") all over again just to find the terminating null character. Each subsequent call to
strcat() has to compute the length again before concatenating another name to the
buffer. Analogous to Schlemiel not carrying the paint bucket (or the string's length) with him, all the subsequent
strcat()s have to "walk" the length of the string again to determine where the second string should be copied. As more data is added to
buffer with each call to
strcat(), that terminating null character also gets farther away from the beginning, meaning subsequent calls are increasingly slower.
The problems illustrated by Spolsky's example are not noticed by a programmer who is using a high-level language and has little or no understanding of how the language implementation works, including some basic knowledge of its underlying principles and functions. "Some of the biggest mistakes people make even at the highest architectural levels come from having a weak or broken understanding of a few simple things at the very lowest levels."
- Spolsky, Joel (2001). User Interface Design for Programmers. Apress. ISBN 1-893115-94-1.
- Spolsky, Joel (2004). Joel on Software: And on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity. Apress. ISBN 1-59059-389-8.
- Spolsky, Joel (2005). The Best Software Writing I: Selected and Introduced by Joel Spolsky. Apress. ISBN 1-59059-500-9.
- Spolsky, Joel (2007). Smart and Gets Things Done: Joel Spolsky's Concise Guide to Finding the Best Technical Talent. Apress. ISBN 1-59059-838-5.
- Spolsky, Joel (2008). More Joel on Software: Further Thoughts on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity. Apress. ISBN 1-4302-0987-9.
- Spolsky, Joel; Atwood, Jeff (July 8, 2008). "Stack Overflow podcast #13". Retrieved August 4, 2013.
- Joel Spolsky interviewed on the TV show Triangulation on the TWiT.tv network
- Spolsky, Joel (October 30, 2005). "About Joel Spolsky". Joel on Software. Retrieved August 4, 2013.
- Spolsky, Joel. "Joel Spolsky". joel.spolsky.com. Retrieved August 4, 2013.
- Livingston, Jessica (2007). "Interview: Joel Spolsky Co-Founder, Fog Creek Software". Founders at Work: Stories of Startups' Early Days. Apress. ISBN 9781590597149. Retrieved August 4, 2013.
- "An Interview with Joel Spolsky". SoftLetter.com. Archived from the original on August 9, 2007. Retrieved August 4, 2013.
- Spolsky, Joel. "How Hard Could it Be". Inc. Retrieved August 4, 2013.
- "Joel Spolsky". Internet Movie Database. Retrieved August 4, 2013.
- Atwood, Jeff (April 16, 2008). "Introducing Stackoverflow.com". Coding Horror. Retrieved August 4, 2013.
- "Management Team". Stack Exchange Network. Retrieved August 4, 2013.
- Spolsky, Joel (January 6, 2012). "How Trello is different". Retrieved August 4, 2013.
- Spolsky, Joel (December 6, 2016). "Anil Dash is the new CEO of Fog Creek Software". Retrieved December 11, 2016.
- The Joel Test
- Spolsky, Joel (February 19, 2007). "Seven steps to remarkable customer service". Retrieved August 4, 2013.
- Rosenberg, Scott (December 9, 2004), The Shlemiel way of software, salon.com.
- "About Joel Spolsky". Retrieved 27 June 2015.
- "stackoverflow". Retrieved 27 June 2015.
- "Untitled (Joel Spolsky on Twitter)". Retrieved 27 June 2015.
- Spolsky, Joel (December 11, 2001). "Back to Basics". Joel on Software. Self-published.
- NOTE: For purposes of this discussion, an appropriate level of understanding of how the "language implementation" works, would usually include: having some knowledge of the "time complexity" of the compiler generated code -- including code that is invoked by the compiler generated code, such as subroutine libraries and class libraries. Understanding the relevant algorithms used within that compiler generated code, and within library routines called by it, does not necessarily mean having the knowledge required to (design, and) write that code; but it would include knowing enough to be able to read that code intelligently. When we talk about the "language implementation", typically we include the material that is provided when someone downloads the compiler and run-time package[s], and documentation, and licenses, after having decided to use (or to evaluate) a certain programming language. That material may include not only the run-time libraries that are formally part of the language implementation, but also some other subroutine libraries and class libraries that may influence some users' decisions about which language to use, even if those software packages are themselves written [or, "mostly" written] in the same language that they serve to enhance the usefulness of. There might not be a clear dividing line between "language implementation" [-type] run-time package[s], and other software that may well be Free and open-source software (FLOSS) that happens to be callable from (and "associated with") a certain language.