The Best Thing About Teaching Myself to Code Wasn’t that I Can Code

I love learning but never liked school.

School told me that the time to learn math was 12:55 to 1:50. School made me read pages 142-175 and answer problem set 7 on page 176. School gave me a quiz the next day. School often made me sit quietly in a chair while someone talked at me. School had no obvious or immediate practical application. School made me think sports are cool and learning isn’t. School taught everyone the same things with the same methods at the same pace.

Teaching myself to code was the opposite of school.

I had no boundaries, no rules. I pursued every direction that interested me. I watched a few videos on computer science, then read a blog post about website vulnerabilities, then built a website or scraper while figuring out and researching everything as I went. Sometimes I worked for six hours straight, forgetting to eat, and other times I worked for 15 minutes. I swam or biked or ate when I wanted to do something else. I learned in the morning, at night, and on the weekends. Most of the time, when I wasn’t learning, I couldn’t wait to get back to it.

I love learning and loved learning to code.

Teaching myself to code taught me how to learn. Taught me that learning could be fun, fulfilling, inspiring, empowering, flexible, challenging, and practical. Taught me that I can teach myself almost anything, without anyone’s help. Taught me to try to figure it out before asking someone. I’d learn more that way, probably find the answer myself, and feel better about it.

The best thing about teaching myself to code was learning to learn.

And, as a nice bonus, now I can code.

(P.S. This blog post is three parts the problems with much of our educational system, two parts how valuable, practical, and fun I found coding to be, and one part my personality and lack of maturity through age 25.)

@jaredcohe
disclaim.in

Related Posts:
From Lawyer to Startups: My Poorly Executed But Successful Career Change
The wrong question: “I want to learn to code, what should I do?”
Learn the Basics of Computer Science and Web Development

How To Value Your Startup Stock Options - Discount Value

In the last several years at Kickstarter, SeeMe, and advising startups, I’ve spent a lot of time trying to build models for awarding stock options in the fairest ways possible, talking to startups about the models they use, and thinking about the different ways to value companies and options.

This post explains one simple way to think about the value of your startup stock option grant, especially if you want to compare two or more offers. On the company side, it may also help you in building a model to award options fairly.

Option value is much more complicated than this, and I’ll write more about it in the future (as best and practically as I can, I’m no expert), but this gives a framework to begin understanding value.

Discount Value

A practical way to understand and value your options at the moment of grant is their Discount Value. Their Discount Value is the dollar amount the startup is transferring to you at the moment of grant, based on the difference between what an investor most recently paid for special “preferred” shares and the price you’d have to pay to exercise the options to buy the regular “common” shares.

Discount Value = Number of Options x (Investor’s Price for Preferred Shares - Your Exercise Price to Buy Common Shares)

It’s a “discount” value because if the company is successful, the value of your common shares will increase, the investor’s preferred shares will convert into common shares, and the value of both will be the same. So, with the Discount Value formula, you have a decent approximation of the dollar amount that the company is awarding to you on the day of grant based on the value the company and investors agreed upon for the company’s preferred shares.

In practice, if the company is successful, both the preferred and common shares will end up being much more valuable, but that future growth is difficult to predict and above even where investors are valuing the company at that moment, so for this simple version for calculating value, we’ll ignore that.

Check out the three examples in this spreadsheet.

To walk through the one in row 2: A startup offers Megan 10,000 options with an exercise price of $0.15 a share and an investor price of $1 a share, the Discount Value Megan’s getting is:

10,000 x ($1 - $0.15) = $8,500

If you divide that value over the four-year vesting period, Megan is getting $2,125 of Discount Value each year.

Before joining a startup, ask for the data you need to calculate your Discount Value. (If the company won’t tell you, that may be a sign that something’s wrong.)

The true value of options is much more complicated to calculate, but this should give you an idea of how to think about the value you’re getting. Don’t just look at your potential number of shares or potential percentage of ownership and compare that across offers. That’s the wrong way to compare value. You need to know the total size and value of the pie to know what your piece is worth. Just knowing the size of your piece in share amount or percentage isn’t enough.

Keep in mind that most options in startups end up being worth nothing, and a few end up being worth much more. But, consider them worthless, until they become real money in your bank account that you can use to buy bitcoin or a hat. Don’t rely on them for your retirement plan.

Please tweet at me if you have any comments, I’d love to hear them and improve this if you have feedback.

disclaim.in

Ten Tips for Getting a Startup Job (Even If You Have No Experience or An MBA)

I’ve applied for hundreds of jobs, been ignored or rejected almost as many times, read thousands of applications, been on one side or the other of hundreds of interviews, and been part of hiring over a hundred people across three startups and in finance, law, and advertising.

