Saturday, November 27, 2021

Job Seeking: Crafting the Perfect Resume

In this economy, job seekers are at an advantage. Businesses are desperately seeking employees, not just in the service industry, but also in the tech industry. But that doesn't mean it's not important to put your best foot forward and craft the perfect resume that highlights your talents.

I have interviewed scores of software engineers and managers across three companies over a 13-year career. As a director I've made the final call on hiring several QA analysts, QA engineers, and QA managers. I've represented my company at several career fairs. So I know what I want to see in a resume.

This is one area I wanted to make sure I had a lot of experience in before I spoke publicly about it. I feel I have finally achieved that level of experience. Here is my advice.

Basics
A resume should list your skills, your technologies you're familiar with, your work history, and your education. There are a lot of good samples on the Internet. I have posted one below.

Work History
I've been told to make sure I highlight concrete, measurable accomplishments rather than job duties. That is, don't say "Responsible for redesigning backends", say "Streamlined backends, reducing wait time by 50%" if you sped up a backend request from 0.8 seconds to 0.4 seconds. But when I'm reviewing resumes, I am less focused on those achievements since some are easier to accomplish, depending on the company's existing technology. Additionally, many of those tasks were given by bosses and measured afterwards. That measurable accomplishment doesn't tell me much more than a description of the task you were given; it just tells me that you were successful at it. When I read work history, what I'm generally looking for are the technologies worked with, tasks given, and roadblocks overcome.

Similarly, use action verbs. Don't just say "did", "made", and "told". Use "performed", "implemented", and "documented". Once again, I see through that kind of stuff, but it's a good sign when you can use strong action verbs truthfully to describe what you accomplished at previous companies. For example, "documented" implies a permanence that "told" does not. Are they still using your research? Probably so if it was "documented." Probably not if you only "told" someone about it.

Definitely don't sell yourself short. Highlight your top accomplishments and phrase your responsibilities and leadership so that readers don't think you just played a small part in any projects that you led or had a massive part in.

Words Words Words
There is an exception to my apathy to big words: fancy words and flowery grammar show me that you have an excellent command of the English language. If I have any bias, it's a bias towards excellent English communicators. As a software engineer, I have worked with many people who didn't know how to communicate properly and it has occasionally become a stumbling block. It is sublime working aside engineers who can disseminate information widely and individually in a manner that is concise, precise, and unambiguous. Yes, I did use some SAT words there to make a point.

Don't Lie
Oh my god, don't lie. At Google, I once did a "coaching call" (mock interview) with an applicant who claimed he had been the leader of a local student organization. Incidentally, not only had I participated in that same organization, I actually knew the then-leader of the organization. While on the phone with this applicant, I realized something was suspicious and asked for clarification. He backtracked from his lie.

I would never hire someone who would lie about something small like an extracurricular activity. Saying you know Java when you only wrote a small Java app is a small stretch of the truth. Saying you held a leadership position you didn't actually hold is such a meaningless lie that it shows you can't be trusted at all.

Cover Letters: Unnecessary
A cover letter has never, not once, affected whether I wanted to hire someone or not. I understand that there is a level of effort in creating one, but that effort could go towards improving your resume or leveling up your interviewing skills. Anything important to know should be in the resume. Most times, I don't even read cover letters.

Resume Length: 1-2 Pages
It's hard to fit your whole life onto one page, especially if you've been at multiple companies. Now that physical paper is a thing of the past, a two-page resume is completely fine or even expected. Three is a bit long and four is ridiculous, unless you've had a very long, illustrious career. Stick to 1-2 pages. My current resume is 1.5 pages.

Fancy Design
Should you use column headers, multiple colors, a sidebar? I shy away from that. My resume is super plain; maybe even too plain. I do enjoy reading a nice looking resume, but don't go too fancy and make things difficult to read. During my current job hunt, I've filled out online job applications that scan my resume and fill out the application with the parsed results. I imagine these apps struggle on overly-fancy resumes.

