9 ms·
Coding Isn't Programming
- anonzzzies 2y agoI see the keynote next year; 'vibing isn't coding isn't programming isn't ...; a pyramid of shite that sometimes works a bit'. I am happy Dijkstra doesn't have to see this; he was angry in the 80s in my parents living room; I cannot even imagine what he would be with 'vibe coding'.
- tmpz22 2y agoVibe coding is analogous to programming while high with identical results.
- baq 2y agoVape coding, maybe. Vibe coding react interfaces for backoffice tools is very real, speaking first hand.
- anonzzzies 2y agoIs it though; what does the term mean; are we talking to our computers, not reading anything and just judging the non-coder endresult? Or are you just using it to help coding. Vibe coding would be the former and while it sometimes works, it doesn't in many cases, including LoB tools if the backoffice is large and complex enough. Unless you have some interesting tooling to help out, in which case it is possible, but that's not really vibe coding at the moment.
- ramesh31 2y ago>Is it though; what does the term mean; are we talking to our computers, not reading anything and just judging the non-coder endresult? Or are you just using it to help coding. Vibe coding would be the former and while it sometimes works, it doesn't in many cases, including LoB tools if the backoffice is large and complex enough. Unless you have some interesting tooling to help out, in which case it is possible, but that's not really vibe coding at the moment. I spent 10 years of my life as an FE with a total obsession for the field, and took huge pride in my hand tuned HTML/CSS interfaces and well architected JS. I was "the UI guy" that anyone would come to with questions, as it was my expertise and what I loved to do all day. Now I'll never write a line of that stuff ever again as long as I live. I do not write code anymore. Everything goes through an agent. Occasionally I will flip a config value here or there, or clean up some leftover logs or whatever, but I don't type code at all anymore. My job is now to guide the agent and review its' PRs. Yet, I now easily have the productivity of an entire team from a few years ago. You can keep your head in the sand over this stuff for a little while longer maybe, but you will be completely obsolete if you don't adapt soon.
- anonzzzies 2y agoI am aware, I just don't see this. I too write a lot of code like this, but the LLMs cannot figure out many things. If you are on that track, it will sometimes just loop forever. But sure, most humans are pretty bad too so many fail at the same things the llms do and then the llms are a lot cheaper.
- whatamidoingyo 2y agoMost of the time, yes. But there are certain times where I prompt an AI to build X, and it delivers a seriously neat project. It's not all of the time, though. It has only happened like twice where I saw the full power of LLMs. I don't understand it. It's like there's a switch to dumb these things down, but if you catch them at the right time, they will blow your mind. But yes, most times, they are horrible. Or maybe I'm just crazy, i dunno.
- guappa 2y agoI think he writes HTML pages and some JS occasionally.
- guappa 2y agoYeah not every developer does html templates for wordpress. Of course if your job is extremely simple and generic, AI can kinda figure it out.
- ramesh31 2y ago>"Yeah not every developer does html templates for wordpress. Of course if your job is extremely simple and generic, AI can kinda figure it out." Keep telling yourself this. It's only hurting you. I think anyone who isn't working heavily with agentic systems right now has absolutely no clue about the revolutionary things that have happened in the last six months or so. Our industry is going to be in a completely different universe this time next year.
- anonzzzies 2y ago
- Workaccount2 2y agoI now have 5 "vibe coded" programs in our production chain at my non-tech company. Some have been running for over two years now. I think what tech companies miss is that customers buy these expensive feature packed software suites and then use 3% of the functionality. Cutting edge LLM's, and especially the newer thinking ones, are incredibly talented at creating programs that offer 3% the functionality of software suites. Just a few weeks ago we skipped out on a $1k/mo CAD package because claude wrote a program with a simple GUI that enabled our engineers to do the one task we needed the custom CAD software for (Manually creating part placement files from 90's era manufacturing files).
- anonzzzies 2y agoI think throwaway programs are fine here; you make them, ship them and that's it. But i'm quite sure you didn't vibe code them; you used an LLM to write a lot of code but helped it along; vibe coders cannot do that because they don't actually understand what the LLM did. It just worked, or didn't work, so they copy back and forth errors (if there are any) until it works. Using LLMs to assist writing software, sure, we do that every day and it ships. But if we don't help the LLMs when they are stuck, they don't get unstuck. They cannot solve some surprisingly trivial things which vibe coders will be stuck with.
- baq 2y ago> are we talking to our computers, not reading anything and just judging the non-coder endresult? more or less this, yes. a quick glance, maybe skimming through a tricky part. otherwise, if it works, it ships.
- latexr 2y agoAt least if you’re programming high (or drunk) you get a different kind of fun and the next day you know you have to recheck your work. The one thing that bothers me about LLM coding¹ is that the vast majority of people doing it don’t understand the issues. Those who do check their work and believe everyone else also does are immensely naive and will one day be severely bitten² by bad unreviewed code written by an LLM. ¹ Not calling it “vibe coding” to not go into pedantic definition discussions. ² As will we all.
- ge96 2y agoFunny while getting high would make me creative in the past (draw) I could not do anything hard like writing logic, I also used to think my dumb ideas were good so yeah I don't do it anymore
- frou_dh 2y ago"Vibe coding" seems like one of those things where there's way more people complaining about the concept than there ever were people actually promoting it in the first place.
- anonzzzies 2y agohttps://hn.algolia.com/?dateRange=all&page=0&prefix=true&query=vibe%20coding&sort=byDate&type=story https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que... https://hn.algolia.com/?dateRange=all&page=0&prefix=true&query=vibe%20coding&sort=byDate&type=comment https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...
- ziddoap 2y agoYes, there are results for people saying "vibe coding" on HN. I don't feel like reading the ~500 or so mentions of it to tally which ones are people promoting it vs. which are people complaining about it. Do you have a summary of your results? The first page seems mostly to be people complaining.
- intuitionist 2y agoyou know you could probably put them into some kind of language model to tally promotion vs complaints you could probably even knock together a script to do that in fact you might be able to get a language model to knock together such a script with a bit of iteration
- api 2y ago> ... seems like one of those things where there's way more people complaining ... than there ever were people actually promoting it in the first place. The entire social and political discourse since around 2016.
- Cthulhu_ 2y agoIt's going to be rage bait at this point.
- alabastervlog 2y ago> he was angry in the 80s in my parents living room Yikes, how bad was your parents’ living room?
- anonzzzies 2y agoMy father was a commercial guy (and a good programmer) who wanted to sell development services to companies, Dijkstra didn't really like this idea, especially if it was done in a way that badly educated (...) people would write not proven correct code was distributed to the clients, making the world worse.
- desdenova 2y agoThat's exactly what ended up happening.
- jonnycat 2y agoLooking back, they were both right!
- eikenberry 2y ago> wanted to sell development services to companies So he wanted to start a contracting service? Contractors are famous for writing piles of untested, spaghetti code that only kind of works but they've finished it by then and the contract is over. Then some poor sap gets stuck trying to maintain it. Probably one of the worse ways businesses acquire custom software.
- anonzzzies 2y agoIt is how most software is written and indeed, often badly. But how do 'businesses acquire custom software' otherwise? Most in house employees suck as well. So what's the other ways?
- smusamashah 2y agoWhat exactly was he angry at?
- anonzzzies 2y agoPeople writing software without proper foundations of logic and proofs. Which was by then quite 'common' (now it's normal of course).
- deleted 2y ago[deleted]
- miroljub 2y ago> a pyramid of shite Why do some people use such abominations like "shite" or "shoot" instead of just using "shit"? C'mon lads, everyone knows what you want to say, why not just say it?
- osigurdson 2y agoPeople can use whatever word they want.
- anonzzzies 2y agoSome people don't live in the US woooow... In the UK and especially certain parts, shite is the actual word to use. Shite is definitely not the same as gosh or shoot. It's (more) vulgar as shit but our own. I personally also don't like gosh or shoot as we all know what you mean, but this is not that case, look it up.
- dpassens 2y agoShite isn't a euphemism like shoot, it's a synonym of shit.
- bena 2y agoI'd imagine he's British. "Shite" seems to be the spelling favored by the British. Much like arse/ass
- voidUpdate 2y agoWe use both, in different circumstances
- JimDabell 2y ago“Shite” isn’t a minced oath. It’s a different word to “shit” with a different etymology. Same as “feck” is a different word to “fuck”, even if they are used in the same way.
- School-Cotton 2y agoThat’s not true at least according to etymonline. Got a source?
- deleted 2y ago[deleted]
- cloogshicer 2y agoLamport argues that we should separate the "What?" from the "How?". I wonder though, for most problems, doesn't the "What" and the "How" of a program somewhat merge? For example, are performance considerations part of the "What", or of the "How"?
- osigurdson 2y ago>> separate the "What?" from the "How?" This is a huge mental error that people make over and over again. There is no absolute "what" and "how", they are just different levels of abstraction - with important inflection points along the way. The highest level of abstraction is to simply increase happiness. Usually this is accomplished by trying to increase NPV. Let's do that by making and selling an accounting app. This continues to get more and more concrete down to decisions like "should I use a for loop or a while loop" Clearly from the above example, "increase NPV" is not an important inflection point as it is undifferentiated and not concrete enough to make any difference. Similarly "for loop vs while loop" is likely not an inflection point either. Rather, there are important decisions along the way that make a given objective a success. Sometimes details can make a massive difference.
- glass_of_water 2y agoI could not agree more. When trying to understand the distinction between "declarative" and "non-declarative" code, I came to the same conclusion: it's all relative.
- MrMcCall 2y ago"not 2, not 1" is the old Zen abstraction for deeply interrelated, but separate concepts. The What puts constraints on the How, while the How puts constraints on the What. I would say the the What is the spacial definition of the algorithm's potential data set, while the How is the temporal definition of the algorithm's potential execution path.
- stonemetal12 2y agoIsn't that more or less what all abstraction is about, getting an interface that allows you to work with the "what" but not the "how". When I call file open, I get the "what", a file to work with, but not the "how", DMA access, Spinning rust, SSDs, could be an NFS in there who knows. Yes, the "hows" have impacts on performance. When implementing or selecting the "how" those performance criteria flow down into "how" requirements. As far as I am concerned that is no difference from correctness requirements placed on the "how". Coming from the other direction. If I am hard disk manufacturer I don't care about the "what". I only care about the "how" of getting storage and the disk IO interface implemented so that my disk is usable by the file system abstraction that the "what" cares about. I may not know the exact performance criteria for your "what", but more performance equals more "whats" satisfied and willing to use my how.
- flohofwoe 2y agoBah that old thing again. FWIW the demo scene 'coders' call themselves that with pride, and usually those are often also brilliant 'programmers' and 'software engineers'. Coder, programmer, software engineer call yourself whatever you want, the point is to make a computer do what you want it to do.
- deleted 2y ago[deleted]
- KingLancelot 2y ago[dead]
- haswell 2y agoBuilding a bridge and building a sand castle are two entirely different things. Each impressive in their own way, but clearly there is a difference both in terms of the skills required and the outcomes enabled. I think the specific term used matters less than the ability to distinguish between different types of building things. If you want to build a bridge, you’re not going to hire the sand castle builder if sand castles are all they have built.
- johnisgood 2y agoYes, using a browser is different from writing a program, and there is a difference between "writing (or copy pasting) a script" and [...].
- 9rx 2y agoIn this case they all refer to building the same thing, but at different steps in the process. Theoretically each step could be carried out by a different person, but in modern practice it would be quite unusual to do so – which is why they can be, and are, used interchangeably. If someone is doing one of them it is almost certain they are doing all of them.
- netdevphoenix 2y agoImagine if people started calling constant functions, programs methods, etc. Words have meanings. Coder does imply that the key thing of those people is producing code the same cows make milk. Imagine calling an accountant a typist because the point is to make the computer do what you want it to do.
- linuxftw 2y agoI made it through the first 28 minutes of the video. Nothing of substance. Perhaps there's some grand point he made at the end, but there's no way to represent negative infinity in most programming languages.
- vages 2y agoAt around 32 minutes, he explained that a sufficient implementation of negative infinity would be the smallest possible value representable by the data type (e.g. 32 bit integers).
- neuroelectron 2y agoi.e. a binary flag or two. as is ISO
- linuxftw 2y agoThat's just moving the problem elsewhere. Since the smallest possible value is a possible value, then it may be present in the array, or it may not actually be present in the array. The caller would have to determine which case is which by testing for the length of the array, which if done, negates the entire utility of returning the smallest possible value.
- MITSardine 2y agoHe sure takes his time! I stopped (for now) at 32min when he skipped the least trivial step to showing his invariant holds. It's fairly trivial too, some element leaves B and is max'd against x, max of those two things is conserved. I don't know why he skipped it. It's a little mean spirited, what with the "you'll get replaced by LLMs if you can't solve it" comment. Anyways, it's often like this with these experts, some are so far in their own worlds, they no longer have any notion of what other people understand, so they either over or under shoot the complexity of their talks drastically. Complete with a trivial mistake where max is replaced by min in the numerical application, à la Grothendieck's prime 57. At least this chap wanted people to understand his talk.
- indymike 2y agoI'm pretty sure I can't program without coding, and likewise, I'm pretty sure I can't code without programming. This is a lot like guitarists arguing about "playing" vs "noodling".
- wavemode 2y agoI think the distinction is evident in the words themselves. Coding creates code, programming creates programs. If you write code but it doesn't create a program (i.e. you are just recording data) then you're coding but not programming. Likewise, if you create a program without writing any code (for example, the way a pilot programs routes into his nav computer, or the way you can program a modern thermostat to have specific temperatures at specific times of the day) you're programming but not coding.
- netdevphoenix 2y agoThank you! I am beyond tired of hearing people call programming "coding". I always it was like calling journalists or book author typists.
- 9rx 2y agoTypist still implies human involvement, whereas compilers supplanted the need for coding ages ago. But when words are no longer useful tech people love to resurrect them into new uses, so, ultimately coding and programming have become equivalent terms.
- fuzzfactor 2y agoThis is so true, it took me a while to get used to it. If you started in the punch-card days, Coders were well-established. They were the ones who punched the cards, that was pretty much the proper job description. They operated the keypunch machines in the way they saw fit to get the most out of the electronics in their own domain. With coding pods, quality control routines, the whole nine yards. By the 1970's it was recognized as a declining technology need, there were still thousands of Coders anyway because jobs were scarce, but fewer every year. No matter what direction people may want to migrate the meaning, that's the real root across the computer industry regardless of whether it was almost forgotten out of disuse.
- mrkeen 2y agoThat's not the problem. Call the terms what you want. Your coworkers are doing the activity of coding without doing the activity of programming. By your book analogy, your coworkers are doing typing, not writing. So keep calling them typists until they start writing something.
- osigurdson 2y agoThe video is over an hour long, where does he state what the actual difference is? I assume it is just along the lines of "coding requires high level thinking, while programming does not". If so, the question becomes: who has a "programming" job today then? If the answer is "no one", then "programming" isn't an actual job and therefore fine to use either term.
- rpmisms 2y agoNot to be meta, but this talk and this discussion are insanely pedantic.
- cratermoon 2y agoAs I look around at the state of software development in the tech industry, I see a desperate need for more pedantry, not less. As a whole the industry seems bent on selling garbage that barely works, then gradually making it worse in pursuit of growth-at-all-costs. When nobody cares if their systems work in any meaningful way, of course they'll dismiss anything that hints are rigor and professionalism as pedantry.
- rpmisms 2y agoI'm not saying pedantry is bad per se, but I think it can be taken too far, which is happening here.
- neuroelectron 2y agoYes, I had to pump it through Gemini 3 times before I could really get what he was talking about. He spends the first 3 and half minutes just starting to frame the subject, which I gleaned from reading the transcript. I wonder if this is just his academic background or a long career of billing by the hour. Probably both.
- MrMcCall 2y agoMaybe my never using LLMs means I can still understand a talk, even one as poorly recorded and delivered as this one was. > Probably both. Maybe neither. Maybe PEBCAK.
- neuroelectron 2y agoYou watched the whole hour?
- 2y ago
- rustybolt 2y agoHacking isn't coding isn't programming isn't software development isn't software engineering. But in the end many people use these terms mostly interchangeably and making a point of the differences between the definitions you personally use is rarely a productive use of time.
- MortyWaves 2y ago[flagged]
- MrMcCall 2y agoThe best, IMO, version of the talk's program has a signature (as expressed in my ad hoc pseudo-typed-python): def getHasMaxAndMaxOfIntArr ( intArr :int[] ) -> ( hasMax :bool , maxV :int ) : where hasMax is false iff len( intArr ) == 0 and maxV is only meaningful if haxMax is true LL is a mathematician, which is the problem here ;-) because -Inf for the return value, for when there are no elements, is semantically different than if the array has elements and they're all -Inf. That's why exceptional conditions must be coded as a separate piece of result data. Things must be as simple as possible, but not simpler.
- dphnx 2y ago[flagged]
- kccqzy 2y agoAn undergraduate mathematics professor of mine liked to use the word coding to refer to any act of transforming concepts into a more precise and machine readable form. Not just writing what you want a computer to do in a programming language, but also encoding data. The word "encode" should make this clear: we are turning something into code. Right afterwards, he drew some binary trees on a blackboard and asked us to come up with a coding scheme to turn these differently shaped binary trees into natural numbers. That means defining an injective function from the set of binary trees to the set of natural numbers. Coding is too ambiguous a word and I don't really use it much.
- h4ny 2y agoI don't want to comment on this without giving the source a fair go, but between knee-jerk reaction to whether or not it's time-wasting pedantry and reading directly off slides without providing any real value, I find it hard to even try to make myself give it a chance. I tried skipping to the questions first to see if there is anything more valuable but it hasn't changed my mind. Would love to know if I'm missing something from people who find this valuable.
- WillAdams 2y agoInteresting takeaway (paraphrased): >Algorithms are not programs and should not be written in programming languages and can/should be simple, while programs have to be complex due to the need to execute quickly on potentially large datasets. Specifically discussed in the context of concurrent programs executing on multiple CPUs due to order of execution differing. Defining programs as: >Any piece of code that requires thinking before coding >Any piece of code to be used by someone who doesn't want to read the code Apparently he has been giving this talk for a while: https://www.youtube.com/watch?v=uyLy7Fu4FB4 https://www.youtube.com/watch?v=uyLy7Fu4FB4 (previous discussions of it here?) Interesting that the solid example of simplifying finding the smallest item in a set to finding the smallest value equal to or less than that value and starting the search with the value negative infinity was exactly "Define Errors Out of Existence" from John Ousterhout's book: https://www.goodreads.com/book/show/39996759-a-philosophy-of-software-design https://www.goodreads.com/book/show/39996759-a-philosophy-of... as discussed here previously: https://news.ycombinator.com/item?id=27686818 https://news.ycombinator.com/item?id=27686818 (but of course, as an old (La)TeX guy, I'm favourably disposed towards anything Leslie (La)mport brings up)
- MrMcCall 2y ago> starting the search with the value negative infinity But then there is no differentiation between the result of the empty set and a set containing only negative infinities. I consider them separate conditions and would therefore make them separate return values. That's why I would prefer returning a tuple of a bool hasMax and an int maxV, where maxV's int value is only meaningful if hasMax is true, meaning that the set is non-empty. Another way of doing such would be passing in an int defMax that is returned for the empty set, but that runs into the same problem should the set's actual max value be that defVal. Anyway, I typed it up differently in my other toplevel comment in this thread.
- ndriscoll 2y agoAbstractly dealing with a problem where there's already a negative infinity is no problem. e.g. you can just add another negative infinity that's even smaller. That negative infinity can also be your error value; concretely you might do that by writing a generic algorithm that operates on any Ordered type, and then provide an Ordering instance on Result[E,A] where an E is less than all A. `A` could be some extended number type, or another `Result[E,A']`, or whatever thing with its own `Ordering`.
- dkarl 2y agoReminds me of: "People think software development is just writing code. But it isn't just writing: it requires planning, experimentation, research, and consideration of style and structure." Writers everywhere: "Excuse me?" I'm tired of all these bullshit attempts to establish one word for doing it poorly and a different word for doing it well. It's a dumb idea that teaches nobody anything and does nothing to raise the level of professionalism in the industry. Let's take a common word that people use to describe what they do and declare it to be pejorative; that'll show them! I'm disappointed that somebody with such extraordinary theoretical achievements would lower himself to such empty corporate consultant level rhetorical bullshit. I'm sure the talk is fine, but right now I feel like I don't need to listen to it.
- neuroelectron 2y agoLeslie Lamport's SCaLE 22x Keynote: Think, Abstract, Then Code Lamport argued for a fundamental shift in programming approach, emphasizing thinking and abstraction before coding, applicable to all non-trivial code, not just concurrent systems. Abstraction First: Define an abstract view (the "what" and "how") of your program before writing code. This high-level design clarifies logic and catches errors early. Focus on ideas, not specific languages. Algorithms != Programs: Algorithms are abstract concepts; programs are concrete implementations. Executions as States: Model program executions as sequences of states, where each state's future depends only on its present. This simplifies reasoning, especially for concurrency. Invariants are Crucial: Identify invariants—properties true for all states of all executions. Understanding these is essential for correctness. Precise Specifications Matter: Many library programs lack clear specifications, hindering correct usage, particularly with concurrency. precise, language-independent descriptions of functionality are necessary. Writing is Thinking: Writing forces clarity and exposes sloppy thinking. Thinking improves writing. It's a virtuous cycle. Learn to Abstract: Abstraction is a core skill, central to mathematics. Programmers need to develop this ability. AI for Abstraction? The question was raised whether or not AI models could be utilized for abstract thought processes in programming, due to their seeming nature. The core message: Programming should be a deliberate process of thoughtful design (abstraction) followed by implementation (coding), with a strong emphasis on clear specifications and understanding program behavior through state sequences and invariants. Thinking is always better than not thinking.
- neuroelectron 2y agoKey points: Algorithm vs. Program: An algorithm is a high-level, abstract concept implementable in various programming languages. We should focus on the ideas, not specific languages. Concurrency Challenges: Concurrent programs are hard due to thread interleaving, leading to numerous possible executions. Debugging is unreliable, and changes can expose hidden bugs. Abstraction is Key: Find an abstract view of the program, especially for concurrency, describing how threads synchronize. This higher-level thinking is crucial before coding. All programs: any piece of code that requires thinking before you write code. What and How: For most programs, write both "what" the program does and "how" it does it. Precise languages (like Lamport's TLA+) are vital for verifying concurrent programs but not essential for all. Trivial Example: A simple "max element in array" function illustrates how abstraction simplifies even trivial problems. It revealed a bug in the initial "what" (handling empty arrays) and led to a more robust solution using mathematical concepts (minus infinity). Executions as State Sequences: View program executions as sequences of states, where the next state depends solely on the current one. This simplifies understanding. Invariants: An invariant is a condition true for all states of all executions. Understanding invariants is crucial for proving program correctness. Termination: The example program doesn't always terminate, showcasing the need to consider termination conditions. Real-World TLA+ Usage: Amazon Web Services uses TLA+ to find design flaws before coding, saving time and money. The Rosetta mission's operating system, Virtuoso, used TLA+ for a cleaner architecture and 10x code reduction. Abstraction Beyond Concurrency: Even when the "what" is imprecise (like a pretty-printer), abstraction helps by providing high-level rules, making debugging easier. Thinking and Writing: Thinking requires writing. Writing helps you think better, and vice versa. Learn Abstraction: Abstraction is central to math. Programmers should learn to think abstractly, possibly with guidance from mathematicians. Why Programs Should Have Bugs: Library programs often lack precise descriptions, making them hard to use correctly. This is especially true for concurrent programs where input/output relations aren't sufficient. Lamport emphasizes that programming should be about thoughtful design through abstraction before coding. He advocates viewing executions as state sequences, understanding invariants, and using writing to clarify thinking. He also highlights the importance of precise specifications, especially for library programs. He also touches on the issue of whether or not it is better to outsource abstract thinking to AI.
- taeric 2y agoThere is a good article in the current ACM about how we don't agree on what abstractions are; and in spite of that, they are very useful. Point being that we largely agree where the important points are. We don't really agree on exactly what they are, or why they are important. In that vein, I think people will often talk about the same general topics with massive agreement that they are the important ones. All the while not actually agreeing on any real points. You will find lots of inspiration. Which, I think, has its own value.
- Brajeshwar 2y agoOh! Oh! About 15+ years ago, I once wrote an article asking, “Are you a Programmer or a Coder?” after reading and inspired by a paper Newspaper article. It even became popular on HackerNews and elsewhere. I got threats of many dire consequences and the like. I ignored and I was OK. Just like I sometimes get threatening emails about my posts on HackerNews, that I ignore and am advised to ignore. ;-) [I haven’t watch the video in the submission above.]
- vonneumannstan 2y agoProgramming without Punch Cards isn't programming
- mattmanser 2y agoI wanted to like this talk. I started to like this talk. But when he jumps from talking about a problem in clear language to mathematical language, I felt he's gone so wrong. For me, there's no way "Set x to the smallest number >= to all elements of A" is clear to almost anyone in the world. And I was educated in formal logic at uni, taking an advanced, 3rd year course with like just 5 out of the 20,000+ odd students at a top UK uni. So a tiny percentage of a small percentage of the population have ever got exposed to that sort of logic. The (massive) mistake he's made is thinking logic and language is clear and concise. That changing the words somehow magically changes the meaning. It's not. I'm sure it works for him. It would not work for most of us that need to communicate clearly with other people, including programmers who are not aware of the full meaning of that sentence. It's not how most humans work, think or communicate. Part of many programmers job is to use language that is understandable. Using a specialist language of maths does not make the requirements any clearer for most people, just for mathematicians. Worse still, the sharp listeners amongst you would have noticed that having completely rewritten his "what" he almost immediately he said "most mathematicians agree that the smallest number...". Notice the "most". So his rewritten "what" is not even right for all mathematicians.
- mrkeen 2y agoPerhaps you agree with Lamport even harder than Lamport does. If your team is going to get together and implement "Set x to the smallest number >= to all elements of A", and you feel that that it's an ambiguous or incomplete description, then it's up to you guys to formalise what is meant - a programming activity - rather than just coding it. If it is as poorly-specified as you suggest, then someone on your team will think that they have correctly implemented it (tests and all!) but it will give the wrong answer in production.
- lokar 2y agoHe has written and spoken a number of time about the need for more mathematical (which I think would include logic and metalogic) education and thinking in CS If all programmers/ software engineers had a reasonable level of mathematical formalism (could understand and write proofs), and some amount of formal logic, that would be much better. I think that is his position Also, understand this is coming from one of the most prominent living people in the field. People ask him for his opinion about this stuff, so he shares it.
- rubiquity 2y agoI'm enjoying the irony of the comments section being primarily occupied by people who don't get the message while simultaneously being AI maximalists. Leslie Lamport's entire point is that developing abstract reasoning skills leads to better programs. Abstraction in the math and logical sense lets you do away with the all the irrelevant tiny details, just as AI-guided software development is supposed to do. What's sad, but to be expected with anything involving rigor, is how many people only read the title and developed an averse reaction. The Hacker in Hacker News can be a skilled programmer who can find their way around things. Maybe now it's more of the hack as in "You're a Hack", meaning you're unskilled and produce low quality results.
- jmcantrell 2y agoI'm curious about the part where LL is talking about how to prove the 3 parts of the max() example's invariant (around 31:46) and omits #2. Did you all understand why this condition holds or are you now scared of AI replacing you, like me?
- charliereese 2y agoMy favourite difference is that coding has the letters c and d (which in my opinion are inferior) whereas programming has p, r, g, a, and m (which in my opinion are underrated). I dislike that they both have o, i, n, and g. I wish this distinction was touched on as well.
- Blackstrat 2y agoHaving not listened to the presentation, his content may be different. But, throughout my career this dichotomy has played out again and again. Coders learn the syntax of the language, usually at home and sometimes on the job. Maybe they built their own website as a teenager. They don't necessarily learn the paradigm related to the language. Frequently they apply the paradigm of another language to the new language (if any paradigm at all), e.g., their VB looks like 'c' or COBOL, their SQL is painful to read and worse to run. They wouldn't know a linked list or a btree if it bit them in the butt. And forget about DeMorgan or boolean logic. Reentrant, recursion, concurrency, stack, heap, coupling, cohesion,... Not happening here. But hey, they made the computer do what they wanted it to do. Just not well. Just not reliably. Just not sustainably. And certainly not maintainable. Programmers on the other hand, usually have an education that facilitates their coding. Yes, some learn it themselves and quite well. But, they learn more than the syntax of the language. They learn algorithms. They read - a lot. When I started decades ago, it was Dijkstra, Parnas, Yourdon, et al and others I've forgotten. I've been retired for a number of years and don't keep up with the languages, literature, etc. like I once did. But, guess what, the average coder doesn't either nor do many of the programmers. Part of the problem is that far too many people enter the industry without a realistic view of what the career entails, its difficulty, the effort expected, and so forth. They are chasing the money. Hence, a few years down the road, they are frustrated and dissatisfied and want a change. It's not for everyone anymore than becoming a doctor would be. This brings to mind the thread a couple of days ago about the "worst programmer". The correct answer, IMO, should always be yourself and you should be striving continuously to rectify that. Otherwise, maybe software isn't the right thing for you.