1.5M ratings
277k ratings

See, that’s what the app is perfect for.

Sounds perfectWahhhh, I don’t wanna

Slack Integration for Companies

A few months ago, we released an integration with Slack that allows our companies to share Underdog.io candidates with members of their Slack team. We’re opening up that integration today. 🎉

In order to install this integration, your company needs to be an Underdog.io customer and a Slack user. Here’s a quick installation guide:

1. After logging into your Underdog.io account, click on Settings and then Integrations. Click the green Add button next to the Slack Integration.

image

2. Review all permission requests and authorize the app.

image

3. You’re in! You can share Underdog.io candidates in any of your team’s Slack channels (including private channels).

image
image

4. Along with links to a candidate’s Underdog.io profile, email address, resume, and social links, your teammates will see your custom message in whichever channel you select.

image

Email us at support@underdog.io if you have any questions about the integration.

Recruiting a diverse team through Underdog.io

Founders and hiring managers at technology companies are increasingly recognizing that diversity is essential for producing inclusive, impactful products. As a company, we wanted to do our small part to help companies build more diverse teams. 

After weeks of internal discussion and conversations with members of our community, we decided to add a simple diversity form field to our candidate onboarding flow. Once our team has selected a candidate for an upcoming Underdog.io batch (after a review process that involves, among other things, close scrutiny of work history, portfolios, projects, written communication, and any publicly-available code), that candidate can optionally identify as a member of an “underrepresented demographic in tech,” wording that we borrowed from Nicole Sanchez’s wonderful Diversity in Tech FAQ v0.1. To be clear, we don’t use a candidate’s selection to decide whether to share that candidate with our hiring network, and we’ll never edit a candidate’s selection.

For any candidates that choose to identify as members of an underrepresented demographic in tech, we append a small globe icon in our brand’s primary color to that candidate’s profile along with a hover tooltip explaining what the icon represents:

image

As we do with most decisions, we’re treating this as an experiment and closely monitoring how it impacts the dynamics of our marketplace. We’re not certain that this is the best way to help our customers build diverse teams, but we hope that it’s a step in the right direction.

For more information about technology, diversity, and diverse hiring, we recommend reading anything that Nicole Sanchez writes or recommends, along with all of the back issues of Model View Culture.

Python for JavaScript Developers

This post originally appeared on Mario Pabon’s blog.

So recently I began working at a little startup in New York City by the name of Underdog.io, where I discovered that they had a back-end written primarily in Python, a language that I had very little previous exposure to.

While I was hired primarily for my experience with JavaScript and React, the small size of our team means that I frequently have to delve into all parts of the codebase in order to ship a feature. So I had to get well acquainted with Python, very fast.

Unfortunately, I had a hard time finding good resources for learning Python that weren’t targeted to people who haven’t programmed before. I already knew how to program and am familiar with other languages, I just needed to learn the syntax and paradigms of this one specific programming language, Python.

That’s where this blog post comes in. To serve as a quick guide for JavaScript developers who want to get up to speed quickly with Python, but without having to learn what declaring a variable means or what a function is.

This post is assuming you are using Python 3.0.1, so some of the examples might not work with older versions of Python.

Syntax

Declaring variables

Declaring a variable in Python is super simple. Like JavaScript, you don’t have to set the type of the variable when declaring it. And you don’t have to declare the scope of the variable either (let vs var):

x = 5

You can change the type of a variable by assigning a value of a different type to it:

x = 5 # x has a type of Integer
x = 'Hewwo' # x is now a String!

Unlike JavaScript, variables in Python are always block scoped.

Blocks

Python is a bit more strict than JavaScript when it comes to syntax. In Python, getting indentation off by a single space can prevent your programming from even running (!). This is because Python uses indentation to create blocks instead of braces. For example, this is how you would define a block in JavaScript vs. Python:

Creating a block in JavaScript

function exampleFunction () {
  // This is a block
  var a = 5;
}

{
  // This is also a block
}

Creating a block in Python

# This is a block with its own scope

def example_function():
  # This is also a block with its own scope
  x = 5
  print(x)

