Monday, August 18, 2008

Web Design Tips For Programmers

Author: Rincewind


Short Tips

Make your site consistent through the pages. Wherever is the navigation panel in one page there it should be on another one. The color theme should be the same except in the cases you want to indicate to the visitor that they reached different part of the site.

Use the so called non breaking space - ' ' which put between two words appear as space but this tell the browser that the words should not be separated.

Do not use page counters. They suck. Use some kind of statistics but do not use page counters (shown to your visitors). It was cool 5 years ago.

Do not put 'Under construction' signs. Every site is developing. That doesn't mean that we should all put such signs. If something is not ready do not put it there.

Do not use blinking text. This is part of the HTML standards but it is so annoying and unnecessary that some browsers like IE go further and render this kind of text as normal, non blinking one.

Try not to create all blue sites. Yeah, I understand that you think the blue is nice color. Haven't you seen that you are not the only one? There are so much blue sites that it will be very hard for yours to stand out of the crowd.

Do not use frames. There is so much trouble with them - your site can not be properly indexed by most of the web crawlers, no one can bookmark a specific page because the browser's address bar shows the main one. If you hit the refresh button the main page is refreshed instead of the one you are looking at. If you go to forums about web design you can see endless accusations towards the frames. Do not use them if you are not totally confident in their use.

Do not use splash screen. Yeah the one that is cool the first few times when you come to the site and the same which become boring and time consuming to pass the next hundreds visits.

Tuesday, June 10, 2008

The 7 Habits of Highly Effective Web Sites

Many companies successfully create visually appealing sites, but fall short of delivering sites that produce high yielding results. A countless number of customers leave Web sites without questions answered or products purchased. Marketers scratch their heads wondering what went wrong.

How are great Web sites developed? How can you guarantee your site produces the results you desire?

By leveraging the highly promoted principles of Steven Covey, "The 7 Habits of Highly Effective People," your Web site will become a more valuable asset that will increase brand awareness, customer retention and produce qualified customer leads.

Habit #1: Your customers are in charge -- listen and respond to their needs.

Your Web development team's highest priority is to understand why customers visit your site. First, make a list of your customers' most important tasks and narrow that list down to the essentials.

Analytic tools such as click stream and application logs will help with this task, but only tell part of the story. Focus groups and online surveys or feedback forms are great tools to receive direct feedback from customers.

Habit # 2: Create goal-driven sites.

Creating a goal-driven site seems self evident, but you'd be surprised to learn that most companies tend to think a Web site is a marketing brochure with more real estate.

The very nature of the Web provides many more opportunities than this, which if properly harnessed, can pay big dividends.

The Web provides a targeted means to drive customers to specific outcomes or "calls-to-action." It is critical to ask yourself one simple question before starting any project: What is my desired outcome for the site users?

This question will provide focus and direction into every piece of content and functionality on your site. Whether the goal is to drive customers to fill out a contact request form, buy now, or to visit the nearest physical store it is key to always focus on the desired outcome for optimal effectiveness.

Habit #3: Prioritize your customers' experiences.

Two reasons customers switch to competing organizations are they feel they are not valued and the benefit of continuing to do business is no longer greater than the cost of doing business.

By putting your customers' experience first, you create perceived value and increase customer retention. Since it is always harder and more expensive to acquire new customers than keep old ones, why make more work for yourself?

Habit #4: Drive value back to your customer.

Organizations should value every piece of data a customer provides. This will create a win/win relationship between your organization and your customer as well as generate a tremendous amount of good will.

For example, many sites require customers to register before proceeding to restricted or premium areas. In many cases, registering provides little perceived value to the user.

To add insult to injury, the site does not appear to "use" a customer's data to enhance the user experience.

For example, if your customer registers and enters her home zip code information and then desires to find a local store, your site should automatically display the five locations closest to the user's home address. The customer immediately sees the benefit of providing her personal information and gets to her goal (and your store) faster.

Habit # 5: Knowing what your customers don't provides value.

Capture and feedback mechanisms are important tools that allow you analyze to your site's effectiveness, but there are several other methods you can use to understand what your customers don't know.

