How Much Coding Should Designers Know?


Written by Irina Papuc Topics: Learn to Code title

Many designers think each discipline should mind their own business, while others see no problem in professionals wearing multiple hats. Many developers see designers who code as a threat, while others see it as a facilitator. This is a hotly debated subject, and although I think some great designers are also superb at coding, I will always defend that the more you focus on a particular area the best you will be at it. But this shouldn’t be a reason for you to miss out on the benefits of having another skill under your belt.

 

Learn to Code

Learn how to code and make yourself a great asset to any multi-disciplinary team.

As a designer who has gone as far to set up Linux servers and program back-end, I see no question that understanding ‘the basics’ of coding would benefit any designer. The question really is, how much coding should designers learn? At what point might designers be wasting their time, or really stepping over the line into the territory of developers?

In order to provide some insight into the potential benefits of learning to code, I’ve broken the different levels of coding knowledge down into degrees of usefulness.

Step 1: Know the basics of HTML and CSS

Any designer would greatly benefit from knowing the foundations of HTML and CSS and would be surprised by how easy it can be. Stop being lazy and just learn this, it will make you a better designer, guaranteed.

When is front-end just coding, not programming?

Is front-end coding? Yes! Is it programming? Only after a certain point.

HTML and CSS don’t involve programming logics. You can see that in HTML – HyperText Markup Language the letter M stands for Markup, what means that it’s nothing more than a coded structure of the page/screen elements. It works like a puzzle, but it doesn’t require a lot of mathematical thinking.

In laymen’s terms, HTML is an architectural map that tells the browser what to display. The HTML map will influence how search engine crawlers will interpret the site. So, the concern here is to make sure the code is very well structured and that those systems can understand it and rank it well.

CSS, or Cascading Style Sheets, is the code that tells the browser how to display things. Metaphorically, if HTML is the skeleton of a page or screen, CSS would be the skin and eyes colors, hairstyle, body shape, limbs sizes, etc. The language has a very simple code structure that determines typography, colors, positions and dimensions. The concern with HTML is to keep it very organized for maintenance and optimized for good performance.

Understanding code means understanding your pixels

Learning how to code gives you the opportunity to know how things work. Why do we need to worry about pixel-perfection, is it only for the sake of symmetry?

If you play with HTML and CSS, you’ll notice that everything is measured in pixels (there are other measurement units – not relevant here – but they will ultimately be converted to pixels). Understanding these mechanics will change your mindset and will care for design in a more efficient way for the development process. As a consequence, not only your projects will be easier to program as your projects may look much more structured.

Step 2: Front-end JavaScript and AJAX could make you a unique asset

This is where things can start to get complicated, but it’s also where a lot of fun happens. If you’re an analytical thinker, or specially motivated, you’ll get a lot out of learning JavaScript and AJAX. As well, your design perspective will improve in knowing exactly how far technology can take you and how far you can push it to be innovative. I don’t think going this deep is necessary though, because if you know the basics of HTML and CSS you’ll already be ahead of most competitors. However, you may find some fun in making things coming to life with the knowledge.

When does front-end become programming?

Although we could stop here and have the back-end implemented, we can make our project more dynamic by adding some scripting, like if we could give a few acrobatic abilities to the beautifully structured and painted body we created with HTML / CSS.

For that, we have our dear JavaScript, which is an actual logical programming language. JavaScript can be used to display dynamic interactions, animate elements, create a very responsive communication with the back-end or server, as well as other things. As there aren’t many limits to what can be accomplished with Javascript in front-end development, now we are talking about a programming language: functions, objects, logics, conditionals, math, math and more math so that it may be a little challenging. But it’s not that hard to learn, especially considering what most clients will require.

In my opinion if you want to say you’re a front-end developer, knowing (at least the basics of) JavaScript is mandatory. You should understand how AJAX works (which is used by nearly any modern website). You should test your interactions in real time, and if you’re a motion designer, like me, you can do some animations yourself rather than having to explain it to a programmer, which may not have the same eye for the kind of detail that you see as a designer.

As well, there are the pre-processors for HTML (Haml, Jade, etc.) and CSS (SCSS, LESS, etc.), which are languages that aim to facilitate and streamline the coding process using programming concepts (such as logics, modulation, among others). The code, as it states, is then pre-processed, generating the pure HTML and CSS (also called vanilla). Even if you know only the basics of programming, these could be real time-savers.

Knowing how to program informs the limitations of devices

If you, a designer, learn front-end you will clearly see various advantages for knowing it, such as knowing how things work and see the limitations of each device.

Even browsers behave differently – let alone separate devices – so knowing this when you are creating gives you a sense of making something solid, lowering the chances of future complications in projects. Every programmer I know got a layout that was impossible to reproduce at some point in their lives.

Knowing the mechanics behind a digital project will not only give you an idea of what limits your work, but also what boundaries of technology you can push. I remember when several agencies, such as Fantasy and Firstborn, made a reputation in the early 2000’s for using Javascript in a different and very creative way.

Step 3: Back-end JavaScript might be overkill

Well, maybe we’re going too far here. Knowing the basics of back-end JavaScript can be useful depending on the stack your team uses (like MEAN stack, for example). But, you don’t have to go too far if all you need to know is how to run a project. However, if you dream of leading product teams, this may be helpful. But, if you call yourself a designer, not developer, your returns are seriously diminishing at this point, so you’d be better off expanding your creative skills.

Learn to code and collaborate better with developers