If the line containing print(x) had one or more extra spaces, the Python interpreter would throw an IndentationError, because those extra spaces would have created an invalid block.

def example_function():
  x = 5

  # IndentationError!
    print(x)

If that same line had one or more less spaces in it, like this:

def example_function():
  x = 5
 print(x)

The Python interpreter would throw this error:

NameError: name 'x' is not defined

Because print(x) is in a block that is out of scope of the one that x is declared in.

Control flow

if...else, while, and for blocks in Python are very similar to JavaScript:

if…else

if x > 2:
  print('hai!')
elif x > 3:
  print('bye!')
else:
  print('hey now')

if not x:
  print('x is falsy!')

while loop

while x > 0:
  print('hey now')

for loop

For loops are like JavaScript foreach loops:

ex_list = [1, 2, 3]

for x in ex_list:
  print(x)

Types

Python’s type system is a lot like JavaScript’s; it’s there, but it’s not as strict as in other languages like Java or C#.

Practically speaking, variables have types, but you don’t have to declare the types of your variables like you would in a statically typed language such as Java.

Here’s a quick overview of Python’s built in data types:

Numbers

Unlike JavaScript, Python has more than one number type:

  • Integers: 1, 2, 3
  • Floats: 4.20, 4e420
  • Complex numbers: 4 + 20j
  • Booleans: True, False

You can perform the same operations on numbers in Python as you can in JavaScript. There’s also an exponentiation operator (**):

# a = 4
a = 2 ** 2

Lists

Lists in Python are similar to arrays in JavaScript. Lists can contain a mixture of types:

[4, "2", [0, "zero"]]

There’s also a special syntax for slicing elements from lists:

a_list = [1, 2, 3, 4, 5]

# 1, 2, 3
a_list[0:2]

# 4, 5
a_list[3:]

# 3, 4
a_list[2, -2]

And some handy built-in methods for operating on lists:

# 3
len([1, 2, 3])

# 3, 2, 1
[1, 2, 3].reverse()

# 1, 2, 3
[1, 2].append(3)

You can even concatenate two lists with the + operator:

# 1, 2, 3, 4
[1, 2] + [3, 4]

Strings

Strings in Python are a lot like strings in JavaScript. They are immutable, and individual characters can be accessed like elements in an array:

name = 'Mario'

# M
print(name[0])

# Nope, name is still 'Mario'
name[0] = 'W'

Dictionaries

Dictionaries are associative arrays, similar to objects in JavaScript. In fact, dictionaries can be declared with a JSON-like syntax:

# Dictionaries in python
person = {
  'name': 'Mario',
  'age': 24
}

# Mario
print(person['name'])

Dictionaries have a handy method for returning a default value when trying to get the value of a non-existent key:

# Because `gender` is not defined, non-binary will be returned
person.get('gender', 'non-binary')

None

None is equivalent to null in JavaScript. It signifies the absence of a value, and is considered “falsy”.

x = None

if not x:
  print('x is falsy!')

Functions

Like JavaScript, functions are objects in Python. That means you can pass functions as arguments, or even assign properties to functions:

def func(a, fn):
  print(a)
  fn()

func.x = 'meep'

# 'meep'
print(func.x)

def another_func():
  print('hey')

# 5
# 'hey'
func(5, another_func)

Modules

Modules in Python aren’t that far off from modules in ES6.

Defining a module

A module in Python is simply a file that contains some Python code.

# my_module.py
hey = 'heyyy'

def say_hey():
  print(hey)

Unlike JavaScript, you don’t have to declare what is being exported; everything is exported by default.

Importing a module

You can import an entire module in Python:

# importing my_module.py from another_module.py; both files are in the same
# directory
import my_module

# Do things
my_module.say_hey()
print(my_module.hey)

Or import individual items from a module:

# another_module.py
from my_module import hey, say_hey

# Do things
say_hey()
print(hey)

You can also install modules other people have written with pip, a package manager for Python.

pip install simplejson

Object Oriented Programming

