How to write a technical CV

The purpose of your CV (Curriculum Vitae) is to get yourself noticed and to secure an interview. It’s very unlikely that someone will offer you a job solely on reading your CV. You wouldn’t buy a car just from reading the sales brochure; no, you want to test-drive it and see how it responds.

Hiring managers and recruiters usual only speed read the first page of your CV and then decided whether to arrange an interview with you. Your CV needs to be short and your skills need to be clear identified. You need to sell your self on the first page, otherwise they wont bother reading the other pages.

This is how I generally structure my CV:

First Page

On this page, you need to sell yourself. You need to say who you are and what you have to offer the company.

Your Name

Seems pretty obvious but you’d be amazed at how many CVs I’ve read that have ‘Curriculum Vitae’ in big letters at the top of the first page and no reference to their name. To me, its obvious this is your CV so there is no need to take up valuable space on the first page with the obvious. You may also want to briefly include some contact details like email address or phone number.

Your Profile

You want to start your CV with a short profile of yourself; one paragraphs should be enough. This is going to be the first thing they read and it needs to be clear who you are and what you have to offer to the employer. For example:

“Software engineer with experience working on mission critical applications in the banking and media industries. I’ve worked in both waterfall and agile development environments.”


Often, technical CVs focus entirely on the technical skills and forget about the soft skills; these are things like project management, project leadership, etc. Using bullet points, try listing a few soft skills with a short paragraph describing each one. For Example:

  • Software Development: Experienced in the development of high-volume and high-performance web applications.
  • Project Leadership: Lead the development of sub-modules for mission critical systems. Worked closely with product owners and technical architects to define and identify requirements.
  • Business Analysis: Proven problem solver, able to gather requirements, and produce high-quality documentation.

Technical Skills

Here is your chance to show the company what you have to offer. Using bullet points, categorise your skills and list your skills under each category. For example:

  • Langauges: Java and Perl.
  • Tools & Libraries: Spring, Maven, and Catalyst.
  • Other Software: AWS, MySQL, Redis, and Git.
  • Best Practices: TDD, BDD, Code Reviews, and Continuous Integration.

Next Pages

If you can’t sell yourself on the first page then most people wont bother reading the other pages of your CV.

Career History

Starting with your most recent job: state the start and end date, job title, and a brief description of either company or your position at the company. I prefer follow this with a short list of bullet points which identify my biggest achievements at that company. For example:

  • Software Engineer, New Social Media Website, Inc.
    June 2010 to Present.
    Employed as a software engineer working on their backend systems which handles comments.


Unless your career history t0o short, then keep your education short. Simply state where you studied, what you studied, and what grade you achieved. Additional, you can also state and interesting projects you did while you were there.

Contact Details

To save space on the first page, you probably only included an email address or telephone number. In this section, you can now include more ways to contact you; for example, postal address, twitter, links to blogs.

Dos and Do nots

  • Do remember that the point of the CV is to secure your an interview and not the job.
  • Do use the first page to show what you can offer the company.
  • Do include your biggest achievements.
  • Do include contact details.
  • Do try to keep your CV to 4 pages or less.


  • Do not waste your first page on career history or education.
  • Do not include an ‘objective’. Most companies don’t care that your objective is to become a world-class software engineer.
  • Do not lie on your CV. They will quickly discover this during the interview.
  • Do not include any personal details. For example: gender, age, date of birth, marriage status, sexuality, or religion.
  • Do not include a photograph of yourself.
  • Do not include links to personal social websites, such as Facebook, Twitter, etc.


Good Luck!

Technical Interview Question – Pascal’s Triangle

Here is more complicated question which is sometimes asked during a technical interview.

Write a function that prints out the first n rows of Pascal’s triangle (with f(1) yielding the row consisting of only the element 1). This can be done either by summing elements from the previous rows or using a binary coefficient or combination function. Behavior for n <= 0 does not need to be uniform, but should be noted.

Pascal’s triangle is an arithmetic and geometric figure first imagined by Blaise Pascal. Its first few rows look like this:

  1 1
 1 2 1
1 3 3 1

