23 Jan 2010

My Personal Programming Skills Enhancement Strategy Since January 2010 till ... I Come up With some Better idea

In the end source code is a series of bits that tells the computer, what to do. No matter, what the methodology, be it functional, OO, logic, procedure oriented, etc.

So, putting those 2 claims together, I'm looking for a NOTION, how to EXPRESS myself as concisely as possible, while keeping the rule set as simple and concise as possible. After I've figured that out (there are probably very many different possibilities), I can start to think about the compromises that are probably needed in order to use the currently existing technologies. For instance, I will probably need to use JavaScript for browser side software development, PHP for server side development, C++ for systems programming, etc.

So, it's a conquest for language development. And, by the way, doesn't the real, natural, languages pose exactly the same problem? As of January 2010 I think that they do.

It seems to me that predicate logic is quite inspiring, if just something similar could be defined for cases, where OO or loops or conditional sentences are used. May be one key-phrase is also “order-sorted logic”, whatever that means. (As of January 2010 I still need to learn the “order-sorted logic” stuff.)

So, finding a concise way to express myself is definitely something that I as a programmer need quite direly. I think that I'm not going to make it successfully without that knowledge, but the programming language that I have tried so far, mainly Ruby, C++, Java, Delphi, JavaScript, PHP, but also Prolog, a little bit of Haskell and Clean (and a bunch of others that I've just tasted a little bit), just “don't cut it”. I don't know Scala yet, but according to the introduction it seems to be just another morphism of the existing OO and functional technologies.

Now, one thing that I definitely do know is that the size of vocabulary that I'm able to remember is limited. This infers that the most concise solution, where one just assigns one number to a whole program or code block, is not usable by me.

The search for a solution is probably by trying to manually translate an existing, production, system to that concise version and to see, what constructs there exist. Practically, one tries to do some very wild refactoring, identify the common parts, etc., but without the limitation of a concrete syntax, as the syntax is the one that is being searched for. Also, for every part of the production system, one also analyzes the REASON, why the code segment is necessary, why it has been written in the first place and is it possible to just eliminate the reason, refactor the “reason” out of the code or to do the search for common parts in the context of the “reasons”. For instance there's no reason to install light switches to lights that are in places that do not receive any light from windows and are lit up by energy saving LED light bulbs.

It seems that the ideal specification for the new language is something that is not laborious to implement in the currently existing programming languages. It should be something like the ProgFTE specification. May be some kind of an interpreter that can be very easily and efficiently implemented in JavaScript, PHP, Ruby, etc. and then the software that has been written in that new languages can run truly everywhere. IN PRACTICE. For example, the Java runs only in places where the Java language developers have taken the great effort to port it to. I, for instance, do not always have the luxury of choosing a programming language by myself, because due to the amount of labor my software, very often, has to interface with some legacy parts or just parts that have been written by others or even by myself. Typical cases: GUI, network, sound, hardware access, file access, image file format reading, etc.