Einstein

According to Blake, DZone’s community manager, DZone will publish one of my most exciting articles ever later today. The reasons why I am excited about it, is because it’s the first time I get an article published about the frontend scaffolding machinery in Magic. Originally though, I wrote the article slightly different, trying to emphasize a philosophical point, which got lost during the review and editing process. Don’t get me wrong, I don’t mind having DZone editors proofread and edit my content, and I do understand how they might have felt that my “punchline” was a little bit out of context – However, I think it was kind of important myself, so I’ll try to write up the same ideas here – And the idea was to show how the really smart people will use the best tools available, to avoid manual labor, simply because they have no ego. As I explain my point, I will also hopefully give you a tool to separate the Einsteins from the Elvis.

Imagine asking Einstein what the square root of 1.2675467 is. How do you think he would have answered that question if he was alive today? My assumption is that he would have fetched his iPhone, pulled up its calculator, punched the numbers, and clicked the “square” button. Then imagine asking Elvis the same question. Elvis would have asked you for a pen and paper, and probably spent 20 minutes calculating the square root by hand, simply for no other reasons than to prove that he could. The reasons for this difference, is because Einstein doesn’t need to prove anything – While Elvis needs to take care of his reputation, to make sure everybody understands he’s “very good at his job”. Einstein doesn’t need to show you he is good, you already know he’s good.

If you don’t understand what I mean by “Elvis” and “Einstein” as analogies here, please read this Quora answer, which actually is my most popular answer ever at Quora.

A brilliant developer will hence always use the best tool available, to avoid doing manual labor – While a less than brilliant developer will do anything he can to avoid using tools, to show the world that he can do it himself, by hand, without needing tools. This becomes the equivalent of “software development ego”, to speak in Buddhist terms, and results in much suffering for Elvis. This also makes Einstein 1.000.000 times as productive as Elvis – Because calculating square roots of anything by hand, is simply not very smart, and steals precious time from your more important tasks, preventing you from being optimal in your approach to your job. Your calculator can simply calculate the answer to your square roots 1.000.000 times faster than you can do it using pen and paper.

I finished of my original article with a funny conclusion, which kind of was that I shimmered a job interview question in the above realization, which was as follows: Ask the interview candidate about the square root of some 16 digits number. If he pulls up his phone to calculate it using his calculator, the candidate has passed. If he asks for pen and paper to do it manually, he’s failed. Notice, I don’t literally mean that you should use trickery job interview questions such as this, but I think you get my point if you look through the humorous parts of this conclusion.

Now we know why Einstein gets to show everybody his tongue … 😉

Obligations

When you have as much coding experience as I do, you kind of have a moral obligation to teach – It simply comes with experience, and is something probably most “super senior software developers” can resonate with. Having coded since computers had two digits kilobytes of RAM, obviously implies decades of experience – And since I know I won’t live forever, I feel a moral obligation to teach the things I’ve taught myself over the years to those coming after me.

Hence, I have written articles about what I know for dozens of different magazine, probably the most famous being MSDN Magazine, where I broke a couple of records too may I add on a couple of my articles, in regards to numbers of readers and page views.

Anyways, my current publisher of choice is DZone. Simply because they care about my opinion, they listen to me, and if I have change suggestions for them, they will often implement my suggestions in weeks to please me and other writers at their site. In addition, the monthly meet-ups with the rest of their core team, have become something I very much look forward to, since they’re often able to gather some of the most interesting tech writers in our industry into these meetings, making every meeting become a party for my tech hungry mind.

If you have dozens of years of experience, you too have an obligation – And that obligation is to make sure whatever you’ve taught yourself over the years, lives beyond the number of years your body happens to walk this earth. Hence, teach! Because you have an obligation to humanity to make sure whatever knowledge you’ve accumulated, “rubs off” to the next generation, and does not follow you to the “other side” as you leave us.

In a way, if you think about it, realising that some parts of you will live on, even after your mortal body dies – Is also quite comforting too may I add 🙂

Eliminating process boundaries

I know a Buddhist joke, it goes like this: “The Dalai Lama walks into a pizza restaurant. The waitress asks him what he wants, His Holiness answers ‘One with everything'”.

