Being light in every sense of the word is a primary feature of the language.
Lua is great for high-level control of a program written in C/C++. When setting that up, I’ve often appreciated that I could removed features like file I/O from the Lua standard library and the rest keeps on trucking.
Lua is terrible for writing programs by itself. People keep trying to make it happen. But, for anything non-trivial, it’s a fool’s errand.
As someone who wrote entire stacks and apps on top in LuaJIT that I got paid for and are running without any problems after many years, this is getting a little tiresome to hear.
At the rate compatibility layers seem to come out lately I'd be surprised if we don't quickly end up with a compliant OpenGL-on-Metal implementation soon after Apple decides to stop supporting it fully (or even well before).
I think it has the potential to be pretty good, especially on modern hardware. If using DXVK or VKD3D is any indication, I think the performance losses can be minimized. Plus, I've used Zink before on Mesa's RADV Vulkan driver, and it's pretty good.
I believe the purpose of Zink is that if someone is writing a new driver for a new GPU, they only need to write a Vulkan driver. After all, OpenGL is a legacy API. Still has lots of uses. But, I think it's better if the effort to write a new driver is spent on bringing up just a Vulkan implementation instead of needing to write two drivers of once.
It's kind of like how Mesa's existing OpenGL drivers all switched to Gallium3D, which splits the Graphics driver into an agnostic front-end and a device-specific backend. Allows for a lot of re-use and optimization. I heard they're wanting to do something the same with their Vulkan drivers for the future as well.
Someone could write an OpenGL layer directly on Metal. There have been a few incomplete starts at that.
Meanwhile, writing an OpenGL-on-Vulkan layer has been a plan for deprecating/simplifying driver support for OpenGL for quite a while now. Might as well focus efforts on that.
For Vulkan-on-Metal it shouldn't matter much because in the modern 3D APIs most of the expensive work happens upfront in the 'init path' (e.g. when creating objects, not when using them).
OpenGL on a modern API is another issue though because OpenGL is highly dynamic and really isn't a great match for translating to Vulkan, Metal or D3D12 (e.g. changing OpenGL state may involve throwing away and creating underlying Vk, Metal or D3D state objects on the fly, which is expensive).
It's destroying and creating Vulkan objects (which then in turn destroy and create Metal objects) when changing some random GL state (aka "hash-and-cache") which is the critical problem when trying to emulate GL on a modern 3D API.
Modern 3D APIs have moved all expensive operations into the creation of immutable state-group objects, while OpenGL is the opposite (every single state can be changed at any time).
E.g. mapping any modern 3D API to any other modern 3D API is mostly fine since the expensive operations happen outside the hot path, but mapping OpenGL to any modern 3D API is problematic.
Long ago I worked on a project where the whole team was so productive I gave myself cubital tunnel from typing so fast for so long. I'd feel needle jabs in my forearms randomly. Like while standing around. Doctor recommended surgery.
Avoiding surgery involved months of finger stretches, forearm massage, 2 keyboards and 2 mice at different elevations, typing with my hands hanging slack like a zombie. It worked. But, even typing this out 20 years later I can still feel the RSI hiding in the shadows. Since then I've avoided RSI by spending 10x more time thinking about code than typing it.
All that is setup for: There have been many times recently where I've thought "I know exactly what I want this code to look like. But, damn. That's going to be a lot of keypresses..." The effort is nothing. Risking nerve damage is the concern.
In those cases I have been thrilled be able to tell AI exactly what to make, how to refactor it, how to clean it up, clean it up more, yet more, still not done. All in less than 10% of the keypresses that would have been required to type it by hand.
Thanks for sharing. I feel the same way but did not express it in my post. I've sat down to do some side projects in the past and realized that even though my mind has energy (I hear this can be rare.. but it is true for me!) the hands would be tired. I've probably completed more side projects this year than in the last few, even if the total amount of time spent on them is higher.
Like you, there was always this specter of "don't overdo it".
Greybeard coder here. There are two separate problems you get to solve. 1) If AI writes your code, you didn't learn anything about the code. 2) If you don't use AI, you won't learn how to use AI. You need to learn how stuff works and how to code well. And, you can't do that passively. If you didn't type it with your own fingers, you didn't learn it. And, that includes learning "How to use AI?"
You want to learn web dev? Start typing HTML and JS. You want to learn how to use AI? Start typing specs and prompts. You'll need to learn both. But, you can't learn web dev by typing specs and prompts.
You can learn using AI as a research assistant, a tutor, a reviewer, a critic. You can use it to bang out quick tools, prototypes, deal with the hassles that are not your focus at the moment. But, whatever you are trying to learn, you need to do the actual implementation manually. There is no such thing as passive learning.
Thank you for the response, I have a few questions that I would like to ask now as well which jumped on top of my head which I would like to ask though to get more clarity at the same time.
What is the exact learning of the topic that I have to do in it, for example. I can (and I will) learn webdev about valuable if vibecoding becomes the norm (as it is becoming nowadays)
Now I will learn the basics, then intermediate, then expert. Where exactly do you think that the value lies in?
ie. are the advantages put within getting from beginner -> intermediate or to complete beginner -> intermediate -> expert
Another thing is the level of fields that you have to be in or the whole question could perhaps be framed as being the jack of all trades or the master of one? Is this going to be like typing speed [90 wpm vs 130 wpm is somewhat negligible effect] or like chess [ 2100 vs 2400 isn't negligible and becomes exponentially harder when you become expert yet the difference will have genuine real impact maybe?]
Also within the process of vibe-coding, what is the actual value that I am adding given that I have learnt the skill, what I think might be is that I can actually verify if its good or not instead of asking a chatbot [which might be sycophantic or might miss the devil in the details], and say its okay.
Also, how do people naturally move away from the natural tendency to just... not read what AI is saying (when I tried obra/superpowers etc.), this video[0] tries to showcase what I am suggesting perhaps but I feel as if its still quite a slippery slope.
I hope that this question can be taken in good faith (because I like learning about CS for the sake of learning itself) but aside from that, why learn HTML/CSS is still a question that I can perhaps ask, similar to why learn assembly[1], and to what level, and will it help me in getting a job and if that helps in what I will actually do in job, and if so, then how? if the job done via vibe-coding as well. [I think this might tie to the previous questions that I have asked]
I do agree with the overall premise and learning can't be passive granted. Learning requires some form of active involvement which includes the phase of struggle (I think), yet that struggle is done for something meaningfully better and has a purpose. What AI does to many is question that purpose, why learn?
The issue I find which is why I am coming to this again and again is this, I am unable to find how the improvement within this corresponds to actual work/job or in actual terms how so.
Also, what happens if suppose the difference between an expert person with extreme knowledge and a normal~ish person is that it might take normal person is some more time/prompt/tokens to debug the issue with the models itself. Like it might take 2-3 more prompts to fix the issue.
I am finding people with varying opinions on how even the most expert people on some topic are agreeing that most AI can do it good enough already with vibe-coding, whereas some generalists who might not know the other language are porting their projects in it with vibe-coding.
In general, when approaching learning as well, I am not sure which to approach first: the thing which might be approachable (so for example: after HTML/CSS/Js Python, Django [thanks @simonw], golang's complicated full stack application)
and what if I might not like JS so much and python only enough but golang the most ideologically but my skill level still matches mostly python and its what I am most proficient in writing by hand?
I am personally going to go the learning path (the hard way?), I don't know if its the hard way or not but I wish to learn programming quite deeply even if just for the sake of itself and making my brain think about problems better
but my mind does still wonder if people on the other side could be right as well, does everyone need to learn deep ends of programming if programming becomes simpler or operates via just words, similar to how in previous times we used to have a lift operator and now we have all become a lift operator with the press of a button.
My opinion on vibe-coding has been this for quite sometime now: I do vibe-coding not for learning but for if/when the end results/prototypes matter more than the process but I absolutely DO NOT want to do vibe-coding if learning is the goal. before college, I didn't even have time to properly pursue the learning phase but I will now have the time and I will chose the learning path.
Also, when someone suggests that vibe-coding is all good if done right and alright when you do it this particular way or that particular way which causes my mind goes to this chain of thought and I feel a little confused.
As such, many of these thoughts float into my head when someone mentions this and it makes me wonder what should I do to achieve that and the other goal as you mentioned which was learning itself, it makes me question both sometimes if I am feeling p(doom). Learning as in, for all the reasons that I explained above and vibe-coding as in feeling shallow and hollow.
I am extremely sorry if I am being unable to succintly convey what I am trying to say and for the longer post. I really don't know how to express this particular thought because its all over the place. I hope that it's okay though and I might not have wasted the time and thanks for commenting and have a nice day.
[1]: (although there are still good reasons to learn assembly imo, I recently vibe-coded/[vibe-forked?] a scratchpad application in assembly as a way of messing around with AI.): https://github.com/serJaimeLannister/rhunpad
It sounds like you're maybe in a bit of analysis paralysis, trying to find the optimal way to move forward. If you stay in that frame of mind, you'll spin your wheels for hours trying to find the best way to approach it, and then never actually approach anything.
My advice would be, as hard as it might seem, let yourself go slow and just do things. Spend a few weeks on webdev, or learning aseembly, or playing with AI. As long as you are engaged with whatever you're doing, that is enough. You will, via repeated exposure to smart people doing hard things, learn how to navigate and overcome all kinds of problems.
I actually disagree a little with the previous commenter about learning how to use AI. While that is useful, AI becomes second nature once you have been exposed to all these other things.
I write a lot of C++. A long time ago, I learned the basics of writing assembly. Even though I haven't written much assembly, it still helped me a lot over the years. I understand how it works. I can read the assembly output of my compiler and judge how well my C++ translates to machine actions. I can debug individual assembly instructions when stuff isn't going as planned or the C++ is not available.
I write a lot of high-performance code. To do that, I had to learn the details of how devices (drives/NICs/GPUs) work, how buses (PCI) works, how RAM, CPU caches, instruction pipelining work. Now I know how to structure data flow to work well with the machine instead of against it.
I write a lot of APIs. In doing that, I had to learn the hard way about how different API trade-offs drive client decisions. How to foresee problems in the future stemming from interfaces I'm writing now. How to argue with clients to get them what they need in the long term and not just want they want for the next milestone.
At all of these levels, I had to learn how each level works by doing it. By trying it lots of different ways. And, by optimizing it all the way down from "More productive client discussions" to "More performant assembly instructions" :P
Now whenever I do vibe-code, it's because I know exactly what I want and I can get AI to type it faster and with less RSI (carpal tunnel). Or, I know I want to prototype a few options rapidly before committing to implementing one design for realz. In neither of these cases am I telling the AI "Make it performant and easy to use." Because I know how I want to structure the code to make it performant. And, I know how to set up the API to make it easy to use. So, I'm telling the AI how to structure the data flow and how to set up the API. Because, if I didn't, I'd just be generating a big ball of noisy mud that's neat to gawk at, but has no long-term value.
So, what should you learn? You need to learn how the stuff you are interested in actually works under the hood by experimenting with it manually. Not just "Hey chat, make it work somehow..." You need to focus on architecture and systems thinking because otherwise you won't know how to prevent AI from holding your hand deep into a maze neither of you can escape from. And, you should be spending the majority of your tokens on step-by-step refactoring, never one-shotting. One-shotting is for AI tech demos. Not for learning or production.
The 12” TV that I played SNES on had convenient brightness/tint/sharpness dials. Depending on my mood I’d turn sharpness all the way up for hard pixels or all the way down for a free Gaussian sampling filter ;)
Lua is great for high-level control of a program written in C/C++. When setting that up, I’ve often appreciated that I could removed features like file I/O from the Lua standard library and the rest keeps on trucking.
Lua is terrible for writing programs by itself. People keep trying to make it happen. But, for anything non-trivial, it’s a fool’s errand.
reply