
Your Progress As A Programmer Is All Up To You - ks
http://thecodist.com/article/your_progress_as_a_programmer_is_all_up_to_you
======
stdbrouw
I think it's possible to agree with both this post and with the other
programmer he's railing against.

Yep, I know that if I don't take care of my own training, it's just not going
to happen, most companies are not so altruistic that they'll hand me
everything on a silver platter.

But at the same time, a company that never hires people unless they already
have the exact skillset they're looking for, a company that fires people on a
whim because priorities change, and a company that provides zero incentive for
people to keep learning (e.g. with 20% time or a willingness to let employees
experiment with new tech) – well, those are not companies I want to work for.

~~~
SheepSlapper
You hit the nail on the head. It's the programmer's responsibility to stay
relevant, not some company's. But the _best_ companies will take an active
role in ensuring their programmers stay up to date (since it's in the
company's best interest, too).

~~~
thedudemabry
I've been just dumb lucky in that the companies I've worked for have been very
supportive of individual engineers’ efforts to learn new things. Whether
through funding conference attendance and/or travel, or by simply giving
employees time during work hours to learn on their own. But the biggest gift
my past and present coworkers have given me was demonstrating that learning
outside of the job is an essential component of doing great work.

It wasn't until my first few times sitting in on hiring discussions that I
encountered professional engineers who didn't take an outside interest in
expanding their toolset.

There is absolutely nothing wrong with them. They are fantastic folks who are
very good at their chosen profession. And for the majority of professions (I
only have anecdotal knowledge of this, but I would love to hear examples from
other fields) that is enough to ensure stable employment. But I can't imagine
the fear, uncertainty, and doubt that accompanies company layoffs and
downsizing when you haven't played outside of your comfort zone in a while.

This is just a long-winded way of saying, “great summation, SheepSlapper!”

------
JackMorgan
I have been writing and rewriting a post for the better part of a year on this
same thing. I think I've finally accepted that a majority of programmers
actually are not interested in learning new things.

I got into software because there was so much to learn and explore, so this
realization still baffles me. Why on earth would someone want to do this job
and not want to learn new things? It's like a baseball player who hates being
outside.

Not only that, but often times I'm faced with the prospect like the author's,
where people I've worked with actively prevent those around them from learning
new things on the job. "No, don't write this standalone module in Python, our
standard is PHP; it was good enough 5 years ago, it's good enough now!" (in a
four man shop).

As someone who loves constantly learning more, it's suffocating to be around
people who are so paralyzed. I simply cannot fathom the fear that drives
someone to say to the offer to learn something new on the job, "no thanks, I'm
happy becoming obsolete, and you can't learn it either, because I might have
to one day support it, and I'm not interested in learning anything new!"

~~~
zzzcpan
No, they are interested, learning is fun for them too. But not everyone is
interested in learning the same things you are. For me, for example, there is
absolutely nothing more boring, than some new fancy framework, API or a
language. I am, however, very excited to try things that might reduce amount
of bugs and potential security issues in my code, make it cheaper to run,
cheaper to support.

~~~
JackMorgan
So long as you don't have to learn a language, API, or framework to do it...
I'm not sure what things are left you could do differently? Your list excludes
all technology-related changes, so the rest becomes meta-activities: pair
programming, documentation, planning, a good nights sleep, etc. Those are
excellent, but I'm curious why are you willing to change those other areas but
are resistant to technological ones?

That irrational fear of technological change is exactly what I'm talking
about. There's a joke around some of my friends, "What's the best way to get a
mediocre .NET programmer to stop talking about safety and reducing bugs? Bring
up the safest most secure .NET language that exists: F#."

As the joke goes, most of these developers are confronted with the reality
that they don't really care about bugs enough to even bother learning a
different fully supported .NET language that will find entire classes of bugs
automatically and is orders of magnitude safer than C# and is faster to write.

Most people when they have told me they "care about bugs, not languages" have
been just saying something nebulous to kill the discussion and defend their
life choices.

I'm not trying to be snarky to you, I'm actually very interested to know what
changes you've made that are not technological to reduce bugs, fix security
holes, etc. I'm always on the prowl for such stuff, and this sounds
intriguing.

~~~
RogerL
Let's see, I'm learning about unscented Kalman filters, moving object tracking
in computer vision, PCA, and more. I'm learning about the problem domain that
I'm working in. I have no interest in learning yet another API unless I
absolutely have to, because it isn't really interesting knowledge that I have
to call the fibble() function before calling xacxtyor() in this poorly
documented API. That's not learning, it's the accumulation of facts.