When Gautama Siddhartha became the Buddha, his first realization was that he had always been “one with everything.” This was according to his own accounts, one of his most important realizations, implying he had always been the Buddha, and so had everybody else too. Similar constructs exists in software development. Software developers tends to believe in systems of perfect information. Two examples of such systems of perfect information are chess and Tic-Tac-Toe. However, no such systems exists, even though we tend to believe they do. A perfect example of this is the following screenshot I took this morning, which came about due to that the cleaning lady had cleaned my desk during the weekend, and probably jacked out one of my cables to one of my monitors.

Active Events, or Super Signals as I refer to them today, is simply the realization of that my computer is already “one with everything”, due to that it allows me to create systems, where I no longer care about whether or not my functions are executed in-process or out of process. Hence, I simply treat my in-process functions as if they were out of process invocations, allowing me to polymorphistically change my implementations, as if I had the whole World Wide Web at my disposal. And no, this is not science fiction – It’s at your disposal today. And I’d argue it’s pretty useful too 🙂

Pleasing 1 customer

The nature of software is that it can be copied. Implying once you’ve created the initial version of your software, and somebody is willing to pay you to gain access it, you arguably have a license to print money. This results in that as you start marketing your software product, it becomes imperative to please your first customer. Because that first customer will provide you with valuable feedback, that will allow you to significantly improve the quality of your software – Resulting in that it becomes easier to sell to the 2nd customer, the 3rd customer, and so on. In addition, your first customer, will also hopefully give you valuable quotes, that you can use in your future marketing process, making it easier for others to believe in whatever product it is you’re trying to sell.

The first customer you have as you start out your software company, hence becomes validation of that you’ve done something right – In addition to that he’ll lead you into an even better path for your future efforts, and such improve your product, while also proving that your product has the right to live.

Take very good care of your first customer. Because if you can please him, you can please the world – And if the world is pleased, the world will take care of you!

Appreciation

To feel appreciated is a fundamental human need. Science have shown that unless babies are given physical care and love, they will grow up to become cognitively disabled – And regardless of how much we tend to believe we are rational and thinking human beings, a simple touch or gesture, telling somebody you’re happy they’re there, will create a spiral of positive consequences for the receiving party.

Yesterday I attended a DZone Core meet up with a lot of really interesting people. I felt that others appreciated I was attending, and I would therefor want to reciprocate the feeling. We had a long and fruitful discussion about subjects close to our hearts, and Blake later wrote about his ideas of building online communities at Medium.

However, I think the most important thing in Blake’s article, was that he took the time to listen to us, ask us all for a quote, and wrote down what we all said we felt was important. If you’re the CEO of DZone and reading this article of mine here, then whatever you’re paying Blake is not enough – He practically singlehandedly made DZone pass the Turing test as far as I’m concerned! 😉

Blake’s article about building online communities should be mandatory reading for anybody doing any type of networking, and/or trying to build an online community! Besides, it also quotes all participants of the meeting, in addition to some not participating. #MustRead!

Gene Kim spoke about his latest book, The Unicorn Project, and it was very interesting to hear his thoughts about DevOps. In case you don’t know Gene from before, he’s a Washington Post best selling author of software development books, and sold half a million copies of his first book about DevOps called the Phoenix Project. I must confess I haven’t read any of his books, but after meeting him yesterday, both of his books are definitely on my list of #MustReadBooks for 2020. If there’s anything like a Stephen King of software development, Gene is probably it. Highly interesting ideas, and more importantly, a down to earth and really nice guy, with little or no ego, willing to listen to even the smallest amongst us, even though he’s obviously massively successful from before. A unique quality in a unique person.

Ray Elenteny and myself had a lengthy discussion about dynamic versus static programming languages, and I jokingly proclaimed that we were about to solve a 50 year old software development dispute as our discussion progressed. Ray is an amazingly skilled software architect, and he have written a lot of articles about Docker and Kubernetes at DZone. For those curious about what we concluded with, it was basically that it takes an extremely skilled software developer to use dynamic languages, and that although Miles Davis probably would have used Lisp, you should probably start out with something easier (static) in the beginning – To avoid spending the rest of your professional life, maintaining the bugs you created as you started out 😉

Here’s one of Ray’s articles about planning and designing Docker Images, if you’re curious about him. Even though I know little or nothing about Docker, after hearing Ray speak about architecture and software development yesterday, I can pretty much guarantee you the guy knows what he’s talking about.

