A brief historical survey of how programming languages have evolved over the decades. We revisit several milestones along the way, reminding ourselves of a few of the missed opportunities. We examine the broad families into which programming languages fall -- an informal phylogenetic tree. We try to recognize the convergence of features among several mainstream languages. Finally, we discuss the current state of affairs in the world of programming languages.
Here we describe how to "think" mapreduce not just "code" mapreduce. We solve some interesting problems using mapreduce (e.g. how to compute similarity between all pair of documents on the web, how to do k-means clustering using map-reduce, and how to find cliques in a graph using map-reduce). These solutions are simple, elegant, and open up new ways for people to actually use mapreduce more than just simple number crunching.
From self-driving cars to Siri and Watson, applications of artificial intelligence and machine learning are all around us. Broadly speaking, any problem which a computer has to learn to solve using only data about the problem domain comes under the purview of machine learning, spam filters for instance. Understanding the how and why of these fascinating technologies and the impact they will have on our society is critical to utilizing them in ways beneficial to all of humanity.
Here we describe how to "think" mapreduce not just "code" mapreduce. We solve some interesting problems using mapreduce (e.g. how to compute similarity between all pair of documents on the web, how to do k-means clustering using map-reduce, and how to find cliques in a graph using map-reduce). These solutions are simple, elegant, and open up new ways for people to actually use mapreduce more than just simple number crunching.
From self-driving cars to Siri and Watson, applications of artificial intelligence and machine learning are all around us. Broadly speaking, any problem which a computer has to learn to solve using only data about the problem domain comes under the purview of machine learning, spam filters for instance. Understanding the how and why of these fascinating technologies and the impact they will have on our society is critical to utilizing them in ways beneficial to all of humanity.
Developers who contributed hugely to and had a lasting influence on the software development profession, and who also have an extraordinary personal history.
Chapter 10 of a university course in media history by Prof. Bill Kovarik, based on the book Revolutions in Communication: Media History from Gutenberg to the Digital Age (Bloomsbury, 2nd ed., 2015).
Developers who contributed hugely to and had a lasting influence on the software development profession, and who also have an extraordinary personal history.
Chapter 10 of a university course in media history by Prof. Bill Kovarik, based on the book Revolutions in Communication: Media History from Gutenberg to the Digital Age (Bloomsbury, 2nd ed., 2015).
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Â
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Â
Clients donât know what they donât know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clientsâ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
Â
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more âmechanicalâ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Â
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Â
Monitoring and observability arenât traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current companyâs observability stack.
While the dev and ops silo continues to crumbleâŠ.many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Â
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
Â
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. Whatâs changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
A tale of scale & speed: How the US Navy is enabling software delivery from l...sonjaschweigert1
Â
Rapid and secure feature delivery is a goal across every application team and every branch of the DoD. The Navyâs DevSecOps platform, Party Barge, has achieved:
- Reduction in onboarding time from 5 weeks to 1 day
- Improved developer experience and productivity through actionable findings and reduction of false positives
- Maintenance of superior security standards and inherent policy enforcement with Authorization to Operate (ATO)
Development teams can ship efficiently and ensure applications are cyber ready for Navy Authorizing Officials (AOs). In this webinar, Sigma Defense and Anchore will give attendees a look behind the scenes and demo secure pipeline automation and security artifacts that speed up application ATO and time to production.
We will cover:
- How to remove silos in DevSecOps
- How to build efficient development pipeline roles and component templates
- How to deliver security artifacts that matter for ATOâs (SBOMs, vulnerability reports, and policy evidence)
- How to streamline operations with automated policy checks on container images
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
Â
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
2. 1801 : Jacquardâs head
Building on some preceding work, Joseph Marie Jacquard invents a method to use the
same loom to weave different patterns on cloth, by simply feeding different âchains of
punched cardsâ to it.
Each position on the card corresponds to a âraiseâ or a âlowerâ control for a weft
thread, depending on whether the position was punched or not.
IBM and Unix nerds of the time are not impressed, because the size of Jacquardâs
punched cards is not one of 80x10, 80x24 or 80x25!
5. 1837 : Babbageâs design for Analytical Engine
Original Difference Engine intended to compute series of values of polynomial
functions automatically. But, it could not be completed.
Analytical Engine is designed as the first general-purpose computer with arithmetic
logic unit, branching, looping and memory. The design even has a printer and a curve
plotter for output! [This could not be completed by Babbage, as well!]
While the design is grand, Go programmers of those days find its lack of select
statement too limiting!
6. 1842 : Ada Lovelaceâs first algorithm
Ada translates Babbageâs lecture transcript from French to into English.
She then writes the worldâs first algorithm: a sequential logic for the Analytical Engine
to compute Bernoulli numbers.
Unfortunately, the Analytical Engine is not yet available to actually run it.
Nonetheless, Martin Richards and Brian Kernighan are displeased to find that Adaâs
first algorithm is not written to print âHello, World!â
7. 1931 : Gödelâs and his Incompleteness
A maverick 25-year old Kurt Gödel publishes Ăber formal unentscheidbare SĂ€tze der
"Principia Mathematica" und verwandter Systeme (On Formally Undecidable
Propositions of "Principia Mathematica" and Related Systems).
He proves that no computable axiomatic system could be both consistent and
complete. Moreover, the consistency can not be proved within the system.
Leading philosophers revel in the theoremâs ability to interpret life!
Conspiracy theorists, however, conjecture that his undecidability does not refer to
Russellâs work, but to the upcoming tabs vs. spaces debate!
8. 1936 : Churchâs lambda calculus
Alonzo Church comes up with a formal system in mathematical logic named âlambda
calculusâ that invents all future programming languages!
It describes how any computation can be represented and performed using variable
binding and substitution. α-conversion, ÎČ-reduction, η-conversion and several non-
parseable symbolisms are distilled as the building blocks of all languages for
programming, humans, great apes and dolphins!
Lambda calculus is, however, condemned to obscurity because it does not follow the
syntax and the stylistic conventions of the yet-to-be-created Algol.
9. 1936 : Turing and his Completeness
Not to be left behind, Alan Turing invents paper tape and brings back a machine from
future that reads and prints one prehistoric symbol per cell. The resulting universal
computing machine also invents all programming languages that will ever be.
Desirous of avoiding mutual patent litigation, Church and Turing then get together,
and publish the Church-Turing thesis. This establishes a duopoly in the field of
programming languages.
However, before an anti-trust case could be brought against the pair, Turing consumes
cyanide and goes into cryogenic freezing. [The ACM resurrects his spirit in 1966.]
10. 1946-8 : ENIAC and SSEM
The Electronic Numerical Integrator and Computer (ENIAC) is announced to the
public as the worldâs first general-purpose, programmable, digital computer. Lacking
storage, it requires the programmers to learn the machine code by heart, and shout the
sequence into it -- for every run.
Widespread protests and strikes by the budding Programmersâ Union result in the
development of the Manchester Small-Scale Experimental Machine (SSEM).
Nicknamed âBabyâ, it can run stored programs.
Mainstream psychoanalysts expect that its nickname will play a role in soothing the
post-war subconscious anxieties of the members of the Union.
13. 1952 : UNIVAC I
Eckert and Mauchly create the UNIVAC I mainframe computer the previous year.
They show off its computing capability by predicting a 100-1 odds for Eisenhower to
win the US Presidential election. Mainstream media roots for Adlai Stevenson.
CBSâ news boss - unconvinced - decides to enact stage theatrics, and pretend that the
computer is not responding. Later, CBS says that the computer predicted 8-7 for
Eisenhower. Actual results are within 1% of UNIVAC Iâs original prediction!
Luddites immediately denounce the creation of UNIVAC I as a big mistake, since it is
UNIVAC I that most likely evolved into Multivac, Planetary AC, Galactic AC, and
finally into Skynet.
15. 1954 : The George system
Laning and Zierler decide that any computer that is not capable of performing algebra
computations is a dud. So, they create âGeorgeâ, a compiler for algebra that provides
symbolic variables and automatic memory allocation.
To prove how good George was, Laning and Zierler decide to solve an aeronautics
problem that requires 7 differential equations. They write it in 2.5 hours, and it runs
correctly on the first attempt!
Tier 1 contractors lobby against George until it is removed, since programs that run
successfully on the first attempt could lead to gangs of unemployed programmers.
16. 1957 : FORTRAN
SUBROUTINE BACKUS(I,B,M)
INTEGER I,M
DO 10 J=I-1,1,-1
10 B=B+(I*J)/M
RETURN
Engineering, weather, fluid dynamics, physics, chemistry, biology, âŠ
R programmers of the time are overjoyed, because in FORTRAN R is real.
18. 1958 : LISP
(defun LISP (lambda-calculus ipl)
(progn (mc-carthy designs)
(let ((meta-circular (lambda (eval) (apply)))
(prim (car (cdr (atom list cons)))))
(steve-russell implements-eval))))
âThis does not mean that I fail to recognise that Lisp is still #1 for key algorithmic
techniques such as recursion and condescension.â - Verity Stob
19. 1958 : ALGOL
Not satisfied with FORTRAN, Backus drums up international support for a new
language in both the US and across the Atlantic. The result is International Algebraic
Language - the grandfather of a large branch of programming languages.
However, the research community involved in the international discussions of this
international language thinks so much in closed rooms, that it takes no input and
generates no output. The international language, thus, becomes academic!
In addition to the language itself, gives birth to Backus-Naur form.
Suspicious onlookers link its continuing influence - on the syntax and the structure of
modern programming languages - to mysterious activities of Illuminati.
20. 1960 : COBOL
Government and industry pour their minds into a small hulk, to discuss a new
programming language.
The ingredients precipitate Cantankerous, Onerous, Boilerplate-Oriented Language
that cannot be parsed unambiguously, because it is too much like English.
By 1970, COBOL becomes the most used programming language in the world! In
1997, Gartner estimates that 80% of worldâs businesses use over 200 billion lines of
COBOL code everyday!
"The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a
criminal offense." - Edsger Dijkstra
21. Generations
HARDWARE SOFTWARE
Mid-1940s : Thermionic vacuum tubes -
IBM 650
Machine languages
1956 : Transistors and the beginning of
miniaturisation - IBM 7090, Burroughs
B5000
Assembly languages
1964 : Integrated Circuits and unheard-of
logic densities - IBM 360/91
High-Level languages : FORTRAN, LISP,
ALGOL, COBOL
22. 1964 : BASIC
10 Despite being experts in type theory and statistics, Kemeny and Kurtz decide that
non-scientists needed a programming language.
20 For this language for non-scientists, they choose scientist languages FORTRAN II
and ALGOL 60 as their inspirations.
30 The result is Boisterous, Animated Symbolic Instruction Code.
40 Survives through modern times (e.g. Microsoft Visual Basic.NET).
50 GOTO 10
60 RUN
23. 1964 : APL
Inspired by Backus-Naurâs specification, Iverson imagines a multidimensional array at
the foundation of an unwieldy skyscraper.
In the interest of safety, A Programming Language is kept out of the hands of mere
mortals, by describing computation using a large range of symbols from mathematics
and modern art.
Nonetheless, it heavily influences modeling, spreadsheets, functional programming
and math software packages.
Psychologists attribute high enrolments of programmers into sanatoriums to early
exposure to APL.
24. 1964 : APL
Pick 6 random numbers in ascending order
x[âxâ6?40]
All prime numbers from 1 to R
(~RâRâ.ĂR)/Râ1âÎčR
Entire Conwayâs Game of Life
lifeâ{â1 â”âš.â§3 4=+/,ÂŻ1 0 1â.âÂŻ1 0 1â.âœââ”}
25. 1965 : Simula
Nygaard and Dahl wish to describe the vast and deep heterogeneity of computer
simulations, mental imbalances and cosmic vibrations.
They decide to build a language - based on ALGOL 60 - introducing classes, objects,
subclasses, virtual procedures, coroutines and discrete event simulation.
The list is so big that it overflows into C++, Object Pascal, Java and C#. [Stroustrup
acknowledges that Simula 67 was the greatest influence on C++.]
Programmers continue to debate whether Simulaâs name played a role in business
software vendors not showing interest in it.
26. 1970 : Scheme
Steele and Sussman publish a series of âLambda Papersâ culminating in the web site
âLambda the Ultimate Kitchen Sinkâ.
They Scheme together to introduce lexical scope, full recursion, tail-call optimisation
and strong functional programming support into LISP.
Unwittingly, they go on to introduce first-class continuations with :
(((call/cc (lambda (k) k)) (lambda (x) x)) "HUH!")
Steele and Sussman are still untangling their recursively tail-call-optimised ganglia
continuations to exactly understand why the above answers âHUH!â.
27. 1970 : Pascal
Niklaus Wirth writes a book Algorithms + Data Structures = Programs. When
challenged to prove his point, he creates Pascal based on his ALGOL-W.
Pascal is an imperative and procedural programming language for structured
programming. Its fully nested structure means that a program, a procedure and a
function are described identically.
Features include records, enumerations, subranges, dynamically allocated variables
with associated pointers, and sets.
Critics, however, dismiss Pascal immediately, because it uses â:=â for assignment
instead of â=â like the not-yet-created C.
28. 1972 : C
Ritchie invents a modern boomerang that has the shape of the English letter âCâ.
Eager to provide maximum efficiency, he makes a cutting-edge of each edge of the
boomerang.
Consequently, all programmers who use the âCâ boomerang have their fingers
chopped off, or suffer other severe maimings.
Pleased with the outcomes, Ritchie creates a programming language - also called âCâ -
modeled on the âCâ boomerang.
29. 1972 : Prolog
Desirous of representing programs using Horn Clauses, Colmerauer and Roussel lift
first-order logic into a programming language.
Prolog is invented as a declarative language with program logic represented in the
form relations: facts and rules. The language attempts to prove the given query using
these relations.
Its performance is dismal, despite the Fifth Generation initiativeâs push.
It shows the signs of a death by a thousand âcutâs. In the process, it degenerates into a
logical state that answers âNoâ to every query!
30. 1973 : ML
Robin Milner creates ML, a language based on the M&M type theory.
ML begets SML which has a formally specified semantics.
When asked for a formal semantics of the formal semantics Milner's head explodes.
Other well known languages in the ML family include OCaml, F#, and Visual Basic.
-- James Iry
31. 1980 : Smalltalk
After Smalltalk-71, Smalltalk-72, Smalltalk-75, âŠ, Alan Kay and team finally release
Smalltalk-80.
Kay remarks that Smalltalk is âobject-orientedâ. To explain that, he says âSmalltalk
programs are objects, and their executions are activation records, which are themselves
objects.â When asked what objects are made of, he replies âObjects, of course!â
In Smalltalk, â3 + 4â means: the object 3 receives a message called â+â with one
argument, which is another object â4â.
Industry experts are so thrilled by the beauty of its concepts, that they have not yet
recovered enough to actually use Smalltalk.
32. 1980 : Ada
Ichbiahâs Ada is a structured, statically typed, imperative, wide-spectrum, and object-
oriented high-level computer programming language, extended from Pascal and other
languages.
It has built-in language support for design-by-contract, extremely strong typing,
explicit concurrency, offering tasks, synchronous message passing, protected objects,
and non-determinism.
Its list of features being so long, people have not yet had time to learn enough of the
language to complete any large software project in Ada.
DoD declares the language a success, nevertheless.
33. 1983 : C++
Bjarne Stroustrup comes across a humongous clay oven. He is seized by a powerful
desire to collect a large body of programming language features into it.
He then brews the contents in C, giving rise to C++.
C++ is so complex that he - and all the programmers in the world - fail(s) to write a
compiler for it.
Fortunately, Stroustrup discovers a wormhole that opens into a supercomputer from
future. He quickly writes a compiler facade for the wormhole. All C++ programs are
now sent into that wormhole for compilation.
Leagues of innocent C++ programmers puzzle over why their builds take so long!
34. 1986 : Objective C
Cox and Love ponder the question of software reusability. Strongly aware of their
need to interoperate with C, they bolt on Smalltalk-like message-passing to C.
Accomplished initially as Object-Oriented Pre-Compiler, their creation has âall the
memory safety of C combined with all the blazing speed of Smalltalk.â
Historians suspect that an inadvertent word-level Spoonerism may have slipped into
that description of Objective C.
NeXT and, decades later, Apple give it an unexpected longevity.
35. 1986 : Erlang
When field technicians refuse to travel to godforsaken corners in order to conduct
repairs of Ericsson telecom systems, Joe Armstrong, Robert Virding and Mike
Williams decide to write software that would never go down.
A new programming language is created. Initial interpreter, written in Prolog, wakes
up the next morning every time it is launched.
Bogdan and Björn write a new VM, titled Bogdan/Björn's Erlang Abstract Machine
(BEAM), which runs 40 times faster.
General industry outside telecom is not excited because of Erlangâs Prolog syntax.
36. 1987 : Perl
Sorry to see APLâs legacy of beautiful symbols used all over programs go, Larry Wall
decides to reincarnate it in a UNIXy fashion.
The resultant scripting language soon begins to have a mind of its own, letting strings
be added to numbers, etc. The world hails the text processing capabilities of Perl.
Eric Raymond nicknames it âthe Swiss Army chainsaw of scripting languagesâ because
of its flexibility and power, and also because of its âuglinessâ.
Larry Wall serves a rejoinder describing Perl as the duct tape holding Internet
together, in a possible reference to its future role in serving CGI web pages.
37. 1990 : Haskell
A large team of type theory nerds get accidentally shut in a cave. Their discussions
give rise to the design of a new programming language.
Haskell is born as a pure functional language with non-strict evaluation.
Normal programmers fail to understand its pure semantics and monads. Wadler
pacifies their apprehensions by answering âNothing to get confused about: a monad is
nothing but a monoid in the category of endofunctors.â
A Haskell program written to interpret that explanation continues to evaluate lazily
(in true non-strict fashion). Its completion time is, by definition, not determinable.