On Being a Professional
Ph.D. in CompSci
Computer Scientist, Distributed Systems Architect and Passionate Programmer
What is this talk about
● Developers’ Essence
● Computer Science
● Polyglot Programming
What is this talk not about
● Soft Skills
● How to Sell ABC to XYZ
A person concerned with facets of the software
development process. Their work includes
researching, designing, implementing, and
testing software. A software developer may
take part in design, computer programming,
or software project management. They may
contribute to the overview of the project on the
application level rather than component-level or
individual programming tasks.
The required techniques of effective reasoning
are pretty formal, but as long as programming
is done by people that don't master them, the
software crisis will remain with us and will be
considered an incurable disease. And you
know what incurable diseases do: they invite
the quacks and charlatans in, who in this case
take the form of Software Engineering gurus.
Dijkstra (2000) "Answers to questions from students of Software Engineering"
Beauty is more important in computing than
anywhere else in technology because software is
so complicated. Beauty is the ultimate defense
David Gelernter, “Machine Beauty: Elegance and the Heart of Technology”
We have seen that computer programming is an art,
because it applies accumulated knowledge to the world,
because it requires skill and ingenuity, and especially
because it produces objects of beauty. A programmer who
subconsciously views himself as an artist will enjoy what he
does and will do it better.
D. Knuth, Computer Programming as an Art (1974)
Toolset is Legacy
“I suppose it is tempting, if the only tool you
have is a hammer, to treat everything as if it
were a nail”
― Abraham Maslow
“The tools we use have a profound (and
devious!) influence on our thinking habits, and,
therefore, on our thinking abilities”
― Edward Dijkstra
Math & Abstraction
The effective exploitation of his powers of abstraction must
be regarded as one of the most vital activities of a
E.W. Dijkstra, The Humble Programmer(1972)
Abstraction in mathematics is the process of extracting the
underlying essence of a mathematical concept, removing
any dependence on real world objects with which it might
originally have been connected, and generalizing it so that
it has wider applications or matching among other abstract
descriptions of equivalent phenomena.
Abstraction in CompSci
● Modern Lisps
● Control flow
● Abstract Data Types
● Lambda Abstraction
● Layered Architecture
Each significant piece of functionality in a
program should be implemented in just one
place in the source code. Where similar
functions are carried out by distinct pieces of
code, it is generally beneficial to combine them
into one by abstracting out the varying parts.
Benjamin C. Pierce in Types and Programming Languages (2002)
● Understanding function convexity very deeply
● Using induction to prove a recursive algorithm
● Formal correctness proofs
● DFAs, NFAs, Turing Machines, and theoretical computation in
● It makes a lot computer science concepts easier
● Specific concepts applicable to computer science are covered
arguably more deeply by mathematics
● Diversity of paradigms
● Precision and skepticism
● Math people are really smart =)
(Very) Applied Mathematics
● (Pure) Functions and State Machines ->
Stateful/Stateless Services Models
● HOF -> DI/IoC
● Set Theory -> SQL Joins
● Probability Theory -> Load Balancing,
Probabilistic Data Structures
Why Data Structures & Algorithms
○ Any Queueing processes
○ Distributed Persistent Queues for Event Processing
● Bloom filters:
■ Used by Cassandra to check which SSTables mostly contains the key
■ Hbase also uses it to optimize the reads
○ KV Database designing
○ Creating file system (S-Tree in HDFS)
○ Suffix tree: Genomic sequencing
○ Zoology: Maintaining the structures of the entire animal & plant kingdom.
○ Social Networks : Establishing relations between users based on some key
● B-Trees (Binary Trees):
○ E-commerce : while accessing unique keys. B-Trees balanced multi-way
search tree of order N.
○ Searching : Searching quickly for a given element
● Skip Lists:
● Implementation of ordered sets - Redis datastore
Single Example: Graphs
● Search (PageRank)
● The Facebook news feed & Facebook Graph Search.
● Google Navigation and Google Directions on top of Google Maps uses some
very efficient planar graph shortest path algorithms.
● Compilers use graph traversals to find code dependencies.
● Graph coloring algorithms are used when optimizing the code for parallel uses of
the CPU registers.
● CPU layout design problems are modeled as graph problems.
● Memory garbage collection strategies may use graph traversals.
● Inventory allocation in web advertising can be written as a network flow problem.
● Data replication problems frequently use minimal spanning tree algorithms to
keep the bandwidth use down.
● Most big data processing pipelines involve a series of interdependent steps that
can be modeled as a directed acyclic graph.
About the use of language: it is impossible to
sharpen a pencil with a blunt axe. It is equally
vain to try to do it with ten blunt axes instead.
E.W. Dijkstra, How do we tell truths that might hurt?(1975)
Why Polyglot Programming Matters
● Most interesting open-source projects are in different
language than yours (Storm, Finagle)
● Lay back and relax in Turing’ Tarpit
● Concurrency Idioms (Shared Memory, Actors, STM)
● Write once - run anywhere! JVM is mature enough to
host new languages (and they appear!)
● We don’t need most of GoF Patterns in FP!
● There are a complete frameworks build around lack of
some features in core language (DI containers)
Why Polyglot Programming Matters
● Another level of abstraction
● You can borrow design ideas from other
languages (e.g. I am a lambda junkie)
● Different understanding of things (address
arithmetic, OOP, HOF, Monads etc.)
● Effective reasoning (map and reduce)
● Idiomatic code: ceremony vs. conciseness
Abstract away from language!
Language Landscape is Changing
FORTRAN —"the infantile disorder"—, by now nearly 20 years old, is
hopelessly inadequate for whatever computer application you have in mind
today: it is now too clumsy, too risky, and too expensive to use.
PL/I —"the fatal disease"— belongs more to the problem set than to the
It is practically impossible to teach good programming to students that have
had a prior exposure to BASIC: as potential programmers they are mentally
mutilated beyond hope of regeneration.
The use of COBOL cripples the mind; its teaching should, therefore, be
regarded as a criminal offence.
APL is a mistake, carried through to perfection. It is the language of the
future for the programming techniques of the past: it creates a new generation
of coding bums.