After me and Ray concluded with that Miles Davis would have used Lisp, Dheeraj Gupta made us all come back to earth, by informing us about the importance of monetisation. Dheeraj is an Indian Java software developer whom I am sure we will hear more great things from in the future. Dheeraj writes about Big Data, Hadoop and other interesting things over at DZone. Some of his articles have 50.000+ page views, so I must only assume he knows what he’s talking about – Even though I’m not a Java guy myself. Because even though flying high is important to see the big picture, in the end, monetisation is what makes us able to fly high I guess. #KeepingItReal would be my assessment of Dheeraj!

To end out where I started, and live as I preach, I want to finish with the following.

  • Yi-Kai Chen
  • Rei Vilo
  • Dheeraj Gupta
  • Rahul Rai
  • Davide Guida
  • Radivoje Ostojic
  • Unni Mana
  • Gene Kim
  • Ray Elenteny

Thank you all for a nice meet up yesterday. I appreciated it!

Angular Material Select and database lookup tables (referential integrity)

This article is an addition to the video below, and it demonstrates how to use “lookup tables” from your database, and combine these with Angular Material Select widgets. The specific table I am wrapping, is the “account_types” table from the “magic_crm” MySQL database, but the idea is similar for all lookup tables. You might have to use a different [value] for your “mat-option” elements, if the primary key in your lookup table is not the same as the display column.

Above is how our final result will look like. Notice the Material Select dropdown parts.

In the following video, I am walking you through all the required steps to create the above result.

Walkthrough of how to use Material Select to ensure and simplify database referential integrity

The HTML code I created for the above video was as follows. Notice, this code should replace your existing “mat-form-field” wrapping your input data-bound towards “data.entity.account_type” in your “accounts-edit-modal.html” file. Delete that entire mat-form-field, and paste in the following code as its replacement.

  <mat-form-field
    class="entity-edit-field">
    <mat-select
      matInput
      placeholder="Account type"
      [(ngModel)]="data.entity.account_type">
      <mat-option
        *ngFor="let el of accountTypes"
        [value]="el.name">{{el.name}}</mat-option>
    </mat-select>
  </mat-form-field>

Replace the existing “account_type” input widget with the code from above. Then import OnInit with the following import declaration in your “accounts-edit-modal.ts” file. Basically, just add “OnInit” into your list of imports from “@angular/core”.

import { Component, Inject, OnInit } from '@angular/core';

Make sure you implement OnInit on your component. This interface ensures Angular invokes your “ngOnInit” method as the component is initially loaded by Angular.

export class AccountsEditModalComponent implements OnInit {

Add a field in your class to hold your “account_types”. This becomes our “data source” for our Angular Material Select widget.

private accountTypes: any[] = [];

And implement the ngOnInit method in your TypeScript file. This method retrieves all “account_types” from your backend, and assigns them to the field we created in the above code. The rest will be automagically wrapped up by Angular and Magic in combination.

  ngOnInit() {
    this.service.account_typesGet({}).subscribe(res => {
      this.accountTypes = res;
    });
  }

If you’re still confused, please watch the video above where I demonstrate the process in 10 minutes.

Notice, I want to emphasise that this is useful for database tables with maybe 5-50 items, and it is *not* for tables having hundreds or thousands of records!

Resources

404 Not Found

If you asked the CEO for an insurance company how many clients he has, what their policies are, and how much they’re paying every month in total – He’d give you a correct answer in less than 10 seconds. If you asked the CEO for a software company how many lines of code they have, what libraries they’re using, and how many lines of code his organisation is producing every month – He’d have no idea.

Most software organisations have no idea what they’re even doing. Software seems to be be created on a mentality where the CEO prays and hopes everything goes right. No math, no statistics, no ideas of how many users are experiencing fatal flaws as they try to use the services of a software company. This is madness, since it completely blinds the software company’s operations, and makes everything they do based upon a best guess approach.

If you want to run a successful software company, the first thing you need to do, is to figure out what shape you’re in. The way to find the answer to this question, is to ask yourself how many different libraries and technologies you’re using, how many inadequate user experiences your software is creating per month due to bugs, and how big your software projects are.

Imagine a bank that doesn’t know the total size of their clients’ deposits. Then realise that most software companies have no ideas of how many lines of code their current projects contains.

Creating a CRM system in 5 seconds

A couple of days ago we released a new version of Magic. Our main new feature with this release, is that Magic will also create your entire frontend now. Yup, you read correctly. Magic will scaffold up an entire frontend in Angular for you automatically, that more or less implies you’re 90% done with your product, before you’ve even written as much as a single line of code yourself.

This Web app was created in 5 seconds

The resulting Angular code, is highly componentized, clean, and modular in nature – Allowing you to modify it as you see fit afterwards. It gives you Create, Read, Update and Delete capabilities in all your database tables automagically. Below is how it looks like as you try to edit an existing item.

Magic gives you all CRUD operations towards all your database tables

In addition, Magic will also automagically solve authentication and authorisation for you, automatically create a users and roles administration component for you, allowing you to administrate the authentication and authorisation parts of your Web app, still without having to write a single line of code.

Authentication and authorisation, check!

Basically, Magic allows you to start out running, literally solving 90% of your problem, without having to spend more than 5 seconds having your computer create most of your code. And its resulting data grids allows the user to sort, filter, page, and do all other common operations on your CRUD data grids automatically for you.

Magic works with any existing MySQL or MS SQL database, allowing you to use your existing database and data, without requiring having to port data to a new system.

In case this is your first visit here, we do sell licenses to Magic, but you can download it and try it out on your local computer before making up your mind to whether or not you want to purchase a license for it. Click the download menu item at the top of this page if you want to try it out.

Demonstrating creating a CRM system in 5 seconds

Become 1.000.000x more productive as a software developer

You’re probably not going to believe me unless you see this with your own eyes first. So please watch at least the 3-4 first minutes of the following video before you read the rest of this article.

Creating an Angular/.Net Core/Database web application in 60 seconds

I have tested Magic on a database with 122 tables some few days ago. Magic produced the following code for me automatically.