Python has support for object oriented programming with classes and classical inheritance, unlike JavaScript which has prototypes with prototypal inheritance.

Classes

# Defining a class
class Animal:
  # Variable that is shared by all instances of the Animal class
  default_age = 1

  # Constructor
  def __init__(self, name):
    # Defining a publicly available variable
    self.name = name

    # You can define private variables and methods by prepending the variable
    # name with 2 underscores (__):
    self.__age = default_age

  # Public method
  def get_age(self):
    return self.__age

  # Private method
  def __meow():
    print('meowwww')

  # Defining a static method with the `staticmethod` decorator
  @staticmethod
  def moo():
    print('moooo')

# Creating an Animal object
animal = Animal()

# Accessing public variables and methods
print(animal.name)
print(animal.default_age)
print(animal.get_age())

# Accessing a static method
Animal.moo()

# ERR!!!! .__age is private, so this won't work:
print(animal.__age)

Inheritance

Classes can inherit from other classes:

# Inheriting from the Animal class
class Human(Animal):
  def __init__(self, name, ssn):
    # Must call the __init__ method of the base class
    super().__init__(name)
    self.__ssn = ssn

  def get_ssn(self):
    return self.__ssn

# Using the Human class
human = Human('Mario', 123456789)

# Human objects have access to methods defined in the Animal base class
human.get_age()
human.get_ssn()

Resources

There is a lot more to Python than what’s in this guide. I highly recommend you check out the Python docs for tutorials and details about other language features.

And remember, the best way to learn a language is to write it, a lot. So get to coding!

P.S.: If you need an idea for a project, maybe try creating a simple API with Flask?

Are you passively or actively looking for a new job? Sign up for Underdog.io

Source: mariopabon.compythonjavascriptprogrammingwebdevelopment

From the Paysa Blog: Interview with Co-Founder Josh

This post originally appeared on Paysa’s blog.

Joshua Goldstein is co-founder of Underdog.io, a talent platform that helps thousands of top candidates connect with hundreds of the best technology companies.

We recently checked in with Joshua to get his insight on what tech companies are looking for in new hires today and how job seekers can better position themselves to land the jobs in tech. Here’s what he had to say:

Can you tell us the story behind Underdog? What sets you apart from other job platforms?

We started Underdog.io as a side project back in April 2014. At the time we were working on a different business, but we weren’t close to making any money with it and started brainstorming other products that would help us pay the bills. Underdog.io was one of those ideas; it was the one that we felt the strongest about. After getting some early traction, we decided to go all in.

We’re building a recruiting company with heart. The recruiting industry is very transactional, but finding a job can be such a personal experience. Our goal is build something that looks and feels different than the typical recruiting experience.

We work with companies that share this similar notion. It’s one of the reasons we turn down one of every two companies that attempt to join the platform. We’re also less expensive than most job platforms. Because we’re still bootstrapped, we don’t have to be as dead-set focused on revenue — instead, we attempt to focus on the candidate experience above all else. When the two are at odds, we will always side with the latter.

What is the current job climate for tech jobs? What are companies looking for in their tech talent?

No surprise, the climate for tech jobs is hot, but it’s also always evolving. There aren’t enough good software engineers when compared to open roles, and that’s something we expect to continue in the near term. Coding bootcamps, among other players, have attempted to fill this void but the problem is they are filling the market with junior developers, and the need is typically for more mid-level and senior talent.

We’ve noticed a few interesting differences between what SF companies look for in software engineers and NYC companies. SF is much more focused on education as an initial screen for a candidate, whereas NYC companies are more likely to look past education and focus on side-projects and public-facing code. This could be due to the maturity of the SF market (or lack-thereof in NYC). Or, it could be due to a lack of experience in junior recruiters in the SF market. What we see is that education is the easiest screen to perform for even the least experienced recruiter.

What are the challenges facing tech professionals in landing jobs at competitive companies?

At the moment, software engineers have quite an advantage relative to the overall job market. The biggest challenge for the best professionals is that they are often asked to run through multiple rounds of intense interviews that are merely duplicates of each other. It’s not exactly the worst thing in the world, and it’s something we have to remind software engineers when they complain about interviewing.

