Don't Call Yourself a Programmer
kalzumeus.com
kalzumeus.com
Put a backpack on and you can walk into any building at any university in the United States any time you want.
First, the nitpicking: Technically you can't get into Harvard's excellent libraries without actually (a) being a Harvard student, or (b) working for Harvard. (And if you're a programmer, I'm not sure which of those options is going to prove more expensive.) But, of course, the rest of Harvard is open to the backpack-wearer, and MIT even opens their libraries (I'm proud to routinely impersonate a graduate of MIT) so this isn't much of an objection.
On a slightly more serious note: They also won't let you into the labs with just a backpack. If you'd happily accept a sub-market wage to be taught laboratory research techniques, in a piecemeal and haphazard fashion, by sleep-deprived world experts equipped with state-of-the-artish equipment, engineering graduate school is the game for you. And I did kind of enjoy working in the lab, just not enough to keep that as a career. It's not that great a career; you have to love it to stick with it forever.
Now, having said that, I cannot re-emphasize this line enough:
After you’ve escaped the mind-warping miasma of academia, you might rightfully question whether Published In A Journal is really personally or societally significant as opposed to close approximations like Wrote A Blog Post And Showed It To Smart People.
All my journal publications mean nothing compared to the stuff I've scrawled in the margins here at HN.
In a literal sense, no, that's not enough. In a practical sense, if you're serious about doing research and have the necessary background to be able to do good research, finding a faculty member who will invite you to join their group as an unpaid "research assistant" is trivial.
But I come out of experimental physics, semiconductor engineering, and biology, where "the necessary background to be able to do good research" generally translates to "you have the kind of lab skills training that you can only get by getting a Ph.D. in a lab just like ours, plus you know how to write (or at least contribute vital portions of) successful grants to pay for the equipment you'll be using and the reagents and parts and live animals that you'll be consuming as you work". The thing is, lab benches are expensive, outlandishly expensive in many cases, so you'll have to earn your spot at that lab bench by outcompeting whoever else might want it. The net result is that, yes, with a modicum of talent you can probably always be an unpaid research assistant, but the practical difference between that and a full-time career in research is just a few thousand dollars in salary. ;)
(Or you can learn to build scientific equipment out of hardware found on the side of the road. This can work well, if you choose your field carefully.)
Now, in a field like math or CS where adding you to a research group may require only the occasional spare chair to park you in and a modest 5% increase in the coffee budget: Absolutely, you can dabble in university research as much as you want. This is one of the charms of such fields. Didn't Erdös run his entire career out of spare chairs in other people's offices and apartments? And, of course, MIT is legendary for the excellent work done by people hanging around Tech Square snarfing up spare CPU cycles.
It hadn't occurred to me, recently, to have such low standards for hanging around in a lab. ;) The novelty wears off, you see.
EDIT: just to summarize for the audience, I believe cperciva and I are in agreement with Patrick that it's easy to flawlessly impersonate a university student for free; We are debating the extent to which one may also impersonate a junior professor. ;)
As for impersonating a junior professor: I wander into seminars and if anyone doesn't recognize me they just assume I'm from the university on the other side of town. Given my age they usually assume I'm a postdoc; but if I was ten years older I'm sure they'd assume I was a faculty member.
Of course, "faculty member from a different institution" doesn't really get you very much.
Many are driven to stick with it because if they don't, they'll get deported.
At the end of the week, I've already saved the company more than my salary. After a year, I am a critical asset to the company.
After 3 years, I've optimized everything, the ROI slows down, and I move on.
This pattern is not a tragedy. It doesn't crush your soul. It makes you a prized commodity in the business world, with a chance to make a change in your life every few years.
I have usually alternated between 3 years doing this, then 2 years doing startup work. It has given me a much broader base of experience and skill than anyone who stick to one one side of the coin. It also has given me years of experience in large industries (banking, energy, etc.) which I then use to find very real problems to which a startup can be applied.
I have led a very satisfying career, doing this for almost 20 years now.
I'm also not a fan of the "hostage employer" situation. It's a way to get a steady paycheck, but also a toxic relationship that kills you slowly. Better to do the best work you can so that if your client wants to let you go, he can.
If you're doing "boring" corporate work for people you like (and not all "business people" are assholes; it's about half IME) then it can be fun. You do great work for them in a small amount of time, and they pay you well and are happy to have you.
I've met a lot of consultants who can make this work really well. When you choose your clients and don't have a manager-as-career-SPOF, you can develop positive relationships like what you described.
But you sort of need to have other skills, like productivity , delivering extra value to business etc.
Also I don't see why all that is wrong. After all software there is written to make money. And if something helps you do that with ease. It's perfectly OK. You don't have to always take the most difficult path to prove you are good. Doing what is required to 'get things done' is just good enough.
I worked for a mega corp, and redtape and layers upon layers of bureaucracy would pretty much make any project take months instead of a day. Additionally, there were plenty of times where the right arm was working on something and the left arm didn't know about it, so it was also working on the same thing. Finally, the customers didn't really know what they wanted, the databases weren't designed properly by a solid DBA, and really good system architects weren't brought on early in the design, which resulted in an extremely poor working applications.
All-in-all, it was definitely soul-crushing, and I personally have no desire to do it again. YMMV.
It is simply maintaining the behemoth they spent a fortune on N years ago which was over-, under- and poorly designed all at the same time. It is just keeping it working well enough that it can continue being used because as long as it is working there's no reason to rewrite it. The words "rewrite" to an executive mean, "do a lot of work and spend a lot of money to make something we already have."
And there will have been non-FizzBuzz programmers working on that project before you.
I call myself as a programmer because I enjoy programming and do a lot of programming as part of my job.
It is unlikely that I'll get fired because I run the (tiny) company I work for :). and customers seem to like the products we sell in the app stores.
Prior to starting this company, I was a Principal Development Manager,SDE Lead and Software Design Engineer at Microsoft. Describing myself as a programmer or a developer didn't hurt me there either.
This is not to say that Patio doesn't make a good case about the need to focus on value created. Regardless of profession, you have to focus on the value you create. A doctor saves lives, a construction worker builds homes, a pilot takes people home etc.
It is definitely possible for all of them to use MBA-speak mumbo-jumbo job-titles to describe what they do. Alternately, one could be a bit more of a plain-speaking, straight-talking person and just say that you're a doctor or a programmer or a pilot etc.
E.g. "You’re in the business of unemploying people. If you think that is unfair, go back to school and study something that doesn’t matter.)"
I for one have created more jobs than I've destroyed in my coding career. By building a business, as you've done, you're going in the opposite direction of this kind of sentiment.
In the long run those people are usually repurposed into productive work, and there are occasional moments where a programmer will create a massive number of jobs (see: whoever implemented adwords, creating an entire industry of professionals to optimize purchasing them). But that's the exception, not the rule.
The programming that creates job is the kind that sells to consumers. Pretty much any consumer product will create jobs. B2B will eliminate jobs. Most programming is B2B (I think...) because it's easier to take money from other companies.
Examples of programming that creates jobs:
Games
Iphone Apps
Todo lists
Products that make money by showing advertising
Yeah, it totally sucked that the tractor came along and eliminated all those coveted farm hand jobs. Software is the tractor of our time.
> Pretty much any consumer product will create jobs.
Such as the iTunes store that overnight closed pretty much every single brick-and-mortar music store in the world (mild, but only mild, hyperbole)?
> Examples of programming that creates jobs:
Games doesn't automate a physical task, but it's silly to assume that they haven't displaced other kinds of entertainment, say, perhaps, comic books. (I consume neither games nor comic books, so I'm speculating)
Whether an iPhone app has destroyed or created jobs depends on the app, after all it's just a computer program like any other. Take magazines and newspapers: There is NOTHING these businesses would like better than to shut down their printers and distribution divisions. Those are, if anything ever was, pure cost centres. Also, any app that lets you do something from your phone that you otherwise had to call a call centre to do probably isn't exactly a job creator.
I don't know how todo-lists earned a spot on the list, but there is no reason to believe that they (and any other "productivity" app, say, a good e-mail client or calendar app) don't, on the margin, raise the barrier to needing a personal assistant/secretary.
Advertising online is just one example of the lower-barriers-to-everything that the Internet has facilitated. Whether the Internet is a job creator probably depends on who you ask: A self-taught Rails dev or a Borders employee.
EDIT: My point, which took a little while to crystallise, is that at businesses the things being automated away are larger and have individual accounts, so savings/consequences are very visible. When you download NYT to your iPad, they don't fire three guys in the printshop, they need a small fraction of one of them less. When you send an e-mail to your mother, a fraction of a person in the mail- or greeting cards industry is less needed. Etc.
There are economies where are a lot of jobs (low unemployment) but very few wealth and it doesn't seem to stick regardless of what they do. You probably don't want that.
As long as you do your job of creating wealth you can hope somebody else to work at improving wealth distribution process.
Most of programming either creates wealth or conserves wealth, which is a good thing.
Now of course, the economy on the whole is not a zero-sum game. But you don't see that at the micro-economic level. It is rare indeed that a programmer creates new jobs without negative consequences somewhere else in the world...
It might matter what you call the company or the product, however, since that is the brand that the people who pay you are seeing.
Programmers are so literal. Let me try and translate: When Patrick says "don't call yourself a programmer" he isn't necessarily saying "never use the word 'programmer' in the same sentence as your own name". What he's saying is: When someone asks you what you do all day, don't just say "I program... stuff" or "I program in Lisp". What do you program? Why? What value do you create thereby?
In fact I think the former "programming" can give you more social cred--if you program things the other person can't comprehend an immediate use for, it may hurt you. "Oh you're one of those people that don't do anything useful." If they really want to know, they'll ask, and ask for more details if they care.
Of course, I agree in general that when whoring yourself out to the corporate world it's best to make yourself sound as important as possible as long as possible, which is basically what I got from Patrick's post. "Programmer" doesn't contain enough information to make you seem important enough in BigCo. It's fine for scoring social points.
If you were a janitor, you'd tell your friends you're a sanitation worker.
If you were a stripper, you'd tell your friends you're an exotic dancer.
Patio is saying we should say "engineer" instead of "programmer" because programmer has similar connotations to janitor.
People I know who are programmers all have professional jobs and by and large are earning more than those I know who are engineers. That's probably not a representative sample of 'programmers' though.
tl;dr: 'engineer' doesn't sound too professional either, at least in the UK. IMO Software Developer sounds better than either, and that's what I tell people I am.
No, even if they started with "I'm a full-time writer", they'd follow up with "well, I've had two novels published -- I guess you'd categorize it as literary fiction? -- and I'm finishing up the draft of a third."
If you are a "programmer", what does that mean? Do you do anything of value? To whom? Do you know? Or do you program whatever you're told to program (inasmuch as you can figure it out, and it's their problem if the specs were bad) because that's how you earn your paycheck?
If you're in the latter category, and that's the only thing you grasp about the work you do, that's a pretty big limiter on your future.
All of my heroes in the field are programmers.
The degree of arrogance in this article is astounding. I've worked at Google, Microsoft, and IBM, and the work I've found most satisfying is in grad school.
To each his own. If you let something like this guide your life decisions, you have much bigger issues to deal with than finding a so-called "README.txt for your career as a young engineer".
If a person can't make use of good opportunities, experiment and learn in such a place, I doubt whether the same guy will do any good at a reputed place(like big web shops today) or even a start up.
Or more appropriately, only people who are capable of doing good in large corporates can do well in a start up. Or vice versa. If you can't do well in big company without any thing stopping you, you are not likely to do well in a start up either.
Start up's are not some magical places of congregation which will give you edge over your career without any considerable effort. Wherever you are, you've got take personal interest and steps to learn, work and make your mark.
Yes, there's cutting-edge work going on at Fortune 500 tech companies. It's about 5% of the workload, and it's competitive to get onto these projects. You're competing against PhDs who have been with the company for 10+ years, have major internal accomplishments to their name, and are objectively more qualified than most of us are.
This doesn't mean you shouldn't try. There are other benefits to working at these large companies (high salaries, good benefits, and work that, even if unglamorous, is a part of something successful people care about). I do think, however, that the idea that a 25-year-old can walk into Intel and Oracle and expect to be allocated to cutting-edge work because of raw talent, is patently absurd.
Most large software companies have 6 de facto tiers which may not correspond to job titles: Freshman, Junior, Senior, Lead, Senior Lead, and Fellow. The type of work you get depends largely on this tier:
Freshman: low-impact but "fun" projects, "bait" work designed to ease you into the company. This is what people get straight out of school.
Junior: mid-priority but grungy projects, maintenance of others' architectures. Keep in mind adverse selection: the good architects generally want to assist in the maintenance load for their creations, while the bad ones tend to run like hell.
Senior: mid-priority but more interesting and autonomous projects. Opportunities for junior-level IC (individual contribution) on high-priority projects. This is where most people are expected to plateau.
Lead: leadership roles on low- and mid-priority projects, plus encouragement toward IC on high-priority work. Good point from which to move into middle management if one hits a technical plateau.
Senior Lead: leadership roles on mid- and high-priority projects, plus expectation of IC on high-priority work. Fun but low-priority work is generally not accepted (it won't get you fired, but you'll stop advancing and your peers will think you're wasting your time.) Most SL are trying to get into lower-upper management (yes, large companies have a de facto lower-upper, mid-upper, and upper-upper management) because so few people make it to the next technical tier.
Fellow: complete autonomy, high degree of influence, implicit trust. Ability to flit between high-priority and low-priority projects based on what one wants to do.
To get interesting technical work and enough income to raise children in NYC or SF without an awful commute, you generally need to make it into the Fellow tier, which is much harder than moving into management. At Lead, you have enough autonomy and status to take on whatever project you want, but having real influence (or high income) requires going higher, and going higher requires spending a substantial portion of your time (40+ hpw) on grungy work because that's what Senior Leads do.
The bitchiest tiers are Junior and Senior Lead. Juniors have something to lose (3-4 years' career investment) and are skilled enough to take the worst of the work (middling priority maintenance, both unglamorous and underappreciated). Senior Leads are the one you see on-call at 11:30pm despite having two kids. And if you think working on a mid-priority, grungy project is bad, imagine what it's like to manage that project and have to deal with people quitting, transferring, or getting fired at a rate of 2-3/year.
If you are still in grad school... Write us back in ten years and tell us how academia is coming along. Meanwhile, carpe diem.
If you're out of grad school, tell us how much more awesome your career is than those of your relatively-untrained peers. More money? More respect? More challenges? What?
I went to grad school, and then I did a postdoc, and these things were indeed very fun hobbies [1], though very very expensive in lost income and opportunity cost. But now I support a large number of PHP apps, make significantly more money than I did as a researcher, have significantly more impact on human lives than as a researcher, work less hard than a researcher... And am, gosh, approximately ten years behind my peers career-wise. Oh, those expensive hobbies!
Still, nothing wrong with having hobbies. Just do be sure to know the difference between hobby and career. It can be similar to the difference between the transient and the steady-state.
And if you're out of grad school and have managed to secure an awesome steady-state career as an academic researcher with job security and good pay and time to spend with your family, your other hobbies, and your community, please do write back and tell us again how arrogant we are.
---
[1] In much the same way, I imagine, that the triathlon is fun.
As for journals, I like blogging, and hope to see academic publishing move towards a more online, networked open model, but I simply don't think we're anywhere near that. A typical blog post and a typical journal article are miles apart, today, and very few novel scientific results are produced in blog posts. So if your goal is to advance science, you're probably going to be part of academic culture in one way or another, and probably going to publish your results in conferences or journals. That's also possible to do outside academia or an industrial research lab, but relatively few people outside those kinds of settings actually manage to get the time to do so, since their local incentives don't reward it. In some cases they actively hinder it; I've been working with some game-industry people who hope to publish some of their AI techniques in venues like (http://www.aiide.org/aiide11/), but publishing is often vetoed by their management.
Patrick stated that you can submit journal articles without being employed by a university or think tank. This is true.
He also stated that, while it is perhaps thrilling to get a journal article published to an audience of hundreds, it is perhaps nearly as thrilling, plus one hell of a lot less work, to write essays on HN for an audience of tens of thousands. This is also true.
Don't conflate the two statements. Scientific papers and blog posts are not the same thing, I don't think Patrick is claiming they are, and I'm actually quite doubtful that they'll ever be the same thing. (Anonymous peer review is important, blogs don't support it, and the online systems that do support it don't look much like blogs, they look like online scientific journals.)
Now, on to other good stuff:
academia... [is] really quite industry-like
Indeed, it is very much like an industry. One with a tiny handful of customers, one of which is usually a major government. Often the government is the only customer. The difference between working for, say, a major military contractor, or a major pharmaceutical company, and working for a university is getting smaller every day.
It's nice work so long as your customer is buying. Once your only customer stops buying, however, finding another one can be a real pain.
Meanwhile, it's true that industry doesn't generally give a hoot about publishing new discoveries, often preferring to keep things secret. This is too bad. However, before we conclude that the only alternative is to become a professor, let me suggest that one could also look for a job where you can sell solutions to customers and keep control of your own IP, publishing it as you will. If you want to be told many stories about how this can work, go to an open source software conference.
I believe this is possible, but if your goal is to do novel scientific research and publish the results, it's exceptionally uncommon. I rely on all sorts of statistical and machine-learning techniques developed by other people, for example. It's relatively common to set up shop as an independent data-mining consultant, and you can fairly easily pay the bills that way. So you might think that they've produced some of the results I rely on. But the way the economics work out, independent consultants rarely spend much time on basic research. The actual techniques and advances, as a result, come almost exclusively from researchers in academia and industrial research labs.
In fact, I can't actually think of any influential advances in machine learning from the past few decades developed by independent researchers. Heck, looking through the R packages I use, even the software seems to come mainly from a mixture of universities and places like Rand (biggest surprise in this mini-inventory: lots of stuff from Merck, who I wouldn't have expected to be open-source-friendly).
Nonetheless, that's actually my medium-term goal, so I hope you're right. ;-)
Am I wrong to read this as: "After forty hours a week spend on doing well-paid work for clients, it's hard to find another thirty hours to scour literature and write up results, while still having a life?"
Because I'd be cautious in assuming that academics work much less than seventy hours a week. ;)
It's true, though: Doing an actual stint in academia is the right way to get a lot of scientific publications out. But: It doesn't pay well. It's not the most effective way of keeping yourself alive, or creating clear and saleable value for others. That's why I call it a hobby. You are taking time away from more valuable pursuits to advance the field, teach people, and maybe even practice a little art.
I'm sad to see that people think my use of the word hobby is so demeaning. I'm a big believer in hobbies. Here's my philosophy of the ideal life: You're born, you enjoy a series of hobbies (some of which may be deadly serious, like Steve Jobs' hobby of inventing the future), and then you die. I suppose I could look for a better word, but if the word doesn't express the concept of loads of fun it's not the right word.
Apparently writing essays on HN is the hobby of the day for me...
I'm unsure about my own career but going to grad school and doing research (potentially at a company, after I graduate) is definitely something I'm seriously considering, primarily because I feel like (perhaps naively, I don't know) I want to be doing more interesting, "fundamental/ground-breaking" work in cs, and not just managing PHP apps for some company, or something along those lines. I don't see much personal value/fulfillment in that.
Yeah, stripped of all the romance and intrigue, that's basically it.
Things I would tell someone in your position:
Don't underestimate the wonderful things that money can do for your life.
Don't underestimate the joy of being given money by grateful customers because you have made them incredibly happy in real time by doing something that's completely trivial for you, like running EXPLAIN on a SQL query from the slow log and then doing an OPTIMIZE TABLE and a CREATE INDEX and refactoring a simple loop to use a hash properly.
Know this: Even "fundamental" and "ground-breaking" work may only be read by a few dozen people, then filed away, perhaps never to be of any use at all, except as a very important footnote in the paper that catches fire ten years from now. And the large majority of research projects take five or ten years and then fail to discover anything noteworthy. Learn to be perfectly happy with that, or do something other than research.
Do not underestimate the fundamentally slow and boring nature of research. It is a long, long game, the kind of game that started before you were born and that may make only a handful of moves in your lifetime. Your field may go backwards for decades at a time. Don't worry, do good work, all will sort itself out eventually.
You will spend literally decades getting it right, exploring all the important side tracks, perfecting the difficult techniques. Going to school in science, reading other people's science, is about novelty, because you discover new things as quickly as you can read. But your own science is about consistency. Think of Knuth, who started his grand project nearly fifty years ago and who is up to volume 4 of 7.
Remember that, by the time you are the world expert in some fundamental and ground-breaking field, it won't seem that special to you. It's like being the world expert on your own backyard. You will know more about half of the plants in your yard than mankind was meant to know, but you'll also live in secret terror because people expect you to know about the other half as well, and you know that you really don't. And, unless you're lucky and the soil in your backyard turns out to contain the cure for stomach cancer, you will never meet anyone who particularly cares that you're the world expert on your own backyard. It will bore people almost as much as talk of PHP applications bores people. [1] Except at the annual convention of backyard fetishists. There's a couple hundred of you in the world. Those conventions are the highlight of your professional year.
Read the life story of Gregor Mendel. That's you. Now, by all accounts Gregor Mendel had a pretty good life, puttering around in the pea patch, but he was out of biology, and dead, before people figured out he was on to something. That's fundamental research for you. Don't go into research because you want to be a superstar. Go into it because you like puttering around with peas and hanging out with the other smart gardeners.
Start writing a research grant today, even if the first draft sucks, even if it takes you months to read the existing literature and figure out something new and interesting to propose. I used to think it was torture for universities like MIT to force first-year grad students to pick an adviser at the time of admission and propose their own research. Now I'm not so sure. Practice grant-writing now, because that's really what your future in research is about. If you can't sell your line of research to the customer in advance, you don't want to be a researcher.
Read A Ph.D. is Not Enough, read Hamming's You and Your Research, and good luck to you! Grad school in science or engineering may or may not be a mistake in any particular case, but at least it's one of the most survivable mistakes you'll ever make.
Oh, that's right, I almost forgot: For god's sake, survive. Be alert for signs of depression. First-year grad school is overwhelming, and actually getting out of grad school can be even harder. Hardest thing I ever did.
---
[1] There is at least one exception to this rule: You can take up cancer research. The good news: People will fall over themselves to thank you for heroically working on cancer, even if all you really do is change the light bulbs in the oncology department elevator. It will be only slightly surreal. The bad news: If you actually talk about cancer, which is an absolutely fascinating subject, civilians will always be grossed out, at least subliminally. Often, they will be utterly terrified. You see, the word cancer will never again mean the same thing to you as it does to everyone else.
I have a summary of it here: http://bfrsblog.blogspot.com/2011/07/what-every-prospective-...
Also, I never called anyone arrogant, but rather the article itself. Big difference. I don't know Patrick personally, so I wouldn't label him as such.
Sure. Like I said: talk to me in ten years.
Maybe you'll still believe that academia gives you freedom to work on whatever you like. All my academic friends do. They are devoted and talented enough that they can soar blithely above the fact that:
A) In academia, you work where the research grants are. You are free to start a research project in an underfunded corner of academia to the precise extent that you are free to run your laboratory without any income;
B) You will spend the majority of your time writing those research grants.
C) Because your grant proposals can be anonymously torpedoed by any one of your colleagues with sufficient clout, you will actually spend a lot of time with your finger in the wind, carefully adjusting what you're working on to stay in tune with the zeitgeist.
None of the above feels much like freedom to me. Your own mileage may vary, of course. Maybe you're in CS and you can run your lab on a relative pittance. Maybe you'll meet a rich benefactor who loves to fund whatever you want to do. Maybe you can hold down a day job until your peers give you funding for your novel project, like my former field's big hero Judah Folkman did: His proposals to study antiangiogenesis went nowhere for something like fifteen years, so he just kept his day job as Director of Surgical Research at Children's Hospital Boston and kept trying. What can I say? Clearly my advice would have been useless to Folkman. Patrick and I are trying to advise the median programmer, not the fourth standard deviation.
Right after my undergrad, I worked in the industry for 5 years and then went to Grad school. Since completing the grad school it has been 10 more years in the industry.
My industry experience has been great so far and I love what I do. I consider my Grad school experience as an enlightening and enjoyable period of my life.
Not everyone has a bad grad school experience. No need to beat down the academic experience. A lot of people gain from it. A career in academia is not the same as being a student.
It seems to me that both are being looked down upon here.
That is the hardest part to stomach. I've also wasted the better part of a decade, pursuing what seems to now be "pie in the sky". Guys who got GPAs way behind me, are now way ahead of me.
For me it was a wonderful choice. I didn't like the startup work for precisely the reasons patio sort of hints at. Our business was primarily about making money, and we had to focus on what customers actually wanted rather than what (I thought) would be most interesting, most challenging, or most elegant. Nothing wrong with that, but going to work was a drag in the morning.
Now there are downsides to academia -- committees, teaching freshmen who don't want to learn, and yes I have to write grant proposals -- but the bottom line is that all of my research (and most of my teaching) gives me a deep sense of satisfaction. What I am learning and teaching, mathematics, is inherently perfect -- even if our understanding of it isn't. I could not say the same of the half-baked APIs I was writing wrappers to as a professional programmer.
Now about opportunity costs... I don't follow you here. I am making about $72,000, which is about half what I could be making in the private sector. But so what? I value my time way more than I value my money, and I want to spend 9-5 everyday doing something I personally care about. And I don't place any value on luxury, which means that $70k is easily enough for me.
And, yes, I have plenty of time to spend with my hobbies, my friends, etc.
There are a lot of people who derive intense satisfaction of providing products that people in the business world need and are happy to pay money for. I have nothing to take away from them. But personally, I am a perfectionist and an idealist, and the opportunity to work in the field of "pure knowledge" is one I am immensely grateful for.
Academia has its disadvantages, but for many, it is incredible. At any rate it is for me.
However: The median undergraduate won't get to be a prof.
The median grad student won't get to be a prof, however much they might wish to.
In physics the median postdoc won't make it to prof. Too many postdocs. Not enough new profs.
I went to a top grad school and made a bunch of friends. Of all my Ph.D.-holding friends I know of exactly one tenured professor. He recently graduated his first Ph.D. student, who promptly got a junior faculty position. He jokes that his work is done: All of his future grad students will be aimed at positions that don't exist yet. May never exist.
I'm aware that being a successful prof seems like a fun job, just as I'm aware that being Lady Gaga is a silly and remunerative job. But when I advise anonymous people on the internet I try to advise the median person, and the median person ain't going to get tenure, just as the median musician isn't going to be Lady Gaga.
Or is it different in your field? The physicists used to dream of easier advancement in math or CS, but the grass is always greener.
Congratulations on being a winner, by the way. Have fun, and help your students have fun!
Is it different (in math)? Yes and no. There are a bunch of jobs teaching low-level courses (often 3 or 4 a semester) at teaching colleges, most of them in isolated locations, where little or no research gets done. Some people are happy to accept these, some don't want to and take industry jobs. I teach at the University of South Carolina, and with rare exceptions, our Ph.D. graduates work at these kinds of places.
I don't know how other fields are, but it is typically predictable how well grad students will do. I think grad students usually know if they have a reasonable shot at making it big (or semi-big as in my case) halfway through grad school, so they don't have to go through eight years of crap to find out.
'Good work' or something that brings long term financial success and happiness is something that adds value to business you are serving to write software. There are also many academic kind of jobs which involve a lot of algorithms, math and precision science which won't deal with much of flavor business software has today. That's not wrong if you are a academician by profession, but that's a serious problem if you are doing software development for a living.
Much large of software development today, has got to deal with learning tools, knowing how to use a programming language to quickly turn idea to code, or fix a bug or add a feature. Apart from this you must also know how to quickly discover solutions to problems, even by searching on the internet. Being able to discover has become more important that being able to invent these days.
Additionally you must know how to push long hours, work late nights and may be on weekends. All this has fundamentally nothing to do with software.
All passion of working on something interesting, changing the world et al is perfectly acceptable in your early 20's when you relatively have lesser responsibilities. As we grow older our responsibilities will only increase, the bills and expenditure will grow up. For vast majority of people, thinking pragmatically in this case is important(I'm not saying this for everybody, some can. Not all will make it, those how will not have to take the most pragmatic way out).
That's probably why start up's are not for everyone. And that's why php et al is still alive. Anything that helps you make those first dollars will win.
This is the sad thing about the real world.
Learn, but use the most pragmatic tool at the moment to serve your business.
A connection just went off in my head; this sentiment is echoed in Sirlin's 'Playing to Win' series of posts.
"I’ve never been to a tournament where there was a prize for the winner and another prize for the player who did many difficult moves."
It's good advice. I mean, enjoy solving difficult problems, but it is important to recognize that it can be... self-indulgent sometimes. There certainly exist hard problems that are also good problems, but they are not measured with the same units.
All these things that I mentioned, have virtually very little to do with diving deep into Computer Science aspects. Yet this is the story of nearly every software shop out there. If a person can just focus on doing that stuff properly he can be a lot ahead of the regular crowd. And make real good money too.
This also the place where you can get into project management and still have you handson going. Because there aren't major paradigm changes to this once you get used to them well. All you need to do is keep in touch with some latest stuff and you can really end up making a lot of money. And still continue to climb the corporate ladder, be a good management and have good control over technical stuff.
Now image an another scenario. You join a major big web corp, they hire you to write difficult algorithm stuff. Sure your passion will help you learn. But compared to the first guy your opportunities to interact with business are so scanty you really will miss out the big money stuff. The same thing happens with start up's. Also you will no longer be the reap the management pie, you will always continue to write code. And the biggest problem with our society is management drives the value addition. You will just end up being a implementer in their hands, you won't end driving up much value and with that definition money too. Over the years you miss out on the whole ecosystem, and you just won't have flow to compete with your peers if you ever want to get back and compete with them.
Also the the first kind of jobs have many low hanging fruits to make lot of money.
Also about start up's like OP mentioned:
The high-percentage outcome is you work really hard for the next couple of years, fail ingloriously, and then be jobless and looking to get into another startup. If you really wanted to get into a startup two years out of school, you could also just go work at a megacorp for the next two years, earn a bit of money, then take your warchest, domain knowledge, and contacts and found one.
People have to understand, when you fail you loose time, and also the money which you had else made if you hadn't failed.
Sure go for the funky job. But also understand the risks behind them. Not all start up's, Big web corps are going to help you be big. There are good enough cases where people have made it big working there. But there also good enough cases where people haven't. When everything is going smooth and as expected its all milk and honey, but if it doesn't you are really toast.
I would say, Big corp jobs really are not as bad as they depicted to be. If you do the right stuff(Just do the bare minimum properly), you actually can be quite successful and go quite far both in your career and money wise.
And most important as I said, just merely doing technically difficult job automatically won't imply both career and financial success.
I worked for a Megacorp briefly, but it was just a couple of internships: enough to get some real experience on the resume, open-ended and unsupervised enough that I could actually learn a thing or two... but if I'd gone to work for the group that wanted to hire me afterward it would have been a complete waste of my talent as I banged my head against a legacy codebase and dozens of layers of bureaucracy. Instead I went for a little startup, worked with some seriously skilled people, and learned what the heck I was doing... and if the place had fallen apart after a year or two, I'd still have been able to get a much better job than any of my alternatives at graduation.
If you're straight out of college, don't worry much about the salary, or the size of the company -- just go for the team that you're going to learn from. It can be the difference between launching your career and running it into the ground.
>>If you're straight out of college, don't worry much about the salary, or the size of the company -- just go for the team that you're going to learn from. It can be the difference between launching your career and running it into the ground.
I would say a MegaCorp experience is important for quite many reasons apart from just programming. There N number of things that are as important as programming to your success. Which you can't really learn in start up's for all sorts of reasons.
Initial MegaCorp experience and then followed by good start up work looks a little better to me.
"Use difficulty as a guide not just in selecting the overall aim of your company, but also at decision points along the way. At Viaweb one of our rules of thumb was run upstairs. Suppose you are a little, nimble guy being chased by a big, fat, bully. You open a door and find yourself in a staircase. Do you go up or down? I say up. The bully can probably run downstairs as fast as you can. Going upstairs his bulk will be more of a disadvantage. Running upstairs is hard for you but even harder for him."
The problem is few people take it as a gospel truth that if the problems you work on are difficult you've got win bigger than the guy working lesser difficult problems.
This goes even further with some people who consider the only way to win big is to work with difficult problems.
That is when people get it completely wrong.
If you work at a place like that, I feel sorry for you.
Even the owner of my company lists himself on Twitter and his blog as just Programmer at RAD Game Tools. Besides being the sounding board for us when we have problems and ideas, he still writes more code than most of us can regularly muster.
Personally in my experience working with startups, everyone at the company knows why I'm there, what I do, and there's no question about the value I bring. What I call myself just doesn't matter. I would wish this type of experience for everyone.
What you call a code monkey is what the rest of the world considers a programmer.
Most people in the real world have no idea what it takes to develop software. They believe if someone is a programmer, they can develop the entire thing from top to bottom and everything in between.
It is really only in the tech circles where people see why the job is separated out into different roles for different people. Some there equate programmer with "code monkey," but their opinion is not the norm. And one I do not agree with.
"The question used to be: Does it run? That was enough, because software that worked was scarce...
So if it’s not about avoiding fatal bugs, what’s the business of software?
At its heart, you need to imagine (and then execute) a business that just happens to involve a piece of software, because it’s become clear that software alone isn’t the point. There isn’t a supply issue--it’s about demand. The business of software is now marketing (which includes design)."
http://sethgodin.typepad.com/seths_blog/2010/10/the-business...
Also, people have been saying this about programmers longer than 10 years. "Don't go into programming, you will soon be redundant". But the super general purpose code generating AI is still developed yet... Software is everywhere and we need more programmers than ever. I think a lot of other jobs will still be automated away before it's our turn.
And in that case, if computers can make those creative mind-jumps, even doctors are going to feel this, and lawyers. The end of the productive lifetime of humans will be very, very close and we'll have other things to think about such as rethinking the economic paradigm. And please let it be the arrogant MBA types for a change to be jobless. "Masters of the universe". Puke.
I came to the comments to express the same sort of opinion. I work at a place that understands and values programmers. I can't imagine working in any other kind of environment unless I was between real jobs and really strapped for cash. If you're at a place run by a bunch of clueless MBAs that don't understand the value of their in-house engineers you just don't have a good (or reliable) job.
Yes, there's value for an in-house engineering team, but with widely varying skill distributions and unevenly matched compensation. Managers know this, and Patrick's point is that "I'm a programmer" is starting off on the wrong foot as it just re-affirms that you are a large, fixed cost, saying nothing about your specific contributions.
In other words - yes, they are clueless.
That is exactly Patricks point. If you can explain to those MBAs how you make $N for the company, then your job (as long as your job costs less than $N) is safe because you're now a profit centre. You will then have turned those clueless MBAs into bosses who understands and values programmers.
you might rightfully question whether Published In A Journal is really personally or societally significant as opposed to close approximations like Wrote A Blog Post And Showed It To Smart People
But honestly I have never found a blog post that I could see as replacing journal articles, if your goal is to promote advancement of scientific knowledge. I like blogs, and read them often, but they aren't normally in-depth, with solid scientific evidence for their results, with discussion of how they relate to existing results, etc. The closest is probably in mathematics, where some of the mathematics blogging is quite high-level and results in actual new discoveries--- but those blog posts are mostly written by math professors (e.g. Terence Tao's blog), which doesn't seem to be what this article is proposing.
Where on the internet can I find blog posts of the same scientific standard that one finds in, say, http://jmlr.csail.mit.edu/ ? I read quite a few statistics, data-mining, and machine learning blogs, and while there is a lot of good content, I haven't found anything that I'd say replaces a journal article; it's more along the lines of tutorials and tips and tricks (which are also very valuable, but a different kind of contribution).
Patrick gives insanely valuable advice for hackers who could be both create more value and capture more of it by being aware of the big picture & the motivations of others.
On the perils of describing yourself as a programmer: If you're hiring someone to provide a specific skill set (programmer) you want them to be good at programming. Would you hire an accountant if they didn't know accounting? Should lawyers not describe themselves as lawyers? Doctors as doctors?
On the perils of selling yourself as an expert in a certain technology: I spend a fair amount of my time learning about the specific technologies I use. I've been doing this for a while and I don't know everything about sql, postgres, mysql, mongodb, javascript, html, css, ruby, rails, unix, chef, capistrano. But I've put thousands of hours into these things and the tools themselves took thousands of hours to create. Either I'm really bad at learning, or there is a lot to learn there and that information makes me more valuable to potential/current companies. Sure, there is a baseline level of skill you can achieve in programming where you can not suck at most stuff but there is still a lot of valuable information that you don't know if you just half assed your way through a Beginning Ruby on Rails book.
A high-tech value creator who thinks and talks in terms of profit drivers and cost sinks is not going to ever be a commodity.
Rather than striving to be the top of your class (e.g. Ruby devops guys, which is something HR can use a standardized pay scale for) you can strive to be unique in a one-person class that is more immediately profitable and scalable than a commodity programmer.
your last: - 'you can strive to be unique in a one-person class that is more immediately profitable and scalable than a commodity programmer.' seriously?
if this guy wants to become an expert in the technologies he mentioned then why is that so wrong? if he enjoys programming and has the drive to get to the top then he should absolutely go for it. smart employers are going to appreciate and see value in someone that has spent thousands of hours coding.
You'll get better work on better terms if you focus on results rather than tools, even if your technical skillset is fundamentally the same as another dev with a poorer sales pitch. You're finding the best mutually beneficial business arrangements out there rather than just pursuing a predefined career track.
Edit: Mastery is its own reward. If you want to become an expert at a particular corner of technology, go ahead. Just remember to explain your work to others in terms that aren't unnecessarily limiting.
Senior C++ Programmer jobs.
And what do you think they'll have to prove to potential employers? That they are capable of writing lots of C++.
Commodity programming is an inefficient use of this person's time and luckily he will be known and respected by enough business leaders to be able to carve out a more valuable (and again, mutually beneficial) arrangement somewhere in the Valley.
This job may involve C++ but it won't be as generic as you described. Think Paul and Bret at FriendFeed. "Python Programmers" was not their $50 million value proposition.
When "programmer" starts showing up with lawyer and doctor on "high status occupations used as the canonical examples of professional jobs since you were three years old" then programmers should definitely start describing themselves as programmers to anyone who will listen.
Edit:
Are accountants high status? I'm not sure. They are generally regarded as making a fair bit of money but they are boring. Probably a bit more high status than a programmer, perhaps. But I wouldn't suggest to my accountant friends that they stop selling themselves as experts at accounting.
And anyways, high status = social status, and how is that relevant to any of your points? Social status is mostly useful for when you're trying to get laid (because that's mostly when you are trying to impress people) or prove something to your parents. We, as programmers, still get paid very well and are valued by many many companies.
The lack "high status" thing in comparison to doctors and lawyers is just because:
A) Laywers and doctors generally make more money. A lot of lawyers and doctors make over 200K. Programmers, not so much.
B) Laywers and doctors are almost certainly better educated than programmers. This education is validates a person in lots of ways, in that you are automatically learned about a variety of topics with which to converse with at parties, and that you are smart enough not only to perform as a lawyer/doctor but to achieve the level of education necessary to do so (unlike programming, where you only need to be good at your job and not necessarily good at 6+ years of higher ed).
C) The laywer and doctor professions have been around longer and are therefore safer. Doctors are the most ancient and historically valuable professions. Laywers, not nearly as much so, but for the past few hundred years they have emerged as a staple profession. I like law a lot but I would devalue lawyers over doctors a bunch.
D) It's harder to become a lawyer/doctor than a programmer, so it's a bigger achievement.
E) The jobs generally require more social skills than working with computers.
Programmers will probably never be a high status job because of the above reasons. But that doesn't really affect your argument, which is describing how you should sell yourself to potential employers.
I'd like to reiterate that I'd prefer to well rounded people who are good at programming and specifically good at our tech stack. That's the ideal. Take classic ASP.NET programmer and tell him to write a complex Ruby on Rails project and watch him flounder for months no matter how good he was at ASP.NET. There's just a lot to learn. Now, for someone who is more seasoned, used to unix, used to working with actual HTML+CSS+Javascript (instead of .net controls) used to writing tests, used to dynamic languages, that person will adjust fast, but not everyone will.
Software is a sub branch of engineering. Like veterinary doctors. In fact man kind had taken huge leaps in engineering before they took in medicine(Stuff like Pyramids of Giza etc).
Doctors and Lawyers have a nature of work which if done badly or of subjectively low quality a persons quality of life gets very hugely impacted.
Its like high risk, high gain.
Not just primitive cultures. Even older than them. There have been huge marvels of engineering for daily lives and occupation. Like Irrigation system in Indus valley civilization(http://en.wikipedia.org/wiki/Indus_Valley_Civilization). That sort of a system can't be built by adhoc work. You will need dedicated people to plan, design and implement it. Its more or less as advanced as any decently large irrigation project today. Except that it was more difficult for them. They didn't have many things at their disposal which most engineers today have(which made their job more difficult than we can imagine)
While biological sciences were still in Infancy then.
I went with my co-worker to talk with a client a few weeks ago. Even though we do the exact same thing, we introduced ourselves differently.
I said I was a programmer, and the response was "oh, that's nice"
He said he was an Engineer, and the response was "Oh, that's so impressive"
Also the fact that here in Japan the average salary for "Software Engineer" is almost twice that for "Programmer" and you can see why you would want to shy away from that nomenclature.
What is the proper approach to answering this question?
Or just cite an NDA (real or imagined); most employers will back off immediately at that point since (a) they don't want to be accused of inducing you to break a contract, and (b) they probably don't want to hire people who break NDAs lightly.
What I said is pretty tongue in cheek, but being vague in a way that hints that it compensated well can work.
If that doesn't work, be prepared to give a range of "total comp" where the low end is base salary and the high end is the total cost of all your benefits + salary + bonus
My other stock answer: "As a matter of professional courtesy, I decline to comment on specific policies of previous employers. You should appreciate this, after all, someday someone will be asking about yours."
If this is early stages of the hiring process, then just move the discussion on, "It's OK, but other things are more important to me than salary..." then ask a question about something you are interested in - vacation days, free lunches, opportunities for travel, whatever.
If you do disclose numbers at early stages, and your number is over budget, to the point where it will need the approval of senior management, then you'd better hope you're #1 on their candidate list by a good margin. No one wants to go to senior management, cap in hand, to ask for a budget extension for someone they've not yet worked with. It's too big a risk unless your reputation precedes you.
Wasn't this precisely the insight of the founders of Infosys in the late 80s? Together, the Indian outsourcing giants, Infosys, TCS and Wipro have amassed huge armies of "programmers" to meet these needs. I stay away from CRUD stuff, because 1. I don't expect to be very successful competing with armies. 2. I don't like being a part of a huge army.
When you are talking of big IT bellwethers, they are in a business of supplying services at affordable costs. Aren't you seeing the massive potential in this business? today maintenance and services massively outweighs product development and this is time tested truth. Because once you develop something you have to maintain it all the time. Also this is the only business, where you can retain your technical hands on and still climb the corporate management ladder. Combining both parts of the world. This will give you an edge, to add value in both areas. Also these companies, offer massive infrastructure, training and experimenting grounds which a start up in India can never possibly offer. You also get access to great books, and huge network of good people. If you are lucky you get opportunities to travel around the world, doing business,learning and enjoying various cultures around the world. Also their pay is difficult to match.
The start up scenario in India is really messed up badly. After so many years we get to see only one flipkart and Infibeam. And from what I have been hearing its no honey and milk there. Its your usual 'safest way to production' route that they take. They are generally Java heavy shops. I wonder if all this trouble is worth. If all you want to work is on Java.
After few years if you see you peer in a big IT bellwether(who is/was as good as you) being more successful in terms money and life style. Don't be surprised, he is in a place where there is steady supply of money and opportunities.
Its like you will be average among the best. And he will best among the average.
Another thing that I have noticed is start up's in India and especially founders are extremely stingy. They tend to see developers as tissues(use and throw entities). And chances of large number of people making into start up's are also lesser. And there aren't too many good start ups.
Also these Indian IT companies did a major job of propelling India to global IT forefront. If they were to go away, we will loose massive amounts of employment opportunities, exposure and more importantly confidence to open start ups in the future. Remember they were themselves start up's some time back.
Yes, you can become productive in a new language after 6 months of using it, but most people will still have a long way to go before they can claim a reasonably high level of proficiency, especially if there's significant dissonance between the languages. Going from Java (or most languages, really) to Python isn't going to be too difficult, but a lot of that is because Python is a very easy language to get started with. But even with Python it will probably be a lot longer before you really understand some of its less obvious features, pitfalls, performance profile, and are comfortable writing idiomatic code. For a more complicated language, like Perl, or a more distant language, like Haskell, it'll probably be a lot longer.
* Communicating with internal and external customers
* Understand systems from a broader (higher level) perspective
* Ability to translate wants and needs to technical requirements and specifications that are implementable
* Ability to sell yourself as well as the product / service
* Give constructive criticism as an internal customer to programmers / software engineers (great chance to view the role @ 180 degrees)
It is amazing how devs think that dollar value should equal effort. It does not. And this doesn't just apply to software. It applies to anything and everything. The value of something is what someone is willing to pay for it in that one split second when they click "charge my card".
I think most consultants and contractors reach a point where this clicks. At first they think, well this will take me X hours, so it's worth Y dollars. Later they think, this is apparently worth X dollars to the client, so I'll bill Y dollars, where Y is way closer to X than any how-long-it-takes calculation.
It's the difference between "hard work should be rewarded" and "value should be rewarded."
I'll add my own anecdote: earlier this year I had an interview which required taking a plane. I decided to wear my suit on the plane, and it was an entirely new experience. I can't put my finger on exactly what it was, but the people simply seemed nicer, more pleasant and accommodating. If you want people to think of you as a professional, dressing the part certainly helps.
And that's one of the biggest things I took from this piece: Yea, it all sucks and is ridiculous most of the time, but it's the way the game is played. Play it or get left behind.
It does matter in so far products come and go and you don't want to accumulate knowledge on a product that's going to disappear from the market.
I worked with SGI IRIX from 1991-1996. The company has since gone bankrupt twice and IRIX has disappeared from the market. All the knowledge I accumulated on IRIX is worth nothing because it's no longer in demand. Practically noone still has IRIX machines in production.
In 1996, I switched to Linux. It had a vibrant community and you could feel it's growing rapidly. Turns out that knowledge is still valuable.
So it's really important for engineers to keep a close eye on the marketplace: If something's getting out of business or out of fashion, stop investing time in it. Instead, be on the lookout for stuff that's growing. In general, open source stuff has a longer lifetime because it can be forked if need be, wheras proprietary stuff is often problematic as companies change their mind on a whim. HP/WebOS is a recent example.
The fact that you knew IRIX was a good indicator that you'd be able to pick up Linux.
It's also today a good indicator that you'd be able to pick up Windows if you set your mind to it.
Your advice is solid from an engineer to engineer point of view, but Patio's advice takes an egineer to business perspective.
This is one of the most important career lessons I've learned first-hand of late.
Or phrased differently, you get to work for a startup you believe in and enjoy instead of a soul-crushing megacorp, with (almost) no cost.
This counts as a win in my book.
But if it doesn't you loose time and money. And have to deal with added frustration of that loss and finding a new job.
At the same who is almost as good as you would have never been through all that. Made more money with the same learning experience as yours.
Its not about the positive scenario that's the problem here. Its the negative scenario.
- Only be interested in increasing profit or reducing cost
- Don't care about what you do unless it conflicts with the above
- Treat people you meet as commodities
- Produce cruddy code, because "good enough" is all that matters
- Good engineering is not a "profit center"
- Don't bother keeping up with new programming languages or new techniques
The whole point of the article is to force a typical engineer to look at how most of the world perceives him, and work with that.
If you have to talk to another engineer as part of a hiring process, talk all the shop you want. If you're talking to business people, try to talk about the business advantages of what you do.
Are they, though? I can see they might be if you're in consulting (as the author of this post appears to be), but I've never heard of an interview at somewhere like Google or Intel that wants to hear you talk about Providing Value; they want to know your technical skills.
Unless an employee actually gets permission to do this, this makes him incredibly selfish, and is a good way to get fired (and deservedly so), no matter how good he is.
Do what gets the job done, within reasonable limits. If the expected maintenance is minimal and you can improve your personal capability and/or produce the deliverable faster using a different technology, by all means go for it. I've had to learn languages far more unpleasant than Ruby (VBA, I'm looking right at you!!) in order to maintain programs that no one expected would ever change. That's life!
It's selfish if the numbers are such that maintenance ends up costing more than you saved by using your favorite language for the initial implementation. That depends on a lot of things: your co-workers' experience, your coding style, documentation for the language/libraries used that your co-workers aren't familiar with, etc.
Hint: any kind of problem that need only be solved once (or where it is cheaper to write the code again rather than to make it general enough for everybody) can be written however the original developer believes he will create the most value
He or she, however, would be red flagged for close observation by being put on a Performance Plan.
Basically, a PP is required to legally fire you. For example, if you had a bad record of coming in at a consistent time, they could put you on a PP. In this PP (which you would have to sign as a condition of further employment), there would be a contract for coming in between 9 and 9:15 for the next thirty days, with a small margin of forgiveness. PP are used to document that you have behaved poorly or acted wrongly in the corporate context. Once you are put on a PP, it is a prelude to a firing. You can successfully get out of a PP, but it is stressful.
For the hypothetical Ruby programmer in the Java shop, the PP would probably involve something insidious like LOC.
Where are you talking about? Laws vary, even among the states in the USA.
Being fired while belonging to an Identified Minority is harassment and discrimination unless done according to a documented failure of a Personal Improvement Plan.
This sounds like a very dysfunctional company in the first place.
The boss asked for me to produce comprehensible and comprehensive documentation of 100,000 lines of Perl and gave me a two month deadline. I produced what he asked for in two weeks. The production of this involved a Ruby script.
Contra many sibling comments, delivering a higher quality product earlier than the deadline does not typically result in one getting fired, particularly when one makes a habit of making your boss look like an effing genius for managing you so well.
Either way, the parent to your comment has no bearing on my original comment or this one. You replied here, so I'm just replying to you.
1. Effective communication with people from various backgrounds is important. This is incredibly hard, and it does require practice. Those that succeed typically communicate very well.
2. I mentally replaced the "don't call yourself a programmer" mantra for "tell people why you're doing what you do - what problem do you solve and how is it valuable". If you work for a business, you also need to have some basic understanding of business. Successful organizations probably have more people that really try to find their role in the "big picture" of the company, and they strive to use their place to create value.
I think I used to say something about programming web applications to generate numbers for middle managers to review.
Not living in the bay area I see what he is saying, most programmers are not selling apps, or selling small consumer applications. Most make internal apps, and many of those internal apps are more interesting than mobile apps or web apps.
I'm never going to be modest from here on out and will act like a pompous douche when deemed necessary. I see people act this way ALL the time, and I figured people could see right through their bullshit. Apparently not, as it clearly does not matter if they are right - only if their bullshit is passable. Apparently being modest does not work to my advantage. I have no choice but to play the game.
Picture a heart surgeon. Given an opening like "Wow, you save people's lives all by yourself" he doesn't say "Oh, it's nothing", he says something like "My team saves people lives. It is a privilege to work with them."
There are better role models, or better coaches. Keep looking. I realize it is hard, because there are a lot of complete poseurs cluttering the landscape, but keep looking.
The question you have to ask yourself is "am I an exceptional software developer?"[1]. If you are at all unsure about that then the answer is probably no (the fact you are even on here at all worrying about these things indicates the answer is no).
Given that you are not exceptional, the first thing to do is stop listening to the career advice of exceptional people: they base their advice on their own personal experience[2]. They were able to start their own successful companies, or got well rewarded and promoted/hired for top jobs at the large companies, because they are exceptional. 'Restrained confidence' won't get you very far if you don't have extraordinary skills to make you stand out; you will be competing with many others of similar skill level who are quite happy to play the 'pompous douche' character, to lie about their experience and skills and so on. That problem you solved last week that saved the company X$? Your 'pompous douche' colleague has already taken credit for it. You will be annihilated by these competitors every time unless you play the game because bosses and recruiters won't even realise you exist.
Or you could go your own way, if you are happy struggling to pay the rent every month (please don't go this route if you have family/children).
The final 'nuclear' option is to quite the entire industry for one that is less psychopathic, but I've yet to identify such an industry; if you find it please let me know.
[1] as the article points out, if you are referring to yourself as 'programmer' or 'software developer' then you have already gone wrong
[2] this is also why you shouldn't listen to people like Steve Jobs when they give a graduation speech telling you to 'take big risks because it will all work out in the end'. No shit it all works out if you are Steve Jobs, but you aren't Steve Jobs. They don't get people who took huge risks and crashed and burned to give graduation talks.
http://www.sebastianmarshall.com/the-genius-and-tragedy-of-p...
(posted last month by an observer of the author of the submitted post here) with a different reaction?
How?
The coop program i.e. the four month work then four month study program.
Except maybe for the startup stuff. That said, there are are overarching initiatives being undertaken by uWaterloo to infuse entrepreneurship and student success. The most popular one? http://velocity.uwaterloo.ca/
It also jumped out at me that the zero case is not handled (it occurs on the rand(100), if not the die).
He's got a great point about learning negotiation skills, too, but I've read a lot of things and feel that what I lack most is actual live practice. I think this is similar to the point about meeting people and shaking their hand and how different that is from meeting some person online.
is it really expected or even appropriate to wear a suit to an interview in the valley? i remember doing that during for my internship interview and i felt silly sitting next to my interviewer at lunch who was wearing shorts and flip flops.
And it would appear that suits make you overdressed in the software business even here in relatively staid Boston.
However, when you're going to meet with Japanese bureaucrats, or perhaps even American investment bankers, the suit might be a good idea.
There are 2 parts in it that I have difficulties with, and I'd appreciate clarifications:
-----------------------------
"In the real world, picking up a new language takes a few weeks of effort and after 6 to 12 months nobody will ever notice you haven’t been doing that one for your entire career."
How can you say that? Sure, an experienced and intelligent programmer can learn to program in Language X in a few weeks, but do you think that after a year he will reach the same level of efficiency of a similarly experienced and intelligent programmer who has 8 years of experience programming?
Sure, you'd know most of the important things that the 8-year guy knows, but I was taught that the worth of programmers is exponential to their talents. Say that if you're at the 99% percentile of Language X developers, there are (say) about 1,000 people like you in the world. If you're in the 99.99% percentlie, there are now only 10 people like you worldwide. Wouldn't that result in a much bigger price that you could put on your services?
-----------------------------
"Profit Centers are the part of an organization that bring in the bacon [...] Cost Centers are, well, everybody else. You really want to be attached to Profit Centers."
I don't understand this.
Let me see if I got the terms right: Profit Centers are "where the money comes in from", and Cost Center are "where the money comes out of". But of course, Cost Centers do not exist because CEOs are looking for ways to flush money down the tubes-- it's just that Cost Centers bring in money in indirect ways. For example, let's say that you're a CEO, and you have hired an expensive programmer to write a script that periodically checks that your backups are valid. That would qualify for a "Cost Center", right? And everyone would agree that this is a wise investment.
So what am I supposed to do if I'm hired to do this kind of job? Decline it because it's a Cost Cetner?
You also suggest to "engineer your transfer [from Cost Center to Profit Center] after joining the company". Wouldn't that be kinda douche-y? I mean, I'd be pretty pissed if I hired a guy to do Job X and then he was trying to engineer his way into Job Y because that's where the money is.
-----------------------------
Thanks again for the post!
Nevertheless a Cost Centre is a kind of janitor, an absolutely necessary thing that should be done, at the minimum cost that lends itself to an acceptable standard. Another concept that might enlighten you in this context is Core Competency. Everything that is not this can in theory be outsourced. In practice it may not be worth outsourcing because it would cost too much in time, money or communications overhead but the company exists to charge money to do its Core Competency and everything else is detail.
Don't be detail.
If you are hired to work on a cost centre you attempt to make or save money and either get a raise/bonus for doing so, or move to where you can, whether in the company or in another one.
Finally, being only "kinda douche-y" makes you vastly less douche-y than just about everybody in the executive suite. Your colleagues are mostly not your friends. Your manager is definitely not your friend. Your manager's manger's job is partly to get as much value (work) out of people like you for the least money possible.
If you are ever in a job where you and your (over)manager are directly antagonistic run like hell, but 100% aligned incentives are very, very rare. If you want keywords try "principal agent problem".
You are not a sarariman, you will never have either job security or loyalty from above so don't act loyal from below, it just makes you a chump.
In the former case, I think OP's point was that being exceptionally familiar with a given language or technology is not what ultimately makes a programmer exceptionally good: that factor is platform-independent, so to speak. Being one of the 10 programmers in the world most familiar with X might be a neat thing to put on your resume (if you could prove it) but probably isn't as important to getting your job done well as the elements of your skills which apply regardless of language.
In the latter case, yes, cost centers are valuable, otherwise they wouldn't exist at all, but they're not the company's primary business, and if something needs to be cut, they'll consider ancillary stuff like this first. This is really just a repeat of the age-old advice to work at a company whose primary business is whatever it is you want to do, as that will usually get you the best treatment.
"I was taught that the worth of programmers is exponential to their talents. Say that if you're at the 99% percentile of Language X developers, there are (say) about 1,000 people like you in the world. If you're in the 99.99% percentlie, there are now only 10 people like you worldwide. Wouldn't that result in a much bigger price that you could put on your services?"
This sounds good in theory, however, there are only so many businesses that actually are in need of 'a programmer in the 99th percentile of language X'. You can find a lot more that are looking for 'a programmer that helps me make more money'.
The problem is that there's a big gap between 'being sufficient in language X' and being in the 99th percentile. If you are in the 90th percentile of language X developers, there's not much people looking for you (they need the 99th percentile guy).
"For example, let's say that you're a CEO, and you have hired an expensive programmer to write a script that periodically checks that your backups are valid. That would qualify for a "Cost Center", right? And everyone would agree that this is a wise investment.
So what am I supposed to do if I'm hired to do this kind of job? Decline it because it's a Cost Cetner?" As far as I understood the article, the point would be to look how you could communicate about the job so it would be attached to the Profit Center. Let me give it a (probably bad) try: _"I make sure company X saves 10K on manual backup verifications, which are in place to make sure they don't lose millions when a backup is required."_
A normal CEO would probably only hire you for $AMOUNT_OF_MONEY if he believes it would save him >$AMOUNT_OF_MONEY on e.g. manual labor.
"You also suggest to "engineer your transfer [from Cost Center to Profit Center] after joining the company". Wouldn't that be kinda douche-y? I mean, I'd be pretty pissed if I hired a guy to do Job X and then he was trying to engineer his way into Job Y because that's where the money is." The trick in 'transferring' to the Profit Center is part communication about your job (to your manager, CEO, clients, etc.) and the other part asking the question _"How does what I'm doing right now makes my boss money?"_ because if it doesn't make him money some how, you're probably messing around.
That said, it's really hard to connect 'bugfixes on other people's applications' to the Profit Center.
(I too have heard differently)
I'm no Google insider, though, which is why I'd like to hear from people who actually know.
Even Steve Jobs said that having kids was more fulfilling than starting companies and creating products. If you're a startup founder, there's a few ways you can go. You can spend a few years working very hard in the hopes that you get rich. Then you have financial independence, which solves a lot of problems and allows you to focus on doing fulfilling but less lucrative things with your life. If you're not going for a huge liquidity event, you can spend a few years working very hard in the hopes that you can create a successful and sustainable business which, hopefully, you can happily spend a good long time working at in a role you created to suit your own skills and interests, like "CEO".
There are always exceptions, and there's a romantic appeal to figures like Erdos, but it's a huge disservice and a huge sense of entitlement to expect a career, of all things, to take a central place in a happy and balanced life.
This is something that even I have observed, in some cases I have even seen when people take it like "only startup = happiness".
How does one go about measuring? They're not about to give a "mere programmer" access to the sales data or whatever.
Any idea who this person is?
Who knows where the truth lies, but for the next few minutes I'll just enjoy the slight buzz from the article.
This is about programmers that seem to love to undervalue their skills, and then anonymously bitch in online forums about how stupid everyone else is and underpaid and under appreciated they are.
Nice jab at Google.
Aside from being a guy who played fast and loose with facts and was awarded a medal by a president who couldn't be bothered with facts, what solid contribution did this Drucker guy make to the art and science of programming?
Perhaps I've misunderstood the authors intentions? The parts about young people in start-ups, and how it becomes a downward spiral if you aren't in the lucky 10% is such a negative view it hurts. Specifically the "odds" of succeeding and the relative unimportance of the connections you make during that time because [paraphrased] "most of the connections you make in the start-up world are with other start-ups who are likely to fail as well". This is just such a losing mindset to have. If the only thing you are concerned about is not failing then you have no chance to do anything of importance. The choice is yours.
I apologize if I've missed the point here as I know there were a lot of other parts in the article about adding value to your career and understanding how corporate structures work. I do believe those are great things to understand but the tone of the whole thing really struck a nerve.
Seriously, get out there and grow your network. Do it by getting over being shy and smile more. Ask how you can help others. And ask for nothing in return. You will be shocked (over time) by how much you actually get back.
Obviously that is not true of many engineers, but the damage to the term is already done (again, perhaps only locally). I find it hard to take programmers who call themselves engineers seriously as a result, even if they are really good at what they do. My advice is not call yourself an engineer if you develop software. You want to use a title that makes people think you do amazing things.
I wish more HR/recruiting people understood this.
Maybe this just reflects my poor aptitude for programming and I've very much behind the curve, so to speak. In which case it is probably correct that recruiters would do well to avoid recruiting me and to filter out those who are not able to learn new languages in a few weeks.
Somewhat true for C also. It's a much smaller language, but there's a fair amount of best-practice and idiom to pick up to be a great C programmer.
That said, a crappy career can put a serious chokehold on life happiness. You spend close to half your waking hours at it, after all.
A heads-up for patio11: There is lots of good stuff here, but it needs to be copyedited. There are a bunch of little errors like the one quoted above.
It is <%= Date.year %>
I should have demanded a bonus for the in-house purchase req system I wrote to replace the antiquated, pen & paper system we had been using for years. I feel better about the salary I was drawing with this in mind.
>Much of Fog Creek uses the Microsoft Stack. I can’t even spell ASP.NET and they’d still hire me.
A bit presumptuous, perhaps?
http://en.wikipedia.org/wiki/Paul_Graham_%28computer_program...
If you choose this path then you dont even have to start a company,all you need to do is make awesome apps.It might be a little hard to start but in a year you should be making good enough money to go independent and then sky is the limit.It is not only possible but probable that you will write better applications (using services like Parse) than entire megacorps.
But now (thanks to services like Parse,Twilio,Github and so many others) I think a good hacker has a decent chance of making it to financial independence completely on his own.
all you need to do is make awesome apps.
Oh, is that all? </sarcasm>The fact is that it's hard to make awesome apps or awesome anything that also makes people enough money to go entirely independent. Especially if you have a family that you need to support.
And even if you do decide to be an independent mobile app developer, parts of this article still apply to you. Your job isn't to make apps.
For example: "Engineers are hired to create business value, not to program things."
Your job is to save people time/money, entertain them, or make their lives easier by making apps.
You are right.If you have a family and dont really have a million saved,it is not in your best interests to quit your job and jump into the risky world of independent app development.But you can over a period of a year or two (by building up your codebase) get to a point where you are making more money than your corporate job.It is at that point that I recommend you fully jump ship.
Agreed that initially you'll have trouble understanding the market and finding applications that people really want.But once you learn to gauge the market, build awesome apps and then market them effectively to people you will lead a much better life than some 9-5 engineering manager at xyz corp filing TPS reports and sucking up to your boss for a promotion.
Judging by the current growth of smartphone market even a good calculator app is bound to make you a lot of money in the long run if you can market it effectively.
And finally if you know how to search effectively on github you will realize that most of the required classes are already built and open sourced by some hacker out there.And if not maybe you can build it and open source it for your fellow hackers.
If you are sufficiently skilled to create a popular iPhone app, you can sleepwalk your way into either $100k+ as a salaried engineer or $200+ an hour doing contracting work. The vast majority of app devs will not reach these numbers.
Personally I would choose 80K a year building my own awesome apps ,making a name for myself,travelling the world ,meeting awesome people than making 200K at xyz corp where I spend my day exchanging bullshit emails with upper management.
I'm not really in a position to share details, but for A-level geeks, there is much, much more than 100-200k to be made. It's true that most people won't achieve that. Much like 90% of sales-people's income are at sub-median levels, it's closer to a power distribution than a gaussian one.
How much of this skill set is programming, and how much is design and marketing and the ability to navigate Apple's approval process? (Legitimate question, not rhetorical.)
Sounds rather like a "Guide to Success in High School" written by the guy that graduated with perfect grades but got his ass kicked every day.
Well, not everybody gets their ass kicked every day.
I absolutely cringe at the idea of a bright-eyed young programmer becoming prematurely jaded based on somebody else's experiences.
"This post aspires to be README.txt for your career as a young engineer."
Definitely failed in that regard for this young engineer and I hope it fails similarly for my cohorts.
When that happens, remember that this article exists. It's good for tactics later, when you realize you can use it.
I've been programming professionally for 15 years, and programming at all for almost 25 (now I feel old). I'm a fantastically skilled, experienced and versatile programmer, even for that experience level. I am, by any reasonable metric, highly successful. I work on very interesting problems. I work for a cool yet profitable company. I do code and not management, and I otherwise get the computer programmer dream job. I may be jaded by long experience, but I'm not bitter and I have no reason to be bitter.
Patrick is totally, completely, 100% on the money with this article. Everything he says is true. Remember where you saw this so you can come back to it in a few years.
I'm a new programmer but not new to business. He hit the nail right on the head for just about any profession (minus to the programming-specific bits).
While this is the case in scientific matters, it's definitely not the case in social matters. There are plenty of things that I and others can do to bring about a business climate that fixes some of the shittiness that the author lays out.
Counter anecdote: I wish I had read this when I was a young coder starting out. Would have saved me much time and trouble.
In fact, I think it would have spared me some of the jaded moments I've had when felt I wasn't progressing as much as I had expected.
Want to see someone get jaded fast? Keep telling them that they just need to be really good at what they do and work hard and their value will be justly rewarded.