Monday, 27 February 2017
Tl;dr – I
have (had?) Stage IV metastatic melanoma. This is a diagnosis whose current “5
year survival” rates are about 5%, meaning that 95% of people with this
diagnosis die in 5 years or less, generally a lot less, regardless of the
treatments they attempt: surgery, radiation, chemotherapy. However, that is entirely
based on people diagnosed more than 5 years ago, and everything has changed in
the last 5 years, making that number obsolete. I have had a very challenging
summer and fall 2016. I have a fantastic result though: using treatments that
have become available only in the last 5 years, I have seen my tumours shrink, and
many of them disappear. My symptoms are almost
all gone, I am not taking any pain medication, I am exercising regularly and my
energy levels are almost back to normal. My treatment continues, and my life is
not entirely normal, but it is amazingly great. I look forward to returning to
work, though I am still not sure when that will be. We live in the future.
for those who want details. In hindsight, my first symptom was fatigue in the
fall of 2015. I came home from an amazing 5 week transPacific trip, and within
days was in bed with a wicked cold we all called the Chilean Death Flu. When I
got over that, I had to work long hard days to get ready for CppCon, then was
at CppCon running days from 8am to 10pm or later, so not surprisingly I was
exhausted by the time that was done. But I never really got over that
exhaustion and got back to my regular energy. This is a hindsight thing,
because fatigue is a cancer symptom, but I never went to the doctor and said
“I’m so tired, let’s find out why.” In January after a dentist appointment, I
noticed a slight lump and soreness under my chin, but I forgot all about it as
the rest of my busy life continued to happen. By April, I had noticed it again (it
was larger) and this kicked off a round of medical things that just kept
escalating. Blood tests, ultrasound, cat scan, biopsies, more cat scans, pet
scans, MRIs, more biopsies – oh, many many more biopsies – and never any
conclusions. I had to cancel a headline appearance at an August conference, and
scale back my CppCon commitments a bit at a time, eventually deciding I
couldn’t even attend. Through all this, the lump, whatever it was, kept
growing. It was starting to hurt. Eventually, I had surgery to remove it,
enabling all kinds of tests to be run on the removed material. Throughout this
I kept the process private, discussing with only my very closest family
members. Because I didn’t know what I had, I didn’t want to tell colleagues,
clients, conference organizers or even friends “I may be sick, or not, and if I
am it could be anything.” So I kept it to myself.
September when I officially got the news. The now-removed lump was melanoma.
Since it wasn’t presenting on the skin (as a mole or other visible surface
blemish), it was a metastasized melanoma. And since the cat scans showed that
lumps (growths, nodules, masses, lesions – doctors almost never say tumour) were
also in my lungs (and getting larger between scans), it was Stage IV, and
distant. Here’s Wikipedia on the matter:
When there is distant metastasis, the cancer is generally
considered incurable. The five-year survival rate is less than 10%. The median
survival is 6–12 months. Treatment is palliative, focusing on life extension
and quality of life. In some cases, patients may live many months or even years
with metastatic melanoma (depending on the aggressiveness of the treatment).
Metastases to skin and lungs have a better prognosis. Metastases to brain, bone
and liver are associated with a worse prognosis. Survival is better with
metastasis in which the location of the primary tumor is unknown.
Literally every time I met a doctor in September, they told
me another place it had spread. There was the unknown primary, which my own
immune system had already cleared away. The neck lump. The lung tumours, first
detected in May and having multiplied and grown all summer. The liver. The
spine. The surgeon had no more to offer me – there were too many to consider
removing them. The radiation specialist also didn’t want to do anything – the
neck lump might come back, but “it’s not a survival issue,” he said, meaning
that I would doubtless die from the lung or liver involvement, or some other
new lump, long before any regrowth of the neck lump had a chance to hurt me.
And radiation to the neck would ruin my voice and quality of life. They both
repeatedly used the word incurable, just as Wikipedia does. One of them praised
me for crying “because it means you understand.” I made lists of paperwork to
update (our wills) and find (my life insurance policies) and started thinking
about what music I wanted played at my memorial ceremony. After all, those
facts are pretty cut and dried. If the median is 6-12 months, you have some
months. Maybe 18 months if you’re super lucky, maybe 3 if you’re not. It’s
actually a lot of work to “get your affairs in order” and I was super tired and
found thinking very difficult, so it was even harder than you would think it
But, here’s where things take a turn. The surgeon told me
that things have really changed for melanoma just in the last few years. That
great strides are being made. The radiation specialist told me that what I
needed was something systemic that would attack everything at once. They
referred me to a medical oncologist. And he was like no-one I have ever met.
For one thing, he looked at me – my face, not his feet or my
feet – when we talked. And he smiled. He told me I had come to the right place,
and that he knew what to do for me. He’d already run some tests on the lump and
ruled out one set of treatments, but felt I was a very good candidate for
another set. This involved being in a study, getting a treatment that was
technically experimental. (Technically because it involves combining two drugs,
both of which are already approved in Ontario for treating this, but the
combination is not. Since then, the combination has been approved in the US.
Things are moving quickly in this area.) He started talking about what
percentage of his patients survive and I interrupted him (probably a bit
sulkily, because honestly I wasn’t having a great month) and said “for a while,
anyway.” He grinned. “I have patients who I have to wait for them to die of old
age so I can declare them cured. That’s my plan for you.” So then that was all
three doctor’s offices that I cried in, but this time because he gave me hope.
So that brings us to the weird world of cancer and what
“cured” and “curable” and such mean. The gold standard is to simply be alive 5
years after you’re diagnosed. That is why diagnosing “early” increases survival
rates – not only because people live longer than they otherwise would have
(sometimes they do, sometimes they don’t) but because the survival time is
measured from diagnosis, not from when some particular stage is reached. If you
are diagnosed a year early and nothing changes about the age at which you die,
you still survived a year longer after diagnosis than you would have with a
later diagnosis. At first, there was so
little that could be done for cancer that basically you either lived or died,
and if you managed to still be alive after 5 years, you would almost certainly
go on to die of something else like a heart attack or old age. But now people
are being diagnosed so early, and even very aggressive cancers are being held
back for a while, that the 5 year mark isn’t necessarily a sign that you’re
cured. Doctors like to tell people they’re in remission if they don’t happen to
have any tumours at the moment, a word that carries with it a promise that the
cancer is pretty sure to come back later. You really can’t draw any conclusions
about cancer in general, but there may be some stats available about your particular
type and stage of cancer.
So, in order for the official cancer folks to think I’m
cured, I need to live 5 years after my diagnosis. It has barely been 6 months.
So I’ll be waiting a while on that. And anyway, some folks are now more
interested in “progression free survival” which is not only being alive, but
not “progressing” during that time – getting new tumours, or having your old
ones grow. You also hear about disease-free survival, which is having no
symptoms and no signs of tumours on your scans, and event-free survival, which
is not having “events” such as needing a surgery, or even reporting a
particular pain. There seems to be a belief that three years of disease free
survival after melanoma means you can relax, it’s not coming back. I guess for
me the clock on that has only recently started, but I’m getting ahead of
So, according to the current definition of cured, nobody
gets cured of what I have, because the people diagnosed 5 years ago and earlier
are the only ones whose outcomes are considered, and they pretty well all died.
(I’ve had friends tell me stories of people who died of melanoma 5 and a half
years after diagnosis, making them count as survivors in the cure math, but
not, in the end, surviving it.) So it’s incurable. But in the last 5 years,
they’ve started an entirely different kind of treatment, which works, and
people on this treatment see their tumours disappear and their symptoms stop
and they just return to their regular life. For how long? Well, it’s not
possible to know yet, since the number of people who have 5 years of disease
free survival, or even three, is very small. It seems like a forever cure. But
it can’t be declared one because there just hasn’t been enough time go by yet
to draw that conclusion. And that’s why the medical oncologist says he is
waiting for his patients to die of old age. Only then can he conclude they
never died of the cancer coming back.
over, what is this treatment I was offered? The two drugs Ipilimumab and
Nivolumab. They are monoclonal antibodies. They work by getting your immune
system to remove the cancer. This is entirely different from chemo, which
poisons the cancer and most of the rest of you too. People's immune systems
clear away small cancers all the time. For example, I must have had a
"primary" somewhere on my skin. I never saw it, my doctor never saw
it, so I must have cleaned it up - although unfortunately not before it spawned
off some more cells. That’s normal, a melanoma forms, it gets tidied up. The observation on Wikipedia that people with
unknown primaries do better is probably related to people with unknown
primaries having a proven ability to clean melanoma away. The recent
breakthrough is understanding that when tumours get to a certain size, they
prevent the immune system from cleaning them up – they develop a sort of “cloaking
system” that keeps the immune system away. So these two drugs, one ramps up
your immune system and the other interferes with the preventing so the tumours
no longer defend themselves against (or hide from, or turn off) the immune
system. My body just has to do what it did before and clear it all away.
I am in a study because these drugs are not yet approved in
Canada to be used in combination like this, though each are approved alone.
They have already done studies comparing dose levels of the drugs and found,
rather unexpectedly to me, that people getting different doses have the same
success rate. This study is to see if they have the same side effects.
Personally, I consider that aim secondary to getting me cured, but that's the
technical aim of the study. The side effects from these drugs are all the same
- inflammation and overactive immune responses. That might mean a rash, or
swelling of something. If your eyes swell, that's not as bad as if your heart
swells, or your thyroid. I had to commit to being able to drop everything and
head to downtown Toronto if I get any kind of side effect at all. That means I
can't travel for the duration of the study. The side effects, I was warned, may
also keep me from working or from doing some of the things I normally do. So
far 100% of the study people get side effects, the issue is only how severe
they are. I may end up treated with steroids if they get too bad. As a side
note, I understand that these drugs alone (not counting the time and effort of
doctors, nurses, scan techs, and so on) cost about $200,000 a year. Being in
the study means that the study sponsor, not the Ontario health care system,
covers the cost of the drugs. There’s no cost to me for any of it; my only
expenses have been hundreds of dollars on hospital parking (don’t get me
started), cab and transit fares, and the occasional overpriced food and drink
from hospital food courts.
So far, I’ve been extraordinarily lucky about side effects,
having by far the least of anyone in the study locally. I may have some thyroid
damage, but that’s all. Nonetheless the impact on my day to day life has been
total. Working became impossible – partly because I was constantly going to
downtown Toronto for appointments, and partly because of symptoms I began to
experience as the tumours grew and spread. In less than a week I went from
popping out for a 2 km hike while my Thanksgiving turkey cooked, to being
unable to get out of bed. I spent weeks at a time in bed. I spent almost a week
in the hospital after I got severely dehydrated, possibly because of the liver
involvement messing with my metabolism. I pulled muscles coughing (because my
lungs were full of tumours) and I may also have cracked a rib. I was taking
medications for pain and cough but I was very ill and very weak. I am lucky to
have a devoted husband who has put in incredible energy to give me the support
I needed – looking after me at home, carrying more than his share of work both
at home and in our business, and driving me to all those appointments. I don’t
know how I could have coped without him. I also have a close corps of family and friends who cheered me up over email and Skype, and took care of things I couldn't take care of. I had to learn to let people look after me, which was a very difficult lesson. I haven't mastered it, but I've made some progress.
Then the treatment started to work. The way this shows up is
in the form of pain. The immune system starts to attack and clean up the
tumours. This is a good thing, but it involves swelling and increased blood
flow to the area and such, which manifests as pain. A lot of pain. But it was
weird, because we all knew this was probably a really good sign and reason to
be optimistic and hopeful. Within three weeks of the first treatment, my
symptoms began to improve. I had a setback with some hip pain that turned out
to be caused by tumours in my hip and leg bones. It’s unusual for melanoma to spread to arms
and legs, and more unusual than that to discover it from pain. It is typically discovered when your leg bone
collapses underneath you and you need emergency surgery with plates and pins
and things. They were worried I would break my leg, so I got radiation
treatment for a week to give those tumours specifically a hard knock back. The
radiation techs asked every day “you have pain meds, right? You have enough?
You need a refill?” and within a few days I found out why. The pain when the
radiation starts to blast the tumour apart, and the immune system comes
sweeping in to clean it up, is, well, memorable. And I know precisely how long
it takes my opioids to start working from when I take them, as a result.
Another diversion, this one on metaphors and visualizations.
I reject the war/fight/battle approach to diseases and to cancer. My leisure
time involves a lot of outdoor activity – bike rides, wilderness canoe camping,
hiking, that sort of thing. When you’re trying to ride your bike up a long,
steep hill, you are not in a fight with the hill. You are not battling the
hill. It’s simple: the hill doesn’t even know you are there. The hill doesn’t
care. The hill isn’t steep at you, for you, because of you. It just is. When
you’re paddling a canoe into the wind, the wind isn’t blowing in some sort of
spiteful attempt to keep you from that amazing beach campsite. The wind doesn’t
know you’re there, the lake doesn’t know you’re there. You can “win” or “lose”
– get to the top of the hill, make it to the campsite, give up and turn around
because there isn’t time to do it now – but the hill or the lake doesn’t win or
lose, or even engage in this alleged battle in any way. Things can be very
difficult without being a fight, a battle, or a war. In the same way, cancer
isn’t a side in a fight. My tumours aren’t trying to kill me. They aren’t
co-ordinating with other people’s tumours. There is no communication or
plotting between elements of my disease and elements of someone else’s disease.
Neither cancer in general nor my tumours in particular will feel some sort of
sting or loss when I “win” and they won’t exult if I “lose”. They aren’t battling
me, and it doesn’t really make sense for me to battle them. I can’t kick cancer’s ass because cancer is heartless,
mindless, assless. My metaphor is more about cleaning up. Something is wrong in
my body – things are growing where they shouldn’t, and this can be very
dangerous, don’t get me wrong. Growths that squeeze vital organs keep them from
working. Growths that eat a hole in my leg bone can result in the bone
crumbling and collapsing underneath me. This needs to be fixed. This needs to
be cleaned up. My immune system can do that, but it needs some help, and the
medication is providing that help. I can imagine the lumps and growths being
taken apart and tidied up by white blood cells and other immune components of
my body. When I feel the pain of a flare that indicates a response is
happening, I focus on imagining that process in action right where I’m feeling
the pain. I take care of myself, push myself hard when I need to, ask the right
questions, report the right details to those who need them, and do the work of
getting better. It is hard, really hard, and I do contribute to my recovery, as
well as being a very lucky person.
By December I really could tell I had turned a corner. I
wrote in a family email update:
treatment is in the books and the fourth is scheduled for the Thursday before
Christmas. My first scan since the treatment began will be in early January,
and then I guess I will have an appointment where someone will tell me what
they see on the scan. My expectation is that they will see dramatic shrinkage
if not outright disappearance of all the growths and lumps I was told about
through the fall, putting me in the 80% of study members who “respond” to the
treatment. From my point of view, I ask “where is my cough?” – totally gone.
“Where is the belly pain at the bottom of my ribcage?” – totally gone and they
can poke my stomach in an exam and it just feels utterly normal like before I
was sick. “Where is my fatigue?” – gone. I am not napping. I am out of bed
every day and out of the house if I need to be. I can go shopping. Heck,
yesterday I went to Costco. That’s right, Costco in December. That probably
tells you all you need to know about my energy levels.
We then had
Christmas and New Years and I had a scan and met with my doctor – the grin on
his face as he came into the room told us all we needed to know. He actually
took us out of the exam room to see my before and after scans on a monitor. As
I wrote to family, quoting him:
the lungs, this and this and this, these are tumours. These are blood vessels
don’t worry about those. That is a rib. Now over here see? The tumours are
gone. Here there was a big blob of something, that’s gone. Now down here to the
liver, see how swollen it was? On this side you can see it’s back to normal
size. And tumour here and here, over here now you just see a small shadow in
that place, probably a hole left behind when the tumour was gone.” And so on.
came up with a plan to wean off the pair of pain medications I was using, which
worked, and other than Tylenol for a headache occasionally, I am taking no pain
medications at all. The
radiologist opinion, which came later, is a little more conservative, but uses
the word “disappeared” fairly often, along with “marked improvement” and
“healing”. Overall, the reports show a very good response. Alas, the “whole
body” cat scan didn’t include my hip, so I don’t know how things are going
there. But my overall colour and energy makes it clear that I have had an
amazing response. They don’t see anything new. Everything they used to see is going
question remaining is how long to keep treating me for. We have switched, as scheduled, from Ipilimumab
and Nivolumab every 3 weeks to just Nivolumab every 4 weeks. I have had one and will
get at least one more treatment, then depending on the results of the scans
after those, they might stop or keep going to 4 treatments or as many as 13.
They really aren’t sure how long to treat people for. Some people are better
forever after just one treatment – these are folks with terrible side effects
who can’t have a second treatment. At first they kept treating people who could
tolerate the meds indefinitely, then they decided two years was sensible, then
one year, now … well, we’ll take it as it goes.
essentially side-effect free. I’ve lost a lot of weight: 25 pounds or more
since the surgery, most of it in a single unpleasant month, and I had slowly
and deliberately lost 35 pounds over a few years before that. I am already
starting to regain some of my muscle, lost during all the bedrest. I am
sleeping well too, having finally shaken the effects of a lingering “Christmas
cold.” (It might have been the flu – there was an outbreak, and I couldn’t have
a flu shot this year because of the immunotherapy.) I am cleared to drive
again, since I’m off all my pain meds now, and I can have a glass of wine from
time to time should the mood strike me. My thyroid levels were low, so I’ve
started thyroid meds. They’ve come back to normal on the meds, and I don’t know
if that will end up a life-long thing or not. It’s a pretty minor effect
overall – plenty of women my age take thyroid meds every day. Low thyroid
levels cause fatigue and cold sensitivity, both of which I had in early
January, and which seem to have improved since I started the thyroid meds. I
had been losing hair, not at the levels you see for people on chemo, but
noticeable, and since I started the thyroid meds, that has gone back to normal too. I have enough energy that I could travel to Waterloo for a C++ Meetup in February, my first "public appearance" in perhaps a year.
So that is
where I am. My tumours are dramatically shrunken or gone, and may never come
back. Bone is growing back where tumours ate it. My symptoms are gone. I don’t
know how much longer I will be treated for, or whether more side effects will
still arise, but I can start to build my way back towards a more normal life. I
got better. I was told I had incurable cancer, Wikipedia told me less than 10%
survive it even for 5 years, I could expect to live for just months, and now, less
than 6 months after being told that, I’m better. It’s weird. Wonderful, but
weird. This is like being around when insulin was first being used, or antibiotics.
It changes everything. I should probably have been dead by now and instead I
feel the way I did before I knew I was sick, or perhaps even a little bit better.
to share all of this detail for a few reasons.
- People are
curious – I get emails asking if I’m ok, how am I doing, sending me good vibes
and such from folks who really don’t know what’s happening but know something
is. I would like all of them to know I’m ok now, even though I still can’t
- People are
unaware how much things are changing in the world of cancer treatment and
research. I still shudder to think what would have happened if I hadn’t ended
up referred to the particular doctor I ended up with, and had instead only been
offered the old (useless) treatment. I like sharing the success story so that
other people will know about it.
- It’s a very
happy story and everyone who knows the details is really happy to know them, so
why not share that more widely?
still be less active than usual for a while, but I am working my way back to
being my old self.
Wednesday, 04 January 2017
I had to curtail my activities pretty dramatically in the second half of 2016, even in areas like mailing list participation or answering questions on StackOverflow. I was beginning to wonder if I would qualify for Visual C++ MVP again without conference talks or some of my other usual activities. No-one should ever assume they will be awarded; the program is always changing and our lives are always changing, so anyone can find themselves out of sync with the requirements of a program. However, I'm happy to learn that I have been renewed for 2017 and will continue to be part of this active community.
Looking forward to a terrific 2017,
Friday, 16 September 2016
It has been a very
busy summer for me. Mostly it's been great, with family visits from all over the world and the wedding of my oldest child. But there have been some challenges, too. Without going into details, I've had to cancel plans to speak at (and even attend) CppCon
. This is really sad - CppCon was the largest C++ conference ever when it started in 2014, and has grown remarkably ever since. It's a place where I learn new things, make new friends and contacts, and meet old friends for a wonderful week of laughter, in-jokes, and brain-stretching.
I am hoping that within a few months, I'll be "back in the saddle" again and planning a 2017 full of speaking and learning. In the meantime, I'll be following #CppCon
on twitter, and watching the YouTube channel
for new videos - the plenaries and keynotes get up really fast. If you're not there in person, be there virtually like me!
Friday, 29 April 2016
I've started a C++ column in Visual Studio Magazine. I'm sure you've read plenty of C++ columns in your time - I sure have! I wanted this one to be a little different. So, here's what I've decided to do. For each column, I choose a guidelines from the C++ Core Guidelines, and then explain it. But the twist is that I'm not going through the guidelines from top to bottom - I'm picking guidelines whose explanations require a little language knowledge.
The first column just sets the stage and explains what I'm doing, and gives you a link to the Guidelines. The second, Don't Cast Away Const, explains the guideline, but also the consequences of const-correctness, a typical situation where you might find it hard to stay const-correct when you make a performance tweak to a running system, and the correct use of the mutable keyword. Not bad for explaining a four-word guideline!
I have a number of columns already written and plans to write more. Please check them out and spread the word!
Thursday, 24 March 2016
My latest Pluralsight course is live! It's called First Look: C++ Core Guidelines and the Guideline Support Library
and it introduces the guidelines and why you might want to use them, as well as some preliminary tool support. As always, if you need a free trial, use the link in the sidebar on the right.
Pluralsight courses now have trailers. This is my first course with one and it turned out a lot better than I expected. You don't need a subscription to watch the trailer - just go to the course page,
and over on the right side there are these downward pointing triangles next to time lengths. Click the one for Course Overview which is 1m 49s, and you'll see one entry under it that also says Course Overview 1m 49s.
Click that and the player will open and play the trailer. I did the voice recording, and some Pluralsight elves put together visuals (some are excerpts from demos) around it. I like it! Let me know what you think.
Monday, 29 February 2016
I’ve been hearing that the new search and browse
functionality on Pluralsight isn’t working for everyone, and that the sheer volume
of courses makes some hard to find. So I thought I’d make a list of my current
courses in the hope of simplifying things for those who want to learn something
Visual Studio 2015: Essentials to the Power-User
This is the most recent Visual Studio course and it starts
at the beginning and goes well past what most people know about Visual Studio.
I’m confident that even if you use Visual Studio every day, you’ll learn
something in this course that will make you more productive.
What's New for C++ Developers in Visual Studio 2015 Preview
This course was based on the preview, but works well against
the RTM version of Visual Studio 2015. It’s C++-focused and just shows you what’s
new compared to Visual Studio 2013.
Using StackOverflow and Other StackExchange Sites
Most developers find StackOverflow results whenever they do
a web search for a particular error message, or some API they’re having trouble
using. Many of them tell me that when they try to sign up and actually ask and
answer questions, they have an unpleasant experience. Often, it’s because their
mental model of the site does not match the way it actually works. This course
will show you how it works, so you can get the answers you need and not feel
rejected or hurt by the way these sites work.
Learn How to Program with C++
This course is aimed at people who have never programmed
before. If you’ve programmed, in any language, consider C++ Fundamentals
instead. If you don’t believe anyone can learn C++ as a first language, I’m
ready to argue with you. Modern C++ is a simple and useful language that a
beginner can learn and use well.
C++ Advanced Topics
This course is for the material I couldn’t fit into C++
Fundamentals. It’s presented as a number of things I want you to do, or stop
doing, when you write C++ today:
- Avoid Manual Memory Management
- Use Lambdas
- Use Standard Containers
- Use Standard Algorithms
- Embrace Move Semantics
- Follow Style Rules
- Consider the PImpl Idiom
- Stop Writing C With Classes
C++ Fundamentals and C++ Fundamentals - Part 2
These courses were written in 2011 but hold up well. Here is
where you’ll learn the basic syntax of the language and how everything works,
including templates, pointers, lambdas, and exceptions. Watch both parts to
learn the whole language, then dive into C++ Advanced Topics to round out your
I have other courses – on older versions of Visual Studio,
for example, but these are the “big” ones for me at the moment. I hope this
list helps you to find them. And remember, if you need a free trial, use this
Subscribe, then Start 10-Day Trial, and you’ll be all set.
Friday, 26 February 2016
longest-serving employee, Joyce MacDonald, has worked her last day with us.
She’s moving away to the other side of the country, where I don’t doubt another
firm will soon find themselves blessed with her skills. Joyce joined us full
time 16 years (and one month) ago, and had been working part time for us long
before that. From the very beginning, every task that she took on she
transformed and improved. We needed data entry when we were building a website
for a local real estate firm; she took the procedure for adding a listing and
kept streamlining it – open these three files at once, copy this once, then
paste it here, here, and here – until she had cut the target time in half and
then in half again. Later, she helped to develop our Quality Procedures and to
bring order to chaos in our software development process as we moved to agile
and changed our client mix. She helped our developers to become more organized,
to report progress more thoroughly, and to test before committing or deploying.
She trained our clients to think about what they really needed and to consider
the consequences of what they were asking for. I have never met anyone who
cared as much about the success of the firm as Joyce. We’ve employed dozens of
people who’ve done good work, worked hard, and cared about our clients. The
majority of them, like the majority of people everywhere, never gave much
thought to whether the company was doing well, except perhaps to wonder or
worry if their job was safe, or if there would be money to spend on perks. I’m
not complaining; I think that’s perfectly normal. Joyce is wired differently:
it’s fundamentally important to her that things are done right, that the client
gets what they want, and that the company makes a profit. That’s what just has
to happen, and it’s generally what she’s able to make happen.
started doing data entry and office administration but quickly moved into more
complicated tasks. She’s been managing projects and client interactions for a
long time. She also made sure that people did what they were supposed to do
when they were supposed to do it, and kept everyone informed and contented. If
you’ve ever called our office, you’ve probably talked to her. She’s probably
reassured you about something and made sure it got taken care of for you. She
has her PMP now, which formally recognizes how well she manages projects, gets
requirements out of customers and organized in a way we can all understand, and
builds appropriate processes for developers to follow. She’s taken on the challenge
of managing not just seasoned, well-behaved, adult developers, but also
students and our own grown children, who are not always easy to control. Let’s
just say they meet their deadlines for her .
Joyce to the west coast hasn’t been a total surprise for us. When we came back
from the epic Pacific trip, she got the opportunity to move and though she
delayed it, we rather knew it was inevitable. Over the past 6 months or so
we’ve adjusted the balance of work we take on so that our remaining clients
will be those I can handle client support for, and whose projects I can manage.
(Brian will continue to be an architect, developer, and star debugger who
doesn’t have to talk to the clients.) For our clients, nothing much will
change. For us, there will be a hole in our lives – personally and
professionally – that will take a while to settle down. When she joined us,
Joyce was a neighbor (I believe we first met in the summer of 92), and for a
long time she walked or rode her bike to work in the office attached to our
house. Our kids have grown up together. When stuff happens, Joyce is the one we
talk it through with – business and not-business. We were able to go to the
other side of the world for five weeks, often with no internet, knowing the
company would tick along fine without us. It’s going to be an adjustment not
having her with us every day, not having her to count on. Still, we know why
she’s moving, and we wish her all the best in this new phase of her life.
you’ve found this entry as part of due diligence in a hiring process, let me be
clear: Hire Her. You won’t regret it.
Monday, 07 December 2015
The first keynote at CppCon this year was Bjarne Stroustrup (who invented the C++ language) announcing the C++ Core Guidelines. They are on Github and once he announced them, as Herb Sutter reported in the second keynote the very next day, they quickly became a trending topic across all languages. Here is a description of the guidelines from there:
The C++ Core Guidelines are a collaborative effort led by Bjarne Stroustrup, much like the C++ language itself. They are the result of many person-years of discussion and design across a number of organizations. Their design encourages general applicability and broad adoption but they can be freely copied and modified to meet your organization's needs.
The aim of the guidelines is to help people to use modern C++ effectively. By "modern C++" we mean C++11 and C++14 (and soon C++17). In other words, what would you like your code to look like in 5 years' time, given that you can start now? In 10 years' time?
The guidelines are focused on relatively higher-level issues, such as interfaces, resource management, memory management, and concurrency. Such rules affect application architecture and library design. Following the rules will lead to code that is statically type safe, has no resource leaks, and catches many more programming logic errors than is common in code today. And it will run fast - you can afford to do things right.
To me, these guidelines are the key to getting across my fundamental message that C++ does not have to be hard, scary, complicated, or dangerous. The language may still say “it’s your foot!” but the guidelines, and the tools they can drive, are quite the opposite.
You probably know that Visual Studio has a static analyser built in. (You should, anyway, I’ve blogged about it.) It will catch things like this:
int* p = nullptr;
*p = 10;
But it doesn’t mind things like this:
int* p2 = arr;
Two lines, two violations of the guidelines – I’m not initializing any of the elements of arr, and then I am using its address as a regular old pointer. Now, there’s nothing wrong with regular old pointers – some people have got quite a hate on for them with the rise of genuinely smart pointers, but pointers are fine. Using pointers to control lifetime isn’t fine, because it’s impossibly difficult. But pointers themselves are fine. What’s not fine here is the “decay” of an array into a pointer – folks from other languages don’t expect that at all, and some marvelous bugs have hidden behind this simple bit of helpfulness from the compiler. So there’s a guideline that says don’t do that. Specifically:
(I’m giving you a picture of code because if you want to copy and paste you should go to the live, always updated, guidelines on github.)
This guideline is part of a “profile” – a particular set of rules that are designed to be enforced and that are supported by tools. Well, when I say tools I might be overstating the case a little. There’s just one tool at the moment, but that could be enough!
This tool, C++ Core Checker, is on the NuGet Gallery. You don’t have to get it from there though. You get it, and use it, from inside Visual Studio 2015. Any version will do. If you don’t use Visual Studio normally, just get and install the Community Edition, which is free and is ok to use for commercial purposes, from https://www.visualstudio.com/ . (Need the fine print? if you’re using it as a person, you can do whatever you like. If you work for a company with less than 250 PCs and less than a million dollars US in revenue, again you and up to 4 of your coworkers can use it for whatever you like. If you work for an “enterprise” company then any and all of the employees can still use it for learning purposes or to work on open source.) Note that Visual C++ isn’t part of the Typical install, so you’ll need to choose Custom and select Visual C++:
So once you have Community Edition or some edition of Visual Studio, make a console application and put in the two bad lines of code. Build it and then also run static analysis on it (On the Analyze menu, choose Run Code Analysis, On Solution.) You won’t get any warnings or errors. That’s your pre-guidelines life. You’re doing something inappropriate and nobody is telling you.
Now, add the checker to your solution. This is solution-by-solution, not a change to how Visual Studio does static analysis. On the Tools menu, choose NuGet Package Manager, Package Manager Console. In the console window that appears, type Install-Package Microsoft.CppCoreCheck and press enter. You will see output like this:
Attempting to gather dependencies information for package 'Microsoft.CppCoreCheck.14.0.23107.2' with respect to project 'ConsoleApplication1', targeting 'native,Version=v0.0'
Attempting to resolve dependencies for package 'Microsoft.CppCoreCheck.14.0.23107.2' with DependencyBehavior 'Lowest'
Resolving actions to install package 'Microsoft.CppCoreCheck.14.0.23107.2'
Resolved actions to install package 'Microsoft.CppCoreCheck.14.0.23107.2'
Adding package 'Microsoft.Gsl.0.0.1' to folder 'c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\packages'
Added package 'Microsoft.Gsl.0.0.1' to folder 'c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\packages'
Added package 'Microsoft.Gsl.0.0.1' to 'packages.config'
Successfully installed 'Microsoft.Gsl 0.0.1' to ConsoleApplication1
Adding package 'Microsoft.CppCoreCheck.14.0.23107.2' to folder 'c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\packages'
Added package 'Microsoft.CppCoreCheck.14.0.23107.2' to folder 'c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\packages'
Added package 'Microsoft.CppCoreCheck.14.0.23107.2' to 'packages.config'
Successfully installed 'Microsoft.CppCoreCheck 14.0.23107.2' to ConsoleApplication1
This changes your project settings so that analysis runs this Core Checker for you. Repeat the analysis step and this time the new tool will run and you will get output like this:
------ Rebuild All started: Project: ConsoleApplication1, Configuration: Debug Win32 ------
ConsoleApplication1.vcxproj -> c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe
c:\users\kate\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(9): warning C26494: Variable 'arr' is uninitialized. Always initialize an object. (type.5: http://go.microsoft.com/fwlink/p/?LinkID=620421)
c:\users\kate\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(10): warning C26485: Expression 'arr': No array to pointer decay. (bounds.3: http://go.microsoft.com/fwlink/p/?LinkID=620415)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
Where it says "type.5" and there's a link, that's to the specific rule in the "type" profile that this code breaks. And where it says "bounds.3", the same - I showed a picture of bounds.3 up above.
Isn’t that great? Come on, it’s great! The tool will add more rules as we move through 2016. I’m going to have a lot more to say about the Guidelines as well. But this is a great place to start.Why not point it at some of your own code and see what happens?
© Copyright 2018 Kate Gregory
Theme design by Bryan Bell
newtelligence dasBlog 2.3.9074.18820
| Page rendered at Sunday, 24 June 2018 10:49:01 (Eastern Daylight Time, UTC-04:00)
On this page....
Pluralsight Free Trial
Click Start a FREE 10-Day trial