Learning packages (eg. Image creation) - workflow

Julia is fab, feels like the language I have waited 20 years for. I dislike learning via video, extensive web search, preferring to absorb core language and then explore via IDE, eg library documentation and code. Eg I feel I learnt more from reading core macros than I ever would by long descriptions on a blog.

How do I do this with Julia? Eg If I want to create images of increasing sophistication, how do I read docs for a package like Images to find core libs, key calls etc and start building out working code? I imagine Iā€™ll need web to find key package initially, but would then want to do everything via REPL and VsCodeā€¦

Probably start here?

https://juliaimages.org/stable/

If you want to understand how different functions youā€™re calling work, you can always do

julia> @less some_function(some_argument)

to display the source code at the REPL, or @edit to open it in your default text editor.

1 Like

Yes, I could go to the web but that is something I want to avoid in favour of pure IDE. Images was just example of a mature package. Function level docstrings are going to be a bit low level.

To give an example from Java, javadocs for any package you use would gave package level docs, class level docs, fns. You would get gist of abstractions from top level, built from exact version you are using for details. Looks like there are some helper pkgs like Documentation.jl, but maybe not a useful standard beyond the fn docstrings.

If you like to start from code, then maybe check the test/s? Those exercise the API and you may learn more. For a package like Images which is heading towards ā€œmeta-packageā€ status, you can check the Project.toml and see what other package it loads. Recurse in and iterate.

2 Likes

So after getting bogged down in the weeds on what I was trying to do Iā€™ve come back to this, and see that my issue was much more clearly articulated here: How to discover functions which apply to a given object?

In a nutshell it still sounds like an open problem, with some mitigation available in future: i.e. natural discoverability/interrogation via the IDE