So, as a follow-up to my recent blog post: From Lawyer to Startups: My Poorly Executed But Successful Career Change, I wanted to share some things I learned about how to increase your likelihood of getting a startup (or almost any) job.

Ten tips for getting a startup job:

  1. Know yourself. Write down what you’re looking for and why you want it. If you can’t explain that, you’ll have a hard time finding the job that’s right for you and convincing the employer that you’re right for the job.
  2. Get your name out there in every way possible and take every opportunity to learn. Blog, comment on blog posts, Tweet, reply to Tweets, Meetup, send emails to people you know and don’t know, Linkedin, attend events, ask for intros and intro yourself (an introduction from someone, if you have that option, is much better than approaching someone cold), ask for informational interviews, read everything relevant, network however you can. The more you’re out there, the more you’re educating yourself and meeting people who can help you. One warning, while doing these things, don’t cross the line between being persistent and showing initiative to being annoying and spammy. As you might guess, that does more harm than good. You’ll become that “crazy person who keeps spamming everyone.”
  3. Have an online presence. Having an online presence makes it easier for an employer to get to know you through your application, shows you’re interested in and very familiar with the internet, and sets you apart. Too many people apply for jobs at internet companies while having almost no internet presence. To work in the internet, you need to use it a lot.
  4. Know the market, company, and job. Start by learning what jobs are available are by finding startups you like and looking at their jobs pages and at their employees’ Linkedin profiles, and by finding people to ask questions (as discussed in point 2). After you find the companies and jobs you want, learn as much as you can about the company and that job. Read the website, press coverage, and social media. Get to know the culture and employees. Read their blogs and Tweets. Talk to people who know the company or have similar jobs elsewhere. If you know the company, you won’t get laughed at for wearing a fancy tailored suit to a startup job interview, like I have. “It’s an interview, obviously I have to wear a suit” is not always true.
  5. Tailor your application. One tailored application is better than a hundred generic ones. After you do your research, apply that to the application. Show your interest in that company and that job specifically. It should take a lot more than five minutes to apply for a job.
  6. Set yourself apart. What can you do to stand out? Use the company’s product. Do a project that they might need or be impressed by. Write a relevant blog post. Attend a relevant Meetup or conference. Join relevant organizations. Give them useful feedback through social media. At my last job, we saw one job applicant in various places around the internet talking and answering questions about us. He got hired.
  7. Present yourself in a quick and easy to consume manner. Long, formal cover letters accompanied by long resumes in small font are difficult to digest. Would you want to read that? I used to think I needed to squeeze in every detail because any of those tiny points could be the one that gets me the job. Now that I’ve been on the other side of so many hires, I think I was wrong. The employer should be able to get an initial feel for you in less than a minute, should be able to consume the entire application in a couple of minutes, and should be able to follow links you provide to really get to know you. Unlike Mark Twain, who said, “I didn’t have time to write a short letter, so I wrote a long one instead,” take your time and make it tight.
  8. Be likable. Few people will hire you if they don’t like you. Your other skills matter, but one very important skill is being likable. This may be easier to say than do, but keep it in mind. Winning an argument with the interviewer might not be the best way to win their endorsement. Likable people are good for company culture, productivity, work quality, recruiting, employee retention, and lots more.
  9. Focus on what YOU can offer to THEM. Ask yourself: Who will be reading this? What would I be looking for if I were hiring someone for this position? How can I show it’s me? Many job applicants focus on what the employer and job can offer them. The employer’s primary goal in hiring is to get the best person for the job, not to satisfy your goals and needs. Show who you are. Show you have skills. Show you have initiative. Show you’re willing to do whatever it takes to move the company forward. Show your persistence, curiosity, and ability to learn and problem solve. (MBAs: DO NOT use the word “strategy.” Almost none of you will start there and no one wants to hear that.)
  10. Get in the door, then do your best at everything. The rest will take care of itself. Be open to taking a job that isn’t at the level you think you should be. Startups are often true meritocracies. You’ll end up where you belong. And if not, you’ll move on to somewhere that you believe treats you more fairly.

Hope that helps someone.

disclaim.in
@jaredcohe

From Lawyer to Startups: My Poorly Executed But Successful Career Change

How’d you get that job?

That’s a question I’ve wanted to ask hundreds of people over the last twenty years. I would’ve loved to have heard their stories to help me make better decisions when managing my own career. In the last several years, for the first time, many people have asked me that question. And, I’ve been answering it every time, often in person, even when it comes from someone I don’t know, because me five years ago would have done anything to meet me today. But, that approach isn’t scaling well. So, to help the many people who are figuring it out like I was, here’s the short version.

