I work on numerical/scientific code, so my experience may be different than 
more traditional programming uses. 

Atom is great. I tried the original JunoLT, and it put me off from Julia 
for awhile, but I feel at home in Atom. Nice tip: there's a package for 
hidpi if you have a 4K screen. It will automatically resize your text to 
match the difference. I have a 4K widescreen monitor turned vertical and 
can swap my code over there to show code paradise, but then if I swap it to 
another screen (to have a big pdf open) it changes instantly. 

Honestly, the debugging could be better. The errors are really good so you 
usually know what line it is and what kind of problem it is, but I would 
like a debugger (and haven't tried to build Gallium yet). But println 
debugging works well.

Plots.jl is great. I was using a mixture of PyPlot and Gadfly, but am 
moving my package over to Plots.jl because it lets you use like every 
package. That's actually the key to Julia. Julia with its named functions 
and multiple dispatch has the ability to wrap things really well. Thus 
there are very powerful packages which wrap things. Plots wraps a bunch of 
backends so you can use the same plot command with a bunch of different 
backends. JuMP lets you define a nonlinear problem and try out a bunch of 
different solvers. Etc. Things that would normally be multiple different 
scripts just to test things out, is now the difference of 1 line. 

Must have packages? DifferentialEquations.jl. I kid... but not really. I 
made something like this in MATLAB a few years ago, but it was really slow 
due to what MATLAB does with anonymous functions, and many other reasons. I 
built this in Julia quite quickly and it works well. The flexibility of 
Julia gives the same situation like I described in the last paragraph where 
it's really simple to define new problems/algorithms and so developing new 
numerical methods is much easier.

But the true good packages are the amazing performance-based macros. 
ParallelAccelerator.jl is killer: you just add @acc in front of a loop and 
get a really fast basically fully-optimized C++ program. Devectorize.jl can 
devectorize vector-functions to make readable but fast code. JuMP and all 
of the optimization packages it can use is amazing if you do that kind of 
work as well. CudaRT.jl is really easy to use and gives a quick interface 
to CUDA code. 

Two pieces of advice. The first is to get on Gitter. People are really 
helpful on Gitter, don't be afraid to ask. It's been really helpful for me. 
The second, is the machinefile. I don't know if you use HPCs, but if you 
use an HPC using multiple nodes for a computation in Julia is as simple as 
this: add the MPI stuff to your job script, and pass the machinefile to 
Julia. That's it. Now your @paralllel loop runs on 192 cores. I wrote how 
to do this in more detail on my blog. 
<http://www.stochasticlifestyle.com/multi-node-parallelism-in-julia-on-an-hpc/> 
Coming 
from doing C+MPI coding to do this stuff, I will never go back. Now code 
that takes MATLAB amount of time to develop can do almost what the C+MPI 
code could do (which takes sooo much longer to make).

On Thursday, May 12, 2016 at 10:01:04 AM UTC-7, David Parks wrote:
>
> I'm a few weeks into Julia and excited and motivated to learn and be as 
> efficient as possible. I'm sure I'm not alone. I know my way around now, 
> but am I as efficient as I can be? 
>
> What haven't I tried? What haven't I seen? What haven't I asked?
>
> For those of you who have been around longer, could you share your advice 
> on efficient day-to-day development style?
>
> For example:
>
>    - What IDE do you use? Are you using Atom? A combination of Atom and 
>    the REPL? Something else?
>    - How do you debug complex code efficiently? How do you debug other 
>    peoples code efficiently?
>    - Do you have a favorite way of visualizing your work?
>    - Are there must have tools? packages? utilities?
>    - Any simple day-to-day efficiency/advice you could share with others 
>    who didn't yet know to ask.
>
>
>

Reply via email to