<div dir="ltr"><div>Hi Kyle,</div><div><br></div><div>I am adding users as I don't want to type this ever again. </div><div><br></div><div>This is the best starter document for Julia programming language bar none</div><div><br></div><div><a href="https://www.sas.upenn.edu/~jesusfv/Chapter_HPC_8_Julia.pdf">https://www.sas.upenn.edu/~jesusfv/Chapter_HPC_8_Julia.pdf</a><br></div><div><br></div><div>although some people find this useful</div><div><br></div><div><a href="https://syl1.gitbook.io/julia-language-a-concise-tutorial/">https://syl1.gitbook.io/julia-language-a-concise-tutorial/</a><br></div><div><br></div><div>Mandatory cheat sheet <br></div><div><br></div><div><a href="https://juliadocs.github.io/Julia-Cheat-Sheet/">https://juliadocs.github.io/Julia-Cheat-Sheet/</a><br></div><div><br></div><div>If you really start using Julia you actually have to go to the official documentation. No ifs or buts </div><div><br></div><div><a href="https://raw.githubusercontent.com/JuliaLang/docs.julialang.org/assets/julia-1.5.2.pdf">https://raw.githubusercontent.com/JuliaLang/docs.julialang.org/assets/julia-1.5.2.pdf</a><br></div><div><br></div><div>Start by reading Chapter 39 (page 399) Style Guide. To actually make true use of Julia's features and really appreciate the language you have to understand the types and scope of variables as well as methods and operator polymorphism. The true benefit of Julia for an organization is the fact that it is just in time compiled language. Arguably semi-literate scientist could write a prototype code which could be turned into the robust and fast (almost as fast as C) production code by a skillful software engineer. The software engineer will just need to convert the code into the strongly typed one and making sure functions use the correct methods. No reason to use C or God forbid C++ (Rust) ever for scientific computing. </div><div><br></div><div>The language has only recently matured being actually usable for scientific computing since the spring of the last year. There are problem domains where it is already superior to any other programming language. DifferentialEquations.jl, written by Chris Rackauckas comes to mind. That is the software worth of the Wilkinson Prize. <br></div><div><br></div><div>Speaking of ML DataFrames are definitely less mature than Python Pandas. Where Python still has a serious lead is the deep learning stack and integration with GPU computing. Julia Flux </div><div><br></div><div><a href="https://fluxml.ai/Flux.jl/stable/">https://fluxml.ai/Flux.jl/stable/</a><br></div><div><br></div><div>is behind TensorFlow, PyTorch, and alike but we will see for how long will remain that way. Yes matplotlib is probably more mature than any non Python available backends for Julia </div><div><br></div><div><a href="https://docs.juliaplots.org/latest/backends/">https://docs.juliaplots.org/latest/backends/</a></div><div><br></div><div>although Plotly(JS) is not too far behind. <br></div><div><br></div><div>Debugging and profiling are already on par with Python but not in the same league with MATLAB which is to be expected. For individual users, JuliaPro is free of charge </div><div><br></div><div><a href="https://juliacomputing.com/products/juliapro.html">https://juliacomputing.com/products/juliapro.html</a><br></div><div><br></div><div>JuliaPro has fastly improving professional debugger and profiler. </div><div><br></div><div>Don't bother me with installing Julia modules onto the Auton Lab servers until you are committed to witch to Julia. Julia has still some rough edges when it comes to deploying in the distributed HPC environments as they are working with major national laboratories to develop correct deployment strategies. </div><div><br></div><div>My final recommendations:</div><div><br></div><div>1. If you are less than 10 years from the retirement age don't bother. </div><div>2. If you are a numerical analysis guy learn MATLAB first but add Julia as needed for more complicated data structures than 2-dim double float arrays.</div><div>3. If you are an engineer doing control theory stick with MATLAB and Symlink in particular.</div><div>4. If you are interested in scientific computing learn Julia at once unless 1 applies to you.</div><div>5. If you are ML/Big data guy start moving away from Python and R or at least keep an eye on Julia. In particular, I am not a big fan of Python programming language. It is just too big and feels like a cludge. My favorite, object-oriented done wrong look no further than Python. For system administration and scripting people who use Python should be sent to Siberia (use UNIX toolbox + Perl when associative arrays are needed). That being said my daughters are taking an online CMU course on Python through their school based on the nice in-house graphics library. I LOVE it. It is likely that by the time they come to college PYthon will be still the programming language taught to freshmen so better start now through that 2000 pages manual since you didn't like your dad trying to teach you 60 pages worth of Forth and stacks.</div><div><br></div><div><br></div><div>Mandatory credits!</div><div><br></div><div>I would like to thank Professor Bard Ermentrout of the University of Pittsburgh for bringing Julia to my attention many years ago and more importantly for his vision for the future of scientific computing.</div><div><br></div><div>I would like to thank my former colleague Simon Heath for drugging me to Jeff Bezanos lectures at the CMU school of computer science and explaining to me what scoping and methods in computer language design are. </div><div><br></div><div>Cheers,<br>Predrag<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Oct 14, 2020 at 10:27 AM Kyle Miller <<a href="mailto:mille856@andrew.cmu.edu">mille856@andrew.cmu.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Predrag,</div><div> Do you have recommendations for how to go about learning Julia well?</div><div>Thanks,</div><div> Kyle<br></div></div>
</blockquote></div>