But before I tell this story, I have to thank the people who came before me and built this country in which we prosper. One of them is my grandfather, who survived the Holocaust while saving lives, found his way to America, and then literally built parts of this country working construction to support his family. Because of that, I received a great education and could try out a few careers until I found a job that was challenging, fulfilling, and meaningful. I can’t overstate how grateful I am for the opportunities and happiness that I have. I don’t take a day for granted. And, I try to work hard, keep perspective, and give more than I get.

And now back to the story…

After working at some of the biggest companies in finance, consulting, and advertising, I went to law school and then followed the parade to a big law firm. I planned to work there for a couple of years, repay as much as possible of my $150,000+ in loans, then move on. My experience was better than I expected, so I stayed for longer than I thought I would. During my fifth year there, I decided it was time to transition into something that was more interesting and meaningful, something in a growing business, where I could learn more about the internet and technology, and feel like I’m building something and moving the world forward.

Most of my professional experience was in the law, including employment law, so I first tried applying for mid to senior level jobs in law and human resources at startups in NYC. I didn’t really want to be in either of those departments, but I also didn’t want to start over. I figured I’d start there. I’d prove myself. Then, I’d transition.

I wrote typical, forgettable cover letters. I attached my resume with good schools, grades, and jobs. An application that I was so sure would make me special. The kind of application I’ve now seen a thousand times.

Dear Company, here is a narrative restatement of my resume. Attached please find my awesome resume in resume format. Please hire me. Sincerely, Jared Cohen

I got the response I deserved: almost none.

While I felt like I was getting nowhere, I was actually making progress in a sense. The process of researching and applying had convinced me that I’d be happy and fit in well at a startup. So, I decided I was going to do whatever it took to get a job. I experimented with cover letters and resumes, making them more creative and less typical. And, I applied to almost every entry level job at any startup on either coast. If they had no jobs listed, I applied anyway. I figured I’d prove myself and work my way up.

Eventually, I got one.

I took an almost 90% pay cut, packed two suitcases, and moved from New York to San Francisco. As I sat in the back seat of the taxi to the airport that morning watching the sun rise, it became very real. I felt like I was watching someone else’s stupid decisions.

The first month or so at the job I was reading documents and typing data into Google spreadsheets. But I quickly moved up in the company. I built and managed a data team of twenty people and joined the executive team.

I also decided I was going to try coding. I told the engineers, who I had become friends with, that I wanted to learn and had always liked working with spreadsheets. After they stopped laughing, they directed me to Ruby and some resources.

I dove in and quickly fell in love with it. I dedicated nearly every spare second to teaching myself about computer science and web development. The engineers coached me, and celebrated when I wrote out Fizz Buzz on the white board without any trouble. I started grabbing engineering tickets out of the assigning system and doing them. I ended up spending half of my time at work on product and engineering.

A year later, it was time to move on. I had learned so much. My resume had been transformed. I applied for product and engineering roles in NYC. I even got a couple without too much trouble. I was about to accept one when a friend told me Kickstarter was looking for a Director of Operations. I applied, interviewed, and got the job.

My first couple of assignments were to figure out payments so we could expand internationally, and figure out what to do about our shrinking office space. While no one told me to, I also took out the garbage when it was full, killed mice when I could catch them, replaced the doorknob when it was broken, and plunged the toilet when it was clogged. As people began to see me less as the scary corporate weirdo, and more as someone who was sincere and helpful, I started doing so much more in so many areas. It was amazing.

In the last three years, Kickstarter built a payments system, went international, bought a beat-up old pencil factory, built a building, and has become a smooth running, growing, profitable company.

And, I’ve found a career that’s challenging, fulfilling, and meaningful. My transition is complete.

If you have any feedback or questions about this post, please comment or Tweet at me: @jaredcohe.

Coming soon: the lessons I learned during this transition and how to do it more quickly and less painfully.

disclaim.in

The common goal in compensation negotiations should be fairness

When negotiating compensation, the common goal most likely to lead to a successful, long-term employment relationship is fairness, not maximization by the employee or minimization by the employer.

The compensation negotiation can set the tone for the relationship and is an early impression of company culture. Both sides want the relationship to be successful. Both sides want to start the relationship working together and accounting for each other’s interests. The employer doesn’t want the employee to feel underpaid and resentful. The prospective employee doesn’t want to raise expectations to a compensation that’s beyond the value they’ll provide.

So, do it right.

You, as the employer, should take the lead and set the tone of the negotiation with three steps:

