# OpinionatedJulia Package?

**URL:** <https://discourse.julialang.org/t/opinionatedjulia-package/103522>\
**Category:** Community\
**Created:** [September 4, 2023, 11:30pm UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522 "2023-09-04T23:30:19Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![mrufsvold](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mrufsvold/32/31600_2.png) [@mrufsvold](https://discourse.julialang.org/u/mrufsvold)\
**Post date:** [September 4, 2023, 11:30pm UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/1 "2023-09-04T23:30:19Z")

</div>

I’ve read **a lot** of opinions about what should be default for Julia to make it more accessible. Some conflicting but a lot of it is in alignment. Some of it is breaking to be in Base. Some of it is a matter of network/community issues (re: too many Chaining packages).

Has anyone attempted to make an OpinionatedJulia.jl that installs things in the global env (Revise, Infiltrator…), adds nice things to `startup.jl`, has its own version of `Pkg.generate()`/`PkgTemplates` for fleshing out how the sensible basics of new project (maybe even installing certain packages based on the user’s domain),etc. And then has very opinionated docs about what packages you should use and some no nonsense docs for the recommended packages?

If not, what would you have in a project like this? I’m especially interested in the experiences of teachers and students here as you have a closer view of the Novice’s Eye.

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [September 5, 2023, 3:58am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/2 "2023-09-05T03:58:04Z")

</div>

What you are talking about sounds a lot like a distribution rather a package. In the same way that there are GNU/Linux distributions and the Linux kernel.

---

<div class="post-metadata">

**Author:** ![GHTaarn](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ghtaarn/32/216007_2.png) [@GHTaarn](https://discourse.julialang.org/u/GHTaarn)\
**Post date:** [September 5, 2023, 6:33am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/3 "2023-09-05T06:33:29Z")

</div>

I’m not a teacher or student, but I remember that the first package that I ever installed was `Plots`, so some plotting package would be an obvious thing to have. `DataFrames` could be another, I avoided it for a long time because it was not in the standard library, but realistically, I should probably use it a lot more as it is one of those really popular packages. I also agree with `Revise`.

Other than this, anything that is in the standard libraries of other important languages (e.g. C, C++, Java, R, Python, Matlab) could be considered. This would include things like `Nettle`, `TimeZones`, database & HTML stuff among others. It could probably also be good to have some machine learning stuff.

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [September 5, 2023, 7:09am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/4 "2023-09-05T07:09:55Z")

</div>

> [@mrufsvold](#):
>
> Has anyone attempted to make an OpinionatedJulia.jl that installs things in the global env (Revise, Infiltrator…), adds nice things to `startup.jl`, has its own version of `Pkg.generate()`/`PkgTemplates` for fleshing out how the sensible basics of new project (maybe even installing certain packages based on the user’s domain),etc.

Not exactly a package but it sounds like what we’re trying to achieve with [https://modernjuliaworkflows.github.io/](https://modernjuliaworkflows.github.io/)

Progress is slow but we’re getting there

---

<div class="post-metadata">

**Author:** ![mrufsvold](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mrufsvold/32/31600_2.png) [@mrufsvold](https://discourse.julialang.org/u/mrufsvold)\
**Post date:** [September 5, 2023, 8:36am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/5 "2023-09-05T08:36:40Z")

</div>

Yeah, I’ve been following your progress and have improved my own workflow already! I do think though that the “s” in “workflow **s** ” is part of what made me think about this. For a certain segment of users, a menu of options to read through is overwhelming/not worth the time. I’m reacting to the “just give me the best and don’t bother me with the details” kinda feeling. I’m also thinking about people who need to focus their mental energy on learning how to program on the first place. A student is probably not going to be reading “Modern Workflows” but could still benefit from some sensible defaults.

---

<div class="post-metadata">

**Author:** ![mrufsvold](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mrufsvold/32/31600_2.png) [@mrufsvold](https://discourse.julialang.org/u/mrufsvold)\
**Post date:** [September 5, 2023, 8:40am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/6 "2023-09-05T08:40:57Z")

</div>

> [@mkitti](#):
>
> sounds a lot like a distribution rather a package

I also considered this, and maybe that’s how it could be sold, but as far as implementation is concerned, the work of keeping a distribution in sync with main Julia, maintaining builds, etc. seems like more trouble than it’s worth when a package is fully capable of doing the work I’m describing (installing packages, manipulating `startup.jl`, adding some convenience functions).

But maybe I’m missing a benefit?

---

<div class="post-metadata">

**Author:** ![LaurentPlagne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/laurentplagne/32/10103_2.png) [@LaurentPlagne](https://discourse.julialang.org/u/LaurentPlagne)\
**Post date:** [September 5, 2023, 9:06am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/7 "2023-09-05T09:06:33Z")

</div>

I totally agree on your idea of an opinionated default workflow for beginners.

The choice between different workflows, plotting packages, IDEs, editors is important for advanced users but a real pain for beginners (e.g. should I complete a long comparison study before choosing between different plot options).

I would go one step further by proposing a default workflow including the IDE choice (vscode (Revise)), the plotting choice (Makie)… A vscode **button** to create a new project (based on PkgTemplates) and so on…

A beginner experience closer to what Matlab or R studio users would expect.

I do not think that Emacs power-user (those with 30 fingers) would be annoyed by this basic entry point in Julia’s development world . Would they even notice ? 🙂

---

<div class="post-metadata">

**Author:** ![mrufsvold](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mrufsvold/32/31600_2.png) [@mrufsvold](https://discourse.julialang.org/u/mrufsvold)\
**Post date:** [September 5, 2023, 9:11am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/8 "2023-09-05T09:11:15Z")

</div>

Yeees, I feel ill-equipped to contribute to the extension GUI., But I echo all your thoughts there. I feel confident in my ability to write command line UI, so that’s where I’d start. But I’d absolutely be open to integrating the extension if someone would like to collaborate.

---

<div class="post-metadata">

**Author:** ![LaurentPlagne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/laurentplagne/32/10103_2.png) [@LaurentPlagne](https://discourse.julialang.org/u/LaurentPlagne)\
**Post date:** [September 5, 2023, 9:43am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/9 "2023-09-05T09:43:24Z")

</div>

I realize it is probably counter-productive to propose additional action that I can’t contribute to your actionable proposal. Apologies.

Nevertheless, I still wonder if such an addition to the Julia’s vscode extension (package creation button and installation of default choice for major packages) would really be a game changer feature for Julia’s adoption by beginners or not.

Imagine that the Julia’s vscode extension includes juliaup and could install Julia on the machine and the opinionated list of basic packages.

What makes make me think so is the example of Revise.jl being install by default in vscode. It is a super cool feature (to me) while being much less controversial (as far as I can tell) compared to add Revise.jl to Base.

If there is a strong consensus on the interest on such a feature, then it may motivate the super charged developers (@davidanthoff; @pfitzseb,…) to go for it. (Look at what the Genie team achieved in there closed source extensions).

Reading @Keno’s new thread there could also be a “create app button” (creating the proper form of main function) in the future.

---

<div class="post-metadata">

**Author:** ![mrufsvold](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mrufsvold/32/31600_2.png) [@mrufsvold](https://discourse.julialang.org/u/mrufsvold)\
**Post date:** [September 5, 2023, 10:49am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/10 "2023-09-05T10:49:32Z")

</div>

I think that idea is at least partially orthogonal to what I’m considering in this post. I think Revise is uncontroversial as a “default” package, so that could easily be installed by the extension, but I’d like to be quite a bit more aggressive about defaults to the point where I think it would be inappropriate for the Official VSCode extension to be quite so opinionated.

The Linux kernel doesn’t distribute Gnome, it’s up to distributions to make those kind of decisions to return to @mkitti analogy

---

<div class="post-metadata">

**Author:** ![mrufsvold](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mrufsvold/32/31600_2.png) [@mrufsvold](https://discourse.julialang.org/u/mrufsvold)\
**Post date:** [September 5, 2023, 11:31am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/11 "2023-09-05T11:31:37Z")

</div>

I may have spoken too soon. Maybe the extension could have an overloadable function for “Install defaults” and “Create New Project” which distribution-type packages could customize!

---

<div class="post-metadata">

**Author:** ![rdavis120](https://avatars.discourse-cdn.com/v4/letter/r/b5a626/32.png) [@rdavis120](https://discourse.julialang.org/u/rdavis120)\
**Post date:** [September 5, 2023, 1:41pm UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/12 "2023-09-05T13:41:24Z")

</div>

> [@LaurentPlagne](#):
>
> A beginner experience closer to what Matlab or R studio users would expect.

[Maybe you should upvote this](https://github.com/rstudio/rstudio/issues/1798) and give them a spec of what you’d like to see.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [September 5, 2023, 1:47pm UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/13 "2023-09-05T13:47:52Z")

</div>

Perhaps this could be built on [PetrKryslUCSD/VSCode\_Julia\_portable: Portable Julia running in VSCode (github.com)](https://github.com/PetrKryslUCSD/VSCode_Julia_portable)?

It only requires double-clicking a .bat file (on Windows, evidently, but it could be extended to a Linux environment, since the install script is bash).

Edit:  
The script could create a project, install selected packages, and then bring up VSCode with the project open. Perhaps also a tutorial could be incorporated somehow?

---

<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 27, 2023, 8:37am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/14 "2023-09-27T08:37:05Z")

</div>

How about [this](https://github.com/BioTurboNick/AbbreviatedStackTraces.jl)_?_

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [September 27, 2023, 11:57am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/15 "2023-09-27T11:57:37Z")

</div>

> [@gdalle](#):
>
> Not exactly a package but it sounds like what we’re trying to achieve with [https://modernjuliaworkflows.github.io/](https://modernjuliaworkflows.github.io/)

Update: I’ve been working to make this more opinionated, explicitly separating the basic packages from more advanced tricks thanks to a color code. I believe the first page is almost complete, feel free to give feedback!

[https://modernjuliaworkflows.github.io/pages/writing/writing/](https://modernjuliaworkflows.github.io/pages/writing/writing/)

---

<div class="post-metadata">

**Author:** ![ParadaCarleton](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/paradacarleton/32/20005_2.png) [@ParadaCarleton](https://discourse.julialang.org/u/ParadaCarleton)\
**Post date:** [October 4, 2023, 10:17pm UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/16 "2023-10-04T22:17:05Z")

</div>

I’d just like to say, thank you for writing this, you’re doing god’s work. I’ve been using Julia for years now and I _still_ learned a lot from this.

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [October 5, 2023, 7:02am UTC](https://discourse.julialang.org/t/opinionatedjulia-package/103522/17 "2023-10-05T07:02:09Z")

</div>

Thank you so much, it means a lot!
