Create web apps without JavaScript, CSS, HTML and C#

One of the things about Phosphorus Five, is that it allows you to create fairly rich web apps, without knowing any JavaScript, HTML, CSS, or C# – Or any other server side backend language for that matter. You can get away with this because most problems you’ll encounter in your web apps are already solved in the framework. For instance, to show a login dialogue is one line of Hyperlambda. To create a datagrid wrapping your MySQL database is 7 lines of declarative code. To create an Ajax tree view that shows the folders on your (server) disc is another 27 lines of code. A modal window, another 5 lines of code. Ask the user to confirm some action, 3 lines of Hyperlambda. Since Hyperlambda “feels” more like YAML than C# or JavaScript, it doesn’t feel like you’re actually coding.

Ask yourself how many of your problems are unique to your app. Chances are most of the things you need to do, have been done by thousands of other developers previously, in thousands of apps. If this wasn’t true, why do we find so many answers to our questions when we’re stuck and we choose to Google our problems? Phosphorus Five takes advantage of that fact, and facilitates for making it extremely easy to create reusable code and components. In fact, when you create your web apps in Phosphorus Five, you don’t create a monolithic app – It’s simply impossible. What you end up creating, is a whole range of reusable components, that you can put into your current app, and your next app. Since I have already created a whole range of different apps with Phosphorus Five and Hyperlambda, ranging from webmail clients to IDEs, there’s a component in Phosphorus Five for most of your needs. This literally allows you to create your app, almost exclusively using pre-built components, with a close to zero code base.

According to rumours I heard once, Visual Studio contains roughly 1.5 million lines of code. Hyper IDE contains 2429 lines of code, if you don’t count the comments and spacing. Visual Studio contains 617 times more code than Hyper IDE. Obviously Visual Studio contains tons of features that Hyper IDE does not. However, most of those features are things you’ll never miss, and things you didn’t even realise was there. In fact, I doubt there’s a single person in this world, including the project manager on the Visual Studio team, that can even mention every single feature in VS. Secondly, Hyper IDE has its own unique traits too, which Visual Studio does not. For instance, the ability to use it from your phone, access it from any terminal, granting write access to users only for specific files, etc, etc, etc. Being roughly 10x faster and more responsive for most tasks of course, also obviously helps. Being a gazillion times easier to extend, is also an extreme advantage. In fact, there’s a name for apps such as Visual Studio, it’s not a very flattering name either. The name we use for such apps is “bloatware”.

When I built Hyper IDE I already had all the main components I needed. This was the reason why I didn’t need more than 2429 lines of code. I had a CodeMirror editor widget, since I had already created one for Hypereval. I had a tree view Ajax widget, to show the files on disc. I had a toolbar widget, which I had already used in many other apps. I had modal windows from before. Etc, etc, etc.

When you create an app in Phosphorus Five, you don’t need to create as much code as you’ll need to create when you use “whatever else”. First of all, because most of your problems, are problems I have already solved. Secondly, the problems that you’ll actually need to solve, is by default possible to solve such that when you have solved them, you can reuse your solution in your next project – Without creating much dependencies between your apps might I add. This allows you to solve at least 80% of your problem, sometimes 100%, without resorting to writing JavaScript, HTML, or CSS. This again allows you to create rich and highly advanced server-side functionality, without having to write code in PHP, C#, or any other server-side programming language for that matter.

Every time you reinvent the wheel, you are stealing from your employer

The above might sound drastic, but you as a developer have a cost. This is often an hourly cost. Implying if you do things you don’t have to do, you are indirectly stealing from your employer. You probably don’t intend to steal – However, your vanity and your “not invented here syndrome”, prevents you from seeing the truth. So you end up spending your employers money, to learn something, that is completely useless – Because you want to become the “best developer in the world”. This is literally stealing!

If you’re an average full stack software developer, ask yourself the following questions; How much CISC x86 assembly code do you know? How does the pipeline in the latest Intel CPU work? What is the L1 cache size of your web server? If you’re an average software developer, you’ll have no idea how to answer those questions. Sure, you can probably easily find the answers by using Google, if you need these answers. But the fact that you are now probably frenetically Googling trying to find the answers to the above questions illustrates my point. Below is a piece of code. If you don’t count its comments and spacing, there’s 27 lines of code in it.

