tag:liz.svbtle.com,2014:/feedLiz Abinante2014-07-24T20:34:07-07:00Liz Abinantehttps://liz.svbtle.comSvbtle.comtag:liz.svbtle.com,2014:Post/getting-hired-without-getting-burned2014-07-24T20:34:07-07:002014-07-24T20:34:07-07:00Getting hired without getting burned: Sniffing for culture smells<p>It is incredibly difficult to find a good place to work. With companies that <a href="http://www.oregonlive.com/portland/index.ssf/2014/06/woman_claims_she_was_fired_12.html">fire women after they announce that they’re pregnant</a>, <a href="http://techcrunch.com/2014/03/15/julie-ann-horvath-describes-sexism-and-intimidation-behind-her-github-exit/">intimidate women into leaving</a>, <a href="http://www.shakesville.com/2014/06/today-in-misogyny.html">hire people who think it’s ok to compare women to programming tools</a>, and have <a href="http://yahoo.tumblr.com/post/89085398949/workforce-diversity-at-yahoo">abysmally</a> <a href="http://www.google.com/diversity/at-google.html">low</a> <a href="http://blog.linkedin.com/2014/06/12/linkedins-workforce-diversity/">diversity</a> <a href="https://blog.twitter.com/2014/building-a-twitter-we-can-be-proud-of">numbers</a> (although at 10% women in tech, I am no longer surprised by Twitter’s terrible block policy), it’s surprisingly easy to end up working in a toxic environment.</p>
<p>How do you sniff out culture smells and determine if a company’s work environment will be toxic to you? A large part of this depends on what you expect for your work environment, but there are a few questions you can use to screen companies. </p>
<p>While this is written by an engineer primarily for engineers, these questions and techniques are incredibly useful for any employee, at any company. You should, of course, pick and choose the things that matter to you most when interviewing.</p>
<hr>
<h1 id="diversity_1">Diversity <a class="head_anchor" href="#diversity_1">#</a>
</h1>
<p>Don’t beat around the bush. Ask. If they don’t like the questions, then you don’t want to work there.</p>
<p><strong>Questions</strong></p>
<ul>
<li>Why do you think diversity in the workforce is important?</li>
<li>What are your goals for increasing diversity?</li>
<li>How do you define “diversity”?</li>
<li>What community organizations do you sponsor?</li>
<li>Do you have a parental, maternity, or paternity leave policy?</li>
<li>Do you have trans-inclusive healthcare?</li>
<li>Do you have lactation rooms on site?</li>
<li>What internal employee resource groups do you have?</li>
<li>What does success in regards to diversity at <em>company</em> look like to you?</li>
</ul>
<p><strong>Things to look out for</strong></p>
<ul>
<li>Is the executive team involved in the hiring process? At large companies, probably not. At small companies, meet them if you can and ask the above questions. Their answers set the trend for their departments, or potentially the entire company.</li>
<li>Does the executive team support the diversity initiatives? Are they supporting the initiatives through the promotion of token individuals? Are they supportive for the praise, or is it altruistic?</li>
<li>Average employee age: are there no workers above 40 (or even 30) below the executive level? Is the exec team, excluding founders, substantially older than the entirety of the workforce?</li>
<li>Does the race/gender of the executive team and management skew in one direction? Is it reflective of the company as a whole?</li>
<li>Is their swag all unisex or men’s?</li>
<li>Are there “token” women, POC, or other underrepresented group in management positions?</li>
</ul>
<hr>
<h1 id="do-they-value-employees_1">Do they value employees? <a class="head_anchor" href="#do-they-value-employees_1">#</a>
</h1>
<p><strong>Questions</strong></p>
<ul>
<li>Do you provide job training for employees?</li>
<li>Do employees have a training budget?</li>
<li>What career paths are available from this position?</li>
</ul>
<p><strong>Things to look out for</strong></p>
<ul>
<li>How are the lowest-level employees treated? Do they receive the same perks as engineers?</li>
<li>Which departments have training budgets?</li>
<li>Do they hire only experienced workers? Do they hire only new graduates?</li>
<li>Do low- and entry-level employees have career paths?</li>
<li>Are they promoting internally, or hiring externally?</li>
<li>Who hangs out with who? Who eats lunch together? What after-work activities do people do together?</li>
<li>Are people friends across departments, or are they completely isolated from one another?</li>
</ul>
<hr>
<h1 id="human-resources_1">Human Resources <a class="head_anchor" href="#human-resources_1">#</a>
</h1>
<p><strong>Questions</strong></p>
<ul>
<li>How does HR handle internal complaints?</li>
<li>Do they have a policy on inter-office relationships? </li>
<li>How familiar are you with the ADA, FMLA, and other similar laws that protect workers rights?</li>
<li>Are employee salaries confidential information? <em>Note: This is likely illegal, see <a href="http://www.npr.org/2014/04/13/301989789/pay-secrecy-policies-at-work-often-illegal-and-misunderstood">here</a> for details, or the <a href="http://www.nlrb.gov/resources/national-labor-relations-act">National Labor Relations Act</a>.</em>
</li>
</ul>
<p><strong>Things to look out for</strong></p>
<ul>
<li>
<strong>Look for <a href="http://modelviewculture.com/pieces/hr-antipatterns-at-startups">HR antipatterns</a>.</strong> This is the most important thing you can do - I have no other advice for you here except that you read that article.</li>
</ul>
<hr>
<h2 id="additional-reading_2">Additional reading <a class="head_anchor" href="#additional-reading_2">#</a>
</h2>
<ul>
<li><a href="http://www.hiremorewomenintech.com/">Hire More Women</a></li>
<li><a href="http://modelviewculture.com/pieces/why-do-we-only-care-about-programmers">Why do we only care about programmers?</a></li>
<li><a href="http://www.ashedryden.com/blog/when-it-comes-to-diversity-what-does-success-look-like">When it comes to diversity, what does success look like?</a></li>
<li><a href="http://www.ashedryden.com/blog/the-responsibility-of-diversity">The responsibility of ‘diversity’</a></li>
</ul>
<hr>
<p><em>If you have any additional suggestions, tweet them to me (<a href="http://twitter.com/feministy">@feministy</a>) and I will add them with attribution to this list.</em></p>
tag:liz.svbtle.com,2014:Post/we-only-hire-senior-engineers2014-06-19T20:15:37-07:002014-06-19T20:15:37-07:00"We only hire senior engineers."<p>It’s a pretty good time to be an engineer, but it’s an even better time to be a senior engineer. In the economy of engineering jobs, there’s an increasing demand for senior talent, but no one is working to increase the supply because senior talent can’t be made, it takes time.</p>
<p>Companies will say things like:</p>
<p>“We’re only looking to hire senior developers right now.”</p>
<p>“We need to hire more senior talent to balance things out before we hire more junior developers.”</p>
<p>“Our code base/business logic is too complex for junior devs, we only hire at the senior level.”</p>
<p>But there’s a problem with this. Is it not immediately clear to you? Basically, replace the phrase “senior engineer” with “white men” in any conversation about hiring senior engineers you’ll see what I mean:</p>
<blockquote class="short">
<p><strong>“We need to hire more white men to balance things out before we hire more women and minorities.”</strong></p>
</blockquote>
<p>This is, of course, a generalization. There is diversity at the senior level - it’s not great, though (it’s actually pretty bad). However, the thing about being a senior-level engineer is that you can work wherever you want. It’s a safe bet to make that women and minorities at the senior level aren’t going to want to spend their days being harassed while working at a company that claims it “doesn’t have a problem with diversity”, or one that is still trying to figure out the whole diversity thing. They’re going to work at a company where they don’t constantly feel alone, at a company that has diversity policies, employee resource groups, and a valuable, active HR team.</p>
<p><strong>Companies don’t <em>need</em> to hire senior engineers, they want to because they think it’s easier to “just start coding” if you have more experience.</strong></p>
<p>Beyond diversity, only seeking out senior talent is a problem because it reflects negatively on the company’s view of its employees.</p>
<h2 id="companies-value-profits-over-people_2">Companies value profits over people. <a class="head_anchor" href="#companies-value-profits-over-people_2">#</a>
</h2><blockquote>
<p>When a company is only willing to hire established, skilled, and senior-level talent, it’s an indicator that they value their profits over the people that help to generate them.</p>
</blockquote>
<p>Hiring junior talent is an investment in their abilities and skills, something that, in the long run, is mutually beneficial for the company and the employee. </p>
<blockquote class="short">
<p>Companies hiring senior developers don’t have to worry about training employees or cultivating talent internally because they’re hired already trained, already cultivated people.</p>
</blockquote>
<p>This is an alarm bell. It indicates a lack of value in employees on an individual level. If a company sees an employee as a profit-producing resource instead of a person to invest company resources in, you have a recipe for disaster. </p>
<p>Companies want to acquire senior devs, but they don’t want to train junior- or mid-level devs to become better. In an essence, companies are hoping to get something from nothing.</p>
<h2 id="an-alternative-create-the-supply_2">An alternative: create the supply. <a class="head_anchor" href="#an-alternative-create-the-supply_2">#</a>
</h2>
<p>There is an alternative, though: companies can create the supply. </p>
<p>I know you’re probably thinking <em>“ugh, Liz, I don’t want to start an apprenticeship program. I don’t have time for that, and I don’t have the money.”</em></p>
<p>But I’m not talking about an apprenticeship program, I am talking about extended onboarding.</p>
<p>Bring on a team of 5-10 junior or mid-level developers at the same time and assign them to the same manager (or - as some have suggested - 2-3 devs, which would be comparable salary-wise to hiring 1 senior). This manager should be someone who is great at developing people, teaching, and seeking out other talented engineers at your company for lunch time training talks.</p>
<p>Spend 3-6 months with this team, assigning them low-hanging fruit and bug tickets from the backlog. Every week, or every month, have one of your already existing engineers give a talk about your infrastructure, modeling, or other complex part of your code base. After 3-6 months of working with your team and getting to know your code base, they’ll be ready to transition onto a full blown team. <em>(See below for clarification)</em></p>
<p>Will they be senior engineers? Probably not. </p>
<p>Will you have knocked out some annoying bugs from your backlog and made your customers happy? <em>Yes.</em></p>
<p><strong>Will you have trained a team of engineers that know your product? Will you have invested company resources into growing a valuable team that will reap long-term rewards? Absolutely yes.</strong></p>
<hr>
<p><strong>Little note to clarify</strong>: I am not talking about hiring a squadron of junior devs to be janitors for all of your bugs (nobody should <em>only</em> be working on bugs - that’s misery-making). To be clear: I’m talking about having them work on <em>some</em> bugs to get to know your code base, while they tackle larger projects together, either individually, as a team, or in pairs. In retrospect I didn’t make that super clear when I originally wrote this, hence this little note. </p>
tag:liz.svbtle.com,2014:Post/deploying-rails-41-apps-with-resque-to-heroku2014-06-02T11:50:38-07:002014-06-02T11:50:38-07:00Deploying Rails 4.1 apps with Resque to Heroku<p>The Heroku guides for deploying Rails apps encourage you to do so using a Procfile and Unicorn. Not being super deployment savvy, I tend to follow the instructions provided to me.</p>
<p>… that is, until they <em>completely, totally, and utterly fail me</em>.</p>
<p>After I added Resque to a Rails app I was working on, I was having a hell of a time deploying it to Heroku: first Redis wouldn’t start, and then when Redis finally started, my workers wouldn’t start. Nothing in the guides for Resque, or two Redis add ons (RedisToGo and Redis Cloud), was helpful or even remotely close to correct.</p>
<p>Some intense Googling turned up some issues related to older versions of Resque (1.22.1, which Heroku uses in their guides) and some compatibility issues with Unicorn.</p>
<p>I don’t think the compatibility issues have been resolved, but I was able to come up with a fix that works locally and on production without any hiccups.</p>
<p>I am using Redis Cloud in my configuration below, but this should work with other Redis add ons.</p>
<h2 id="gemfile_2">Gemfile <a class="head_anchor" href="#gemfile_2">#</a>
</h2>
<p>This guide works specifically with the following versions of Rails, Unicorn, and Resque:</p>
<pre><code class="prettyprint">gem 'rails', '4.1.1'
gem 'resque', '~> 1.24.1'
gem 'unicorn', '~> 4.6.2'
</code></pre>
<p>I can’t make any promises about other versions.</p>
<h2 id="procfile_2">Procfile <a class="head_anchor" href="#procfile_2">#</a>
</h2>
<p>This is pretty standard for Heroku, Resque, and Rails.</p>
<pre><code class="prettyprint">web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
resque: env TERM_CHILD=1 QUEUE=* bundle exec rake resque:work
</code></pre>
<h2 id="redis_2">Redis <a class="head_anchor" href="#redis_2">#</a>
</h2>
<p>Create a new file: <code class="prettyprint">config/initializers/redis.rb</code> and put this inside of it:</p>
<pre><code class="prettyprint">if ENV["REDISCLOUD_URL"]
$redis = Resque.redis = Redis.new(:url => ENV["REDISCLOUD_URL"])
end
</code></pre>
<h2 id="resque_2">Resque <a class="head_anchor" href="#resque_2">#</a>
</h2>
<p>We need access to the Rake tasks. Create a new file: <code class="prettyprint">lib/tasks/resque.rake</code>.</p>
<pre><code class="prettyprint">require 'resque/tasks'
task "resque:preload" => :environment
</code></pre>
<h2 id="unicorn_2">Unicorn <a class="head_anchor" href="#unicorn_2">#</a>
</h2>
<p>The last thing we need to do is configure Unicorn, which turned out to be the most difficult part.</p>
<p>In your <code class="prettyprint">config/unicorn.rb</code> file, put:</p>
<pre><code class="prettyprint">worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true
before_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
Process.kill 'QUIT', Process.pid
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
if defined?(Resque)
Resque.redis.quit
Rails.logger.info('Disconnected from Redis')
end
end
after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
end
if defined?(Resque)
Rails.logger.info('Connected to Redis')
end
end
</code></pre>
<p>And you should be all set to deploy to Heroku with ease!</p>
tag:liz.svbtle.com,2014:Post/too-big-to-test-combating-test-apathy-in-legacy-code2014-05-14T07:35:22-07:002014-05-14T07:35:22-07:00Too big to test: combating test apathy in legacy code<p><em>Originally written for the <a href="https://instructure.github.io/blog/2014/05/14/too-big-to-test-combating-test-apathy-in-legacy-code/">Instructure techblog</a>.</em></p>
<p>Writing tests for large Rails apps with lots of dependencies and complicated modeling is, without question, a complete nightmare. We often spend more time wrestling with tests than we do writing code. The end result of writing tests for legacy code is unfortunately predictable: a test suite full of holes, poor coverage, and tests that aren’t actually testing the thing you think they are. Bugs begin to pile up, technical debt is avoided like the plague, and quick-fix bandaids are applied instead of addressing the problems head on.</p>
<p>We are then faced with a dilemma: our app has become too big and too complicated to test, and we no longer want to write tests for it because it is so painful. This is unavoidable. No matter how many conference talks we attend that promise to teach us how to writing clean, maintainable code, we’re still drowning in a bog of bad. The reality isn’t that we’re bad developers, it’s that we don’t dictate our workload, deadlines, or priorities. We have to make sacrifices in our code, which isn’t a bad thing until it is. So how do we fix it? How do we take away the pain?</p>
<p>The short answer: it’s not easy to fix, and it takes time.</p>
<h3 id="prioritize-technical-test-debt_3">Prioritize technical test debt <a class="head_anchor" href="#prioritize-technical-test-debt_3">#</a>
</h3>
<p>There is no sense in prioritizing technical debt if you have technical test debt. No one wants to write tests for a messy test suite, and you can’t fix problems in your code if the tests are contributing to them. Start chipping away at test apathy by improving the test writing and running experience. There are a few ways to quickly improve your testing environment.</p>
<p><strong>Clean up your factories and spec helpers</strong></p>
<p>Remove redundant factories or duplicate spec helpers. Helpers with miles of conditionals don’t actually <em>help</em> anyone. Consider refactoring any method that takes a hash of options to be more semantically named. Search for factory settings or attributes, or helper methods arguments, you often find yourself using and make them the defaults instead of a passed argument.</p>
<p>If you’re using a homegrown factory system instead of a gem like <a href="https://github.com/thoughtbot/factory_girl">FactoryGirl</a>, considering refactoring your factories or completely re-writing them. Lots of bad or unused factories can accumulate when you have many developers working on the same code base.</p>
<p><strong>Using Selenium? Delete your specs</strong></p>
<p><em>… and re-write them</em>, preferably with a Selenium wrapper, such as <a href="https://github.com/jnicklas/capybara">Capybara</a>. Using a wrapper will also helper clean up your cluttered helper files for these specs.</p>
<p>Selenium specs are a source of constant pain and heartache for developers: they take a long time to run, and they’re incredibly complicated. It’s a lot of test setup and clicking on stuff for <em>one</em> assertion. In lieu of comprehensive Selenium specs that handle all of your edge cases, improve your unit test coverage (on both the client- and server-side), consider writing end-to-end specs for happy paths, and invest in manual testing where people actually click on things. Simplify your Selenium specs and improve your developers’ happiness by only testing your happy paths and expected error messages.</p>
<p><strong>Organize your spec files properly</strong></p>
<p>Do everyone a favor and fix your nesting. If you’re using RSpec, you shouldn’t have a <code class="prettyprint">describe</code> block with a <code class="prettyprint">context</code> that has two more sets of nested <code class="prettyprint">context</code>s. If a <code class="prettyprint">describe</code> or <code class="prettyprint">context</code> block only has one test in it, consider re-organizing to incorporate it with other tests. If you’re writing unit tests, use the <code class="prettyprint">#my_method_name</code> syntax to group your tests together. Re-write tests that contain multiple assertions: why do you need to assert two things in one test? Assertions that loop through arrays or hashes are sometimes necessary, but they should only be checking one thing, not multiple attributes of your objects.</p>
<p>Lastly, re-organize your file so it is in roughly the same order as your code. The first method in your class shouldn’t be the second-to-last thing tested. A little file organization goes a long way when it comes to debugging and adding new tests.</p>
<h3 id="use-your-tools-well_3">Use your tools well <a class="head_anchor" href="#use-your-tools-well_3">#</a>
</h3>
<p>A hammer is not a screwdriver, nor is it a crowbar: don’t make your developers be the whole toolbox.</p>
<p><strong>QA Analysts: real humans you need</strong></p>
<p>Your developers are not your users: they’re your developers. While it is reasonable to expect a level of familiarity with your software, developers ultimately are not the ones using it on a day-to-day basis. They are not the experts on your software. You need experts, and they’re not your developers.</p>
<p>Automation is all fine and dandy, but you can’t automate people: we’re unpredictable and kind of stupid. The huge value in manual QAs and regression tests are that you can actually test your code against the human element. Your QAs Analysts are neither unpredictable nor stupid, but they can replicate that element of humans more realistically than automated tests can.</p>
<p><strong>Regression tests are not a bandaid</strong></p>
<p>Regression tests aren’t just good for finding bugs: they are a tool that can help you spot the holes in your test suite. A bug fix for a regression test shouldn’t just be a fix to the code, it should also repair the holes in your tests. Dig through your spec files: is the spec for that bug missing? Is it testing the wrong thing? Is the setup wrong? Fix it.</p>
<p><strong>Don’t monkey patch it</strong></p>
<p>Use the gems, libraries, and tools as they are actually intended. Your test suite will rapidly spiral out of control (again) if you find yourself ripping apart your tools.</p>
<h3 id="maintenance-mode_3">Maintenance mode <a class="head_anchor" href="#maintenance-mode_3">#</a>
</h3>
<p>Fixing bad tests and cleaning up ugly factories is all well and good, but what happens long term? Maintaining a test suite is just as important as maintaining code. If you walk away from your test suite after putting in so much effort, it will be all:</p>
<p><img src="http://25.media.tumblr.com/b60af898d2636d792de3089108562c91/tumblr_mt0qdlrZMR1siookko1_500.gif" alt="Miley Cyrus: "Don't you every say I just walked away, I will always want you.""></p>
<p>Don’t wreck your test suite by ignoring it.</p>
<p><strong>Don’t be afraid of repeating yourself</strong></p>
<p>Sometimes DRY code is bad code, especially if you’re creating unnecessary objects or making redundant database calls in your test setup. Clean up the setup that runs before each test, and make sure you’re only creating what you need to.</p>
<p><strong>Abstract after the fact</strong></p>
<p>In the (paraphrased) <a href="https://speakerdeck.com/skmetz/all-the-little-things-rubyonales">words of Sandi Metz</a>: it is better to repeat yourself than to abstract the wrong thing. You don’t have the perspective to abstract the right thing at the very beginning of your refactoring and cleaning process. To ensure you’re not recreating the problem you’re trying to fix, periodically block off time to review spec files for duplicate code that can be extracted. It takes time and hindsight, which is why reviewing spec files periodically is just as important as refactoring legacy code.</p>
<p><strong>Remember that tests are code, too</strong></p>
<p>Consider these two quotes:</p>
<blockquote class="short">
<p>“Ugh, I have to write code. This has robbed me of my will to live.”</p>
</blockquote>
<p><em>No developer, anywhere, ever.</em></p>
<blockquote class="short">
<p>“Ugh, I have to write tests. This has robbed me of my will to live.”</p>
</blockquote>
<p><em>All developers, on a daily basis.</em></p>
<p>Why do we dread writing tests so much?</p>
<p>A lot of developers approach tests as an after-the-fact thing: the code is done, it’s time to write tests.</p>
<p>But really, it should be: the code is done now that I’ve written my tests.</p>
<p>The virtue of TDD is that you <em>have</em> to write tests. You can’t write code unless you’ve written tests. This one factor has contributed largely to its success. I’m not advocating for or against TDD, I’m lobbying for you to consider your tests as an essential part of your code.</p>
<p>If anything, a well-written test just proves that you’re right, and who doesn’t love being right?</p>
tag:liz.svbtle.com,2014:Post/im-done-being-acceptable2014-04-24T14:43:18-07:002014-04-24T14:43:18-07:00An apology: I'm done being "acceptable."<p>Since I joined the tech community, I have worked very hard to be acceptable. I have tried to be the “acceptable feminist,” and I’ve done this because I thought it would protect me from the problems present in tech. I really thought that if I was a nice, “reasonable”, friendly, middle-ground person, I’d be safe.</p>
<p>Turns out that isn’t how it works. I don’t know why I was so naive to think I’d be more protected if I was fake, not myself. I hid who I really was because I was afraid of being trolled, doxxed, blacklisted, assaulted, and hurt.</p>
<p>Turns out those things happen no matter what I do, no matter how you are protected. If I’ve learned anything from the events of the past few months, particularly this week, it’s that nothing is what it seems to be. <a href="http://twitter.com/nrrrdcore">Julie</a> publicly defended GitHub because she thought she had to, and regardless of her motives, it didn’t matter, she wasn’t safe. Allies have bad motives, supporters turn on you, you get fired, or blacklisted, betrayed, abandoned, bad-mouthed, and questioned. </p>
<p>So I’m done being acceptable. I’m done breaking my back to be the “nice feminist” who explains and listens, and makes you feel like a good ally when you’re really a shitty person.</p>
<blockquote class="short">
<p>Doing this, trying to protect myself publicly, is a betrayal to my fellow feminists and underrepresented groups in tech.</p>
</blockquote>
<p>The terrible press this week surrounding the incidents at GitHub was a smack in the face: <strong>it can happen to anyone, and I was a fool to think I could protect myself by being acceptable.</strong> I was betraying <em>my</em> people to make those in a position of power feel better so I would be accepted, so I would be safe. It’s sad that I felt I had to, and heartbreaking that I actually did. </p>
<p>I’m done being acceptable for someone else who won’t accept me and my friends. I’m done betraying people with my silence. From now on, it’s Liz. From now on, I stand with my friends.</p>
<blockquote>
<p>And really, sit back and think about how you might be contributing to tech culture. Think about your part in the “community” that made me feel I had to lie about who I was, and what I believed in, to feel <em>physically and emotionally safe</em>.</p>
</blockquote>
<p>My friends, and people who I don’t know who felt betrayed: for that, I am very sorry, thank you for helping me to realize what I’ve been doing. It won’t happen anymore.</p>
tag:liz.svbtle.com,2014:Post/a-year-ago-today-i-started-doing-this2014-04-17T05:06:56-07:002014-04-17T05:06:56-07:00A year ago today, I started doing this crazy thing that I love.<p>Since I became a co-leader for <a href="http://www.meetup.com/Girl-Develop-It-Chicago-IL/">Girl Develop It Chicago</a> in January, I introduce myself in much the same way at every workshop, class, and event. It goes a little something like this:</p>
<blockquote>
<p>Hi, my name is Liz, and I’m a co-leader for GDI Chicago along with Katy, say hi Katy! I’m currently a Software Engineer for an educational company called Instructure, but a year ago today, I wasn’t doing this. I was quitting a decent paying job with no real career prospects to attend Dev Bootcamp, and now I’m an engineer and I absolutely love what I do. I am here to help you see if you love this as much as I do. I learned HTML and CSS when I was a kid so I could build a fan website for NSync - it’s easy to learn, but hard to master, and you can totally do it! I love questions and I’m really nice, so you can email me anytime!</p>
</blockquote>
<p>As of this weekend, I can no longer say “a year ago today” because I will have already quit that job and started working toward my goal of learning how to build software. I have been, in one form or another, working in web development for a year now.</p>
<p>It has not been without its ups and downs, but mostly it has been lots of <em>ups</em>. </p>
<p>In the past year, I have:</p>
<ul>
<li>accomplished my goal of learning Ruby and Rails</li>
<li>become significantly better with JavaScript than I thought I ever would be</li>
<li>discovered an unbridled love of testing</li>
<li>tackled home-grown MVC frameworks, Backbone, and Ember</li>
<li>learned about building accessible applications</li>
<li>actually built an accessible application</li>
<li>started working as an engineer, <a href="https://github.com/instructure/canvas-lms/commits/master?author=feministy">making a small contribution to education</a>
</li>
<li>taught 4 Girl Develop It Classes</li>
<li>organized 26 Girl Develop It events, classes, and workshops for our more than 1,000 members</li>
<li>helped 105 women learn the basics of HTML and CSS through GDI classes</li>
<li>guided 25 (soon to be 50!) women toward advancing their skills in HTML, CSS, and responsive design through GDI classes</li>
<li>introduced 40 women to the basic concepts of web development</li>
<li>dabbled with Clojure, Rust, and Go</li>
<li>attended my first tech conference</li>
<li>spoke at my first tech conference (thanks to Mike Moore and <a href="http://mtnwestjs.org/">Mountain West JavaScript</a> for that!)</li>
<li>learned how to manage a team of volunteers and instructors</li>
<li>made wonderful new friends</li>
<li>been trolled because sometimes I need to “seriously, shut the fuck up”</li>
<li>been unrealistically happy</li>
<li>felt challenged</li>
<li>felt encouraged to do more, learn more, and be more</li>
</ul>
<p>Plans for year 2? Year 5? Year 20? Already formed, and I can’t wait to see where my ideas and goals take me. But, I have a pretty good idea that there won’t be much snow wherever I end up following those goals and ideas.</p>
<p>The best part is that if I accomplished so much in the last year, I will be able to do so much more in the coming years now that I’ve gotten started. I want to get more scholarships for Girl Develop It students, learn more programming languages, speak at more conferences, write more Girl Develop It curriculum, guide more people toward a career in tech, improve my computer science knowledge, and get better at all of the things I already know. </p>
<p>I want to take my career up, up, and away, and I want to be a real person who isn’t <em>just an example</em> or a token, but a source of knowledge, advice, assistance, and (selfishly maybe) inspiration for women and minorities who want to transition to a technical career. I want to be a friendly light of optimism for people already in this field, reminding us why we all do what we do: because it makes us happy, and we love it.</p>
<p><em>Girl Develop It Chicago is looking for volunteers, sponsors, event spaces, and instructors. See more info <a href="http://www.meetup.com/Girl-Develop-It-Chicago-IL/about/">here</a> or <a href="http://girldevelopit.com/donate">donate online</a>!</em></p>
tag:liz.svbtle.com,2014:Post/words-i-hope-to-regret-someday-im-glad-that-i-didnt-give-a-technical-talk2014-03-18T10:11:00-07:002014-03-18T10:11:00-07:00Words I hope to regret someday: "I'm glad that I didn't give a technical talk."<p>When I decided to speak at my first conference, I picked a topic that I knew would be safe. I picked something not threatening, not overly opinionated, and not technical. In short, I picked something I didn’t think I would get aggressive questions about. <strong>I picked something feminine: I talked about teaching kids how to program.</strong> </p>
<p>I gave my talk yesterday, and it doesn’t sit well with me to say what I’m about to say. But someone has to say it, and since I was the only woman speaking yesterday it’s likely that no one else will. </p>
<blockquote class="short">
<p>I’m glad that I didn’t give a technical talk. </p>
</blockquote>
<p>Before last night, I never felt like an impostor, just unwelcome every now and then. I genuinely think that my love of what I do and my utter joy about being an engineer overpowered any feelings I had related to being an impostor. I felt lucky to have found something that made me so happy and challenged me intellectually everyday, and I surrounded myself with a community of wonderful people to offset the times I felt unwelcome.</p>
<p>I went to dinner last night with about 20 other conference attendees. I have a predisposition to yell loudly to cover up the fact that I’m so nervous that all I can worry about is filling the space with sound so no one can hear my heart thumping in my chest. I sat with friends and had a great evening chatting about mostly topics not related to programming. It was a great brain break after listening to so many technical talks in one day.</p>
<p>Even though I was having a nice time with my co-workers, I couldn’t help but overhear another conversation happening a few seats down from me. It was a verbal sparring match about JavaScript, about as friendly as any talk can be when your professional reputation is on the line (which is to say: not at all). This debate wasn’t friendly it was an aggressive, opinionated conversation between two people determined to steam roll each other. While I’m sure either could have exited the conversation at any point, their defensive postures and tones indicated that there was no exit strategy appropriate for the situation.</p>
<p>That was when I felt like a fraud, that was when I felt like an impostor, and that was when I realized I didn’t want to give a technical talk. I realized that I would never be smart enough, or good enough, or well-educated enough to have a conversation like that without being badgered into a corner. Not because I don’t see myself that way, but because I’m not a real programmer in the eyes of many. I went to Dev Bootcamp, I don’t have a Computer Science degree, and I love writing CSS as much as I love Ruby. I’m vocal on Twitter, prone to feminist rants, and I don’t make OSS contributions outside of my job. I’m a happy, friendly person. In the words of many a cruel Hacker News commenters, <strong>I am nothing more than a marketer</strong> who claims to be an engineer. </p>
<p>If you have ever in your life wanted to make someone feel like total, complete, utter shit, that’s how you do it: you tell them that thing that they worked <em>so hard for</em>, the thing that they love to do, isn’t good enough and that they’re not <em>really</em> that thing, just someone who likes to talk about that thing.</p>
<p>I don’t speak because I want to convince other people that I’m right about something, or because I want to prove myself as an expert. I speak because I want to share what I know, maybe make people laugh a little, and help them remember why we do what we do everyday. I speak because I love what I do and I want to help other people love it too.</p>
<blockquote>
<p>No matter who you are, it is absolutely terrifying to stand in front of a room of 200 strangers and talk to them for 30 minutes.</p>
</blockquote>
<p>I don’t speak because I want to get into verbal sparring matches about my talk. I don’t speak because I want to gain prestige or power. I don’t understand the aggression associated with discussions surrounding technical topics at conferences, and I don’t participate in them because I am genuinely afraid of being made to look like an idiot in front of a group of people who could potentially hold sway over my career. A career that I love, and would only abandon if offered the chance to get paid millions to roll around in a field of puppies all day. </p>
<p>But I am not a defeatist person; I am an eternal optimist. While I don’t feel comfortable giving a technical talk today, I’ve only been doing this for 8 months. This time last year, I was writing my very first lines of code. I love what I do, and I want to help other people find out if this is what they might love, too. It won’t be long before I become the dev with one-too-many slides covered in code, not-so-humble bragging about something I’ve done.</p>
<p>I’m not going anywhere. I’m more stubborn and determined than I’ve led you to believe with my cheerful demeanor, friendly disposition, and love of GIFs. <strong>I am the sword in the stone, and the only person who can pull me out of it is myself.</strong></p>
<p>I’ll do my absolutely best make this a better place for <em>everybody</em>–and that’s a promise you can hold me to.</p>
tag:liz.svbtle.com,2014:Post/getting-involved-international-womens-day2014-02-27T16:19:28-08:002014-02-27T16:19:28-08:00International Women's Day: A guide for tech companies<p><a href="http://www.internationalwomensday.com/">International Women’s Day</a> is on Saturday, March 8, 2014. As a woman in programming, IWD is especially important to me because it is an opportunity to celebrate other women in the field. </p>
<p>Lots of tech companies host events for International Women’s Day - I went to one at <a href="http://www.meetup.com/WomanDevelopers/events/107092812/">Google last year</a> that had some great talks. However, IWD is an opportunity to celebrate the achievements of women, not an excuse to throw a PR party for your company. </p>
<blockquote>
<p>No matter how pure a company’s intentions may be, their undoubtedly very well funded International Women’s Day event takes attention away from those hosted by national and local community organizations that work to serve women <em>every day of the year</em>.</p>
</blockquote>
<p>If your company does not already have an established women’s initiative or group (ex: <a href="http://passion-projects.github.com/">Passion Projects</a>, <a href="https://people.groupon.com/blog/2012/women-at-groupon-a-closer-look/">Women @ Groupon</a>), don’t try and do your own thing for IWD. It will come off as disingenuous. Yes, you have to start somewhere, but unless you’re launching a new women’s initiative internally, IWD is not a day for you.</p>
<p>There are lots of local organizations and groups whose mission is to support women. Instead of creating an internal event, work with these organizations as a sponsor. You can provide them with the funding, space, and promotional materials that they to create culturally relevant, engaging events on a much larger scale than their budgets allow. </p>
<h2 id="organizations_2">Organizations <a class="head_anchor" href="#organizations_2">#</a>
</h2>
<p>Being a software engineer, much of these recommendations are focused on outreach to women in the engineering community.</p>
<ul>
<li>
<a href="http://girldevelopit.com">Girl Develop It</a> has 25 chapters in the US and provides affordable classes for women to learn software development and tech.</li>
<li>
<a href="http://www.blackgirlscode.com/">Black Girls Code</a> serves many major US cities and focuses on underprivileged girls and women of color.</li>
<li>
<a href="http://adadevelopersacademy.org/">Ada Developers Academy</a> is a tuition-free programming school and internship program for women in Seattle, WA.</li>
<li>
<a href="http://www.meetup.com/Women-Who-Code-SF/%E2%80%8E">Women Who Code</a> is a group based in San Francisco that educates women on software development and tech.</li>
<li>
<a href="http://girlswhocode.com/">Girls Who Code</a> is based in New York City and most well known for its free summer immersion program for high school girls offered in several US cities.</li>
<li>
<a href="http://lesbianswhotech.org/">Lesbians Who Tech</a> is a new group with several US chapters that connects queer women and encourages them to join the tech community.</li>
<li>
<a href="http://www.cwdevs.com/">Chicago Women Developers</a> is local to Chicago, offering classes, hack nights, and events for women in tech.</li>
<li>
<a href="http://railsbridge.org/">RailsBridge</a> manages, creates, and offers free intro to Rails classes using open-source materials.</li>
<li>
<a href="http://railsgirls.com/">RailsGirls</a> is an international group that offers free intro to Rails classes for women.</li>
</ul>
<p>If you have a suggestion for an organization you would like to see on this list, <a href="https://twitter.com/feministy">tweet at me</a>.</p>
<h2 id="not-just-for-women_2">Not just for women <a class="head_anchor" href="#not-just-for-women_2">#</a>
</h2>
<p>While it is International <em>Women’s</em> Day, it’s not just a day for women: it’s a day for celebrating groups who historically have not been appreciated. Celebrations that are inclusive of race, gender identity, sexuality, and able-bodiedness celebrate the idea behind IWD instead of just celebrating women.</p>
tag:liz.svbtle.com,2014:Post/so-you-think-you-want-to-be-a-web-developer2014-02-27T10:50:30-08:002014-02-27T10:50:30-08:00So, you think you want to be a web developer?<p>About once a week, I get an email, chat, tweet, or other electronic communication asking me about some aspect of my job or how I made the transition from a non-technical career. The majority of the time, it’s because that person is considering applying to (or has already been accepted to) an intensive bootcamp-style web developer training program. This is what I say to those people.</p>
<blockquote>
<p>Most importantly, above anything I can tell you about becoming a web developer: <em>there are no short cuts.</em> Going to an intensive bootcamp-style program already is a shortcut.</p>
</blockquote><h2 id="who-are-you-and-why-should-i-listen_2">Who are you? And why should I listen? <a class="head_anchor" href="#who-are-you-and-why-should-i-listen_2">#</a>
</h2>
<p>What makes me qualified to be someone that you talk to about this? Nothing official, and not much, really. At the end of 2012, after spending countless hours playing with Ruby and building CLI toys, I came to the decision that I <em>did</em> want to be a web developer. How? I loved it.</p>
<p>In April 2013, I quit a decent paying dead-end job to prepare for Dev Bootcamp. I started in May, “graduated” in July, and started my first job as an engineer in August. I speak about various topics in engineering, and I teach introductory classes in HTML/CSS and programming.</p>
<p>I don’t know you, and you don’t know me. But I love what I do, and I think I’m pretty good at it (all things considered). I recognize the gaps in my education and am actively working to fill them. So, no, I’m not the be-all, end-all expert on the subject. But if you’re here, you’re interested in my opinion for whatever reason. Know that everything listed here is something that I thought about before applying to Dev Bootcamp. Every person is different.</p>
<p>In the words of Ms. Eleanor Roosevelt:</p>
<blockquote>
<p>“Do what you feel in your heart to be right — for you’ll be criticized anyway. You’ll be damned if you do, and damned if you don’t.”</p>
</blockquote><h1 id="why-do-you-want-to-do-this_1">Why do you want to do this? <a class="head_anchor" href="#why-do-you-want-to-do-this_1">#</a>
</h1>
<p>You should have an answer to this question even if you’re not sure you want to make the transition. Maybe the question you answer is <em>“why are you interested in doing this?”</em></p>
<p>I’ve split my advice and opinions into two categories:</p>
<ul>
<li>Beginners </li>
<li>Dabblers</li>
</ul>
<h2 id="dabblers_2">Dabblers <a class="head_anchor" href="#dabblers_2">#</a>
</h2>
<p>I considered myself a dabbler: I had built and maintained websites since my early teens. I wasn’t up-to-date on the latest HTML5 and CSS3 specifications, but I knew enough to get by.</p>
<p>If you have dabbled in HTML, CSS, JavaScript, and/or Ruby (or other language), and you really liked it, the hard part is not over. You have to decide if you want to transition careers, and how you want to do it.</p>
<p>Here are some things that I think you should do before considering an intensive bootcamp-style program:</p>
<ul>
<li>Go through the list of suggested projects for ultimate beginners. It’s never a bad idea to double check that you really do want to make a huge change in your life and career.</li>
<li>No matter how much you love it, an intensive bootcamp-style program will not be easy. You’re cramming a bunch of stuff into your brain in a very short amount of time in a way that is suited to a specific learning style. The learning style might not work well for you, or it might be harder than you thought.</li>
</ul>
<h2 id="beginners_2">Beginners <a class="head_anchor" href="#beginners_2">#</a>
</h2>
<p>When I think of “beginners”, I think of people who have never: </p>
<ul>
<li>built or maintained a website</li>
<li>worked with a database</li>
<li>used a programming language</li>
<li>written a single line of HTML or CSS (or cannot write it)</li>
</ul>
<p>If you have dabbled but don’t know enough to build or maintain a website, you probably consider yourself a beginner. If that’s the case, then the following applies to you.</p>
<p>Forgive me for the horrible generalization, but this means your answer to this question of “why?” is likely one (or a combination) of the following: </p>
<ul>
<li>It seems like a really growing field and there’s a high demand for jobs.</li>
<li>I don’t love what I’m doing now, so I may as well do something that pays better until I figure out what I really want to do.</li>
<li>I have a lot of ideas about stuff I want to build.</li>
<li>It seems cool, I’m curious to learn more.</li>
<li>Everyone I’ve met that does this really likes their job.</li>
<li>Someone told me that I’d be good at it.</li>
<li>I think I’d be good at it.</li>
</ul>
<p>None of these are bad reasons. It’s kind of like being a freshman in college and being asked to declare your major: how are you supposed to know at 18 years old what you want to do as a career for the next 40 years of your life? You can’t really answer that question without some experience. That’s probably how you got to the predicament you’re in right now: you made a decision in the past that didn’t pan out how you hoped, and you’re unhappy with your career for whatever reason.</p>
<h3 id="my-advice_3">My advice <a class="head_anchor" href="#my-advice_3">#</a>
</h3>
<p>Before you quit your job or write a very big check:</p>
<h4 id="build-a-website_4">Build a website <a class="head_anchor" href="#build-a-website_4">#</a>
</h4>
<p>Learn HTML5 and CSS3 right off the bat. They’re not that difficult to learn, although CSS can be a bit fiddly. Definitely try and use some JavaScript or jQuery if you’re feeling brave.</p>
<blockquote>
<p>Did you like it? Was it frustrating? Did you <em>enjoy</em> the frustrating parts? Did you celebrate your victories? The answer to all of these questions should be yes.</p>
</blockquote>
<p>Although, full disclosure: many engineers and developers abhor CSS.</p>
<p>Below are some resources to learn HTML, CSS, JavaScript and jQuery. This is by no means an exhaustive list, nor should it be considered an endorsement (or snub). </p>
<p><strong>In-person classes</strong></p>
<ul>
<li>Searching <a href="http://meetup.com">Meetup.com</a> for groups in your area that focus on the topics you’re interested in learning is a great way to start.</li>
<li>
<a href="http://girldevelopit.com">Girl Develop It</a>. I’m a bit biased here since I’m a chapter co-leader in <a href="http://www.meetup.com/Girl-Develop-It-Chicago-IL/">Chicago</a>, but our classes are very affordable and geared for beginners. </li>
</ul>
<p><strong>Online options</strong></p>
<p>Free options:</p>
<ul>
<li>Codecademy: <a href="http://www.codecademy.com/tracks/web">HTML and CSS</a>, <a href="http://www.codecademy.com/tracks/javascript">JavaScript and jQuery</a>, <a href="http://www.codecademy.com/tracks/ruby">Ruby</a>, <a href="http://www.codecademy.com/tracks/apis">APIs</a>, <a href="http://www.codecademy.com/tracks/python">Python</a>
</li>
<li>
<a href="https://dash.generalassemb.ly/">Dash</a> by General Assembly - HTML, CSS, JavaScript, jQuery</li>
<li>
<a href="http://try.jquery.com/">Try jQuery</a> by Code School</li>
</ul>
<p>Paid options:</p>
<ul>
<li><a href="https://www.codeschool.com/">Code School</a></li>
<li><a href="http://teamtreehouse.com/">Team Treehouse</a></li>
</ul>
<p>Some additional resources can be found <a href="http://www.myasmine.com/tag/alternatives-to-codecademy/">here</a>. </p>
<h4 id="write-some-ruby_4">Write some Ruby <a class="head_anchor" href="#write-some-ruby_4">#</a>
</h4>
<p>I’m assuming Ruby is the language you’ve decided to learn. If it’s Python, or some other language, this advice still applies–just swap the language.</p>
<p>You can tinker with a little bit of Ruby in your browser using <a href="http://tryruby.org/">Try Ruby</a>.</p>
<p>A word of warning (this is Ruby-specific): setting up your computer to do Ruby development can sometimes be a pain in the butt. If you’re just starting out, you can use <a href="https://www.nitrous.io/join/-EC0DoqDXfY">Nitrous.io</a> to get a Ruby box running (that’s my referral link - you’ll get extra box space for using it!). Nitrous.io also works for Python and Node.js.</p>
<p>The first real Ruby I ever wrote was:</p>
<pre><code class="prettyprint">puts 'Hello, my name is Liz.'
puts ''
puts 'I am writing lots of basic code while I learn.'
puts 'This is all from Learn How to Program by Chris Pine.'
puts ''
puts 'knit ' * 4
puts 'Extrapolating... can I use arithmetic? Probably. It is smart.'
puts 'I ' + 'really ' * 3 + 'love wine.'
puts 'Damn spaces.'
puts 'Ok, let\'s make an apostrophe!'
puts 'back\\slash'
puts 'Now with more backslash \\'
puts 'Now we\'re using proper punctuation. Whee!'
</code></pre>
<p>All that did was print out stuff in terminal. Woo! I’m not talking anything fancy here. </p>
<p>Some suggestions for scripts to write:</p>
<ul>
<li>A calculator with simple multiply, add, subtract functionality.</li>
<li>Word play with the <a href="http://www.ruby-doc.org/core-2.0.0/String.html">Ruby String library</a> (get used to reading docs, you’ll be doing this a lot).</li>
</ul>
<p>I highly recommend reading the book <a href="https://pine.fm/LearnToProgram/"><em>Learn to Program</em> by Chris Pine</a>. I read the entire thing and did every single code challenge. </p>
<blockquote class="short">
<p>Ask yourself the same questions you did after you finished your HTML/CSS/JavaScript/jQuery adventure. Are the answers still yes? </p>
</blockquote>
<p>If they are, keep working on it. If you love it, think about what your life would be like if you did that all day, every day.</p>
<h1 id="shortcuts_1">Shortcuts <a class="head_anchor" href="#shortcuts_1">#</a>
</h1>
<p>If something on this list sounds terrible to you and you don’t want to do it (or any of the alternative options presented), then you’re cheating yourself and you probably won’t be very good at it. You will waste your time and be in the same situation you were in before you started your journey. The things that I list above are what I consider to be essential things I need for my job on a daily basis.</p>
<blockquote>
<p>If you think skipping over a few things to determine if you’ll enjoy and be good at your potential new career is a good idea, then, honestly, you’re being pretty stupid. </p>
</blockquote>
<p>If your primary motivation is getting a job, then remember this: companies need engineers, but they’re not so desperate that they’re going to hire a half-ass hack who isn’t passionate about or even good at what they do. This field is full of people who love programming, and it will be very obvious very quickly if don’t feel the same.</p>
<h1 id="preparing-for-your-program_1">Preparing for your program <a class="head_anchor" href="#preparing-for-your-program_1">#</a>
</h1>
<p>There are some things I recommend that everyone, regardless of their skill level, do before they start their bootcamp program. Most (if not all) bootcamp programs provide students with preparatory materials: these suggestions are intended to supplement that material, not replace it.</p>
<p><strong>Absolutely upon a pain of death, you must:</strong></p>
<ul>
<li><a href="http://cli.learncodethehardway.org/book/">Learn the Command Line the Hard Way</a></li>
<li>Become a Git guru: <a href="http://try.github.io">Try GitHub</a>, <a href="http://rogerdudler.github.io/git-guide/">The Simple Guide to Git</a>, and <a href="http://pcottle.github.io/learnGitBranching/">Learn Git branching</a>
</li>
</ul>
<p><strong>If you’re interested in front end</strong></p>
<ul>
<li>Try out <a href="http://blog.teamtreehouse.com/the-absolute-beginners-guide-to-sass">Sass</a> and <a href="http://coffeescript.org/">CoffeeScript</a>
</li>
</ul>
<p><strong>Become familiar with Ruby</strong> - or your language of choice</p>
<p>For Rubyists, I recommend <a href="https://pine.fm/LearnToProgram/"><em>Learn to Program</em> by Chris Pine</a>.</p>
<p><a href="http://www.codecademy.com/tracks/ruby">Codecademy</a>, <a href="https://www.codeschool.com/paths/ruby">Code School</a>, and <a href="http://teamtreehouse.com/library/ruby-foundations">Team Treehouse</a> all offer Ruby options. I used all three of these at some point.</p>
<p><strong>Try out Rails</strong></p>
<p>You may as well give it a go. You don’t have to - it might be a bit overkill to try and teach yourself Rails. But it’s really not that hard, and the more you know before you go into a program, the more you’ll learn while you’re there.</p>
<p>If you’ve gotten comfortable with Ruby, here are some easy and free options to familiarize yourself with Rails:</p>
<ul>
<li>
<a href="http://railsforzombies.org/">Rails for Zombies</a> by Code School</li>
<li><a href="http://ruby.railstutorial.org/">Michael Hartl’s Rails tutorial</a></li>
</ul>
<p>If you’re looking for something in person, consider <a href="http://railsgirls.com/">Rails Girls</a> or <a href="http://railsbridge.org/">RailsBridge</a>.</p>
<h1 id="kind-words_1">Kind words <a class="head_anchor" href="#kind-words_1">#</a>
</h1>
<p>I love what I do. Learning to do it was really hard, and I still don’t know everything. The best part is that I will always be learning - and that’s what I absolutely love about being a software engineer.</p>