# Beginner friendly code base

**URL:** <https://discourse.julialang.org/t/beginner-friendly-code-base/14268>\
**Category:** New to Julia\
**Tags:** question\
**Created:** [August 29, 2018, 8:32pm UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268 "2018-08-29T20:32:42Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![khaled](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/khaled/32/4903_2.png) [@khaled](https://discourse.julialang.org/u/khaled)\
**Post date:** [August 29, 2018, 8:32pm UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/1 "2018-08-29T20:32:42Z")

</div>

Hi all,

A long time Java developer here, trying to make the leap to the Julia land and I was wondering if anyone can recommend an open source Julia project(s?) clear enough for beginners to read and look at … Maybe even contribute to?

Also is anyone interested in mentoring?

Thanks!  
Khaled

---

<div class="post-metadata">

**Author:** ![mohamed82008](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mohamed82008/32/18171_2.png) [@mohamed82008](https://discourse.julialang.org/u/mohamed82008)\
**Post date:** [August 29, 2018, 9:47pm UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/2 "2018-08-29T21:47:44Z")

</div>

Welcome!

I suggest you start with an introductory online tutorial from [Get started with Julia](https://julialang.org/learning/), then go through the documentation [Julia Documentation · The Julia Language](https://docs.julialang.org/en/v1/), then find a project that interests you and try implementing it to understand the language better. If you have questions, consult with the documentation above, and if something is not clear, you can ask questions here and many people will be willing to crowdmentor.

> [@khaled](#):
>
> I was wondering if anyone can recommend an open source Julia project(s?) clear enough for beginners to read and look at … Maybe even contribute to?

This really depends on your background and interest so if you say more about your interests, people may be able to recommend something. But anyhow, [Julia Observer](https://juliaobserver.com/) is your friend to search through packages and see what interests you.

Good luck, you are making a great move!

---

<div class="post-metadata">

**Author:** ![Datseris](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/datseris/32/13406_2.png) [@Datseris](https://discourse.julialang.org/u/Datseris)\
**Post date:** [August 29, 2018, 9:50pm UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/3 "2018-08-29T21:50:18Z")

</div>

If you want to look directly into packages and not into tutorials, then I can suggest the following, **all of which have been written with clarity of source code as the main concern** :

- [GitHub - JuliaDynamics/DynamicalBilliards.jl: An easy-to-use, modular, extendable and absurdly fast Julia package for dynamical billiards in two dimensions.](https://github.com/JuliaDynamics/DynamicalBilliards.jl)
- [GitHub - JuliaMusic/MotifSequenceGenerator.jl: Generate random sequences of motifs, under the constrain that the sequence has some given total length.](https://github.com/JuliaMusic/MotifSequenceGenerator.jl)
- [GitHub - JuliaMusic/MusicManipulations.jl: Manipulate music data, humanize, quantize and analyze music performances with Julia](https://github.com/JuliaMusic/MusicManipulations.jl)
- [GitHub - JuliaDynamics/ChaosTools.jl: Tools for the exploration of chaos and nonlinear dynamics](https://github.com/JuliaDynamics/ChaosTools.jl)

Notice: `ChaosTools` makes heavy use of `DynamicalSystemsBase`. If you are willing to disregard this, then `ChaosTools` also has super duper clear source code.

I am the lead developer of all the above, and if you want to make any contribution of any kind please do not hesitate.

---

<div class="post-metadata">

**Author:** ![tomtom](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tomtom/32/5106_2.png) [@tomtom](https://discourse.julialang.org/u/tomtom)\
**Post date:** [August 30, 2018, 12:27pm UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/4 "2018-08-30T12:27:29Z")

</div>

nothing is faster than starting a project, then for any problem go search the official docs + google.

---

<div class="post-metadata">

**Author:** ![khaled](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/khaled/32/4903_2.png) [@khaled](https://discourse.julialang.org/u/khaled)\
**Post date:** [August 31, 2018, 6:27am UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/5 "2018-08-31T06:27:39Z")

</div>

Thanks!  
Julia observer looks like a neat way to browse around some projects.  
Although a general purpose language my understanding is that Julia shines more for everything ML? Hopefully I’ll be using it more for that.

---

<div class="post-metadata">

**Author:** ![khaled](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/khaled/32/4903_2.png) [@khaled](https://discourse.julialang.org/u/khaled)\
**Post date:** [August 31, 2018, 6:27am UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/6 "2018-08-31T06:27:41Z")

</div>

Thanks! I will look into those

---

<div class="post-metadata">

**Author:** ![khaled](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/khaled/32/4903_2.png) [@khaled](https://discourse.julialang.org/u/khaled)\
**Post date:** [August 31, 2018, 6:27am UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/7 "2018-08-31T06:27:45Z")

</div>

For sure building things is the way to go but reading code help understanding the “feel” of a language and trying to tackle bugs in an existing code base allows to avoid the “blank page” problem while staying productive.

---

<div class="post-metadata">

**Author:** ![mohamed82008](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mohamed82008/32/18171_2.png) [@mohamed82008](https://discourse.julialang.org/u/mohamed82008)\
**Post date:** [August 31, 2018, 9:53am UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/8 "2018-08-31T09:53:45Z")

</div>

> [@khaled](#):
>
> my understanding is that Julia shines more for everything ML

Julia shines in many areas of scientific computing including ML, optimization, differential equations, linear algebra and many more.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [August 31, 2018, 12:01pm UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/9 "2018-08-31T12:01:23Z")

</div>

> [@mohamed82008](#):
>
> shines in many areas of scientific computing

~~many~~ all 😉

@khaled: I would second @mohamed82008’s advice and suggest that you approach this from the other direction, and pick some problem that _you_ are interested in solving. Then see if there are packages available, contribute to them, etc. Otherwise, if you are not interested in the actual problem, it is easy to lose motivation and focus.

You get mentoring (code reviews) when you submit PRs. Start small, read a lot of code, and ask questions (many packages are fine with questions about internals as issues in git repos, especially if you are serious about contributing).

---

<div class="post-metadata">

**Author:** ![mforets](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mforets/32/298_2.png) [@mforets](https://discourse.julialang.org/u/mforets)\
**Post date:** [September 11, 2018, 4:07pm UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/10 "2018-09-11T16:07:09Z")

</div>

@khaled If you have a taste for algorithms and geometry, you can check [LazySets](https://juliareach.github.io/LazySets.jl/latest/).

In this codebase you can find some examples of using parametric types, interfaces, documentation and testing, specialization using multiple dispatch, macros, plotting.

Examples of contributions open to beginners are [writing your first iterator](https://github.com/JuliaReach/LazySets.jl/issues/188), [extending the `convert` method in Base](https://github.com/JuliaReach/LazySets.jl/issues/337), [writing a new plot “recipe”](https://github.com/JuliaReach/LazySets.jl/issues/576) (\*).

(\*) “recipes” are library functions that communicate with the [Plots](http://docs.juliaplots.org/latest/) package.

---

<div class="post-metadata">

**Author:** ![ExpandingMan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/expandingman/32/866_2.png) [@ExpandingMan](https://discourse.julialang.org/u/ExpandingMan)\
**Post date:** [September 11, 2018, 4:27pm UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/11 "2018-09-11T16:27:30Z")

</div>

> [@Datseris](#):
>
> - [https://github.com/JuliaDynamics/DynamicalBilliards.jl](https://github.com/JuliaDynamics/DynamicalBilliards.jl)
> - [https://github.com/JuliaMusic/MotifSequenceGenerator.jl](https://github.com/JuliaMusic/MotifSequenceGenerator.jl)
> - [https://github.com/JuliaMusic/MusicManipulations.jl](https://github.com/JuliaMusic/MusicManipulations.jl)
> - [https://github.com/JuliaDynamics/ChaosTools.jl](https://github.com/JuliaDynamics/ChaosTools.jl)

That’s some really cool stuff. It never ceases to amaze me how many nice packages already exist in pure Julia. Very nice examples.

---

<div class="post-metadata">

**Author:** ![Datseris](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/datseris/32/13406_2.png) [@Datseris](https://discourse.julialang.org/u/Datseris)\
**Post date:** [September 11, 2018, 4:36pm UTC](https://discourse.julialang.org/t/beginner-friendly-code-base/14268/12 "2018-09-11T16:36:29Z")

</div>

Thank you I am very flattered by your words!
