Sunday, February 23, 2020

Gprof Profiling


Profiling is a mechanism for identifying program 'hotspots', identifying where your program spends a good majority of it's time. These regions are prime candidates for optimizations, where concentration of efficiency will give you the most bang for your buck.

Profiling with Gprof consists of 3-phases: 1) compiling your application with profiling enabled, 2) executing the application to gather profiling metrics, and 3) evaluating the collected metrics.

Compiling

You first must compile your application similar to the way you normally compile it. Two additional flags must be specified however, the -pg option to enable profiling, and the -g option to introduce the debugging symbols for tracking source lines of code. Actually, the -g option is only necessary for line-by-line profiling, but for good measure I suggest specifying it regardless.

$ gcc -pg -g foo.c -o foo


Executing

You run your application in the same manner as your normally run it, specifying the same arguments, inputs, outputs, . . . What you may notice however is that the program will execute slower than normal. This is reasonable when you consider what is taking place. Profiling metrics are collected during the execution of the program. Worth noting, your executable needs to terminate in a normal fashion, by returning from the main routine or calling exit().
Immediately prior to terminating the program, an output file (gmon.out) is generated that contains the collected profiling metrics. This file will later be used in evaluating the program performance.

Evaluation

Evaluation of the results stored in the gmon.out file is the last step in our quest. Various types of reports are available from the collected profiler info, the most readily used is the flat model. This is done by executing the command:

$ gprof foo


This results in the default report, a flat model followed by the call graph. The flat model will depict the list of functions in decreasing order with respect to time spent in each function. This allows for quick evaluation of the functions that your application spends most it's time in. You may notice that two functions appear in every profile; mcount and profil, each function is part of the profiling apparatus. The time spent in both functions can be viewed as profiler overhead.


Sunday, February 16, 2020

Selecting A Technology


Selecting a technology is like choosing a candy bar at CVS, a nearly a countless assortment to select from, pre-existing experience with a subset of the products and a limited amount of time to select the 'right' candy bar.  

Perhaps you'll roll the dice and take a chance with a product you have little experience with, but have heard good things about.  Perhaps you'll select your 'tried and true' snack that has never treated you wrong.  What you won't however do......a complete review, comparative analysis of chocolate/nougat breakdown of each bar or expend an unreasonable time in the selection process.

You'll unlikely leave with the 'perfect' product, instead you'll leave with one that satisfies your current needs and taste.  Send 3 people in to select a chocolate treat, likely 3 different products will be chosen.  Everyone has their own experiences and tastes, candy or tech.

Tech or treats, it's in your best interest to experience a selection of products when the opportunity allows, but make the best safest choice when the decision is on the line.

I'll have to excuse myself now, I'm surprisingly desiring a coco-treat.

Sunday, February 9, 2020

Late Night Coding



There is a pretty well-established stereotype about software engineers that is based in real-world reasoning.  This post will explore the history and reason for the 'late night coder' philosophy.

The history of the 3 am software coding marathon often originates with late night gaming.  Coding, or gaming, the reason for the late night escapades is in search of uninterrupted time to do what they do.

If your company frequently experiences late, late night commits or pre-dawn work it's likely because your employees are lacking sufficient uninterrupted time to conduct their work.  Deep thinking activities are virtually allergic to sporadic interruptions for meetings and such.

Evenings should always be reserved for bourbon consumption and making memories but dedicated engineers who are hard-wired as 'makers' will find a way when obstacles present themselves.

Cheers.


Sunday, February 2, 2020

Having a F.U Career

I recently heard of the term 'F. U. Money', I believe coined by the author Dan Lok in his . book https://www.amazon.com/F-U-Money-Make-Much-Please/dp/1599325748.  While I haven't read the book, the concept was shared in a podcast I listened to.  In general, the idea is to have sufficient resources to be able to walk away from a job that you may learn to hate.  The available F.U money allows you options where otherwise you may feel constrained.

There are a great deal of benefits the software engineering career offers, some of them are very apparent, others more subtle and even more are those that we in the industry may have grown to take for granted.  As a blue-class kid who was fortunate enough to move into the white-class professional world there are benefits that we may have grown accustomed to, but should never forget that aren't universal to all.

Money

Let's get the more apparent benefit out of the way, as well as the one that introduced the topic itself.  Software engineering can be a particularly lucrative career.  In my first year of employment, nearly immediately out of school I found that I was making $4,000 less than my father was making at the peak of his career.  My parents raised 7 kids on an annual income less that I was making at the entry of my career.  Growing up, money was never discussed so this revelation was honestly pretty uncomfortable but it was a significant moment for me as it embedded a long-standing sense of financial opportunity that many hard-working aren't afforded.  Money offers opportunities that many may never experience; international travel, memorial vacations, and stuff that we may not need but may certainly want.

Flexible Time

'Punching a Clock' with a pre-defined start/end time is pretty common in a variety of careers.  I remember when I was washing dishes at a diner in my youth, walking in the back door, making my way to the break room, sifting through the stack of time cards and literally punching the clock.  I remember being warned when there were times clocked in as little as 3 minutes late.  I don't recall resenting the act, simply taking it as a part of the job and 'normal'.

White-collar jobs, blue-collar jobs there are plenty of jobs that require fixed schedules; customer facing roles, dependencies of other teams, HR 'ass in seats' policies....  Largely though, our particular career offers flexible time.  Come in a bit late, take a long lunch, pick up your sick kid from daycare or skip out in the afternoon to watch your daughters pre-school play....our career typically accommodates such events in the form of flexible time.  Come in late, work late....get in your 40 hours and don't take advantage of the policy.  Some more progressive companies simply state 40-hour work weeks are a legacy.....just get your job done.

This is an extraordinary benefit and should never be overlooked.  There are plenty of folks that can't simply leave abruptly from work for an emergency without consequences.  Some folks need to request vacation months in advance with a genuine possibility of it being denied. 

Opportunities

Opportunities can be abundant, software is everywhere from every governmental agency to the most cutting edge phone.  You're only limited to your imagination in seeking employment; roll your own services and provide them to direct customers, navigate Craigslist and perform one-off gig services, become a contractor or seek permanent employment.  The vast spectrum of opportunities gives you individual power.  The knowledge that you're not stuck with your current employer, location, or industry is empowering.  Imagine devoting your entire life as a steel worker knowing there are limited mills in your area and only a handful in the entire nation.

Diversity Of Industry

Whether you are a natural history nut, a medical device junkie, a yoga enthusiast, or an amateur personal trainer.....you can always find a pairing of such fields with software.  Create a museum tour app, a blood pressure monitor, the next Peloton stationary bike, or an electronic yoga instructor...there is always a potential pairing of software with a diverse spectrum of fields.  You'll never be trapped in a specific industry and if you later find you tire of medical devices pack up your virtual camp and move on to another industry.

Location Flexibility

We are pretty lucky right at this moment, employment is high and demand for software engineers along with it.  The nation, and namely the world, offers amazing life opportunities and digital nomads likely could find an interesting job prospect in nearly any region of the world they aim to set up camp.  Also, with the growing acceptance of remote workers we will likely soon view our job and location as completely independent of one another...at least I predict in my lifetime.


While money was the kindling of the post, we in the industry have a set of FU values.  FU if a company is undervaluing you, FU if your corporate policy doesn't offer flex-time, FU if your company products are not a good match for your interests  and FU if you feel stuck in your current city.  More importantly, appreciate these perks of the industry while acknowledging that we are lucky to have them many in other careers don't have them.

Cheers.