# Returning to Crystal after 4 years

**URL:** <https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047>\
**Category:** Introductions\
**Created:** [October 30, 2022, 6:21pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047 "2022-10-30T18:21:17Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![nheer](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/nheer/32/1811_2.png) [@nheer](https://forum.crystal-lang.org/u/nheer)\
**Post date:** [October 30, 2022, 6:21pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/1 "2022-10-30T18:21:18Z")

</div>

I am excited to be back.  
I have had a look at Crystal in 2018, and put it on the back burner due to it not having a 1.0 release yet.  
Then I forgot about it 😅 and now I rediscovered it and I really like the concise and productive syntax while still being able to produce portable (static) binaries.

I’m currently doing a course on Crystal ([Crystal Lang - Learn Programming with Crystal | codingphase](https://codingphase.teachable.com/courses/394035)) because my main programming language has been Python recently.

I’m also picking up some exercises on exercism: [Crystal on Exercism](https://exercism.org/tracks/crystal/exercises)

Is there anything else you would recommend me to look at?

---

<div class="post-metadata">

**Author:** ![mavu](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/mavu/32/213_2.png) [@mavu](https://forum.crystal-lang.org/u/mavu)\
**Post date:** [October 30, 2022, 6:23pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/2 "2022-10-30T18:23:38Z")

</div>

Welcome back!

There is a book now , in paper, [Book: Crystal Programming](https://forum.crystal-lang.org/t/book-crystal-programming/4639)

---

<div class="post-metadata">

**Author:** ![nheer](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/nheer/32/1811_2.png) [@nheer](https://forum.crystal-lang.org/u/nheer)\
**Post date:** [October 30, 2022, 6:25pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/3 "2022-10-30T18:25:47Z")

</div>

@mavu thank you very much! I appreciate that.

> There is a book now , in paper, [Book: Crystal Programming](https://forum.crystal-lang.org/t/book-crystal-programming/4639)

Good point, I’ll have a look, but I usually prefer videos, to be honest.  
I don’t know why, but I just can learn more easily that way. 😅

---

<div class="post-metadata">

**Author:** ![jzakiya](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/jzakiya/32/278_2.png) [@jzakiya](https://forum.crystal-lang.org/u/jzakiya)\
**Post date:** [October 30, 2022, 6:38pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/4 "2022-10-30T18:38:29Z")

</div>

Another good source of Crystal use is on Rosetta Code.

Here is a list of all the problems with Crystal examples.

[https://rosettacode.org/wiki/Category:Crystal](https://rosettacode.org/wiki/Category:Crystal)

There’s also a thread on this in the forum.

> [@Improve Crystal's profile on Rosetta Code](https://forum.crystal-lang.org/t/improve-crystals-profile-on-rosetta-code/513):
>
> There are a lot of code categories on Rosetta code with no Crystal examples. [https://rosettacode.org/wiki/Reports:Tasks\_not\_implemented\_in\_Crystal](https://rosettacode.org/wiki/Reports:Tasks_not_implemented_in_Crystal) An easy way to increase Crystal’s profile on the site, and in the coding world overall, is for people to provide the missing examples. The easiest way to do this is to just translate the Ruby version in each category, as a start. Doing this would not only up Crystal’s profile, it would also be a good exercise for people (newbies, et al) looking to…

---

<div class="post-metadata">

**Author:** ![nheer](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/nheer/32/1811_2.png) [@nheer](https://forum.crystal-lang.org/u/nheer)\
**Post date:** [October 30, 2022, 6:42pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/5 "2022-10-30T18:42:35Z")

</div>

@jzakiya thank you for that, but it seems [the link](https://reports.miraheze.org/Tasks_not_implemented_in_Crystal) is broken?

![404](https://canada1.discourse-cdn.com/flex036/uploads/crystal_lang/original/2X/3/35929eadaae0b641c8d1d9ed9fcf99e8b811300a.png)

---

<div class="post-metadata">

**Author:** ![jzakiya](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/jzakiya/32/278_2.png) [@jzakiya](https://forum.crystal-lang.org/u/jzakiya)\
**Post date:** [October 30, 2022, 6:47pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/6 "2022-10-30T18:47:53Z")

</div>

Hmm…I don’t know what|where that link goes to, but the one for the Crystal Rosetta Code examples I provided works. [https://rosettacode.org/wiki/Category:Crystal](https://rosettacode.org/wiki/Category:Crystal)

---

<div class="post-metadata">

**Author:** ![nheer](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/nheer/32/1811_2.png) [@nheer](https://forum.crystal-lang.org/u/nheer)\
**Post date:** [October 30, 2022, 6:49pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/7 "2022-10-30T18:49:39Z")

</div>

That one, yes, but this one (also mentioned in the linked post at the top) doesn’t:  
[https://rosettacode.org/wiki/Reports:Tasks\_not\_implemented\_in\_Crystal](https://rosettacode.org/wiki/Reports:Tasks_not_implemented_in_Crystal)

---

<div class="post-metadata">

**Author:** ![jzakiya](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/jzakiya/32/278_2.png) [@jzakiya](https://forum.crystal-lang.org/u/jzakiya)\
**Post date:** [October 30, 2022, 7:03pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/8 "2022-10-30T19:03:11Z")

</div>

Oh, good catch.  
Rosetta Code updated their website this year and I guess they killed some of their old urls.

Here’s the link to all their programming tasks: [Rosetta Code Tasks](https://rosettacode.org/wiki/Category:Programming_Tasks)

I did a quick search and couldn’t find where the list of not done tasks for Crystal (each language) is now. Maybe they axed it (too much work?). I’ll try to see if it still exists later when I have the time.

But you can still see what the done Crystal examples are, and see from the whole list what’s yet to be done in Crystal. That’s a good place to start learning how to use Crystal, the easiest thing being to translate the Ruby example (if it exists) and then _ **Crystalize** _ it into iconic Crystal.

EDIT: I meant to say _ **idiomatic** _ Crystal.

---

<div class="post-metadata">

**Author:** ![nheer](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/nheer/32/1811_2.png) [@nheer](https://forum.crystal-lang.org/u/nheer)\
**Post date:** [October 30, 2022, 7:22pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/9 "2022-10-30T19:22:46Z")

</div>

That is a great suggestion, thank you, @jzakiya 👍

> iconic Crystal

Is this a used term in the Crystal community, like “[Pythonic](https://blog.startifact.com/posts/older/what-is-pythonic.html)” in the Python community? (idiomatic Python code)

---

<div class="post-metadata">

**Author:** ![zw963](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/zw963/32/1623_2.png) [@zw963](https://forum.crystal-lang.org/u/zw963)\
**Post date:** [October 31, 2022, 9:41am UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/10 "2022-10-31T09:41:31Z")

</div>

If you want a quick tour, check [code-maven.com/slides/crystal](https://code-maven.com/slides/crystal/)

There are two books available as ebook pdf, as mention by others.

For the newest document, you have to read [offical reference](https://crystal-lang.org/reference/1.6/)

Check [Blogs](https://crystal-lang.org/blog/) and search/ask on current form, you can get lots of useful information.

You can search `Crystal lang` on Youtube, there are many videos too.

---

<div class="post-metadata">

**Author:** ![nheer](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/nheer/32/1811_2.png) [@nheer](https://forum.crystal-lang.org/u/nheer)\
**Post date:** [November 1, 2022, 4:11pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/11 "2022-11-01T16:11:44Z")

</div>

@zw963 thank you very much!

Do you also have any recommendation for functional programming in Crystal?

---

<div class="post-metadata">

**Author:** ![zw963](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/zw963/32/1623_2.png) [@zw963](https://forum.crystal-lang.org/u/zw963)\
**Post date:** [November 1, 2022, 5:31pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/12 "2022-11-01T17:31:36Z")

</div>

From my point of view, functional programming in Crystal all come from Ruby, if you are a typical Ruby programmer, and know the lambda and Proc.new in ruby, you probably know every things about it, if you are not, only reading `The ruby programming language` write by the author of Ruby is enough.

You don’t need learn Haskell or Lisp for this purpose.

---

<div class="post-metadata">

**Author:** ![beta-ziliani](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/beta-ziliani/32/1821_2.png) [@beta-ziliani](https://forum.crystal-lang.org/u/beta-ziliani)\
**Post date:** [November 1, 2022, 8:09pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/13 "2022-11-01T20:09:17Z")

</div>

Quick note: one big difference with Ruby related to functional programming is the `struct` construct of Crystal. `struct` objects are allocated in the stack instead of in the heap, and therefore, are copied over (passed as values). As mentioned [in the book](https://crystal-lang.org/reference/1.6/syntax_and_semantics/structs.html),

> … structs are mostly useful for immutable data types and/or stateless wrappers of other types…

PS: Welcome back @nheer!

---

<div class="post-metadata">

**Author:** ![nheer](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/nheer/32/1811_2.png) [@nheer](https://forum.crystal-lang.org/u/nheer)\
**Post date:** [November 2, 2022, 1:21pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/14 "2022-11-02T13:21:39Z")

</div>

Thank you, both so much @zw963 and @beta-ziliani this is much appreciated! 👍

> […] `struct` objects are allocated in the stack instead of in the heap, and therefore, are copied over (passed as values).

Wow, that sounds super useful for functional programming. Thank you 🙂

---

<div class="post-metadata">

**Author:** ![zw963](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/zw963/32/1623_2.png) [@zw963](https://forum.crystal-lang.org/u/zw963)\
**Post date:** [November 2, 2022, 2:02pm UTC](https://forum.crystal-lang.org/t/returning-to-crystal-after-4-years/5047/15 "2022-11-02T14:02:51Z")

</div>

For me, a Crystal user about six months of experience, didn’t find that in the process of using Crystal, there are many functional usages related to struct, admittedly, using struct far more than when using with Ruby, almost always used to hold some structured data, used to replace Hash, you know, type is key, that is the reason, that’s why everyone loves Crystal over Ruby here.
