# From zero to Julia!

**From zero to Julia** is a small series of introductory lessons to the Julia language. The aim of this course is to give you the basics to be able to start coding in Julia on your own.

During this series of lessons you will become acquainted with some of the types available in Julia and you will learn how to define new types that fit your needs. We will then discuss data structures such as arrays, tuples and dictionaries, as well as DataFrames and how to efficiently store your data using hdf5 files and JLD.

You will learn how to define new functions, how to work with modules and one of the most important features of Julia: **multiple dispatch**.

In the last part of the course, we will focus on how to write computationally efficient code and we will also deal with multi-threading and multi-processing.

This guide, as well as this website, is a work in progress and is written by a student, any feedback or correction is welcome! In order to make better and free content for everybody, please write your thoughts and suggestions in the discussion thread which is available under each post!

Although no prior programming background in Julia is necessary to follow this guide, basic familiarity with programming may be useful. For any clarification, donâ€™t hesitate to contact me!

If you are ready to start, I encourage you to read the first guide on how to install Julia and the Juno IDE and then move on to the first lesson!

## Atom and Juno: the perfect duo for Julia development

A tutorial on how to setup Atom and Juno: the perfect free IDE to start coding in Julia

## Introduction to the REPL

An introduction to the Julia REPL and Juno IDE usage

## Variables and Types

From zero to Julia Lesson 1. An introduction to variables and Types

## Functions

From zero to Julia Lesson 2. An introduction to functions

## Data structures

From zero to Julia Lesson 3. Data Structures

## Control Flow

From zero to Julia Lesson 4. Control Flow

## Working with arrays: broadcasting

From zero to Julia Lesson 5. Working with arrays: broadcasting

## Variable Scope

From zero to Julia Lesson 6. Variable scope

## Modules

From zero to Julia Lesson 7. Using modules and code reusability

## Types and Structures

From zero to Julia Lesson 8. Types and structures

## Working with Packages

From zero to Julia Lesson 9. Working with packages

## Introduction to Plotting

From zero to Julia Lesson 10. Introduction to plotting

## Numerical Integration

From zero to Julia Lesson 11. Introduction to numerical integration

## Units of measurement

From zero to Julia Lesson 12. Units of measurement

## Interacting with Python

From zero to Julia Lesson 13. Interacting with Python

## Data storage: HDF5

From zero to Julia Lesson 14. Data storage: HDF5

## Parallel computing

From zero to Julia Lesson 15. Parallel computing

## Multiprocessing in Julia: writing a module

A tutorial on how to write a module in Julia which uses multiprocessing

## Code optimisation in Julia

Tips and Tricks to optimise your Julia code and achieve the maximum possible speed

## GPU computations

From zero to Julia Lesson 18. GPU computations using ArrayFire

## Package Registration and Tests

From zero to Julia Lesson 19. Learn how to write tests for a package using Travis and how to publish a finished package to the Julia Registry

## Interoperability in Julia

From zero to Julia Lesson 20. Interoperating with other programming languages

# Acknowledgements

I want to thank Elena Pinetti for all the help she has given me in proofreading these lessons and all the effort she has put in identifying which parts were not clear enough or should be rewritten.

I also want the thank the wonderful Julia community on reddit for the feedback and all the kind persons who have pointed out typos and given suggestions on how to improve this series of lessons!