Stop calling yourself a programmer and other career tips



There's one course I'd add to any engineering major, and it's not about compilers or the complexity of algorithms. This is “Introduction to the reality of the industry”, because it is not talked about and it leads to unnecessary wreckage. This article purports to be README.txt for a young engineer in the business of building a career. Its goal is to make you happier by filling in educational gaps about how the real world works. I’m not asking you to follow a detailed guide, but I hope that this information will be more valuable to you than anything you’ve been told about it at university.

90% of a programmer’s work is corporate economics: the price of anything (including you) is a function of supply and demand. Let's look at demand first. Most software is not sold in boxes and is not available for download on the Internet or App Store. Most software are dreary, highly specialized enterprise applications that support the global economy from every imaginable angle. These applications calculate costs, optimize shipping costs, help compile accounting reports, design new interfaces, calculate the price of insurance, flag suspicious orders for manual verification, etc. Software solves business problems.

Software solves business problems despite its heartbreaking boredom and lack of technological complexity. For example, imagine an electronic form of travel expenses report. For a company of 2,000 people, it can save about 5,000 man-hours per year compared to manual paperwork, which, at an average cost of $50, saves $250,000. Companies do not care that this is the most primitive CRUD application in the world. The only thing that matters is that it cuts costs or generates profits.

There are companies that make software that real people use, and this description includes almost everything that comes to mind when you think about software. It is very unlikely that you will work for such a company, unless you take specific steps to do so. And even if you do find yourself in such a company, most programmers still do not work on the user part of the application.

Periodically, companies do something for irrational or political reasons (read below), but mostly their actions are aimed at increasing profits or reducing costs. A well-established company lists people who do just that. (Which may, but does not necessarily, imply actual work.) Someone who decided to hire one or more programmers decided to do so not because they like geeks in the office, but because these geeks will allow you to complete a project (or projects) that will increase profits or reduce costs. Creating beautiful software is not a goal, nor is solving complex programming problems or writing trouble-free code. Increasing profits or cutting costs are your only goals.

Peter Drucker — you may not have heard of him, but he is respected by people who sign financial documents — proposed the definition of a profit center and a cost center. Profit centers are the part of the organization that directly earns on bread and butter: partners in law firms, salespeople in companies, investors on Wall Street, etc. Cost centers are basically everything else. You have to be part of the profit center.It will bring you more money, status, and opportunities in everything you want to do. This is not difficult: a smart schoolboy can easily determine the profit center of a company by its description of one paragraph in length. If you want to work in this company, aim for it. If you can't, either (a) go work somewhere else, or (b) arrange a transfer after you're hired.

Programmers are particularly expensive cost centers, which causes optimization itching for any MBA graduate. This translates into such wonderful initiatives as outsourcing, which can be understood as “let’s replace the very expensive cost centers that do some magic, the essence of which we kind of don’t care, but without it, cheaper cost centers in a country with lower labor costs.” (Lyrical retreat: You can safely ignore outsourcing as a threat to your career if you read through this article.) No one will ever outsource profit centers. Trying to do this will give rise to many management jokes. It is as if you were asked to replace the version control system with files on floppy disks.

Stop calling yourself a programmer. The programmer sounds like an “abnormally expensive clunker writing incomprehensible nonsense in other incomprehensible nonsense.” If you call yourself a programmer, know that someone is already working to get you fired. Have you heard of Salesforce, Software as Service? Their slogan “No Software” literally tells future customers: “If you used Salesforce, you could fire half the programmers working on your internal software and put the difference in your pocket.” (There is nothing wrong with that, by the way. You are in an industry that deprives people of jobs. If you think this is wrong, go back to university and learn something unnecessary.

Instead, talk about yourself in the context of your achievements in increasing profits and reducing costs for other employers. If you haven’t had the opportunity to achieve something yet, talk about yourself in a way that makes it clear that you can increase profits and reduce costs and talk about your ideas about it.

There are many highly paid professionals who work with code, but do not call themselves programmers. The Quantitative Analysts on Wall Street are the clearest example: they use computers and math to make decisions more effectively than a group of people without such support, and as a result, their companies make millions of dollars. The bonuses of a successful quant in a good year exceed the earnings of many talented programmers in a decade.

Similarly, even if Google seems like the right company, there are programmers, and there are people whose work led to a 1% increase in click-through rates for AdWords ads. (The latter are worth millions of dollars, is the hint clear?) I recently came across a website of a guy who had a professional biography that said, “I created the code for a billing system that runs 97% of Google’s profits.” He's now doing angel investing (which is a beautiful way of saying he's very rich).

