Just to be clear, I’m only going to be talking about so-called “enterprise development”. I’m not claiming that F# is the best for systems programming, or games development, or hobby projects. What’s appropriate for one kind of development objective may well be inappropriate for another. Enterprise development has its own constraints and demands, which I think F# is particularly well suited for.
Nevertheless, having said that, I do think that the choice of programming language has an effect on productivity, maintainability, and stability, and that’s what I’m going to talk about in this post.
So what are some the key characteristics of “enterprise” development?
In an “enterprise”, software is generally treated as a tool; a cost center rather than a profit center. There is no pressure to have the latest technology, or to hire the best developers, or (sadly) to invest in training.
This means that being “enterprise” has nothing to do with the size of the business. By my definition, Google does not do enterprise development, while a 50-person B2B company probably does.
This also means that companies that develop in-house software to gain a competitive advantage, like FinTech companies, don’t count as “enterprise” either.
The goal of enterprise development is generally to support business workflows rather than to implement a specific set of technical requirements. At the most basic level, typical enterprise software just moves data around and transforms it. This sounds trivial and is often looked down on as not “real programming”.
But business workflows involve humans, and any time humans are involved you will always have complexity. Implementing an efficient map/reduce algorithm or optimizing a graphics shader might be tricky, but possibly not as tricky as some business workflows! This 30-year old quote about COBOL sums it up well:
The bias against the problem domain is stated explicitly in [a] programming language textbook, which says that COBOL has “an orientation toward business data processing . . . in which the problems are . . . relatively simple algorithms coupled with high-volume input-output (e.g. computing the payroll for a large organization).”
Anyone who has written a serious payroll program would hardly characterize it as “relatively simple.” I believe that computer scientists have simply not been exposed to the complexity of many business data processing tasks. Computer scientists may also find it difficult to provide elegant theories for the annoying and pervasive complexities of many realistic data processing applications and therefore reject them. - Ben Shneiderman, 1985
Sadly, enterprise development has never been attractive.
It’s not unique to enterprise development, of course, but it’s common that enterprise software projects live a long time (if they survive childhood). Many projects last five years or more – I am personally familiar with one that started in the 1970’s – and over the lifetime of a project, many developers will be involved. This has a couple of corollaries:
There is a very interesting talk by Robert Smallshire in which he simulates code generation for different size teams over different time periods. So, for example, after five years, the current team will generally only have contributed 37% of the code.
For a bigger team over a longer period, the contribution % can drop even lower.
Yes, these are simulations, but they ring true in my experience.
As a result of all these factors, project managers tend to be risk averse and are rarely early adopters – why break something that’s already working?
As the saying goes “process is the scar tissue of organizations”. Stability is more important than efficiency.
However, new environmental conditions occasionally arise which force change on even the most conservative businesses. For example, the newfangled “intranet” and “internet” in the 1990’s scared a lot of people and had a lot to do with the rise of Java and VisualBasic/ActiveX. Here’s what the hype looked like back then:
Less than 10 years after those articles were published, the dominant enterprise programming languages had indeed changed to Java and C#.
Thanks to mobile apps and the rise of the cloud, I think we’re in the middle of another era like this, where enterprises are willing to risk new technologies so as not to get left behind. The challenge of course, is how to adopt new technologies without major disruption.
So how does all this affect choose a programming language and its associated ecosystem, from a project manager’s point of view?
A project manager is not just choosing a programming language, they’re also committing to the ecosystem around the language, and the future support for that ecosystem. As noted above, enterprise development is not about being on the bleeding edge. Rather, if the ecosystem has support from an enterprise-friendly company like Microsoft, Oracle or Google, that is a big plus.
Also, from the enterprise manager’s point of view, it’s critical that the language and its ecosystem have deep support for enterprise databases (Oracle, Sql Server), enterprise web servers, enterprise authentication (AD, LDAP), enterprise data formats (XML) etc. It’s unlikely that support for the latest hotness will be their primary concern.
Given the longevity of enterprise projects, we want to make sure that the ecosystem and tooling will still be around and supported in, say, 10 years. If and when new platforms come along, you shouldn’t have to throw away all your code.
And if you’re going to commit to an ecosystem, you’d ideally want to use it in as many different situations as possible (e.g. desktop apps, server apps, web apps) and different target platforms (Windows, Mac, Linux, mobile, etc).
Since the members of the team will probably rotate over the lifetime of the project, and most code will not be written by the current team, the dominant concerns are things like:
With these requirements in place, we can use them to reduce our language choices.
So, far no surprises. We have come up with the usual suspects, Java and C#.
If this was 2008, we’d be done. But it isn’t, and we’re not. In the last decade, there has been an explosion of new languages which are strong contenders to be better enterprise languages than C# and Java. Let’s look at why.
Functional programming is the new hotness right now, but regardless of the hype, most modern programming languages are introducing FP-friendly features that make a big difference to software quality:
If we look at languages which support these features, we end up with the mainstream statically-typed FP languages (Haskell, F#, OCaml) and the more modern FP-influenced languages: Swift, Scala, Kotlin, Rust, TypeScript, etc.
As I said above, the rise of new technologies such as serverless means that enterprises will be willing to switch to these FP-influenced languages if they can provide a competitive advantage (which I think they do) and if the switch can be made with minimal disruption (which depends on the choice of language).
Some FP languages (Haskell and Scala in particular) support some features that allow high levels of abstraction. Some people like to quote Dijkstra here:
“The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise” – E.W. Dijkstra
That’s great, but I believe that in the specific context of enterprise development, too much abstraction can cause problems. If used too freely, it requires that all developers working on a project need to have the same understanding of the “new semantic level”, which is a burden on training and employability. All it takes is for one person to have too much fun with category theory in the code, and the code is rendered unmaintainable for everyone else.
That is, just as you can shoot yourself in the foot with low-level features, you can also shoot yourself in the foot with high-level features as well. For an enterprise language, we need to trim the top-end of the language capabilities as well as the bottom-end, and encourage an “only one way to do it” approach as much as possible.**
So I’m going to penalize Haskell and Scala at this point for being too easy to abuse.
** One of reasons people like Go or Elm as languages is because they are restrictive. There is a standard way of doing things, which in turn means that reading and maintaining someone else’s code is straightforward.
Are generics too advanced? 15 years ago, perhaps. But today it’s clear that it’s a mainstream feature. (The golang designers disagree!)
But how about lambdas? How about monads? I think that most FP concepts are on the verge of being mainstream now, and in ten years time will be commonly accepted, so it’s not unreasonable to have a language that supports them.
For me, in 2018, the “just-right” level of abstraction is that found in ML languages like OCaml and F#. In 10 years time things may be different, and we may be able to adjust the acceptable level of abstraction upwards.
However, I’m not convinced that more abstract, mathematical style programming (a la Idris, Coq) will ever be commonplace in the enterprise, due to the variation in employee skills. Yes, this could be solved with better training, or a certified-software-engineer qualification, but I’m not holding my breath.
If we then filter these newer languages by the “enterprise” criteria above we end up with the FP-influenced languages that support .NET and the JVM, namely:
To summarize the “why not language X” objections again:
Oh dear, none of the three finalists support them right now. I’ll let you judge whether this is a deal-breaker for enterprise development.
The three languages left (F#, Kotlin and TypeScript) are all good choices, they’re all open-source, cross platform, and enterprise friendly.
If you’re already using the JVM, then obviously Kotlin provides the best migration path. Similarly, if you’re using Node on the backend, then TypeScript is good (although trusting npm packages might be a problem).
But if you’re doing greenfield development (or if you are already on .NET) I believe that F# has the edge (and this is where I might be a bit biased!)
Of course, Kotlin can do some of these things and TypeScript some of the others, but I think that F# has the most breadth overall.
Extract from ScottW's note: https://fsharpforfunandprofit.com/posts/fsharp-is-the-best-enterprise-language/
Digital transformation is the way to transform the data provided by technology into relevant information that allows us to improve our business.
The digitization of businesses allows us to put data into context and share it with the whole organization.
Many companies interpret the digitalization process as a simple update of their technologies.
Without a previous cultural transformation, the digital transformation is unviable.
In other words, the focus of the digital transformation must be on people, not the technology itself.
One of the most common mistakes a company makes as it moves toward digital business transformation is not having a clearly defined goal. The first step is to be clear about your main objectives and know the purpose of the digital transformation of your company.
Many companies simply copy their traditional approach to the digital world. They create a digital equivalent to their traditional processes. The digital transformation of a company requires them to change the way they see their interactions with customers and the way they deliver value to them. It's much more than digitizing your documents. The old development practices of the past can no longer be applied. To implement a successful digital transformation you must offer new solutions and reconsider your development practices. Digital business transformation requires a complete rethinking of how the organization relates to its customers and how it delivers value to them. To take advantage of the productivity improvements offered by technology, you must be willing to change the way your business works.
Digital transformation requires a certain sense of urgency; however, all changes must be made slowly and carefully. There is certainly a sense of urgency, but it is imperative that you plan and organize the required changes carefully to avoid mistakes that could harm your organization.
When you digitize, you must consider the people you deal with on a daily basis. If you do not wish to receive paper invoices, printed receipts and other materials in analogue format, you will have to involve stakeholders in your digitalization efforts.
Digital transformation produces only a fraction of its true value when it is not compatible with a data collection solution. In addition to providing mobile forms that can be used in the field, the right mobile forms solution must naturally integrate with your company's digital workflow.
Digitization changes the core of the work that employees do. It is very important that anyone affected by the changes understands the importance of this transformation. In many cases, employees must be trained and kept up to date on the implementation of new technologies. This will make them feel empowered by the changes after the transformation. They must understand that digital transformation is paramount to the survival of the organization and that they must be part of that transformation.
The digital transformation of businesses is not just about building an application or website; it requires companies to change the way they see their interactions with customers and how they will deliver value to them in the future.
Digital culture is one that takes full advantage of digitization to discover and exploit new opportunities for business growth, applying it to all areas. By using technology to improve performance, new ways of communicating and storing information are created. In addition, these new digital formulas make it possible to better measure everything that happens in the business, from equipment productivity to user satisfaction.
Digitization has become an obligatory process to be followed by any business that wants to survive in this digital world. But for this process to be fulfilled, it is essential to have a digital culture.
As a further step in the process of integration into the Spanish software market, and in order to strengthen the commitment to provide quality solutions, Virtusway has closed an agreement with Sage International. The software provider has registered an important evolution in its ERP, such is the case of Sage 200cloud, which is positioned as a leader in the local market. In addition, Sage 50cloud and X3 Enterprise Management complete its product portfolio, ranging from micro-enterprises to large multinationals.
When choosing ERP, you don't just have to consider what you need today. It's important to anticipate how you'll adapt to what you'll need tomorrow, and that's why Virtusway presents Sage solutions to its customers.
Sage 200cloud is not only an enterprise management program, it is a complete business control and management proposal adaptable to your current needs, but with a view to future growth. Its flexibility makes Sage 200c the ideal management software for medium and small businesses, whatever the sector in which they work.
Sage 200cloud will allow you to grow in an efficient, flexible and integrated way, so that you can control your business in a more practical, easy and agile way. It has a wide variety of automated tasks that help you save time and costs, always in accordance with regulations and laws. In addition, thanks to Sage 200cloud you will improve your decision making because you will be able to make them in real time and based on the analysis of certain data. Thanks to its multiple contracting proposals and the subscription-based payment method, it allows an adequate and controlled management of the investment, avoiding large initial disbursements. Pay only for what you need, with the confidence of knowing that if you need more functionalities, you can add them whenever you like.
In addition to the traditional ERP modules, such as Accounting and Finance, Purchasing, Sales, Warehousing and Manufacturing, and a series of advanced management modules in Customer Management, Customer Service and Marketing, Project Management, Contracts, TPV, Labor and Human Resources Management, Document Management, Treasury and Business Intelligence, Sage 200cloud gives you access to high productivity functionalities with collaboration tools via APIs such as the connection, download and automatic integration of bank notes, the electronic store or E-commerce, Sage 200cloud Laboral, etc...
Sage 200cloud also helps you improve the control and visibility of your business thanks to a modern, intuitive and well-integrated interface. You can navigate without menus and know where you are at all times.
Sage 200cloud is always aligned with advances in technology and application environments. That's why it's 100% compatible with the latest versions of MS Windows, MS Office and MS SQL Server.
In what degree of technological maturity is your company?
It is common these days to hear the words logistics and technology in the same sentence. The second is intervening so much in the business that there are almost no companies that can avoid it, but there are still some.
The following article aims to clarify and establish a positioning parameter for companies that feel they should advance in the technification of their logistics operations, but do not know where to start.
There are 4 stages according to the integration of technologies in each one:
As the name implies, companies at this level do not have computer systems that allow them to make rational decisions. They are managed by the experience of their directors and by subjective perceptions of the situation. The information is stored in spreadsheets and does not reflect the reality of the business, is a mere record that is sometimes completed only by tax obligations.
Distribution of chaotic warehouses, without documentation or planning. Archaic equipment. No connectivity with other areas of the company.
At this level we will find management software (ERP), inventory control software and distributed applications to meet the needs of each area. The drawback at this level is the communication and information flow between the different sectors of the company.
The available infrastructure consists of some simple shelves which allows to organize a little better the warehouse, but it does not assure the optimal use of all the spaces and resources. Systems can be found that notify the lack or non-existence of products to the corresponding area. Barcodes are used to identify products individually.
Second level companies lose business opportunities due to their lack of efficiency and depend on partners or third parties to carry out some operations.
At this level are many companies that have already perceived the need to technify their warehouse in order not to lose competitiveness. There is an EMS (WMS) that allows optimizing the use of resources (time and space) in a dynamic way, that is, providing a quick response to business needs and including all actors in the supply chain.
The infrastructure is much more advanced than in the previous ones, we can see voice picking systems, pick to light, robotic picking carousel, RFID technology.
The third level is characterized by the quality of the information, the KPIs are defined according to the business objectives and are used for decision making.
The degree of customer satisfaction is very high, accelerating the ROI. This means that the work done to improve the logistics operations of the company is perceived by the customer as an added value, which translates directly into conversion and loyalty of the customer.
Level with a great volume of work. Availability of the latest technologies. Artificial Intelligence and Machine Learning to plan and optimize operations. Assistance to manual operations with Augmented Reality, highly robotized installations, demand simulations and assistance in strategic planning with Business Intelligence and Big Data.
At this level are the forerunners of breakthroughs that move towards the lower levels. It is also the most competitive level, where permanence and profits depend on the speed of adaptation to changes.
Fourth level companies determine the rules of the game and impose increasingly demanding challenges on their competitors.
The first step to propose an improvement is to know where the starting point is, so we urge you to evaluate your company and then identify the way forward.
Find more information in the following article: The main goals of logistical planning
The Catalan city awaits the arrival of one of the most important logistical events of international level, the 2019 edition begins next June 26 with a full agenda of assemblies, congresses and exhibitions.
SIL Barcelona, the leading trade fair in logistics, transport, intralogistics and supply chain in southern Europe, organised by El Consorci de la Zona Franca de Barcelona, aims to consolidate itself as the main annual trade fair in southern Europe and the Mediterranean in which the entire supply chain is represented (transport, logistics, distribution, intralogistics, warehousing and new technologies) and which brings the entire chain together for 3 days in a single event, becoming an international business bridge between Europe, Latin America and the Mediterranean.
Among the most outstanding events we can mention:
The Association of Free Zones of the Americas (AZFA) is a non-profit organization that in its regional context promotes and defends the Free Zone regime through integrations, research and cooperation with the public and private sectors of all Latin American countries. Currently, it is constituted as the most important regional guild of Free Trade Zones and represents its affiliates in 23 countries on 2 continents, bringing together more than 600 Free Trade Zones with more than 10,000 companies installed in them.
The aim of the event is to be the new approach to the online channel that seeks to respond to the eDelivery strategy of companies and put in contact suppliers and retailers and e-tailers from Spain, Europe and the Mediterranean.
ALACAT is the Federation of National Associations of Freight Forwarders and International Logistics Operators of Latin America and the Caribbean. Founded on June 12, 1982.
The purpose of the 2019 International Congress of Authorized Economic Operators: OAS in Global Supply Chains is to support all participants interested in OAS standards, the international association of OAS member organizations and their affiliates to participate with opinion leaders on AEO's role in commercial management, e-commerce, security and integrity, as well as to promote compliance with an appropriate practice.
5th World Congress of Free Trade Zones
Check the complete address book here
The inadequate planning and organization of the warehouse results in multiple problems. It is common for companies to grow and start using free spaces without taking enough time to planning first. Special sized items are incorporated, with specific storage requirements, and the need for warehouse mapping becomes increasingly apparent.
Easy access to stored products
Speed up picking, meet order preparation times, these variables depend on precise knowledge of the SKUs' location. Tools such as voice picking or pick to light can optimize those processes, but it must be clear that previously, it is necessary to identify the location of each item and record it correctly in the database.
Minimum possible stock (Just in time)
Implementing systems that help predict our stock movements will prevent us from confronting serious logistical problems: own or customer shortages, lack of personnel, excessive workload, etc.
Having a warehouse management system will allow minimizing costs in storage area without losing supply capacity. Similarly, changes in demand can be easily followed by the logistics operator, providing an agile response to the final customer.