LevSelector.com New York
home > Job Search Tips

Job Search Tips

* intro
* sell yourself to get a job
* how to make your phone ring
* perl script to extract ads
*perl script to extract emails
* perl script to merge lists
* Perl script to purge lists (extract only emails which are new)

 
Intro home - top of the page -

I recommend to buy and read/listen to those books:
  -  What Color Is Your Parachute? A Practical Manual for Job-Hunters & Career-Changers - by Richard Nelson Bolles
  - How I Raised Myself from Failure to Success in Selling - by Frank Bettger
  - Asher's Bible of Executive Resumes and How to Write Them - by Donald Asher

Also:
  - High-Efficiency Selling : How Superior Salespeople Get That Way [ABRIDGED] - by Stephan Schiffman (Reader)
  - 101 Great Answers to the Toughest Interview Questions [ABRIDGED] by Ronald W. Fry (Reader), Ron Fry
  - Salary Negotiation/Cassettes - How to Make $1000 a Minute by Jack Chapman

There are many more books and tapes. Search them out and read/listen.
I have some stuff on my web site:
  - http://www.LevSelector.com/job_search.html
  - http://www.LevSelector.com/job_tips.html
  - http://www.LevSelector.com/job_resume.html
  - http://www.LevSelector.com/job_interview_questions.html
   etc.

Here are examples of resumes of real programmers:
   - http://www.LevSelector.com/TedG_2001.doc - 90 KB Word document
   - http://www.jserv.com/jk_orr/resume/
   - http://www.jayson.net/resume.shtml
   - http://www.LevSelector.com/resume.html

Note how they are structured:
- Summary section positions the person as senior expreienced developer in key technologies with financial experience
- Skills section is large
- Job descriptions start with short summary (again - focus on technologies used)


 
Sell yourself to get a job home - top of the page -

Success in getting a job is not based on your professional skills - but on your knack in selling.
You have to organize the selling process. We should talk more about it.

But the basic idea is simple.  Think about a table with 5 columns with phone numbers you should be calling.
 
Col 1
new leads
Col 2
discuss your resume & the market
Col 3
discuss specific places
Col 4
1st interview
Col 5
2nd interview
1 - - - -
2 - - - -
etc. - - - -

1st column - prospecting new leads (mostly recruiters)
2nd column - calling to discuss the resume and if they may have something for you
3rd column - calling to discuss specific places they will send your resume to
4th column - 1st interview
5th column - 2nd interview


You start with filling the 1st column with ~100..200 phone numbers.
Then (only after you have at least 100 numbers) you start calling.

At the end of each call should be to schedule the next call. Never let them escape with "we will call you when we will have something for you".  Instead tell them "I will call you in 2 days if I will not hear from you by then". Initiative should be always on your side.

Your goal is to move quickly through the list finding those who has something for you. Some entries will be removed completely. Others you will put into "call in 2 weeks", or "call in a month" schedule.

Moving through first 3 columns is easy, but you will lose a lot of entries between columns 3 & 4, becase most of the agents don't have jobs.
So in order to get something in col.4 - you have to have enough entries in col.1. Here is an illustration:
 
 
1 2 3 4 5
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x

The number of the entries in col.1 necessary (on average) to produce an entry in col.5 will depend on the market.  During good times it was ~50 (as sown).  During tough times it may easily rise to 200 and more. It also greatly depends on how well you are suited to the requirements of the market, of course.

Important:
  do prospecting (columns 1,2,3) EVERY DAY. Even when you have some good stuff in columns 4 & 5.
Important:
  increase number of records in column 1 every day. You start with 200 - but then it should grow.

Common mistakes:
 - thinking that sending 20 resume is enough.
 - stopping doing prospecting ( column 1)
 - thinking that agents will call you back when they have something.

Truth:
  Agencies are filled-up with resumes.
For example, I tried to make an estimate of how many people lost their programming jobs in New York City recently. I came to ~ 10,000 people. The real number is probably higher. All these programmers have emailed their resumes to agencies. So imagine an agent who has a stack of 10,000 resumes. If each resume is just 2 pages - it is 20,000 pages. You need 40 standard packs of printing paper (500 sheets each) to print this out. If you put the one on another - it will stack higher than you.

So how the agent will pick out your resume from others?  The truth is, the agent will not pick you unless you do something special:
  - position yourself differently from others somehow: make a web site, write a book, publish an article, send them a colored business card with your photo, meet personally and bring a cake, color your hairs in red - I don't know. Just do something to sink in their memory.
  - contact them regularly to make sure that they remember you.
 

ALSO IMPORTANT:
  Always ask agents what market wants right now (what technologies and qualifications are in demand). You will have to change your positionning according to the taste of the market.
 

