I'm really quite drawn to lisp (in general) but I keep bouncing off it. I think the main reason is I just don't know how to effectively work with a dynamically typed programming language. I think for me the affordances that a language provides to change a program over time matter much more than the features that aid in writing programs. I want to know before I run my program whether my program is sound. I appreciate what other people are able to do with lisp(s) and I want to experience that for myself. But I think what I need is to let go of having a compiler yell at me when I remove a field from a type but that I still have functions that expect that field (for example). Is it just more tests? Live REPL editing? It seems like this can only cover so much surface area compared to compile time type checking. I don't think statically typed languages are better than dynamic ones or vice-versa. I just am not as effective with the dynamic ones.
HN user
birdfood
I live on the Gold Coast and I have seen in my yard Aseroe rubra, glow in the dark mushrooms (not for a while now) and many others. Just this weekend I found one that looks a bit like a king oyster. Where did you get your list? I was looking for a visual guide to local fungi
Getting to spend 3 months on a self learning journey sounds wonderful. My hunch is that these deep skills will be valuable long term and that this new abstraction is not the same as moving from assembly to c, but I am not completely sure. Lately most of my code has been llm generated and I can’t say I feel any sense of enjoyment, accomplishment, or satisfaction at the end of a work day. But I’ve also come to realise I really only enjoy 5-10% of the coding anyway and the rest is all the tedious semi-mechanical changes that support that small interesting core. On the scale of human history working with computers is a blip in time and I wonder how the period of hand writing code will be viewed in a hundred years, perhaps as a footnote or simply bundled as ‘everything before machines were self automating’.
There’s roughly 8b people in the world and somewhere between 2-3b have never used the internet. If OpenAI manages to capture the 6b internet users growing at 100% per year, they have 3 years of user growth left max. Then what?
I spent a couple of years of my career working on a multiplayer / social game. We definitely got some angry feedback on that, but overwhelmingly the users loved it. Our game hovered around a 92% approval rating. I even got fan art! I think I’ll always look on that period as an absolute highlight of my career. I shifted industries to renewable energy driven by a personal mission to work on a greater cause. It’s B2B so I’m back in the familiar place of having users who I imagine would rather be doing something else than using our product. If my work means they get to spend less time at their computers then I’m happy.
These companies pirated their training material and reached settlements with the copyright holders. I imagine they’d do the same with software licenced under Not For Training terms too. It’d be up to you to find out it is happening and then pursue them legally for compensation.
I have a couple of hives of the local native tetragonula stingless bee in my yard. It does feel quite special to see them foraging and returning laden with various brightly coloured balls of pollen on their legs. I’ve managed to propagate two hives, one I split and gave to my children’s kindy, the other started from a swarm which attacked one of my hives. I read that if you move the hive and put an empty one in its place the swarm might colonise it and that is exactly what happened and a friend now has that one. We also get a lot of blue banded bee and teddy bear bees in our garden. It’s comparatively uncommon to see a honey bee.
These companies are telling us software development is over. They are positioning themselves as the means of production. You want to build anything you do it through them. And since ‘software is solved’ this is not a software but a user acquisition.
I was in the same boat as you until I saw DHH post about how he’s changed his use of agents. In his talk with Lex Fridman his approach was similar to mine and it really felt like a kernel of sanity amongst the hype. So when he said he’s changed his approach I had another look. I’m using agents (Claude code) every day now. I still write code every day too. (So does Dax Raad from OpenCode to throw a bit more weight behind this stance). I’m not convinced the models can own a production code base and that therefore engineers need to maintain their skills sufficiently to be responsible. I find agents helpful for a lot of stuff, usually heavily patterned code with a lot of prior art. I find CC consistently sucks at writing polars code. I honestly don’t enjoy using agents at all and I don’t think anyone can honestly claim they know how this is going to shake out. But I feel by using the tools myself I have a much stronger sense of reality amongst the hype.
I’m building a journaling app primarily for myself but with a view that others might want to use it to. I’ve built it in rails and deployed it. The experience has been great and it’s the first “app” I’ve deployed outside of work. But I haven’t shared it with anyone because I don’t want to be responsible for hosting their data considering the intention of this app. The only “business model” (method of covering costs) I’m interested in is pay to use. I don’t want to do ads or tracking. I think saas is the wrong fit for it. So I’m just this week thinking about making it a macOS / iOS app instead and work out how to do syncing without involving a server.
I think a good, related example to your point is the “2 watched literals” algorithm used in SAT solvers. It uses lazy evaluation to significantly improve the speed of the SAT solver. I implemented an SAT solver a couple of years ago just for learning and when it came to refactoring my code to implement the 2 watched literal I had what felt like a moment of recognition of the cumulative time and effort of many people working in this field of research that it must have taken to arrive at this design. It’s just such an elegant implementation that to me seems it can only have come from deeply understanding the theory and implementation of SAT solvers.
I considered Django pretty seriously and worked through most of the excellent Mozilla tutorial.
I prefer Django's having models defined in code and being able to generate views and migrations based off these. The auth situation seems more robust.
Obviously there's direct benefit to me with working with a familiar language.
The decision to give Rails a go instead really game down to me trying to minimise how many pieces I need to tape together. And with Django it seems I'd need to sort out my own frontend story and build my own deployment process. Rails has defaults for both of these now. I'm fully prepared I might decide to rebuild with Django in the future, but right now Rails is working.
I work with python and typescript (occasionally c++) for my day job. I love getting to ship complete vertical slices of functionality. But I’m tired of all the faffing about. I’m sick of reinventing wheels and integrating with paid services that should be part of a frame work (e.g. auth). And writing the same types 3 times (pydantic, orm, front end)… I just want to focus on my product’s raison d'etre.
And I feel like I’ve found that with Rails. In my free time I’ve recently chosen Rails to build apps for myself. I’m aware that there’s a productivity bias in new projects but so far everything I’ve needed my app to do has come out of the box with Rails (e.g. object storage). If you’ll pardon the pun, I feel like I have these guard rails that prevent me from going off on tangents and keep me focussed on the product.
And I’ve got the app hosted! This is a first for me and I’ve been a dev for 15 years. I feel like a lot of the complexity of web dev is tamed with this framework and that I’m on a very well trodden path.
Yeah I’ve seen these posted here previously! Probably the most appealing new car to me at the moment. Hopefully they take off and we can get them outside the US
I want a dumb EV. No infotainment system. Just speakers and a way to plug my device into them. Anything critical to the car should be completely air gapped and require an absolute minimum amount of software, preferably zero.
I certainly can’t say whether this is idiomatic as I was working it all out myself. But I’d basically write a type for each operation (as I’d read elsewhere). And honestly this was a bit of a drag too. I really wanted some reflection to make generating this code more ergonomic. From memory I’d have types like these
Author id: int, name: string, book_id: int
NewAuthor name: string, book_id: int
ViewAuthor name: string, book_title: string
Author represents the data in the db, NewAuthor allows for an insert operation, and ViewAuthor is for showing the data to a user.
You could argue for combing Author and NewAuthor and making id optional but I wanted to enforce at the type level that I was working with stored data without needing to check id everywhere.
OCaml is probably my favourite language.
The most involved project I did with it was a CRUD app for organising Writer's Festivals.
The app was 100% OCaml (ReasonML so I could get JSX) + Dream + HTMX + DataTables. I used modules to get reusable front end templates. I loved being able to make a change to one of my data models and have the compiler tell me almost instantly where the change broke the front end. The main value of the app was getting data out of excel into a structured database, but I was also able to provide templated and branded itineraries in .odt format, create in memory zipped downloads so that I didn't need to touch the server disk. I was really impressed by how much I could achieve with the ecosystem.
But having to write all my database queries in strings and then marshal the data through types was tiring (and effectively not compile time type checked) and I had to roll my own auth. I often felt like I was having to work on things that were not core to the product I was trying to build.
I've spent a few years bouncing around different languages and I think my take away is that there is no perfect language. They all suck in their own special way.
Now I'm building an app just for me and I'm using Rails. Pretty much everything I've wanted to reach for has a good default answer. I really feel like I'm focused on what is relevant to the product I'm building and I'm thinking about things unrelated to language like design layout and actually shipping the thing.
Perhaps related, after watching a talk by Gerald Sussman I loaded an image of the Kanizsa triangle into Claude and asked it a pretty vague question to see if it could “see” the inferred triangle. It recognised the image and went straight into giving me a summary about it. So I rotated the image 90 degrees and tried in a new conversation, it didn’t recognise the image and got the number of elements incorrect:
This image shows a minimalist, abstract geometric composition with several elements:
Four black shapes that appear to be partial circles or "Pac-Man" like forms, each with a wedge cut out, positioned in the four corners/quadrants of the image Two thin black triangular or arrow-like shapes - one pointing upward in the upper left area, and one pointing to the right in the center-right area All elements are arranged on a light gray or off-white background
I’m writing a journaling app, for myself first. It’s already usable and I’ve gone from not writing to writing each day.
The idea is the app should be very easy to submit entries (entries can be small) as a way to get thoughts and emotions out of your head.
I want to focus on an interesting search functionality that aggregates entires into a single document about similar subjects.
With having internet in our pocket we no longer value being able to recall information. There is no need when anything is a query away. I suspect a similar thing will happen with our ability to think. What is the value in being able think through and solve a problem when you can just get your phone to do it instead? And I would argue in reality most people won't care if the results aren't correct so long as they are plausible and fast.
I think I'm at the same conclusion. I basically want ocaml but with structural / compile time duck typing of all types (I know about objects but they don't seem widely used). And some sort of reflection mechanism to cover 80% of the cases where you'd reach for ppx / macros (i.e. database interface code gen of types).
I've been having a similar experience trying to build an app with liveview. I've been simultaneously building the same app with Phoenix + LiveView and Dream (OCaml) + HTMX. With the OCaml stack I'm finding it really easy to follow the data flow through the whole app thanks to the compiler. With the Phoenix app I'm struggling to internalise how all the code fits together and having to navigate the code base off searching for strings alone (vscode editor tooling seems to just not work for me?). I'm also struggling to grasp how state is stored in a liveview and it isn't helped that a lot of the resources I've found online are now out of date. Going with a simpler approach of MVC sounds promising - I do want to get to the point where I'm actually taking advantage of the BEAM (I'm aiming for long running processes + user interactivity + maybe multi-user editing).
I'd be keen to hear your development workflow for building an MVC style app, what you use for the front end, and how you go about refactoring, e.g. when editing a struct which is stored in the DB and shown in a view is when I particularly feel like I'm flying blind.
I too have been working on a CRUD app using Dream, SQLite, and Caqti (with HTMX and ReasonML) for a few months in my limited free time. I think I've hit a few of the same issues as OP. There's definitely painful points, but overall I'm really enjoying working with this stack. (For reference, my background languages are python, typescript, c++ and some spare time rust). First and foremost, I'm really enjoying having a fast compiler with a good type system as I feel it allows me to "unload" this project from my brain then pick it back up more readily. I'm using typed JSX thanks to tyxml and ReasonML. I've got templated .odt reports working with the mustache package which can then be opened perfectly fine in Google docs. I can create in memory zip files using zipc to allow downloading multiple files at once without needing to touch the disk. And I've just wrapped my head around abstraction using modules to write generic code for things like tabular data views.
Writers Festival program: basically you have a 100+ authors, a handful of venues, and 3 or 4 days to run the festival. The nature of writers festivals is interesting because there are a lot of panel sessions (multiple authors on the one session). The formulated problem is to produce a valid schedule such that the number of required accommodation nights is minimised - ultimately to reduce operating costs.
Building a CRUD app.
It's been a while since I've worked on a CRUD app so I'm finding the whole thing quite interesting. The purpose of the app is to solve a scheduling problem.
I've written my own CDCL SAT solver (now just using google or tools), and on the app side I've jumped from Phoenix (elixir) -> Dream (ocaml) -> axum (rust) -> Django. I feel like Phoenix probably perfectly suits what I'd like to do with this app (long running tasks and collaborative editing) but I'm at the point where I want to support this app long term and I don't see me not being familiar with python anytime soon.
I find it interesting that this green/orange colour palette so commonly appears in midjourney images, seemingly regardless of the subject.
https://gleam.run is a statically typed language on the BEAM
I've been thinking about similar things lately, and particularly I think about the 3 billion humans who have never used the internet. How will this affect them? And how do they interpret this existential crisis we are facing?
Additionally, when the internet is mostly created by bots, why would I go online to look up a recipe on a bot cooking blog that was generated yesterday when I could have my pocket bot generate a brand new, tailor made cooking blog for me whenever I want? Ditto for instagram/tiktok. Generate the next image based on how long I looked at the last one.
I'm using a language with easier data parsing this year and so far I'm having a much better time (I'm also more time poor and these exercises fit in pretty nicely to a bit of after dinner free time).
I felt similar last year. I was trying to do them in Zig and Rust, and it felt like most of the challenge was just writing custom data parsers for poorly formatted data which felt too much like my day job.