What’s The Best Web Language For IBM i?
October 31, 2022 Alex Woodie
What’s the best language for developing Web applications on IBM i – Python, PHP, or Node.js? That’s the loaded question recently posed by Mike Pavlak, who has been sailing IBM i’s open source waters for nearly two decades. As Pavlak’s presentation at the recent COMMON NAViGATE conference showed, the answer might surprise you.
Initially, Pavlak aimed to fight for Python in his “Web Language Shootout” session at COMMON’s NAViGATE conference, which was held in St. Louis, Missouri, last month, while his Perforce Software, colleague, Guido Faecke, argued for PHP and Liam Allan, who recently joined IBM, backed Node.js. When Allan was unable to make it, Pavlak and Faecke took it upon themselves to duel among themselves on behalf of the three scripting amigos.
Things devolved barely a minute into the hour-long session, as Pavlak stated, in no uncertain terms, that no punches would be pulled in this holy quest for technological supremacy . “That’s what this session is: A religious war of technology and languages,” he said.
Pavlak seeded the battle with some general statistics on language adoption shared by the developer-focused analyst firm RedMonk, which charted how various languages rose and fell in popularity over the past 10 years. JavaScript, Java, PHP, Python, C#, and Ruby showed steady returns, which should be clues to aspiring developers who want to hitch their Web wagons to a winner.
“If it goes up really fast, there’s a chance it goes down really fast,” Pavlak said. “But if it goes up slow, if it’s steady, it’s probably going to be around for a while.”
Attentive readers may be asking, where is Ruby on Rails in the Web Language Shootout? After all, there is a distribution for IBM i. But Ruby, rails or no, didn’t make the cut, for reasons that would soon become clear to attendees. “I don’t do Ruby,” Pavlak said. “It’s highly irregular.”
Ditto for Java, which isn’t a scripting language at all but, according to Pavlak, may instead be a plot to make programmers hate their lives. “I don’t like it,” Pavlak said of the object-oriented language that hides in its own shell. “It’s like luggage. You can’t get rid of it. But it’s still…a wildly popular Web language, for all the wrong reasons.”
JavaScript, like TypeScript, are languages for developing Web front-ends, not developing the back-end business logic. Since the ultimate goal of Pavlak and Faecke’s shootout was to find the top scripting language for writing back-end Web application logic, JavaScript didn’t make the cut.
Which brings us back to the question at hand: Which is the best Web language? Python, PHP, or Node.js? According to Pavlak, there’s one aspect of Python that gives it a sizable advantage over the other two: every IBM i Web application developer is going to use it eventually.
“It doesn’t matter what language you select to do your technology in, whether it’s going to be Node or Ruby or PHP. You’re still going to use Python,” Pavlak said. “It’s part of the plumbing. It’s kind of like CL on IBM i. Python makes a lot of sense there.”
PHP holds the honor of being the first open source Web technology brought to the IBM i platform. But has a successful run of nearly 20 years bred complacency into the PHP customer base? Maybe just a little bit, Pavlak said.
“What people don’t realize, they figure, ‘Oh, I just run PHP and I’m good, right?’ Well, no, not really,” he said. “You need to learn a little bit of HTML. You need to learn a little bit about JavaScript. You need to learn a little bit about database” and SQL. (And Python, of course.)
PHP was created from the beginning specifically for developing Web applications. That gives it an advantage over Python, which is a general-purpose language that’s skyrocketing in popularity these days, due in large part to its adoption for big data and machine learning workloads.
Python has the benefit of being easy to learn. “Even if you’re an RPG guy coming over to this kind of stuff, Python is a really easy language to learn,” Pavlak said.
However, PHP holds the advantage over the other two in terms of the overall speed and simplicity of learning the language.
“To apply Python in a Web scenario requires to kind of reach around your back and scratch your elbow. It’s a little more of a complicated beast because it’s more of a CGI implementation,” Pavlak said. “If your goal is a Web workload, you’re going to have to give a huge advantage to PHP as being one that’s easier to learn.”
Node.js isn’t as easy to learn for true-blue IBM i types, but it has one advantage over the other two: it uses JavaScript, which as previously noted has been broadly adopted by the wider IT world. However, there’s a caveat to the notion that Node.js developers only need to know JavaScript to be productive.
“A lot of people like Node because there’s a myth that I can use the same language on the presentation layer, JavaScript . . . up on the server,” Pavlak said. “And there’s truth to that. The syntax of the language is the same. What’s different though is the library usage. The libraries you’d use on the client end are not the libraries you would use on the server.”
Choosing Node.js makes sense in certain scenarios, such as when an IBM i shop has hired younger developers with JavaScript skills. Because the syntax is the same, these front-end JavaScript developers may be able to become productive developing back-end Node.js code on the IBM i server in a shorter amount of time than using other languages. “Using Node on the backend starts to make sense in that scenario,” Pavlak said.
Pavlak and Faecke also delved into the performance aspects of the three languages. While there are certain differences among the technologies that impact performance, it’s not so much the technology itself but the implementation that matters most.
“At the end of the day, professionally I’ve worked in about six different languages. I can write bad code in every one of them,” said Pavlak, who identifies as a “recovering RPG developer.” “When people complain about the performance of a Web application, nine times out of ten, 99 times out of 100, go look at your database. It’s your database. It’s your indexing strategies.”
The fastest route to destroying the performance of your PHP Web application would be to use logical files in the database. “Do not use logical files in your SQL,” Faecke warned.
Node.js does have a significant performance advantage over PHP and Python in on particular category: How quickly the stack starts. The technology, which was created by Google, is widely used by massive Web properties, such as Netflix. When you fire up a Netflix session on your TV, your Roku, or your phone, you’re actually initiating the deployment of a Node.js instance running on AWS.
“Node.js starts so fast, it’s so much easier to scale…horizontally,” Pavlak said. “So AWS instances are basically X86. In that scenario, Node has a decided advantage.”
By comparison, PHP is slower to load than Node.js. Instead of half-a-second to start a Node.js session, a PHP session may take two or three seconds to start, Pavlak said. Will that be a dealbreaker for IBM i customers? Probably not, but it depends on what your application is.
“PHP fires up with all of the pieces and parts of the puzzle in memory at one time, and the reason PHP does that is, again, PHP is all about Web workloads. The goal is to have sub-second response times,” Pavlak said. “PHP from a startup standpoint is going to be slower than Node.js. But from an overall run perspective, it could be a little bit faster than Node because it has everything in memory.”
Most PHP on IBM i customers that Pavlak works with develop enterprise applications that run continuously. They’re not starting and stopping the application, like that Netflix backend. “So startup time isn’t necessarily a big deal for them, unless it’s constantly crashing,” he said. “And if it’s constantly crashing, their issue isn’t really startup times – it’s the crashing!”
PHP’s runtime footprint is bigger than Node.js, thanks to everything being loaded into memory. Since Node.js sometimes runs on smaller devices (not always on big old Web servers), it tends to be more conducive for “very precise applications,” Pavlak said. Edge and IoT applications may be more conducive to a Node.js stack, but how many IBM i shops are developing these on the IBM i stack?
One advantage held by Node.js is that it’s multi-threaded by default, Faecke pointed out, while PHP is single-threaded by default. Node.js also was the first to implement an asynchronous event loop, which can boost the resilience of Node.js applications – the Web page might freeze, but the application itself won’t crash. However, the I/O event loop has ceased to be an advantage exclusively held by Node.js.
“One of the things you see from an open source perspective is these languages tend to steal from each other constantly,” Pavlak said. “I joke around that a lot of the object-oriented features that have been added to PHP have been recommended by recovering Java developers. If you see something in the Java realm and all of a sudden it’s in PHP, it’s like crap, more object-oriented stuff.”
When it comes to selecting a language for developing Web applications on IBM i, there’s no shortage of options. As Pavlak and Faecke showed, there are benefits and drawbacks to using Python, PHP, and Node.js. There’s no winners to this religious war, because what works well for one particular IBM i shop may not work for another.
What’s most important, Pavlak said, is how you implement the technology. “When you’re talking about transactional workloads, whether it’s PHP or Python or Node, the reality is when demand is there, you need to be able to satisfy demand,” Pavlak said. “When you start getting into the world of the Web, it doesn’t matter what technology you’re using. You want to be really clever about how you architect things so you’re not chewing up a lot of I/O and bandwidth.”
Rather take a modern approach and develop the backend in RPG exposed as Rest services. The front can then be developed in ANY browser/device language including pure JavaScript (not ONLY Node.js) and evolved over time as requirements and technologies evolve, without disturbing a stable and secure backend.
For RPG programmers particularly, RPG is better than Python, Node.Js, or PHP for writing backend business logic for a web application.
This approach of making the backend logic part of the front end solution is legacy and causes more strategic problems than it solves.
A micro-services based strategy keeps an organisation agile, is much more cost effective, and can be production ready in days. almost no learning curve
Best web language on IBMi is RPG. With a minimum of 5 function calls, CGIDEV2 enables RPG coders to read and write to the browser. Apache server is lightweight and compiled RPG is very fast. RPG shops do not have to learn a new host language and the environment it runs in.
All users of a host language will need pick up a little CSS, HTML and JavaScript.
Getting to the web with RPG is the easiest and fastest.
There’s no way I’m choosing rpg over the 3 languages mentioned to build a back end web service. I love rpg and have written rpg code for 18 years but there’s no comparison when s writing a rest api. I prefer writing the rest api backbone in NodeJS and I will call rpg from node using sql stored procedures. So my backend business logic is still in rpg but nodeJS is the driver. Also add in the fact that you could dockerize the node app and make it scalable in no time.
Excluding SQL, then RPG Free!
Excluding SQL, then RPG Free!
Of course, using HTML, Javascript and CSS.
Hello Mike Pavlak, I am still retired but try to keep up. Like this article on Python.. Have you looked at WXPython? My son is the Open Source author of this product. You might take a look.
Glad you are still active in the business.
Your Old College Paul Dunn
What about the IBMi build-in Net.Data – is anyone using that these days? I wrote a simple web enquiry application some 20 years ago and taught myself basic HTML/CSS in the process. Never had to do any changes except for due to changes in the underlying DB.
I made few simple net.data sql scripts in v5r4 , still running fine in v7r3.
Also made password self reset using net.data script.
RPG by design (datastructures, db integration, easy debuggability etc.) should be excellent to expose web services. IBM should just provide native tooling (i.e. also fast 5250 commands to create and maintain the “rest mapping proxies”….) and avoid java servers and java stacks in the middle (keep apache only that is fast and good and integrated and stop!).
A *PGM by definition is in itself a “microservice” since decades without the BS.
Just avoid the java stack.
PHP is also good, and with an history on i, worth if only for the leverage you can have with its libraries, and many yum based installation are pretty good and simple, with decent rpg interop (toolkit), see Seiden’s.