The choice of the programming language you use for a project has the potential to help or hinder your progress greatly. For a new project, you have the luxury of examining the project’s requirements and choosing a language that fits. However, many development jobs out there deal with legacy code, meaning that this choice has already been made. As I mentioned in my previous post, my first professional development job was working with legacy code that was written in Visual Basic 6. I was chosen for this position based on my experience with VB6, since that would mean that I would have less time ramping up on the language, and more time getting right into the code. As the book points out, familiarity with a language can have huge benefits in productivity. My experience tends to agree with the idea that it takes around three years to get truly familiar with a language, though knowledge with a similar language can cut this down quite a bit.
One of the great things about VB6 was that it was such a high level language, it read a lot like English. If you named your variables right, you could tell exactly what a block of code was doing. Some things, though, just weren’t present in the language, and so were made very difficult to access, often requiring direct calls to the Windows API. This difficulty reminded me of the book 1984, and the concept of Newspeak. The idea behind Newspeak was to remove the ability of the general population to think of concepts like freedom and rebellion by removing the words that describe them. Without the words, it is very difficult to express something, or even to think that it would even be possible to describe.
If you aren’t familiar with some of the languages presented in the last part of this section, you should take a moment and read up on them. Wikipedia has a great set of resources about programming languages, and if you’re interested in seeing some of them in action, head on over to 99 Bottles of Beer, a website that currently contains 1281 different programming languages and variations. A couple of languages that you absolutely do not want to start a project in are Cow, and Whitespace. Check them out, and you’ll see why.
Code Complete, takes me back to the days when I was in the trenches, slinging code. My first job in the industry was working as a software developer for a very small software company, where I started off as a junior software developer maintaining legacy code in Visual Basic 6. When the company failed at an attempt to develop an online directory application in .NET, falling short on both deadlines and requirements, it was scrapped. This left management unhappy with new development and with developers in general. I was eventually able to convince management to give it another go by taking on full responsibility for a project, which gave me a change to experience project management first hand. Since that time, I’ve worked on a couple of other projects, and have kept up with technology through books, classes, and user groups.
While Hilary is away, I will be leading the conversation around the Technical Book Club, and will try to include as much of my personal take on the topics we will be covering. I hope that this will help to expose the relevance for the topics as we encounter them. I look forward to communicating with you through this blog, and hope that you will let me know how I’m doing as we progress.
This week, I will be covering Chapter four, Key Construction Decisions, which covers the following topics:
Choice of Programming Language
Programming Conventions
Your Location on the Technology Wave
Programming into a Language
Selection of Major Construction Practices
Consider getting a call from someone to ask if you can send them a dress. When you hang up you realize that in the context of the situation you assumed it was “a dress” but later you realize that there was some ambiguity and perhaps they meant “address”. Software projects have confusion like this at every level, how do you ensure you’re on target?
Carefully defining problem and requirements ensure you’re software solution is on target. As Code Complete puts it: “Know what you’re aiming at before you shoot” and “don’t miss the mark on specific aspects of the problem”.
While these aspects focus on the right problem, architecture ensures that software construction focuses on the right solution. This section focuses on the many aspects that are commonly found in good architecture documents.
- Program Organization
- Major Classes/Hierarchies/State Transitions
- Organization of Data
- Business Rules and Design Impact
- User Interface (UI) Design
- Resource Management
- Security
- Performance
- Scalability
- Interoperability
- Internationalization and Localization
- Input and Output (I/O)
- Error Processing
- Fault-Tolerance
- Core Decisions and Decision Processes such as:
- Feasibility
- Buy vs. Build
- Reuse
- Change Strategy
Let’s consider a few examples and how these core architectural pieces have a downstream effect on software construction.
Example 1: Software for High School Class
Ed’s SWC is constructing an application for a high school class to learn about and create research reports. When scoping out his architecture he didn’t include a section on the permissions/entitlements that a user would need to run the application. His development team assumed that the user of the application would have administrative privileges on the machine. The developers took license to launch process only available to an administrator. Luckily when they tested a prototype for the high school class, they discovered the reduction in privileges and were able to make the update before their initial release.
When the class used the first release of the product, they discovered that certain searches used keywords that were blocked by the high school systems. Searches such as the XXXI Olympics caused the program to crash due to the restriction of XXX content for high school students.
What critical piece was Ed missing from his Architecture to address these problems earlier in the software development lifecycle?
Example 2: Voice-enabled timesheet application
Sherry was working with her local governor's office to create a timesheet application. She visited the office to talk with some of the temporary employees who would use the application. Upon her visit she discovered that many of the workers had poor eyesight and would rely on the voice-enablement of the application for guidance. She included this in the problem definition. Which architecture elements are critical in addressing this requirement?
Answer 1: One key aspect of this architecture will be the ability for errors to be read off to the users. This requires that all error statements be enclosed in separate text documents for the voice engine to effectively process the error messages. This is a key architectural component that would cost a lot to change if it was not addressed by both the problem definition, requirements and architectural documents.
What other architectural elements are critical for this requirement?
Spend your summer with Software for Students’ Technical Book Club to give yourself a competitive edge in the job market:
Great clip from The Daily Tube: Remember life before Facebook, Twitter, what about before ‘the internet’? Tom Brokaw introduces America to the Internet --- including an
exchange with Bill Gates --- during the early 1990s.
Steve discusses costs associated with iterative and sequential development approaches. He presents many good best practices and charts in Chapter 3 worth reviewing but comes down to these 6 factors that influence software methodology for the project.
Deciding between a mix of iterative and sequential techniques can hinge on the following:
- stability of the requirements
- clarity of the design
- development team’s familiarity with the applications area
- how much risk the project contains
- importance of long-term productivity
- cost of changing requirements, design, and code downstream
For most software projects, having some degree of iteration is valuable. Here are a couple scenarios I’ve seen. Would you choose an iterative or sequential approach for these projects? How do you rank them according to the above criteria?
1) A large company is interested in exploring up and coming web initiatives. They decide to create a mash-up tool. The team contains a handful of programmers that are all familiar with JavaScript, web services, with an average of 3 years experience.
2) A small automation engineering firm is hired for a project to automate the paint production process. Currently this process is completely manual, but very functional. The steps are well understood. The team consists of a number of specialists including a UI specialist, customer consultant, Database Administrator, and 2 teams of programmers.
3) A company is embarking on the 3rd release of a timesheet application. This release will focus on a prioritized set of feedback provided from their user base, including incorporation of web services. The team contains a group of members from the last release and a new team they acquired from banking.
Spend your summer with Software for Students’ Technical Book Club to give yourself a competitive edge in the job market:
Help!! I permanently deleted an email I need, I need to find an email I deleted, how to restore a deleted email. If you’re in trouble, here’s a quick solution for retrieving email from the dumpster in Outlook 2007.
When you delete an email from one of your folders it first goes into the Deleted Items folder. To permanently delete an item, it has to be deleted from the Deleted Items folder and is sent to the dumpster. If you’ve sent an important item to the dumpster, hope is not lost. You can restore the items using the following procedure:
1. Highlight the folder that originally contained the item. (If you’re not sure which folder, than you have to repeat these steps for each possible folder). In this example, we’ll restore something to the Inbox.
2. From the menu bar choose Tools –> Recover Deleted Items. Keyboard shortcut (hold down ALT and press ‘t’ and then ‘t’ again)
3. A window will pop up with the most recently deleted items:
4. Highlight the message you want to restore and select the icon with a message with an arrow on top, ‘Recover Selected Items’
5. To restore multiple messages, hold down ‘CTRL’ and select the items you want to restore
This came in handy for me when one of my rules got corrupted. Hope this helps, Happy mail finding!
The next sections are fairly straight-forward. Here’s a summary of some of the keypoints:
- Without a good problem definition, you might spend a lot of time solving the wrong problem … and never solve the right one.
- Requirements enable the user to agree/disagree before programming begins, which keeps the programmer from making decisions while programming and the cost of changes low.
- 25% of change in requirements accounts for 70-85% of the rework on a project
Cost of errors in requirements detected in
- the requirements stage: 1 unit
- the architecture stage: 3 units
- the coding stage: 5-10 units
- system test: 10 units
- post-release: 10-100 units (closer to 10 for smaller projects with low overhead)
How to best accommodate changes in requirements:
- ensure high quality requirements
- be transparent about the cost of requirement change
- have a change-control procedure
- choose a development approach that is a good fit for the project
- dump the project
- keep a business focus
Your Turn: Here’s an example project, what improvements would you suggest to improve the project?
Company WebsitesRUs creates websites and recently completed the first revision of a website. The website is ready to launch for the target deadline in 2 weeks. They meet with the customer for their first review of the website. The website creates a stream of family/friend information for recovering surgery patients to catch up on the time they missed.
The customer is excited at their work and after the meeting 8 different emails are received by the company with 24 requests for changes. Sarah receives the messages and is overwhelmed by both the response and the number of requests. She knows the work requested would require significant re-work and would take 6-8 weeks to complete.
Spend your summer with Software for Students’ Technical Book Club to give yourself a competitive edge in the job market:
The How Do I? Series has extended their reach to YouTube with their DeveloperVideo Channel. This is a great one-stop shopping for short how-to videos on whatever your interested (or stuck on) for the moment. They have a number of series of videos to grow your knowledge on specific developer tasks like ASP.NET AJAX. Here are a couple to check out:
How Do I: Get Started with LINQ
How Do I: Create and Run Unit Tests in Visual C++?
In answer to the question from last week’s section, according to Code Complete, software construction can account for up to 65% of the total project cost!
One of the challenges we all face is working on a team with others. Typically others on your team will have a different background and set of expertise than you, which is even more true when it comes to technology. As students, you may be introduced to concepts that weren’t even around when your co-workers were in school. Chapter 3 focuses not only on the importance of pre-requisites in the software process, but also how to influence and educate others around you about the development process.
Steve recommend’s these key strategies for influencing your team:
- Appeal to Logic
- Appeal to Analogy
- Appeal to Data
The last one is particularly useful. As developers, we have two challenges:
1) Our first inclination isn’t to think about budgets or the cost of software development. This is a huge decision factor, however, for managers and others who are evaluating the risk and cost associated with a software project.
2) Let the coding begin! We like to dive in and get coding, managers like to see coding because it looks like progress. Everyone tends to view things ‘running’ as measurable progress. As described in chapter 3, this phenomenon is know as WISCA or WIMP syndrome. Why Isn’t Sam Coding Anything? Why Isn’t Mary Programming?
High quality practices and prerequisites reduce cost, risk, and frustration. The remainder of this chapter discusses how to determine if you have established the right prerequisites for your project.
Pop Quiz from Code Complete:
Technorati Tags: books, software, School, Microsoft
Random .NET Ramblings talks about Terrarium, a game created to learn .NET programming. He used this game at UCSD to get students a head start with .NET.
“Back in the day Microsoft created a code base to be used to help people learn .NET programming. The format was a cool game called Terrarium, the concept was that using .NET code you would build creatures of different types. You had to build each creature within a range of specifications if your animal met the specifications you could put in in to the Terrarium environment and see how it manages with the goal that your creatures take over the Terrarium.
…
If you want to learn .NET or know someone who dose you might point them to the new version on CodePlex. The URL is http://www.codeplex.com/terrarium2, just don’t get too sucked in to it! :)”
Thanks for the great post! and thanks Bill Simser for supporting this project. Bill is a Microsoft MVP and blogs about Terrarium and many other .NET experiences.
The release of ASP.NET MVC Preview 3, included improved support for NUNIT Templates. A Coder’s Life walks through a tutorial on How to setup NUnit with Visual Web Developer Express 2008 edition using ASP.NET MVC 1.0.
Read the full article here which includes links to all the software which is free!
If you’re not quite up to date with all this technology, start with some how-to videos to get started with Visual Web Developer Express 2008.
Pictures of technical moms with their pictures are starting to arrive! Check them out at:
http://oreilly.com/go/techmoms
O’Reilly is collecting pictures of Technical Moms for their O’Reilly Mother’s Day Page and discount. Take a pic with your O’Reilly books and send it into press@oreilly.com.
Read this great story about
O’Reilly responding to my Tweet and celebrate Mother’s Day with a 40% discount on tech books at
http://oreilly.com Here’s my picture with some of my O’Reilly books! I always wonder how they pick the animals for the front covers.
Technorati Tags: Mother’s Day, Women in Tech
Our Technical Book Club is underway with our first book Code Complete, but it’s never too late to join! Some people have written to ask how to get involved, so I thought I’d pull together a post.
- Buy, beg, or borrow: Code Complete: A Practical Handbook of Software Construction 2nd edition
- Subscribe to the blog via RSS (or favorite this page): http://feeds.feedburner.com/SpringboardFromMortarboardToOnboard using Outlook, Google Reader, or anywhere you follow feeds. RSS provides the blog posts to you when they are posted.
- Read along. I’m starting at a pace of one chapter a week, although the first chapters are shorter.
- Each Thursday I’ll post an entry summarizing some of the main points from the chapter and asking some questions. Read over and let me know what you took out of the chapter.
- Post comments. I love to hear what you’re thinking as you read through. We all have different experiences with software and different points of view.
Having trouble? Email me and I can help
We’re just getting started, please join in you haven’t missed anything yet. Here are the posts so far:
Code Complete is all about Software Construction. What? You probably never faced a course on software construction in school … or did you. Some key points from this chapter:
- Software Construction includes detailed design, coding, debugging, integration, unit, and integration testing.
- Construction is also known as implementation and programming.
These topics are likely a cross-section of the courses you’ve taken or the tasks you’ve completed while on the job. Construction is a core piece of software engineering. If you’ve worked on a project that started out as “just a small app to do foo” then it’s likely you started with this phase of development. If you’ve worked on a more mature product, concept, or idea, then you might have worked your way to construction through specifications and business requirements. In class, this might be a set of information provided to you before you begin a lab or homework. Steve discuss many great points for why construction is an important topic including:
- Construction is the only activity that’s guaranteed to be done.
- Construction’s product, the source code, is often the only accurate description of the software.
I love the articulation of this first point. Whether it’s a project or a product that’s running late, many corners can be cut but this isn’t one of them.
Questions for discussion:
- In projects you’ve worked on how much time has been spent in the construction phase?
- Steve’s motivation for this book was to provide a quicker dissemination of best practices among practitioners and between academia and industry. How do you learn about or share best practices to improve your skills?
I find the way I learn best is to chat with other developers, although I also like books and newsletters. I find that when I try to explain my code to someone else, I see a lot of nuances that I missed when I was looking at it on my own. When I was at IBM, I developed libraries in C. Memory debugging was quickly one of my frequent tasks and I learned how to use Valgrind and Electric Fence from my colleague Folu. This lead me use to use linux.die.net as a resource more generally. I read a lot of MSDN and DeveloperWorks articles.
Since working at Microsoft, I’ve learned about Channel9 which has a lot of great developer content. Microsoft has a number of great resources for students such as the MSDN Flash Newsletter “News for Students” column and our Facebook discussion at Microphone.
Huge Congratulations to all the Imagine Cup participants and winners! Here are your 2009 US Imagine Cup winners:
- 1st Place: Multi-Point Web ($8,000 trip to Cairo, Egypt for WW finals)
- 2nd Place: Mango Bunnies ($4,000)
- 3rd Place: Special Child ($3,000)
- People’s Choice: Aurora Borealis
Who are these teams making it to the top? Here’s a summary of their projects and team members:
Multi-Point Web
The Project: Our solution is to build upon existing education systems and proved a set of low to no cost web based learning activities that allow every child to participate with multiple mice on one computer, with limited available hardware resources and funding.
The Team:
- Jimmy Dickinson is a student at GSU University working towards his Masters in Information Systems. Jimmy plans to graduate in 2010 and writes mini games in his spare time in Flash and Silverlight and loves to travel.
- Mark Dickinson is a college student at Portland Committee College majoring in Computer Science. In his spare time, Mark likes making custom game mods.
- Luke Dickinson is a high school student at Tigard High School. In his spare time Luke has made some mini flash activities and would like to learn Silverlight.
Special Child
The Project:
| This project was chosen because the State of Arkansas Department of Human Services (DHS) Children’s Services does not currently have a centralized database holding information for all children available for adoption in the custody of DHS. Case Workers for the Division of Child and Family Services are aware only of those children for whom they are personally responsible and perhaps others whose cases are handled within the same office. The pool of children available to parents wishing to adopt is limited to those known to the Case Worker assigned to the parents. In order to reach outside of this narrow collection of information a great deal of legwork is required on the part of the parents to contact DHS offices outside of their county of residence. Special Child is dedicated to providing a quality product to our clients that not only assists and organizes the adoption process for our customers, but sees to it that every child awaiting adoption spends as little time waiting on a list as possible. The goal of the Special Child Adoption Services application is to put in place a centralized database as a location to store information about children in need of a permanent home and potential adoptive parents. Special Child’s design will provide quick access to shared information. Thus, the adoption process is handled efficiently and effectively. The Special Child project brings together the 2009 Imagine Cup theme “Imagine a world where technology helps solve the toughest problems facing us today” by utilizing technology in a way that resolves an issue yet to be addressed on the local level. The Team: - Joshua Thacker is currently working on a Master’s Degree in Management Information Systems at UALR
- Sandy Callahan conceived the main idea of Special Child and is the overseer of the quality of the project. She is a current graduate student at UALR.
- Shreyasi Dutta has been working on the technical aspects of this project.
- Tomica Seals is in her second year of graduate school at UALR and is pursuing a Master of Science in Management Information Systems.
|
Mango Bunnies The Project: The application, Computer-Assisted Medication Regimen Adherence (CAMRA), will assist people with complex medication regimens. CAMRA is targeted to HIV/AIDS patients and will be convenient and discreet. CAMRA is unique because it uses mobile technology and only requires a mobile device, something many people already own. There is no product on the market that leverages the portability and convenience of mobile devices to turn them into stand-alone health care products. The Team: |
- Ashley is a junior Computer Science major at DePauw University.
- Erin ‘Ed’ Donahue is a senior Computer science major at DePauw University.
- Malisa is a sophomore Computer Information and Technology major with a focus on web development at Purdue School of Engineering and Technology.
|
Aurora Borealis The Project: This proposal presents a cost-effective mobile health-care infrastructure that would address the needs of the expecting mothers and children in rural areas around the world. It, therefore, addresses two problems identified as Millennium Goals – maternal health and child health. The rural health infrastructure is inadequate or totally absent in developing and underdeveloped countries. The proposed solution deals with the challenge of inadequate infrastructure to ensure that medical help reaches the expecting mothers and infants in a timely manner. The solution requires global partnership for purchasing the components involved in operating the proposed business model. The core of the solution is a graphical expert system tailored for maternal and child health. The patient condition is captured through pictures and the system can be customized for any local language or dialect. The overall quality of life of the people living in rural areas can be improved by extending this system and adding the extra functionality for addressing other challenges like agricultural problems or combating AIDS/HIV. The Team: |
- All the three team members are pursuing their Ph.D. at the University of Alabama at Birmingham.
- Ritu Arora is doing her research in the area of generative programming and high performance computing.
- Zekai Demirezen is doing his research in the area of domain-specific modeling and semantics of domain specific languages.
- Yu Sun stood 3rd in the regional ACM South East programming contest.
|
Follow the news about Imagine Cup through Microsoft Press Releases:
http://www.microsoft.com/presspass/events/imaginecup/default.aspx
Technorati Tags: Imagine Cup, Student