Password Rules are Stupid
- Common rules actually weaken security.
Best Practice ... Not!
- This is one reason why "old" code can be touchy.
Wow! That was fast!
- Making the right choices in your code can have huge payoffs in speed.
Ctors in Chains
- Shrink your C++ code even more by chaining your constructors together.
- Virtual base classes: what are they good for?!
Practice Makes Pretty Good
- Become a master software engineer by practicing like a ninja warrior.
You Should Get Out More
- Maintainability is the key to software success.
Why You Need Me
- Seven reasons why I think you need me to work for you.
I Create Wealth
- Or, why this is such a great business to be in.
Standards in Software
- Software engineering standards are a necessary and good thing.
What is a Content Management System?
- $10.5 billion will be spent on them this year (2003) alone, but what are they?
Top 10 Benefits of a Content Management System
- So what good are they?
Do You Need a Blowfish?
- What is a Blowfish? Does size matter? Is it right for me? Get your questions answered here.
Why Not Windows?
- Don't just take my word for it ...
10 Attributes of a Professional Software Engineer
- A truly professional software engineer stands out from the crowd. Here's what makes them different.
How to Score a Startup
- Examine all these points of startup companies and see how they add up.
10 Attributes of a Professional Software Engineer
The level of professionalism in the software engineering field has suffered
greatly over the past 5 to 8 years and today appears to be reaching a new low.
The consequences of this dive are larger project cost overruns, more missed
deadlines, lost revenue and greater opportunity costs, lower staff morale, and
poorer quality software in general. Unfortunately, little is being done to
change the status quo except to continue to hire more young and underqualified
programmers with low salaries while the experienced 'mentors' continue to
leave the industry in frustration.
By some accounts, as many as 80% of all software projects either fail to reach
completion, are shelved upon completion, or quickly withdrawn and replaced
with yet another 'latest and greatest' release only to continue a tradition of
missed opportunities, unmet expectations, and monetary losses that helped kill
our once booming economy. The software development business is in a poor
state, but with a little pride and commitment by the movers and shakers, we
can regain the momentum.
With this in mind, I offer the following attributes. A truly professional software engineer ...
- ... understands the real requirements of their project and keeps
focused on those requirements.
Few serious software projects succeed without first defining the boundaries
and limits of the environment in which this project will run and the needs of
the users who will use it. In the absence of this foundation, many poor
decisions will be made by the development team resulting in improper
priorities and ill-fitting solutions. Open, honest, and frequent
communication with the User is essential to collect this valuable information
early on in the project cycle.
- ... understands who the 'client' is.
The 'client' for a given software project is not always the obvious person or group.
In a work for hire scenario, the client is clearly the person who is writing
the checks. For software projects to be used in-house in a large organization, the
client is the group, or manager, who will be using the finished product. In a
software development company whose products and/services are sold to the public, the
client is the executive staff or management of the company.
It is important to recognize who the client is so as to maintain the proper perspective
of the project's priorities.
- ... maintains open, frequent, and "straight up" communications with
The most logical approach to software product development is to contract the
development out to a commercial software group much like an inventor
finds a fabricator to manufacture his product. Ironically, with software this approach
fails with great regularity due to poor communications between the client and
the development team. Professional software engineers have the experience and
knowledge to ask the right questions and ascertain project requirements,
provide quality and timely feedback, and provide advice and consultation as
needed to keep the project on track.
- ... produces a design for all but the simplest projects.
The Princeton SIP Team said it best: "A program that has not been specified
cannot be incorrect, it can only be surprising."
- ... produces, and follows, a plan to implement that design.
Without a plan it's too easy to allow tremendously damaging scope creep, lose
direction, and eliminate any possibility for meaningful testing.
- ... chooses the best tools for the job, not according to what's popular
today, but by the given project requirements.
Oftentimes, the underlying technology used to implement a given project is
chosen for wrong reasons. Teams will choose a new technology just for the
chance to learn it, not because it's the best tool for the job. Other times
tools are chosen just because it's the popular technology of the day. Both of
these criteria are common, but damaging to the potential success of the
project. Technology cannot be chosen without a thorough review of the project
requirements -- if the end user does not require platform independence, then
it's unlikely to be a good choice to use a platform independent solution.
- ... maintains high standards of professionalism and doesn't accept low
standards from those around them.
- ... maintains the discipline to consistently uphold development coding
and testing standards.
Development and testing standards are put into place for software development
to save time and money in the long run. They lead to many fewer bugs that are
generally easier to track and resolve. They also get testing started earlier
in the cycle thereby shortening the overall development and testing cycle.
- ... fully and properly tests code to ensure the highest levels of
reliability and maintainability in delivered code.
Programmer unit testing is paramount in ensuring that individual pieces of a
software project work as advertised. Not only does unit testing result in
automated self-testing code, but often produces highly useful testing and
diagnostic tools that can be used by later testing to find and correct less
- ... understands that maintenance is the most expensive phase of any
software project and follows standards that help reduce this cost through good
documentation and comments in code.
Knowing these differences can go a long way toward bringing success to your