Would romantic relationships be easier if men could read the minds of women? Many would think so. I wonder the same thing about designers and developers.

Knowing how developers think and what they need to be able to do their job may sound like stepping on their territory, but it will make you a great asset to any multi-disciplinary team.

This can be very useful both for internal communications, as well as in idea pitches, because you know what to expect from the other members of the team. If you can do this, know your limitations (and how to push them), then you will be able to propose much more robust solutions to clients.

A designer who can code will see more job opportunities

One of the reasons why I closed my small company (RIP!), was the fact that I started international relationships that became increasingly more attractive than local businesses. For these contacts, today I work exclusively for this the global market, so 99% of my network is foreign. The opportunity that opened up this market for me was a scenario that required an individual who could do it all, including front-end. And I fit the bill; I could even program back-end. By then I ended up getting involved more and more with the dark side of the force, even to the point of setting up and managing Linux servers.

In every opportunity I had since then, knowing how to program made a big difference both in the screening processes and the day to day work. At Toptal we see a bunch of opportunities for professionals with this hybrid profile, and startups out there are eager to find people that can take over both the design and front-end of their early-stage applications.

designers coding

Learning how to code might lead to some unexpected opportunities.

Still, there are some designers and programmers who dislike one another snooping into each other’s businesses. Why might this be? Some may be afraid of losing work, and some may be lazy to learn something new. But the truth is that you should analyze your options, and focus on what will increase your chances of success. You may not have enough time now to learn everything, but maybe knowing vanilla HTML and CSS should be sufficient to add a significant differential to your career. It should be quick and easy for you to take the first steps. The more you know, the more you expand your opportunities. So, by experience, I would never discourage any opportunity to learn new skills.

Step 4: Database Architecture and Software Engineering Won’t Get Designers Anywhere

Unless algebra and complex computing are your thing, I would say “Dear God, no!”. There are other useful side skills you could learn instead (like knitting). People are just as likely to want to hire a designer who knows how to knit as one who knows how to architect databases. Besides, you don’t want to be in a place where you need to take care of everything, believe me.

So, should designers program?

I would say no. You don’t need to. But more and more the work opportunities in the design field add web-development, or at least front-end notions, as a requirement or a differential. So you don’t need to, but maybe you should if you want to have something else to offer, especially if you’re having trouble finding work. Sometimes we can’t find an opportunity that fits our profile, and that’s when we need to adapt to what is out there.

Conclusion

All of this said, we all know that it is not mandatory for a designer to know how to program. I know a lot of designers that don’t, excellent ones in fact.

However, in some cases, I notice deficiencies from a development point-of-view, in details that could even harm a project’s productivity.

You don’t need to be a designer who is also an expert in front-end development to have these differential skills added to your CV or applied to your projects, and you have a lot of online resources to start walking down this road. Simple skills can impact your potential for success in a very positive way.

Do some research, look at what job offers are requesting, see the profile of designers startups are looking for, and maybe you can agree with me when I say you don’t need to learn how to code, but you should.

Think about it!

This article was originally posted on Toptal

Share this:

Read More

Learn to Code: Toptal’s Quick And Practical JavaScript Cheat Sheet: ES6 And Beyond


Written by Irina Papuc Topics: Learn to Code learn-to-code-3

JavaScript: What is ES6?

ECMAScript 6 (ES6) is the latest standard specification of JavaScript, the programming language of the Web. Since HTML5 and the birth of Node.js, the runtime that allows us to run JavaScript on the server or desktop, JavaScript has gained a unique momentum. There is a growing adoption rate among enterprises, embracing it into production, and thus its newest features were greatly awaited.

We created this cheat sheet as a list of ES6 features we use everyday. Trying to be comprehensive but concise at the same time, new API methods are left apart. For those who need them, make a quick search by yourself or try to explore the MDN documentation to catch the latest experimental APIs. However, some the most bleeding edge characteristics like async and await from the next specification draft (ES7) are included. This is because of most of us developers are going to use a transpiler like Babel anyway to get advantage of the newest JavaScript.

You can test out some of the mentioned tips by running the node REPL with this command:

node --use-strict $(node --v8-options | grep harm | awk '{print $1}' | xargs) #ES6

Or, use directly a babel-node to get the most of Javascript in your console.

 

Download JavaScript ES6 Cheat Sheet

CLICK HERE TO DOWNLOAD JAVASCRIPT ES6 CHEAT SHEET

JavaScript (ES6 and Beyond) Cheat Sheet

Constants

> const EULER = 2.7182818284
> EULER = 13
> EULER
> 2.7182818284

let vs var

> var average = 5
> var average = (average + 1) / 2
> average
> 3
> let value = ‘hello world’
> let value = ‘what is new’
// -> throws TypeError: Identifier 'value' has already been declared

Warning! If array or object, the reference is kept constant. If the constant is a reference to an object, you can still modify the content, but never change the variable.

> const CONSTANTS = []
> CONSTANTS.push(EULER)
> CONSTANTS
> [ 2.7182818284 ]
> CONSTANTS = { ‘euler’: 2.7182818284 }
> CONSTANTS
> [ 2.7182818284 ]

Be aware of Temporal Dead Zones:

> console.log(val) // -> 'undefined'
> var val = 3
> console.log(val)
 // -> 3

Because it’s equivalent to:

> var val
> console.log(val)
> val = 3
> console.log(val)

Variables declared with “let/const” do not get hoisted:

