Common Mistakes Career Changers Make

Did you know that on average, people change careers 5-7 times over the course of their lives?[1]  While it’s relatively common, there are some pitfalls to avoid if you’re considering changing careers:

Changing Careers Because You Hate Your Job.  It might just be that the work environment that you’re in doesn’t align with your values.  Alternatively, perhaps you don’t appreciate the bureaucracy at your corporate job.  While these types of concerns might be motivating factors as you consider a career switch, it’s highly possible that you’re a bad fit for the company, rather than the field you’re in.  Before doing something as radical as switching careers, consider looking for a job at a company with a different corporate culture.

Making a Switch for More Money.  While obviously money is going to be an important concern for any employee, changing careers based on financial compensation alone is bound to lead to unhappiness.  Instead, consider where your passions and interests lie and let these play the most important determinants in whether you make a career change.

Returning to School Immediately.  In some cases, you may find that the career that you’re interested in would require you to return to school.  This is not a problem per se, but before investing time and money in a new degree, do your homework.  For example, you might want to shadow someone in the career you’re contemplating or speak to someone who works in the field.  Too many people return to school and then a few months into their academic career—or in some cases, years—realize that they aren’t a good fit for the job they’re considering.

Leaving your Current Field for a “Hot” Field.  There is nothing wrong with entering a field that is growing in demand and pays well.  In particular, the last decade has seen a number of people revamp their skills to enter the technology field.  However, before entering said “hot” field, you should do a realistic assessment to determine whether the new career would be a good fit for you.  Not everyone has the temperament to become a software engineer.  Think about your strengths, weaknesses, and personality before making a switch.  A good place to start is with the Jung Typology Test which will provide you with a list of careers that are a good match for your temperament.

Thought For The Day

“The happiness of the bee and the dolphin is to exist.  For man it is to know that and to wonder at it.”
Jacques Cousteau



How to Achieve Your Long-Term Goals (Part 2 of 2)

In the first part of this 2-part series, we discussed how beneficial it can be to set a vision for your future.  Really, it can mean the difference between being a passive bystander in your life and controlling your own destiny.  It was our recommendation that you take some time to develop goals for every aspect of your life—both the personal and professional—and then, write them down and refer to your list regularly.

Most advice you will see on goal setting recommends that having determined your long-term goals, you break them into smaller steps and then invest time on a regular basis toward achieving those steps.  Naturally, that’s important.  However, in this blog post, we intend to focus on how you can use self-regulation (the ability to manage your feelings and control your impulses) to accomplish your goals.  That is because research shows that self-regulation is the most important determinant in achieving long-term objectives.[1]  To this end, you would want to practice the following:

Maintain Your Focus on Goal-Directed Actions.  Obviously, you want to remain committed to your long-term goals.  By writing them down and reviewing them frequently, they remain in the forefront of your mind.  This makes it easier for you to make decisions that are consistent with your values (i.e. turning down that 2nd helping because it doesn’t support your long-term goal of maintaining a healthy weight).

Control Your Emotions.  There are a couple of different strategies to help you do this.  One is to avoid those situations that are likely to trigger negative feelings.  For instance, if you frequently feel road rage when caught in rush hour, you might want to begin and leave work an hour earlier.

The other strategy you can apply is to choose your thoughts.  In our road rage example, you might remind yourself that sitting in the car a little longer is no big deal, you enjoy having the opportunity to take care of those personal calls that you needed to make, at least the sun is shining, etc.  By changing the way that we think about a situation, we can change our emotional reaction to it and experience much less frustration.

Cope with Failure.  There may be times where you experience what appears to be failure as you strive to achieve your goal.  However, remember that temporary setbacks occur to everyone from time to time and don’t allow these to undermine your positive attitude.

Use Failure as a Basis for Improvement.[2]  Rather than using failure as a jumping off point for disappointment, instead think of how you can use it to your advantage.  What did you learn from your experience that is going to be valuable for approaching this situation differently the next time?  How can you use this setback in a constructive way?

By practicing self-regulation, you’ll find yourself well on your way to having the great life that you envision!

Basics of Programming: Dynamic Memory Allocation; Stack and Queue

Dynamic memory allocation refers to manual memory management.  In C language, this is performed by using built-in functions: malloc, calloc, realloc and free.  In C++, these functions still exist for compatibility reasons, but the operators new and new[ ] are used much more often.

The task of fulfilling an allocation request consists of locating a block of unused memory of sufficient size.  Since the precise location of the allocation is not known in advance, the memory is accessed indirectly, usually through a pointer.

