# Making life easier for new users

**URL:** <https://discourse.julialang.org/t/making-life-easier-for-new-users/81638>\
**Category:** General Usage\
**Tags:** pkg\
**Created:** [May 25, 2022, 10:23am UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638 "2022-05-25T10:23:20Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [May 25, 2022, 10:23am UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/1 "2022-05-25T10:23:20Z")

</div>

What is already easy is to install packages.

What is not so easy yet is:

1. to create a new user project
2. to find, copy and execute examples
3. to create custom system image

I wrote three feature requests for package manager that would make  
these three steps easier.

[https://github.com/JuliaLang/Pkg.jl/issues/3092](https://github.com/JuliaLang/Pkg.jl/issues/3092)  
[https://github.com/JuliaLang/Pkg.jl/issues/3093](https://github.com/JuliaLang/Pkg.jl/issues/3093)  
[https://github.com/JuliaLang/Pkg.jl/issues/3094](https://github.com/JuliaLang/Pkg.jl/issues/3094)

Because not everybody sees Pkg feature requests I post them also here.

Any comments?

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [May 25, 2022, 10:40am UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/2 "2022-05-25T10:40:42Z")

</div>

Ok, I think the suggestion from Kristoffer Carlsson to prototype these functions in a separate package is a good idea…

---

<div class="post-metadata">

**Author:** ![Henrique\_Becker](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/henrique_becker/32/15443_2.png) [@Henrique\_Becker](https://discourse.julialang.org/u/Henrique_Becker)\
**Post date:** [May 25, 2022, 2:36pm UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/3 "2022-05-25T14:36:15Z")

</div>

I kinda agree with the comments there and your conclusion. The functions do not do anything very complex (they take about 5~10 lines of code) and could either be implemented as a convenience by the users that feel the need to use it, or obtained by means of a package. The `Pkg` is for the building blocks that are impossible to implement outside of it.

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [May 25, 2022, 3:03pm UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/4 "2022-05-25T15:03:41Z")

</div>

Well this one is already 30 lines of code…

> <https://github.com/aenarete/KiteSimulators.jl/blob/main/bin/create_sys_image>

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [May 25, 2022, 3:57pm UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/5 "2022-05-25T15:57:44Z")

</div>

I mean, it is not about the question if its only a few lines of code or not, it is about establishing a standard way to:

1. create user projects
2. to locate and copy examples
3. to create system images

To establish a well documented standard way of doing this is important for the user experience. For achieve this goal functions to do this should become part of Pkg at some point in time.

Other modern languages like Rust have standard tools to create a default user project.

---

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [May 25, 2022, 4:20pm UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/6 "2022-05-25T16:20:41Z")

</div>

> [@ufechner7](#):
>
> create user projects

Isn’t it Pkg.generate() ?

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [May 25, 2022, 4:25pm UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/7 "2022-05-25T16:25:34Z")

</div>

No, not at all. This generates a new package, but most new users do NOT want to write packages, just want to use a package or a set of packages, run some examples and then write there own code, which will never gets published. And if you teach bachelor students they will not even use git. So a user project is NOT a package. It took me 5 years of being a Julia user before I wrote my first package.

I think of a user project as a place for scripts that use a common set of existing packages without defining any modules.

---

<div class="post-metadata">

**Author:** ![cjdoris](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cjdoris/32/213133_2.png) [@cjdoris](https://discourse.julialang.org/u/cjdoris)\
**Post date:** [May 25, 2022, 9:43pm UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/8 "2022-05-25T21:43:31Z")

</div>

I thought that `Pkg.activate`ing a directory that doesn’t exist implicitly created a new project?

---

<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:** [May 25, 2022, 9:51pm UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/9 "2022-05-25T21:51:39Z")

</div>

I am a happy user of the simple [jeeves command line utility in Windows](https://discourse.julialang.org/t/how-to-properly-create-activate-and-resume-an-environment-in-vscode/48289/7).

---

<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:** [May 25, 2022, 9:52pm UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/10 "2022-05-25T21:52:22Z")

</div>

Some of this functionality exists in the Julia for VSCode extension, which is one place to reach new users. For example, system image creation:  
[https://www.julia-vscode.org/docs/stable/userguide/compilesysimage/](https://www.julia-vscode.org/docs/stable/userguide/compilesysimage/)

A Wizard.jl package that provided a high level interface over PackageCompiler.jl, PkgTemplates.jl, and Pkg from a standard REPL would be nice.

> [@ufechner7](#):
>
> Ok, I think the suggestion from Kristoffer Carlsson to prototype these functions in a separate package is a good idea…

This is a good concept in general. Iterating this within Pkg.jl would really slow down progress.

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [May 25, 2022, 11:26pm UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/11 "2022-05-25T23:26:31Z")

</div>

I will try it out.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [May 26, 2022, 12:01am UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/12 "2022-05-26T00:01:01Z")

</div>

Worth mentioning:

[![](https://global.discourse-cdn.com/julialang/original/3X/5/1/51cb159c3a9d45333b9e0b59920b8bc9308a81b4.jpeg "JuliaCon 2020 | DrWatson - The perfect sidekick to your scientific inquiries | George Datseris") ](https://www.youtube.com/watch?v=jKATlEAu8eE)

DrWatson.jl was designed for scientific projects and has many setup features.

---

<div class="post-metadata">

**Author:** ![mthelm85](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mthelm85/32/224164_2.png) [@mthelm85](https://discourse.julialang.org/u/mthelm85)\
**Post date:** [May 26, 2022, 12:05am UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/13 "2022-05-26T00:05:37Z")

</div>

Just FYI, I threw jeeves together very quickly and I’d be happy to put some more work into it to make it more usable for a broader audience. I use it for every new project I start and haven’t really wanted anything new (I did add some functionality to make it check for the latest available Julia version a while back, but that won’t work for non-Windows users) but I’d be happy to implement any good ideas that others want to see incorporated : )

---

<div class="post-metadata">

**Author:** ![mefob](https://avatars.discourse-cdn.com/v4/letter/m/ea5d25/32.png) [@mefob](https://discourse.julialang.org/u/mefob)\
**Post date:** [June 3, 2022, 10:22pm UTC](https://discourse.julialang.org/t/making-life-easier-for-new-users/81638/14 "2022-06-03T22:22:53Z")

</div>

From my point of view, item 2 “to find, copy, and execute examples” is the most critical one.  
PkgTemplates could be a bit easier to use and get simple default settings, but at least the mechanism is there.  
We have add to include packages and dev to work on packages, but there is no good way to get a package and play with the examples.  
I am using a slightly cumbersome workflow similar to what I described here: [How to use VSCode and REPL to write and test a package? - #33 by mefob](https://discourse.julialang.org/t/how-to-use-vscode-and-repl-to-write-and-test-a-package/78818/33)  
Something like this should absolutely become part of Pkg to establish a standard way to setup packages with examples.