1. Explain the negotiation process. Tell the prospective employee that your goal in setting the compensation is fairness that leaves both sides satisfied — not to get the prospective employee as cheaply as possible — and that you’d like the prospective employee’s help in achieving that goal.

2. Describe how you arrived at the offer. Explain the compensation surveys you looked at, that you spoke to other companies and investors, and the comparisons you did with the compensation of current employees to ensure employees are treated fairly with respect to each other. Explain that you try to set compensation with the state of mind that if compensation at the company and in the world were public, it would be fair and no one would be surprised.

3. Ask for thoughts and feedback from the potential employee. Ask to be educated on how they’re evaluating the offer. Ask what information they have about the market. The prospective employee probably has relevant information that you don’t: other job offers, previous jobs, and friends in similar roles. That’s information that will help you in this negotiation and future negotiations, and will help ensure that your current employees are being compensated fairly.

You, as the employee, should fully participate in the process:

1. Do your own research on the market. You need data to do your part and ensure you’re treated fairly. Finding data can be difficult, but do as much research as you can about what a fair compensation is. Ask the internet. Ask friends. Ask friends of friends. (Getting competing offers is good, but obviously may be difficult.) Be sure you have the right market: non-profits, startups, and big public companies will have different compensation. Share any data that you have to support your position.

2. Ask for what you’re worth! If you get a fair offer, take it. But, don’t be afraid to ask for what you’re worth. You’re valuable! If the employer is making you an offer, they want you to work for them!

If everyone approaches the negotiation with the goal of fairness, with each other’s interests in mind, and with an open mind, the negotiation is much more likely to end with everyone satisfied and a long-term successful relationship.

(This mindset and approach applies to other negotiations that are launching a continuing relationship, such as with investors.)

(File this under quixotic.)

disclaim.in
@jaredcohe

How To Be A Great Manager

The prerequisites for being a great manager are:

  • Sincerely and deeply caring about your team and company.

  • Having empathy, self-awareness, organizational awareness, perspective, maturity, and security.

If you possess those characteristics, you can become a great manager in practice by doing the following:

  1. Empower your team.

    Your job is to set high expectations, invite questions, be available, and trust your team enough to let go. Your team’s job is to own their tasks, update you, and ask questions. Don’t micromanage. Get involved the minimum amount possible.

  2. Serve your team.

    Your job as a manager is to serve your team, not the other way. Put your team before yourself and you, your team, and your company will all be better off. Give credit and take blame. Stand up for them. Highlight them, their skills, and their success. You can’t succeed if they don’t.

  3. Seek and provide open, honest, and frequent communication of all kinds.

    Celebrate, discuss, and learn from successes and failures. Encourage debate. Ask for ideas. Seek and provide immediate and frequent feedback.

  4. Develop strong relationships.

    Your relationships with your team set the foundation for everything else. Strong relationships make you and your team happier, communicate better, and more successful. Take time to get personal. Once a month at your team meeting, talk about your life outside of work. Get together outside the office. Get to know the other people in their lives.

  5. Understand strengths, weaknesses, and motivations.

    Keep notes on everyone. This isn’t a list you update and glance at once a year. This is something you think about every week, in the context of every meeting and every assignment. This guides how you apply these practices to each person.

  6. Focus on career development.

    Align your team’s career goals with day-to-day tasks when possible. Push them to think about and accomplish their goals. Help them develop the skills they’ll need.

  7. Be available.

    Do one-on-ones with each person. Don’t block someone’s progress on a task. Pitch in when it makes sense. When a big project is taking long hours, be there and help out.

  8. Be positive, enthusiastic, and energetic.

    Your attitude permeates the team. If you have the right attitude, so will they. Your attitude will be in the background on everything your team does. It will make good times even better and bad times easier to push through.

  9. Explain the contribution to the whole.

    Your team wants to be part of something bigger than themselves. Talk about how team responsibilities and tasks are consistent with and contribute to the company and mission.

  10. Tailor your management.

    Every person and situation is different. Be flexible, not dogmatic. These are good practices to start with, but learn, adapt, and apply these as you see fit.

  11. Bonus point and maybe most importantly: HIRE WELL!

    No easier way to be a great manager than to hire great people who are easy to manage.

If you’re going to dedicate yourself to being a great manager, do more than read about it. Take the best ideas from every source. Make a checklist of the things you need to do. And check them off repeatedly. Your team will notice.

disclaim.in
@jaredcohe

Changing a Title in Instapaper through the Bookmarklet

If you don’t use Instapaper or some similar tool, I don’t know how you survive. Instapaper is a great way “to save web pages for reading later.”

image

To summarize, you simply click the bookmarklet and the webpage appears in your reading list.

