Learn the 10 Most Important Technologies

Introduction

When we told our readers what technologies they needed to learn, they told us: "Easier said than done." While that's true, there is an approach to learning that can make it easier. With the right attitude and some essential resources, you'll be on your way-slowly but surely.

By A. Russell Jones, Executive Editor, DevX

Source
How to Learn the 10 Most Important Technologies*

I recently wrote an editorial in which I listed my personal picks for the 10 most important technologies for developers to know. At the end of that editorial, I asked readers for their input: What did I miss? Where would readers place the technologies in relative importance?

I received a lot of e-mail in response to that editorial, but surprisingly few respondents wanted to debate my choices; instead, many notes simply asked, "How do I learn all those things?".

We've decided to respond with two approaches. There's a huge amount of information available, but it's not arranged very well for learning, so Associate Editor Erin Gannon has compiled a great list of existing articles and resources, broken down by technology, and in some cases, by aptitude.

 

The 10 Technologies That Will Help You Stay Employed

  1. XML
  2. Web Services
  3. Object-Oriented Programming
  4. Java*, C++*, C#*, and VB.NET*
  5. JavaScript*
  6. Regular Expressions
  7. Design Patterns
  8. Flash MX*
  9. Linux* and Windows*
  10. SQL*

While this directs you to some specific resources for learning, it's only part of the solution–where to find learning materials, not how to absorb them. The how is more problematic. How do you acquire the energy, time, and focus necessary to learn a new technology? How can you approach the learning process so that you end up mastering the topic rather than giving up in frustration? How can you know whether the effort you put forth will be worthwhile?

Unfortunately, there's no step-by-step procedure that will let you absorb new technology easily. For that matter, there's no technique that helps you learn anything easily–and there's nothing special about learning technology that makes it different from learning other skills. For example, most adults who try to learn to play the piano fail because they want to play like Mozart. When they're unable to achieve that level relatively quickly, they get frustrated and quit. In contrast, children learn to play the piano because they have low expectations: They're happy to be able to make the sounds, and they're ecstatic when they learn something new. In other words, they succeed because of their low expectations, not in spite course, having a parent who nags them to practice doesn't hurt either. (I doubt your mother nags you to learn new technology, though.)

But even absent that motivation, you can simplify the process of learning new technologies if you approach them the right way. So, even though I don't have the answers, I have a number of suggestions that may help.

 

 

Choose a Problem - A Small Problem

One common mistake people make when approaching a new technology is that they tend to focus on the technology itself. That's completely backward, and makes the process tedious. Instead, the first step is to pick a problem. Want to learn XML? Pick a problem that you think might require XML, and then learn enough XML to solve it. Want to learn XSLT? Think of the types of documents that you might want to transform, and then figure out how to do it. Want to learn Java? Rewrite something you've already written in another language. Want to learn SQL? Design a database, and then figure out what SQL commands you need to retrieve data and update the values.

When you select a problem first, you have a reason to learn the technology, and whatever you learn, you can apply it immediately. In contrast, if you set out to learn the technology first, you won't have any way to apply it immediately; it will seem abstract and complex, and you'll forget it very quickly. Why? Because there's no good measure of success for "learning a technology." How will you know when you've succeeded? The real goal is not to learn a technology, it's to learn how to apply a technology to solve problems.

Make sure your problem is small. When asked to choose a problem, people often immediately pick their current task at work. But that's usually far too complicated. Pick a simple problem-there are thousands to choose from. Simplicity is the key; even very simple problems can be difficult when you're completely unfamiliar with a technology.

The best problems for new technologies are usually ones you've already solved with technology you know. You want to focus on solving the problem with a specific technology, not worry about the complexities of the problem itself. So make sure your problem is both familiar to you and non-critical. When you're doing it right, it will rarely take you more than a couple of days to reach a successful conclusion. If you find your problems usually take longer than that to solve, pick simpler problems.

For each problem, your goal is to be able to reach a successful conclusion as quickly as possible so that you can focus on the next problem. Eventually, you'll be so comfortable with the tool or technology and you'll have solved so many simple problems that you'll be able to write more complex applications naturally.

 

 

Success Breeds Success

The more you succeed in learning new technology, the more likely you'll be to succeed the next time. If you find yourself failing, take a step back and bite off a smaller chunk-or work on something else for a while. Sometimes, after you back off from a subject for a while and then return to it, you'll find that you've learned something during that hiatus. At the very least, you can approach the problem afresh.

 

 