> console.log(val)
// -> Throws ReferenceError
> let val = 3
> console.log(val)
// -> 3

 

Binary, Octal and Hex Notation

> 0b1001011101 // 605
> 0o6745 // 3557
> 0x2f50a // 193802

New Types

Symbols, Maps, WeakMaps and Sets

Arrow Function

> setTimeout(() => {
…  console.log(‘delayed’)
… }, 1000)

New Scoped Functions

> {
… let cue = 'Luke, I am your father'
 console.log(cue)
… }
> 'Luke, I am your father'

Equivalent with Anonymous Function

> setTimeout(function () {
…   console.log(‘delayed’)
… }.bind(this), 1000)

Equivalent with Immediately Invoked Function Expressions (IIFE)

> (function () {
… var cue = 'Luke, I am your father'
… console.log(cue) // 'Luke, I am –
… }())
> console.log(cue)
// Reference Error

Object Notation Novelties

// Computed properties
> let key = new Date().getTime()
> let obj = {  [key]: “value” }
> obj
> { '1459958882881': 'value' }

// Object literals
balloon = { color, size };

// Same as
balloon = {
  color: color,
  size: size
}
// Better method notations
obj = {
foo (a, b) { … },
bar (x, y) { … }
}

String Interpolation, Thanks to Template Literals

> const name = 'Tiger'
> const age = 13
>
console.log(`My cat is named ${name} and is ${age} years old.`)
> My cat is named Tiger and is 13 years old.

// We can preserve newlines…
let text = ( `cat
dog
nickelodeon`
)

Default Params

> function howAreYou (answer = ‘ok’) {      
 console.log(answer) // probably ‘ok’
}

Promises

new Promise((resolve, reject) => {
  request.get(url, (error, response,  
  body) => {
    if (body) {
        resolve(JSON.parse(body));
      } else {
        resolve({});
      }
  })
}).then(() => { ... })
.catch((err) => throw err)
// Parallelize tasks
Promise.all([
   promise1, promise2, promise3
]).then(() => {
   // all tasks are finished
})

Classes, Inheritance, Setters, Getters

class Rectangle extends Shape {
  constructor (id, x, y, w, h) {
    super(id, x, y)
    this.width = w
    this.height = h
  }
  // Getter and setter
  set width (w) { this._width = w }
  get width () { return this._width }
}
class Circle extends Shape {
  constructor (id, x, y, radius) {
    super(id, x, y)
    this.radius = radius
  }
  do_a(x) {
    let a = 12;
    super.do_a(x + a);
  }
  static do_b() { ... }
}
Circle.do_b()

Destructuring Arrays

> let [a, b, c, d] = [1, 2, 3, 4];
> console.log(a);

> 1
> b
> 2

Destructuring Objects

> let luke = {  occupation: 'jedi',
 father: 'anakin' }
> let {occupation, father} = luke
> console.log(occupation, father)

> jedi anakin

Spread Operator

// Turn arrays into comma separated
// values and more
> function logger (...args) {
 console.log(‘%s arguments’,
    args.length)
 args.forEach(console.log)
 // arg[0], arg[1], arg[2]
}

…Go Destructuring Like a Boss

> const [ cat, dog, ...fish ] = [
‘schroedinger’,  ‘Laika’, ‘Nemo’, ‘Dori’]
> fish // -> [‘Nemo’, ‘Dori’]

Or Do a Better Push

> let arr = [1, 2, 3]
> [...arr, 4, 5, 6]
> [1, 2, 3, 4, 5, 6]

…And Destructuring in the Future    ⚠ ES7

{a, b, ...rest} = {a:1, b:2, c:3, d:4}

Async   ⚠ ES7

async function schrodinger () {
return new Promise((resolve, reject)
  => {
   const result = Math.random > 0.5
   setTimeout(() => {
     return result ? resolve(‘alive’)
     : reject(‘dead’)
   })
  })
}

Await   ⚠ ES7

try {
console.log(await schrodinger())
// -> ‘alive’
} catch (err) {
console.log(err)
// -> ‘dead’
}

Export   ⚠ ES7

export function sumTwo (a, b) {
return a + b;
}
export const EULER = 2.7182818284
let stuff = { sumTwo, EULER }
export { stuff as default }

Importing   ⚠ ES7


import React from ‘react’
import { EULER } from ‘./myexports’
import * as stuff from ‘./myexports’
// equivalent to
import stuff from ‘./myexports’
// { sumTwo, EULER }

Generators

They return a objects that implement an iteration protocol. i.e. it has a next() method that returns { value: < some value>, done: <true or false> }.

function* incRand (max) { // Asterisk defines this as a generator
while (true) {
// Pause execution after the yield, resume
// when next(<something>) is called
// and assign <something> to x
let x = yield Math.floor(Math.random() * max + 1);
max += x;
}
}

var rng = incRand(2) // Returns a generator object
> rng.next() // { value: <between 1 and 2>, done: false }
> rng.next(3) // as above, but between 1 and 5
> rng.next() // NaN since 5 + undefined results in NaN
> rng.next(20) // No one expected NaN again?
> rng.throw(new Error('Unrecoverable generator state.'))
// Will be thrown from yield

This article was written by Jesus Dario Rivera, a Toptal Javascript developer.

Share this:

Read More

Bootstrapped: Building A Remote Company


Written by Irina Papuc Topics: Business DCF 1.0

 

The Dream: Building A Remote Company

