In Right like a Writer, I mentioned how a list of items should include a comma after every item except the last, including after and or or, and how you should only use one space after a period, rather than two. All versions of Microsoft Word can be configured to monitor for both of these using the grammar settings built in to the application; it will identify violations during regular grammar checks. Here's how to enable these options in MSWord 2007:
- Access Word Options
Access Word Options by clicking the Office Button in Microsoft Word (the Office logo in the top-left corner of the window), and click on the Word Options button in the lower-right corner of the menu popup. The Word Options window should display. - Access Proofing Settings
In the Word Options window, access proofing settings by clicking Proofing on the left-side navigation. - Access Grammar Settings
Once you are in Proofing settings, you will find Grammar Settings by clicking the Settings... button next to Writing Style. Writing Style can be found under the Proofing section titled When correcting spelling and grammar in Word. - Use Only One Space
In the Grammar Settings window, the number of spaces after a period is controlled by the option titled Spaces required between sentences. This is set to don't check by default, but options for 1 space and 2 spaces are available. Set this option to 1. - Include a Comma Before the Last Item
Also in the Grammar Settings window, check for commas after and and or through the field titled Comma required before last list item. This is also set to don't check by default, though always and never are available options. Set this option to always.
Additionally, the style checks available through Word's Grammar Settings can also be very helpful. I prefer the "Grammar and Style" writing style option, as it enables all of the style checks. I encourage you to investigate all of these options, as well as enable the comma and sentence options, as they will help you write right like a writer.
At the devLink Technical Conference, one of the Open Spaces focused on Computer Science curriculum at universities, and what things that the developer community would CRUD on the CompSci tradition. Though I did not have opportunity to participate in the discussion—I was facilitating an Open Space on Continuous Integration, next door—I do have one proposal: "Writing." For Computer Scientists—a traditionally introverted and communication-challenged group—programming in English (substitute with your native language) should be paramount. Communicating to humans is part of our job description, and we must be able to do so effectively and using their language, whether it be for status updates, business justifications, SOWs, proposals, or just another email. Developers need to communicate effectively; write well rather than write good. We must be right like a writer.
We programmers should write like we code. The written word should be concise, to the point, just like code. Coders do not frivolously use fancy namespaces and complicated classes so that their code looks smart, as it has the opposite effect by resulting in bloated, inefficient, unmaintainable systems. Big words implemented frivolously for the sake of sounding smart perform the opposite function, and likewise result in bloated, inefficient, unmaintanable text. We avoid power robbers in our code, such as using string builders rather than underperforming string concatenations, and should avoid similar performance kills in our writing. Additionally, using the wrong keyword in code, or misusing grammatical marks in our code, results in compiler errors or runtime errors. The written word—a language void of any compiler benefits—throws runtime exceptions on execution when it is improperly authored, much like JavaScript or XSL.
“Vigorous writing is concise. A sentence should contain no unnecessary words, a paragraph no unnecessary sentences, for the same reason that a drawing should have no unnecessary lines and a machine no unnecessary parts. This requires not that the writer make all sentences short or avoid all detail and treat subjects only in outline, but that every word tell.” — William Strunk
But like a programming language, English is simply a matter of keywords and laws. We must learn the rules of the system; we must learn its syntax; we must learn how to test and validate our code before shipping it off to a client or to production. Approaching the English language like we approach a programming language would also provide an effective learning mechanism for us developer-types. This would make an effective course at university: "Writing : For Programmers." Learn English like we learn any other language—approach it using our virtues—as what works for us may not be the same path that works for an English major.
Throughout my career, I have noticed a few areas that are typically mis-coded. I have included a few items below that every developer should be aware of to help learn English's keywords, its laws, and to provide opportunities to improve end-user experience.
Knowing the Language at an Elementary Level
- Homonyms : words that sound the same but can mean different things. This is often a challenge for people new to English, but even veterans get confused. Everyone should learn the difference, and make proper use a habit. And proof read, as spell check will not catch misuse of homonyms. This applies to:
- Their / There / They're
- To / Too / Two
- Your / You're
- Its / It's
- Hear / Here
- Threw / Through
- Write / Right
- Irregardless is not a word.
- Who vs. Whom : Who, the subject, is doing the acting, and whom, the object, is being acted upon. The shortcut is to use who and whom as you would he and him. (Remember that him and whom both end in "m".) <Who did what to whom for how many jellybeans? He did that to him for five jellybeans.>
- Me vs. I : Follow the same rules as for who vs. whom, above. The subject is doing the acting, and the object is being acted upon. Subject pronouns are I, he, she, we, they, and who. Object pronouns are me, him, her, us, them, and whom. <Sally gave me five dollars. I used to money to buy lunch.>
- Than vs. Then : A comparison (than) vs. a measure of time (then). In code, than is used when describing a comparison operator; the '>' operator is a greater-than operator. In code, time sequences are an if...then statement. <Apples are better than oranges. I will eat my apple first, then I will eat my orange.>
Knowing the Language at a High School Level
- Power Robbers : Never use due to the fact that. It weakens your sentence. Use because.
- Contractions : In formal writing (e.g. Proposals, SOWs), avoid contractions. Contractions are for casual writing. Think along the lines of a Debug Build versus a Release Build.
- Simply & Obviously : Avoid using simply and obviously as it may be both to you, but neither to your audience. If it was simple or obvious, then you didn't need to write it.
- Use one space after a sentence, not two. A PC is not a typewriter. On a typewriter, with fixed-width fonts, two spaces are preferred, but on a PC, True Type fonts will properly space "<dot><space>" for you. Don't believe me? Open up any book and look at the spaces between sentences. Microsoft Word has an option to indicate this for you under grammar preferences.
- Effect vs. Affect : Effect is the result, affect is the action. Noun and verb. <Poor engine performance is the effect of ignored maintenance. Ignoring maintenance affects engine performance.>
Knowing the Language at a Collegiate Level
- Lists : Just like when defining an array, use a comma after every item in a list except the last. This includes before "and." <I like red, white, and blue.>
- i.e. vs. e.g. : The first is in other words and the second is for example, though this does not do much for clarity. Essentially, i.e. is a complete, clarifying list, while e.g. is an incomplete list of examples. <I watch the three stooges (i.e., Larry, Curly, and Moe). I like all four-player card games (e.g., Euchre, Spades, and Hearts).>
- Semicolons : Semicolons are used to separate two independent yet related clauses that could be broken into separate sentences. <The water is very hot; I hope I don't burn myself.> Also, use semicolons to separate items in a list where the items contain commas. <When the cards were dealt, Jack had a straight; Sally had two nines, two fives, and a queen; and George had a full house.>
Be mindful of your native language. It is the one you use the most, even more than C#, or Ruby, or Java. If you don't already own a copy, pick up The Elements of Style by Strunk & White; if you do own a copy, either have it at your desk so you can use it, or give it to someone who will. Effectively communicating with humans, using their rules, will help you have better testing, better design, better requirements, and have a better job. Become an effective English developer, and it will help you be a more effective developer, overall.
Tomorrow night, Thursday, 11 September, I will be speaking at the GLUGnet Flint meeting. We will be discussing Continuous Integration, focusing on CI as a process, not just a toolset. Come out to Flint, enjoy some pizza, and hear about what Continuous Integration can do for your development cycle. Continuous Integration: It's more than just a toolset Thursday, 11 September, 2008 @ 6:00pm New Horizons 4488 West Bristol Road Flint, MI 48507
Session Abstract:
Does your team spend days integrating code at the end of a project? Continuous Integration can help. Using Continuous Integration will eliminate that end-of-project integration stress, and at the same time will make your development process easier. But Continuous Integration is more than just a tool like CruiseControl.Net; it is a full development process designed to bring you closer to your mainline, increase visibility of project status throughout your team, and to streamline deployments to QA or to your client. Find out what Continuous Integration is all about, and what it can do for you.
My summer has been what seems like a
steady stream of major events in the development community. It really
all began with my election to the board of GLUGnet last April, which immediately put me as a
planner for the first Lansing Day of .Net, for which I handled the web site
and branding. The event, which I blogged about previously, was
held on June 21, 2008, and was a huge success. We will definitely have
the conference again next year, and are already brainstorming ways to
make the event even better. Three weeks after LDODN, on July
11-13, was Ann Arbor Give Camp. Give
Camp was an event for charity, where area developers volunteered their
weekend to code for charity. The Heartland District truly displayed
their selflessness and passion with their willingness to endure three
days of Ninjas-On-Fire coding, often sacrificing sleep to accomplish
deadlines, to help out not-for-profits that likely would never have the
budget for a high-quality, professionally developed web site. I was
also impressed by the event sponsors for their donations and
contributions; Washtenaw Community College provided the venue for no cost, Verio
provided free hosting for each charity's site until 2010, and Microsoft
provided to each of the charities free copies of all of the software
needed to support and maintain the new applications. The planning staff
should be commended for this event, too; they went to no end to enable
the development teams, and to meet our every desire. There was plenty
of food, plenty of snacks, plenty of fluids, and plenty of games for
when we needed to occasionally decompress. We requested ice cream; we
got ice cream. Someone on my team even requested a Cherry Coke, and one
of the organizers made a midnight run to the local gas station to pick
up a bottle. The event was great, and we had a blast. I will be there
next year, maybe even running a team of my own. Another four weeks brought CodeStock, August 9, in Knoxville, TN. Dave Redding,
The Wife, and I hopped in Dave's Charger and cruised the nine hours
from Brighton, MI to Knoxville on Friday night, arriving at about
3:30am for the 7:30am registration. Michael Neel and crew put on a great show. I finally got to
see the Joe O'Brian / Amanda Laucher presentation on DSLs and Brian H. Prince's 'Soft Skillz
' talk. (I highly recommend both.) But what really made the event were
the Open Spaces, organized by Alan Stevens. We
had some enlightening discussions, such as improving User Group
participation, and developing in .Net on a Mac. The after party at
Alan's house included a time for socializing outside of a technical
setting, and included a friendly game of Texas Hold'em. Dennis Burton
was the big winner, and graciously donated his winnings to the Hands On
Museum in Ann Arbor, the charity that Michael Eaton worked on during
Give Camp. In the shortest gap of the summer, I only had to wait two more weeks for devLink, August 22-23, in Murfreesboro, TN. However, there was no 9 hour drive, as The Wife and I hitched a ride on the devLink Bus. Organized by Amanda Laucher
(and others)--my employer, Latitude Consulting Group, was also one of
the sponsors--we chartered a coach for the weekend to take some of the
local developers down to devLink. The bus started in Grand Rapids, and
made pick-up stops in Lansing, Detroit, Toledo, Columbus, and
Cincinnati. We made some "detours" along the way, and the seats were a
little uncomfortable for sleeping, but we all had a great time; we had
some great discussion, we watched some movies, and Mike Eaton, The
Wife, Eric Vogel , and I even played a few rounds of euchre. We had one
minor glitch on the return trip, as one of the right rear tires blew
out at about 1:30am while traveling at 65mph up I-71, but we even had
fun on the 3 1/2 hour delay, as we took over a Waffle House in Carrollton, Kentucky, were entertained by "The Great Pork Chop Incident," and a
few riders extended the Open Spaces discussions from the conference. As for devLink itself, I went to focus on the Open Spaces. Four
different Open Space discussions were on hand for each of the session
blocks throughout the two-day conference. I attended sessions on
Developing the Developer Community; on why Comments are Evil; on How
"Should" Changed My Life (a discussion on BDD
, and creating effective tests); on Microsoft, Open Source, and
CodePlex; and I facilitated a discussion on Continuous Integration. I
only went to one session throughout the conference: Jeff Blankenburg's
talk on Silverlight. I challenged him to show me a reason to use
Silverlight that didn't include gradients, spinning ghost animations,
or anything else that I have been able to do in Flash since version 4.
After his talk, I'm actually motivated to dig in. Over the years, I
have created a few Flash games--nothing too special, as they were
primarily about learning a specific component, like collision
detection--and I plan on starting with converting them to Silverlight.
It should give me a good opportunity to grok the space. But to me, the best part about this summer isn't the things I have
learned, or the code I've produced, but the relationships and bonds
that have formed. I have made many new connections this summer, and
made some great new friendships, and I look forward to many more. The
list is made up of people all smarter than I am, yet I am treated as an
equal. Every time we connect, I learn a lot, professionally and
personally. I have grown a lot over this past year, and I owe every bit
of it to them (and to the kick in the pants from Dennis Burton that
pushed me to get involved in the first place). Here's to what's next.
A question
was posed on LinkedIn asking readers if they
used Twitter, and if so, how and why? Because
of the impact that Twitter has had on my life, I felt compelled to
answer. Twitter is a phenomenal tool that I
feel should be included in any developer's toolset. I use Twitter for
both business and personal reasons, including socializing
with friends, scheduling lunch, and also for networking with business
associates. There is
a lot of value in having a consolidated service through which I can
plan both happy hour and a business meeting. I have also made many new
business contacts through the service, and the personal nature of
Twitter communications have created relationships that are much more
solid than those from other services, such as LinkedIn. When I travel
to a conference such as devLink or Codestock, I often meet these
twitter contacts for the first time, yet the bond that has matured on
Twitter makes it seem like we have been friends for a long time. In addition to networking,
Twitter is effective with asking questions and getting quick responses
(similar to what was on LinkedIn), or for driving traffic to my blog by
promoting when there is a new post.
I access Twitter four different ways: through Witty on my primary
computer,
directly through the web when not at my primary computer, through
Twitterific on my iPod Touch, or through SMS on my phone.
The possibilities allow me to stay connected wherever I go. I have a
presence on many of the social networks, too, such a Pownce,
Jaiku, and Identi.ca, but I rely on Twitter. I can't live without it. Do you Twitter? How do you use Twitter? How has it had an impact on you?
Jeff Blankenburg came up with a good idea! As I go through my LinkedIn connections, I see that not many of them have recommendations. And it's not that these people don't deserve them--many of these connections I consider to be amongst the brightest people in the industry. As a community, and in many cases simple as a people, we don't often take the time to help each other out. We may pat each other on the back for recognition of talent, but we don't often do so in a public forum. Social Networking sites like linked in are phenomenal for things like job hunting, not necessarily for the networking but because potential employers will peruse these sites to gather information about a candidate, and these recommendations can go a long way towards impressing the employer. Enter Contribupendence Day! Jeff came up with the idea for one grand call-to-action where the entire community gets together to "tell the world about the people we work with." Everyone should comment / recommend / praise their friends, colleagues, associates on sites such as LinkedIn or Plaxo. No strings attached. No expectation that they will return the favor. Just do a good deed for your buddy, because that's what we should all be doing anyway, everyday. I have a few folks that I have been meaning to recommend, and I just haven't gotten around to it. This is good motivation, and a great idea. You should, too. Today we celebrate our Contribupendence Day.
Our first Lansing Day of .Net has come and gone. Plenty of people are blogging about it. After a stressful final week of creating designs for swag and for attendee badges, buying refreshments, and making last minute schedule changes, the event ran smoothly, and I am quite happy with the outcome. The group did an amazing job putting it all together. We had great attendance, phenomenal sponsorship, and great sessions. Corey Haines stepped in at the last minute for a speaker that was unable to make it, and did a commendable job by any standards, let alone that he assembled the entire talk within 24 hours. Once registration had closed, and things had settled down, I was also able to see sessions by Michael Eaton on Castle ActiveRecord, Jay R. Wren on Castle Windsor, Patrick Steele on Castle MonoRail, and WCF with James Bender, all of which were also well done. It was also great to meet-in-person the people I've been chatting with on Twitter or over the phone while organizing the event, as well as getting to know so many new people. I will see you all again, hopefully with you wearing my Lansing Day of .Net "i was there" t-shirt or drinking beer from my "i think i was there" pint glass! (They, too, turned out exactly as I had hoped.) "Hey. That's my art!" It is very cool to this web developer to see people walking around wearing my artwork. Thank you, again, to all of the organizations that sponsored the event, without whom the event wouldn't happen, to all of the speakers that helped us all learn new things about our craft, and to all of the attendees that made this event worth while. We need to do this again next year!
The day's agenda for Saturday's Lansing Day of .Net has been posted.
Registration will open at 7:30am with the first session starting at
8:30am. There will be 24 sessions throughout the day, spread across 4
rooms and 6 timeslots. Sessions will be divided by a 15 minute break,
and an hour break for lunch. The final session will end at 4:30, when
the closing and final raffle will be held. Saturday's schedule: 7:30 - 9:00 - Registration and Check-in 8:30 - 9:30 - First Sessions - Programming with Literal XML and Embedded Expressions (Paul Kimmel)
- The Entity Framework (Tim Golisch)
- Data Access with NHibernate (Len Smith)
- MicroISV: Start Your Own Software Company (Patrick Foley)
9:45 - 10:45 - Second Sessions - Well, Isn’t That Spatial… [SQL Server 2008 Spatial Data Type] (Jason Follas)
- LINQ For SQL - CRUD! (Joe Kunk)
- An Introduction to Castle ActiveRecord, or Stop Writing CRUD! (Michael Eaton)
- Regular Expressions can be your friend (Vijay Jagdale)
11:00 - 12:00 - Third Sessions - IronRuby, the DLR and Silverlight (Carey Payette)
- Windows Live: An API for Web 2.0 (Martin L. Shoemaker)
- Everyday Inversion of Control (Jay R. Wren)
- Structure and Guidance for Organizing Applications within Visual Studio (Keith Elder)
12:00 - 1:00 - Lunch 1:00 - 2:00 - Fourth Sessions - Be a Rules Follower: Windows Workflow Rules Engine (Michael Wood)
- Test Driven Development in C# (Philip Japikse)
- Monorail: An MVC Implementation on ASP.NET (Patrick Steele)
- Manage Complexity With Agility (Alan Stevens)
2:15 - 3:15 - Fifth Sessions - Enhancing Windows and Web Applications with Microsoft Presence (Chris Woodruff)
- Introduction to WPF (Jennifer Marsman)
- Introduction to Dependency Injection using Spring.NET (Ryan Montgomery)
- Agile Games (Amanda Laucher)
3:30 - 4:30 - Sixth Sessions - Agile Project Management with Scrum (Dan Rigsby)
- SQL Server 2008 for Developers (Sam Nasr)
- Distilling the Dynamic Language Runtime (Josh Holmes)
- Getting Started with WCF (James Bender)
4:30 - 5:00 - Closing and Raffle
GLUGnet (the .Net User Group in Lansing & Flint) is organizing a Microsoft .Net 2.0 Certification Study Group in pursuit of the “ Microsoft Certified Technology Specialist / Web-Client Development” certification. GLUGnet started one in Lansing, and I thought it would be a good idea for us to fire one up in the Flint area, as well. We will be using the MCTS Self-Paced Training Kits for Exam 70-536 (Microsoft .NET Framework 2.0 Application Development Foundation) and Exam 70-528 (Microsoft .NET Framework 2.0 Web-Based Client Development). Both books are available from Amazon for around $45. Attendees will self-study one chapter per week, and meet together once a week to discuss that chapter as a group. If we miss a week due to holidays, we can decide to either double-up the next week, or to just skip the week and cover that chapter next time. At the end of each book, we will take the applicable exam. Each of the two exams are $125 each, and the schedule has us certified around mid-January. Exam 70-536 : Microsoft .NET Framework 2.0 Application Development Foundation. ( Training Kit | Amazon) Study: June – September. (16 weeks). Exam: End of September. Exam 70-528 : Microsoft .NET Framework 2.0 Web-Based Client Development ( Training Kit | Amazon) Study: October – January. (13 Weeks) Exam: Mid-January The group will be meeting every Tuesday from 6pm-7pm at the Crossroads Meeting Room in the Cromaine District Library, Crossroads Branch in Hartland, MI ( http://tinyurl.com/4kpgul ). The facility will hold 30 people, and has Wi-Fi available. The first meeting will be next Tuesday (June 17) from 6pm-7pm. I realize that the 17th is short-notice, but I wanted to get rolling. Because of the short notice, this first meeting will be just getting a feel of who is interested, getting to know everyone, discuss everyone's experience with 2.0, and discussing the format. We will then each read through the first chapter on our own throughout the following week, and the first chapter will be discussed by group on the following Tuesday, June 24. I still encourage anyone that is interested to go. This group is open to the community and anyone is welcome. I hope to see you there.
Michael Eaton started it, and it sounds interesting, so I'll jump on the bandwagon, too. I need to post something, and maybe this will be a good writing exersize to get the posts flowing again. So, in 500 words (exactly, not counting the bold questions), how I took a flying leap into software development. And feel free to post your own answers, too. How old were you when you started programming?When I was 13 (1992) on the family's first computer: a shiny new 486DX2-66, with 8MB
of RAM, and those big-honkin' VLB I/O and Video cards. How did you get started in programming?Before that computer, I had never used one before, other than typing class in school or playing
MathBlaster or Oregon Trail in the library. I destroyed that machine a quite few times by running every .com or .exe on the machine just to see what it did. (FDisk is a very bad application for the uninitiated to play with.) Knowing how the thing worked led to manipulating it for my own motives: a full set of startup configurations in config.sys/autoexec.bat to eek out every last Kb of base memory. Anything to make Wolfenstein or Doom run just a little faster. And the obsession with video games led me to start writing my own when VB3 launched in '93. Woo-hoo, I could write games!! And I could trash that computer even faster. My mother bought a Iomega Ditto drive to back up her files every night, so that when I trashed it she wouldn't loose anything. I started playing around with web programming in mid-94 with my AOL account, and completely bailed in Windows programming in favor of Web in 1995 when I signed up for one of the first accounts on GeoCities. What was your first language?
Batch Language. Or Visual Basic. What was the first real program you wrote?
A vertical scrolling shoot 'em up in VB3, similar to Raptor (I loved that game) or Tiger-Heli. Even made my own sprites and bitmaps in Paint!! What languages have you used since you started programming?Classroom-only: C++, Perl, PL/SQL, Scheme, and QBasic. Personally/Professionally: ActionScript (Flash), ASP, C, C#, CSS, HTML, Java, JavaScript, Lingo (Macromedia Director), PHP, Ruby, T-SQL, VB, VB.Net, VBScript, and XML. What was your first professional programming gig?
The first code-for-food was in 1995; I got about US$150 for building a few web pages Baypoint Communications. The first full-time gig was in 1999 at Navistream in Rochester, NY (Now BrandLogic) as a New Media Developer. My college's career center didn't have any positions for Web Development, and I was having a tough time finding an internship. I weaseled my way onto the Career Center web site for RIT (near my home town) and found a posting for Navistream. I contacted the company directly and landed an interview. When the interviewer asked me how I found out about them, I told them the story. They were impressed with my initiative and I got the job. If you knew then what you know now, would you have started programming?Yes. Absolutely. It is a little difficult at times, but it is definitely something I love doing. Unless I could have been a professional racecar driver. If there is one thing you learned along the way that you would tell new developers, what would it be?Do it for You, not for Them. In this business, it is essential that you keep the passion and spirit that made you like programming in the first place, otherwise it becomes a chore. Find a company that will encourage that passion, and stay connected with other like-minded people through things like user groups, conferences, or even Twitter. What's the most fun you've ever had...programming?
I particularly enjoy projects that are off the reservation. Amazing things happen when developers get some down-time to go code whatever they want.
|