Find out what your customers are searching for on your site by reviewing the search strings that produce invalid results. This is one of the most underused ways of understanding what customers want.

Habit #6: Create an ongoing dialog with your customer.

Web personalization technologies enable your site to create a "dialog" with individual site visitors. This dialog will continue at every site visit and can even drive users back to the site if they haven't visited for a specific period of time.

Target distinct messages to specific audiences. For instance, the site can display different products and messages based on a user's demographics or observed behavior. Personalization technologies make it possible to move the customer closer and closer to your company's desired "call-to-action".

This concept is also known as episodic marketing, as it is moving your customer forward to a desired behavior, one "episode" at a time.

By leveraging the power of a Web site's interactive nature, your company will generate more qualified leads that drive deeper into the sale funnel for your sales organization.

Habit #7: Optimize your site with the power of A/B split testing.

Marketers love metrics to backup marketing decisions. Web personalization technologies allow marketers to use their Web sites as a platform to rapidly and inexpensively test concepts and ideas. A/B split testing allows marketers to understand the effectiveness of specific Web content.
By applying these seven habits to your Web sites, your organization can see a rapid increase in customer loyalty and satisfaction as well as lower costs for customer support.

Seven Habits of Effective Developers

Keep it clean, and keep it simple -- that is the maxim software developers should adhere to.

According to Lee Chuk Munn, a staff engineer at Sun Asia-Pacific, writing applications is like writing a book.

"I've learned various programming languages [but] it doesn't matter what language you write in, the story [you write] has to be good," Lee said, in a phone interview with ZDNet Asia. A 27-year veteran in software programming, Lee sits in Sun's software department where he guides the company's developers and network of independent software developers in using Java and Solaris.

"Programming is just an expression to a solution. A lot of it is about understanding and recognising the problem and getting help. This [concept] is generic across all programming languages, it doesn't matter what you use -- whether it's C+ or Java. The approach is still the same," he said.

Lee noted: "What irks me is developers today are churning out applications without any regard or love for it. That's my number one pet peeve. So, it's like they're doing it for the money, which is good, if you're a project lead, but you need to put in some concern and care into what you're building and not just in shipping [the application]."

Lee listed seven habits that all software developers should possess to be effective in their job:

1. Understand the problem

Before you can deal with the problem, you need to first understand the problem you are trying to solve.

"From my observations, I find that developers aren't keeping to the point," Lee said. "When you write a program, you're trying to express the solution to a problem, [but] sometimes people approach a problem without even first thinking about it. So there may be times when there may already be a solution to a similar problem that can be adopted for the one you're trying to resolve."

For instance, Lee said, there are different algorithms engineers can use to write a sorting program.

To select the right one to use, developers need to first understand the size of the data that the sorting program will be administered on, in order to decide which is the right algorithm to use.

"Choosing the wrong one would put your application in jeopardy in future," he said.
Lee also highlighted the need to do the necessary research before starting development work, and to think about how people will go about using the application, so elements such as user interface and design should not be neglected.

2. Use appropriate tools

Study various programming concepts and data structures, and start building a reservoir of software design patterns, Lee said.

While reference books are a good source of information, he cautioned that technology evolves too quickly to rely solely on static text-based recommendations.

"Have a general idea of what is available," he said, adding that developers can then use this as a foundation on which to build more complex applications.

He also urged software engineers to become well-versed in a variety of tools, and develop their own if there is nothing appropriate for the problem they are trying to solve.
Quoting American psychologist Abraham Maslow, Lee read: "If the only tool you have is a hammer, you will see every problem as a nail."

This Maslow concept has become so popular among software developers that it has been dubbed the "Golden Hammer" rule. It cautions engineers with limited knowledge or training of solutions that they run the risk of using only tools they are familiar with, but which may not be the most appropriate, when they develop a new program.

3. Strive for simplicity

Programmers should develop applications that are:

easy to understand;

easy to explain;

easy to maintain; and

easy to document.

Lee noted that simplicity is not only associated with purity or clarity, it also reflects the engineer's understanding of the problem. "Anybody can come up with a convoluted solution," he said.

Noting that debugging is twice as difficult as writing a program, Lee said software developers will have an easier time patching bugs if their applications are clear and uncomplicated.

