Yes, that is one of the reasons functional languages are getting popular: https://www.fpcomplete.com/blog/2012/04/the-downfall-of-imperative-programming With PHP and JavaScript being the most widespread (and still misused) languages we will not get there soon, however.
On Mon, Jul 8, 2013 at 10:57 PM, Michael Hale <hale.michael...@live.com> wrote: > In the functional programming language family (think Lisp) there is no > fundamental distinction between code and data. > >> Date: Mon, 8 Jul 2013 22:47:46 +0300 >> From: marty...@graphity.org > >> To: wikidata-l@lists.wikimedia.org >> Subject: Re: [Wikidata-l] Accelerating software innovation with Wikidata >> and improved Wikicode >> >> Here's my approach to software code problems: we need less of it, not >> more. We need to remove domain logic from source code and move it into >> data, which can be managed and on which UI can be built. >> In that way we can build generic scalable software agents. That is the >> way to Semantic Web. >> >> Martynas >> graphityhq.com >> >> On Mon, Jul 8, 2013 at 10:13 PM, Michael Hale <hale.michael...@live.com> >> wrote: >> > There are lots of code snippets scattered around the internet, but most >> > of >> > them can't be wired together in a simple flowchart manner. If you look >> > at >> > object libraries that are designed specifically for that purpose, like >> > Modelica, you can do all sorts of neat engineering tasks like simulate >> > the >> > thermodynamics and power usage of a new refrigerator design. Then if >> > your >> > company is designing a new insulation material you would make a new >> > "block" >> > with the experimentally determined properties of your material to >> > include in >> > the programmatic flowchart to quickly calibrate other aspects of the >> > refrigerator's design. To my understanding, Modelica is as big and good >> > as >> > it gets for code libraries that represent physically accurate objects. >> > Often, the visual representation of those objects needs to be handled >> > separately. As far as general purpose, standard programming libraries >> > go, >> > Mathematica is the best one I've found for quickly prototyping new >> > functionality. A typical "web mashup" app or site will combine >> > functionality >> > and/or data from 3 to 6 APIs. Mobile apps will typically use the phone's >> > functionality, an extra library for better graphics support, a >> > proprietary >> > library or two made by the company, and a couple of web APIs. A similar >> > story for desktop media-editing programs, business software, and >> > high-end >> > games except the libraries are often larger. But there aren't many >> > software >> > libraries that I would describe as huge. And there are even fewer that >> > manage to scale the usefulness of the library equally with the size it >> > occupies on disk. >> > >> > Platform fragmentation (increase in number and popularity of smart >> > phones >> > and tablets) has proven to be a tremendous challenge for continuing to >> > improve libraries. I now just have 15 different ways to draw a circle on >> > different screens. The attempts to provide virtual machines with >> > write-once >> > run-anywhere functionality (Java and .NET) have failed, often due to >> > customer lock-in reasons as much as platform fragmentation. Flash isn't >> > designed to grow much beyond its current scope. The web standards can >> > only >> > progress as quickly as the least common denominator of functionality >> > provided by other means, which is better than nothing I suppose. >> > Mathematica >> > has continued to improve their library (that's essentially what they >> > sell), >> > but they don't try to cover a lot of platforms. They also aren't open >> > source >> > and don't attempt to make the entire encyclopedia interactive and >> > programmable. Open source attempts like the Boost C++ library don't seem >> > to >> > grow very quickly. But I think using Wikipedia articles as a scaffold >> > for a >> > massive open source, object-oriented library might be what is needed. >> > >> > I have a few approaches I use to decide what code to write next. They >> > can be >> > arranged from most useful as an exercise to stay sharp in the long term >> > to >> > most immediately useful for a specific project. Sometimes I just write >> > code >> > in a vacuum. Like, I will just choose a simple task like making a 2D >> > ball >> > bounce around some stairs interactively and I will just spend a few >> > hours >> > writing it and rewriting it to be more efficient and easier to expand. >> > It >> > always gives me a greater appreciation for the types of details that can >> > be >> > specified to a computer (and hence the scope of the computational >> > universe, >> > or space of all computer programs). Like with the ball bouncing example >> > you >> > can get lost defining interesting options for the ball and the ground or >> > in >> > the geometry logic for calculating the intersections (like if the ball >> > doesn't deform or if the stairs have certain constraints on their shape >> > there are optimizations you can make). At the end of the exercise I >> > still >> > just have a ball bouncing down some stairs, but my mind feels like it >> > has >> > been on a journey. Sometimes I try to write code that I think a group of >> > people would find useful. I will browse the articles in the areas of >> > computer science category by popularity and start writing the first >> > things I >> > see that aren't already in the libraries I use. So I'll expand >> > Mathematica's >> > FindClusters function to support density based methods or I'll expand >> > the >> > RandomSample function to support files that are too large to fit in >> > memory >> > with a reservoir sampling algorithm. Finally, I write code for specific >> > projects. I'm trying to genetically engineer turf grass that doesn't >> > need to >> > be cut, so I need to automate some of the work I do for GenBank imports >> > and >> > sequence comparisons. For all of those, if there was an organized place >> > to >> > put my code afterwards so it would fit into a larger useful library I >> > would >> > totally be willing to do a little bit of gluing work to help fit it all >> > together. >> > >> >> Date: Mon, 8 Jul 2013 19:13:54 +0200 >> >> From: jane...@gmail.com >> >> To: wikidata-l@lists.wikimedia.org >> > >> >> Subject: Re: [Wikidata-l] Accelerating software innovation with >> >> Wikidata >> >> and improved Wikicode >> >> >> >> I am all for a "dictionary of code snippets", but as with all >> >> dictionaries, you need a way to group them, either by alphabetical >> >> order or "birth date". It sounds like you have an idea how to group >> >> those code samples, so why don't you share it? I would love to build >> >> my own "pipeline" from a series of algorithms that someone else >> >> published for me to reuse. I am also for more sharing of datacentric >> >> programs, but where would the data be stored? Wikidata is for data >> >> that can be used by Wikipedia, not by other projects, though maybe >> >> someday we will find the need to put actual weather measurements in >> >> Wikidata for some oddball Wikisource project tp do with the history of >> >> global warming or something like that. >> >> >> >> I just don't quite see how your idea would translate in the >> >> Wiki(p/m)edia world into a project that could be indexed. >> >> >> >> But then I never felt the need for "high-fidelity simulations of >> >> virtual worlds" either. >> >> >> >> 2013/7/6, Michael Hale <hale.michael...@live.com>: >> >> > I have been pondering this for some time, and I would like some >> >> > feedback. I >> >> > figure there are many programmers on this list, but I think others >> >> > might >> >> > find it interesting as well. >> >> > Are you satisfied with our progress in increasing software >> >> > sophistication as >> >> > compared to, say, increasing the size of datacenters? Personally, I >> >> > think >> >> > there is still too much "reinventing the wheel" going on, and the >> >> > best >> >> > way >> >> > to get to software that is complex enough to do things like >> >> > high-fidelity >> >> > simulations of virtual worlds is to essentially crowd-source the >> >> > translation >> >> > of Wikipedia into code. The existing structure of the Wikipedia >> >> > articles >> >> > would serve as a scaffold for a large, consistently designed, >> >> > open-source >> >> > software library. Then, whether I was making software for weather >> >> > prediction >> >> > and I needed code to slowly simulate physically accurate clouds or I >> >> > was >> >> > making a game and I needed code to quickly draw stylized clouds I >> >> > could >> >> > just >> >> > go to the article for clouds, click on C++ (or whatever programming >> >> > language >> >> > is appropriate) and then find some useful chunks of code. Every >> >> > article >> >> > could link to useful algorithms, data structures, and interface >> >> > designs >> >> > that >> >> > are relevant to the subject of the article. You could also find >> >> > data-centric >> >> > programs too. Like, maybe a JavaScript weather statistics browser and >> >> > visualizer that accesses Wikidata. The big advantage would be that >> >> > constraining the design of the library to the structure of Wikipedia >> >> > would >> >> > handle the encapsulation and modularity aspects of the software >> >> > engineering >> >> > so that the components could improve independently. Creating a >> >> > simulation or >> >> > visualization where you zoom in from a whole cloud to see its >> >> > constituent >> >> > microscopic particles is certainly doable right now, but it would be >> >> > a >> >> > lot >> >> > easier with a function library like this. >> >> > If you look at the existing Wikicode and Rosetta Code the code >> >> > samples >> >> > are >> >> > small and isolated. They will show, for example, how to open a file >> >> > in >> >> > 10 >> >> > different languages. However, the search engines already do a great >> >> > job >> >> > of >> >> > helping us find those types of code samples across blog posts of >> >> > people >> >> > who >> >> > have had to do that specific task before. However, a problem that I >> >> > run >> >> > into >> >> > frequently that the search engines don't help me solve is if I read a >> >> > nanoelectronics paper and I want to do a simulation of the physical >> >> > system >> >> > they describe I often have to go to the websites of several different >> >> > professors and do a fair bit of manual work to assemble their >> >> > different >> >> > programs into a pipeline, and then the result of my hacking is not >> >> > easy >> >> > to >> >> > expand to new scenarios. We've made enough progress on Wikipedia that >> >> > I >> >> > can >> >> > often just click on a couple of articles to get an understanding of >> >> > the >> >> > paper, but if I want to experiment with the ideas in a software >> >> > context >> >> > I >> >> > have to do a lot of scavenging and gluing. >> >> > I'm not yet convinced that this could work. Maybe Wikipedia works so >> >> > well >> >> > because the internet reached a point where there was so much >> >> > redundant >> >> > knowledge listed in many places that there was immense social and >> >> > economic >> >> > pressure to utilize knowledgeable people to summarize it in a free >> >> > encyclopedia. Maybe the total amount of software that has been >> >> > written >> >> > is >> >> > still too small, there are still too few programmers, and it's still >> >> > too >> >> > difficult compared to writing natural languages for the crowdsourcing >> >> > dynamics to work. There have been a lot of successful open-source >> >> > software >> >> > projects of course, but most of them are focused on creating software >> >> > for a >> >> > specific task instead of library components that cover all of the >> >> > knowledge >> >> > in the encyclopedia. >> >> >> >> _______________________________________________ >> >> Wikidata-l mailing list >> >> Wikidata-l@lists.wikimedia.org >> >> https://lists.wikimedia.org/mailman/listinfo/wikidata-l >> > >> > _______________________________________________ >> > Wikidata-l mailing list >> > Wikidata-l@lists.wikimedia.org >> > https://lists.wikimedia.org/mailman/listinfo/wikidata-l >> > >> >> _______________________________________________ >> Wikidata-l mailing list >> Wikidata-l@lists.wikimedia.org >> https://lists.wikimedia.org/mailman/listinfo/wikidata-l > > _______________________________________________ > Wikidata-l mailing list > Wikidata-l@lists.wikimedia.org > https://lists.wikimedia.org/mailman/listinfo/wikidata-l > _______________________________________________ Wikidata-l mailing list Wikidata-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikidata-l