Of course, sometimes learning new API/languages _enables_ meaningful learning,
and I'm all for it. Want to quickly get a handle on Kalman Filters? Probably a
lot faster to put something together with numpy (say) and experiment on the
REPL than to program it in a performant language like C or C++, even if that
is where it will eventually end up running in your project. So, yes, there's a
great reason to learn those languages (or Julia, or whatever).

But the endless march of APIs is pretty tiring to me, and I do everything I
can to isolate myself from that. I'm pretty happy writing my C++, and Python
(2.7, btw), while trying to solve rather hard problems.

Another way to put it - what I value is intellectual work, not
memorization/puzzling things out. Learn a new math technique? Awesome! Learn a
byzantine set of calls I need to make to make a widget widge on the screen?
Not so much.

~~~
JackMorgan
Well it sounds like you have no qualm learning the right tool for the job. I
would consider numpy to be an API, but the difference here is it's one that
helps you with your domain. If widging widges was your domain I'd expect the
professional thing to do would be for you to learn that API. I'm talking about
people who in your job wouldn't bother with Julia or numpy and would just
trundle along with C.

------
ryanobjc
Interesting article, sounds like the author has really taken charge of their
career and managed to do well.

Now, what about an alternative world where he did not "get oo" or perhaps a
lifestyle where he had children and no time at work to learn. Or one of these
newer not quite as successful software companies which has no money and no
extra time.

Keeping up with new tech requires time, and money. Start ups provide neither
of these. Even bigger "start ups" attempt to keep up the illusions of a
smaller company including mandatory over time and no extras (eg tuition
reimbursement, sabbaticals, more than 2 weeks of pto a year, etc).

The other thing, computing as a career is quite a bit harder, more complex,
and highly competitive than when the author had their formative years.

The real rallying cry is how do you make an industry that respects career
advancement?

~~~
jasonlotito
> where he had children and no time at work to learn.

Using children as an excuse is laziness. It might not be as easy, but having
children does not preclude you from learning new things or advancing yourself.
It requires effort and planning, but frankly, using children as an excuse is
wrong.

> Keeping up with new tech requires time, and money.

It requires time and effort. Money is rarely an issue.

> Even bigger "start ups" attempt to keep up the illusions of a smaller
> company

I'm going to assume that you just have bad experiences, because this is hardly
my experience.

------
zzzcpan

      > Today keeping up is a ridiculous job sometimes. 
    

Even though he advises people to keep up, he actually kind of admits how
ridiculous this is today. It's not possible to keep up anymore, there are just
too many people creating too many things, like languages, frameworks,
technologies.

~~~
emgeee
I think what he's trying to get at is to stay on top of large industry changes
in general. Even though there are many frameworks and libraries being created
everyday, it's still reasonable to keep informed about the ones that have a
substantial amount of traction.

~~~
zzzcpan
What kind of large industry changes are we talking about?

~~~
chipotle_coyote
I don't know if I'd call them "large industry changes," simply because it begs
the question of how one defines "large" and "industry." But I know personally
I'm facing some frustration as a web developer in my mid-40s due to how much
the concept of _web developer_ has become an accelerating target, not merely a
moving one. It's only been over the last couple of years that I've started
being genuinely concerned that I'm falling behind, but "we're looking for
someone who knows Python _and_ Ruby _and_ Coffeescript _and_ AngularJS _and_
MySQL _and_ MongoDB _and_ has previous experience scaling web sites to ten
million hits a day" is becoming de rigueur in Silicon Valley.

I don't consider myself too old to learn new things, but there are certain
things that are difficult or even impossible to learn noodling around at home
-- and even in this Show Me Your Github era, professional experience counts.
I'm not sure I'm ever going to be given the _chance_ to learn how to scale web
sites to ten million hits a day. I agree with The Codist that as programmers
we really are responsible for our own ongoing education, but I'm not convinced
that's always sufficient.