An exception is when the role requires good design skills. I am impressed when a frontend developer has a nice resume. This may be foolish, but I suspect the skills in resume design may carry over into web design. But it's not required.

Customize to the Job
If you're applying to different roles, customize your resume. For example, I've applied to QA manager roles and engineering manager roles recently. Each time, I tailor my resume to highlight what the hiring manager wants to see and remove experiences and skills that are irrelevant.

Example
Here's a sample resume from Monster:

I find that most sample tech resumes on the Internet are pretty good, so follow those for the basics.

Thursday, November 4, 2021

Wish List 2021

I've found myself with some free time, so let's talk about tech.

My Phone

I've got an old phone. I'm rocking the OnePlus 6T, a 2018 phone from a Chinese manufacturer. Although it's aging, it suits my needs. Most importantly, there isn't any phone out there with the specs and price to offset my interest in keeping my phone for environmental reasons. I don't want to get on a soapbox here, but buying a new phone every 2 years has a larger carbon impact than keeping your old phoneThe other reason is the cost, as a lot of the flagships are around $1000. I have that kind of money but it seems silly to upgrade when my current phone can do basically everything they can do.

Still, I look at current tech dreamily and wonder what if...

Dream Phone:

  • Screen: Dynamic AMOLED 2X or Super Retina XDR
  • Antenna: 5G
  • Camera: Good camera software
  • Feature: Face ID
  • Feature: In-screen fingerprint reader
  • Feature: Wireless charging

Samsung's Galaxy S 21 screen has 1300 nits brightness and 2,000,000:1 contrast ratio, which is about the same as Apple's iPhone 13 screen. Both operate at 120 Hz, which is nice.

Good camera software is huge. Specs like megapixels don't matter anymore. I'd take the iPhone X's older 12MP camera over my 6T's newer 16MP camera any day. At this point, it's purely software that makes for good lowlight pictures, image stabilization, and color reproduction, rather than megapixels or (as far as I can tell) focal length. Apple is king of the cameras, with Samsung close behind. It'd be nice to have a good camera again. As for number of cameras, 3 is pretty standard now.

Apple's Face ID still seems to be the best implementation of a 3D face unlock mechanism. Some Android phones have 3D face unlocks, but they don't seem to have the security of Face ID. I'm pretty sure my 6T's face unlock is 2D and can be fooled with a photograph of my face.

Face ID would be nice, but it still can't compare with the security of a fingerprint reader, especially given that everyone is wearing a mask nowadays. Surprisingly, the iPhone has no fingerprint reader while even my basic 6T has a fingerprint reader in the screen.

Wireless charging is the last thing on my list. It's also quite standard, but my current phone doesn't have it, so it's worth mentioning.

Everything else I don't care about. Storage, battery, etc. I don't care about. They're all pretty good. I'm never going to use all 256 GB available on some phones. My current phone has around a 9 hour battery life. The long-lasting iPhone 13 Pro Max's 12 hours isn't really make a huge difference to me. Either way, I'm charging my phone every night and putting on battery saver before I get to bed. I'd like an audio jack, but everyone's getting rid of it. I don't know enough about chips to say which processor is best, and my current phone was fast enough when I bought it. Operating systems are all good. Android isn't fragmented anymore, not really and iOS has so many good features I'd consider it, despite the walled garden.

We're really getting to a point where any mid-tier phone is good enough for me.

For some lulz, let's look at my last phone wish list post from 2011:

  • OS: Stock Android 4
  • Processor: Quad-core
  • Expandable Memory: Micro SD slot
  • Display Tech: Super AMOLED Plus
  • Display Resolution: Full HD
  • Display Size (horizontal): 4.3 - 4.5"
  • Thickness: <9mm
  • Battery Life: 10 hours talk time
  • Charging/Connectivity: Micro USB or MHL
  • Video Out: Micro HDMI or MHL 
  • Back Camera: iPhone 4S or Nokia N8 quality
  • Front Camera: 5 megapixels
  • 4G: LTE or T-Mobile HSPA+
  • Design Other: Camera button, Kickstand
  • Other: Gorilla Glass or Fortified glass screen , DLNA, NFC,  Pixel Qi?
  • Price: $200