If you ask me, working remotely rocks. I’m currently writing from a small beach bar located on a remote island in southern Thailand. Looking up from my laptop, I see nothing but the endless ocean and its crystal clear blue waters. I’ll be enjoying this morning undisturbed and focused on my work because the rest of the team hasn’t even gotten up yet. Time zones work out really well for distributed teams.

My colleague Thomas recently talked to 11 thought leaders in project management about the impact of remote work on a company; some scrum experts argued that distributed teams could work together effectively while others came out strongly against it.

I understand the concerns; you can’t just open up the office doors and release everyone into the wild. It’s not guaranteed that you’ll end up with a thriving business. Marissa Mayer at Yahoo famously axed remote work in 2013 after feeling that some employees abused it.

So how does a tech company get this working remote thing right? Read on. The following is based on our story at Planio and how we made it work.

The author, Jan Schulz-Hofen, working remotely on an island beach.

Enter Planio, my remote company

There are a number of things which motivated me to start my current company. Breaking away from client work while retaining all the benefits of being a location independent freelancer was one of them.

In 2009, I was sitting in the shadow of a cypress grove situated in a beautiful Mediterranean-style garden overlooking the rolling hills of Tuscany, working hard on a new side project of mine: Planio.

It’s a project management tool for people like me: developers. Planio helps make client projects more organized and transparent all while reducing the number of tools and platforms needed to do the job. Planio is based on open-source Redmine (an open source Ruby on Rails-based software project), which I’ve used remotely with my own clients since its very beginnings. So, in a way, remote work is already in Planio’s DNA.

Fast forward to today, and my small side project has grown into a real company. We’re a team of 10 now, serving more than 1,500 businesses worldwide. We have an office in Berlin, but many of us work remotely.

In this article, I’ll dig into the principles, tools and lessons that have helped us along the way. After reading it, I hope you’ll be able to architect your software company so it’s remote-friendly right from the start.

“Talk is cheap. Show me the code.” – Linus Torvalds

Every Thursday we have an all-hands conference call where we discuss what we did the previous week and what’s coming up next.

At the beginning, we spent a lot of time discussing ideas before deciding on what to do, but we found that it’s a lot harder when some team members are on a poor quality telephone line and you can’t see them.

Now, we often just “build the thing” and then discuss it – we create a working prototype with a few core ideas and then discuss that. For instance, we recently hit some performance issues with our hosted Git repositories. Instead of discussing and analyzing all the possible ways in which we could potentially save a few milliseconds here and there with every request, my colleague, Holger, just built out his suggested improvements in a proof-of-concept on a staging server to which we directed some of our traffic. It turned out well and these ideas are going into production.

This method focuses everyone’s minds on action rather than talk. The time invested in writing code is paid back by less time spent talking in circles.

Use Text Communication

Real-time communication punishes clarity. Instinctively calling a colleague when you need something is very easy, but it’s not always your best course of action. I can’t remember the number of times I’ve started writing an email or a Planio ticket for a problem only to solve it myself just while writing it down.

Zach Holman, one of the first engineering hires at GitHub, agrees: “Text is explicit. By forcing communication through a textual medium, you’re forcing people to better formulate their ideas.”

Text communication also makes you more respectful of each other’s time, especially when you’re living multiple time zones away. Immediate communication can be disruptive; the person might be in the middle of figuring out why the last deployment went wrong. With an email, s/he should be able to consider your write-up at a more convenient time.

Be as Transparent as Possible

Time spent worrying about office politics isn’t conducive to shipping working software, and transparency promotes trust. It’s no coincidence that many remote-by-design companies, such as Buffer, have radical transparency. In the case of Buffer, it shares revenue information and the salaries of all its employees.

Automattic, the company behind WordPress.com, also emphasizes transparency. In his book, The Year Without Pants, Scott Berkun shares his experience working remotely for Automattic, and that all decisions and discussions are internally available to employees in its P2 discussion platform as part of its emphasis on transparency.

The chat feature in Planio works in a similar way. Discussions are open for everyone to see and chat logs are linked automatically from the issues discussed so nobody is left out; even new hires can read up on what previous decisions were made and why. When I started building the chat feature, I considered adding a feature for chatting privately with others, but when we discussed it as a team, we ended up leaving it out because we wanted to keep team communication as transparent as possible.

I think transparency is critical for remote teams. For example, imagine you’ve just joined a team of remote developers. Perhaps you’ve never met your new colleagues. You don’t know the unspoken rules of behavior. You might be worried about whether you’re doing a good job. Are your teammates actually being sarcastic or do they really mean their compliments? Is everyone privately discussing how good of an engineer you are?

Digitalize Your Systems

We choose our services based on what they offer by way of online platforms, from telephone providers to banks (many of them will even offer a small financial incentive for going paperless, plus it’s great for the environment, too). I’m lucky to have a lawyer and an accountant for Planio who are comfortable sending emails or messages with Google Hangouts instead of summoning me to their offices. (I strongly recommend you ask about this at the first meeting.) Bonus points for getting them to sign up with your project management tool and become a part of your team!

We’ve even digitized our postal mail; at Planio, we use a service called Dropscan that receives our letters, scans them and forwards the important ones to the appropriate person. You don’t want to your friend to pick up and read them out over Skype. If you cannot find a mail-scanning provider for your city or country, some coworking spaces offer virtual memberships to maintain a physical mailing address while you’re away.

For those companies sending out mail, there are services available so that you never have to visit a post office again. We use a German printing company with an API that automatically sends a letter along with stickers to each new paying Planio customer. It’s something people love, and we don’t have to print and mail a thing. International alternatives include Lob and Try Paper.