In short - getting a job is not about qualifications - it is about selling.
Which consist of several main parts:
  - finding what skills the market wants
  - positionning yourself as a specialist matching the hunger of the market
  - organizing the process of selling (table with 5 columns)
  - improving your personal selling skills (interview)

 
How to make your telephone ring home - top of the page -

How to make your telephone ring.

For example, if you are in New York - go to the web site of the central newspaper (for New York it will be the NY Times
  - http://www.nytimes.com/), and go to classified ads - there should be a search engine.
 
For example:
      - http://www.nytimes.com/yr/mo/day/jobmarket/ - goto Keyword Search and enter "html" or other keyword(s)

( or try this - http://www.nytimes.com/classified/ -  go to help wanted )
        - http://nyt.boston.com/hw/
              - select "All" Job categories
              - enter:   programm,html,javascript,perl     (or whatever your words) into keywords input field
   - http://www.nytimes.com/auth/login?URI=http://www.nytimes.com/classified/
 
Enter key words (something like html  or programm* AND Internet AND ...  or separated by commas - see help)
Search will return usually 150..300 ads (usually by 10-25-40 per page).
Copy/paste them into MS word, save as MSDOS TXT into a file with the name "s.txt".

Then use the perl script below (put it in the same directory as the "s.txt").
This script reads this file and extracts lines with emails into the file "d.txt".
You will have to edit d.txt (clean it, remove duplicates).

Then start sending new email - something like this:

TO: yourself1
BCC: copy from d.txt + yourself2
Subject: a programmer is available for interviews immediately
Dear Sir or Madam,
I am a programmer looking for a job in New York City.
I am available for interviews immediately.
My resume is attached below.
Please contact me to set-up an appointment to discuss what you can do for me.
Regards

When sending this message make sure that you put all emails in BCC section so that each recepient will see only his address and will not get the whole list (whic may be a page long).
Also include your 2nd email to the end of the BCC list.  If you receive it - this means that it was sent to everybody.

After you send this email, your telephone will start to ring.

When agents will call you - try to set up an appointment with them.  Personal meetings.  Don't try to do everything on the phone.  Meetings with agents will be a perfect training preparing you for real interviews with future employers.

It makes sense to repeat email broadcast once every 1-2 weeks.

I don't think you will ever need to send your resume via fax.
You can use email instead.
You can also make a web site and simply point people to it.


 
Perl script to extract ads one-by-one home - top of the page -

Some newspapers don't show you many ads on one page.  Instead they give you links to those ads, so you can only see the ads one at a time.  So how you can extract the texts of the ads all at once?

Here is a simple fast and dirty hack which I used for a friend.  I connected to New York Times web site and made a search for the word "HTML".  The links to matching ads were shown on 3 pages.  I took links to those 3 pages and copied them into the text of this script (array @addresses).  Then I ran this script. The script goes to those 3 pages, finds links to individual ads, follows those links, extracts the text of the ads - and writes into a text file. Everything (browser and perl) was running on the same computer (Windows) at the same time.
 
 
use LWP::Simple; 

$base_address = 'http://jobs.nytimes.com';
@addresses = (
  'http://jobs.nytimes.com/texis/js/+zwxFqnrBMczFqmEccAFqmDOBMzmqwwwDzmYwwwdzmSwww/?page=1&',
  'http://jobs.nytimes.com/texis/js/+wwxFqnrBMczFqmEccAFqmDOBMzmxwwwDzmYwwwdzmSwww/?page=2&',
  'http://jobs.nytimes.com/texis/js/+zwxFqnrBMczFqmEccAFqmDOBMzmqwwwDzmYwwwdzmSwww/?page=3&',
);
my $sep = "\n" . "-" x 60 . "\n";
my $beg = "Begin Client HTML";
my $end = "End Client HTML";
my $gcount=0;
open (OUT, ">s.txt");

for my $address (@addresses) {
  my $page = get($address);
  my @ll = ($page =~ m/HREF=\"(.+?)job.html(.+?)\"/gi);

  my $n = @ll;
  my $i=0;
  my $j=0;
  my @links=();

  while($i<$n) {
    $links[$j] = $ll[$i] . "job.html" .  $ll[$i+1];
    $i+=2; $j+=1;
  }

  for my $link (@links) { $link = $base_address . $link; }

  for my $link (@links) {
    my $ad = get($link);
    my ($ad_txt) = ($ad =~ m/Begin Client HTML(.*?)End Client HTML/si); 
    $gcount++;
    print "$gcount\n";
    print OUT $sep, $ad_txt, $sep; # $mm = <>;
  }

}
close(OUT);


 
Perl script to extract emails from ads home - top of the page -

To run this script you will need perl on your Windows.
Get it for free from http://www.perl.com or from http://www.activestate.com.
 
  #---------------------------------------------------------------
  # conv.pl - utility to extract emails from bunch of text advertisings
  # The program reads source file <s.txt>,
  # selects lines with a "@" symbol, cleans them, removes duplicates,
  # and stores in the array
  # sorts this array of emails by domain name (tail after "@")
  # saves these emails into the file <d.txt>.
  #---------------------------------------------------------------

  use strict;

  my @data=();
  open (IN,"s.txt");
  while ( <IN> ){
    if (/@/) { chomp; push @data, $_; }
  }
  close (IN);

        #-----   clean emails   -----#

  for (@data) {
    tr/[A-Z]/[a-z]/;
    s/e(-|:|\s+)?mail:?\s*//;
    s/(^\s+|\s+$)//g;
    s/[.,]$//g;

    s/<br>//g;
    s/<\/a>//g;
    s/^[^@]*?mailto://;
    s/\?subject.*//;
  }

        #-----   remove duplicates  -----#

  my %myhash=();
  @myhash{@data} = ();  # intialize hash to undef values using slice syntax
  @data =keys %myhash;

        #-----   sort by domain name   -----#

  my @sorteddata =                # Schwartzian Transform:
    map {$_->[0]}                   # map back
    sort { $a->[1] cmp $b->[1] } # sort by cleanned element
    map { m/@([a-zA-Z0-9\-.]*)\b/; [$_, $1]} # map to a list anon.2-element arrays
  @data;

        #-----   write to file   -----#

  open (OUT,">d.txt");
  map { print $_ , "\n"; print OUT $_ , "\n"; } @sorteddata;
  close (OUT);
  exit(0);
  __END__


 
Perl script to merge (combine) lists home - top of the page -

 
#---------------------------------------------------------------
# After you run the script - you will get a list of emails which you will clean manually.
# If you collected several such lists from different sources - you can combine them into one list.
# Then you will want to remove duplicates.
# Here is a way to do this:
#---------------------------------------------------------------
open(IN,"d.txt");
while ($line = <IN>) {
  $myhash{$line} = 1;
}
close(IN);

open(OUT,">unique.txt");
for (keys %myhash) {
  print OUT;
}
close(OUT);
exit(0);
__END__


 
Perl script to purge lists (extract only emails which are new) home - top of the page -

 
#---------------------------------------------------------------
# This script selects emails from emails_new.txt
#  which were not present in emails_sent.txt
#  and stores them into emails_unique.txt
#---------------------------------------------------------------

$f1 = "emails_sent.txt"; # in - list of emails already sent
$f2 = "emails_new.txt";    # in - list of all new emails
$f3 = "emails_unique.txt";    # out - list of new unique emails

$rd1 = &read_emails($f1);
$rd2 = &read_emails($f2);
&clean_emails(\@$rd1);
&clean_emails(\@$rd2);

for (@$rd1) { $hd1{$_} = 1; }
@d3=();
for(@$rd2) {
 if (! exists $hd1{$_}) { push @d3, $_; }
}

&remove_duplicates(\@d3);
&sort_emails(\@d3);

open (OUT,">$f3");
map { print $_ , "\n"; print OUT $_ , "\n"; } @d3;
close (OUT);
exit(0);
 

#--------------------------------------------
# read_emails
#--------------------------------------------
sub read_emails {
 my $fname=shift;
 my @emails=();
 open (IN,$fname);
 while ( <IN> ){
  if (/@/) { chomp; push @emails, $_; }
 }
 close (IN);
 return \@emails;
}

#--------------------------------------------
# clean_emails
#--------------------------------------------
sub clean_emails {
 my $dd = shift;
 for (@$dd) {
  tr/[A-Z]/[a-z]/;
  s/e(-|:|\s+)?mail:?\s*//;
  s/(^\s+|\s+$)//g;
  s/[.,;]$//g;
 }
}

#--------------------------------------------
# remove_duplicates
#--------------------------------------------
sub remove_duplicates {
 my $dd = shift;
 my %myhash=();
 for (@$dd) { $myhash{$_} = 1; }
 @$dd =keys %myhash;
}

#--------------------------------------------
# sort_emails
#--------------------------------------------
sub sort_emails {
 my $dd = shift;
 my @sorteddata = # Schwartzian Transform:
  map {$_->[0]}
  sort { $a->[1] cmp $b->[1] }
  map { m/@([a-zA-Z0-9\-.]*)\b/; [$_, $1]}
 @$dd;
 @$dd = @sorteddata;
}

__END__