4. Keep your code clear

Only incorporate code that you understand, and make sure others understand it too.
Lee explained that software developers are like novelists, each with their own writing style.

"Whatever style you adopt [doesn't matter]; just make sure you write clearly," he said. "When you write codes you need to keep them clear. Don't squash them, just like how you would apply text spacing when you write a novel."

Think also about how you organise and label your codes.

Lee said: "Put yourself as an author; how would you write something that others can easily understand and follow your thoughts? That's how a programmer should code as well."

While there are no standard code layouts or models software developers can adopt, there are recommended coding practices, Lee said.

Programmers working on a Java platform, for example, can visit websites that recommend certain methods of naming variables, he added. "So there are conventions which most Java developers would already know," Lee said.

5. Learn to debug

Identify bugs early in the development process, and deploy automated testing tools, such as JUnit.

Tests will help ensure the program performs the task you developed it to do.

"A reasonably sized commercial application is never bug-free, especially operating systems or big applications," Lee said. "So developers try to do tests to remove fatal bugs that can render an application unusable or bring the whole site down."

He reiterated the importance of maintaining "clean" codes, noting that developers should always know what they are adding to their codes as they could easily inherit bugs from external sources.
"Sometimes, there are bugs in your codes or in other [software] libraries that you may have bought or downloaded that you cannot control," Lee said, underscoring the need for developers to "test early; test often".

Software engineers can reduce the time to debug by isolating the faulty code, and fixing and retesting this particular section before piecing it back into the main program.

"For example, when you click on menu item one and two in the program before a bug appears, you'll have to keep going through levels one and two every time you test and debug the program," Lee explained. "So, instead of doing that, pull out this piece of code, test it and debug as a standalone. Once you're certain it's fixed, then incorporate it back into the [main] code."

6. Leverage what is available

Developers should also look for solutions or algorithms that are already publicly available, such as on developer forums and mailing lists.

Asked if this would increase the risk of a security breach, since the program will be based on codes that the public can easily access, Lee replied that this was not necessarily so.
"For example, the public key infrastructure (PKI) is pretty well-known and the mathematics [behind the model] are also well-known. But, if you want to crack it, it's difficult because the key generation [code] is still kept private," he explained. "So, you can use public data but safeguard the codes that are critical to secure your application."

7. Continue to learn

Finally, like any other profession, software developers must always continue to learn, pick up new skills and improve.

Engineers can also learn from conducting a post-mortem or an evaluation after a project has been completed, Lee added. "We need to learn from our good and bad [projects], and try and be better the next time, and the next time after that," he said.

Can developers then balance the commercial need to push out applications as quickly as possible with the need to write codes that are clean?

Lee believes they can. "A lot of people say, if they don't have quantity time, at least they have quality. That's not true... You can't have quality time if you don't put in quantity time," he said. "There's commercialisation [in software development] but there's also 'art' and 'good' codes. And you can achieve both."

The 7 Habits of Highly Effective Developers

Passionate

The most brilliant people I've worked with are passionate about what they do. They aren't driven by money and fame and, I say this with tongue in cheek, if they didn't have families to feed, would develop software without compensation. If I had two candidates for a development position, I'd rather hire a less-experienced person with passion than a more experienced person without. If you aren't passionate about software development, find what you are passionate about and follow that path.

Able to Learn, Unlearn and Re-learn
I believe that learning is an extension of passion, and effective developers operate in a continuum of improvement and innovation. They learn from their and others' mistakes and don't apply old solutions to new problems just because they worked before. Effective developers follow technology, but are careful to not let new approaches become solutions looking for a problem.

Balance Principle and Practice

Principle and practice are the Yin and Yang of software development. Effective developers don't design impractical solutions for the sake of principle and don't implement solutions without overarching values. They are willing to compromise based on time, cost, scope and quality constraints, but can also obtain compromise from others based on sound principles.

Keep It Simple Software (KISS)

Effective developers implement the simplest possible thing that will work while not painting themselves into a corner. They don't implement anything more than is needed right now, remaining mindful about what might be needed in the future. Effective developers know that the less moving parts there are, the less likely it will break and favor elegance and simplicity over convoluted cleverness.