------
amenod
I agree with poster about the general idea (every programmer should stay in
touch with development. However, I have a distinct impression that he likes to
stay at the _very edge_ of technology advances:

> I was writing web applications when I first heard of Ajax (a few months
> after the term was coined) and I started using it; again I wound up teaching
> my teammates about the new thing first. Sadly it scared the architecture
> team who thought I had bought some new technology without approval and
> wondered if it was supported. None of them had heard of it (since they
> didn't pay much attention) and when I told them it was just Javascript they
> were only barely mollified.

I can imagine being an architect and having a programmer like that, bringing
up every hip thing he encounters, just because it is cool and new... Probably
not even considering all of the ramifications. Yeah, sure, AJAX is here to
stay (as we know now), but how many "perspective" technologies are now long
dead?

I like staying a bit further behing the edge. I follow the direction of
technology but I use it only when it is proven and supported well enough.
Well, usually. :)

------
fleshweasel
"You might learn useless stuff. But learning is never itself useless." Great
article. Thanks for posting.

------
arms
Terrific post. This is exactly the type of individual I want to work with -
someone who recognizes that they're in charge of their own advancement, and
doesn't lay blame on any outside factors. As developers/builders/hackers we
are ultimately responsible for our own success or failure.

~~~
adamredwoods
i disagree somewhat.

the article was a bit heavy on the narcissism, i wouldn't want to work with
such a person. i'd rather work with the Brazil-esque Robert DeNiro type:
"Listen, kid, we're all in it together."

~~~
TulliusCicero
It has to sound narcissistic because he's using himself as a successful
example.

------
krob
I see it this way, the better the company you work for, the more
responsibility they will generally have towards feeling you need to stay up on
education and possibly provide opportunities for you to stay educated in the
field you're paid to do. The poorer the quality of company, and generally the
more you have to do on a regular basis as the primary individual to do your
job, the less chance you will have to learn new technologies. Unless your
company feels external pressure for you to pursue these new tech's you are on
your own. Small shops with bad scheduling will make it so you are unable to
schedule time for new technology stacks. You inevitably end up pigeonholed to
stick with what you always use.

I think ultimately, many people in the industry, they only get to learn new
tech when they leave for their next job. The pressure is momentarily reduced
while they learn at their new job.

Just my 2 cents.

------
mwfunk
This is absolutely true, at least from my perspective. All of the programming
jobs I've had in my career have been for medium- to freaking-huge companies,
and most of my projects at those jobs have required me to do a ton of self-
teaching to get up to speed on a bunch of technical (or scientific, or
mathematical) stuff that I had no previous exposure to, in order to get my job
done. On only one occasion did I ever get any training for anything, and that
was just for two days.

I guess that's a combination "back in my day/get off my lawn" statement, plus
a little whining, and maybe a humblebrag, but I don't think that's an unusual
story at all for software developers.

I interned at IBM during grad school with a team of consultants that all did
enterprise Java stuff for financial institutions- that was very different. IBM
would frequently send those developers away for a week or more at a time,
multiple times a year, to get training on specific technologies. I'm not sure
how common that is anywhere other than IBM though, or if IBM even does that
anymore. Maybe Google does it? I don't know.

Sometimes I deal with developers who either can't or won't teach themselves
anything, and can't or won't learn by doing. They absolutely need someone to
hold their hand and explain things to them every step of the way, and they
will just throw their hands up in the air and fail before putting any time
into trying to read up on whatever topic is giving them trouble. I don't know
what to attribute this to, so I'm trying really hard to not jump to the
conclusion that they suck or they don't care or whatever. I'm sure a lot of
them do just suck at their jobs and/or just don't care, but maybe some of them
have genuine problems with learning that aren't their fault. The only thing I
can say for sure is that this is a trait that is a major impediment to their
careers and getting their jobs done without sucking up too much of their cow-
orkers' time (as we all know, orking cows requires long stretches of
uninterrupted concentration).

TL;DR Spot on, and being able to develop your own technical skills to keep up
to date and expand your horizons is absolutely critical to being a really
successful developer. You are also the only person that you can count on to do
this for you. You can't really count on any employer, even some mythical ideal
company with bottomless resources that treats each employee as a magical
snowflake, to do this. Even if your company does provide training, it's not
necessarily going to be the training you want or need to receive.

~~~
zzzcpan
I disagree with that and the notion of constantly learning new languages on
your own. I happen to know couple of companies that were unable to find Perl
developers, so they decided to train their own and now they see it as the only
way to hire such developers. What you know is no longer a requirement for
them, just be good at learning things and preferably have a CS degree. And I
see this becoming a norm in a heavily fragmented future of software
development.

------
clmorg01
This is basically the choice I finally had to make for myself over the last
couple years.

