Archive

The Dulin Report

Browsable archive from the WordPress export.

Results (54)

On the role of Distinguished Engineer and CTO Mindset Apr 27, 2025 Software Engineering is here to stay Mar 3, 2024 Some thoughts on recent RTO announcements Jun 22, 2023 Some thoughts on the latest LastPass fiasco Mar 5, 2023 Working from home works as well as any distributed team Nov 25, 2022 If we stop feeding the monster, the monster will die Nov 20, 2022 Why I am a poll worker since 2020 Nov 11, 2022 Using GNU Make with JavaScript and Node.js to build AWS Lambda functions Sep 4, 2022 Scripting languages are tools for tying APIs together, not building complex systems Jun 8, 2022 Automation and coding tools for pet projects on the Apple hardware May 28, 2022 Am I getting old or is it really ok now to trash your employer on social media? May 25, 2022 Peloton could monetize these ideas if they only listen May 15, 2022 Most terrifying professional artifact May 14, 2022 Good idea fairy strikes when you least expect it May 2, 2022 A year of COVID taught us all how to work remotely Feb 10, 2021 Should we abolish Section 230 ? Feb 1, 2021 This year I endorse Joe Biden for President Aug 26, 2020 Making the best of remote work - Coronavirus blues Mar 16, 2020 The passwords are no longer a necessity. Let’s find a good alternative. Mar 2, 2020 All emails are free -- except they are not Feb 9, 2019 Returning security back to the user Feb 2, 2019 Which AWS messaging and queuing service to use? Jan 25, 2019 Using Markov Chain Generator to create Donald Trump's state of union speech Jan 20, 2019 Adobe Creative Cloud is an example of iPad replacing a laptop Jan 3, 2019 A conservative version of Facebook? Aug 30, 2018 Fixing the Information Marketplace Aug 26, 2018 On Facebook and Twitter censorship Aug 20, 2018 What does a Chief Software Architect do? Jun 23, 2018 Facebook is the new Microsoft Apr 14, 2018 Quick guide to Internet privacy for families Apr 7, 2018 Leaving Facebook and Twitter: here are the alternatives Mar 25, 2018 When politics and technology intersect Mar 24, 2018 The technology publishing industry needs to transform in order to survive Jun 30, 2017 Architecting API ecosystems: my interview with Anthony Brovchenko of R. Culturi Jun 5, 2017 Don't trust your cloud service until you've read the terms Sep 27, 2016 I am addicted to Medium, and I am tempted to move my entire blog to it Sep 9, 2016 Amazon Alexa is eating the retailers alive Jun 22, 2016 In search for the mythical neutrality among top-tier public cloud providers Jun 18, 2016 In Support Of Gary Johnson Jun 13, 2016 LinkedIn needs a reset Feb 13, 2016 In memory of Ed Yourdon Jan 23, 2016 We Live in a Mobile Device Notification Hell Aug 22, 2015 Ten Questions to Consider Before Choosing Cassandra Aug 8, 2015 On Maintaining Personal Brand as a Software Engineer Aug 2, 2015 Social Media Detox Jul 11, 2015 Book Review: "Shop Class As Soulcraft" By Matthew B. Crawford Jul 5, 2015 We Need a Cloud Version of Cassandra May 7, 2015 Ordered Sets and Logs in Cassandra vs SQL Apr 8, 2015 Microsoft and Apple Have Everything to Lose if Chromebooks Succeed Mar 31, 2015 On apprenticeship Feb 13, 2015 Configuring Master-Slave Replication With PostgreSQL Jan 31, 2015 Cassandra: Lessons Learned Jun 6, 2014 Thoughts on Wall Street Technology Aug 11, 2012 Scripting News: After X years programming Jun 5, 2012

Scripting languages are tools for tying APIs together, not building complex systems

June 8, 2022

There are two general categories of programming languages: compiled, and interpreted.



A program written in a compiled language must first be converted into native machine code to run. This step is called compilation.



A program written in an interpreted language does not need to be converted into native code. The interpreter parses the program and executes it in real-time. It is possible to use the interpreter interactively as a calculator or debugger.



In some cases, the interpreter may store the program in the form of intermediate code in memory and compile parts of it into native code in-real-time in a process called Just-in-time Compilation.



The interpreter may save the intermediate bytecode for faster loading times during future execution as an optimization. Python, for example, saves *.pyc files with compiled bytecode of the imported modules. 



Similarly, though technically a compiled language, Java produces *.class files with bytecode. Java is not a strictly interpreted language and is outside of this post's scope.



An interpreted language is typically a higher-level language. It may explicitly represent data structures, such as lists, tuples, and dictionaries (maps). It may also have higher-level abstractions over algorithms. It does not have to be loosely typed, though most interpreted languages are.



Under most circumstances, a program written in an interpreted language is slower than compiled. However, program performance needs to be balanced against developer productivity. The very purpose of an interpreted language is to hide complex algorithms from the developer and make programs available to run immediately after every change. A program being executed is in the same language that it is written in.



To paraphrase Mel Conway, an interpreted language is an application language, not algorithm (aka platform ) language. Interpreted languages are best used as a "glue" that ties algorithms and APIs together — not to implement algorithms.



There is a reason why many modern interpreted languages are also referred to as "scripting." Scripting is automating existing APIs and algorithms and combining them into new APIs and algorithms. Scripting is about controlling or orchestrating existing tools, APIs, and algorithms.








A reader may rightfully ask, "Oleg, what are you getting at?"



What makes me think of these things early in the mornings is the proliferation of JavaScript as an enterprise application language. I believe using JS as a hammer to solve every problem will hound enterprise IT for decades.



JavaScript is an interpreted scripting language. It's a tool for tying things together — DOM objects on a web page and APIs.



I love JavaScript as a tool for quickly building simple apps that tie cloud APIs together.



I'm not too fond of JavaScript for the religion it cultivates among its fans who are in denial about its limitations and feel the need to use it to solve every problem, however inappropriate it might be for the task.