Each element of each row is either 1 or the sum of the two elements right above it. For example, the next row would be 1 (since the first element of each row doesn’t have two elements above it), 4 (1 + 3), 6 (3 + 3), 4 (3 + 1), and 1 (since the last element of each row doesn’t have two elements above it). Each row n (starting with row 0 at the top) shows the coefficients of the binomial expansion of (x + y)n.

function pascalsTriangle($num)
    $c = 1;
    $triangle = Array();

    for($i=0;$i<=$num;$i++) {
        $triangle[$i] = Array();
        if(!isset($triangle[$i-1])) {
            $triangle[$i][] = $c;
            for($j=0; $j < count($triangle[$i-1])+1; $j++){
                if (isset($triangle[$i-1][$j-1]) && isset($triangle[$i-1][$j])) {
                    $triangle[$i][] = $triangle[$i-1][$j-1] + $triangle[$i-1][$j] 
                else {
                    $triangle[$i][] = $c;

    return $triangle;
$tria = pascalsTriangle(8);
foreach($tria as $val) {
    foreach($val as $value) {
        echo $value . ' ';
    echo '
'; }

Technical Interview Question – Fizz Buzz

Here is a common question that’s usually asked in the first-round interview stage. The typical question is something like:

Print out the numbers 1 to 100. Where the number is a multiple of 3, print ‘Fizz’, otherwise if it is a multiple of 5 print ‘Buzz’. If the number is a multiple of 3 and 5, print ‘FizzBuzz’.

// PHP

for ($i = 1; $i <= 100; $i++)
    if ($i % 3 == 0 && $i % 5 == 0) {
        echo 'FizzBuzz';
    else if ($i % 3 == 0) {
        echo 'Fizz';
    else if ($i % 5 == 0){
        echo 'Buzz';
    else {
        echo $i;

for (my $count = 1; $count <= 100; $count++)
    if (($count % 3 == 0) && ($count % 5 == 0)) {
        print "FizzBuzz\n";
    elsif ($count % 3 == 0) {
        print "Fizz\n";
    elsif ($count % 5 == 0) {
        print "Buzz\n";
    else {
        print $count . "\n";

for (var count = 1; count <= 100; count++)
    if ((count % 3 == 0) && (count % 5 == 0)) {
    else if (count % 3 == 0) {
    else if (count % 5 == 0) {
    else {

public class FizzBuzz {                      
    public static void main(String[] args) {   
        for(int i = 1; i <= 100; i++) {                    
            if (((i % 5) == 0) && ((i % 3) == 0))            
            else if (i % 3 == 0) {
            else if (i % 5 == 0) {
            else {

for count in xrange(1,101):
    if count % 5 == 0 and count % 3 == 0:
        print "FizzBuzz"
    elif count % 3 == 0:
        print "Fizz"
    elif count % 5 == 0:
        print "Buzz"
        print count

Abstract versus Interface

An Abstract class without any implementation just looks like an Interface; however there are more differences than similarities between the two.

Abstract Class

An abstract class is a special kind of class that cannot be instantiated and is only to be inherited from. The advantage is that it enforces certain hierarchies for all the subclasses. It is a contract that forces all the subclasses to carry on the same hierarchies or standards.


An interface is not a class. It is an entity that is defined by the word Interface. An interface has no implementation; it only has the signature or in other words, just the definition of the methods without the body. One of the similarities to Abstract class, it is a contract that is used to define hierarchies for all subclasses or it defines specific set of methods and their arguments. The main difference between is that a class can implement more than one interface but can only inherit from one abstract class.


With an interface, we are basically creating a set of methods without any implementation that must be overridden by the implemented classes. The advantage is that it provides a way for a class to be a part of two classes: one from inheritance hierarchy and one from the interface.

When we create an abstract class, we are creating a base class that might have one or more completed methods but at least one or more methods are left uncompleted and declared abstract. If all the methods of an abstract class are uncompleted then it is same as an interface. The purpose of an abstract class is to provide a base class definition for how a set of derived classes will work and then allow the programmers to fill the implementation in the derived classes.