  • 5,198 lines of backend code
  • 43,644 lines of TypeScript Angular frontend code
  • 29,007 lines of HTML
  • 27 lines of CSS
  • 1,628 lines of SCSS

That’s a total figure of 79,504 lines of code (LOC). According to some of the most optimistic figures that science have found relating to software development productivity, a single developer can produce 750 lines of code per month. Read the science behind it here.

Dividing 79,504 lines of code by 750 lines of code per month, becomes 106 months. So basically, a single software developer would have to spend 106 months to create 79,504 lines of code. I created it in 60 seconds!

There are 12 months in a year, which becomes 8.834 years of software development time to produce 79 KLOC of code for a single developer. This figure multiplied with the number of working days per year (220 roughly) becomes 1943.5 days of work. Multiple the number of days with the number of (working) hours per day (8), and multiple this with the number of minutes per hour (60), and you end up with 932,870 minutes of work.

I created 79,504 lines of code in less than one minute a couple of days ago. Which implies at least in theory, that with Magic, I am almost 1 million times more productive as the average (highly skilled) software developer is without Magic.

For the record. When you’re done with creating your Magic Web application, you still have to modify the resulting Angular frontend code, by for instance changing some of your edit fields from textbooks to DateTimePickers, etc – But at least with Magic, you’ll start out flying, and you’ll not have to do all the boring stuff – And it just so might happen that you’ll basically end up becoming 1 million times more productive. Depending upon the size of your existing database.

To provide you with a slightly more interesting figure, and probably conservative estimate, Magic basically does 90% of your job as a software developer – Assuming you want to perform CRUD operations towards a database system. Magic works with both MySQL and Microsoft SQL Server.

Download Magic here.

Hiring Jon Skeet

Do you want to know a secret? I can help you headhunt and hire Jon Skeet. Yup! I guarantee you with 100% certainty even that I can make Jon work for free for you too. You don’t even need to pay Jon a single dollar to have him write most of your company’s C# code.

It’s really quite simple indeed, just hire any junior .Net/C# software developer, and 5 months down the road, Jon Skeet has probably produced most of your company’s code. Simply because most junior developers are copying and pasting code off from StackOverflow.com – Where of course Mr. Skeet has answered most of the accepted answers about anything relating to .Net and C#, implying Jon’s effectively already written most of your current code base. Resulting in that Jon is probably the by far most productive C# software developer alive today, having possibly written as much as trillions of lines of code, in millions of software companies, all over the world. Pretty impressive feat too may I add, considering the average developer is able to produce roughly 10 lines of code per day, according to the Mythical Man Month …

Doing statistical analysis on this, would probably purely from a scientific point of view, result in realising that Jon Skeet is creating some roughly 10-20 millions of lines of code, every single day, in thousands of companies, on an average day – Compared to the roughly 10 lines of code the average developer is able to produce, for one single company per day.

I think there might be some kind of Andy Warhol/Xerox Copy joke in there somewhere, but it’s too late for me to pull it out. But feel free to fill in the blanks if you feel creative … 😉