It was just three years ago that my main responsibility was maintaining code
on a black & yellow terminal for a VMS server. Another couple years and I
could have easily have been one of those people pushed out of the industry
with no easy way back in.

Although my company has provide an avenue for me to transition to doing things
with the LAMP stack it is still in some sense legacy. It's a large website
base that started over a decade ago.

I have made the choice that I'm done with being legacy and am doing whatever I
can to learn current tech. I will even be willing sometime later this year to
get a new job at a junior level just I can cut loose the legacy code crap I am
tied to. At this point it feels mostly like a bunch of anchors holding me
down. I want a new job where I can learn from the people around me and truly
be focused on my direction.

~~~
actsasbuffoon
When I was first breaking into the field I was also forced to work with legacy
mainframe code. It was a nightmare. The code was horrible, the pay was low,
and we had no respect. I spent a little over a year learning Ruby and
JavaScript in my spare time, joined a startup, and have had a happy and
successful career in the many years since.

I can only speak for myself, but the transition improved my life immeasurably.
I can't even imagine how different things would be if I had stayed. Keep at
it. If I can do it then you can too.

------
higherpurpose
If I were you at this point (actually a 2-3 years ago) I would already
starting going back to using Java for Android, too. iOS will be on a billion
devices in 3 years, but Android will be on 3 billion, so the impact is much
greater, and probably the revenues, too.

------
fit2rule
I'm in the same boat as the author - been developing software professionally
since the 80's, and have navigated my way through a swamp of different
platforms and frameworks and languages, oh my!

I'm currently in the state of mind that the true way to stay ahead of things
is to keep studying, every week, something new. Yes: every week. I take at
least 15% of my work-time and use it for self-enlightenment -whether its
learning how to put the LuaVM somewhere, tinkering with RethinkDB, sharding my
mongo's, or whatever. Constant change is the only constant in this industry;
one must change oneself, constantly, to catch up.

This isn't so easy to do if you're not into enlightenment, alas.

------
ZeppelinDePlomo
If it has nothing to do with a way to increase production, then the company
has no business by investing in you learning that. BUT, if the company can
benefit from you learning those skills, then it could be a missed oportunity
not give you the resources to do it (learning it while on the company's time).

Of course it's all a product of culture and supply-demand (systemic), if there
are enough great programmers that are willing to learn everything on their own
time, then of course it will become the norm that programmers _should_ learn
everything on their own time. And, of course, that's great for the employers.

~~~
vitd
I get what you're saying, but at the same time, how can a company possibly
know whether any given technology is useful to them if they don't have anyone
evaluating it?

------
6d0debc071
You may as well say that your job advancement is your responsibility and not
your employer's. And it would be true, strictly speaking you're rarely owed
promotion - even if you perform incredibly well, there are no guarantees.
However, someone could still not wish to work in a dead-end job.

It feels to me that that's the sense in which the young man's comments were
meant. It doesn't seem unreasonable in that light. So the compensation he'd
like isn't entirely monetary in nature, that's hardly unique.

------
alashley
I've talked to other developers and what I've understood is that the best way
to learn new stuff is to get paid to do so. I'm just wondering how you keep up
with stuff if your job demands so much out of you that you can't keep with
with anything besides your main stack.

------
pramodliv1
I reckon that learning Maths, Statistics, Electronics or any related other
field would make you a better programmer than having a superficial
understanding of a plethora of technologies.

I've devoted this year to learning some Statistics. Will check if my
hypothesis is true in a few months.

------
maerF0x0
Thats why you work for a company where your skills are the product. Everyone
loves selling a better product, so you'll get upgraded... If you are a cost
center, then you'll be nicked and cut and eventually hacked at until there is
next to nothing left.

------
dinkumthinkum
Yeah, I think this is fine. But is it also not irritating to think that
following every web mvc framework fad is really "keeping up to date" with
programming? This seems to be a very common view and I don't think it is any
less irritating. :)

------
geebee
I agree completely with this blog post, though honestly, _to me_ it makes the
field sound pretty grim. I highly recommend you follow the link to the
"technology steamroller" (earlier post by same blogger).

"If you don't keep learning, keep reading, keep improving your skills
eventually that nasty steamroller behind you will flatten you permanently.
Then your career is likely over."

and

"And that clanky monster breathing down your neck has an endless supply of
fuel."

Egads. Not blaming the messenger here, he's right. It's a tough field. So the
pay is extraordinary, right?

[http://money.usnews.com/careers/best-
jobs/rankings/the-100-b...](http://money.usnews.com/careers/best-
jobs/rankings/the-100-best-jobs)

Take a look at these jobs, and in particular, look at the pay in higher salary
regions. The best job, software developer, earns 116k a year on average in San
Jose.

The average registered nurse earns 122k a year in San Jose. The average dental
hygenist in SF earns about 106K a year. Nurse practitioners clock in at 125K a
year.

There are all kinds of ways to interpret this data, and in the end, I'm
talking about the greenness of the grass somewhere else. Not that I wouldn't
welcome comments about these comparisons, I just want to make it clear that I
acknowledge these other fields come with their own stresses and challenges and
barriers to entry (and I don't object to good salaries in these fields at
all). And everyone has to keep learning...

But is there a steamroller that threatens to make dentists obsolete, and do
dentists have to bet the farm, so to speak, on whether to learn "enterprise
java beans". It does seem particularly relentless (and difficult to predict)
in software, and the career stakes are very, very high.

I think programming can be a wonderful career for some people. I think the
main reason I pay so much attention to this sort of thing is that I often
think about pay and work conditions for software developers within the context
of claimed "shortage", as this is frequently discussed (and until recently,
often accepted without question) in the mainstream media.

Judging from this informative blog post, it takes a very unique wiring to
really thrive for a career as a software developer. Can we really say there's
a shortage of people willing to put themselves in the path of a steamroller?
(The author of the blog post in no way made this claim, this is just a
question I'm turning around in my own mind).

------
michaelochurch
_The biggest issue I had with that comment is: its your responsibility as a
programmer to keep yourself educated and up to date, not some employer 's._

I agree and disagree. It's a moral responsibility of the employer. Work takes
up such a large portion of a person's time and energy that if the company
isn't invested in the employee's progress, he owes that company nothing. My
work ethic is strong as hell, but if I get the sense that management isn't
interested in my progress, I slack as a matter of principle. If your manager
isn't looking out for your career and you put more than about 10-15 hours per
week in on your assigned work, you're just a chump. (In the MacLeod analysis,
a Clueless.)

That said, expecting your employer to manage your progress and education is
unreasonable, because no company can possibly account for the variations in
peoples' abilities and desires. Even if your employer is genuinely well-
intended and wants you to advance-- let's ignore the 80% of companies that
aren't this way-- your company will figure out where you should go much later
than you will. That's why open allocation is the best solution: the workers
can figure out what's worth working on faster than central/upper management.

So, yes, it's a moral responsibility to the employer to give the employee time
and resources to look out for her career (and, if it doesn't, engineers should
slack). However, for the employee to put the self-executive responsibility of
picking out what to learn on the company is, in practice, an irresponsibly bad
idea.

 _By my third year I saw the microcomputers were going to be the future and
wiggled my way into the group that worked with them._

The problem is that most modern companies have such mean-spirited, insane
policies regarding performance reviews and internal transfer that internal
mobility is pretty much impossible in them. At a closed-allocation tech
company, the only time you can realistically get a transfer is when your
performance history is in the top-10%-- in which case, lateral transfer is a
terrible idea anyway, because you should wait for the promotion instead of
restarting the clock. Closed allocation and Enron-style performance reviews
are all about inhibiting mobility, i.e. keeping the poors in their place.

 _But once you discover you are obsolete it 's too late. Assuming your
employer will retrain you is a fool's pipe dream. These days employers may
drop you, your job, your projects, or even the whole company without much
notice, and then you have to find a new job. Expecting them instead to retrain
you is not going to happen._

This is why I hope to see a French Revolution-style uprising. Silicon Valley
looked like a way out, a "middle path" between serfdom and violent revolt. Now
that that middle path is closed due to the VC good-ol'-boy network, I think
that a (probably global) class war is just an eventual necessity. It may come
next year, and it may come in 50 or 100, but I hope that it's the last major
war humanity has to endure.

 _In programming you need to look forward because the only thing behind you is
that nasty steamroller._

Honestly, I get the feeling that this guy was very lucky. He had the autonomy
to pick new technologies _and he picked winning horses_. Imagine what he'd be
writing if, instead, he'd learned Blackberry app development. Or, what he'd be
writing if his manager, long ago, had fired him for attempting the transfer to
the microcomputer team (possibly forcing him to take a suboptimal job due to
financial pressure, with long-term effects on his career). He should at least
attribute some of his success to having been luckier than most engineers.

