# Julia as first language

**URL:** <https://discourse.julialang.org/t/julia-as-first-language/104383>\
**Category:** New to Julia\
**Created:** [September 29, 2023, 9:04am UTC](https://discourse.julialang.org/t/julia-as-first-language/104383 "2023-09-29T09:04:44Z")\
**Posts on this page:** 1\
**Showing post:** 28

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [September 29, 2023, 2:15pm UTC](https://discourse.julialang.org/t/julia-as-first-language/104383/28 "2023-09-29T14:15:45Z")

</div>

> [@cscherrer](#):
>
> Very often we’d get students to write their own implementations of algorithms, in order to better understand them. In Python, these can only ever be toy implementations, because the performance hit is so great. This gives students the impression that they can only ever be consumers of “real world code”, and never producers. Obviously not the case in Julia.

ahh I hate this part haha. I like homework problems where when you’re done, your implementation is as good and as fast as the library implementation. If you could not have written the library, you worked on a toy. Otherwise it’s hard to know what you don’t know: people believe they understand how matrix multiplication because they implement it and then hear “Python is slow, don’t worry about it”. No, teach the student right there about cache misses and go the next step.

What happens from this is the whole “use a LinkedList” model of the world. Students learn a too simplified model of how computation works, are told that they don’t need to worry about how libraries are written because “that’s just details”, and then walk away with simply an incorrect view of how a program works. I think you should be able to at the end of a data structures class/module, show this video:

[![](https://global.discourse-cdn.com/julialang/original/3X/7/d/7d326714d012b97c63b9c70f9302c7242a6a097e.jpeg "Bjarne Stroustrup: Why you should avoid Linked Lists") ](https://www.youtube.com/watch?v=YQs6IC-vgmo)

and in the final exam ask “LinkedList insertion to the beginning is O(1), while Array insertion at the beginning is O(n). Why are arrays faster in practice in most cases?”. If a student just learns big-O but does not understand why this paradox exists, then they have not learned a good model of programming.

The high level Python style of teaching leaves students completely dumbfounded when you ask them questions like this, to the point where I have talked with people who simply believed it’s not true. Big-O is all there is to an algorithm, right? Understanding that there are different levels to the abstraction in not just programming but the model of computation is essential for practical programmers, and for setting them up for the next stage of learning theory of computation.

---

_[View the full topic](https://discourse.julialang.org/t/julia-as-first-language/104383)._
