An intuitive terminal editor like Micro and Tmux could bring you far.


      There’s that thing again.. It’s more of a wording issue but eventually translates into a thinking issue. Functional programming doesn’t erase or “remove” side effects. It just separates side effects from reduction rules.

      Also after I watched this video and thought on it a bit, a question arose: Is the modern stuff OOP at all? Has the definition been extended to cover every use of class-like structures?


        When writing a comparison about languages, does it not make sense to get input from people who know the language really well?

        I think it’s fine to write about one’s experiences on a personal blog. It’s a good mechanism for getting thoughts and feedback from others — either the specialists you mention, or just your friends and local community. I don’t think there needs to be an expectation that you hunt down experts in each language and get feedback before publishing on your own website.

        This is the first post on a new blog, by someone who describes themselves as a self-taught developer. I doubt this is intended to be the the definitive comparison article between Go and Rust. ;-) It’s simply a post about one developer’s experience implementing the same project in two languages.


          Thanks for the write up and I really like your choice in both subject matter and criteria on which to to compare the two language ecosystems. Overall I thought it was a good analysis of the two. I can’t speak for Rust, but as someone who has developed in Go, I think your write up would benefit from a more in depth look at Go Modules. Go modules are how dependency management is done in Go these days, and while not a “package manager” per se, they do convey many of the same benefits. They have the added benefit that you’ll probably never have to think of GOPATH again.



            intention of the authors to use host language (eg C++) to describe ‘schema’ of the objects in their particular domain

            Rust solves this without reflection with “macro derive”. It’s a syntax sugar for AST transformations, which are used to implement self-describing types, without actual reflection support in the language. It works pretty well for serde (serialization) and diesel (db schema).


              I inherited a god-awful, hand-rolled E-commerce platform shoehorned into a WordPress theme and it has been causing our organization so much pain these last few weeks. A great lesson in vetting your vendors (they came with the acquisition, unfortunately), and not rolling your own E-commerce. Edit: I’m fixing all the stupid bugs that arise from it that seem to have been masked by the shared hosting it was on before we transitioned it to AWS like our other platforms.


                I’m not the inventor, so I wasn’t trying to solve any particular problem as such. I just really liked what I saw.

                For me, Factor provides a sweet spot of easy and very powerful metaprogramming, a simple runtime, and incredible introspectability. The feel of doing development in it is somewhere near a Lisp Machine, since all objects have graphical representations, you have a full REPL with compiler the entire time, and yet you still compile down to fully native code at all times. This makes doing incremental development extremely easy, and I think the amazingly rich standard library and GUI toolkit (for a language with its user base, at least!) speaks to its productivity. And unlike, say, Pharo/Squeak Smalltalk (an old haunt of mine), it uses normal text files for code, so I can use traditional tooling like Git and GitHub to manage development.

                These days, I write a lot less in Factor. Most of that’s due to real life taking precedence as I get older, some of that’s due to other languages closing the gap quite a bit. (Things like Jupyter, or Swift Playgrounds, did not exist when Factor was created, for example.) But Factor remains my preferred environment when I’m trying to learn a new concept or explore a domain I’m not terribly familiar with. Most recently, I had a blast using it for Cryptopals, for example.


                  Wasn’t meant to be a discouraging comment. I think it seems cool and as I said I strongly believe experimentation like this drives the state of the art forward. There are just a lot of new imperative systems languages lately! I should have stuck with the purely positive language, and I apologize for that, as the last thing 2020 needs is excess snark.

                  Regarding Pony, I was referring to its Reference Capabilities, which are type tags attached to data that can govern how it’s used, eg read only. Again, mentioning Pony is not a slight. The read only immutable regions reminded me of this. I think it’s a great idea.

                  The article’s breakdown of Rust vs Vale was particularly interesting and makes a point of highlighting this feature.


                    Thanks for taking your time to share this.


                      I think the social issues are a bit more nuanced than ‘is social’ vs ‘is not’. Also I think age and experience help everyone with social skills (as long as they are getting practice and working to get better) so that means on the non-neurotypical spectrum too. ‘Just get older’ doesn’t feel like the best advice though!


                        Sorry, if I wasn’t clear! Elba is an alternative to using Nix to manage Idris packages, so Nix isn’t involved in this solution. libgit2 would enable it to clone repositories from Git remotes.


                          On the contrary: I haven’t been through the system as a student, except for an intro course I took for an easy A in college (admittedly) and a useful graduate-level database course I took later as “continuing education.” I have an English degree. I have taught at the community college level.

                          The system as it stands is broken. It is almost impossible for someone to come into it with no knowledge and walk out as a capable programmer. Given what I saw from the “other side” of the education system, I am a firm believer in the “Sheep and Goats” issue (which a famous and badly written paper–now retracted–made famous), but just think that research in that area is not complete or satisfactory enough yet. The core premise, however, is real. (The retraction of that paper is interesting reading and has further links.)

                          The brokenness, however, is not a reason to simply throw up our hands and say “we can’t accurately assess anyone, because people who can write code are privileged.” What would that imply about the entire premise of education?


                            On occasion I will allow myself a few weekends or nights to really dig into an interesting problem, but that too can be a bit dangerous so I try and refrain and budget work time for it.

                            I could imagine that this is super valuable occasionally.

                            I’d be interested in what is dangerous about that. Leading you more astray? A waste of energy?


                              Well, guess I’ll share my story and thoughts here too; please note this is in no way intended to invalidate or challenge anything in your article; contrasting your own story and experiences with someone else’s can sometimes come off as being dismissive of the other person’s story, and that’s absolutely not my intent. I’m simply describing my own experiences. I just wanted to state this clearly up-front in case I accidentally phrase something in a poor way 😅

                              When I was 15 I was diagnosed with PDD-NOS, or Pervasive Developmental Disorder Not Otherwise Specified. I was a shy and socially awkward kid, very insecure, struggled with authority (still do), and was generally not in a happy place for several reasons (education system didn’t work well for me, shitty toxic parents, bullying), which eventually led to the school concluding “there must be something wrong with him”, culminating in the PDD-NOS diagnosis.

                              I haven’t talked about this in, ehm, almost 15 years mostly because I feel it just hasn’t really been relevant to my life. Quite a few points in your article sound familiar to me (easily distracted, getting a bit to obsessed with things) but there are quite a few differences as well (I’m not forgetful for example), but I mostly just see these as personality traits, rather than a “disorder”. I guess this fits with the neurodiversity movement, but I’m only superficially familiar with it (and some of its proponents seem a bit, ehm, too far out).

                              For example, take the negativity you mentioned in your article; this sounds awfully familiar as well. But then again … I remember family birthdays when I was younger where the entire family would complain about everyone and everything, and let’s not even get started about my mother specifically: she complains about everyone and everything. Negativity feedback loops are a very real thing. Is this a “disorder”? I don’t know… It’s entirely plausible I would have been a lot less negative if I had grown up in a different environment (and how would this have affected my other traits?)

                              I was a scout leader for many years, and at the time it was somewhat popular for GPs to refer autistic kids to scout groups “as it will be good for them”. As a consequence we had quite a few autistic kids, and some were genuinely impossible to deal with and clearly did have a disorder. We eventually had to tell some of them that they were no longer welcome; we hated doing this but a bunch of untrained volunteers dealing with autistic kids freaking out every weekend ruining the entire atmosphere for all the other kids as well was unsustainable :-( I’m not so sure if it’s useful to lump everyone who is a bit socially awkward, easily distracted, and can be a tad obsessive in the same group as them. I think it’s doing neither group any favours (never mind stuff like “rain man autism”).

                              Counselling, for me, has probably been more harmful than helpful. Much effort was spent on validating the worst parts of my personality, which only strengthened them and didn’t help me grow at all. Simply put, sometimes you need a swift kick in the backside and people telling you you’re a fucking idiot rather than an empathic voice. Don’t get me wrong, I’m a big fan of being empathic with people’s struggles, but sometimes being brutally direct has value too. It certainly had for me. Looking back, much of my early to mid 20s were kind of wasted because of bad counselling and I didn’t start actually solving my issues until I stopped listening to them. Don’t get me wrong, I know many people for whom counselling has worked out great – even literally life-saving – so I don’t want to discourage anyone from seeking out counselling if they think it might help, but I would encourage people to carefully evaluate if the counselling you’re getting is helping you grow or if it’s merely making you feel better (it certainly made me feel better about myself) and either get different counselling or try something else if you feel it’s not.

                              The entire description of PDD-NOS is essentially “there’s something wrong, but we can’t quite say what so let’s just label it as this”. Meh. In some cases this is probably justified, but in others probably not so much. In fact, only “Difficulty with social behavior” from that “signs and symptoms” list sounds familiar to me. My own experience made me very wary of these kind of “labels”, or treating them as “disorders”.

                              I don’t really have any special techniques to deal with any of this, other than being very open to introspection and taking extra effort in not being defensive when someone is being critical of my behaviour. From the looks of it, I think I’m probably “less autistic” than you are, so I probably don’t need it as much. Part of this means is that I’m fine with my more “distracted” and less productive moods, and that I try to capitalize on my more obsessive and productive moods as best I can. There are weeks where I do almost nothing, and there are weeks where I quite literally do nothing but work just for the craic.

                              This means I’m not a good fit for, say, a company with a rigid structure where you’re assigned a task every morning that you’re expected to finish in n amount of hours. I’m okay with that; not everyone needs to be a good fit at every company.

                              The best thing I probably did was to actively seek out social situations. Turns out that social skills is a, well, skill, and skills are things you can learn (unlike what those darn counsellors implied). In retrospect, I think a lot of it was just insecurity rather than a true lack of social skills anyway (although there was certainly some of that too).

                              I guess all of this is a bit rambly; but I figured I might share my own personal story and I fear that if I don’t hit the post button now I probably never will 😅 ASD as currently defined is so broad and encompassing that it’s almost impossible for any single person to comprehend all of the different experiences. My own probably reflects some other people’s experiences as well (I’m not that special or unique), but many people have markedly different ones. It always bothers me when people point to a single experience and think that describes the entire matter; it rarely does on any topic, and certainly doesn’t on this particular topic.


                                The Dingbats notebooks allow you to remove pages without ruining them, as they come with those tear lines (forgot the term). I personally have never needed anything more than lined pages. Transferring notes is something I haven’t really had a need for either. If that’s something you want to do, you indeed are likely better off with a binder of some sort.


                                  I really feel like we need to stop using these altogether. The paper mostly covers guessing, and the issues it points out a pretty serious, but I have also seen sites that force the user to use questions that are externally discoverable. If someone is not trying to hack a random account, but one for which they know the identity of the owner, these questions are terrible. Many commonly used ones (mother’s maiden name, father’s middle name, etc.) are public information or at least easily discoverable using simple social engineering.

                                  The worst thing is some sites force you to use questions, and force you to use the questions they choose. Meaning that even if you are security conscious and have a strong password, you have to basically lie on these questions and give up any chance of account recovery, or develop some complex obfuscation technique that enables you to answer the questions without giving easily guessable/obtainable answers.


                                    Nice to hear reflection mentioned. But there is a chance it may not get in to the C++ 23 either. So somewhat disappointed… after so many years, reflection still does not get the priority.

                                    I always felt that without built-in reflection it is much harder to develop usable GUI, Web/Text and database processing libraries. And, also, much harder for end users to consume those libraries.

                                    In such libraries it is always the intention of the authors to use host language (eg C++) to describe ‘schema’ of the objects in their particular domain. (eg Database tables, json, GUI form fields, etc) With that, the library authors tend to offer helpers (either at compile time or runtime) that leverage the C++ descriptions of the target domain schemas. To do that, they attempt to generate get/set/serialize/deserialize helpers, and aid with integration of those domain objects into C++ lists/iterators and other standard constructs.

                                    Without reflection is impossible to do (at least I do not know how).

                                    So libraries dealing with that type of end up offering their own (perhaps, also, incompatible) reflection implementations (eg Qt MOC, boost’s type reflection, boost’s mirror, rttrorg/RTTR)

                                    But overall all these ‘non-standard’ solutions create cognitive overload, add complexity through the library usage and make usage of the language feel less polished.

                                    For me, it seems, that reflection is one of those features, that’s hard to keep on the back burner…

                                    Of course less it is less important than solving the biggest usability nightmare: build/distribution system, but C++ standard is not aiming to solve that.


                                      In case anyone else saw the “semi-group with an undecidable problem” and immediately tried to figure out what it is and why it is undecidable: it is apparently known as the “Tzeitin semigroup” or “the Tzeitin semigroup S7” in the literature searches I’ve done. I’ve yet to find the original proof, but it’s ~20 pages of Russian so I’d likely struggle to make much of it if I did find it.

                                      Either way, this seems like a fairly well known example of a semigroup for which the word problem is undecidable.

                                      1. 5

                                        I don’t understand all the hate. The OP states he wants to write about his experience learning two new languages. This should be read as a post-mortem of impressions and lessons learned along the way, not as a olympic-level competition of which language is better. Yes, the author missed go modules, used async functions instead of threads, but those are normal mistakes of those who are just picking something from the first time. This post is a diary of their journey more akin to a travelogue with some recommendations in it. I think that experts coming here to just point a finger at it and shout “YOU’RE DOING IT WRONG!” are approaching this kind of post wrongly.


                                          I don’t see the software industry as a meritocracy. For every “10x programmer” there must be hundreds if not thousands of people involved in mining, manufacturing, assembly, transportation, etc. that make their jobs possible. I only deserve tens or hundreds of thousands of dollars each year inasmuch as the people who built my computer deserve to struggle to access food and housing. As a software developer, my work is inextricably tied to theirs.

                                          So, back to the article: I agree with the premise that we have a collective responsibility to fight for equality within our industry. I like all three ideas, honestly. I don’t think it will come at the expense of being able to accurately measure someone’s ability to do a job. Another way of saying this is: If you currently rely on someone’s grades to determine if they’ll be good at their job, you’re probably already losing a lot of great candidates and furthering inequality. Many people have accepted this as the cost of doing business, but that shouldn’t be the starting point for building a great education system.