Monday, December 25, 2000

Developer Career Tip #0029---New kid on the block---Tip #1

Developer Career Tips #0029

New kid on the block---Tip #1

I've written extensively about pursuing and obtaining your first programming job---now let's assume that you've gotten it--what should you do in your first day or days on the job?

I recently received an email from someone who tries to take newly hired programmers under her wing, and she mentioned several important points that new programmers should bear in mind in their first days, weeks and months on the job.

First, come to grips with the fact that even if you're the world's greatest programmer, you just started with the company, and there's a lot about the company's business to learn. For instance, if you've just started with an insurance company, take the time to learn as much as possible about insurance--just getting up to speed on your company's business rules could take you a year or more. Your first day on the job is the time to start learning. The same applies to nearly every industry for which you will work--remember, you don't program Visual Basic, or C or Java--you program applications, and those applications have a business behind them.

Second, try to stretch your horizons, and be willing to take challenges. You may have been hired as a programmer, but in many companies, you're expected to be much more. For instance, if a user calls or visits about a problem logging into the company's network, roll up your sleeves and try to resolve the problem. It's OK to ask someone else for advice, but passing the user off because it's a 'Systems problem" makes you look bad in the eyes of the user and, even works, in the eyes of those you're working with.

Third, obtain a knowledge of the IT environment in which you are working as soon as possible---it will avoid problems down the road. For instance, if you can't understand why it's taking hours to build a Recordset from the company's Oracle Database down the hall, instead of complaining that the tech school from which you graduated had T1 connections, take some time to understand why the network is slow, and see if you can program around it. It could turn out that the problem is that there are a limited number of licenses, or that your program is running while the database is being backed up or maintenance is running.

Monday, December 18, 2000

Developer Career Tip #0028---Job search woes

Developer Career Tips #0028

Job search woes

