When Will the Last Line of Code Be Written?
blog.brightwork.io
blog.brightwork.io
For example, in 1950, you would write a lot of code to accomplish what you can do today with a pivot table in Excel (which we don't consider to be "coding"). Page layout you'd write as code in 1996 is now "data" encoded in CSS.
At the same time, things that used to be major code concerns have been abstracted into the underlying systems. Garbage collection, privilege separation, caching, and so on continue to move lower in the stack. The trend toward programming languages that more natively support asynchronicity is another great example.
The better question to ask is: What tasks that we accomplish with code today will be accomplished with data tomorrow?
"Eventually" all of it? (mind the quotes)
If you save the config of a neural network, the "meat" of the NN so to speak, it's all "data" (matrices), but OTOH it's "code" (it tells the NN what to do).
I'd argue that writing anything like (State, Action) -> NewState transitions is, in fact, coding, even if it's done in a way that's much more declarative than we're used to.
I think it's definitely "programming", though I'm willing to agree that "coding" seems to imply more typing text in some 80-column format and less clicking. People certainly call doing-stuff-with-LabView "LabView Programming" and it involves a similar interface.
Two other thoughts a) Do you think tools like this will ever actually replace all coding? My experience with graphical programming has been that it's great for simple things, but you often reach a point where it'd be way easier to write it as code, particularly if you're doing something the designers haven't anticipated.
b) I was actually interested in the contrast between ANNs, where the functional part is learnt from data--in part because we have no idea how to actually write a decent object recognizer from scratch--and something like a video game where you're necessarily designing/programming/coding up a creative idea that you have.
start of my career, >80% of my code was directed to memory management--allocating it, re-pointing it it, and de-referencing it under what seem now like impossibly tight optimization boundaries. I still work in compiled languages, but that fraction is now about 5%. Compiler & os optimization, hardware, etc. are the obvious reasons. Plenty of other challenges--some new some old, some completely contrived quickly occupied that attention vacuum.
Ahem. There is no separation between data and operation. It's what you learn if you play around with Lisp or Prolog, or any kind of language that doesn't start with "here's some variables, here's some functions that operate on them".
From the article:
> "The Qeng Ho's computer and timekeeping systems feature the advent of "programmer archaeologists": the Qeng Ho are packrats of computer programs and systems, retaining them over millennia, even as far back to the era of Unix programs (as implied by one passage mentioning that the fundamental time-keeping system is the Unix epoch)."
Ikea's existence didn't wipe out woodworking.
I bet you'll be able to go to a closed course and drive there though, for a cost. :)
So by the time a law passes that forbids non-autonomous driving, it won't be a "fascist government" but your own countrymen who will take your "basic freedom" away.
But don't worry, I was using the "you" figuratively, by the time this happens, I don't think any of us will be alive. And, of course, there is always the off-chance that someone codifies in the constitution the right to drive a car, assuring that future generations have the freedom to kill themselves in the roads as we proudly do today.
The roads will just be for hobbyists who like to drive their own cars (and write their own code,) and probably transportation of heavy materials.
In a short phrase, someone has to go to jail / get in to trouble.
Our strategy has been to write stacks of translators to bring the machine's internal format nearer to our own.
The last line of code will be written when we develop translators for languages near enough to our own internal representations that we no longer require special training to learn the machine's representation. It won't make sense to call it 'code' anymore.
This kindred language/representation may be natural language (and maybe not), but if it were I'd imagine there'd have to be a tight feedback loop in the machine's attempts to sort out ambiguities in a developer's specification. So, programming would turn into a conversation with a computer: you ask for something, it proposes a solution ("Thanks John! How's this?"—it'll probably be like that. Ugh.), you express your modifications, it proposes another solution etc.
That's my guess anyway.
I don't always see the need for a framework, but once you've gone through the process of learning the ins and outs of one, which does indeed take extra time the first time around, it's a familiar tool and can really speed things up when you re-use it in the future. Now if you try out a new framework on every new project, that's a different story...
For example, I ripped NHibernate out of a project because the SQLite database only had 6 tables. (Later reduced to 3 tables.) In this case:
- The original author used NHibernate incorrectly, making the product 10,000x slower then it should be
- There's a high learning curve to NHibernate that all newcomers to the project must go through
- There's a risk of having to work around an NHibernate bug
- We have to ship NHibernate and adapt to new versions or potential security holes
- The lawyers have to approve of the NHibernate license
- A small, infrequently updated xml file using built-in serializers is much easier to work with then SQLite + NHibernate.
Sure, we probably have about 1000 lines of DAL code instead of 200 lines of hbm files; but it's DAL code that's bug-free and has no external dependency risk.
Would I use NHibernate, or a different DAL framework, in a different context? Sure! If we had many more tables, and changed our schema frequently, it would be the correct thing to use. It's all about understanding when to use a framework versus a library.
It's even easier when hiring because a big portion of your training is already done before the person is hired and they are knowledgeable in said framework.
- Confusing design patterns with frameworks
- Using frameworks incorrectly
- Using a framework when a library is more appropriate
For example, Dependency Injection should start as a design pattern, and then a framework brought in based on the project's requirements. A couple of screens of "new" statements have very little learning overhead. No framework can define the way an application's modules relate with each other.
To me, the defining feature of a framework (as opposed to an ordinary library) is that it’s explicitly not compositional, not replaceable, and not a “good citizen” for interoperation. Doesn’t sound great.
But there is a valid reason to incur these costs: prefab solutions let you ship something basically good now. The same thing happens in game development: do you just write a game, reinventing a lot of architecture now, or do you choose an engine, working around its limitations later? It’s more of a business decision than a technical one.
You mean a Lisp optimizing compiler?
It's inevitable that this changes some day.
Probably a very distant day, but we must get to the point when we solved nearly half of all the problems that we can solve with software.
maybe shortly after.. :)