I recently asked on Twitter what aspiring programmers would like to know about how to build a career. Many people wondered what programming language or technology stack to learn. My answer is, it doesn't matter.

Do Java programmers earn more than .NET programmers? Anyone who considers themselves a Java programmer or .NET programmer is already out of the picture, because a) they are programmers (and you, as mentioned above, don’t) b) they are shutting out the possibility of being hired for most positions. In the real world, learning the basics of a new language takes a couple of weeks, and after 6-12 months, no one will know that you haven’t done it your entire career. I was developing Enterprise Java back in March 2010 (article written in October 2011). Trust me, nobody cares. If a Python company is looking for someone who can make money, the fact that I haven’t written a line of Python code in my life won’t play against me.

Talented programmers are rare, much rarer than they are needed, so now the most favorable situation for job seekers in almost all industries. Matasano says Ruby. If you don't know Ruby, but you're a good specialist, you'll still be hired. (A good professional has experience in — repeat me — increasing profits or lowering costs.) FogCreek uses the Microsoft stack. I can't write an ASP. NET makes no mistake, but they'll still hire me.

There are companies with such a crooked hiring process that if your resume doesn’t have the keyword you’re looking for, you won’t even be invited for an interview. In such companies it is better not to work, but if you really want, then spending a few evenings and weekends you can add the right words to your resume. But it’s even better to influence your choice of technology at your current job in a way that promotes your career. Want to learn Ruby while working for a .NET company? Do a one-time project on Ruby. And, oh, oh, you became a professional Ruby programmer, you wrote in Ruby and you got paid to do it. (Funny? I did this at a Java company. A one-off Ruby project earned us $30,000. My boss was expectedly happy and never wondered what the project was about.

Colleagues and bosses are not your friends; you will spend a lot of time with your colleagues. Sooner or later, you can become friends with some of them, but in general, within three years you will change jobs and, despite the warm relationship, never invite any of them to visit. And they will treat you the same way. You should be nice to all the people with whom life brings you, which is just right, and also helps to develop connections, but do not be in the illusion that everyone around you is your friends.

For example, when you're hiring, you're talking to a nice 28-year-old guy who just seems like a better copy of you from the future. It doesn't lead to anything.. He doesn’t see you as a friend, he sees you as nothing more than a resource for the company he wants to buy at the lowest price. Talking about World of Warcraft is nothing more than making contact, and he’ll probably (hopefully, decently) try something your friends will never let you do, like talk you into dropping a few thousand a year off your paycheck, or manipulate you into sticking around and working longer when you could spend that time with your real friends. You’ll also have other colleagues who, courteously and decently, will offer things that go against your interests, from “I’ll take your credit for this project” (maybe it’s a little shorter) to “we should do what advances my professional interests, not yours.” Don't be surprised when that happens.

You greatly overestimate the market average level of competence of your competitors, focusing on those people who directly surround you Many of those who are now working as a senior programmer, in fact can not write FizzBuzz. Curtain. The bottom line is that you are likely competent enough to work for a dream company. Let them hire the best of mere mortals, but nevertheless they hire mere mortals.

“Announcement. Resume. Interview. Most jobs will never be announced publicly, just as the best candidates are never openly free (read this here). Information about the vacancy spreads approximately at the speed of a glass of beer, and is sometimes smeared with email correspondence. Someone wants to hire a programmer. He informs his friends and business partners about this. Some of them definitely know someone suitable - a family member, a roommate from a university dorm, a friend from the conference, a former colleague, etc. People are introduced to each other, meetings happen, they reach a principled hiring agreement. And only after that, the dances with the resume / HR department / contract and other formalities begin.

This is especially true of the most important jobs. Being the first employee of a successful startup has a certain flair among IT professionals, and none of these vacancies were closed with a resume sent to the HR department, in part because the 2-person startup does not yet have enough subcutaneous fat to organize the HR department. (Most likely, you should not aim to become the first employee of a startup, rather, become the last of the co-founders.) Do you want to work at Google? They have a formal process to push you a little bit ahead just for being recommended by another Google employee. (In addition, your sympathetic Google employee has some unofficial ways to influence the process.) One option is to buy the company you work for. When you have a couple billion dollars in your pocket, you have a lot of interesting ways to solve problems.

There are many reasons why hiring is private. One of them is that in response to a published vacancy comes a huge number of unwanted resumes (especially in the current situation) from blatantly inappropriate people. Another is that some companies are so inept at hiring that if the employer doesn’t know the candidate personally, they can easily hire someone who can’t write FizzBuzz.

Developing connections means (a) meeting people who may one day be useful to you (and vice versa), and (b) making a good impression on them.

There are many places to meet. For example, industry events such as conferences or open lectures at universities. User groups are another option. Keep in mind that these events attract different audiences, and adjust accordingly.

Always try to help. This is the right thing to do, especially given that people tend to remember well who helped or accepted their help. If one day it happens that you will not be able to help a person, but you know someone who is able to solve his problem, introduce them to each other. If done right, these two will be happy now and willing to help you in the future.

You can also meet online, but something about our monkey-inherited brain makes face-to-face interaction particularly important. I met people on the Internet and then translated the contact into the real world. A physical handshake is a big move in a relationship, even if you’ve already helped someone make more money online with your advice. Write a blog, participate in forums on Hacker News or other prominent resources in your industry, but remember to go to real meetings.

Your GPA doesn’t matter (with rare exceptions, as in one international advertising agency). It only affects whether your resume will be selected for an interview. If you’ve read what’s written above, then you know that sending a resume isn’t the only way to get into an interview, so don’t spend too much time optimizing something that already works well enough (since you’ll get a 3.96 average call as often as you get a 3.8), or something you just don’t need (since you know how to find work by inviting the right people for coffee).

The profession and department in which you studied do not matter. Most executives in the industry do not know the difference between computer science and applied mathematics. It was the case that I was ready to cry because a small puncture with my studies called into question my ability to get a more prestigious specialty in the diploma. In the scientific community, these little things are important. Not in the real world.

Your teachers may know how the scientific job market works (in a nutshell: it’s wildly inefficient and confusing beyond any human comprehension), but they have a pretty idealistic view of how it works in the real world. For example, they may urge you to pursue additional specializations because it is (a) a good idea (b) they always need slaves working for Rollton to conduct their scientific work. Remember that the market value of a specialist capable of conducting scientific work is $ 80 - $100,000 per year. Rolltons for this money can be eaten.

The teacher I was writing for offered me a place in the department, tuition fees and as much as $12,000 a year as a scholarship if I signed up to work with him for the next 4-6 years. This is a great offer if you have just immigrated from a country with a lower salary and need support in obtaining a visa.

If you really like the atmosphere of the university, then no problem, put a backpack over your shoulder and you can enter the building of any university in the United States at any time. Buying a backpack is much cheaper than staying in science. In commercial companies, you can also work your head, but there will be less policy and you will be better paid. You can even publish in magazines if you need one. (In the field of being let in by the crazy atmosphere of the scientific community, you may rightly begin to question whether publishing in a scientific journal is anything more significant than, say, publishing a blog article that smart people read.)

How much do programmers earn? Wrong question. The right question is, what job offers do programmers usually agree to? Because salary is just one of the levers that can be used to attract you. And my answer to that question won't help you very much: all sorts of things.

In general, large companies pay more (money, social package, etc.) than startups. Programmers who know their worth earn more than those who doubt themselves. Senior programmers earn more than younger programmers. People working in more money-making industries earn more than those working in less money-making industries. People who know how to negotiate earn more than those who are not good at it.

We have a cultural taboo about never talking about pay. But it's not absolute. In many cultures, it is acceptable to talk about money in a professional context. (If you were a middle-class Japanese, you would find it appropriate to share your income with anyone at your second meeting, from the guys on your football team to the chef who gives you sushi.) If you owned a company, you might be more evasive about yourself, but your employees' salaries would be discussed in the same way that programmers discuss compilers - often enough and without a shadow of embarrassment. If I were a Marxist or a conspiracy theorist, I would assume that American culture was specifically designed to serve the interests of employers and against the interests of employees. Before discussing salary with a potential employer, it is worth talking to someone who already works in this company in a similar position and clarify the fork. In the yard <%=Date.today.year%>; such a person can be found on the network (using LinkedIn, Facebook, Twitter or any other non-graphic social network).

In one form or another, programmers are usually offered a social package. In the United States, it makes sense to worry about health insurance (usually the employer pays most of the cost) and pension savings, which are usually offered in the format of “we will report to your retirement account an amount equal to what you contribute there, up to a maximum of x% of your annual salary.” What you get as a result is easy to calculate: x% of the annual salary. (This is extra money, so always make the most of your employer’s retirement plans.) Invest that money and forget about it for the next 40 years.

There are other buns like free drinks, office lunches, paid programming books, etc. These are more social pas. If I offer to buy you drinks, it primarily speaks about the order in my company and how I will treat those who work for me. (Literally, “I’m going to inspire inexperienced young programmers to work hard by giving them penny soda and saving them tens of thousands of dollars in pay while helping them ruin their health.”) I like soda. Be able to see such social pas and react accordingly. For example, a company willing to pay for its employees’ training may be a worthwhile place to work, but don’t settle for a substantially lower salary in exchange for something you can easily go and buy yourself.

How do I become a better negotiator? You can write a whole separate article about it. But in short:
  1. Remember that you are selling a solution to business problems (increasing profits and reducing costs), not your programming skills or an intelligent person.
  2. Negotiate aggressively and confidently as a professional. That's how it's going to be on the other side. If you are trying to come to a mutually beneficial offer, do not agree to everything.
  3. “How much did you earn in the previous place?” understand as “tell me a reason to offer you less.” Answer accordingly.
  4. Always have a ready counter offer. Be prepared to bargain for something other than money. If they can't offer you a bigger salary, ask for a longer vacation.
  5. It is appropriate to talk about money only after you have reached an agreement in principle on the transition. Usually, this conversation happens at the very end, when they have already invested quite a lot of time and money to get you, that is, not in the interview. Remember that not being able to negotiate with you at this stage promises them a loss, so they probably won’t push too hard on things that are small for the company, but significant for you, as if you threw a few thousand on their salary offer and firmly defended it.
  6. Read the book. A lot has been written on the subject of negotiations. I love “Getting to Yes.” The idea that not being able to negotiate costs you thousands of dollars annually can be embarrassing, and so programmers often don’t make a dedicated effort to learn it, instead spending time playing games with some new technology.

How much is Roll d100 stock? (You're not one of these? Excuse me, rand(100).

0-70: Your stock is worth nothing.

71-94: Your stock is worth approximately the amount you didn’t earn when you went to work for a startup, instead of a larger company with a higher salary and social security package.

95-99: The value of your stock will change your life. However, you won’t feel rich because many of the people you’ve worked closely with in the last couple of years are wealthier by definition. But your family won't criticize you for not going to $TA_SAMAYA_KOMPANIYA as a good $NA_KOGO_VAM_PREDLAGAUT_RAVNYATSYA.

100: You worked for a Google killer and your fortune is enormous. Congratulations.

The inquisitive reader will notice that 100 will never be the result of a d100 or rand(100) call.

Because you greatly overestimate the likelihood that the startup you work for will shoot, and greatly overestimate the piece of the pie that will get you if it happens. Read about the priority of shareholder payouts when you liquidate a company on Hacker News or Venture Hacks, and then think about what the people who write about it understand about venture deals as much as you do about programming, and how you can conjure up code when several million dollars are at stake.

Should I start a career in a startup? There is a high probability that a couple of years you will work very hard, often and painfully break down, in the end will be out of work and will look for a new startup. If you really want to work in a startup, work for a large company, accumulate money, experience and connections, and a couple of years after graduation, make your own.

When you work in a startup, startups like yourself become your social circle. After a few years, most of these people won’t be able to hire you. When you work for a large company, you work with people who work for large companies. Many of them will be able to offer you a job or recommend you to someone in a few years.

Is it like working in a startup or not? Working in a startup is certainly a career path, but more of a way of life. It’s like working in the financial industry or in science. These are three very different approaches to life. A lot of people try to get you there for their own reasons. If you really like living as a startup, go ahead. If you like only some aspects, then remember that if you really want, you can organize a lot for yourself. For example, if you want to work with the latest technology, and it’s important to be home by 5:30 a.m. to be able to see the kids, then you can work with new technologies in a huge number of large companies.

(No kidding.) If something generates profit, companies will invest in it. Of course, in addition to this, they will also make a huge number of CRUD applications, but startups are not much different from large companies, except that they are better at describing their CRUD application. The first hour of working on the new social network is trying to make the CRUD app interesting, the rest of the time is the drama of the divorce of a couple of heterosexual men.

Always remember that programmers are hired not to program, but to make them useful for business. The main quality that affects whether you get a job or not is your ability to convince others that you are useful. It is not necessary to be useful at all.

Many of the best programmers I've met are pathologically unable to keep up the conversation. As a result, other people (a) don’t want to work with them (b) underestimate their contribution, because to learn something about what they did, you need to talk about it, and they just don’t implement the protocol. The reverse is also true: people on average think I'm one of the best programmers they've ever met, because I'm (a) obviously able to program (b) very, very good at writing and speaking.

(There was a time when I considered myself a “slightly below average” programmer.) Since then, I’ve realized that I had a rather skewed view of the distribution of skills, that programming skills are not something to focus on, and that my modesty is playing against me. Today, if you ask me how cool I am as a programmer, I'm likely to start telling you about how I wrote a system that helped millions of children learn to read or that helped the company make millions. Where I am with my programming skill on a normal distribution graph nobody cares, so why should I care?

Communication is a skill. Exercise and you will get better and better. One of the important skills of the second order is the ability to quickly, concisely and confidently tell about what you are useful to someone who does not understand the subject area and who has no reason to be disposed to you. If technical terms appear in your speech during this exercise (“reduced 99 percent of queries by 200 ms by optimizing indexes...”), try again without them. You must be able to explain what you are doing to a smart eight-year-old, the chief accountant of your company, a programmer of another specialty, or see for yourself which abstraction suits you best.

Enterprise sales is when you come into a company and try to convince them to spend a six- or seven-figure sum on software that will either increase their profits, liyouo will lower costs. All interviews are corporate sales. Your political and communication skills, as well as your ability to build relationships, are critical, while your technical skills are secondary.

When you try to convince your colleagues to implement your ideas, you sell too. If doing business is your direct duty, then being able to convince people is your main professional skill. Take your time and hone it. This means being able to communicate effectively in official letters, emails, one-on-one conversations, meetings, and PowerPoint presentations (where appropriate). It means being able to write a business case for a technology initiative. It means realizing that sometimes you have to sacrifice technology to achieve business goals, and rightly so.

Many programmers have problems with self-confidence. Many were so educated that bragging about their achievements was discouraged. In American corporate culture, such modesty is not valued. A more appropriate tone for interviews and communication can be described as “confident, restrained professionalism.”

If you’ve worked as a team and your team has been successful, don’t say “it wasn’t my job, it was the team’s job,” unless you’re in a position where everyone knows you’re lying to appear modest. Try this: “I was happy to contribute by coordinating the team’s efforts at $VASHA_SPETSIALNOST.” Practice in front of the mirror until you can say it with a serious face. You may feel that you are exaggerating your contribution. Don't think about it. Whoever claims to be coordinating production optimization by being a sandwich packer is exaggerating his contribution. You're a programmer. You do your magic tricks and people's lives get better. If you were in charge of the database on an important project that involved other people besides you, then hell yes, you coordinated the team’s efforts to work with the database and that was critical to the success of the project. That's the game. If that makes you feel bad, you're like a baseball player who doesn't steal bases: you're not moral, you just can't play.

All business decisions are made by chimpanzee’s multicellular relatives, not by following rules and algorithms. Social dancing is an important skill. People often support their friends’ ideas, even though other ideas may be better. People are often more inclined towards those with whom they ate at the same table. There is a book called “Never Eat Alone.” Perhaps it is worth reading, the name does not lie. People prefer people like themselves. (This can be treated well, neutrally or differently. Simply accepting this fact is the first step to taking advantage of this state of affairs.

Your appearance is also at least important, because it is ridiculous to just pick up the key with the help of simple tricks such as clothes that are adequate for circumstances, professional appearance, confident tone of voice, etc. Your costume will cost less than a new monitor. You will need it very rarely, but in these rare moments you will be very, very happy to have it. Honestly, if I go to a government agency dressed in my everyday clothes, I am treated like a dysfunctional teenager, while when I am dressed in a suit, I am treated like the director of a multinational company. I'm actually a dysfunctional teenager who's the CEO of a multinational company, but it's up to me to decide what to focus on when I'm dealing with bureaucrats.

(The people I work with may argue that I’m a swindler when I talk about myself as a director of a multinational company, because my company doesn’t look very similar to what most people think when it comes to a “multinational company.”) I'm sorry, it's just a conversational trick. If you think people don’t like being dusted in their eyes, I’ll tell you that there are people who hate people in costumes. But that doesn't diminish the value of the costume. Just be appropriate to the situation. Answers that are only technically correct are, by the way, the best type of answer when the Ministry of Migration threatens you with deportation.

Talk to older people or simply believe sociologists who claim that family, faith, hobbies, etc. are more important to happiness than money and career success. Draw conclusions. Making a career is important, and right now it may seem like the most important thing in your life, but chances are you’ll reconsider your views over time. Work to live, not the other way around.