/*
 * Creates a page with a tree widget in it, which displays
 * all the folders on disc.
 */
create-widget
  class:container
  oninit

    /*
     * Including Micro CSS file.
     */
    micro.css.include

  widgets
    div
      class:row
      widgets
        div
          class:col
          widgets
            h1
              innerValue:Tree view widget

            /*
             * This is our treeview widget.
             */
            micro.widgets.tree
              items
                root:/

              /*
               * This one will be invoked when the tree needs items.
               * It will be given an [_item-id] argument.
               *
               * We simply list the folders of the item the tree needs
               * children for here.
               */
              .onexpand
                list-folders:x:/../*/_item-id?value
                for-each:x:/@list-folders/*?name
                  split:x:/@_dp?value
                    =:/
                  add:x:/../*/return/*
                    src:@"{0}:{1}"
                      :x:/@split/0/-?name
                      :x:/@_dp?value
                return
                  items

Here is what it results in …

The only thing you need to know about the above code, is what it does, when to use it, and that it works! It’s secure, it’s extremely efficient on bandwidth, and it shows your folder structure on your disc. The same is true for your CPU. You don’t need to worry about how large its L1 cache is. You only need to know that it works. If you can understand how the above [.onexpand] Hyperlambda work, you can easily change it, to make it show other things, besides your folders.

In fact, if the above wasn’t true, the idea of “encapsulation” would be meaningless. You already use thousands of things you have no idea of how works. For instance, what is the implementation of System.String’s Clone method? I’ll give you a hint “return this;”. Now explain to me why that works, and doesn’t create problems if the same string is shared among multiple threads … 😉

99.9% of the world’s developers cannot answer the above question, without resorting to Google …

Sure, you could probably create your own custom tree view, using jQuery, PHP, CSS, JavaScript and C# etc – However, that would take you (at least) a month. It would contain thousands of lines of code in both JavaScript, CSS and C#/PHP. That month is a lot of money for your employer. Why would you want to do that, when all you need to do is to spend 5 minutes on creating 27 lines of code? Why would you spend your employer’s money basically for nothing, resulting in that your employer might go bankrupt, having to throw money literally out of the window – Resulting in that you’re eventually left without a job. Can you answer that question? In fact, let me show you your resume, and how it will look like 10 years from now for a potential employer. I should know, because I used to be the Windows API expert on the planet … 😉

  1. PhD in useless information a
  2. Masters Degree in useless information b
  3. 10 years of experience in useless information c
  4. Etc …

Do you want to know a secret? There are few differences between the art of flipping a burger, and the art of creating software. Both can be optimised to the point where MacDonalds can serve a billion burgers every day, with each employee creating an average of 100 burgers during a day. And if you choose to not use the better approach to create your software, because of vanity – Not only are you damaging your employer, but you’re also spending intellectual energy, on teaching yourself something, that is completely useless 10 years from now. Don’t believe me? Ask some WinForms developer how useful his knowledge is today …

… or a FoxPro developer for that matter … 😉

May I suggest you spend some time maybe instead learning how to play chess, or maybe the Saxophone? At least that way you’ll end up with a tangible value, that has a measurable positive impact on your life. Maybe start swimming or exercising? If you’re the average software developer, God knows you need it!

For God’s sake punk software developer, get a life!

Don’t waste your life, learning something, that nobody cares about, and that will never have any benefit for you or anybody else in the long run – At least not unless you do it in your own time, and you find it interesting and challenging …

For the record, this article, and these ideas, is probably the reason for this.

The more you fight me, and my ideas, the more you prove my point!

Epilogue – 13 minutes after I submitted a link to this article to /r/programming on Reddit, it had 75% down votes. I suspect I was the only one who upvoted it though, implying 100% of those who voted for it, voted it down. A qualified guess, is that I will soon be banned from the group. However, I’ve been wrong before. If I get banned, I will add their reasons for banning me here, which I suspect is “obsessive self promotion” – Although you can only submit links there, and the quality of this article is obviously quite high. A piece of advice when it comes to my ideas is to make up your own mind. Simply because the more “senior” your developers are, the more resistance they tend to show towards my ideas …

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.