Mr Dimitri, HND Computing Course designer, C & Unix tutor, advised, on completion of the HND computing course, find a place on
a project as a Junior then go from there.
A contrary viewed was expressed by Grady Booch, "Industrial Strength Software is beyond the Intellect of a developer." I followed Mr Dimitri's advice and got myself a job as Junior software Engineer with a view to mastering Industrial Strength Software, throughout my career I was mindful of Booch's stance. Follow my journey to find out whether it is true Industrial Strength Software is beyond the intellect of mere mortal developers.
Source: Object Orientated Analysis and Design with Applications;Grady Booch [IBM][Second Edition]
" A dying star on the verge of collapse, a child learning how to read , white blood cells rushing to attack a virus:these are but a few of the objects in the physical world that involves truly awsome complexity. Software may also involve elements of great complexity; however , the complexity we find here is of a fundamentally different kind. Einstein argued that there must be simplified explanations of nature , because GOD is not capricious or arbitrary. No such faith comforts the software engineer.
We do realise that some software systems are not complex. These are largely forgettable applications that are specified, constructed, maintained and used by the same person, usually the amateur programmer or the professional developer working in isolation. This is not to say that all such systems are crude and inelegant, nor do we mean to belittle their creators. Such systems tend to have a very limited purpose and a very short life span. We can afford to throw them away and replace them with entirely new software rather than attempt to reuse them , repair them , or extend their functionality. Such applications are generally more tedious than diffcult to develop ; consequently, learning how to design them does not interest us.
Instead, we are interested in more in the challenges of developing what we call Industrial-Strength Software. Here we find applications that exhibit a very rich set of behaviours , as for example , in reactive system that drive or driven by events by the physical world , and for which time and space are a scarce resource;applications that maintain the integrity of hundreds of thousands of records of information while allowing concurrent updates and queries ; and systems for the command and control of real world entities, such as routings of air or railway traffic. Software system such as these tend to have a long life span , and over time , many users come to depend on the proper functioning. In the real world of Industrial-Strength software we also find frameworks that simplify the creation of domain-specific applications, and programs that mimic some aspect of human intelligence. Although such applications are generally products of research and development they are no less complex , for they are the means and artifacts of incremental and exploratory development.
The distinguishing characteristics of Industrial-Strength software is that it is intensely difficult , if not impossible, for a developer to comprehend all the subtleties of design. Stated in blunt terms, the complexity of such systems exceeds the human intellect capacity. Alas , this complexity we speak of seems to be essential property of all large software systems. By essential we mean that we may master this complexity, but we can never make it go away. Certainly , there will always be geniuses among us, people of extraordinary skill who can do the work of a handful of mere mortal developers. ... "
Source Grady Booch
" The United States Department of defence (DOD) is perhaps the largest user of computers in the world. By the mid-1970s, software development for its systems had reached crisis proportions: projects were often late, over budget and they often failed to meet their stated requirements. It was evident that the problems would only worsen as software development costs continued to rise exponentially. To help resolve these problems which were further compounded by the proliferation of hundreds of different languages. The DOD sponsored the development of a single, common high order programming language. The winning design was originally called the Green Language (so called because of its team colour code during the competition), later renamed Ada.
" Poor quality software cost an estimated $2.84 trillion in the US alone in 2018 "
Source CISQ: [Consortium for IT Software Quality ].
https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2018-report/The-Cost-of-Poor-Quality-Software-in-the-US-2018-Report.pdf " Despite the fact there are only two golden rules for good quality software this is a remarkable achievement
Human resources Manager arranged a career development between the three company developers who were not senior application developers and the project Manager. His career advice was that the technology learning curve flattens out, you will remain as junior if you do not focuse beyond the technology. This was a refreshing point of view because up until now a developer's skill set was judged on how many thousands of lines of code or a number of years of experience of programming language(s) with seemingly endless learning curve. I did believe him about the curve flattening because I had that feeling at College about C when I did the project using my prior business knowledge.
He went on to say you should focus on other stages also like data analysis leading up to project management. One of the other developers objected to the term junior used to describe an application developer fluent in an application development framework.
The second meeting HR arranged was between us three and a "top 10 database expert in the world."
There were no arguments or disagreements this time, just quiet listening and absorbing of knowledge.
He covered alot more ground than covered in College. The tutor only covered RDBMS & SQL.
I later discovered what I had learned from him and more by reading professional Database product Documentation.
I also came across another kind of database expert who answered my question , how are you going to improve the performance by going on site without breaking the software because all the programming is done here?
Training Ground began with a two year HND course in computing. This was a change of careers from accountancy to computers. The intention was to keep up to date with Industrial skills. The presumption of this course is that it would give me skills in basic understanding of computers. The course designer, Mr Dimitri had other ideas. He was training software engineers. C on unix was the third programming language of the course when I realised I had an understanding of computer programming. The first language was pascal followed by 68k Assembly language. Pascal is meant to be an introductory language into programming , however when the concepts of programming also new, Pascal is not so easy. At the end of the two year course I felt I found my calling was a programmer. A career in programming is unlike any other career because every thing you do is an original creation, the complete opposite of a career as factory worker.
Junior Software Engineer;
Smiths Aerospace and defence is my first commercial training ground as junior software engineer. Smiths aerospace and defence produce original, inventive creations of bespoke hardware & software solutions. The solutions are employed in aircrafts so an approach called best practices is followed. A programming language called ADA was used on the project. I was one of three junior software engineers employed to do unit tests.
The project was called Aircraft Fuel Management system. My exposure to the system began at a detail level because I was doing stub testing , unit testing. I was curious to find out what Fuel Managment System actually meant so I decided to ask the Technical Lead, who had been working this project for the last four and half years, for a Level 0. He didn't have one so he drew me one. The Project Tech Lead also pointed to three other members of his team who assisted him, an 'A' level mathematician, a firmware Programmer and a phD student documentating the software following code completion, as per the client requirement. This made up the technical project hierarchy not including the hardware engineer and the Project Manager.
My next question to the technical Lead was, are there any project in C ? , I am good at C from College. He replied don't mention that word here again. What word I asked ? he replied C. See you made me say it again.
This was my second training ground at bytel. It was a software house focused on building a single product called SMS customer care and Billing system for the telecom industry, with a team of 10-11 developers and 250 table database. At the top of the technical hierarchy was "one of the top 10 database experts in the world".
While working at bytel, a single product customer care and Billing System for telecom industry, I was given a data warehousing project.There were only two members in the team. The product manager and myself.
To create the useful three dimensional data cubes for business Intelligent Information I would have to look through the database. I approached the DBA to get a diagram of the database. He suggested he could have the complete database printed on an A0/A1 sheet of paper, if that would interest me. I was delighted.
As I examined the 250 tables of the database it dawned on me how easy it is to build an application from the Entity Relationship diagram. That is when I made up my mind, when ever I would be involved in creating an application from scratch, the approach would be to do so from an ERD.
There are capable developers who take a different approach, I do not agree them, but that is another story for another day.
one must obtain the services of a data analysts to create an ERD if they themselves are not conversant in that discipline.
Logsys Solution was also geared towards defence industry with the core business of software support and migration projects which used earlier versions of the same tools.
The middle architectural diagram was published in 1999, source Credits: Professional Java Server Programming, wrox press.
The orange ellipse represents two types of architectures I identified. JSP + Usebean component
for business logic with JDBC managed by the application server (DB connection pooling). The application server (tomcat) running behind Apache webserver
via a mod_jserv (loadbalancer & security) .
Guided by the book, I visited a number of different websites to find all the components. The overall concepts, the GUI, application logic , Database for data hasn't changed over the past twenty years. The claim is they have been working to make the use of technologies for application developers simpler by constantly making changes.
A Source code illustration of the two diverging architectures shown by the orange ellipse in the above diagram.
At a recent JavaOne conference Java EE advocated stated using a histogram, until 2006 Java EE was too complicated for development, until 2009 it was bloated. and up until 2017 Java EE was both archaic and still complicated. It appears I showed interest just at the right time. Can't wait for what's next ?
The current (2021) trend is to use ReactJS or Angular instead of JSP and JSF with backend services like JAX-RS [Client Server API] acting as microservices. I should also mention as application developers we need to be aware that JAX-RS is the name of specification, but we need to have skills in the Implementations of JAX-RS for example jersey , Jboss RestEasy , Apache CXF. The persistence API specification is named JPA, it also has many Implementations i.e. Eclipse Link , Hibernate.io , ibatis. The Application developer need to be skilled in only one of these implementations.
This demo is another version of the shopping cart senario, conceptually speaking. The technology stack is comprehensive, using all the components
needed to build a commercial application. The technology stack is comprised of Apache webserver, Apache mod_proxy as the cluster loadbalancer,reverse proxy,gateway,
Jakarta EE compliant application server, JSF , CDI , multilingual functionality, running on a Raspberry Pi 4 hardware for fun.
The only component I haven't implemented is the JPA API and a database. This is because it was developed for raspi running on micros sd card.
Micro SD card are made for storage, not for write operations, it will likely crash unlike a ssd drive which is design for write operations.
All the components usually found in any GUI application can be found in the demo. It is important to keep in mind when using GUI components, our number one criteria is end user familiarity, creating a feeling of comfort for the end user, otherwise we risk the danger of the end user concluding 'this is too complicated' , we will lose our end user user unless they have a compelling reason to remain.
As application developers we are not afforded such luxuries as simplicity we are required to provide for the end users. Although the application developer can become comfortable with the complexity. The complexity faced by application developer is a fact, frankly I am going to do it at my pace and my speed with full knowledge how to get to the comfort level.
Miroservices paradigm is another approach to solve our above mentioned Problem
by simplify the stated requirements
for the application developer(s), making the stated requirements
simple enough to "fit inside one developer's head ". This means that microservices project structure will be forced
to have atleasts two phases. The design and analysis phase where the domain is broken down into sub domains, preferably beginning with a database design.
I don't think developer's head size is going to increase any time soon, so based on that premise being true microservices Paradigm may have staying power.
Comparative Analysis by Emily Jiang, IBM MicroProfile Consultant,works at the above mentioned exploratory laboratoryBusiness Logic code;
MicroProfile LRA Production release in April 2021. This is a very important API because this API is the solution for Transaction Integrity when business transactions span across multiple microservices, with each service given their own database and services not permitted to access another microservices's database directly. It is based on the Saga Design Pattern. In my opinion the microprofile can now be regarded as fulfilling the microservices paradigm because without the LRA (Long Running Action) API, considering the database is central, MicroProfile is a health & metric system for REST APIs. Incidently the dictionary meaning of Saga is a long, involved story, account, or series of incidents.
Java programming language is a combination of C , Ada and OOP therefore Java is not a new language but a familiar language. It is a familiar language to reduce the steepness of the learning curve.
Java is an interpretive language consequently the disadvantage is a slight degradation in performance, the advantage on the other hand is one can trace a bug even if that is outside your code.The advantage outweigh the disadvantage.
Java from ground up;
What this actually means is that Java was aimed at two types of audience. The Application Developer and the Tool Buider. For examples Reflection is a feature in the Java programming language. It allows an executing Java program to examine or "introspect" upon itself, and manipulate the internal properties of the program. For example, it is possible for a Java class to obtain the names of all its members and display them. The ability to examine and manipulate a Java class from within itself may not sound like very much, but in other programming languages this feature simply doesn't exist. For example, there is no way in a Pascal , C or C++ program to obtain information about the functions defined within that program , hence Java is from Ground Up. Reflection is an example of a feature for the Tool Builder not the Application developer.
An Application developer should keep in mind, it takes time for Tool Builders, who are also just programmers to design, build , stabilise , make feature rich, especially feature rich (product maturity), document their products ready for Application developers' use.
Let's see what the Tool Builders have for us but before that, what is the lesson in the DOD report when it says the software crisis was "compounded by the proliferation of hundreds of different languages" ?Did I go around the word wide web to find these tools or attend Java conferences ? No, I bought a book which listed them all. That's what I call a good book. It was the sixth one on the same subject
.. get started Microprofile .
.. get started Oracle's Helidon .
.. get started IBM's OpenLiberty .
.. get started kumuluzEE.
.. get started Payara fish .
.. get started Quarkas.
.. get started Community's SmallRye.
.. get started Spring.
Apache Webserver along with Tomcat Application Server websites may also be worth a visit. At the apache website finding the get started button is a bit more involved, it is Freeware. For this website you may need to get a book to guide you.
The Java EE specifications for the above architectural blueprint in its current form can be found at the Jakarta EE. These specifications contain the Tool Vendor stated requirements . Of course the ever changing specification needs a work bench. The work bench is called glassfish
There is one easy way to find out the popularity of a Software Application Tool. You don't have to read any reviews or visit any conferences. Simply try out the product. The more bugs you find in the documentation, the more bugs you have to fix in the setup and startup phase of the software, the less helpful the error handler, the less popular the product. If the product was popular then other developers would have pointed out these anomolies and they would have been fixed.
Is there a need to place trust in the commercial vendors ? not if you are going to "Protoype! Protoype! Protoype!". You can do this by clicking the get started button provided. If you do go down the prototyping route you are at risk of reaching the plateau, taking you, the application developer, to the expert level.
I can't say how difficult the learning curve is for a complete beginner without any guidance but someone with five years experience + 2 years HND Computing, like me, this is part of the GIG economy. A bit more challenging than delivering pizzas,another GIG economy.
Port 80 & 443 is open to all, for both innocent access and vicious attack therefore security is a consideration for data protection (Database). Consequences when security is not taken seriously as a consideration. I think it is safe to assume the data taken was residing in a database. A DBA, who used to go on sites, and myself did joke over the discovery that many Oracle databases do still have their the default username & password scott tiger unchanged. I wonder ?
The process of producing Jakarta EE web based application frameworks involves, the API developers working together in collaboration as vendors with a commitment to "learn once" use many times. The designs are worked out for them by technical committees. See LRA specification solution section for supporting evidence of the hierarchical structure.
4GLs are a subset of programming languages, this was an approach to make it easier for developers, by focusing only those aspect of the language needed to build applications which required database backend. In order to focus on the complexity of the stated requirements . Some times applying a simple solution to a complex problem is teh right solution.
How much can a developer's skills be worth if the developer is an application developer using one of the above mentioned application generators ?
Let's take this Shark Tank App as an example. The App is called BricksAndAgent. It is a property maintenance application. The Billionaire's son invested $750,000 in Software development cost. He wants now $250,000 for 10% equity from the sharks, which he gets, thereby making the app a $1 Million dollar app.
With a database design in hand, I would estimate it would take an application developer 3 months (add 20% contingency) to churn out a duplicate application with some enhancements thrown in. ssssh...
projection for month 5; unemployed looking for another GIG.
I interpreted the rather rude label as junior to describe developers when an application developer remains focused on a application development Tool and combined it with the Ada Tech lead to mean that one can focus on the application development Tool, however one can aquire the services of a data analysts who can extract the ERD and business rules from the specification for you. This approach also answers the other rude expression "Industrial Strength Software is beyond the intellect of a developer". Obviously it is not the responsibility of the application developer to ask for the data analyst, but one should be provided by the project manager.
During College in the HND Computing course, I along with all the other students was set a project by Mr. Dimitri in the C programming course. I was the only one who developed a project with hundreds of line of C code. That is because I was changing my career from accountancy so I had use case business knowledge for my project which sharpened my programming skills, leaving every one else bewildered, left wondering how I did it ? They all lacked the crucial business Knowledge therefore couldn't write the code.
I know from experience no matter how many tutorial/courses one follows, unless one builds an application one is not going to be good at the technology stack. Just like the other Students at College I was also lacking ideas this time.
So I searched for a database design amongst Postgres material. Found this. DVD rental business ERD.
DVD Rental Business didn't reallly excite me especially when I am using a modern technology stack. I logged on the postgres mailing list to see if I can find another more current ERD to apply the technology stack. To my surprise I got a response with a link showing 1700 ERDs. That is 1700 application design iniatives, an Application developers' paradise. This is a resounding confirmation that I am not alone in my belief an application development phase should start with an ERD as the design phase. An ERD along with the business rules extracted by a data analyst. In any event I will never be stuck for project design ideas to build Industrial Strength Applications
I don't think it would be inaccurate to say that the purpose of Paradigms such as Microservices or microprofile are to serve as front end development Tools for Data Management of data held in Databases(s).