Don't Copy

I can't count the number of times I've seen people look for code they can copy. They install some sample application, make a few changes, and feel they've learned something. Well, they probably have-they've learned how to alter an existing application. But that's not the same thing as knowing how to write the application from scratch. Trying out and altering code samples is fine, but only if you then go back and recreate the functionality on your own. Pick something similar, but not identical to the sample. Use the sample code for reference and hints, but not as a template. You don't really know the technology until you can write the code yourself.

 

 

Practice

This is by far the most important learning characteristic. When you finish one project, start another. It takes most people many repetitions before they truly know something. How many times have you finished an application knowing that if you could have written it again, it would be better? Well, now's your chance. If you're playing to learn, you're perfectly free to start over and do it better. And you should.

Many people equate practice with repetition, but that's incorrect. Repetition is only one aspect of practice. If repetition were the only factor, then mindless repetition would create masters. Repetition, by itself, is almost useless; to make it practice, you must combine it with analysis. When you practice, you have to watch yourself, become aware of how, what, and why you're doing things a certain way. Practice involves a willingness to change and take chances. You can only improve if you are willing to change and know where the boundaries for failure occur. It involves self-criticism. You have to be willing to tell yourself that you're not measuring up to your own standards. And yes, it involves repetition. You won't attain perfection the first time, nor the tenth time, nor (usually) the hundredth time-but if you get that far, you'll be a lot closer.

 

 

Read, Experiment, and Ask Questions

Don't rely exclusively on your friends, peers, or instructors to give you the information you need to learn. The information you need is widely available through newsgroups, Listserve* applications, articles, and books. Keeping up often requires you to spend a little money as well as time. So what if that programming book costs $30 or $40? If it helps you learn something, it's money well spent.

Don't expect to get everything you need from a single source-there's no such thing as a perfect resource. And don't expect to understand everything you read right away. It's easy to become intimidated because new technologies often arrive with their own unique terminology: Schema, nodes, DOM trees, streams, objects, methods, procedures, properties, classes, functions, subroutines, arrays, overloading, namespaces, polymorphism, classpath, keyframes, movies, actors, to name a few. Terms acquire meaning through familiarity.

Read the documentation, and don't complain constantly about how the documentation is unreadable. It is what it is-a reference. Others learn, somehow. Figure out what they did and do that. Don't rely exclusively on what you read either. R Try it out. See what happens. You will usually learn far more from building a test application yourself than from finding a solution in a book or newsgroup.

With that said, newsgroups are valuable tools. One of the first things you should do when approaching a new technology is to subscribe to the appropriate newsgroups and Listserve* applications and simply read them. You may not understand all, or even much, of what's there, but you'll remember bits and pieces of the simpler questions, and you'll learn things to avoid.

It's best to exhaust your own imagination before appealing to others for help, but sometimes asking a question is the right thing to do. Before you ask, search to see if your question has already been answered. As a beginner, you have a huge advantage. Any question you're likely to have is equally likely to have been asked-and answered-many times.

At any given time, 50 percent or more of the people using a technology are beginners, so once you've gotten over the hump of the learning curve, don't stop participating in newsgroups. Others will appreciate the time you spend helping them, plus, the process of answering questions and writing articles is often humbling-there's no better way to find out how much you don't know than to try to write it down.

Here again is the list of my picks for top technologies and the resource lists we've compiled on each technology. Pick one technology, one (small) problem, and start practicing today.

 

 

About the Author & Additional Resources on the 10 Technologies

A. Russell Jones is the Executive Editor of DevX. Reach him at rjones@devx.com.

#1: XML
Learning XML requires a basic understanding of the Web, HTML, and Web scripting languages such as JavaScript or VBScript*. Many of the following articles were written around the time that XML first started to make a splash in the development world. But the information is still valid. Start with the fundamentals and move down the list to more sophisticated concepts.

