I largely speaking prefer backend development - I'm not a fan of GUI or web development, and have little experience with either of these. I wrote this HTML by hand and based the CSS off of Luke Smith's old website, sue me
All projects below that are marked with an asterisk (*) were related to my university course and as such I can't publically share the source
I respect Java for it's dedication to the object oriented paradigm and really like how classes are their own files. I think it's a great programming language to learn as it's strict enough in its syntax (looking at you Python) to teach good habits, without being too niche. It's GUI tools are lacklustre at best and multithreading is tedious, but it's nice for being cross platform and very general purpose
Java was the primary programming language taught over my university course. It was the first true object orientated programming language I picked up and is currently my most confident language. I privately teach Java in my spare time, using self-made materials
Projects completed in Java:
I am currently learning Rust because it seems hip and cool. Given it's good multi-threading ability, performance on par with C while being more high level, and seems capable of being used for literally anything, it caught my eye. I've read the official online book and am now just trying to get to grips with the rest of it. I feel like the book is good as a semi-practical guide to Rust, but it doesn't help you understand the behind-the-scenes of how Rust works; it completely misses out a lot of standard library traits and structs which are really commonly used everywhere. This means that while I may have read a full 20 chapter book and have built a multi-threaded web server or whatever, I still feel like there's a huge transition to the 'real-world', maybe akin to graduating uni and starting a job? I don't know, I haven't got that far yet 😂
Initial impressions thus far - I like Rust. It's relatively intuitive and feels like an aggressive mix of Haskell and Java.
It's clear dedication to being safe is a huge pain for quickly prototyping things but really gives you confidence that your program is highly unlikely to just bomb out because of some obscure bug.
? operator is frankly magical and this is the first programming language where I've really started to use streams/iterators properly.
The struct system seems a bit weird to me as I'm very used to classes being their own files, but I'm sure I'll get used to it in time.
The compiler is awesome, and Cargo is also really useful, though I'm not sure how well I agree with the choice of statically linking dependencies by default, or how Node.js like the packages are (loads and loads of tiny packages).
Update, a bit further down the line: there always feel like several very differently written ways to do something like handling a
Result returning function.
if let Err(e) if you only care about errors,
match it if you care about both parts but what to carry on execution, use
? if you care about both but don't want to carry on execution, use
.unwrap() if you know you're never going to get an error, or
.unwrap_or(foo) to provide a simple default.
The problem arises that in an iterative development process, I often find myself moving between these slightly different 'end result' scenarios, but having to rewrite a lot of code to do so that's very syntactically different.
Like yes you could use
match for all cases, but that's not the proper/idiomatic/clean way.
Other misc. thoughts:
?out of a method from within a closure
Projects completed in Rust:
Functional programming still has yet to properly 'click' with me. Me writing Haskell is like a chimp learning to use a typewriter, but that doesn't mean it's a bad language. In fact, I respect it hugely for what it's designed to do, it's abundantly clear that Haskell is immensely powerful in the right hands, and incredibly safe to write. It also wins the prize for best looking code, because damn when you align all the parameter names for all the cases and stuff whew boy... Anyhow, great language, I'd maybe consider using it for processing large amounts of mathmatical data
Projects completed in Haskell:
Shell scripting is kind of a force of habit to learn alongside Linux when you're a programmer, unless you think Python is the best thing since sliced bread. In any case, I've picked up a fair amount of shell scripting, and I have to say I'm not a fan, regardless as to whether I'm targetting sh, bash, or zsh. The syntax is fiddly and too whitespace dependent (conditionals), and 'normal' programming language features (like adding two numbers) feel like they were added as an after thought as opposed to from the ground up. Don't get me wrong, I love the Unix philosophy of "do one thing and do it well" coupled with the idea of working with data streams, but any time a script spills out over a line there's something I'll have to write that'll make me grumble about poor design. I use shell scripts because they're low level and the fastest interpreted language you'll get in Linux, but I'm never going to make a whole distribution just using shell
There isn't really such a thing as a 'project' in shell script for me, but the little helpers I write and bind to keys can be found in the
~/.local/scripts directory of my system, and they certainly are handy
I also wrote a fairly rudimentary test running tool in shell script to help test Strisp (the programming language I wrote in Haskell)
Oh, and I'm a maintainer of wd, a zsh directory changer that lets you set custom nicknames for long paths
As with the rest of the world, Python was the first programming language I learnt (properly).
It feels like the happy-go-lucky kid in a rather more stern group of older kids compared against the other languages in my list.
Python is a breeze: clear syntax leads to easy readability, and absolutely no cruft visible anywhere (though
-- are blatantly missing, come on guys).
It's a scripting Swiss army knife, being so widely used there's a library for everything, and being so feature rich it supports a whole host of programming language styles
However, I would not recommend anyone to learn Python as their first language. Just because it's the easiest doesn't mean it's teaching you good habits and safe coding style (type coersion, public by default class attributes). To add to that, being interpreted, it's not massively fast, and heaven forbid you want to thread a program in Python. Seems to be popular with the machine learning crowd, probably because they know more maths than they do real programming
Similarly to Java, I also tutor in Python. It's fairly popular in schools so it's far more commonly sought after than Java. I've made a whole host of projects with my students
Projects completed in Python: