axum/warp/actix, it's very pleasant to work with and also not fuck around with php-fpm and whatnot)ratatui for TUIs, and egui and iced along with some dioxus for regular interfaces)I use em a couple of times and I forget about em. React wasn't terrible but it was incredibly boring. Any other web stuff like Django, Angular, etc. were so ass that no matter if I used it solo or in a team I had a feeling akin to a code equivalent of "this could've been an email" boiling me from the inside.
vim/neovim hands-down the best, but the plugin system and clipboard issues were annoying enough that I just use Zed in vi-mode nowadays which I can describe as not-ass vscode.
I desperately need to start getting more into embedded and actual physical electronics. I always loved low level stuff but was discouraged through my disdain for lack of reproducibility (which in electronics could be anything from things actually relevant to the piece of tech itself like different components, to other more ambiguous things related to the hobby itself like component availability, shipping times, fixable vs fatal errors, etc.) along with somewhat of an inversely proportional versatility to fun factor (where the more fun it is to use some specific microcontroller or FPGA maybe, the more you have to lock yourself into some weird winXP-looking program stack that runs on a rainy day if you sacrifice a child, and also is different for every board ever).
Easy, just close the terminal emulator with whatever hotkey provided by your window manager of choice, and then delete the .swp
My workflow can best be described as being very games-programming-brained, perhaps at the expense of not being as efficient as it could be for certain projects, but it serves me well. I write mainly in C and use scrappy libraries like SDL, stb, and Dear ImGui to put stuff together.
I've mainly been toying around with projects related to reverse engineering games for a certain old console, which entails knowing a lot about how C/C++ compilers work and parsing PowerPC assembly. I've also spent a bit too much time making crazy patches for emulators related to dumping execution and graphics states, though I did learn a lot about C++ codebases and features I wasn't familiar with in the process.
Misc stuff I've used is Python, HTML/CSS/JS, React, and some SwiftUI.
I happened to already know Vim before I learned anything about programming, so that's what I use (However I probably would be using emacs if those events were reversed). One of the things I'm writing is my own text editor that addresses the things I don't like about Vim, which hopefully I will be making my regular editor for my C projects. I'm not a ride-or-die for Vim's modal state and will see how I like using more traditional keybinds in that editor.
As for IDEs, I don't care much for the selling-point features they have like error highlighting or jump-to-definition, so the debugger I use is just a frontend of gdb called gf. It gets the job done fairly well and definitely reduces printf() debugging, but I'm keeping an eye out for when the Linux port for RAD Debugger is finished.
I make sure to :q and verify the state of any unsaved files, because there's nothing worse than doing :wq and then you get a random bug when you compile the next day from a weird shortcut you accidentally performed on a file that deleted a line or something.
mostly C and C++, much more of the former. For small one-time scripts it's usually bash or python.
I've done a bit of JS for my website, but that has all been removed as I simply don't need it anymore. I'm satisfied with how my site looks right now, so I don't think I'll be changing anything drastically any time soon.
I have only used Qt (does that even count as a "framework" in the modern definition?). It's okay. It's certainly a framework, everything you write is basically required to be coupled with it in some way or another (see: QString, QThread, ...). This isn't necessarily a bad thing, but it does mean moving anywhere else is bound to be a pain in the ass.
I'd prefer if there were a more "lightweight" GUI library but my intuition says that's an oxymoron. IUP is probably the closest thing I've used to that.
GUI
TUI
I like to stick with what I know and just keep learning more on top of it. Maybe I'll try Rust in the future. I tend to take on projects at random.
yes, and then I reopen the file with nano
These days I use C and Lisp almost exclusively, though I will probably never shake using Java because of my love of making and modifying Minecraft mods. In the past I have used C#, Python, OCaml (I'd like to use it more) and various machine assemblies, mainly Z80.
C for anything where I care about portability and efficiency, and Lisp for other stuff, though sometimes making the decision of whether to use Common Lisp or something else like Scheme can be difficult. SBCL is actually pretty fast and from what I understand its compilation is actually pretty decent (though still by no means as good as the major "fast" languages, afaik). Scheme is preferable for the clarity it offers and I feel like when I write something in Scheme I tend to lean more into the nerdy stuff whereas most of what I've made in Common Lisp is pretty run of the mill using for loops and setf and whatever else.
Vim all the way. I was really surprised by how fast and convenient neovim is, and for a while I was resistant to switching over and giving up my oldvim configs but I realized it might just be better to switch to lua because if we're being honest vimscript kind of sucks balls. I did also go through an emacs phase for a while and I'd really love to go back to emacs, but the main thing holding me back is speed (sorry KP). I tried to get a good setup with evil mode and a syntax highlighting plugin, but it was so laggy I felt each letter being held back, especially in large files. it really started to piss me off when I went back and compared it to using nerdtree and realized there was absolutely no lag in the same files.
I'd like to get more into OCaml as well as other FP stuff. I'd also like to take another look at logical programming because I think it has a lot of legitimate uses, but what I'd really like is a system in a larger language that allows a lexical representation of logical structures to be mixed with normal imperative code.
[REDACTED]
In the past bit I've been working with data science-ish things (images and videos). So naturally it's all inside of Python Notebooks because fast feedback is important. It helps if I have to grab an off the shelf model in PyTorch (or TensorFlow (Python) if it's really old). I'm okay with this state of affairs so I have no real incentive to try something like Julia, although I do generally try to avoid MATLAB on every turn. For those unfamiliar, most of the work in this area is actually done with wrappers over things like BLAS or some GPU interface like CUDA, so performance is not terrible.
uv has solved most of the Python environment troubles for me in place of something like conda.
If it's something to do on my own that needs to be embedded into a webpage I actually quite like Livebook as of late (I had previously deployed some small graphlets with Observable), which brings me to Elixir.
I'm actually quite new to servers having written my first lines in a Django app a little over a year ago. These fat frameworks (Rails, Laravel, Django, etc.) are usually quite opinionated (MVC or otherwise) in code organization. (In Elixir there is Phoenix. BTW, Phoenix LiveView enables live client UI updates without leaving your server codebase, which is very cool. I highly recommend checking it out If you hate frontend.)
Thankfully most of those web frameworks (including Django) can't force you subscribe to it and you are able to structure the code the way you please. So using some of the packaged functionality doesn't mean you have to subscribe to a mental model. The project in question ended up turning into an API-only server with Django Ninja, which, for those familiar, is more similar to FastAPI/Flask in organization.
But ultimately code organization is just that, organization. It's shuffling cards on the table while ultimately the business code needs to live somewhere and really can live anywhere. I think where Elixir (and BEAM more generally) really differs is the handful of unique advantage not found elsewhere like the ability to trace and instrument quite literally everything, or its unique flavour to concurrent programming with the Actor model which are completely different to Promises/Futures (async-await/coroutine/continuation, or callback-based) that you may find elsewhere.
The best elevator pitch I can give is this: First forget about single-threaded languages like Python, PHP, or JavaScript and consider the two major issues in concurrent systems -- starvation and races. Elixir/Erlang on BEAM provides a VM with a preemptive scheduler to provide certain starvation-free guarantees while the functional nature of the language locks data immutable. An added bonus is that things for which you might have to bring in things like Redis can be done inside the same application. (See Oban.)
But the downside of BEAM is that it is a fairly sophisticated runtime and is usually not the most CPU-efficient despite its design with latency (consider average makespan of all client requests) optimization in mind with its roots in telecom. (Of course it isn't "slow". It's hard to be slower than "Those Interpreted Languages Who Start With P" being on a bytecode platform like the JVM or CLR.)
I think having some idea about types on the server is generally desirable. Elixir is in the process of rolling them out. This seems to be a trend among interpreted languages as well, e.g. PHP, Python, etc. In this regard I'd like to try Gleam as well, which is another BEAM language.
The other direction that I want to explore is to optimize for performance so that clients don't need to wait to begin with. I'm interested Go, Crystal, and of course Rust in this direction. I've written some toy things in Axum and it was generally a positive experience.
Mostly Svelte if something beyond Vanilla JS is really required. I'm not as much of a fan for JSX/TSX.
It's quite a shame that C++ is probably still the language where I move the fastest in this category. I've been playing with Zig and Rust on and off. I'd like to spend more time with them if only to escape C++ tooling, without even mentioning things like much easier metaprogramming. (See Reflections on porting C code to Rust.)
I think it's interesting that Zig is adopting something similar to an IO monad with the new IO interface. I'm excited to play with it soon.
I can't help but wonder whether there's some inverse correlation between the presence of an IO monad and the language's popularity (cue Simon Peyton-Jones's words about Haskell "avoiding success at all costs"). But Rust is also the first language with lifetime semantics (in this case with affine types) to see mainstream adoption, so we'll see. I'm also curious if there will be more things that gain momentum in this area in the future, for example linear types.
There are some macro packages in Elixir like Ecto which are popular enough to be "standard". But I also like more ad-hoc DSLs despite the challenges it poses for other people reading my code. I like how the boundary between a library and a DSL is blurry in Lisps and ML-based languages like Haskell or OCaml. This is something I'd like to play with more at some point, as opposed to things like Rust macros or entirely data-based representations like regular JSON.
I have OpenBSD's mg as my $EDITOR. I'm a big fan aside from the lack of Unicode support. This reminds me to try QEmacs of Fabrice Bellard (of ffmpeg, QEMU, tcc, QuickJS, and more fame) again.
I run Python Notebooks inside of VSCode (running them inside Jupyter previously). It's also worth mentioning the advantage of a Web-based editor for typesetting applications (as you generally need to look at live PDFs). Typst with Tinymist in VSCode gives fast bidirectional jumps between source and preview, but I sometimes end up working people who are accustomed to using LaTeX and/or Overleaf and there's no way out there.
I find it kind of weird that I never really enjoyed Vim as I do like using Blender, since they share context-dependent modal editing behaviour in a way. But anyway whenever I get accidentally dropped into Vi(m) I try to wrap up what I'm doing as quickly as possible and :wq.