If You Don't Know the Answer, Know Someone Who Does

Software developers aren't renown for their social prowess, but some of the most effective developers I know are excellent at networking. If you give a random 100 question test to a group of people, no one individual will score 100%, but collectively, with few exceptions, the group can answer all the questions correctly. There is so much technology, so many areas of speciality, you can only be an expert on one, maybe two subject areas. Effective developers know the limit of their knowledge, aren't afraid to admit when they don't know something and have many friends and colleagues in their network they can reach out to for help.

Focus on Value

Effective developers understand the forces driving the project, its stakeholders and their goals. Using this knowledge to guide their decision making, they focus on delivering tangible value to their customers over anything else. Effective developers prioritize work based on its value--the so called "bang for the buck," and avoid projects and features they don't believe in.

Puts the Needs of the Many Before the Needs of the One

I've seen small teams accomplish extraordinary things; it's amazing what "two guys and a laptop" can accomplish. Call it teamwork or synergy or whatever you like, when a group of people put common goals before their own, they converge like light into a laser beam. Contrast this with the arrogant, rogue and cowboy developers who go against team standards or design intents because "that's how I do it" or "that's how you should do it." The message they are really sending is "I am smarter than the team."

Conclusion

These seven habits give me something to work towards and keep me focused. I only had room for seven habits in this article, and I'm sure you can think of many more or define effective in your own way. The important thing is to take a value-driven approach to your software development career and do intentional things that move you towards your definition of success.

Thursday, June 5, 2008

Learn Yourself Visual Basic.NET

Visual Basic.NET Tutorials

Writing Your First VB.NET Program
Step by step instructions on how to create your first winform or webapp applications using Visual Basic .NET.

Start VB.NET
Great starting VB.NET set for students who want to understand VB.NET! Sections include OOP Basics, Winforms, ADO.NET, Multithreading, and deployment.

Welcome to Visual Basic .NET
If you are new to VB.NET this multi-page tutorial/article gives a great background, history, and overview.

FreeVBCode.com Free VB.NET Sample Code
Pages of VB.NET sample code and VB.NET examples.

VB.NET Example Program
Download and reference Chilkat's VB.NET examples for samples on mail, encryption, and more.

Creating a Windows Service Using VB.NET
Multi-page tutorial with sample code and screen shots.

101 VB.NET Code Samples
Impressive list of code samples from Microsoft. Samples include windows forms, security, web
services, data access, and the .NET framework.

Object-Oriented Capabilities in VB.NET
Creating classes and namespaces in Visual Basic.NET.

DeveloperFusion.com VB.NET Tutorials
Object oriented capabilities in VB.NET, COM Interoperability, Watching Folder Activity, Error Handling, Inheritance, and Polymorphism among other topics.

Tracing, Logging, and Threading in VB.NET
MSDN tutorial covering tracing and logging in VB.NET to help debug and trace out your VB.NET apps. Help with thread synchronization and thread pooling.

About Visual Basic .NET
Introducing VB.NET with links to some sample VB.NET downloads.

VBCity Visual Basic.Net Resources
One of the best VB.Net development sites. Great articles, tutorials and resources.

Implementing Interfaces in VB .NET
Tutorial covers defining and implementing classes and interfaces using Visual Basic.Net.

Free VB.Net Tutorials
Great site for articles/tutorials on Visual Basic .Net and other .Net categories. Tons of helpful articles here covering topics ranging from data access to menus.

VBDotNetHeaven.Com Tutorials
Page chock full of interesting VB.Net tutorials. Many assorted topics are covered including assemblies, GDI+, strings, VB.Net with XML, exception handling and working with the registry.

Devarticles Visual Basic.NET
Nice collection of VB.NET articles and tutorials. String encryption, regular expressions, forms inheritance, deployment, file watching, and many more.

Using Visual Basic .NET
Microsoft's MSDN resource for developing with VB.NET. Areas include getting started, migrating VB 6 apps to VB.NET, building apps, deployment, and distribution.

Getting Started with Visual Basic .NET
Excellent VB.Net tutorial from MSDN academic alliance. Eight part multi-page tutorial. Also includes source code, downloadable project files, and executables.