lol. We've grown fond of our huge phones now, but I do miss camera buttons and audio jacks and $200 flagship phones.

Sunday, August 15, 2021

Code: Easy-to-Type Password Generator





----

People who care about security use hard-to-crack passwords, generally generated by a password generator to have a random mix of uppercase letters, lowercase letters, numbers, and symbols. Those four requirements are often required for website passwords, along with a minimum length and other requirements. However, a password like 3gK*&>5%bZY)sH:D can be hard to type, especially on certain devices. For example, typing out passwords for video game consoles is a huge annoyance, as you generally have to hunt and peck with a cursor across a software keyboard. That cursor is controlled by your video game controller. This can be more difficult than a hardware or a capacitive touch (mobile) keyboard, which are both controlled directly with your fingers and you can input multiple letters in rapid succession.

The on-screen keyboard on a PlayStation 4. You must press a button to access capital letters or for the symbol keyboard. I don't know why there are there two f's on this keyboard.

It would be easier to type such passwords with a better keyboard. But since we can't use our phones to input passwords to our game consoles, nor do we want to pay for expensive game console keyboards, it's simpler to just generate a password that's easy to type. What would make the passwords easy to type? Putting all the types of characters next to each other. Uppercase letters go in one continuous section of characters, lowercase letters go in another section of characters, numbers are colocated, and all symbols also go next to each other. This way, you're not constantly switching the keyboard type for every character you input, only each section.

What about security? You can still keep good security by having a password be long, using a crypto-safe pseudorandom selection, not only for each character, but the order of the character type sections. If you like, you can add extra sections, picked randomly of course. A password of 3045krkfEYTB{+:_ is hard to crack. A bad actor doesn't know the order of the sections, nor do they know which characters are selected within each section.

Meanwhile, you only switch keyboard types (from default to number* to lowercase to uppercase to symbols) a maximum of four times. That's way fewer than the 13 keyboard switches needed to type 3gK*&>5%bZY)sH:D, a password of equal length. It's more secure than the easy-to-type password, but the easy-to-type password is already secure enough (takes years to crack).

If you want to see exactly how secure the algorithm would be, let's compare:

Assuming you have 27 symbols, there are 27+10+26+26=89 different characters to choose from with a regular password. A password of length 16 means there are 89^16=1.5e+31 or 15 nonillion possibilities. A high number for sure.

With an easy to type password of four sections (minimum) and a length of four characters per section (default), let's first calculate the permutations on the sections P(4,4)= 24. Then each section has 4 characters, allowing repeats. For digits that's 10^4 = 10,000. Each set of letters is 26^4=456,976. Symbols is 27^4=531,441. Multiplying those together gets you 2.6e+22 or 26 sexillion possibilities. The easy-to-type password is less than a regular 16-character password by 9 orders of magnitude, but it's still quite tough to brute force. And that's if your hacker already knows you're using this generator with the default settings.

Compare it with the much more popular 8-character password, which has roughly only 3.0e+15 or 3 quadrillion possibilities (number of symbols varies). The easy-to-type password is stronger by 7 orders of magnitude. And you can play with the number and length of the sections to make it even stronger. Keep in mind, you still have to switch keyboard types many times when typing in the traditional 8-character password, even if you have to switch fewer times than with a 16-character password.

Because I was interested in this idea, I decided to code it up in JavaScript, and because I like getting to the point, I posted my implementation up above. I set the section length minimum to 1 in case users want to generate a regular-style password, but if using a section length of less than 4, I highly suggest using 8 or more sections. Passwords are generated completely client side; I don't save or send the results anywhere at all.

You can also find the code at: https://github.com/omaric/easytypepass

* I suppose there isn't a numbers-only keyboard type on most onscreen keyboards. Still, I think numbers deserve their own section in this password generator.