Digitalize Your Systems

Should You Have a Digital Presence Mandated?

In a co-working space on the tropical island of Koh Lanta, Thailand, I noticed that someone in a support role for a major e-commerce platform was constantly on a live video feed with the rest of the team. Sqwiggle offers a similar “presence” functionality for remote teams.

I suppose mandating that all employees are on video while working might be based out of a fear that employees abuse remote work arrangements. In my experience, that’s not the case. At the tropical co-working space, there’s a certain urgency in the air, despite the laid-back clothes and coconut drinks. People are quietly focused on their laptops; it’s as if they want to make sure remote work delivers results, so they can stay out of a fixed office for good.

We found that we don’t need a digital presence because we have a great level of trust among everyone on the team. I also think that it’s paramount to respect everyone’s privacy. If your company is moving from an all-on-site setting to remote work, a digital presence might help the more anxious managers to overcome any trust issues.

Choose Bootstrapping over Venture Capital

Most venture capitalists are looking for outsized returns, so they’ll prefer an intense short burst of 12-months’ work from a team over a more sustainable pace. Front App, a startup funded by the Silicon Valley accelerator Y Combinator, rented a house in the Bay area for their three-month stint in the Y Combinator accelerator program. The goal is to optimize for evaluating a business idea quickly.

Given the outsized return mindset, you may have a hard time convincing a venture capitalist to fund you when you’re working from a beach in Cambodia. This is why many venture-backed startups (such as Buffer or Treehouse) that use remote work built leverage first. Buffer was profitable before taking on investment while Ryan Carson, the founder of Treehouse, had already proven himself with a previous startup.

Here’s a better way than venture capitalism: bootstrapping. It means financing your company with revenue from initial customers. In my opinion, it’s by far the superior approach because it enables you to build your company on your own terms and remain in control. However, it often requires working two jobs or freelancing on the side while you get your company started. It took me about two years working on both Planio and client projects (via my software development agency LAUNCH/CO) to get going, but it was well worth it.

Bootstrapping also forces you to build a business that generates revenue from the very beginning, which I find much healthier. Hint: Building a B2B SaaS makes this much easier than creating a consumer app because businesses are far more willing to pay monthly subscriptions if it adds value. You have to sell a lot of consumer iPhone apps at $0.99 to cover monthly payroll for even the smallest of teams.

Choose Bootstrapping over Venture Capital

Bootstrapping forces you to build a business that generates revenue from the very beginning.

Price your Products Strategically

One of our first clients was a massive technology company with billions in annual revenue. Obviously, I was delighted that they’d choose us over much bigger, more established competitors. They’re still a happy customer, but we have moved away from very large enterprise accounts; I’ve found that they require a lot of hand-holding and in-person meetings before they’ll become a customer.

As Jason Lemkin points out in his article on scaling customer success for SaaS, when you have big enterprise accounts, someone will have to get on a jet to visit them twice a year. If you’re a small company of two or three people, that person is going to be you, the CEO, the CMO and the CSO all rolled into one overworked hamster.

Keeping your pricing model within the rough bounds of a $49/$99/$249 model as suggested by developer-turned-entrepreneur Patrick McKenzie means avoiding having to hire an enterprise sales team, and having to earn the massive amount of capital required for it. You, the customer, don’t expect the CEO to pop in at Christmas with a box of chocolates when you’re paying $249 a month.

Build on Open Source

A venture-backed business based on proprietary software is great when your play is a “Winner Takes All” game and own the market. When you’re a bootstrapped company, open source software can give you reach and leverage you could never have achieved, otherwise.

There’s precedence of profitable tech companies building a business around open source software; Basecamp famously open-sourced Rails, guaranteeing themselves a supply of highly qualified engineers for the rest of eternity. GitHub has become a unicorn, leveraging the open source project Git that Linus Torvalds started to manage the Linux kernel sources. Our friends at Travis-CI started as an open source project, ran a crowdfunding campaign and then turned it into a remote-focused bootstrapped business (which also campaigns for diversity in tech through its foundation).

Planio is based on Redmine and we contribute many of our features and improvements back to the community. This works great in multiple ways; our contributions and engagement in the community help advance the open source project and Planio gets exposure to potential new customers. For us, it’s the most authentic way to build a brand; by showing our code and taking part in open technical discussions, we can demonstrate that we know our stuff!

Hire Proven Professionals

Hiring a fleet of interns every year makes sense only if you’re intent on scaling up your employee count as soon as you hit the next round of funding.

Outsourcing tasks is easy if it’s copy-and-paste, but you don’t want to outsource your DevOps to someone with the lowest hourly rate when you have thousands of customers relying on your servers. You’ll want proven professionals, such as those at Toptal.

Matt Mullenweg, the founder of the popular open-source blogging platform WordPress, stated that by focusing on quality means that his company, Automattic, predominantly hires experienced candidates who can handle the unstructured working environment of a remote company.

That means it “auditions” candidates by paying them to work on a project for several weeks, then hire them based on performance. Automattic has found this method is far more effective in finding the right candidates than traditional CVs and cover letters.

Emphasize Quality of Life

Work takes up a massive amount of our time, year in and year out. It should not be something that you just do to be done with; you’d probably end up wasting a huge chunk of your life. The best source of motivation and the main ingredient for great results is a work environment that’s inspiring, enjoyable and fun. Travelling, learning and engaging with people from different cultures makes work feel less of a sacrifice or necessary evil (at least in my life) than when working a nine-to-five office job.

