How Much Coding Should Designers Know?

Written by Irina Papuc Topics: Learn to Code

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.


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

An Interview with a Successful Developer: Lifestyle, Taxes, and Node.JS

Written by Irina Papuc Topics: Business, Learn to Code, Self Improvement

At Toptal, we’re always looking for the best freelancers around. But what makes a freelancer truly great? Luis Martinho, one of our top developers, is beloved by his clients — so we sat down with him to talk about freelancing, technologies like freelance Node.js and HTML5, and paying your taxes.

So, to start, how did you get into freelancing? Have you ever worked a full-time job?

“I had worked a couple of full-time jobs: some of them were relatively corporate, but the most recent was in a startup environment, specifically in the enterprise SaaS space, building sexy management software in the cloud. We had a very talented team and a very ambitious vision. After four years of growth, we had an exciting product in an exciting space, which was great, but I wasn’t very happy. I needed a lifestyle change. When we started, I personally did not understand how hard it was to “start up”. It’s not just the hours, because you work long hours in all sorts of environments and projects; it’s the stress, the responsibility, and the pains associated with creating something new. It’s not all flowers and rainbows. In the end, I decided that I wasn’t co-founder material (at least, not at the time). But the experience gave me a much deeper understanding of the kind of pressure faced by startup founders, and I know that I’ve become a better freelance software developer because of that.

Freelancing looked more and more like the life I wanted: it presented an opportunity to find interesting clients and projects while being rewarded for quality work.

I started looking for regular jobs: first in my hometown, then in the rest of the country, then in the rest of Europe. I managed to find some interesting projects, some interesting compensation packages, and some interesting locations; but I believed that I could have it all. So I began to look into freelancing. And as I kept looking, freelancing looked more and more like the life I wanted: it presented an opportunity to find interesting clients and projects while being rewarded for quality work.”


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

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


JavaScript (ES6 and Beyond) Cheat Sheet


> const EULER = 2.7182818284
> EULER = 13
> 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 = []
> [ 2.7182818284 ]
> CONSTANTS = { ‘euler’: 2.7182818284 }
> [ 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'
… }
> '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

Default Params

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


new Promise((resolve, reject) => {
  request.get(url, (error, response,  
  body) => {
    if (body) {
      } else {
}).then(() => { ... })
.catch((err) => throw err)
// Parallelize tasks
   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() { ... }

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’,
 // arg[0], arg[1], arg[2]

…Go Destructuring Like a Boss

> const [ cat, dog, ] = [
‘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,} = {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) {
// -> ‘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 }


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
> // { value: <between 1 and 2>, done: false }
> // as above, but between 1 and 5
> // NaN since 5 + undefined results in NaN
> // 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

Learn to Code: Wisdom and Tools for the Journey

Written by Irina Papuc Topics: Learn to Code

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.



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


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

Commonly Used For




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


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

Commonly Used For




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


  • 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.


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


  • Probably the hardest to master from this list.

Commonly Used For

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


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


  • 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.


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.


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.



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.



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

Learn to Code: The 20% of Coding Knowledge You Need to Create the Best 80% of Websites & Apps

Written by Jason Nesbitt Topics: Business, Learn to Code, Self Improvement

Hello World!

Welcome to the first piece in what I hope to be a long and prosperous blog series titled ‘Learn to Code’.

I am always amazed by how complicated people make website & app development sound. They often refer to it as a task left for the enlightened Computer Scientists when in fact, it’s something that anybody from any background can do with the tiniest bit of knowledge. I will be using Pareto’s 80/20 rule in all of its glory by teaching you the 20% of coding knowledge that allows you to create the best 80% of a website & app.

What To Expect

The series will include explanations, activities to follow and videos to quickly and efficiently provide you with the only skills you need to create websites that look as good as the professionals.

So, sit back, follow the activities and learn the skill that can provide you with the best possibility to create the life you want. I’m sure I don’t need to tell you how many bloggers and website designers have quit their job, retired away to tropical paradise and lived a fulfilled life that one can only dream of whilst sat in an office.

The kind of things you should look forward to learning are:

  • How to Create Your First Bootstrap Website in 1 Minute
  • How to Copy From the Best By Adding Bootstrap/Bootsnipp Examples to Your Website
  • How to Quickly Add a Google Map to Your Website
  • How to Obtain FREE Great Quality Images for Your Website
  • And Much, Much More!

Looking forward to hearing all your feedback and providing you exactly what you want and need.

Speak soon!

Share this:

Read More