The title is a switcheroo: it implies that I am talking about general software development but I actually want to talk about specific software development around a single (significant) project. And the answer is probably “neither”.
Consider:
- You are a software engineer, you join a new company and get your new notebook.
- You are onboarded and there is a bunch of new things that you need to learn in order to be effective at your new job.
I want to think about the most efficient way to learn and get up to speed. Today, from what I have observed and/or built myself, we throw in new developers into a combination of documentation and tool installations, some GUI, some shell, and hope that over time they connect enough dots to do their job. But how do I discover the “technological tree” of a system? Has everything been neatly documented? And in the age of LLMs why would I start from the shell or GUI? Retool tries to do this for back office but is there Retool-for-developers? What would that look like? What does discoverability look in the age of LLMs? The success of ChatGPT and similar programs has proven that text is still exceptionally powerful for communicating with computers, if it’s no longer wrapped in arcane invocations. It is, in some ways, a return of the command line: do something, read output, react, rinse and repeat.
Earlier in the week, I wrote this to a friend:
Consider Workers/ESL/whatever on the edge. Edge (data centers dedicated to serving traffic located close to large populations of customers of customers) has existed for decades - let’s say late 90s. It took 20 years (2017) to productize a platform that would put imperative code on the edge (Cloudflare Workers, Lambda@Edge). I want to start thinking what is software development in 10 years from now and I want to (eventually) build toward that. What is programming like when AI is the first class citizen? Are we writing specs in a very high but still constrained language or natural language? Either way, how do we make it deterministic? Is model like a versioned runtime environment? Is there a place for an environment that integrates data, code and AI where AI statements (prompts) work on top of the metadata and data?
I keep thinking about Ruby on Rails console. I deeply dislike RoR and its “magical” properties - I’m a strongly typed, explicit code all the way kind of guy - but RoR really nails some things perfectly. Imagine such a console, armed with the whole view of the system and its data (not just db but operational data as well), with a built-in LLM (and other models) be capable of doing for us in training, building and operating systems?
When I look back at the development of the industry that I have witnessed, they were organic and there were no changes from first principles. Take Git for example. A wonderful tool… that is essentially a kludge of adding a transaction log on top of a directory structure. If we were building a system from the first principles, we would never do that: we would start from a real database and keep the code there.
So what does a development system and environment, built from first principles of the integration of data, distributed systems with heterogenous workloads, LLMs, heterogenous workloads look like?
Last modified on 2024-07-28