15 ms·
To make programming easier, first be conscious of what makes it hard (2014)
- b3morales 5y agoI don't understand why the article thinks it's reasonable for someone with literally 0 experience to develop an application with multiple features and integrations with other systems from scratch, on their own. The point about space age machines notwithstanding, this is inherently complex and skilled work. We don't expect someone who's never touched a chisel to be able to fabricate and install a full set of kitchen cabinets, either. And there's no shame in that -- they just need to spend time learning. Or they can do the "google -> stack overflow -> copy/paste" thing by going down to their local home goods store and buying some prefab particle board units and watching a YouTube video on how to hang them. (And again, no shame -- online video can be an excellent source of craft information.)
- philipswood 5y agoAgreed. Skill comes with practice, but the on-ramp is steep today, and seemingly getting steeper. Even while todays tools can do so more, I remember my first 16k microcomputer with nostalgia. It booted immediately and into a simple known state. If you got onto trouble you could switch it on and off again. It booted into a REPL, a ROM-based BASIC. The language was simple, immediate, and with accompanying manuals discoverable. It could immediately let you program things that seemed to matter to you; text, simple sounds and graphics where all easy. The first way to use it, and the first entry point it gave was programming it. You could load programs from disk, but it was obvious that they were things that could be made - and taken sometimes taken apart (although some where understandable, some weren't. And that was a prompt to learn more). The hardware was easy to get to, even if it wasn't easy to understand, some of it was visible (like the memory mapped display). I help juniors without a lot of technical background today and there seems to be books of lore to digest before getting to something tangible.
- commandlinefan 5y agoIt makes me wonder if attempts to simplify programming have actually made it harder. I remember Visual Basic: you couldn't ask for simpler than that. Want a button? Drag a button onto your form. Want tabs? Drag tabs. Want a list that contained entries from a database? Drag the list and specify the database. VB made trivial projects trivially trivial. But whenever you tried to apply it to any real-world scenario, you'd get stuck trying to infer all of the "hidden state" that the too-simple interface was trying to shield you from. I had the misfortune of working with the original no-code too, Salesforce, for a couple of years - in spite of the name, it's not all that "sales" focused; it's actually more a "VB for web-based enterprise applications" with a sales instantiation implemented in it. It had the same problems as VB, too - it was too simple for any actual problems. Simplicity was obtained by hiding details... that turned out to be crucial for basic business functionality (and don't even think about performance).
- bsder 5y ago> Salesforce, for a couple of years - in spite of the name, it's not all that "sales" focused; it's actually more a "VB for web-based enterprise applications" with a sales instantiation implemented in it. You know, this is the first time anybody has ever been able to explain to me what Salesforce actually does.
- perl4ever 5y agoI wonder if you are confusing Visual Basic with something else. As far as I know, VBA, VBScript, and VB.Net are "regular" Turing complete programming languages that can access anything on a Windows machine and not some sort of visual programming as such. The VBA editor is not up to modern standards, but it's pretty nice from the perspective of someone who started out in the 1980s with various MS Basics. The various forms of the language are not simpler than old fashioned Basic, but have a fair amount added. What fits your description more, in my experience, is Microsoft Power Automate, which is a sort of low/no code environment that is only slightly better that Malbolge IMO. It makes it incredibly difficult bordering on impossible to reuse logic.
- majormajor 5y agoIn some ways programming should be easier than carpentry like that. In either case, you don't know what you don't know, and you have to learn what's possible, what's practical, and what tools to use for what. But in carpentry you also have to practice physical skills. "I know this router will let me do what I want but I'm not able to hold it steady enough," say. You have to translate "what I want to build" into "here are the discrete components, joints, cuts, etc" but also there's a physical skill and ability needed to perform the actions. In programming, though, turning what you want to happen into statements the language can compile is purely a problem of that translation phase. There is a lot we can do in the language and environment to make that easier - consider all the overhead of a map operation in Java (with `.stream()` and `.collect()` and restrictions like "lambdas can't throw checked exceptions") vs a list comprehension in Python. A newcomer is going to be able to pick up the latter much more quickly. I don't think that looks like "0 experience -> complex app in one day" but I think it could be a lot easier than it is today. It's already a lot easier than it was 20 years ago.
- dkersten 5y ago> But in carpentry you also have to practice physical skills In programming you have to practice mental skills. That is, abstract problem solving, logic, bigger-picture-how-things-fit-together. There's a reason many beginners struggle with concepts like pointers or recursion/recursive data types. These things become second nature with practice, just like the physical skills do, but to a beginner who has not practiced such things, they're equally difficult.
- Jtsummers 5y agoPointers are a great example of accidental complexity. Outside of very specific domains, most people writing software never need pointers. Introducing them to the end user who just wants a way to track project status is a great way to bar them from actively participating in developing their own solutions. Forcing them to be beholden to the IT department, rather than empowering them to accomplish their goals.
- 5y ago
- karmakaze 5y agoYeah I was following long with the End User story and went Wow to myself when I saw 'lein', really? We'd first have to tell them there's this thing called Terminal or Command Prompt.
- jamii 5y agoMost of the tasks in the article can now be solved by tools like airtable or notion with minimal training. Certainly much less training than would be required to do the same thing using traditional programming tools. So not only is the problem reasonable, we are actually making progress.
- civilized 5y agoWhat is airtable capable of these days? Last I checked, years ago, it was mainly an easy way to build and maintain a database. To be fair, though, a lot of apps are just a database with a CRUD UI
- jamii 5y agoA shared database with permissions and forms covers most of the task in the article. Airtable also now has an event/workflow system and a ton of integrations and plugins for doing stuff like sending email. https://www.airtable.com/product/views https://www.airtable.com/product/views https://www.airtable.com/product/automations https://www.airtable.com/product/automations https://www.airtable.com/integrations https://www.airtable.com/integrations It's getting to the point where it can handle most of the internal software needs of a small-medium company and also has a ton of javascript hooks for covering that last 20%.
- rektide 5y ago> Much of the pain in programming is taken for granted. After years of repetition it fades into the background and is forgotten. The first step in making programming easier is to be con[s]cious of what makes it hard. I think there's an invaluable starting place here, & that we should all spend a lot of time writing down & identifying this. A huge amount of programming & it's difficulty lies in having your bearings. Knowing what you have, & having some sense of direction forward or destination. Being able to see & comprehend what is about us, what we have can be a challenge. Or one could be lacking a sense of what to do to progress forward. Or perhaps one doesn't really know where the code needs to have, doesn't have a good picture in mind of the object. The human mind wants to have the full model, of where we are, where to go, and where to end up: a view of the current structure, the operation to advance, which yields us a new structure. Programming is ultimately about consciousness, an understanding of the pieces of this allagmatic flow. Having good tools & environments that tell us what is about us, that show us the objects around, the processes/operations that are occuring, to let us know/predict where the state is going to end up, is a kind of meta-causal comprehension skill that programming rests upon. Trying to think of what is hard is good, but we also ought be trying to turbo-charge our exploration of what new capabilities instruments, tools & environments can do to augment our views & vantages of code, state, & their execution.
- kazinator 5y agoSpeaking of bearings, I'd introduce newbies to the Context Diagram: https://en.wikipedia.org/wiki/System_context_diagram https://en.wikipedia.org/wiki/System_context_diagram OK, that bubble in the middle is your program. How does it fit into the world? While drawing the context diagram, we should keep in mind two questions (at least): - is the bubble at the center of it necessary at all? Can we remove it, such the other pieces around it function just fine without it? Is it just a "middleman" that can be "cut out"? - if the bubble is necessary, does it have to be a computer program, or can it exist just fine as some non-computerized process? Can some of it be computerized, and some of it not? - if the computer program is necessary, does it have one that we make, or can we find an existing one? - if the program has to be one we make, or can we modify or extend another program we already made?
- zamfi 5y ago(2014) Today, writing actual code is the programming of last resort. Software like Airtable and other no-code tools would handle these examples without the need for some poor inexperienced programmer to write code from scratch using a bespoke IDE. I'd add that in 2014 there was another super-relevant Ko & Myers paper literally about what makes programming hard for users: https://faculty.washington.edu/ajko/papers/Ko2004LearningBarriers.pdf https://faculty.washington.edu/ajko/papers/Ko2004LearningBar... That paper is worth a read for everyone who wants to be helping novice programmers with new tools!
- haolez 5y agoI somewhat agree with you, but I've seen a lot of smart people struggle with Airtable and no code tools. I can't explain why.
- jandrese 5y agoTools like that try to tell you that they'll handle all of the complexity for you, but they do this by adding a whole new layer of complexity. So they tend to demo well but blow up in your face when you try to use the tool in anger. As soon as you're asking the system to do something the developer didn't consider you now have an additional layer of complexity to understand before you can even start to solve your original problem.
- haolez 5y agoThat's what I saw at my company: it looked great in theory, but in practice we need programmers to help fix (and sometimes create) the automation workflows.
- civilized 5y agoWould these people find it straightforward to program equivalent functionality from scratch?
- haolez 5y ago
- Animats 5y agoSometimes it looks like programming for banal tasks peaked with Visual Basic. How did the web environment get botched so badly that creating pages with GUI tools disappeared?
- ChrisLTD 5y agoMany folks are attracted to new tools and techniques rather than outcomes. And since our tools and techniques are constantly in flux, few reach a level of stability and maturity where a GUI tool would work well.
- anigbrowl 5y agoI think this is the right answer. I've been thinking about this a lot lately as I have friends and colleagues who are so non-technical that they can barely use a command line, so I find myself wanting to make tools for obscure purposes that would also be really easy to use. I liked VB back in the day for the ease to being able to throw together a simple GUI quickly though I don't miss the verbosity of Basic. There's a lot of RAD options available these days but few have hit that sweet spot of being relatively powerful while also accessible to first timers and bundled with a good variety of examples and helpers.
- Olreich 5y agoWix, Squarespace, etc.
- stupidcar 5y agoThere are myriad GUI tools targeting the web platform. If none have achieved the success of VB, it’s not through a lack of capability.
- wyuenho 5y agoFor a time Front Page and Dreamweaver existed and it spit out all kinds of proprietary code with weirdly named functions and classes. Generally, it's not for a lack of trying but the devs that get handed source code these tools generated had a hard time modifying it. When they succeeded, these tools had a hard time recognizing the manual changes devs made. So the tools were fighting with the devs all the time, and then the "pros" came in, and decided to hand code everything with text editors. Similar stories still happen with Wix and Squarespace. The web pages they generate are powerful, but also full of dead code that is only useful to the editors, not the end product.
- jamii 5y agoHi. I'm the author. Such nostalgia. With tools like airtable and notion around today, we're actually making substantial progress towards making simple tasks easy. These days I'm writing at https://scattered-thoughts.net/ https://scattered-thoughts.net/ and working on https://github.com/jamii/dida https://github.com/jamii/dida and https://github.com/jamii/imp https://github.com/jamii/imp. Same ideals, but backed by many more years of ~~failure~~ experience. Also still complaining about things https://scattered-thoughts.net/writing/against-sql https://scattered-thoughts.net/writing/against-sql and breaking things https://scattered-thoughts.net/writing/internal-consistency-in-streaming-systems/ https://scattered-thoughts.net/writing/internal-consistency-...
- ellis0n 5y agoAmazing works! Yeah, such nostalgia. What if Eve didn't close? For example, VCs invested 20M in a case.
- nighthawk454 5y agoOh cool, I enjoyed the posts on differential dataflow and incremental/streaming systems on your new site! If you don't mind my asking, how did you get into independent research?
- troelsSteegin 5y agoHow did you choose Zig for Dida, and would that be your language of choice if you were considering a rewrite? You're super clear [0] that Zig was better for you than Rust in this instance. [0] https://scattered-thoughts.net/writing/assorted-thoughts-on-zig-and-rust/ https://scattered-thoughts.net/writing/assorted-thoughts-on-...
- panzagl 5y agoDoes anybody have the inside baseball on what happened to this after YC got involved? It seems like there should be more of a lesson here than just to not back software kickstarters.
- jfax 5y agoThis is why I admired TempleOS, which confronted these some of these questions and tackled it from the ground up. Why should it be hard to program graphics to the screen? It shouldn't be more than one code include, if any. Why plaintext source code, and not hypertext? Etc.
- rawoke083600 5y agoYou the creator of TempleOS ?
- CRConrad 5y agoHardly. IIRC, he's dead.
- projektfu 5y agoI’m remembering Think Pascal, where most of the toolbox was pre-included. It also initialized a drawing window and a text console, so you only had to learn QuickDraw if you wanted to use it.
- akomtu 5y agoImo, programming isn't very different than assembling cars or jets. What makes it difficult is the uniqueness of every project: it's always a novel car engine, developed by a team who came up with a new combustion process, and it's a novel car frame with bespoke electronics that the engine needs to be hooked up to. Don't expect 12V from the battery: you'll need to build a custom adapter for it. Even the wheels aren't standard. Everything is in flux, every single component has its quirks, unexpected behaviors, and is constantly updated. Just attaching wheels needs the mechanic to be an expert in wheel and car frames manufacturing, because the unique steel recipe used to make this frame may be incompatible with this particular type of rubber. What would make programming easier is hardcore standardisation of everything, so wheels are always round, engines have standard bolt patterns and car frames have standard size room for an engine and wheels. What makes such standardisation difficult is the complexity of what needs to be standardized: nobody has enough mental capacity to fully grasp the software equivalent of the car engine and make a sound standard for it. This is why most standards are a mess of exceptions on hundreds of pages.
- trhway 5y agoWhat you describe though isn't a car building process, it is a Formula 1 team. In Formula 1 you get ahead by using non-standard everything, and even if there is a clear rule, the teams still try to stretch and loophole it to get advantage.
- H8crilA 5y agoSerious question: why make something you're good at easier for others? The only effect would be to depress your own salary.
- irjoe 5y agoThere's an inherent difficulty in making difficult things easy. I think we're more likely to improve the ergonomics of writing software rather than make it easier for others to translate business logic into code. I like to think that making software easier to write will just free up more capital to be spent on other software problems. I haven't seen many software projects where the client doesn't compromise features due to budget or time.
- H8crilA 5y agoYou're right, but "compromise features due to budget or time" happens in pretty much any industry. Take construction, everyone would like to have a larger house. And just to stick with construction, think of the salaries of the people involved, and why are they what they are. The person that makes the most in construction is the guy that trades the packaged MBSes because to even know what happens after you sign that mortgage document is not that easy to understand to the average Joe.
- moksly 5y agoBecause it’s a short sighted solution not to make it easier and to build consensus. The real threat to programmers isn’t going to come from easier tools it’s going to come from the failures of programmers and the ability for large companies to capitalise on it. I work in a non-tech organisation. We (and this is the strategical we) would like nothing more than to sign the keys of our IT empire over to Microsoft, IBM or whomever and simply use standard software because using custom software has been nothing but a three decade long story of failed, delayed and over budget projects. I’m from a programming background myself, and I never actually believed in standard software because it always sucked worse than the specialised software, but that is changing. Over the past 5 years we’ve replaced more than 25 independent solutions (and enough money that I’ve not had to cut down on staff because of it) by simply using Office365. We used to have a myriad of different project management tools, now they’re all handles by teams and planner which both seamlessly integrate to our ESDH system (public sector documentation and record keeping). We’ve kept our own programmers on staff, and they are busy, because we still handle quite a bit of internal data or services in Python and Powershell and we do a massive amount of RPA (robot process automation), but guess what’s now part of our Azure license. Because Microsoft recently pitched automation anywhere, which happens to be our branch of RPA software because we did it a little different than E&Y types recommend, but it’s like 5% of the license fee to run a municipality with 10.000 employees suite of RPA with Azure Auromation compared to what it would cost to do so in its competition. Which is just crazy. That will be the doom of programmers, and the shitty tools that lead to failed projects might be part of the reason. Maybe the market will move fast enough that it’s not an issue. It wasn’t an issue for web-developers when small businesses started being capable of buying a standard webshop for almost nothing, and as I mentioned we still employ our own developers. But I’d frankly be worried if I was young and not careering into some non-replaceable part of programming and even then, I think you might find that plumbers will earn more money than you in 10 years when the market is also saturated with all the people we are currently herding toward IT degrees because we need a few hundred thousand extra right now.
- zonabey 5y agoCLIs just need better tutorials and wrappers out there. If you've got a bunch of wrappers/helper methods for doing mundane tasks for your OS it should curb most of the frustration and inefficiency. Computers have always sucked it doesn't matter what OS you're using they're full of undefined behaviour. No one is employed to design the whole and make sure the development environment is integrated to the point where it's as easy as the writer wants it to be. Alternatively what you'll get too remedy this is some commercial tool that works in a very specific context and with a specific set of services and most likely won't interoperate with other stuff.