Emphasize Quality of Life

Work takes up a massive amount of our time, year in and year out. It should not be something that you just do to be done with.

It’s not just about travelling the world, though, there’s the personal freedom aspect. Parents get to spend more time with their kids, thanks to avoiding a two-hour commute. You don’t have to live in Silicon Valley to earn San Francisco wages. Maybe, your significant other gets a great job opportunity abroad, too. You’re not faced with the painful choice between staying at your job and continuing your career or becoming a “trailing spouse” with limited career options.

At Planio, even though many of us work remotely, we all try to meet up at least once a year in a fun location. Last year, we spent a few weeks of summer in Barcelona, and several of us met here in Koh Lanta, this year. I’m still looking for ideas for the next destination, so let me know if you have any travel tips!

What tools, ideas or techniques have you found that make working remotely easier and more effective? Leave a comment below.

This article was written by JAN SCHULZ-HOFEN, FOUNDER & CEO @ PLANIO and friend of Toptal.

 

Share this:

Read More

Learn to Code: Wisdom and Tools for the Journey


Written by Irina Papuc Topics: Learn to Code learn-to-code-2

Learn to Code

Programming is a great skill to have. It is hugely rewarding on both a personal and professional level, giving you the ability to build and tinker and invent. It can open doors to all kinds of career paths with great benefits, be it a respectable paycheck, freedom to work when and where you want, or all of the above.

It’s no surprise that more and more people, from all kinds of backgrounds, are deciding to learn to code. But, each person who tackles the task is soon faced with an unpleasant reality: Learning to program is hard.

Complicated and confusing, at first, much of coding doesn’t make any damn sense. Contrary to expectations, the feeling of “I don’t get it,” may persist unabated long into the journey, making once bright-eyed beginners feel hopeless, lost, and ready to give up.

The moral of the story is this: Be prepared. The path to programmer paradise and learning to code is a long one, and without the right mindset at the beginning, it can quickly lose its appeal.

In this article, I’ll attempt to give you some guidance on what to expect on your journey, how best to go about it, and what tools and resources you may find helpful along the way.

The journey to programmer's paradise begins with a single step.

What to Expect

Maybe it’s obvious, but the first thing to make sure you wrap your head around is that programming, at its core, is a technical discipline. The earliest skills you learn will require a lot of “exactness” and “correctness,” and trying to cut corners will get you nowhere. You will have to learn at least a little bit of math, as well as a lot of things that might feel like math, such as procedural logic.

The point is, learning the foundations of programming takes a lot of focus and practice. However, countless people, techy and non-techy alike, have made this journey before you so do not be discouraged. As we will see, there is an abundance of resources for people just like you to help make the process as easy as possible.

Learning programming ain't easy.

 

The learning curve to learn to code is steepest in the beginning. There is a huge amount of “fundamentals” to absorb, including the various parts of a programming language (expressions, variables, data types, operators, loops, conditional statements, functions, classes), and the techniques for understanding how much of your computer’s time and memory space your code is going to use (complexity). You will write a lot of code that doesn’t work the first time, so you will have to come to terms with the bane of every programmer’s existence: debugging.

Once you’ve learned how to write code, you will be able learn how to write robust code. Making code efficient, easy to read and understand, and easy to expand on, is an art, and one that is constantly evolving. You will be able to start exploring different software philosophies, and go from simply being a “coder” to being a “software architect.” This is also a process that takes a lot of time and practice, but the better you get at it, the more you will find opportunities opening up for you.

How to Learn to Code

Each person’s journey to programming paradise is different, but there are some good principles that all travelers can benefit from. Here is the basic process I recommend if you are just starting out:

1. Choose Your Destination: Pick a Language, Any Language

If you are serious about learning to code, the language you pick really doesn’t much matter. Most popular programming languages share the same fundamental concepts, and by the time you’ve really gotten the hang of programming in your first language, picking up a new one will be easier than the first time around. If you are learning through a university degree program, or similar, your language will probably be chosen for you.

In any case, unless you know exactly what you want to do in the long run, there are only five languages I recommend considering, which strike a balance between ease of learning, versatility of the knowledge gained, and an abundance of long-term job prospects: Ruby, JavaScript, Python, C, and Java.

Here are some general notes on each, to help you decide:

Interpreted Languages

Interpreted languages are easier to get started with. This is because their source code can be run as soon as it is written. In contrast, compiled languages require an extra step between writing and running the code.

As a result, interpreted languages allow for faster coding, but they do not use computer resources as efficiently, and it is easier for bugs to go undetected. They are best suited for applications where performance is not a priority. These languages are very popular for web development. In fact, one of them, JavaScript, is the only language that can be run directly in a web browser, contributing to its rapid rise as one of the most lucrative languages to know.

Ruby

Pros

  • Extremely flexible syntax.
  • Easy to get started with.
  • High demand makes for well-paying jobs.

Cons

  • The flexibility can obscure much of the underlying processes.
  • Slow performance makes it a poor fit for high-end applications.

Commonly Used For

 

JavaScript

Pros

  • Only option for in-browser software.
  • Critical to every modern website.
  • Extremely high demand equals an abundance of well-paying jobs.

Cons

  • Complex syntax can sometimes be confusing.
  • More challenging than Ruby or Python for beginners.

Commonly Used For

 

Python

