# \[Seeking feedback\] Blog post about "Modern Julia workflows"?

**URL:** <https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324>\
**Category:** Tooling\
**Tags:** tutorials, blog-post\
**Created:** [June 14, 2023, 10:32am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324 "2023-06-14T10:32:09Z")\
**Posts on this page:** 19\
**Page:** 2

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/224680_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [August 1, 2023, 7:33pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/21 "2023-08-01T19:33:19Z")

</div>

I like that one. @jacobusmmsmit @hill ?

---

<div class="post-metadata">

**Author:** ![Eben60](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/eben60/32/13475_2.png) [@Eben60](https://discourse.julialang.org/u/Eben60)\
**Post date:** [August 1, 2023, 7:59pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/22 "2023-08-01T19:59:47Z")

</div>

Efficient Julia workflows?  
Less frustrating Julia workflows?

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [August 1, 2023, 8:03pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/23 "2023-08-01T20:03:34Z")

</div>

I wish they were “Simple” Julia workflows…

---

<div class="post-metadata">

**Author:** ![e3c6](https://avatars.discourse-cdn.com/v4/letter/e/e79b87/32.png) [@e3c6](https://discourse.julialang.org/u/e3c6)\
**Post date:** [August 1, 2023, 9:02pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/24 "2023-08-01T21:02:53Z")

</div>

Good Julia workflows

---

<div class="post-metadata">

**Author:** ![PeterSimon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petersimon/32/25193_2.png) [@PeterSimon](https://discourse.julialang.org/u/PeterSimon)\
**Post date:** [August 1, 2023, 9:24pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/25 "2023-08-01T21:24:56Z")

</div>

Smart Julia Workflows  
Effective Julia Workflows

---

<div class="post-metadata">

**Author:** ![e3c6](https://avatars.discourse-cdn.com/v4/letter/e/e79b87/32.png) [@e3c6](https://discourse.julialang.org/u/e3c6)\
**Post date:** [August 1, 2023, 10:04pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/26 "2023-08-01T22:04:44Z")

</div>

> [@PeterSimon](#):
>
> Effective Julia Workflows

+1 Reminds me of the fantastic Scott Meyer’s Effective C++ books.

---

<div class="post-metadata">

**Author:** ![Ininterrompue](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ininterrompue/32/5594_2.png) [@Ininterrompue](https://discourse.julialang.org/u/Ininterrompue)\
**Post date:** [August 2, 2023, 1:32am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/27 "2023-08-02T01:32:54Z")

</div>

So I read the other post you had in the “write doc PRs not blog posts” post on why this is being done as a blog post. I understand the justification on your side, but I think an official blog post will still have limited discoverability, so the issue you mention here may not be fully mitigated until such information is contained in the docs, either under “Workflow Tips” or, ideally, as the beginning of a new document separate from the manual, accessible from the Julia website with one click. Perhaps a button next to “Documentation” – that would be a button that beginners will very likely click.

If I’m a beginner, the list as it is right now is pretty overwhelming, since it’s not clear which ones provide large improvements vs. those that are incremental. IMO I wouldn’t consider anything in the “Optimizing code” section suitable for beginners. I’ll suggest the following tutorial which could be included as a separate feature. This will get people on the right track for the workflow instead of typing `julia file.jl` like they’re used to in Python. Everything else, like OhMyREPL and BenchmarkTools, are intermediate to advanced, done after the very basics have been figured out (OhMyREPL is best paired with `startup.jl`, and we should cater to new users who are not interested in performance optimizations).

> **Step-by-step tutorial (Windows users)**
>
> 1. Install `juliaup` in the Windows store. (Link directly to it, not the Github page)
> 2. Open PowerShell and type `juliaup add 1.9` to install the latest 1.9 version.
> - Type `juliaup status` to confirm which version you have installed. When new releases like 1.10 come out, simply type `juliaup update` to update to the latest version.
> - In the start menu, click on Julia to open the REPL. You can pin this to the taskbar and use it as a calculator.
> 
> 3. If you want to use an editor, install VSCode with the Julia language plugin. Otherwise, you can use Jupyter or Pluto for notebooks. (Link to a comparison between Jupyter and Pluto) Below, we assume you’re using VSCode.
> 4. If you are using juliaup, VSCode will automatically find the Julia installation for you – skip to step 5. Otherwise, if you installed the binaries directly from the website, do the following:
> - In VSCode, enter `Ctrl+,` to open up the settings.
> - In the top bar, type `julia.executable`. You’ll need to paste the filepath to the executable from there. If you used default installation settings, it should look something like this: `C:/users/username/AppData/Local/Programs/Julia-1.9.2/bin/julia.exe`
> 
> 5. Type `Alt+J+O` to open the REPL in VSCode. (J+O stands for “Julia open.”) Besides being able to run Julia code, the REPL has a built-in package manager (type `]`), a help mode (type `?`), and a shell mode (type `;`).
> 6. Probably the most important package is Revise.jl. Install it by typing `]` to enter Pkg mode, and then type `add Revise`. This package will automatically update function definitions in a running Julia session. Since Julia has a relatively long startup time, for maximum convenience, we recommend keeping the current REPL session open for as long as possible.
> - Unlike most packages, VSCode is set up to run Revise.jl upon starting up Julia. That way, you don’t need to type in `using Revise` every time you open the REPL.
> 
> 7. To run code, you have a few choices. To illustrate, create a new file called `test.jl` with the example code to print out powers of 2:
> 
> ```julia
> a = 1:10 # defines a vector of the first 10 natural numbers
> b = 2 .^ a # defines a vector that takes the first 10 powers of 2. The dot indicates element-wise operation.
> 
> [a b] # defines a matrix whose columns are a and b
> 
> ```
> 
> There are three choices you have to run this code:
> 
> - With the cursor on the window with the code, hit `Ctrl+A+Enter` to select all and execute the highlighted code to the REPL.
> - Press the play button near the top of the screen to execute the active file in the REPL.
> - Type `include(“./test.jl”)` into the REPL.
> 
> Notice that in all of these, the last line is returned.
> 
> 1. Where does Revise come in? By default, the `includet` function that Revise exports will track changes to function definitions, not data. Since we didn’t define any functions, typing `includet(“./test.jl”)` won’t reflect changes if, say, we wanted `a` to go from 1 to 20. It is good practice to write our code in functions, especially for more complex code, so let’s define a function called `main`:
> 
> ```julia
> function main()
> a = 1:10
> b = 2 .^ a
> return [a b]
> end
> 
> main()
> 
> ```
> 
> 1. You can check that `Ctrl+A+Enter` works as usual. (If the `main()` at the end were not there, you would only be defining a function called `main`, but not actually running it. To run it, type `main()` in the REPL.)

Lastly, my suggestion for the blog post title would be “Improving Julia workflows.”

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/224680_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [August 2, 2023, 5:45am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/28 "2023-08-02T05:45:15Z")

</div>

> [@Ininterrompue](#):
>
> I understand the justification on your side, but I think an official blog post will still have limited discoverability, so the issue you mention here may not be fully mitigated until such information is contained in the docs, either under “Workflow Tips” or, ideally, as the beginning of a new document separate from the manual, accessible from the Julia website with one click.

I agree, but while writing the blog I also discovered an additional benefit of doing it: putting all of these tips in a single place. I know of no other website containing that many resources in the same spot. And once we put them all in the documentation, they will probably much more scattered, but it helps to gather them first.

Besides, it also prompted new developments, like improvements to Franklin.jl and PkgTemplates.jl, or the brand new StartupCustomizer.jl.

> [@Ininterrompue](#):
>
> If I’m a beginner, the list as it is right now is pretty overwhelming, since it’s not clear which ones provide large improvements vs. those that are incremental.

That’s why we ended up splitting the post in three pages. If you check out the preview at [https://modernjuliaworkflows.github.io/](https://modernjuliaworkflows.github.io/), I try to make it clear that not everything should be read at once by a beginner.

> [@Ininterrompue](#):
>
> I’ll suggest the following tutorial which could be included as a separate feature. This will get people on the right track for the workflow instead of typing `julia file.jl` like they’re used to in Python

I agree that this is what we want as a priority, and it roughly corresponds to the first page of the blog (still being written 😅). Thank you for your suggestions, I’ll add those if we missed some of them.

---

<div class="post-metadata">

**Author:** ![jlapeyre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jlapeyre/32/4514_2.png) [@jlapeyre](https://discourse.julialang.org/u/jlapeyre)\
**Post date:** [August 2, 2023, 5:00pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/29 "2023-08-02T17:00:24Z")

</div>

EDIT: Clearly, the question of whether to include “modern” is bikeshedding and isn’t worth more than perhaps one or two minutes’ thought.

I agree that “Julia workflows” is boring, or lacks something.

Take 1. On the other hand “Modern Julia xxx” always reminds of the Modern Perl stuff from several years ago that was meant in part to promote the idea that Perl is as real or as good a language as Python, which wasn’t really true. In any case it didn’t work. This isn’t a rational take, it’s more an involuntary association.

Take 2. “Modern Python …” is all over the place, too. And you see old, non-optimal, Python practices persisting. If I were an intermediate Python programmer (maybe I am :)) I might hope to find an article with a title like this that was to the point and useful (good luck with that); in principle you might find one that was useful, in particular because of all of the out of date info on the web.  
Likewise, Julia has changed, and many people (myself included) would like to know of some state of the art workflows.

Take 3. “Modern Python…” or (“Modern YYY”) is a marketing tactic to make your article stand out. Something that’s necessary because of the volume of Python stuff. In fact, if you search, you’ll find it’s not good enough. You need to read the series on “Hypermodern Python”. I don’t find a “supermodern” version. The author could be a francophone. Several years ago at least, in french it was common to [jump right over](https://www.theonion.com/fuck-everything-were-doing-five-blades-1819584036) “super” directly to “hyper”.

---

<div class="post-metadata">

**Author:** ![xgdgsc](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xgdgsc/32/608_2.png) [@xgdgsc](https://discourse.julialang.org/u/xgdgsc)\
**Post date:** [September 3, 2023, 2:50am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/30 "2023-09-03T02:50:58Z")

</div>

I would like to replace jupyter notebook with jupyterlab (version 4+) . Should we also discourage using vscode-jupyter? I’ ve seen a few issues related to using vscode-jupyter.

---

<div class="post-metadata">

**Author:** ![ShalokShalom](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/shalokshalom/32/52462_2.png) [@ShalokShalom](https://discourse.julialang.org/u/ShalokShalom)\
**Post date:** [September 3, 2023, 6:54am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/31 "2023-09-03T06:54:14Z")

</div>

Oh, I experience it quite often, that languages ship compilers, editor extensions, and all of that.  
And only separate, and not as part of a reproducible dev container and similar.

My Julia plugin for VSCode - same as that for F#, as an example – does fail at some parts (it shows no syntax errors at all) and I ask myself why we don’t ship complete packages, that are reproducible.

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/224680_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [September 3, 2023, 10:37am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/32 "2023-09-03T10:37:23Z")

</div>

Sounds like a good idea. Wanna open an issue?

---

<div class="post-metadata">

**Author:** ![ShalokShalom](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/shalokshalom/32/52462_2.png) [@ShalokShalom](https://discourse.julialang.org/u/ShalokShalom)\
**Post date:** [September 3, 2023, 12:43pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/33 "2023-09-03T12:43:05Z")

</div>

To be honest, I find Jupyter via VSCode to be by far the best way to start with Julia.

Everything else has performance issues, that kills the fun out of experimentation.

Due to the fact, that Jupyter kernels are evaluated piece by piece, and because I always clearly see, which functions/variables are still loaded, there is much less room for confusion and performance bottlenecks.

I would much rather fix the issues, then just dropping the platform.

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [September 3, 2023, 12:55pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/34 "2023-09-03T12:55:13Z")

</div>

> [@Eben60](#):
>
> , because PkgTemplates.jl is overwhelming for a novice

FWIW, after struggling a bit with it, in fact this is all you need:

> **[Create new package · JuliaNotes.jl](https://m3g.github.io/JuliaNotes.jl/stable/new_package/)**
>
> Documentation for JuliaNotes.jl.

I even showcase this to new users, easy as it is, given these simple steps.

---

<div class="post-metadata">

**Author:** ![xgdgsc](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xgdgsc/32/608_2.png) [@xgdgsc](https://discourse.julialang.org/u/xgdgsc)\
**Post date:** [September 4, 2023, 5:34am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/35 "2023-09-04T05:34:00Z")

</div>

[What steps should the Julia community take to bring Julia to the next level of popularity? - #577 by JackaChou](https://discourse.julialang.org/t/what-steps-should-the-julia-community-take-to-bring-julia-to-the-next-level-of-popularity/101389/577) another example of bad vscode-jupyter . You should try jupyterlab 4 instead.

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [September 4, 2023, 6:04am UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/36 "2023-09-04T06:04:50Z")

</div>

When it comes to «modern workflows», Dev Containers should be mentioned. E.g.

> **[GitHub - b-data/data-science-devcontainers: (GPU accelerated) Multi-arch...](https://github.com/b-data/data-science-devcontainers)**
>
> (GPU accelerated) Multi-arch (linux/amd64, linux/arm64/v8) Data Science Dev Containers for R, Python and Julia - GitHub - b-data/data-science-devcontainers: (GPU accelerated) Multi-arch (linux/amd...

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/224680_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [February 23, 2024, 3:00pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/37 "2024-02-23T15:00:47Z")

</div>

Update: the second page of the blog (on package creation and sharing) is complete!

> [@Modern Julia Workflows ep. 2 - creating packages](https://discourse.julialang.org/t/modern-julia-workflows-ep-2-creating-packages/110649):
>
> A while back, some friends (@jacobusmmsmit @hill) and I started a blog called [Modern Julia Workflows](https://modernjuliaworkflows.github.io/), to reveal the hidden secrets of Julia development. I am pleased to announce that this blog is making progress, and that the second tutorial is now complete! It will take you from a dirty script to a fully functional and reproducible Julia package, featuring all the niceties we love: GitHub actions, tests, documentation, good style, quality checks, compatibility bounds and much more. I honestly …

---

<div class="post-metadata">

**Author:** ![K5Julien](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/k5julien/32/210626_2.png) [@K5Julien](https://discourse.julialang.org/u/K5Julien)\
**Post date:** [July 14, 2024, 12:10pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/38 "2024-07-14T12:10:19Z")

</div>

This is excellent! Thanks for the package 🙂 I feel this should be somewhere on the [official website](https://julialang.org/learning/) if not already?

---

<div class="post-metadata">

**Author:** ![PeterSimon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petersimon/32/25193_2.png) [@PeterSimon](https://discourse.julialang.org/u/PeterSimon)\
**Post date:** [July 14, 2024, 4:10pm UTC](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324/39 "2024-07-14T16:10:30Z")

</div>

It is already there:

 ![Screenshot_20240714-090824](https://global.discourse-cdn.com/julialang/original/3X/5/e/5e329559baf508846ae0b74b4f8dab9e0a89c905.png)

[Previous page](https://discourse.julialang.org/t/seeking-feedback-blog-post-about-modern-julia-workflows/100324.md?page=1)