For tech-focused business candidates, the laws of supply and demand are different. Tech is trendy, which means many that would have considered finance or consulting after graduation are now more apt to go into tech. It’s a much more competitive landscape for business candidates.

What can these individuals do to make themselves stand out to IT companies?

Software engineers don’t have to do too much. It always helps to have some public-facing code on GitHub or possibly BitBucket, but the reality is, as of now, software engineers are in high demand.

Designers and technical product managers should have a portfolio and/or website that has been updated with the latest work.

Business-focused candidates will need to spend more time networking, understanding the market, and proving to the hiring managers that he/she is capable. It takes a certain individual to work at a fast-moving technology company – the smaller the company, the higher the need will be for a generalist.

What types of skills or training is essential for tech workers today? What will make them more competitive?

No matter what type of role, tech workers should know tech. We encourage our business candidates to learn the basics of coding, design, and sales & marketing. That doesn’t mean he/she has to take an expensive coding class – there are enough relatively inexpensive tools to learn the basics.

For software engineers, it’s important they are up-to-speed with current trends in tech. Proficient knowledge of certain languages and frameworks will make a software engineer more appealing – Ruby and Python, for example. The same idea goes for designers. And, if a designer wants to make a good first impression, he/she should have some experience designing for mobile.

What are the most common mistakes you see IT job seekers making when launching a job search?

Looking for a new job can sometimes feel like a job in-and-of-itself. It’s important that job seekers put forth the necessary effort.

It’s also important the job seeker does some due diligence on the industry, company, and possibly even interviewee.

What can job seekers do to better prepare for interviews with IT companies? What type of research should they do before hand?

Know the company! Check its LinkedIn page, Crunchbase page, AngelList page, Paysa page, etc. Come to the interview with questions.

If the job seeker is a software engineer, he/she should expect to be tested on his/her coding skills. Unfortunately, coding tests are not always a good representation of someone’s skills, but it’s almost a must in today’s world. Prepare beforehand (if possible), and try not to get too flustered. I could probably write a lot more on this subject, but I’ll save it. There are plenty of smarter people out there that have addressed the concept and often-times misuse of the coding test.

What tends to turn companies off? What are the most common mistakes you see job seekers making in the interview process?

Hiring managers and recruiters want to find people who appear to be passionate about the problems the company is attempting to solve.

Coming into an interview unprepared is a common mistake. Candidates should do some research and be ready to ask questions.

If you’re interviewing at a startup, try to understand the persona and culture before you get to the interview. The last thing you want to do is show up in a suit when everyone in the office wears t-shirts and sandals. You should try to mimic the culture as much as possible when interviewing, without going overboard. This is also a good way opportunity to ask oneself what he/she wants in his/her next company’s culture.

Why should job seekers use online tools like Paysa to improve the quality of their job searches?

It’s always helpful to have more information. Remember, job seekers are almost always going to have incomplete information about their opportunities. Using a tool like Paysa gives candidates a leg up when it comes to negotiation.

Obviously, I’d be remiss if I didn’t mention our product, Underdog.io. We improve the job search by making it fast and painless to your information in front of as many founders, internal recruiters, and hiring managers at the best technology companies in SF, LA and NYC. One 60-second application, and you could be contacted directly by email by them the following Monday.

What piece of advice do you find yourself repeating over and over to those seeking tech work?

It depends on the candidate. For software engineers, as I’ve said, the market is different. Mistakes can be made, and someone can still get a job. Of course, if someone wants to work at Google, we’d suggest they don’t make mistakes. 😉

For business candidates, finding a job can take time. Put in the work, and know the industries. If you’re looking to work at a startup, you should be paying attention to recent funding rounds, and possibly befriending VC’s, when possible. Be patient and strategic, and you’ll be fine.

They say that in fundraising if you ask for money, you get advice, and if you ask for advice, you get money. I think the same could be said for job-searching. When networking, if you ask for a job, you get advice. If you ask for advice, you might just get a job.