Creation date: 2020-07-07
A couple of days ago I had a new idea of what I can do to help you start coding in Julia and or generally.
Some of you might know or have at least guessed: I'm a huge fan of coding and if you're reading this blog for a bit longer you probably know that I like to work on personal projects. These projects are often nothing really new just something I did by myself from scratch. By from scratch I mean: Trying to use as little dependencies as possible. That is of course quite subjective and I don't always follow that "rule".
From time to time friends or random acquaintances want to have a look into coding themselves and asking for suggestions on programming languages and how to learn them. Often I have the feeling it will not work out if they don't have a problem they want to solve with coding.
A problem here can range widely from just something to do for fun like:
creating a calculator app
solving Sudokus
to something really useful like automatic their daily work.
Whenever I learn a new programming language I teach myself the very basic syntax and then start implementing something I always wanted to do. It doesn't even have to be a small project. I started Julia by coding Juniper.jl which is a mixed integer non-linear solver in about 4,000 lines of code now.
I know some people out there can't do that and have to read the whole documentation of the programming language before they write a single line. I can't do that, as it's too boring for me and I think for people like me there is a potential downside by taking this approach.
Once we know a way of how to solve an issue, we sometimes don't think of how to write code in a different way. In the beginning we google everything as we know nothing but reduce googling during the journey. Googling is a very powerful way though where one can end up in different communities, Q&A platforms and so on.
Let me give you an example of what I mean by this. If I worked with Dict
for a while and know how to create one I write:
Dict('A' => 0, 'B' => 0, 'C' => 0, 'D' => 0)
but I might never find out a different way like:
Dict(l => 0 for l in ['A','B','C','D'])
for this you have different options:
reading the documentation
watch the community platforms and pick up things like this
read other peoples code and encounter it
get code reviews
I think people like me agree that the first point is not really an option. If you see this differently, you might want to read another post :D Sry about that ;)
Being part of the community is definitely a good idea but it's of course not the most effective way for the problem we have. Nevertheless, you should definitely join the community and their platforms if you haven't already:
from my previous post:
List of helpful resources
For questions which should remain for a longer period
For longer questions not suited for Chat based systems
The link brings you to the registration page
Awesome for short questions to get answers very fast
Chat based so sometimes your question gets overlooked if there are other question directly after yours
Introduce yourself in #introduction and questions go to #helpdesk
There are some more useful channels if you are interested in special topics
Similar to Slack but questions don't get overlooked based on their threaded system
Fewer people than in Slack
Next point: Reading other peoples code. In my experience it's relatively hard to find a project for a newcomer which is well written and not too complicated to get into. If you know projects where this can be done quite easily as they are small and concise: please share them in the comments section below.
Let's come to the last option in my list. Getting your code reviewed. This has several benefits in my experience: You get detailed feedback on exactly the kind of code you care about, as it is your code.
The problem is quite obvious: Who reads your code and can give you valuable feedback if you just started coding a small project, maybe open source on GitHub? It probably has zero stars and not really anyone besides you cares about it that much. I know that and I still think it's nice to have it open and maybe one day someone finds it valuable for their own thing. Maybe they just started learning the language themselves and learn from your experience.
I recently got pointed to exercism.io, which is a platform where one can learn a programming language, including julia, and get personal feedback on their submission. You get a task and some test cases, on which you can test whether your algorithm works, before you submit your solution. Then after a while, the duration of "while" highly depends on the language you learn and the time zone you're in, you get feedback from a mentor. In the julia track there are currently 10 mentors and about 3,000 students. The mentors are working for free which means it can take a few days to get feedback.
After starting to solve the first exercise there I realized the problem and signed up for mentoring myself such that others might not need to wait for that long. Since then, I helped 114 students on 164 solutions. You might wonder why I do this:
I learned to read code and different algorithm ideas
Constantly improve my communication skills
Altruism?
As I'm currently reading "The Selfish Gene" by Richard Dawkins, I question the last point a little. Maybe my genes "think" there is some higher value and "hope" they have a better chance of survival when I do this :D
Anyway back to the point.
This post is some kind of advertisement for the new idea I had.
I have a Patreon page for about a year now where I publish my posts two days earlier in exchange for some financial support. My primary goal with this was to be able to pay for my ongoing server costs. After achieving that goal I try to be able to make a living out of it :D Yeah I know there is a huge gap but it's my ultimate goal.
Today I created a new tier which gets the same benefits as lower tiers like
getting post earlier
a shout-out on everything I create (post/video/live stream)
a link to your personal blog
as well as code reviews of up to 150 lines of code per week.
This tier is for those of you who just started to code in Julia and have their own little project going on or want to start one. The cost of the tier is 50$ per month. In some ways this might sound like expensive when assuming I can review maybe 400 lines of code per hour which is the Wikipedia answer for the question: "How many lines of code can be reviewed in an hour?". I actually think it highly depends on the language but that's not my point here.
My goal is to give a lot of feedback which is not that normal in general code reviews. General code reviews are more on algorithmic ideas and quite high level comments and improvements or bugs.
I want to actually mentor you by giving extensive feedback which is helpful for new-comers.
In the first time it might be the case, that I write longer comments, than you wrote lines of code. This is at least the case for most of the students I mentor on exercism at the moment.
Mentoring for me involves several key aspects:
making sure that the code does what it should
readability
extendibility
performance
If you have some questions about this side-gig please reach out, either using the comment section or ask me directly, in the Slack (just write a direct message) or via o.kroeger@opensourc.es.
Thanks for reading and special thanks to my 10 patrons!
List of patrons paying more than 4$ per month:
Site Wang
Gurvesh Sanghera
Szymon Bęczkowski
Logan Kilpatrick
Currently I get 28$ per Month using Patreon and PayPal.
For a donation of a single dollar per month you get early access to the posts. Try it out at the start of a month and if you don't enjoy it just cancel your subscription before pay day (end of month).
I'll keep you updated on Twitter OpenSourcES as well as my more personal one: Twitter Wikunia_de