Pros

  • Elegant, minimalist typing syntax is beloved by practitioners.
  • Easy to get started with.

Cons

  • Slow performance means poor fit for high-end applications.
  • Poor scalability. Language design makes for problems in large applications.

Commonly Used For

  • Web back ends. See Django.
  • Scientific research and academics. See SciPy.

 

Compiled Languages

When code is compiled, it is converted from human-readable code into optimized machine code before it runs. The result runs much faster and more efficiently than interpreted languages. The compiler that does this must, as part of its job, make sure that everything that has been coded “makes sense,” and, as a result, it can identify and prevent many types of bugs that interpreted languages are susceptible to.

For this reason, it is harder to get away with mistakes or bad code with these languages. They will force you to gain a deeper understanding of what is really going on “under the hood,” and you will learn much more about how a computer really works. The price is that these languages are more labor-intensive, and typically more challenging to learn for beginners.

Compiled languages are used in applications that require performance and reliability, including embedded applications, which may run on hardware with tight resource limitations, and large, complex applications, where even a small bug can wreak havoc.

C
Pros

  • Can deliver better performance than any other “high level programming language.”
  • Will teach you the most about how a computer works.

Cons

  • Probably the hardest to master from this list.

Commonly Used For

  • Operating systems.
  • High-end video games.
  • Embedded systems.
  • Robotics and artificial intelligence.

 
Java
Pros

  • Most widely-used language, overall.
  • Strict typing forces a clear and efficient way of thinking.

Cons

  • Complex syntax can be cumbersome to read and work with.
  • Considered by many to be old-fashioned, monolithic, and approaching decline.

Commonly Used For

  • Large-scale enterprise applications.
  • Web development.
  • Android development.

 

HTML and CSS: Not Programming Languages

It should be noted that HTML and CSS, which are used in pretty much every webpage that has ever existed, are not programming languages. They are presentational languages, used to define how something should look and what it should contain, but not how it should behave. Nevertheless, they may be a good place to start, because they are much easier to pick up, and will teach you how to type things correctly. In addition, if you plan to do any web development, you will have to learn them at some point anyway.

2. Start Small

Learning takes time, and there is a lot to absorb. If you try to build a complete application on your first day, it won’t work out. To spare yourself the frustration, start by solving small, simple problems, and work your way up.

For example, the first program that is traditionally written when learning a new language is the “Hello World” program, which simply prints the words “Hello World” to the screen. In most languages, it is almost impossible to write a simpler program, and clearly this program does little of actual use. However, it still incorporates many of the fundamental parts of the language, and so it is perfect for introducing oneself to how the language is typed.

From here, you can write something that adds or subtracts some numbers, then something that takes input from the user. You can then learn about conditionals, which are a way to make decisions, and loops, which perform repetitive tasks. Soon enough, you will be ready to build your first object, and at that point you can start to experiment with building complete applications.

3. Be Patient

The core concepts of programming can be quite challenging. Many of them are not at all intuitive if you don’t know already know how the computer works at a deeper level.

For example, when I was starting out, I found debugging to be an infuriating process; it didn’t feel like programming. Instead of writing new code that did cool new things, I would spend an entire day scouring something I had written, trying to figure out, “How did I f*** it up this time?” scratching my head and ready to give up. Eventually, I would discover I had left a single semicolon out somewhere, or used a tab instead of a space, and by the time I got my code to work again, it would be the end of the day. I would feel like a total idiot; it would feel like such a waste of time.

Learning coding takes a lot of perseverance, especially on the days you feel like you aren't getting anywhere.

 

This sort of thing is going to happen to you, and it will drive you absolutely nuts. So, one of the keys to success is this: be patient, and go easy on yourself. Some of the best advice on the subject recommends focussing on the process, not on the goals. If you focus on your eventual goal (“I want to build a website by the end of June”) you will get discouraged, and feel like a failure. By letting yourself take as long as it takes to make progress, you will be more successful.

4. Practice Practice Practice

Like any skill, getting good at it really comes down to practice. There is nothing like doing something, to learn how to do it! Even if you can only spare a few hours a week, if you keep practicing regularly, you will, one day, find yourself knowing how to program. Eventually, you will develop an intuition for things, and something that took a whole day at first (like tracking down a bug), may now only take a few seconds.

When you feel like you have more or less gotten the hang of the basics of programming, a great way to get practice is to start your first project. Think of a simple application you’d like to build, such as a to-do list, or a calculator (again, start small), and give it a shot. This will teach you how to solve architectural and design problems, and build different pieces so that they will fit together into a working whole. These are the essential skills that will allow you to truly call yourself a programmer.

Resources

Depending on your goals, learning style, and means, you may want to use different resources along your journey. To help you determine what methods are right for you, here’s a quick summary of some of the tools you can use, ordered, roughly, from more structured learning to less structured learning.

These tools and resources will help you learn to code.

Structured Learning

This is the category of options that provide instructors, homework, tests, grades, deadlines, and real consequences if you don’t make your studies your highest priority. These are the options where you will have to go to class or flunk out of the program.

Formal University Degree

The most costly but, for many, the most valuable option, a formal university degree will give you the best foundation for a thriving career in programming and computer technology. You will receive recognition for your accomplishments in the form of your degree (a major leg up when entering the professional marketplace). But more importantly, you will emerge with a deep and thorough understanding of all things computer, and your abilities to write truly top-notch, effective software will reflect this.