Beginner:
Project Cool's XML QuickStart
An Introduction to XML for Java Programmers
XML: Code Format of the Future?
Intermediate:
Mozilla's Potpourri of Rendered XML
Multilingual Web Pages with ASP and XML
Take Advantage of XML Using VB and ASP
Advanced:
Compressing XML Part I, Writing WBXML
Compressing XML Part II, Server-Side WBXML
Serve Business Graphics from Any XML Source
Implement a One-Stop Authentication Web Service with .NET
Build an XML Based Scheduling Utility
XHTML:
Convert XML Documents into Different Formats with the XSL Template Language
Convert a Text File to XML
Take a Lesson from a Class Act
Transform Your Data With XSL
Generate PDF Files Dynamically Using XSL-FO
Shrinking Code with the XML Parser
DTDs and XML Schema:
Generating XML From ADO Record Sets
Applying XML Schema to XML Documents
The Tao of Recursion: Named Templates in XSLT
Co ed-Width Text Records to XML
Convert Schemas to Documents
XPath & XQuery:
Introduction to XQuery (A Four-Part Series)
Integrating XML into ASP.NET Web Sites
Classes:
DevX eLearning: Introduction to XML 1.0, Second Edition
DevX eLearningL: XML 1.0 Series, Second Edition
DevX eLearning:Technical Web Development Package
Introduction to XML
Good Links:
W3C.org
O'Reilly XML.com
XML.org
The Cover Pages
W3Schools: XML Tutorial
Discussion Groups:
DevX XML General Discussion Group
MSDN: XML Core
The Cover Pages: SGML/XML Discussion Groups and Mailing Lists
Top XML Online Discussions
Books:
Learning XML, by Erik T. Ray.
Get the Basics on "XHTML," by Chuck Musciano and Bill Kennedy.

#2: Web Services
Learning how to use Web services takes for granted a solid foundation in XML, mainly because the attendant technologies used in Web services are XML-based (such as SOAP and WDDI). Most of these articles focus on Web services implementations either in Java or .NET.

Beginner:
What Are Web Services? Building Web Services with .NET
Start Writing Web Services Today (Java)
Special Report: Winning with Web Services (Java)
Converting Web Pages into XML Data Sources
Web Services and UDDI: The New Wave of E-Business Renaissance
Closing the Loop in Web Services
Intermediate:
Applying Design Issues and Patterns in Web Services
Manage State in Web Services
Advanced:
Orchestrate Web Services with BizTalk Server 2002
Cross Language Barriers with SOAP and a Java Web Service
Web Application Security-The Next Evolution
Managed Security for Your Web Services
Classes:
Introduction to ASP.NET
Building Web Services with ASP.NET
XML Web Services One Conferences 2003
Good Links:
W3C.org
Macromedia Designer & Developer Center: Web Services
MSDN: Web Services Center Home
Sun Microsystems: Web Services Resource Center
O'Reilly XML.com: A Web Services Primer
Discussion Groups:
DevX java.web.services Discussion Group
DevX dotnet.web.services Discussion Group
Book:
Web Services Essentials, by Ethan Cerami.

#3: Object-Oriented Programming
OOP is not language specific, but as with most things, it is easier to learn while using concrete examples. For this reason, you may want to first pick a language from the four names in the following section. After making the leap to OOP in one language, you'll find it's relatively easy to transfer the basic principles of your knowledge to any other OOP language.

Basic Principles:
Object-Oriented Programming Concepts


Other Articles:
Choosing specific OOP articles is nearly impossible-either the articles were written with OOP languages, or they weren't. Probably the best track you can take is to follow through on your current choice of language, and look in the appropriate DevX area for the language you're working with. You'll find links to the zones in the Good Links section, below. But here are a few that might help you get started.
.NET* (C#*, VB.NET*)
Using Abstract Classes in Visual Basic.NET
Visual Basic .NET: A Punch of a Tool
Take Advantage of Streams and Formatters in VB.NET
Using Abstract Classes in Visual Basic.NET
Learning C# and OOP: Getting Started, Objects and Encapsulation
Java*
Getting Started With Java
Implement Persistent Objects with Java Serialization
Ten Java Maxims From Bruce Eckel
The Proper Way to Do Exception Handling
Roll Your Own Swing-Based XML Editor (A Three-Part Series)
Java Data Objects: Standard, Simplified Access to Persistent Data
C++* How to Use <fstream> Classes for File I/O
Exception Handling
How to Create Persistent Objects
Implementing the Singleton Design Pattern
JavaScript*
JavaScript Object Orientation
Build an Object-Oriented Tree Control using JavaScript
Creating Classy Menus with JavaScript
Generate Tabbed Interfaces Automatically with JavaScript OOP
Encapsulate Your JavaScript: Keep Private Methods Private
Classes:
OOPSLA 2003
Introduction to Object-Oriented Programming and UML
Principles of OOP I
Good Links:
DevX .NET Zone
DevX Java Zone
DevX C++ Zone
Object Management Group
Java Tutorial: Object-Oriented Programming Concepts
GNA Academy: Introduction to Object-Oriented Programming Using C++
Discussion Groups:
DevX design.architecture Discussion Group
DevX vb.oop Discussion Group
Book:Object-Oriented Methods: Principles and Practice (3rd Edition), by Ian Graham.

#4: Java, C++, C#, and VB.NET
Becoming familiar with basics each of these languages goes a long way to ensuring well-rounded development capabilities. While one language may seem more daunting than another, we think these four languages are not only integral to application and Web development today but will continue to be in the years to come. Rather obviously, as all these are OOP languages, the articles in the OOP section also apply. But here are some articles that you may not have seen.

Java: Beginner:
Reinventing the Art of Creating Command-line Java Apps
Boost Efficiency with a Performance-tuned Debugging Strategy
10 Java Maxims
The Proper Way to Do Exception Handling
Master Font Manipulation in Java An Introduction to Network Programming in Java
Intermediate:
Track Performance of Distributed Systems
Create BitInputStream and BitOutputStream Classes
An Introduction to Java Thread Programming
Using Object-Oriented abases: A Step-by-Step Tutorial
Advanced:
Multithreading in C++ and Java
Classes:
Sun Training Distance Learning, Online Courses and Certification
O'Reilly Learning Lab: Learn Java
Technical Web Development Package
Good Links:
java.sum.com: The Source for Java Technology
Java Boutique
Java World
Discussion Groups:
DevX java.getting.started Discussion Group
Book:
Java Programming: From the Beginning, by K.N. King

C++ Beginner:
Tips, Tutorials and Information for C/C++ Programming
C++ Language Tutorial
Intermediate:
How to Generate C++ Class Template Definitions
How to Create Persistent Objects
How to Use <fstream> Classes for File I/O
Integrate COM Components
Enhance C++ Classes With Database Support
Access Raw Data with Performance Counters in Visual C++
Advanced:
Using String-Based Data Validation
Overloading Operator + the Right Way
Multithreading in C++ and Java
Cross Language Barriers with SOAP and a Java Web Service
Classes:
DevX eLearning: Technical General Package
Introduction to C++ Programming
Good Links:
C/C++ Users Journal
The C++ Programming Language
Discussion Groups:
DevX c++.getting.started Discussion Group
Book:
C++ Primer Plus (4th Edition), by Stephen Prata.

C#:
C#: Why Do We Need Another Language?
Get Productive With C#
Clear Common C# Hurdles
Dealing with DllImport (Part 1 of 2)
Dealing with DllImport, (Part 2 of 2)
Get Started with Multithreading in .NET
Classes:
Introduction to C#
C# Series
Introduction to C# Programming for the Microsoft .NET Platform
Good Links:
MSDN Microsoft Visual C#.NET Home Page
C# Corner
C# Introduction and Overview
C# Station
Master #
Discussion Groups:
DevX csharp.general Discussion Group
Book:
Learning C#, by Jesse Liberty.

VB.NET*: Beginner:
Visual Basic.NET from Top to Bottom
Manipulate Strings Faster in VB.NET
Work with Objects in .NET
Whip Forms into Shape
Add Multithreading to Your VB.NET Applications
Use Visual Inheritance to Speed UI Development with VS.NET
Get Started with Multithreading in .NET
Intermediate:
Smack the Santa: Creating a Game in VB.NET
Advanced:
Creating Windows Services in .NET
Using Abstract Classes in Visual Basic.NET
Classes:
VB.NET Application Development
Introduction to ASP.NET
Microsoft Training and Certification: Courses for Microsoft .NET
Visual Studio .NET: Introduction
Good Links:
Microsoft.com .NET Home
DevX Microsoft .NET Summit Days
DevX AppDev .NET Developer Workshop
Dotnet Zone
Planet Source Code .NET Tutorials
Discussion Groups:
DevX vb.dotnet.technical Newsgroup
DevX vb.dotnet.discussion Discussion Group
Book:
Programming Microsoft Visual Basic.NET, by Francesco Balena.

#5: JavaScript Our QuickStarts and 10-Minute Solutions should help you get a painless jumpstart on your foray into JavaScript. There are lots of short tutorials here that will teach you to accomplish very small, specific tasks, putting you on the right track to succeed and build on your successes.

Beginner:

JavaScript QuickStart
The JavaScript Developer Zone
Get a Nifty Dropdown Menu Effect
Create a Drop-down List that Takes Users to URLs
Fill a Select List with JavaScript
Create a Text-based Toolbar with a Cool Roll-over Effect
Give Your Users Form-field Feedback
Validate the Credit Card Field on Your E-Commerce Site
Verify the Format of an E-Mail Address Entry
Easily Move Items Between Lists
Determine Time Using JavaScript's Date Object
Intermediate:
Display a Rotating Text Billboard on Your Site
JavaScript Object Orientation
Creating Classy Menus with JavaScript
Encapsulate Your JavaScript: Keep Private Methods Private
Create a Web-based Slideshow
Essential JavaScript: 8 Cross-browser Solutions
Advanced:
Build an Object-Oriented Tree Control Using JavaScript
Pop Goes the Menu
Generate Tabbed Interfaces Automatically with JavaScript OOP
Integrating News Feeds
Classes:
Introduction to JavaScript for New Programmers
Introduction to JavaScript for Programmers
JavaScript: Enhancing Web Pages
Fundamentals of JavaScript
Good Links:
JavaScript.com
JavaScript Kit
The JavaScript Weenie
Discussion Groups:
DevX web.dhtml.scripting Discussion Group
DevX web.design Discussion Group
Book:
Javascript: A Beginner's Guide, by John Pollock.

#6: Regular Expressions
While regular expressions are most commonly used for text manipulation, such as searching and search-and-replace, they can also be used to test for certain conditions in a text file or data stream. The usefulness of this functionality-especially as it pertains to Web service development-is fairly obvious. These articles cover the basics.

Articles:

Advanced String Handling with Regular Expressions
Mastering Regular Expressions
Using Regular Expressions
A Tao of Regular Expressions< /> Regular Expression HOWTO
IBM DeveloperWorks Regular Expressions Tutorial (free, but requires registration)
Book:Mastering Regular Expressions, by Jeffrey E.F. Friedl.

#7: Design Patterns
Using design patterns again assumes a thorough knowledge of an OOP language as well as OOP principles. This is another situation where you might want to acquire a book or two. Don't be overwhelmed by the number of design patters there are to learn; pick one that makes sense to you, and just concentrate on that one pattern, for now. Once you've learned one, you'll learn the others more quickly. But remember: With design patterns, it's important to understand the types of situation that each pattern addresses. Don't try to learn the pattern and then figure out what it's used for. Know what problem you want to solve first and figure out which pattern might help.

Articles:

How to Write Software Just Once
Implementing the Singleton Design Pattern
Synchronize Data Among Objects with the Publish/Subscribe Design Pattern
Coordinate User Interface Development with VB.NET and the MVC Pattern
Writing Advanced .NET Remoting Client (using the Factory pattern)
Programming with Class: Avoid Writing Tedious, Boring Code
Newsgroups:
DevX design.architecture Discussion Group
Book:
Design Patterns, by Erich Gamma, et. al.

#8: Flash MX*
You'll find it far easier to familiarize yourself with Flash MX if you already know how to use Flash. If you don't, don't worry. There are plenty of resources available for those starting at step one. The Flash MX development environment even comes with its own built-in contextual tutorials, which are pretty good. Macromedia frequently offers in-person half-day and full-day courses in major cities.

Articles:

Basic Concepts of Macromedia Flash MX
Coding Flash: Creating Movies with ActionScript
Coding for a Time-based Medium
Is this Flash a Little Brighter?
Flash MX Is a Big Step Forward
Drive your Flash Front-Ends with SOAP
Tutorial: Learning to Draw in Macromedia Flash MX
Tutorial: Learning to Animate in Macromedia Flash MX
Classes:
Technical Web Development Package Introduction to Macromedia Flash MX
Flash MX Developer Bootcamp
Macromedia eLearning CenterOnline Training
Good Links:
Macromedia eLearning Tutorials
DevX Macromedia MX Application Center
DevX web.design Discussion Group
Book:
Flash MX Bible, by Robert Reinhardt and Snow Dowd.

#9: Linux* and Windows*
The evangelical nature of Linux makes it easy for newbies to get by. We've listed a few Web sites here to help you while you're learning, but there are scads more. And the good news is that everything's free!

Conversely, because Windows is so ubiquitous, there's information everywhere-the real trouble lies in deciding which aspect of Windows you want to know about and finding information that is up-to-date and accurate. We've included a basic Windows API tutorial as well as a few links to e material, but this topic is simply too broad to provide any real focus.

Again, we're not saying you need to become an OS guru, just that you understand the basic principles of each environment.

Linux: Articles:

Linux Now Tutorial: Introduction
Get Your Toes Wet with Open Source
How to Get Linux on Your Corporate Desktop
The Wild, Wild World of Linux Desktops
Classes:
Linux.org: Linux Lessons
DevX eLearning: Technical General Package
Groovyweb Tutorials: Linux Tutorials
Good Links:
Linux.org
LINUXWORLD
Fresh Meat.net
Linuxnewbie.org
Linux Frequently Asked Questions with Answers
Newsgroups:
DevX open.source.general Discussion Group
DevX linux.general Discussion Group
Book:
A Practical Guide to Linux, by Mark G. Sobell.

Windows: Articles:
Windows 2000: The Overview
Windows API Tutorials
Windows Scripting Host
Confirming Users
NT File Attributes
Windows Get Help
Classes:
Free Online Microsoft Windows Course and Tutorials
Learnthat.com: Basic Windows Tutorials
DevX eLearning: Technical Microsoft Package
Good Links:
Windows Developer Network
CEWindows.NET
Discussion Groups:
DevX enterprise.windowsnt.backoffice Discussion Group
DevX windows.development Discussion Group
Yahoo Groups windowsce-dev
Book:
Windows Programming Programmer's Notebook, by Mario Giannini and Jim Keogh.

#10: SQL*
Most enterprise applications today use databases to keep track of their content. SQL is supported by every modern relational database, so learning how to use it means you can apply your knowledge to MS Access, SQL Server, Oracle, and DB2, to name just a few. While each database vendor has its own proprietary flavor of SQL, all support most of the basic SQL standard features.

Articles:

Make SQL Server Respond to an ORDER BY Clause
Using SQL's EXISTS Predicate to Identify Missing Data
Understanding and Calculating Dates
Going Off the Beaten DB Path
MySQL: A Lot More Going for It Than No Price Tag
Leveraging SQL Server's XML Features
Customize XML Data with SQL Server
Access SQLXML Technology from .NET Apps
Use New SQL Server Datatypes
Use SQL Server Triggers to Track Unauthorized Database Changes
Get Your SQL Server Questions Answered
Tune Up SQL Server Performance
Use New SQL Server Datatypes
Search Databases the .NET Way
DB2 Explains Itself: A Roadmap to Faster Query Runtime
Mastering Top-N and OLAP Queries in DB2
DB2: Tame Beastly Data with Summary Tables
Concurrency Handling in Oracle: Preventing Locked Data
Oracle Basics: Querying an Oracle Database
Performing Top-N Queries in Oracle
Finding and Eliminating Duplicate Data
Classes:
DevX eLearning: Technical Microsoft Package
Basic SQL Tutorial
Free Online SQL Course and Tutorials
Good Links:
Microsoft SQL Server Home
SQL Server Magazine
SQLServerCentral.com
A Gentle Introduction to SQL
Discussion Groups:
DevX enterprise.sql Discussion Group
Book:
A Visual Introduction to SQL, by David Chappell and J. Harvey Trimble.

 

 

For more complete information about compiler optimizations, see our Optimization Notice.

4 comments

Top
anonymous's picture

This is really good stuff.

So often, I think "if only I knew what I didn't know, then I could Google it."
This is a heads up on a few questions I didn't know....and now I do.

As for the references not being linked. It's not a problem..Look them up.

I've bookmarked this site for future use!

anonymous's picture

not worth leaving a comment...

anonymous's picture

Very good content

anonymous's picture

Why aren't the titles on this page linked to the source? This is the silliest resource I've seen in a long time.

Add a Comment

Have a technical question? Visit our forums. Have site or software product issues? Contact support.