One feature that I wish Instapaper had is the ability to add a note through the bookmarklet. Often, I Instapaper something that someone sent to me. When I read it later, I want to remember who sent it, so I can respond to them. You can always go to your Instapaper account and edit the title. And, maybe that’s the easiest way. But, one other quick and simple way to do it is:

  • Go to the webpage you want to read later.
  • Right click anywhere on the page to open the menu.
  • Select “Inspect Element”.
  • In the window that opens at the bottom of the screen, be sure you’re in the “Element” tab.
  • In the html, click the gray arrow next to the “html” tag to expand it (if the arrow is pointed down, it’s already expanded), then do the same for the “head” tag.
  • Within the “head” tag is a “title tag”, double click on the text between the opening and closing “title” tags and edit that to be whatever you want the title to be in Instapaper.
  • Then click Instapaper’s “Read Later” bookmarklet.

Nothing too exciting here. You’re just changing the html that the bookmarklet grabs and saves. The bookmarklet grabs the text in the “title” tag to use as the title in Instapaper.

These instructions are for Chrome, but most browsers can do something similar.

Tags: instapaper

More Online Computer Classes: PeepCode and The Command Line

In the last couple of weeks, I started using PeepCode. So far, the classes have been great.

First, I did Meet the Command Line and Advanced Command Line. These did a really good job teaching the basics of how your computer works at the file level (if that’s the right way to explain it), including:

  • directory structure
  • meaning of files and directories
  • commands to use to interact with your computer below the graphical interface
  • lots of basics on how files work, permissions, ssh, shell functions…

Those two classes are great additions to the syllabus for how to teach yourself the basics of computer science and web development.

I also watched parts of:

All four of those look awesome and I’ll be doing them soon.

disclaimin

Combine Rails Database Migrations When It Makes Sense

I used four migrations to create and change a model in Rails. The first migration created it. The next three migrations changed fields as I learned exactly how I wanted the model to work.

A friend saw my code and told me that when possible I should combine migrations. Migrations become hard to manage and track, especially with multiple developers. Combining would keep the code neater and easier to understand and maintain.

I had already migrated my local and production databases, so I had to rollback, fix the code, and migrate again.

Locally, it was easy. I ran:

rake db:migrate VERSION=date_of_migration_to_rollback_to

If you need some background on migrations, check out this Rails Guide. It explains:

Migrations are stored as files in the db/migrate directory, one for each migration class. The name of the file is of the form YYYYMMDDHHMMSS_create_products.rb, that is to say a UTC timestamp identifying the migration followed by an underscore followed by the name of the migration.

Here, the date_of_migration_to_rollback_to was the timestamp in the migration preceding the one that created model.

I then updated the code, combining the four migrations into one. I migrated the database. And it all worked locally.

On production it was a bit different. I had to SSH into the server as the deploy user. I navigated to the releases directory. Those releases are named only with a timestamp. I had to open each one until I found where to rollback to. Then, I ran

cap deploy:rollback

several times until I was in the correct place. As far as I could tell, no one command on production let me directly target the release I wanted to rollback to. Each time I ran the rollback command, I rolled back one release. After running it a few times, I was in the right place.

I then pushed the code to master, deployed, and it all worked.

Learn the Basics of Computer Science and Web Development

Two and a half years ago, I started doing every computer science and web development tutorial I could find. If I were starting again today, knowing what I now know, I’d do it something like this.

Start with the basics of computer science and programming.

Understand the fundamental interaction between your computer and the internet.

Run through HTML and CSS tutorials with quackit and w3schools. Play with more advanced front-end development at CSS-TRICKS and TheCodePlayer.

Learn about databases and how to search them with SQL.

Start on Ruby with RubyLearning’s Core Ruby Programming and move on to their Programming for the Web with Ruby course.

Learn the basics of Rails with RailsGuides. And, then get deeper with Ruby on Rails Tutorial: Learn Web Development with Rails, Michael Hartl. Watch Railscasts for detailed lessons on implementing Rails.

Add Javascript and jQuery.

And some other fun stuff.

That’s the plan. I wouldn’t stick to it strictly. That’s what makes it so much more fun to learn with less stucture. I’d bounce around as I find things I’m interested in. I’d fast forward through the less interesting parts. And, I’d build stuff whenever I could. While I’m doing all this, I’d be reading Hacker News, searching Google and stackoverflow for answers to questions that arise, and checking the documentation of whatever I’m learning.

These are some of the tutorials and resources I’ve found most useful. The options are growing fast with resources such as Udacity and Coursera. If you have other good ones, please tell me.

I hope this is helpful for someone.

disclaimin