Here are some of the things you can expect to learn in-depth from any decent university program, and that may be more difficult to find thorough instruction for elsewhere.

  • Electrical Circuits – The basic physics underlying virtually all computer hardware.
  • Digital Logic Circuits – How to represent truth and logical constructs with circuits.
  • Microprocessors and Computer Systems – How logical circuits are combined to make a programmable computing machine. What’s happening on all those little metal pins and printed wires.
  • Operating Systems – How to program a computer to manage, organize, and protect itself, and enable the safe operation of multiple applications.
  • Databases – How to store and copy large amounts of data without losing it, corrupting it, or making it impossible to search through.
  • Networks – How different and unrelated computer systems can talk to each other.
  • Higher Mathematics – Including Calculus and Linear Algebra. Essential for any career in advanced or cutting-edge fields.
  • Signal Processing – How to cross the boundary from the analog to digital worlds, and vice-versa.
  • Numerical Methods – For when real-world problems don’t fit neatly in a computer.

Computer science and engineering school will kick your ass, and you will have to sacrifice and dedicate yourself to completing it. But the rewards will be well worth it. I struggled to earn my own degree, but the day I received it remains one of the proudest days of my life.

Bootcamps

So-called “bootcamp” programs have emerged to fill the needs of those who do not have the time or resources to pursue a formal degree, but are willing to work hard, and at least learn the minimum necessary to start a software development career. In both cost and required commitment, they fall between a formal degree and the self-directed options discussed below.

Bootcamps typically involve 8 to 12 weeks of intense study and cost around US$10,000. They cover a lot of material in a short amount of time, during which you will have to sacrifice most other pursuits. But, they promise to prepare you for real-world software development, and put you on the fast track to a career in programming. Many bootcamps culminate in career days, or otherwise attempt to place you in a paying job soon after graduation.

Bootcamps are a relatively recent and explosive phenomenon. As such, it is still hard to measure their success rate, and many have yet to develop a proven track record of placing graduates in jobs. With that said, the available programs can only be expected to get better as this burgeoning new industry continues to grow. As long as you do your research carefully, you may find this is perfect option for you.

Most bootcamps are local programs, so you will have to see what is available in your town. If you live in a major metropolis, perhaps you can find what you’re looking for on this list, or this one.

Semi-Structured Learning

More and more resources are becoming available every day for those who work best with an element of structure and guidance, but do not have the time or resources to commit to a formal degree or bootcamp program. These options are typically offered entirely online, and many are completely free! As the high demand for such services has become apparent, these tools have grown rapidly in sophistication and value delivered. Courses in software development have naturally driven much of this evolution, as learning and teaching software through software has obvious benefits.

So you want to be a programmer, do ya? These tips and tools will help you get started.

Massive Open Online Courses (MOOCs)

MOOCs are an amazing resource and are making major strides in leveling the playing field for quality, affordable education. They offer much of the structure and guidance of the world’s best formal university classes, but are available online to anyone, anywhere, who has an internet connection. Many popular MOOCs are also entirely free, although for an additional price (and commitment to studying), formal credit can also be earned for many classes, equivalent to university credits.

There are many first-rate MOOC platforms available online with courses taught by professors from the world’s most prestigious universities, and community platforms so that you and your classmates around the world can help each other learn. Here are some of the best-known providers:

Be advised that, as advertised, these courses offer university-level coursework, so you better be prepared to work hard to get through them!

Guided Tutorial Websites

If you like structure and guidance, but don’t like deadlines, there are a lot of great online platforms that provide automated, step-by-step training through a wide range of delivery methods. Some are driven by video tutorials, some by text. Many include interactive code editors for you to practice on in your browser. These give you great flexibility to learn at your own pace, be it a half-hour of practice at the end of each day or a 10 hour marathon on the weekend.

While many of these platforms require a paid subscription in order to access all the content, most offer free trials so that you can get started right away, and decide for yourself whether it works for you.

This is just a short list, so search around and see what else is out there!

Unstructured Learning

For those who want to find their own way to learn to code, or improve their knowledge on their free time, without the pressure of structured lessons, the following tools provide a self-directed approach. Even if you are going to take one of the above approaches, you may find many of these resources helpful for supplementing your learning or providing a platform for practicing.

Drill Websites

If your goal is just to practice solving programming problems, the internet, once again, has you covered. The following sites offer ever-expanding sets of coding challenges, along with interactive coding interfaces, for solving problems, having your solutions graded on the fly, and comparing how they stack up to other users’ solutions.

 

Videos

Learning programming passively has limited practicality, but if you want to absorb some of the deeper concepts, learn to code between meetings or with a glass of wine in the evening, these lecture series are some of the best out there. If you like this sort of thing, check out what else is available on YouTube and around the web.

 

Books

Even with all the wonders of technology available, for many people there is still nothing like a good book to dive into and get a deep understanding of a topic. If you like learning this way, check out Toptal’s List of Top Free Programming Books.

 

In Closing

Learning to code is a very personal journey. Everyone starts with different resources and different goals and encounters different challenges and opportunities along the way. Don’t worry about what others are doing, or how they got there. Even for experienced programmers, the journey itself never ends, as there are constantly new things to learn.

Once you've become a programmer, a world of wonders awaits you.
 

So, my advice to you is, take it slow, and enjoy the journey! There is a lot to explore, and a world of wonders awaits you. A journey of a thousand miles begins with a single step. Here are some good shoes. Good luck!

This article was written by NICK MCCREA, a Toptal Ruby developer.

Share this:

Read More