# The Julia programming language  

On this page is provided a _curated_ (and git-clonable) list of links to useful Julia resources. Julia is a programming language/runtime which looks to be combining the best aspects of many other languages such as:  

i) __Python__ - e.g. first-class functions and lambda expressions, closures, Jupyter notebooks, open-source, 'pythonic' etc.  
ii) __Matlab/Octave__ - e.g. compact vector/matrix notation for Linear Algebra  
iii) __Lisp__ - e.g. REPL, code introspection, metaprogramming macros etc., and  
iv) __C/Fortran__ - fast, even for tight nested loops  

whilst Julia claims to combine these nice features _all into one package_:  
https://julialang.org/blog/2012/02/why-we-created-julia/  

Like Matlab/Octave, Julia looks to be particularly promising for numerical computing applications, such as Linear Algebra. Some may be put off by the 1-based indexing - again like Matlab/Octave, but unlike Python which uses 0-based. However, Julia's designers insist that this is a deliberate and logical choice. Another Julia language feature that the designers make a big play of is the use of 'multiple dispatch' for functions, whereby a particular method for the function is chosen based upon the types of the input parameters. All in all, it seems that there's potentially a lot to like here, so Julia is definitely worth a look...  

## General information and Learning Julia  
Main Julia website: https://julialang.org/  
Learning Julia: https://julialang.org/learning/  
Mastering the Julia REPL: https://blog.glcs.io/julia-repl/  
Julia documentation: https://docs.julialang.org/en/v1/  
More Julia documentation:  http://web.mit.edu/julia_v0.6.2/julia/share/doc/julia/html/en/index.html  
Julia cheat sheet: https://juliadocs.github.io/Julia-Cheat-Sheet/  
Another Julia cheet sheet: https://cheatsheets.quantecon.org/julia-cheatsheet.html  
Matlab-Julia-Python comparison cheat sheet: https://cheatsheets.quantecon.org/  
Textbook 'Think Julia: How to Think Like a Computer Scientist':  https://benlauwens.github.io/ThinkJulia.jl/latest/book.html  
Wikibook 'Introducing Julia':  https://en.wikibooks.org/wiki/Introducing_Julia  
Julia discussion forum:  https://discourse.julialang.org/  

## Useful videos  
How to install Julia and Pluto (~6 mins): https://www.youtube.com/watch?v=OOjKEgbt8AI  
Youtube Julia language videos: https://www.youtube.com/c/TheJuliaLanguage/videos  
Nick Eubank presentation - 'What Julia offers Academic Researchers' (~46 mins): https://www.youtube.com/watch?v=C4dMYHzW-SY  
Pluto interactive Julia notebooks: https://www.youtube.com/watch?v=IAF8DjrQSSk  
Using VSCode for Julia development: https://www.youtube.com/watch?v=IdhnP00Y1Ks  
MIT Fall2020 lecture course on 'Introduction to Computational Thinking' (using Julia): https://computationalthinking.mit.edu/Fall20/  
Julia co-founder MIT Prof. Alan Edelman TEDx talk on rationale for the language's design (~10 mins): https://www.youtube.com/watch?v=qGW0GT1rCvs&feature=emb_logo  
Prof. Alan Edelman shows how to dissect floating-point numbers using Julia:  
https://www.youtube.com/watch?v=fL8vYG69EhE&feature=emb_logo  

## Linear Algebra in Julia 
Linear Algebra in Julia: https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/  
Applied Linear Algebra textbook companion:  http://vmls-book.stanford.edu/vmls-julia-companion.pdf