{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T (Text)
correctAnswer :: T.Text
correctAnswer = "Haskell"
English but not in a Brexit way.
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T (Text)
correctAnswer :: T.Text
correctAnswer = "Haskell"
Reflecting on my first year running solely Linux (as opposed to dual-booting), I think that this culture comes from the fact that, on Linux, problems can more often than not be solved. If not solved, then at least understood. When you want to change something on Windows, or something breaks, you have far less room to maneuver.
When I was a Windows user, I’d barely ever submitted a bug report for anything, in spite of being very tech-literate. It felt hopeless, as my entire experience with the OS was that if a fix would come, it’d have to be done by someone else.
Linux treating its users like adults, produces users who are more confident and more willing to contribute.
Doom Emacs with lsp
and rust-analyzer
The pricing Reddit is charging is obscene and would mean that Apollo would be forced to pay $20 million per year to keep the app running. Other popular third-party apps would have to pay similarly outrageous costs. It’s clearly a blatant attempt to run them off Reddit so the site can force users to use its first-party app instead.
I wish all articles covering the debacle but it at clearly as this.
Thank you for taking the time to read my response. I really appreciate having the approval of someone with decades of experience (which, I very much don’t). Out of curiosity, when you started programming would have been the early days of Java, C++ etc. and the start of the ‘OOP revolution’. Can you recall why you started with C, when OOP was very much en vogue?
The entirety of your first paragraph is a humongous red flag. Your rationale makes sense, and it appears at each stage of the process you made logical decisions but the end result is disaster. You are evidently a knowledgeable and intelligent person, so I’ll ask you now to consider how old the underlying technologies on the web are, and how the web looked when they were written. Web frameworks exist to bridge the gap between languages and methods that are popular in the present day and the arcane mysteries of the world wide web. They bridge this gap with magic.
Now, this magic is a wonderful thing. It enables developers to make applications for the web in a way they’re familiar with and saves them having to think about the ‘web’ part which is:
However, if you’re trying to ‘learn programming’, starting with web dev is backwards in my opinion. You either choose to use a framework, and then you’re not really learning programming: you’re learning the framework. I always find this unrewarding, as it feels like the framework is doing all of the work and robbing me of the satisfaction. Furthermore, when you’re in the ‘beginner mindset’, you want to know how things work, you want to understand, you want to learn. Web frameworks are powerful when you focus on the ‘what’ and less on the ‘how’. Experienced developers have an understanding of ‘OK, this is what the framework abstracts for me, I’ll let it do its job and I’ll do mine’ and ‘Oh, I am not sure about this and it’s important I learn’. This is obviously a skill only gained by experience.
Furthermore, as you touched on, web frameworks go in-and-out of fashion and can have radically different approaches. With professional experience, you can apply your knowledge of one framework to learning another. As a beginner, I do not believe you have a broad enough understanding to be able to make connections between frameworks. This leads to your feeling of always being on the back-foot.
My recommendation for anyone who wants to learn programming in-and-of-itself, rather than to a specific end, is to start low-level. C was my traditional recommendation, though I may be altering this to Rust. C will never let you forget that you are programming a computer. This might sound ridiculous but it’s remarkably easy to lose track of and once you do, everything (in my head, at least) can get a bit esoteric and conceptual, and I find the ‘grounding’ deepens my sense of satisfaction working with computers.
My diagnosis as it stands is that you attempted to work from ‘abstract’ (web frameworks) to ‘concrete’ (learning how to program) and I’d always advise the reverse. Use C to gain a clear appreciation for how a programming language is altering 1s and 0s on your machine. Then build up with other abstractions, languages, and, in due time, frameworks.
It sounds to me that, in your experience, you made some correct assumptions and some very incorrect assumptions. Correctly, you identified that structure, ease-of-understanding, and writing your code in a style that you’re comfortable with is optimal. Incorrectly, you assume:
Now, these aren’t merely incorrect assumptions, they’re incredibly incorrect. In the professional sphere, those who write code that is well-structured, easy-to-reason about, and is well documented are sparse but they are often highly valued (in good teams, at least). I was always taught, and still vehemently believe, that clarity and readability are absolutely the first priority. Speed of execution is a secondary concern. Terseness is not even a concern of mine at all.
Good code is easily understood by computers, as well as human beings. You are the first human being who has to understand your code. You should always write it in the way that is most easy for you to understand. It is a darn sight easier to optimise neat code, than it is to neaten optimised code.
I believe you’ve come to these conclusions because of your experience learning web development. I find web frameworks and JavaScript as a language to have syntax that is odd and inflexible. The pseudo-code you provided was in JavaScript and is reminiscent of many of the traits that mean that even experienced developers such as myself find it difficult to parse. There’s a reason callback hell is a meme. If you get the opportunity to use some other languages, I believe you’ll see there’s more flexibility in expressing yourself than maybe you’ve had the opportunity thus far.
Furthermore, I am reticent to comment on what is valued in the JS community, as I have never written anything of note with the language but looking at the two code snippets you provided, the first snippet smacks more of a ‘professional’ developer. It’s more modular, finely-grained, expressive.
Finally, if you’re still clinging onto the notion that coding demands a ‘particular’ way of thinking, I encourage you to look-up internet rants from people who know a lot about Java, Python, C++ etc. bashing Haskell. Haskell is a beautiful language that forces its developers to write in a style known as ‘functional programming’. I won’t go into depth about the differences and why functional programming is amazing but let’s put it this way:
How far do you believe you could get in JavaScript without:
- Being able to loop?
- Being able to re-assign variables?
In Haskell, you cannot do either of these things and it’s for the better.
I’m glad to hear you’re happy in your work but disappointed that you were unable to find a groove with programming. From what I’ve read, you absolutely seem to be the kind of thoughtful individual who should enjoy it.
I’d encourage you to start learning Rust. I am learning Rust at the moment myself. Pay close attention to references and memory management. When your material discusses memory concepts, such as the heap and the stack, ensure you develop an intuitive understanding of how they work. Don’t just view this as an important part of your development (one many developers neglect!) but as a window into what is happening on your machine. If your brain is anything like mine (and I think it might be), it’ll further your satisfaction.
Avoid Python. Python is tremendous is you want to use a tool that mandates Python. It will hinder your learning and force you into bad habits if you learn it early. Furthermore, when your project gets to any level of complexity, it’s going to be far more pain than its worth. I understand why Python is so popular in some non-programming domains but it has no appeal to me as anything more than a scripting language with boundless 3rd party libraries.
Look at functional programming, if you’re curious. This free book on Haskell is popular for a reason. Functional programming ideas are slowly making their way into all mainstream languages, for a very good reason. They force you to think differently, and it might be different in a way you prefer.
Thank you for taking the time to offer a different opinion to the prevailing sentiment. I am certainly in your camp of being wary of interpreted languages.
Thank you so much. This is a terrific insight. A little later I’m going to sit down at my PC and type something up I think will help.
I’d ask you as a fellow ADHDer ✊ if I forget to please remind me to write up my response 😂
EDIT: Response now posted here
The car game I spent the most time with and therefore have the most nostalgia for is Burnout Paradise.
Errant Signal did a great video on it that reflects on a lot of what I love about it.
Do you have any advice on how to improve your recommendations? I never feel secure in what Spotify recommends me. I don’t know if part of the problem is I use it for my ‘active’ listening and my ‘passive’ background work mixes.
Have to admit I have more good experiences with .gov.uk portals than bad. Hope we can continue to streamline more government services online. I’ll say a little thanks to PHP + Laravel whenever a .gov.uk service works for me again.
Thank you for the detailed response and don’t worry: you don’t have to pull punches on Python on my account 😂 I’m a former Django dev and I have no intention of working with Python ever again. I see why it’s so popular for data analysis etc.: it’s a phenomenal language for non-programmers.
May I ask you more about your experience attempting to learn? I don’t know if it’s because I can program but eight years seems a long time. In return, I’d be happy to offer you a few pieces for advice that could help?
It’d be bad enough if this were just another AAA over hyped deal.
This is literally Bethesda. What are these people smoking?
If this gets us another Internet Historian video on the fallout, then this is worth it.
That’s the point I’m making. I would have been 100% behind justified pricing changes to maintain the site. But like you said, that’s never what that was.
Wait… Which sub was it?
That’s the thing this last week has made me realize: it’s so unjust that the ‘owners’ of Reddit are completely unable to see that the only value they have is what the community provides. Their sense of entitlement, when it is us who are responsible for their $X hundred-million valuation is startling.
Fellow NixOS traveller. I used Nix for work and never saw the appeal of a whole OA built around it but when I saw a tutorial with the declarative config I was instantly sold.
I’m learning Rust at the moment and I too think I have some reservations with its syntax. Most of these reservations come from my strong preference for functional programming over OOP.
I am unsure if I like method-syntax period, even if it isn’t inherently OO. Chaining just makes me feel uncomfortable in a way piping doesn’t.
Also it seems idiomatic for values of enumerated types to be written
Type::Enum
, which seems ugly and unnecessary.What’d you make of this article?: https://matklad.github.io/2023/01/26/rusts-ugly-syntax.html