I received my latest issue of Philly Tech magazine the other day (http://www.philly-tech.com)/. Philly Tech magazine, as the name implies, is a Philadelphia area high tech magazine, and it's a good one. I always start with the letters to the editors section, and for the third consecutive issue, more than half of the letters dealt with graduates of computer schools complaining about their lack of success in finding their first job--despite the promises of a hot job market by their respective computer school.

It's always difficult to determine if the letter writer is representative of the group as a whole, or just a single individual who for whatever reason can't find work.

I teach and mentor quite a few students who wish to break into the programming field---I asked myself---could I be wrong when I tell my students that it is possible for a beginner to obtain a programming position?

I maintain a large mailing list/group on egroups.com, and last week I sent out a request to my members to take a survey I had put together. I asked that only members of my group who had recently obtained employment in the IT field complete the survey. I've posted the results of the survey at:

http://www.johnsmiley.com/yesyoucan.htm

if you'd like to read them---I think you'll find them interesting.

There are several themes conveyed in the survey results, but perhaps none is more important than the respondent's belief that enthusiasm for their work in many cases got them a job. I tend to agree. Right after experience, I think employers are looking for evidence of a real zeal for work.

I remember interviewing a potentially great programmer several years ago. She obviously knew her stuff. Then I asked her to copy her Visual Basic program to a PC in my office so that I could see it run. She told me her 'copy' skills weren't very good--at the computer school she attended, one of the computer technicians did that for the students. That remark--and what it spoke of in regards to her zeal--cost her a job with me. In my small company, I expect programmers to be able to do a little bit of everything, and I don't think this attitude is found only in small companies. Personally, I wondered why someone who professed to desire a career in the IT world wouldn't bother to learn something about the computers for which they wanted to write programs.

As one hiring manager told me recently, she looks for candidates who eat, sleep, and dream IT. Make your prospective employer believe that of you, and you can land your first job.

Monday, December 11, 2000

Developer Career Tip #0027---Starting out in Consulting---Professional Liability Insurance

Developer Career Tips #0027

Starting out in Consulting---Professional Liability Insurance

I've written a few tips on starting out in the consulting field, and in my last tip on the subject I dealt with an issue that can be crucial in determining your success or failure as a consultant---setting your billing rate. Today I'd like to discuss something else that can be just as important if not more so---Professional Liability Insurance.

Think of Professional Liability Insurance as Malpractice Insurance for software developers and consultants. This insurance can provide you coverage in the event that one of your clients brings a claim against you and your work (it can happen.) Professionals such as architects and accountants have used Liability Insurance for years. Recently, software developers and consultants have embraced the protection that Professional Liability Insurance can offer (there's also a subset of Processional Liability Insurance designed specifically for software developers called Errors and Omissions coverage.)

Professional Liability Insurance coverage is not cheap, but the peace of mine it gives you may be well worth it.

I spoke with one associate of mine who told me she picked up a one million dollar Professional Liability policy for about $1,500---and is extremely pleased to know she's insured not only against mistakes she might make, but mistakes her clients believe she's made (obviously, there's a difference, but in a court of law that may not be so clear.)

Another associate of mine, Bob Lautenbach, president of Bayside Technology (http://www.baysidetech.com) points out that not only does Professional Liability Insurance provide you with protection, but in many instances, on prospective jobs he's been asked to bid on as a subcontractor, Professional Liability Insurance was a requirement in order to win the contract. Bob points out that coverage is available through most insurance brokers---but be sure to read the fine print. Like all insurance policies, Professional Liability policies have exceptions and exclusions--make sure you know what they are before committing.

The bottom line is that Professional Liability insurance is a cost of doing business--and you should seriously consider it in your consultant practice.

Monday, December 4, 2000

Developer Career Tip #0026---Getting that first job--use some common sense techniques

Developer Career Tips #0026

Getting that first job--use some common sense techniques

I just finished reading my latest copy of Computer User, and the first letter to the editor is another one of the many I've been seeing lately--a disgruntled student of a fast paced, high tech computer school complaining about their inability to get a job. This individual paid more than $8,000 for tuition, passed all six exams of the MCSE on the first try, and hasn't received a single job offer---and is justifiably disgruntled.

I've got to wonder why someone from an accredited school with obvious technical credentials (although no experience) can't at least get an offer for an entry level position somewhere--but I do have some ideas.

As you probably know, I teach and mentor quite a few students. I've written extensively about the need for a job candidate to have not only good technical skills, but good communication skills as well. And let's add some common sense to the equation also.

Just placing your resume on one of the IT job Web Sites isn't likely to get a beginner with no job experience an offer. There are just too many candidates out there with more experience. You've got to add the personal touch to your package.

I recently had the opportunity to participate in a job selection process, and you'd be amazed at the little things that can tip the scales in your favor--frequently it's the candidate who shows enthusiasm and initiative during the job hiring process that gets the job.

We interviewed ten candidates for an entry level Visual Basic job. All ten had good resumes. At interview time, however, five appeared to be head and shoulders above the others. Why?

Those five brought samples of programs they had written to the interview. Of the remaining group of five, two made great impressions during the interview. The other three, while great coders, had virtually no communication skills whatsoever. Two of them appeared to be painfully shy---making no eye contact, and mumbling their responses. The other one wasn't shy--just the opposite. He chatted incessantly---making us believe that it would be difficult for him (or his team members) to get any meaningful work done in a team environment.

That left us with two excellent candidates to choose from. The selection ultimately went to the candidate who took some time to learn about the company. It probably hadn't taken her long at all (maybe just a quick glance at the company's Web Site), but she came to the interview having read the company's last major press release announcing a new product -and she found a way to make us aware of that knowledge when she asked a question about it. That question--and her enthusiasm---got her the job!

Monday, November 27, 2000

Developer Career Tip #0025---Online Programming Training

Developer Career Tips #0025

Online Programming Training

In my July 20th tip, I discussed online training as a viable alternative to traditional forms of computer training such as taking a class at a Microsoft Certified Technical Education Center (CTEC), computer school or college or university. I won't repeat the plusses and minuses of online training here, but I would like to update you on some of the new courses being offered at the online schools for which I teach. (I want to emphasize that I teach Visual Basic courses for these venues---for a more complete list of available online training, check out SearchVB's weekly spotlight of October 16th, in which it reviewed ten Web Sites for online training.)

I've been teaching Visual Basic courses for over three years at both ElementK and SmartPlanet, and I still believe that instructor-led courses such as these provide the most flexibility and support for those students who want to learn new programming skills. The emphasis at ElementK is towards the experienced IT developer, whereas SmartPlanet is geared more towards the beginner programmer.

SmartPlanet (www.smartplanet.com)
SmartPlanet has been offering Visual Basic programming courses for over four years---however, for the most part they've been introductory level courses. They've recently developed and announced more advanced offerings to include courses on Visual Basic Database programming, Visual Basic Objects, creating ActiveX and API Programming. As someone who's had a part in developing these courses, I can tell you that these courses will go a long way towards preparing you for Microsoft Certification.

ElementK(www.elementk.com)
Like SmartPlanet, ElementK has offered Visual Basic courses for a number of years. For the last six months or so, ElementK has been offering a series of Advanced courses aimed at preparing students for the Microsoft Desktop (70-176) and Distributed (70-175)Visual Basic Exams. In addition, in January, they'll be offering a 3-part course on creating ActiveX/COM Components in Visual Basic.

Monday, November 20, 2000

Developer Career Tip #0024---Microsoft Certification Examinations to be retired

Developer Career Tips #0024

Microsoft Certification Examinations to be retired

I've talked about Microsoft Certification in past tips, and I thought I would take this opportunity to warn you that Microsoft is planning on retiring 18 exams at the end of this year, and included among them is Exam 70-165, Developing Applications with Microsoft Visual Basic 5.0. Of the 18 exams being retired, this one is the only one that I can see which would impact the MCP (Microsoft Certified Profession) or the MCSD (Microsoft Certified Solutions Developer) Certifications.

I'm not sure how many among you have taken the Visual Basic 5 exam, and used it either to give you your MCP (Microsoft Certified Professional) Certification or to form part of the requirements for your MCSD (Microsoft Certified Solutions Developer) Certification, but if you did, you should be aware that unless you take a replacement examination, you will eventually lose your certifications.

For more information about the retired exams, follow this link:

http://www.microsoft.com/trainingandservices/default.asp?PageID=mcp&PageCall=examstoretire&SubSite=examinfo

Now that we have the bad news out of the way, let me give you the good news.

The good news is that there's no immediate danger to your Certifications---you'll have a full year, until December 31, 2001, to take and pass a replacement examination. For a list of examinations that can be used for the MCP and MCSD certifications, follow this link:

http://www.microsoft.com/trainingandservices/default.asp?PageID=mcp&PageCall=requirements&SubSite=cert/mcsd&AnnMenu=mcsd

Monday, November 13, 2000

Developer Career Tip #0023---Behind the scenes with Mark Weiss of ColorQuick.com

Developer Career Tips #0023

Behind the scenes with Mark Weiss of ColorQuick.com

This is the first in a series of periodic 'behind the scenes' looks at companies and individuals using Visual Basic. It's sometimes an 'eye opener' to see how others are actually using Visual Basic in their work.

For this tip, I interviewed Mark Weiss, who is the President of ColorQuick.com, located in Pennsauken. New Jersey. You can visit the company’s Web Site at:

http://www.colorquick.com

Question: What is your job at ColorQuick?
Answer: I'm President of the company. ColorQuick is an intermediary business to business Internet company providing digital workflow technology that allows printers to better service their clients. Using a mixture of proprietary software and off-the-shelf systems, ColorQuick bridges the gap between the marketspace and marketplace. We provide speed, quality and the cost savings associated with a state-of-the-art web-enabled digital workflow.

Question: How does your company use Visual Basic?
Answer: We use Visual Basic as our primary development tool. To date, we have coded a complete Estimating System, as well as automated the production workflow of pre-press operations using a series of Visual Basic applications that monitor jobs, and dynamically pass them from one stage of production to the next.

Question: How did your programming staff learn Visual Basic?
Answer: Most of it is self-taught, along with some college courses on Advanced Visual Basic topics.

Question: Do you use other languages besides Visual Basic?
Answer: Yes, we also use: C, C++, Perl, VBA, Hypertext, AppleScript, PostScript and ASP.

Question: Do you use third-party tools?
Answer: Yes, we buy various tools as they are needed. However, to date, implementation of third party tools has been pretty limited.

Question: What's it like to work at your company?
Answer: This is a broad question. We are under pressure to perform, and get our product out into the market. We really try to work with our folks, and have offsite and flex time situations to better meet employee schedules.

Monday, November 6, 2000

Developer Career Tip #0022---Setting your hourly billing rate--Part 2

Developer Career Tips #0022

Setting your hourly billing rate--Part 2

In my last Developer Career tip, I discussed ways in which an Independent Contractor can go about establishing an hourly billing rate, which concentrated on establishing a rate in concert with those around you. I promised to discuss how to establish your own personal billing rate in this tip--which may be lower or higher than the going market rate.

The first step is to determine the level of 'take home' pay that you can live with each week or month. Of course, this figure will vary from individual to individual, and you may want to use the last job you had as an employee as a starting point. It's important to start out with some figure in mind that you can use for comparison purposes, because as you're about to see, grossing $100,000 a year as a consultant is not the same as grossing $100,000 a year as an employee. Here are the typical deductions for an employee making $100,000…

Salary Figures as an employee..

Gross $100,000
Federal Tax 28% $ 28,000
Social Security 6.2% up to 76,200 $ 4,724
Medicare 1.45% $ 1,450
401K (Employee) 5% (up to 10%) $ 5,000
Health Insurance $300 per month $ 3,600
------------------------------------------------------------------------------------
Total Deductions $ 42,774
Yearly Net $ 57,226
Monthly Net $ 4,769

These figures assume that you are contributing 5% to a 401K Pension plan, that your employer is matching 5%, that you are paying some share of your Health Insurance Premiums, and that you are paying no State or Local Taxes. As you can see, this results in a monthly net income of approximately $4,769.

This picture gets a bit more complicated as an Independent Contractor, as there are more payroll taxes for you to pay. You may not be aware that as an Independent Consultant, you are required to pay BOTH the employee and employer share of Social Security Taxes. I also HIGHLY recommend that you continue to pay into a 401K Plan of your own. When you're an Independent Contractor you can set up a Simplified Employee Pension (SEP), and you can contribute roughly up to 15% of your Gross Income into this tax deferred, tax deductible plan. Here's how that same $100,000 gross salary looks as an Independent Contractor.

Salary Figures as an Independent Contractor..

Gross $100,000
Federal Tax 28% $ 28,000
Social Security (Employee share) 6.2% up to 76,200 $ 4,724
Social Security (Employer share) 6.2% up to 76,200 $ 4,724
Medicare (Employee share) 1.45% $ 1,450
Medicare (Employer share) 1.45% $ 1,450
401K (Employee) 5% $ 5,000
401K (Employer) 5% $ 5,000
Health Insurance* $600 per month $ 7,200
------------------------------------------------------------------------------------
Total Deductions $ 57,549
Yearly Net $ 42,451
Monthly Net $ 3,538

These figures assume that you are contributing both the employee and employer share of Social Security and Medicare Taxes, 10% to a 401K (remember, as an employee you contributed 5% and your employer contributed 5%), and about $600 per month for a group health insurance policy.

As you can see, by joining the Independent Contracting ranks, you are taking a 'hit' of $14,775 in your yearly net pay, or about $1,231 per month. To maintain the same level of 'take home' pay, you would need to 'gross' about $125,000 per year.

How do we then determine an hourly pay rate?

To do that, you next need to determine how many hours per year you'll be working. Let's say in your previous job you took 3 weeks of vacation per year, and used a total of 5 personal and sick days, and also were entitled to 5 paid holidays. That's a total of 25 days off (15 + 5 + 5). In a typical work year there are 260 work days (52 * 5)---with 25 days off, that means you worked 235 days. Assuming you'll need the same amount of time 'off' in your life as an Independent, and that you'll be working, on average, 8 hours per day, multiply 8 hours per day by 235, and you get 1,880 hours. Divide 1880 into $125,00, and the result is $66.48--and there you have your billing rate.

But there's one problem with this scenario.

As an Independent Contractor, you can expect to spend about 25% of your time in non-revenue generating pursuits. For instance, you'll need to keep up with the latest in technology, which may mean taking classes on your own time (and at your own expense.) You may also need to make proposals and presentations to potential clients which may not pan out---and which are not billable (I try to bill for everything, but it's not always possible.). Also, as good as you are, you most likely won't be working all the time. One contract may end at the end of March, another one begin two weeks later in mid-April.

For this reason, you need to assume that of those 1,880 hours you are able to work each year, only 75% of them will be billable--which results in about 1,410 billable hours per year---divide that number into $125,000, and you get a more realistic billing rate of $88.

Now at this point, a lot of newcomers question their ability to command that kind of rate---if the rate you require seems too high to you, what can you do?

First, you can reconsider joining the ranks of the Independent Contractor. Independents, as you have seen here, have good reasons for charging the high rates that they do---and usually have the skill sets to get them. If you don't think your skill set can command the rate you need to make, perhaps this is not a good move for you.

Secondly, you can lower your required 'take home' pay. In my experience, this is not a good idea. Under ordinary circumstances, you wouldn't leave one job and take another at lower pay--why accept that scenario just because you're working on your own.

Thirdly, you can increase the number of hours you're willing to work in a year. Some Independents I know work 14 hour days to increase their billable hours, and in turn, charge a lower hourly rate. Some others give up vacation time in order to increase their billable hours. Again, I don't think this is a great idea. As an Independent, you probably were hoping to improve the quality of your life---taking this approach is a sure way to ruin it.

Finally, you can 'skimp' on the benefits that you are now paying yourself. For instance, you can choose NOT to pay into your own 401K, or perhaps cut back a bit on the amount you contribute. This is a VERY bad idea. Your retirement plan is insurance for your future. Think how you would feel if your employer announced today that they were eliminating your pension plan, or no longer matching your 401K contributions. You'd be up in arms.

The bottom line is to find a billing rate that allows you to live as comfortably as you deem fit--and for most people, that means earning a 'take home' pay that is at least as much as you earn now. If you can't do that as an Independent, then the lifestyle is not for you.

Monday, October 30, 2000

Developer Career Tip #0021---Setting your hourly billing rate

Developer Career Tips #0021

Setting your hourly billing rate

In my September 21st Developer Career Tip entitled "Consulting---Getting Started" I discussed how to get started with Independent Contracting and Consulting work. Let's assume for the moment that you've found someone who wants to hire you--the next major step to take is to determine how much to charge them.

There are many schools of thought on what newcomers to the consulting business should charge their clients.

One theory (to which I do NOT subscribe) is to offer to do the job for a rate that reflects your relative inexperience. While I think it's important to be honest and "up front" with your prospective client about your consulting experience, I think it's a BAD idea to charge a "below market rate" to get your foot in the door. In my opinion, doing so sends a subtle message to your client that, just as your rates are below par, maybe your work is also. If you believe that your skills and services are worthy of selling, then you must also take the tact that they are worthy of being paid for at the market rate.

In some cases, you may not have the option of setting your own rate. In many of my consulting jobs, the client tells me what they are willing to pay for my services. Of course, I'm free to make a counter offer, or even to walk away, but a lot of the 'guess work' is taken away when the client states the rate up front. In actuality, most times I'll accept the rate---most times clients have a strong feel for the current market rate and are willing to pay it for experienced consultants and developers.

On the other hand, suppose the client asks you to name your rate? How then do you establish what to charge your client?

I've seen consultants do this in a number of ways.

One way is to join an association of computer consultants. One such association is the Independent Computer Consultants Association (ICCA).

http://www.icca.org/

Membership in an organization like the ICCA has many benefits, one of which is the ability to ask other members what rates they are charging in your area. You can then use this as the basis for your billing rate.

You can also find out what your competition is charging, and use that as the basis for your own billing rate. I know of a consultant whose husband (and billing manager) on a quarterly basis calls consulting firms in her area to find out what they are charging per hour for contract programming in Visual Basic or Access. This market research can help you establish your own billing rate.

Another way is to perform some mathematical calculations to determine your optimal billing rate. This method, in addition to helping you set your billing rate, also forces you to make some assumptions about the nature of your lifestyle and business as an Independent Contractor or Consultant. For instance, you'll need to answer questions such as: will you be working 40 hours per week, 50, 60 or more? Will you be taking time off for a vacation, if so, how many? Will you be contributing to a Simplified Employee Pension Plan? How much do you hope to 'clear' after taxes?

I'll be illustrating this method in next week's tip.

Monday, October 23, 2000

Developer Career Tip #0020---Before you take a course…

Developer Career Tips #0020

Before you take a course…

I discussed getting up to speed with a new programming language several months ago, and I thought I would follow up on that theme by relating to you the experience an associate of mine had a few weeks ago with a formal training class he took at a Microsoft Certified Technical Education Center (CTEC).

My associate, let's call him "Jim", is a Visual Basic expert, and he had spent some time learning Java on his own. He decided to spend a week in a Java fundamentals class being offered by a CTEC with whom he had taken several enjoyable Visual Basic classes. Jim had always been impressed by the instructors at this CTEC--historically, in addition to teaching the material, they were also senior developers and consultants who were able to bring their real-world experience to the classroom.

For the Java class however, Jim was a bit disappointed. Although the instructor was knowledgeable about the subject matter, he readily admitted that he had no professional Java development experience. This lack of real-world experience became apparent when many of Jim's questions about real-world issues of speed, style and deployment went unanswered. All in all, Jim came out of the class not knowing much more than when he went in. As a professional developer, Jim wanted to come out of the class with some professional tips and guidelines, and that's not what he received. Still, I think Jim got what he deserved.

I chided Jim for failing to heed the 4-step checklist I run through prior to taking any formal classes. For your reference, here it is:

1. Know your expectations. Jim took a Java fundamentals course and he probably should have been in an advanced course. Beginning level courses are more easily staffed by instructors lacking in real world experience.

2. Know your vendor. Jim took a Sun Java course at a Microsoft Certified Technical Education Center. Jim should have asked himself why a CTEC would be offering a Sun Java class to begin with--if he had done some checking, he would have found that the course he attended was the first Sun Java course the CTEC had ever given. Although this fact alone did not cause Jim's disappointment, it was a contributing factor.

3. Know your instructor. You have the right to know in advance who will be teaching the course, and what their background is. Prior to taking any course, call the vendor and ask for the credentials of the instructor. Ask how many times they taught the class. Ask what real-world experience the instructor possesses. If real-world experience is important to you, and the instructor has none, then you can either find another vendor or wait for a class with another instructor.

4. Know the curriculum. In addition to obtaining information about the instructor, ask for a detailed outline of the course. You should also ask if ALL of the material in the outline will be covered (some instructors 'drop' material). You can also ask to examine the course materials ahead of time, and perhaps even sit in on a session of the class for a few hours (if it's a multi-day class, choose a day other than the first day to get a better gauge of the class pace and activity)

Following my checklist is a great way to avoid surprises and to get the value for your training money that you deserve.

Monday, October 16, 2000

Developer Career Tip #0019---Communication skills--don't overlook them

Developer Career Tips #0019

Communication skills--don't overlook them

Success in the Computer field is not just a matter of having solid programming or analysis skills, but also requires good communication skills. Many hopeful programmers downplay the importance of communication skills, but I can assure you that even if you are not the world's greatest programmer, if you foster and hone your communication skills, both verbal and written, there's a good job waiting for you somewhere.

As an example, let me talk about ' Bob'. I was working for an organization that was just beginning to realize the importance of the end user in the Systems Development process (unfortunately, we had just developed several far-from-stellar applications where we had neglected that important piece of the puzzle), and we badly needed to turn our department's reputation around. What we really needed was someone who could sit down with a user, determine and gather their requirements, and do so in a non-threatening manner.

At the time, we had an opening for a programmer, and we had a large number of applicants. A group of us eventually interviewed Bob, and although his resume included work with C and Unix, it was obvious during the interview that Bob's strengths were not in those areas. However, something that came through very strongly in the interview was that Bob's communications skills. Whenever we asked Bob a question, his eyes were attentive and focused on the questioner--and he answered each and every question thoughtfully and completely. At times, Bob would repeat the question before answering--just to clarify that was he was answering was he had been asked. And he frequently sought the opportunity to pose questions of us. We had allocated about a half hour for Bob's interview and we wound up talking to him for over an hour.

A couple of days after the interview, we received a letter from Bob thanking us for the opportunity to interview with the company. Despite the fact that Bob had not taken any written notes during the interview, he amazed us by remembering minute details of the hour long interview (including everyone's name).

Our decision to hire Bob was not a unanimous one---other candidates possessed stronger programming skills, but in the end what got him the job was his ability to communicate better than the other candidates.

Bob's strengths and weaknesses became very obvious in the first few weeks of his employment. His C and Unix skills were weak---and he did become better in those areas. But something he never needed help with was evident the first time he sat down with an end user---he was able to speak with every member of our end user community as if the two of them had been great friends their entire lives.

Bob wound up doing very little programming---in actuality, he spent most of his time performing analysis, determining user requirements, and in end user training and presentations to management.

Shortly after we hired Bob, I asked him what was his secret. Were those great communication skills something he had been born with?

Bob's answer didn't surprise me. He told me that he realized very quickly in his career that if we going to make it in IT, he would need to concentrate on his communication skills. He told me he worked each and every day on his communication skills---making eye contact, listening, really listening, to people, concentrating on what others said, clarifying their statements or questions, and in thoughtful answers and replies. And he told me he practiced writing each day as well.

Four years later, those great communication skills were rewarded when Bob was promoted to Vice President of IT for our company. You need look no further than Bob for proof of the importance of good communication skills in your IT career.

Monday, October 9, 2000

Developer Career Tip #0018---Is it time to learn C#?

Developer Career Tips #0018

Is it time to learn C#?

For those of you not familiar with C#, Microsoft, in June, announced C# as the 'replacement' for J++ in the next version of its Visual Studio Suite, which will be released sometime in 2001.

http://msdn.microsoft.com/vstudio/nextgen/technology/csharpintro.asp

Those of you who read my Careers tip last week in which I discussed Visual Basic and Java salaries may be wondering whether C# is a language that you should learn?

The answer is not a simple one, for a number of reasons.

First, C# has not officially been released yet, and won't be until the next version of Visual Studio is released sometime in 2001. You can download a beta version from the Microsoft Web Site if you wish

http://msdn.microsoft.com/downloads/

and there is some preliminary documentation available from Microsoft as well

http://msdn.microsoft.com/library/default.asp?URL=/library/prelim/csref/vcoriCReference.htm

Second, at this point, there aren't many jobs calling for a knowledge of C#. I maintain a web page devoted to C# at

http://www.johnsmiley.com/csharp/csharp.htm

and if you check out some of the links that maintain job sections, you'll see that there are few jobs asking for a knowledge of C# (not surprising, since the product has not been released yet).

Third, and perhaps most importantly, the importance of the C# language in the grand scheme of things to me is cloudy at best. For instance, is C# a replacement for J++, a replacement for C++, or a possible competitor to Java?

If you read Microsoft's announcement concerning C#, Microsoft plainly states that their intention is to bring Rapid Application Development to the C++ programming community. In light of the advice I give to my students to learn Visual Basic (for its ease of use and marketability) and then, if possible, Java, for its hardware portability, C# just doesn't fit into that picture.

On the other hand, many analysts believe that Microsoft is positioning C# as a competitor to Java---in which case the picture changes a bit. If C# somehow manages to cut into the Java market, then learning C# isn't a bad idea. And being the first person on the block to know a suddenly popular language is a great place to be.

However, I think it's way too early to make that investment of time and energy. Learning C# at this point will be difficult for most people. Your options to learn C# are pretty limited---use the Microsoft documentation to learn the language, or purchase one of the few books on C# available on the market. And if learning this way is not your cup of tea, other options are virtually non-existent--as best as I can tell there are no formal classes on C# being offered.

The bottom line is that you should wait and see what becomes of C#--if it looks like a winner at this time next year, there will still be plenty of time to get up to speed and to enter the potentially lucrative C# programming pool.

Monday, October 2, 2000

Developer Career Tip #0017---Visual Basic Programmer's Journal Salary Survey released…

Developer Career Tips #0017

Visual Basic Programmer's Journal Salary Survey released…

In my opinion, the best Visual Basic publication is the Visual Basic Programmer's Journal. I recommend it highly to my Visual Basic students as a source of great information on Visual Basic development. According to the latest figures released from Magazine Retailer, the Visual Basic Programmer's Journal has the highest paid circulation sales numbers, and is the largest paid magazine in the world devoted to Windows development. Because of this, I place a lot of trust in their bi-annual salary survey, the Fall version of which was recently released. You can view it yourself at:

http://careerlink.devx.com/articles/ss0900/ss0900-1.asp

According to the Fall Survey, Visual Basic developers earn an average base salary of $65,500 per year. Be careful when reader the survey yourself, as the survey factors in extra pay such as bonuses and profit sharing, raising that average to $75,500 in total compensation.

Some highlights of the survey:

Developers in San Francisco and New York earn much more than the average compensation--but bear in mind that the cost of living is much higher there.

Experience pays off. The average salary for developers with less than one year's experience is $43,140--for developer's with 6-8 year's experience is $74,539. That's quite a difference, but if you've been reading my tips, this shouldn't surprise you.

Microsoft Certifications are beginning to carry some weight---Microsoft Certified Professionals (MCP's) and Microsoft Certified Solutions Developers (MCSD's) made substantially more than those without a Certification. Definitely something to consider!

VB skills alone are fine and will pay well--but those developers who marry their VB skills with another hot technology such as Java or XML do much better. In fact, VB Developers who know XML earn about $10,000 more than the average Visual Basic developer.

Not surprisingly (to me anyway), at the top of the pay scale are Independent Consultants. Independent Consulting will be one of several recurring themes of my tips.

In case you're wondering how VB stacks up against Java, here is a link to a first-ever Java Salary Survey by the publishers of Visual Basic Programmer's Journal.

http://careerlink.devx.com/articles/ss0600/ss0600-1.asp

I think the results will bear out what I tell my students---learn Visual Basic, then turn your attention to Java as a second language (and based on the salary survey, it looks like you should add XML to that mix also).

Monday, September 25, 2000

Developer Career Tip #0016 ---Can you afford to take a pay cut to get into IT?

Developer Career Tips #0016

Can you afford to take a pay cut to get into IT?

I just received the latest edition of PhillyTech, a monthly magazine devoted to IT professionals in the Philadelphia area. Its cover story, "Shortage doesn't equal jobs", is at first glance a somewhat depressing look at the up-hill battle to find entry-level positions facing graduates of Computer Tech schools. The article examined the success, and sometimes lack of success, of several recent graduates.

I must say that I wasn't surprised to see the results detailed in the article (You can view it online at http://www.philly-tech.com)/, neither was I particularly depressed with the findings. The schools mentioned in the article are all fine schools, and for the most part, make their money training students with little experience for entry level positions. The graduates mentioned in the article were disappointed in their potential starting salaries.

I guess it's a matter of whether the glass is half filled, or half empty. Graduates of these programs need to be realistic. Getting a promising job with a good company should be their primary goal. The high salaries that they see in IT salary surveys are for workers with several years of experience. When you graduate from one of these programs you need to have one goal in mind---get your foot in the door.

One of the graduates mentioned in the article indicated that, upon graduation, he was offered an entry level position in IT for $22,000. He was currently making about $44,000 in his job at an incinerator and he was unwilling to take a pay cut. He decided to stay with his current job. Needless to say, he was pretty disappointed.

I wish I could have counseled him before he began the training program. I would have told him that most likely he would need to take an initial pay cut to begin his IT career. (Finding an entry level position paying $44,000 isn't very realistic--unless you happen to be a graduate of a 4 year Computer Science program from a prestigious school or university.) I also would have told him that I've seen people who have doubled their salary in two or three years after the initial sacrifice. Unfortunately, taking a pay cut is something that "goes with the territory" of a career change.

By the way, this kind of sacrifice isn't limited to IT. Any time you make a career change this can happen. I remember some years ago a friend of mine working in IT decided to attend Law School at night. Her first job out of law school paid half of what she was making in IT--but it was a sacrifice she knew, up front, she would have to make, and she's very happy she did. Over the years, she's more than made up for the initial cut in pay she took.

The bottom line is that you need to be realistic when making a career change. Be aware that you may need to take a pay cut to get your foot in the door. But once you're in---you may be well on your way to a rewarding, well paying career.

Monday, September 18, 2000

Developer Career Tip #0015---Consulting---getting started

Developer Career Tips #0015

Consulting---getting started

In my September 7th Developer Career Tip entitled "Is Independent Contracting For You", I discussed the pros and cons of becoming an Independent Contractor. I'd like to continue my discussion of Independent Contracting by answering the question I am probably asked most often by those wishing to pursue it--how do I get started. The answer to this question really depends upon how "independent" you really wish to be.

For instance, there are companies in my neck of the woods (the Philadelphia Metropolitan area) who will find you Independent Contracting Work. Essentially, these are work brokers who are paid a fee by the company for whom you eventually work. Some of these companies also offer some useful support services--for instance, finding you a group health insurance plan, investing some of your earnings in a cash management account to provide you with 'paid' vacation and sick days. The problem, if you want to call it that, with these work brokers is that their requirements for work experience may be even more stringent than those of a prospective employer---so if you are trying to get your foot in the door, this is one door you may find nailed shut.

If you have no experience, but plenty of knowledge, what tact should you then take to get started with Independent Contracting?

Forget 'cold calling'--it's just not going to work. The chances of someone hiring you off the street are next to nothing.

Advertising in a local newspaper or the Yellow Pages as a Software Developer is something that some of my associates have tried---but more often than not, the calls they receive are from other developers looking for work, or from vendors trying to sell them office equipment.

Word of mouth and networking is a fair possibility. Let your friends, family and associates know that you are now working on your own--among that group, perhaps one of them knows someone who needs some programming work done.

Personally, I don't advertise, and I've never used a work broker to find me work. Over the years, the best method I've found for finding new work is teaching.

I do a lot of teaching, both within colleges and universities and also in computer training centers. Out of a typical class of 20 students, I typically have one or two students who later contact me to come in and lend their company a hand with the subject matter I'm teaching. In fact, two of the largest contracts I've ever landed were a direct result of my teaching.

You might be saying to yourself that this sounds great, but you don't have a teaching certificate or the prerequisite degree to teach. While it's true that a teaching certificate may be required for elementary or secondary education, and you may need a Masters Degree to teach College Credit course, many colleges and universities now offer Adult Education, Professional Development or Certificate programs in which the requirements for teaching are merely a good knowledge of the subject. In my area, colleges, universities, high schools even my local YMCA are offering courses on program.

The bottom line is if you can get up in front of a group of people and convey your knowledge of a programming topic well enough---you might find one of your students giving you your first big break into the world of Independent Contracting.

Monday, September 11, 2000

Developer Career Tip #0014---Follow up on SetFocus

Developer Career Tips #0014

Follow up on SetFocus

In my August 10th Developer Career Tip entitled "No Experience? No Problem!" I discussed a company called "SetFocus" located in Parsippany, New Jersey, about 45 miles outside of Manhattan. The company advertises that they will provide you with a 13 week intensive Visual Basic training program---in exchange, you agree to work for them for the next 9 months as a paid consultant. It sounds like a great idea--but I cautioned you that I had no personal knowledge of anyone who had gone through their training program, nor had I spoken personally with anyone from the company.

About two days after my tip was published, I received a call from Stacey Landau of SetFocus---several of her students saw the tip. Stacey and I spoke for quite a while, and I was impressed with her obvious dedication to providing outstanding Visual Basic (and now Java) training to individuals looking to get into the marketplace quickly.

Over the course of the last month, I've received several emails from current students and graduates of SetFocus attesting to the quality of the program and their satisfaction with it. One of these emails came from a former student of mine from ZDU---and his resounding endorsement of the SetFocus program means quite a lot.

All of the endorsements carry the same message--the program is demanding and intense. There is plenty of work, and you can expect an assignment every class day with at least one major project due each week. You'll also need to relocate to Parsippany for at least one year. But all of this hard work comes with a reward--at the end of the 13 week program you'll be working as a consultant for a SetFocus corporate client---some of which are located in Manhattan, a hotbed of IT work.

Once again, I think this program is great for those individuals who have IT talent and who are looking to get into the marketplace quickly. If you would like more information, check out their Web Site

http://www.setfocus.com

I'd love to hear more about similar programs---it's hard to believe that SetFocus is the only one of its kind. If you know of any, let me know via email at johnsmiley@johnsmiley.com

Monday, September 4, 2000

Developer Career Tip #0013---Independent Contracting for you?

Developer Career Tips #0013

Is Independent Contracting for you?

Over the course of the last few months, I've been writing tips on developing your programming career--all within the context of working for an employer. A number of readers have written to me and asked me to provide tips for going out on their own---Independent Contracting---and I'll be writing future tips to cover that topic as well.

I thought I would start off with this question: How do you know that Independent Contracting is for you?

Would you like to make more money (sometimes double) for the same services you currently provide to your employer?

Are you a person who likes a variety of challenging jobs?

Would you like to change assignments (and companies) periodically?

Do you have the ability to come into a new situation and pick things up quickly and get along well with those around you?

If you answered 'yes' to one or more of these questions, then Independent Contracting could be for you. Not unexpectedly, Of course, there are some downsides.

Independent Contractors tend to earn more money (sometimes double) for the same services they would provide to an employer, but there are good reasons for that.

As an independent contractor, you'll receive a check with absolutely no taxes withheld---you are responsible for paying Federal and any applicable State and Local taxes on your own, plus you'll also need to pay Social Security Taxes. But unlike the case of an employee, you'll need to pay not only your own share of Social Security Taxes, but the share that an employer would pay on your behalf (one reason that employers like to hire Independents).

Altogether, these tax payments can account for 40% or more of your negotiated contract fee---and for those of you who don't like to be bothered with paperwork, don't discount the time and effort involved in keeping track and making timely payments to the various governmental authorities. Many of my Independent Contractor friends find the task burdensome enough to hire an accountant.

Something else to consider before making the jump to Independent Contracting is the lack of employer benefits. As an Independent, you'll receive no Health Care benefits. Finding a Health Care plan on your own is possible (I'll discuss finding a plan in future tips), but it can be very expensive.

In addition to the lack of Health Care benefits, any time an Independent Contractor takes off for Vacation, Holidays, Sick Time or Personal days means no revenue. Many of my Independent Contractor friends find the thought of taking time off without pay so abhorrent that they go long periods of time without taking a formal vacation--a very bad idea. In addition to no paid time off, there's also no friendly Employer sponsored 401K or pension plan for Independents---if you want to contribute to a 401K or a Pension plan (and you absolutely need to), you'll need to create your own (not a big deal, and I'll cover this in a future tip).

Still, taxes, paperwork, and the lack of benefits aside, the thrill of working for yourself is what drives many Independent Contractors. In future tips, I'll provide guidelines for setting fees that can ensure that you cover all of your expenses---and allow you to take time off without guilt.

Monday, August 28, 2000

Developer Career Tip #0012---Is your College offering the right kinds of courses?

Developer Career Tips #0012

Is your College offering the right kinds of courses?

Recently I received an email from an IT recruiter that was pretty troubling. In it, he decried the lack of real programming experience that college graduates with degrees in Computer Science or related disciplines possess.

About the same time, I was speaking to a friend of mine whose daughter was about to graduate from a well regarded university with a degree in Computer Science, and who had just returned from a trip to visit the Dean of Computer Science at his daughter's university.

During the visit, my friend had expressed strong concern that the Computer Science curriculum at his daughter's university was not adequately preparing her, and other graduates, for the 'real world'. In fact, my friend, who happens to be the Vice President of IT for his company, told the dean that he would have a hard time hiring his own daughter for an entry level position at his company. Why?

First, while his daughter could probably build a microprocessor from scratch, and program in languages such as Fortran, C and C++, the university she attended was slow in developing courses covering the latest and greatest in programming languages and development tools. For instance, Visual Basic, ASP and Java were recent additions to the curriculum, and hard to believe, they were only electives. Incredibly, his daughter hadn't taken courses in any of these hot technologies.

Secondly, due to scheduling requirements at the university, she had completed the Computer Science requirements for her degree in the first two and half years of her college career---as a result, her last programming class had been 18 months prior to graduation, and she had spent the last year and a half of her college career fulfilling general education requirements and electives, not honing her skills with computer related courses. In other words, her IT skills were pretty stale.

What was the Dean's reaction? She apologized for the university's slow introduction of new technologies into the curriculum--and promised to do better in the future. And she promised to look into the scheduling logjam in the Department that would encourage students to complete their Computer Science requirements so early before graduation.

In summary, if you or someone you know is pursuing a computer related degree at a college or university---do some investigative work to ensure the college is quick to react to new technologies, and 'time' your pursuit of these courses as close as possible to graduation.

Monday, August 21, 2000

Developer Career Tip #0011---Skills Assessment on your Resume

Developer Career Tips #0011

Skills Assessment on your Resume

During the last few years, I've had the opportunity to counsel students concerning their resumes. One mistake that I find they make on their resumes (especially those students who don't have a strong paid work background) is that invariably they fail to include every skill they possess on their resume.

For instance, a few weeks ago a student who had just completed my Introductory Java class asked me to look over her resume. I read it over twice, and she obviously sensed something was wrong.

"There's no mention of your Java skills," I pointed out.

She explained to me that she didn't feel it appropriate to include a mention of a skill that consisted only of classroom learning (this in spite of the fact that she was head and shoulders the best student in the class).

I disagreed, pointing out that the mention of any skill on a resume, even a skill that hadn't been fully 'tested' in the workplace, is something that a prospective employer should know about. Let the prospective employer make the decision as to how much weight to place in a 40 hour Java class---who knows, perhaps they have a critical Java need to fill, and your 40 hours is 40 more than anyone else they have right now.

Of course, it's also important not to overstate your skills---classroom skills are not the same as skills learned on the job, and that's why I advise my students to prepare a Skills Assessment Grid as the last page of their resume. With a series of rows and 5 columns, list every computer related skill you possess, and rate it with a grade of between 1 and 5 like this:

1--Classroom/Self Learning
2--Less than 1 year of work-related experience
3--1 to 2 years of work-related experience
4--2 or more years of work-related experience
5--Expert. Possess Certification or have taught the subject matter

You'd be amazed at how quickly a recruiter can 'eyeball' this Skills Assessment Grid, and see exactly what skills you possess. More importantly, it gives you a chance to mention every skill you have---even if they were not necessarily picked up in the workplace.

Monday, August 14, 2000

Developer Career Tip #0010---Work for free?

Developer Career Tips #0010

Work for free?

Lacking in programming experience, and can’t get your foot in the door? Why not take the tact that one of my students recently used---work for free.

Yes, you are reading this correctly. Work for free!

I had been mentoring a Visual Basic student of mine for some time, and when she told me she was going to a job interview that morning, I wished her luck and crossed my fingers. Although a top notch “student” programmer, she had NO real world work experience, and I knew from the sounds of the potential employer (a small VB consulting firm) that she would be expected to hit the ground running on day 1.
In short, I judged her chances of landing a job with them very remote.

You can imagine my surprise when I received a call from her that afternoon and she told me she was starting work Monday morning.

“Well sort of,” she said. “I’ll be working for free for 90 days.”

She explained that to me that it was obvious the interviewer was looking for someone with some experience, and that out of blue, she had offered to work a probationary period of 90 days---to show up for work each and every day as if she was a regular employee---work on some Visual Basic projects, and at the end of 90 days her work would be evaluated, and she would either be hired as a regular employee or told that her ‘volunteer’ services were no longer required. After some consultation with her prospective team members, the interviewer had accepted her offer.

At first I didn’t know what to think, but in giving it some thought, I realized that her situation wasn’t much different than that of the Co-op students from my university who work for my consulting firm for a semester. They receive no pay from me---but in exchange, they received valuable experience plus 3 college credits, and I’m delighted to get highly energetic, anxious to learn ‘employees’ for a few months.

Am I proposing that you offer to work for nothing for a potential employer? Well, it’s a novel approach, and it wouldn’t hurt to ask. I’m very curious what some employers would think of the offer.

And what of my student? What happened at the end of her 90 day period?

It just so happens that her 90 days was up today—about an hour ago I received an excited email from her. She starts work on Monday—this time as a paid employee!

Monday, August 7, 2000

Developer Career Tip #0009---Sorry, no experience, we can't hire you (well, maybe not…)

Developer Career Tips #0009

Sorry, no experience, we can't hire you (well, maybe not…)

I get a lot of emails from students and readers of my books lamenting the fact that so many employers are reluctant to hire a prospective programmer without any real world experience. All they're really asking for is a chance to prove their worth.

One them of my articles to date has been how to get your foot in the door---we've talked about the importance of taking and passing the Visual Basic Desktop Examination to get the attention of job recruiters. In a past article, I discussed volunteering your programming services to gain some experience that you can quite rightfully place on your resume.

During the last year, several people have brought to my attention a company which seems to bridge the experience gap, and I think the company merits mention here.

SetFocus, with headquarters in Parsippany, New Jersey, about 45 miles outside of Manhattan, advertises that they will provide you with a 13 week intensive Visual Basic training program---in exchange, you agree to work for them for the next 9 months as a paid consultant. That's right--a PAID consultant. Sounds like a great deal, doesn't it?

If you check out their website

http://www.setfocus.com

you'll see that although SetFocus prefers candidates with prior programming experience, this experience can be in the form of self-study--in other words, if the totality of your Visual Basic experience is from books, SetFocus will seriously consider you for acceptance into their program.

SetFocus claims that only one out of every fifty applicants is accepted into the program--and if accepted, you will need to relocate to Parsippany (or thereabouts) for your training period and consulting assignment. But if you are looking to break into the highly lucrative field of Visual Basic programming, this could the opportunity for you.

And now a word of caution.

I don't know anyone who has gone through the SetFocus training program, and I have not spoken personally with anyone from the company.

Not surprisingly, the SetFocus web site is full of glowing recommendations and press reviews. However, as with any other major life decision, do your research, ask for references---both current and past students of SetFocus, and employers who have used their consulting services--before packing your bags.

Monday, July 31, 2000

Programming Tips & Tricks #0008---Visual Basic Command Line Arguments

Programming Tips & Tricks #0008

Visual Basic Command Line Arguments

I recently received an email from a reader who wanted to know if its possible to run a Visual Basic executable program with command line arguments. The answer is yes, although this feature is not as robust as it is with executables compiled with other languages such as C.

What's a command line argument, you might ask?

Let me give you an example. Suppose you want to execute a program whose main form obtains its caption from an argument supplied by the user when the program is executed.

You can take advantage of Visual Basic's Command function, which returns a value equal to the argument supplied after the name of the Visual Basic executable. For instance, if the name of your executable is Test.exe, if you type this value into the Windows Start-Run dialog

Test.exe VB

and enter this code into the Load Event Procedure of the Startup Form

Private Sub Form_Load()

If Command <> "" Then
Form1.Caption = Command
End If

End Sub

when your form appears, "VB" will appear in the form's caption. Notice that we first check to see if the return value of the Command function is equal to an empty string, which will be the case if the user executes your program with no arguments.

Invariably, the next question that is asked is whether you can supply more than one argument to the executable. Other languages, such as C, populate multiple command line arguments separated by spaces into an argument array that is available to the program when it executes.

In Visual Basic, however, everything that appears after the name of the executable is considered a single string argument. Separating multiple arguments with commas, quotation marks, or other delimiters won't affect that--everything after the executable name is considered a single string argument and is returned as a single string from the Command Function.

For instance, typing this statement into the Start-Run Dialog Box

Test.exe I,love,VB

results in the form's caption being set to "I,love,VB".

However, with a little imagination and some string manipulation, it isn't difficult to come up with a workaround to this restriction.

Developer Career Tip #0008---How to get that elusive first programming job with no experience

Developer Career Tips #0008

How to get that elusive first programming job with no experience

I'm forever being asked by my Visual Basic students how to obtain a Visual Basic programming position in today's job market, when you have no 'paid' Visual Basic experience.

I still insist that there are three sure-fire ways to obtain a Visual Basic programming position (at least a junior level position).

The first is to write a fantastic application based on something you know, and showcase that program at your interview. I had a student in a class a few semesters ago who showed me a Visual Basic program he wrote to keep track of the golf handicaps in his weekend golf league. The program was fabulous, and not only did he land a job with it, he's made quite a bit of money marketing it to other golf leagues in our area.

A second way is to volunteer your programming services---choose a charitable or non-profit organization who may be interested in your free services in exchange for the experience it can bring. Several of my students have written programs for their churches---another wrote a program for a local soup kitchen. You'd be amazed at how demanding a 'real' client can be, even one who ultimately isn't paying cash for the product. But the experience is unbeatable--and it's perfectly legitimate to include a non-paid job like this on your resume---even better if the customer is well pleased and will provide a great reference to a prospective employer.

The final way is to take and pass one of the Microsoft Visual Basic Certification exams---start with the VB6 Desktop Exam. Those of you who have been following my tips know that I'm a big believer in using the exams as a way to get your foot in the door. Hiring managers continue to tell me that passing the exam is a great way to get noticed and interviewed---even if you have no experience.

Monday, July 24, 2000

Programming Tips & Tricks #0007---Global Keyboard Handler in Visual Basic

Tips & Tricks #0007

Global Keyboard Handler in Visual Basic

One of the questions that I am frequently asked is how to implement Keystroke validation in a Visual Basic Textbox. The answer is that you can insert code into the KeyPress Event Procedure of a Textbox--and implement Keystroke validation that way. For instance, this code will ensure that only numbers are entered into a Textbox---it also permits the user to press enter a BackSpace key in case they make a mistake.

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 8 Then Exit Sub '8 is Backspace

If KeyAscii <> 57 Then 'Range of numeric values
KeyAscii = 0
End If

End Sub

Entering code into the KeyPress Event Procedure of a Textbox is fine for one or two Textboxes---but If you have a large number of Textboxes on your form, this is not an enviable task. In that case, you have two alternatives:

First, you can make each Textbox a member of a Textbox Control Array, in which case each Textbox 'shares' the same KeyPress Event Procedure. Sharing code like that is the chief benefit of a Control Array.

The second alternative is to set up a Form Level or Global Keyboard Handler by telling Visual Basic that you want the Form's KeyPress Event Procedure to be triggered BEFORE the individual Textbox KeyPress Event Procedures.

You do this by setting the KeyPreview Property of the Form to True. This will cause the KeyPress Event Procedure of the Form to be triggered whenever a keystroke is made for any of the Textboxes on the form. What that means is that you can take the code you write for each Textbox KeyPress Event on your form--and place it in just one place---the KeyPress Event Procedure of the Form.

Monday, July 17, 2000

Developer Career Tip #0007---Interview the Interviewer

Developer Career Tips #0007

Interview the Interviewer

In my last article, I talked about the importance of asking a question (or more) during a job interview to let the interviewer know that you are capable of more than just answering questions and that you have a genuine interest in the company.

Don't allow the interview to become a one-way piece of communication where the interviewer learns everything necessary to make a decision as to whether or not you are what the company needs and wants, but you learn nothing about the company to make the same decision. Too many job candidates find themselves interviewing for a programming position, receiving an offer and then finding themselves in a position they don't like.

How can you avoid this?

Be prepared to get the answers to the questions you'll have the first day or first week of your new job---you don't want to wait until then to find out.

I'm not talking about fundamental questions such as salary, work hours, vacation time and other benefits---these are likely to be part of a standard package provided to you prior to the interview.

I'm talking about questions such as:

What type of work will I be doing?
Will I be programming?
If so, will it be new development, or maintenance of existing code?
If code maintenance, is the original author still with the company?
What language or languages will I be writing?
Will I be working as part of a team?
If so, what are the skill levels of my team members?
How many years with the company do my team members have?
Who will be my supervisor?
How many years with the company does he or she have?

While these are questions to which you can easily obtain answers on your first day on the job, by then it may be too late--particularly if you've left a previous position to obtain that long awaited developer's job, only to find out you'll be manning a Help Desk for the next 6 months until the company signs a big contract.

Of course, you may not be in a position to be picky---if you are a candidate just trying to get your foot in the door, any job offer may be a good one.

Next time: An innovative approach to getting your foot in the door

Monday, July 10, 2000

Programming Tips & Tricks #0006---Named Visual Basic Arguments

Tips & Tricks #0006

Named Visual Basic Arguments

One of the themes I emphasize in my computer classes over and over again is the importance of writing code that is readable---that is, code that other programmers and developers will be able to understand, and if necessary, easily modify in the future. Some obvious ways to write readable code include the use of program comments in your code---no matter what the language you are using to develop your program, all major languages provide for comments. Something else that can make your Visual Basic more readable is the user of Named Arguments.

Let me illustrate by executing the Visual Basic MsgBox Function to display a Windows Message Box. The Visual Basic MsgBox function has one required argument (Prompt), and four optional arguments (Buttons, Title, HelpFile and Context).

MsgBox “I love Visual Basic”

By default, this code will display a Message Box with a single command button captioned OK, with the text “I love Visual Basic”, and the Visual Basic Project name displayed in the Title Bar of the Message Box.

Suppose I’m not happy with the default Title in the Message Box, and I decide I want to customize it. Doing this is easy—all I need to do is supply the Title argument to the MsgBox function. However, since Title is the third argument, I either need to supply the second argument---Buttons, which is by default presumed to be the value vbOKOnly---or provide a ‘comma placeholder’, like this.

MsgBox “I love Visual Basic”,, “SearchVB.Com”

Notice the two commas back-to-back, with no value in-between. This is the ‘comma placeholder’ and is how we tell VB that although we have a value for the third argument, we have no explicit value for the second argument.

When we execute this code, we’ll see a Message Box that reads “I love Visual Basic”, and that has “SearchVB.Com” for its Title Bar.

Named Arguments can make passing optional arguments easier—and make your code infinitely easier to read and modify. For instance, the code we wrote above can be re-written to this using Named Arguments.

MsgBox Prompt:="I love Visual Basic", Title:="SearchVB.Com"

With Named Arguments, we specify the name of the argument, followed by a colon and equals sign (:=), then the value for the argument. By using Named Arguments, we don’t need to provide a ‘comma placeholder’ for the second argument Buttons. Since we are naming the argument, VB knows that ‘SearchVB.Com’ is the value for the Optional Argument ‘Title’. And since we name the arguments, being able to read and understand the code in the future is much easier.

Monday, July 3, 2000

Developer Career Tip #0006---Interview Tip #1---Be sure to ask a question!

Developer Career Tips #0006

Interview Tip #1---Be sure to ask a question!

I'm frequently asked, by my readers and students strategies for answering questions during a job interview. There's no doubt that your ability to 'show your stuff' during a job interview is crucial to landing a programming job.

I'll be covering strategies for answering questions in future articles, but today I want to discuss what I think plagues more job candidates than any other single issue--failing to ask a question during the interview.

Not only do I teach and write books, I also own my own consulting firm, and although I do most of my own work, on occasion I do hire someone to help out during busy periods---usually from a pool of candidate students provided to me by my University's Co-Operative Education program.

These students are highly recommended by the Chairman of the Computer Science Department, extremely motivated, and choosing among two or three candidates can be very difficult.

So how do I make my choice?

That's easy---I pick the candidate who asks me the best questions!

Asks questions? Isn't it the interviewer who should be asking the questions, not the job candidate?

Many job seekers are of the mistaken impression that the role of the candidate is to answer questions during the interview. From the interviewer's perspective, however, you can't imagine the poor image that is conveyed of a job candidate who sits through the interview, and politely (and quite skillfully) answers each and every question, and then when asked if they have any questions, simply say 'no' as if they are anxious to leave!

Taking the time to ask a question or two during the interview shows the interviewer that you are enthusiastic and genuinely interested in the position and the company, and that you can not only answer questions posed of you but that you can initiate and carry on a conversation (a skill that is crucial when talking with end users). In short, taking the time to ask a question or two can land you the job!

Another benefit is that it gives you the chance to seek clarification on the job itself, the types of duties that will be required of you, and to learn more about the company and the people with whom you will work. These are questions to which you want answers before you show up for work the first day.

Next time: Questions to ask before saying "Yes, I'll take the job"

Monday, June 26, 2000

Programming Tips & Tricks #0005---With...EndWith in VB

Tips & Tricks #0005

In my consulting practice, I frequently see examples of Visual Basic code that could be improved upon, either from a readability point of view or from an efficiency point of view. Today I'd like to discuss a relatively new Visual Basic construct that can improve both the readability and efficiency of your code---and save you quite a few keystrokes in the process. That construct is the With…End With statement.

The With…End With statement allows you to 'bundle' Property and Method calls to a single object within the With…End With block. For instance, here's some code that sets the properties of a Command Button, and then executes its Move Method.

Private Sub Form_Load()
Command1.Caption = "OK"
Command1.Visible = True
Command1.Top = 200
Command1.Left = 5000
Command1.Enabled = True
Command1.Move 1000,1000
End Sub

By using the With…End With statement, we can eliminate quite a few programmer keystrokes, and make the code a bit more readable in the process---like this…

Private Sub Form_Load()
With Command1
.Caption = "OK"
.Visible = True
.Top = 200
.Left = 5000
.Enabled = True
.Move 1000,1000
End With
End Sub

Not only have we reduced the number of keystrokes in the procedure, but using the With…End With construct produces more efficient code.

Each reference to an object's property or method requires a Registry 'look up' to execute the code statement---by using the With…End With statement, VB is able to 'pool' this lookup into a single Input Output operation---thereby making your program run faster.

The bottom line---whenever you find yourself coding multiple operations against an Object, use the With…End With statement.

Monday, June 19, 2000

Developer Career Tip #0005---Learning Visual Basic---Part 3

Developer Career Tip #0005

Learning Visual Basic---Part 3

In my last two articles, I dealt with ways to learn a new programming language, including taking official Microsoft Curriculum courses at a Microsoft Certified Technical Education Center (CTEC), long term training at a computer programming school or institute, or enrolling in a course at a local colleges or university. All of these options have one thing in common: you need to be present at a predetermined time and place for a specific duration in a classroom led by an instructor. In today's article, I want to discuss an interesting alternative to classroom based training---web based learning.

I've taught programming for 20 years, and up until three years ago, all of it had been via the traditional route of instructor led classroom training. When I was initially approached to teach a web based programming course in Visual Basic (I teach for SmartPlanet and ElementK), I must confess I had my doubts, but within two weeks of beginning the course, I was amazed that not only could web based learning be just as good as traditional classroom based training, but in many ways it was far superior.

From a student's perspective, web based training can solve a myriad of logistical problems. Most web based training is message board based---which means that there's no formal meeting time. Students log in, obtain the week's assignment (usually a reading assignment), and then use the message board to ask questions, and check back later for answers.

For students whose work or personal commitments prevent them from traveling to formal classroom training, web based training permits them to sign into the 'classroom' whenever their schedules permit. Also, many web based programs are self paced, which means you can speed up or slow down the pace of your learning as your schedule demands. And for some students, perhaps the greatest benefit of web based training is that it's typically a fraction of the cost of formal classroom training.

From an instructor's point of view, I was amazed how web based training solved some of the problems I see in my traditional classes. For instance, since there is no formal lecture mode via the Internet, a higher percentage of students actually read the assigned material, since they can't rely on picking up the material in a lecture period. Secondly, since questions and answers are posted publicly on the message board, just about everybody in the class obtains the benefit of the questions that are posed and the answers that I give. Unfortunately, in a traditional classroom setting, students do not always pay attention to the questions others pose, nor listen to the answers.

Monday, June 12, 2000

Programming Tips & Tricks #0004---Printing the contents of your VB project

Tips & Tricks #0004

I recently received an email from a reader who wanted to print the contents of his Visual Basic project to a file.

For those of you not familiar with this Print feature of Visual Basic, you can print an image of any or all of the forms in your Visual Basic project, plus the code in those forms, to a printer for documentation purposes.

In addition to printing directly to a printer, you can also route the print to a text file---either for archive purposes or for subsequent printing.

The problem is that when my reader tried to view the output file using his Notepad Editor, he reported seeing strange characters at the top of the document, and when he printed the file from within Notepad, the results were far from satisfactory.

What causes this is that when he directed the print output to a file, his Windows default printer was set to a high tech model (either a laser or an ink jet printer). The strange characters included in the document were printer control characters that Windows inserted into the file---the same characters that Windows would have sent to the default printer to ensure that the document printed properly..

Fortunately, the fix is easy.

To produce a file that can then be opened cleanly in an editor such as Notepad, you must first install a Generic-Text Only Printer driver on your system (You can do this by Adding a Generic-Text Only Printer via the Windows Print Manager), and then selecting this Printer as the target printer in the VB Printer Dialog Box.

The result is that your output file will contain only text---no special Printer Control Characters.

Monday, June 5, 2000

Developer Career Tip #0004---Learning Visual Basic---Part 2

Developer Career Tips #0004

Learning Visual Basic---Part 2

This is a continuation of my previous article, in which I answered the question, how to learn a new programming language. In that article, I stated that the answer to that question depends on many factors: Do you already know a programming language? How much time do you have to learn one? How do you learn best?

Last time, I described CTEC's (Certified Technical Education Centers), and pointed out these may not be everyone--in fact, they may be a good choice if you already know the programming language you are there to learn!

Are there other alternatives?

Yes, there are plenty.

For instance, there are computer schools that, with programs of varying lengths, turn out graduates that are employable to some degree or other. In my area, schools such as the Computer Learning Center and the Chubb Institute have programs that range from 3 months to a year and teach a variety of programming languages and PC skills. The advantage of a program like this is that you are spending a lot of quality time learning the language. When you are finished, you know it well. The disadvantages are time and cost. You might spend 3 full months, 8 hours or so per day, 5 days per week, learning the language. If you are already employed, this is not a viable alternative, although most of these schools do offer evening hours. Another disadvantage is cost---these schools are not cheap.

A quicker, cheaper alternative are the Professional Development or Certificate programs that many College and Universities are now offering. I teach in such a program myself, and I think they're ideal. For instance, my Visual Basic course meets one time per week, 3 hours per session, for 10 weeks. The amount of classroom time is just about the same as a CTEC, but spaced out more. This permits the students to learn more on their own, spending time in between meetings reading the textbook (and it's an excellent one), doing exercises, and working on a class project.

This one time per week session is less encompassing than a Computer School--but it's also cheaper, and is a good choice for those already employed.

Next time---Online learning alternatives

Monday, May 29, 2000

Programming Tips & Tricks #0003---Changing Control names in VB6

Tips & Tricks #0003

Have you ever wished you had named a Visual Basic control by another name—or come across a project where the original programmer accepted all of the default control names—such as Command1, List1, Text1, etc.

Changing the name of a control is easy---you just need to open up the Properties Window for that control and change the Name property. However, what happens to the code associated with that control won’t make you happy!

The code seems to disappear---in actuality, any event procedure associated with the originally named control is relegated to the General Declarations Section of the form. As a result, when you run your program, that code is never executed.

So how do you “get the code back”?

The code hasn’t really gone away---all you need to do is find the event procedure in the General Declarations Section of the form—and then change the “control name” portion of the Procedure header to the new name of the control.

For instance, if you had this code in the Click Event procedure of a Command Button named Command1…

Private Sub Command1_Click()

Msgbox “I love VB”

End Sub

and then renamed the control to cmdOK---VB ‘moves’ this code to the General Declarations Section of the Form.

All you need to do is modify the procedure so that it looks like this…

Private Sub cmdOK_Click()

Msgbox “I love VB”

End Sub

Now, VB will once again associate this code with the command button---and when you run your program, the code will execute---just like before.

By the way, some of my fellow programmers rename their event procedures prior to changing the name of the control. Either way, the effect is still the same---the code will be associated with the newly named control.

Monday, May 22, 2000

Developer Career Tip #0003---Learning Visual Basic---Part 1

Developer Career Tip #0003

Learning Visual Basic---Part 1

I'm often asked my opinion as to the best way to learn a new programming language.

The answer to that question depends on many factors: Do you already know a programming language? How much time do you have to learn one? How do you learn best?

Are you one of those people who learn best in an instructor-led classroom environment? Can you read a good book or books on a programming language and learn that way? Can you benefit from an online learning experience, where you can take advantage of an instructor or mentor who can answer questions if and when you have them?

In this article, I'm going to examine the classroom environment, and in future weeks I'll be discussing self learning and online learning.

As far as classroom instruction, one alternative is to take a Visual Basic course at a Microsoft Certified Technical Education Center (CTEC).
(For more information on Microsoft Certified Training, check out this web site: http://www.microsoft.com/train_cert/)

There are two main advantages to taking a course at a CTEC.

First, you are assured of taking a course developed by Microsoft and part of the Microsoft Official Curriculum (MOC). MOC courses can only be taught by a Microsoft Certified Trainer (MCT), who must be certified in the subject matter he or she is teaching, and must demonstrate the instructional skills necessary to deliver the material. Secondly, these courses do a good job of preparing you to take the corresponding Microsoft Certification Exam in that subject.

However, there are also disadvantages to the CTEC alternative..

First, the courses are expensive. For instance, you can expect to pay approximately $2000 for a week long Visual Basic course. Secondly, the courses are geared toward computer professionals---so if you are a raw beginner, the material is likely to be over your head. Finally, the courses themselves are very intense, even for someone who has a programming background. For a Visual Basic course, you can expect to be in the classroom 7 hours per day for a solid week---and that can make learning difficult.

Next time---classroom alternatives to the CTEC..

Monday, May 15, 2000

Programming Tips & Tricks #0002---Enforcing Variable Declaration in your VB program

Tips & Tricks #0002

In a previous article, I mentioned the importance of enforcing Variable Declaration in your Visual Basic program by ensuring that ‘Option Explicit’ is coded in the General Declarations Section of each module in your project.

Most high level programming languages force the developer to explicitly declare a variable before using it. Visual Basic is a notable exception. In fact, by default, VB’s installation leaves the Visual Basic environment in a state where variable declaration is NOT required.

After installing Visual Basic, immediately select Tools-Options and check ON

Require Variable Declaration

Selecting this option causes Visual Basic to insert this statement

Option Explicit

into the General Declarations Section of each module in your project. The result is that an attempt to refer to a variable in code without first declaring it results in a compiler error.

What’s the big deal, you might ask? Is there really a harm in leaving this option checked off? Suppose you use a variable in code that you haven't declared? Visual Basic is a programmer friendly language—won’t VB take care of it?

The answer is yes---VB will take care of it---but the price of a mistake on your part can be huge.

For instance, suppose you assign a value to a variable called sngUnitPrice like this…

sngUnitPrice = 13.48

and then later in your code you attempt to refer to this variable in a calculation, but accidentally refer to it by an incorrect name, for instance sngUnitCost (yes, it can happen!)

sngTotalPrice = sngUnitCost * m_intQuantity

You're expecting the program to come up with a valid price--instead, the result will be zero, since the value of the incorrectly named variable sngUnitCost is zero!

When you tell VB to enforce variable declaration, errors like this are caught at compile time---potentially preventing disastrous results form occurring.

Monday, May 8, 2000

Developer Career Tip #0002---Solidifying your Visual Basic interview—take your code with you

Developer Career Tip #0002

Solidifying your Visual Basic interview—take your code with you

About a year ago, a student of mine (let’s call him “Jim”) was called in to be interviewed for an entry level Visual Basic programming position for a major corporation in the Philadelphia area.

While a programming dynamo in the classroom, Jim had no real-world programming experience—and he told me that as the interview progressed, he felt that prospects for an offer were getting dimmer and dimmer. Although he answered effectively all of the questions the interviewer posed to him, he felt that he was getting nowhere in convincing the interviewer that he was right for the job.

Just as Jim believed the interview was about to wrap up, he was asked him if there was anything else he wanted to say. Jim calmly reached into his shirt pocket, pulled out a diskette containing a copy of the Visual Basic project he had turned into me for his class project, and handed it to the interviewer.

The interviewer popped the diskette into his PC, fired up Visual Basic, and for the next half hour, Jim and the interviewer discussed the project. Jim told me that he presented a ten minute overview of the project, and spent the next 20 minutes or so answering questions about the project. The interviewer seemed impressed with the project, and about a week later, Jim was offered the job.

Now don’t let me give you the wrong impression here—Jim’s project, while excellent, was hardly commercial grade. It was a very good project that earned him an ‘A’ in my class---but it was just that, a very good student project.

What Jim and I are both convinced got him the job was not so much the quality of the project—but the fact that he was able to discuss it, explain it, and critique it intelligently and enthusiastically with the interviewer for a full half hour.

That half hour discussion allowed the interviewer to see beyond Jim’s lack of professional programming experience---and realize that in Jim he had found an intelligent, highly effective communicator who could be an excellent team player---valuable skills in today’s job market.

Saturday, May 6, 2000

Developer Career Tip #0001---Clarifying Microsoft’s Certified Solution Developer Certification

Developer Career Tip #0001

Clarifying Microsoft’s Certified Solution Developer Certification

Recently I received an email from a reader seeking a clarification on Microsoft’s Certified Solution Developer Certification. In it, she asked if it’s possible to achieve the MCSD by concentrating only on Visual Basic.

If you’re considering getting Microsoft’s Certified Solution Developer Certification, you might be happy to know that it is possible to achieve this certified developer status by concentrating only on Visual Basic.

To become a Microsoft Certified Solution Developer (MCSD), you must pass three core examinations: Desktop Development exam, a Distributed Development exam, and Solution Architecture exam. You must also pass an elective examination.

For the Solution Architecture Examination, you have no choice---you must take the grueling Analyzing Requirements and Defining Solution Architectures (70-100).
Within Desktop and Distributed development, there are a variety of ‘tracks’ that you can pursue: Visual Basic, Visual C++ and Visual Fox Pro. If you intend to pursue the VB ‘track’, you can take the Visual Basic 6 Desktop Examination (70-176) and the Visual Basic 6 Distributed Examination (70-175) to fulfill your three core examination requirements.

As for the elective examination, there are about twenty or so to choose from, including the Visual Basic 5 exam.

Yes, that’s right, Visual Basic 5. Visual Basic 5 is still a supported Microsoft package, and I work with many companies that are still using it. The Developing Applications with Microsoft Visual Basic 5.0 (70-165) examination is available to take as an elective---and if you are like many Visual Basic programmers who have been using it for many years, you may find this examination to be a piece of cake.

Many MCSD candidates are under the mistaken impression that once you have taken two Visual Basic exams you cannot take another Visual Basic exam to fulfil your elective requirement. This is incorrect. In fact, if you check out the Microsoft Certification Web Page, they even have an example of how you can achieve the MCSD exactly as I’ve described here.

http://microsoft.com/mcp/certstep/mcsdfaq.htm

Friday, April 28, 2000

Programming Tips & Tricks #0001---Working with someone else’s code

Tips & Tricks

Working with someone else’s code

The scenario (all too familiar):
You have a new job, and your first programming assignment is to modify a Visual Basic program that was written by another programmer who has left the company. The program is hard to follow. It has no comments, all of the variables are haphazardly named, and all the forms and controls were left with their default names, such as Form1, Form2, Command1, Option1, etc. You’re overwhelmed.

This is not an unusual feeling. In fact, you can feel the same way about your own code a year or so after writing it. So I emphasize these precautionary measures to ensure easy comprehension by others:

1. Option Explicit is coded in all of your modules (this ensures that Visual Basic enforces that all variables are declared before using them)
2. All variables and controls are named using a formal naming convention (i.e. Hungarian Notation)---this makes modifying the program somewhere down the road much easier
3. Code that is repetitive in nature is consolidated into procedures and called from within the program
4. Every module has comments describing its major functions and features
5. Code that is anything out of the ordinary is also commented

Sounds great, but how do these ‘rules’ help you modify someone else’s code? Unfortunately, I’m suggesting you correct the mistakes of the past.

Of course, before you do this, you need to get your supervisor or project leader to ‘buy into’ that plan. Obviously, if he or she is expecting the program modification to be made in about an hour, so taking a week to clean the code and make the modification won’t make you a hit in the Employee cafeteria.

However, I can almost assure you this won’t be the last time this program is modified. Biting the bullet now and cleaning it up will make things much easier on the next junior programmer who finds himself in the uncomfortable position of modifying this code.

Once you have the go-ahead to proceed, the first thing to do is to ensure that Option Explicit is coded in the General Declarations Section of every module in the program. -- if it’s not, add it manually -- and then run the program. Guess what? The program no longer runs. Why?

Coding Option Explicit will cause VB to mark, as a syntax error, every instance of a variable that hasn’t been declared---potentially lethal errors in a program. At this point, you need to identify the variables that haven’t been declared, and explicitly declare them, with a defined type (i.e. Integer, String, Date). While you’re at it, this wouldn’t be a bad time to rename variables using either Hungarian Naming Convention, or a naming convention in use at your company. Using Visual Basic’s Search and Replace features can make this task a lot easier than it sounds.

With all of the variables properly declared and named properly, now is a good time to name those forms and controls in a meaningful way. Keep in mind that when you change the name of a control, the code associated with it can appear to be ‘lost,’ finding its way into the General Declarations Section. To avoid this, first rename any event procedures associated with the control manually with the new name of the control—then bring up the Properties Window for the control and change its Name property there.

At this point, make sure the program runs okay. You’ll find you now have an understanding of how the program works -- so much so, that you should be able to identify code that can be centralized in a subprocedure or function. Along the way, insert comments in your code explaining what’s going on. Write those custom procedures and place them in either a Form Module or a Standard Module (every Visual Basic program I write has one).

Now, with the Visual Basic program nicely sanitized, it’s time to code that simple modification you’ve been asked to make. Hopefully it will be a piece of cake.

Saturday, March 4, 2000

Fan Mail---March 4, 2000

Just received a very nice piece of fan mail about my books in which the author describes the 'novel' approach of my book

I would just like to say that I enjoy your books on Visual Basic. I have two and am going to buy another soon.

These are the first programming books that I have ever read that aren't extremely boring.

The book is more like an interesting novel because of the way you do the dialogue instead of just spitting out pages and pages of boring, hard-to-follow facts.

I bought the first book in the series about beginning Visual Basic so that I could learn Visual Basic and get a summer job doing programming. I am not even done with the first book, but I still bought the book on objects in Visual Basic.

I used to program in Q-Basic back in the ancient days of un-user-friendly DOS and a year ago, I made an attempt at learning Visual C++, but I now know more in Visual Basic than in both Q-Basic andVisual C++.

Thanks!

Danny