Dynamic memory allocation is useful, because the exact size of an array is unknown until compile time.  The size of the array you have declared initially can sometimes be insufficient or even more than what’s required.  Dynamic memory allocation allows a program to obtain more memory space while running, or to free space when it isn’t needed.

Let’s explain the functions we have previously mentioned:

malloc: allocates the requested number of bytes and returns a pointer to the beginning of the allocated space.


int* array = malloc(10 * sizeof(int));


calloc: allocates the specified number of bytes and initializes them to zero.


int* ptr = calloc(10, sizeof(int));


realloc: increases or decreases the size of the specified block of memory.  Reallocates it if needed.


ptr = realloc(ptr, newsize);


free: releases the specified block of memory back to the system.




Now, in order to fully understand the power and significance of pointers and dynamic memory allocation, we’re going to talk about two data structures, stack and queue.

In computer science, a stack or LIFO (last in, first out) is an abstract data type that serves as a collection of elements with two principal operations.  These operations are push, which adds an element to the collection, and pop, which removes the last element that was added.  In contrast, a queue is a FIFO (first in, first out) structure, which means that the elements are kept in the same order in which they are added.

These structures are important because they are an essential part of a lot of common algorithms – involving Breadth First Search, Depth First Search, Flood Fill, etc.

In higher programming languages, stack and queue are easily implemented using either an array or a linked list – a single linked list for stack and a double linked list for queue.

Here, we will show an example of stack implementation using a single linked list, and we’ll write the function for adding an element.

The structure of one element:

struct Element


            int value;  /* can be any data type */

            Element* next;  /* pointer to the next element */


Element* topElement;

The function for adding an element:

void push (int element)


            if (topElement == NULL)


topElement = (Element*)malloc(sizeof(Element)); 

//type-casting, will be explained later in the text

topElement->next = NULL;

// the -> operator means the same as

//“the field called next of the variable the pointer points to”

topElement->value = element;




Element* temp;

temp = topElement;

topElement = (Element*)malloc(sizeof(Element));

// allocating space for a new element of the stack

topElement->value = element;

topElement->next = temp;

//the new element is now on top of the stack



Important notes:

Oftentimes, you’ll be compiling your C code in a C++ environment.  This is why we didn’t have to write the keyword ‘struct’ before declaring a variable that’s an instance of a certain struct we’ve written.

Another difference is that when you’re using malloc, you have to modify the function call slightly:

topElement = (Element*)malloc(sizeof(Element)); 

The operation (Element*) is called casting. Informally speaking, casting means “converting a data type into another data type.”   In C, this is unnecessary when using malloc, as void* (the return type of malloc) is automatically and safely promoted to any other pointer type.  In C++, this is not the case.

We recommend that the reader tries to write the functions for removing an element, as well as a function for returning the top element, as an exercise.  You can compile and execute your programs online at  Just paste the code and select the C++ compiler (simply in order to avoid some C-specific syntax details, like the one about the usage of structs that we mentioned before).

3 Reasons You Should Invest in Direct Marketing

Direct marketing is a strategy of advertising to consumers without the use of a retailer as a middleman.  This can be done in a multitude of ways including “text messaging, email, interactive consumer websites, online display ads, database marketing, fliers, catalog distribution, promotional letters, targeted television commercials, response-generating newspaper/magazine advertisements and outdoor advertising.”[1]

Direct marketing can be extremely effective at growing business revenue.  If you’re not already taking advantage of this strategy, let us sway you with its benefits:

  1. It Can Be Personalized.  Long gone are the days where advertisers would create ads with a one-size-fits-all approach.  Marketers today are far more strategic when trying to reach customers and for this reason, many of them use a personalized approach.  This can be far more impactful than a generic message that lacks personalization.

  2. Results Are Easy to Track.  With direct marketing, marketers can actually track how successful their marketing efforts are.  For example, an email campaign allows companies to track how many people followed through on the call-to-action.  Additionally, it allows for A/B testing, meaning that different marketing messages can be tested on different consumers to see which ones are most effective.

  3. It Enables Market Segmentation.  Say, for example, that you’re a mortgage broker who wants to target people with reverse mortgages.  Rather than sending out a mailer to every contact in your database, you can very specifically identify which people—in this case, elderly homeowners—who would be most receptive to your marketing message.  By targeting a specific demographic in this way, you can cut costs and increase the likelihood that you’ll grow this area of your business.

For all of these reasons, direct marketing can have a significant impact on a company’s bottom line.  If you’re not currently investing in it, now is a great time to get started!