SlideShare a Scribd company logo
1 of 44
Evolving as a Professional
Software Developer
Anton Kirillov
About Author
antonkirillov@
akirillov@
architect@
Ph.D. in CompSci

Computer Scientist, Distributed Systems Architect and Passionate Programmer
Agenda
What is this talk about
● Developers’ Essence
● Computer Science
● Polyglot Programming
● Evolution
What is this talk not about
● Agile
● Soft Skills
● How to Sell ABC to XYZ
Software Developer
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.
Wikipedia
Software Engineering
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 "Answers to questions from students of Software Engineering" (2000)
Beauty?

Beauty is more important in computing than anywhere else in
technology because software is so complicated. Beauty is
the ultimate defense against complexity.

David Gelernter, “Machine Beauty: Elegance and the Heart of Technology”
Programming = Art
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)
Programmers’ Competency Matrix
What’s in the Market
Market Requires Tools not Skills
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
Skillset
Math & Abstraction
The effective exploitation of his powers of abstraction must
be regarded as one of the most vital activities of a
competent programmer.
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
● Languages:
● OOP
● Functional
● Modern Lisps
● Control flow
● Abstract Data Types
● Lambda Abstraction
● Layered Architecture
Abstraction Principle
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)
Why Math
•
•
•
•
•
•

Understanding function convexity very deeply
Using induction to prove a recursive algorithm
Formal correctness proofs
DFAs, NFAs, Turing Machines, and theoretical computation in general
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,
Comp Sci
Theoretical Computer Science
Theoretical Computer Science
Applied Computer Science
Applied Computer Science
Applied Computer Science
Data Structures & Algorithms
Use Cases
Why Data Structures & Algorithms
●

Queues:
o Any Queueing processes
o Distributed Persistent Queues for Event Processing

•

Bloom filters:

•

•

o Used by Cassandra to check which SSTables mostly contains the key
o Hbase also uses it to optimize the reads
Trees:
o KV Database designing
o Creating file system (S-Tree in HDFS)
o Suffix tree: Genomic sequencing
o Zoology: Maintaining the structures of the entire animal & plant kingdom.
o Social Networks : Establishing relations between users based on some key
B-Trees (Binary Trees):
o
o

•

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:
o

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.
Programming Languages
Programming Languages

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
solution set.
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.
Code Samples
FizzBuzz: Java
for (int i = 1; i <= 100; i++){
if ((i % 15) == 0){
System.out.println("FizzBuzz");
} else if ((i % 3) == 0){
System.out.println("Fizz");
} else if ((i % 5) == 0){
System.out.println("Buzz");
} else {
System.out.println(i);
}
}
FizzBuzz: Java

for (int i = 1; i <= 100; System.out.println(++i
% 3 == 0 ? i % 5 == 0 ? "Fizzbuzz" : "Fizz" : i
% 5 == 0 ? "Buzz" : i));
FizzBuzz: Scala
(1 to 100) map { x =>
(x % 3, x % 5) match {
case (0,0) => "FizzBuzz"
case (0,_) => "Fizz"
case (_,0) => "Buzz"
case _ => x toString
}
} foreach println
FizzBuzz: Clojure
(use '[match.core :only (match)])
(doseq [n (range 1 101)]
(println (match [(mod n 3) (mod n 5)]
[0 0] "FizzBuzz"
[0 _] "Fizz"
[_ 0] "Buzz"
:else n)))
FizzBuzz: Enterprise Edition
EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
LoopComponentFactory myLoopComponentFactory = new LoopComponentFactory();
LoopInitializer myLoopInitializer = myLoopComponentFactory.createLoopInitializer();
LoopCondition myLoopCondition = myLoopComponentFactory.createLoopCondition();
LoopStep myLoopStep = myLoopComponentFactory.createLoopStep();
IsEvenlyDivisibleStrategyFactory myFizzStrategyFactory = new FizzStrategyFactory();
IsEvenlyDivisibleStrategy myFizzStrategy = myFizzStrategyFactory.createIsEvenlyDivisibleStrategy();
StringPrinterFactory myFizzStringPrinterFactory = new FizzStringPrinterFactory();
StringPrinter myFizzStringPrinter = myFizzStringPrinterFactory.createStringPrinter();
IsEvenlyDivisibleStrategyFactory myBuzzStrategyFactory = new BuzzStrategyFactory();
IsEvenlyDivisibleStrategy myBuzzStrategy = myBuzzStrategyFactory.createIsEvenlyDivisibleStrategy();
StringPrinterFactory myBuzzStringPrinterFactory = new BuzzStringPrinterFactory();
StringPrinter myBuzzStringPrinter = myBuzzStringPrinterFactory.createStringPrinter();
IsEvenlyDivisibleStrategyFactory myNoFizzNoBuzzStrategyFactory = new NoFizzNoBuzzStrategyFactory();
…..
FizzBuzz: Enterprise Edition
EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
Evolve!
Evolve!
● Wiki that!
● Build a robot!
● Attack a book!
● Compete!
● Toy projects!
● Open-source!
● Coursera?
Enjoy the Community!
● Attend conferences, check!
● Attend meetups in Your city
● Share Your knowledge, sync with community!

Ads =)
Recap
● Computer programming is the core competency
● Don’t depend on market
● Abstraction as main tool
● Choose field, not framework
● Be polyglot
First they ignore you, then they laugh at
you, then they fight you, then you win
Mahatma Gandhi
{}

thisRoom getPeople foreach( person => {
shakeHand(person)
thanks(person)
}
> ~questions?

More Related Content

What's hot

Beyond Hadoop 1.0: A Holistic View of Hadoop YARN, Spark and GraphLab
Beyond Hadoop 1.0: A Holistic View of Hadoop YARN, Spark and GraphLabBeyond Hadoop 1.0: A Holistic View of Hadoop YARN, Spark and GraphLab
Beyond Hadoop 1.0: A Holistic View of Hadoop YARN, Spark and GraphLabVijay Srinivas Agneeswaran, Ph.D
 
BigDL webinar - Deep Learning Library for Spark
BigDL webinar - Deep Learning Library for SparkBigDL webinar - Deep Learning Library for Spark
BigDL webinar - Deep Learning Library for SparkDESMOND YUEN
 
Large Scale Machine Learning with Apache Spark
Large Scale Machine Learning with Apache SparkLarge Scale Machine Learning with Apache Spark
Large Scale Machine Learning with Apache SparkCloudera, Inc.
 
What is Distributed Computing, Why we use Apache Spark
What is Distributed Computing, Why we use Apache SparkWhat is Distributed Computing, Why we use Apache Spark
What is Distributed Computing, Why we use Apache SparkAndy Petrella
 
Kaz Sato, Evangelist, Google at MLconf ATL 2016
Kaz Sato, Evangelist, Google at MLconf ATL 2016Kaz Sato, Evangelist, Google at MLconf ATL 2016
Kaz Sato, Evangelist, Google at MLconf ATL 2016MLconf
 
Advanced Data Science on Spark-(Reza Zadeh, Stanford)
Advanced Data Science on Spark-(Reza Zadeh, Stanford)Advanced Data Science on Spark-(Reza Zadeh, Stanford)
Advanced Data Science on Spark-(Reza Zadeh, Stanford)Spark Summit
 
High Performance Machine Learning in R with H2O
High Performance Machine Learning in R with H2OHigh Performance Machine Learning in R with H2O
High Performance Machine Learning in R with H2OSri Ambati
 
Josh Patterson, Advisor, Skymind – Deep learning for Industry at MLconf ATL 2016
Josh Patterson, Advisor, Skymind – Deep learning for Industry at MLconf ATL 2016Josh Patterson, Advisor, Skymind – Deep learning for Industry at MLconf ATL 2016
Josh Patterson, Advisor, Skymind – Deep learning for Industry at MLconf ATL 2016MLconf
 
Introduction into scalable graph analysis with Apache Giraph and Spark GraphX
Introduction into scalable graph analysis with Apache Giraph and Spark GraphXIntroduction into scalable graph analysis with Apache Giraph and Spark GraphX
Introduction into scalable graph analysis with Apache Giraph and Spark GraphXrhatr
 
A Tale of Three Deep Learning Frameworks: TensorFlow, Keras, & PyTorch with B...
A Tale of Three Deep Learning Frameworks: TensorFlow, Keras, & PyTorch with B...A Tale of Three Deep Learning Frameworks: TensorFlow, Keras, & PyTorch with B...
A Tale of Three Deep Learning Frameworks: TensorFlow, Keras, & PyTorch with B...Databricks
 
A Scaleable Implementation of Deep Learning on Spark -Alexander Ulanov
A Scaleable Implementation of Deep Learning on Spark -Alexander UlanovA Scaleable Implementation of Deep Learning on Spark -Alexander Ulanov
A Scaleable Implementation of Deep Learning on Spark -Alexander UlanovSpark Summit
 
Self driving computers active learning workflows with human interpretable ve...
Self driving computers  active learning workflows with human interpretable ve...Self driving computers  active learning workflows with human interpretable ve...
Self driving computers active learning workflows with human interpretable ve...Adam Gibson
 
First steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with ExamplesFirst steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with ExamplesFelipe
 
Basics of Distributed Systems - Distributed Storage
Basics of Distributed Systems - Distributed StorageBasics of Distributed Systems - Distributed Storage
Basics of Distributed Systems - Distributed StorageNilesh Salpe
 
Misha Bilenko, Principal Researcher, Microsoft at MLconf SEA - 5/01/15
Misha Bilenko, Principal Researcher, Microsoft at MLconf SEA - 5/01/15Misha Bilenko, Principal Researcher, Microsoft at MLconf SEA - 5/01/15
Misha Bilenko, Principal Researcher, Microsoft at MLconf SEA - 5/01/15MLconf
 
Scalable Algorithm Design with MapReduce
Scalable Algorithm Design with MapReduceScalable Algorithm Design with MapReduce
Scalable Algorithm Design with MapReducePietro Michiardi
 
Flare: Scale Up Spark SQL with Native Compilation and Set Your Data on Fire! ...
Flare: Scale Up Spark SQL with Native Compilation and Set Your Data on Fire! ...Flare: Scale Up Spark SQL with Native Compilation and Set Your Data on Fire! ...
Flare: Scale Up Spark SQL with Native Compilation and Set Your Data on Fire! ...Databricks
 
Machine learning at Scale with Apache Spark
Machine learning at Scale with Apache SparkMachine learning at Scale with Apache Spark
Machine learning at Scale with Apache SparkMartin Zapletal
 

What's hot (20)

Beyond Hadoop 1.0: A Holistic View of Hadoop YARN, Spark and GraphLab
Beyond Hadoop 1.0: A Holistic View of Hadoop YARN, Spark and GraphLabBeyond Hadoop 1.0: A Holistic View of Hadoop YARN, Spark and GraphLab
Beyond Hadoop 1.0: A Holistic View of Hadoop YARN, Spark and GraphLab
 
BigDL webinar - Deep Learning Library for Spark
BigDL webinar - Deep Learning Library for SparkBigDL webinar - Deep Learning Library for Spark
BigDL webinar - Deep Learning Library for Spark
 
Large Scale Machine Learning with Apache Spark
Large Scale Machine Learning with Apache SparkLarge Scale Machine Learning with Apache Spark
Large Scale Machine Learning with Apache Spark
 
What is Distributed Computing, Why we use Apache Spark
What is Distributed Computing, Why we use Apache SparkWhat is Distributed Computing, Why we use Apache Spark
What is Distributed Computing, Why we use Apache Spark
 
Kaz Sato, Evangelist, Google at MLconf ATL 2016
Kaz Sato, Evangelist, Google at MLconf ATL 2016Kaz Sato, Evangelist, Google at MLconf ATL 2016
Kaz Sato, Evangelist, Google at MLconf ATL 2016
 
Yarn spark next_gen_hadoop_8_jan_2014
Yarn spark next_gen_hadoop_8_jan_2014Yarn spark next_gen_hadoop_8_jan_2014
Yarn spark next_gen_hadoop_8_jan_2014
 
Advanced Data Science on Spark-(Reza Zadeh, Stanford)
Advanced Data Science on Spark-(Reza Zadeh, Stanford)Advanced Data Science on Spark-(Reza Zadeh, Stanford)
Advanced Data Science on Spark-(Reza Zadeh, Stanford)
 
High Performance Machine Learning in R with H2O
High Performance Machine Learning in R with H2OHigh Performance Machine Learning in R with H2O
High Performance Machine Learning in R with H2O
 
Josh Patterson, Advisor, Skymind – Deep learning for Industry at MLconf ATL 2016
Josh Patterson, Advisor, Skymind – Deep learning for Industry at MLconf ATL 2016Josh Patterson, Advisor, Skymind – Deep learning for Industry at MLconf ATL 2016
Josh Patterson, Advisor, Skymind – Deep learning for Industry at MLconf ATL 2016
 
Introduction into scalable graph analysis with Apache Giraph and Spark GraphX
Introduction into scalable graph analysis with Apache Giraph and Spark GraphXIntroduction into scalable graph analysis with Apache Giraph and Spark GraphX
Introduction into scalable graph analysis with Apache Giraph and Spark GraphX
 
A Tale of Three Deep Learning Frameworks: TensorFlow, Keras, & PyTorch with B...
A Tale of Three Deep Learning Frameworks: TensorFlow, Keras, & PyTorch with B...A Tale of Three Deep Learning Frameworks: TensorFlow, Keras, & PyTorch with B...
A Tale of Three Deep Learning Frameworks: TensorFlow, Keras, & PyTorch with B...
 
A Scaleable Implementation of Deep Learning on Spark -Alexander Ulanov
A Scaleable Implementation of Deep Learning on Spark -Alexander UlanovA Scaleable Implementation of Deep Learning on Spark -Alexander Ulanov
A Scaleable Implementation of Deep Learning on Spark -Alexander Ulanov
 
Self driving computers active learning workflows with human interpretable ve...
Self driving computers  active learning workflows with human interpretable ve...Self driving computers  active learning workflows with human interpretable ve...
Self driving computers active learning workflows with human interpretable ve...
 
First steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with ExamplesFirst steps with Keras 2: A tutorial with Examples
First steps with Keras 2: A tutorial with Examples
 
Basics of Distributed Systems - Distributed Storage
Basics of Distributed Systems - Distributed StorageBasics of Distributed Systems - Distributed Storage
Basics of Distributed Systems - Distributed Storage
 
Spark
SparkSpark
Spark
 
Misha Bilenko, Principal Researcher, Microsoft at MLconf SEA - 5/01/15
Misha Bilenko, Principal Researcher, Microsoft at MLconf SEA - 5/01/15Misha Bilenko, Principal Researcher, Microsoft at MLconf SEA - 5/01/15
Misha Bilenko, Principal Researcher, Microsoft at MLconf SEA - 5/01/15
 
Scalable Algorithm Design with MapReduce
Scalable Algorithm Design with MapReduceScalable Algorithm Design with MapReduce
Scalable Algorithm Design with MapReduce
 
Flare: Scale Up Spark SQL with Native Compilation and Set Your Data on Fire! ...
Flare: Scale Up Spark SQL with Native Compilation and Set Your Data on Fire! ...Flare: Scale Up Spark SQL with Native Compilation and Set Your Data on Fire! ...
Flare: Scale Up Spark SQL with Native Compilation and Set Your Data on Fire! ...
 
Machine learning at Scale with Apache Spark
Machine learning at Scale with Apache SparkMachine learning at Scale with Apache Spark
Machine learning at Scale with Apache Spark
 

Viewers also liked

Архитектура Apache HAWQ Highload++ 2015
Архитектура Apache HAWQ Highload++ 2015Архитектура Apache HAWQ Highload++ 2015
Архитектура Apache HAWQ Highload++ 2015Alexey Grishchenko
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentAnton Kirillov
 
SplunkLive! Utrecht - Keynote - Rick Fitz
SplunkLive! Utrecht - Keynote - Rick FitzSplunkLive! Utrecht - Keynote - Rick Fitz
SplunkLive! Utrecht - Keynote - Rick FitzSplunk
 
Building Business Service Intelligence with ITSI
Building Business Service Intelligence with ITSIBuilding Business Service Intelligence with ITSI
Building Business Service Intelligence with ITSISplunk
 
SplunkLive! Utrecht - Splunk for IT Operations - Rick Fitz
SplunkLive! Utrecht - Splunk for IT Operations - Rick FitzSplunkLive! Utrecht - Splunk for IT Operations - Rick Fitz
SplunkLive! Utrecht - Splunk for IT Operations - Rick FitzSplunk
 
Splunk Webinar – IT Operations auf den nächsten Level bringen
Splunk Webinar – IT Operations auf den nächsten Level bringenSplunk Webinar – IT Operations auf den nächsten Level bringen
Splunk Webinar – IT Operations auf den nächsten Level bringenSplunk
 
SplunkLive! Utrecht - Splunk for Security - Monzy Merza
SplunkLive! Utrecht - Splunk for Security - Monzy MerzaSplunkLive! Utrecht - Splunk for Security - Monzy Merza
SplunkLive! Utrecht - Splunk for Security - Monzy MerzaSplunk
 
Wie Sie Ransomware aufspüren und was Sie dagegen machen können
Wie Sie Ransomware aufspüren und was Sie dagegen machen könnenWie Sie Ransomware aufspüren und was Sie dagegen machen können
Wie Sie Ransomware aufspüren und was Sie dagegen machen könnenSplunk
 
Machine Data 101
Machine Data 101Machine Data 101
Machine Data 101Splunk
 
Data processing platforms with SMACK: Spark and Mesos internals
Data processing platforms with SMACK:  Spark and Mesos internalsData processing platforms with SMACK:  Spark and Mesos internals
Data processing platforms with SMACK: Spark and Mesos internalsAnton Kirillov
 
Delivering business value from operational insights at ING Bank
Delivering business value from operational insights at ING BankDelivering business value from operational insights at ING Bank
Delivering business value from operational insights at ING BankSplunk
 
Apache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & InternalsApache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & InternalsAnton Kirillov
 
Softcat Splunk Discovery Day Manchester, March 2017
Softcat Splunk Discovery Day Manchester, March 2017Softcat Splunk Discovery Day Manchester, March 2017
Softcat Splunk Discovery Day Manchester, March 2017Splunk
 
Building a Security Information and Event Management platform at Travis Per...
 	Building a Security Information and Event Management platform at Travis Per... 	Building a Security Information and Event Management platform at Travis Per...
Building a Security Information and Event Management platform at Travis Per...Splunk
 
Threat Hunting with Splunk
Threat Hunting with SplunkThreat Hunting with Splunk
Threat Hunting with SplunkSplunk
 
Apache Spark 2.0: Faster, Easier, and Smarter
Apache Spark 2.0: Faster, Easier, and SmarterApache Spark 2.0: Faster, Easier, and Smarter
Apache Spark 2.0: Faster, Easier, and SmarterDatabricks
 

Viewers also liked (20)

Архитектура Apache HAWQ Highload++ 2015
Архитектура Apache HAWQ Highload++ 2015Архитектура Apache HAWQ Highload++ 2015
Архитектура Apache HAWQ Highload++ 2015
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application Development
 
SplunkLive! Utrecht - Keynote - Rick Fitz
SplunkLive! Utrecht - Keynote - Rick FitzSplunkLive! Utrecht - Keynote - Rick Fitz
SplunkLive! Utrecht - Keynote - Rick Fitz
 
Building Business Service Intelligence with ITSI
Building Business Service Intelligence with ITSIBuilding Business Service Intelligence with ITSI
Building Business Service Intelligence with ITSI
 
SplunkLive! Utrecht - Splunk for IT Operations - Rick Fitz
SplunkLive! Utrecht - Splunk for IT Operations - Rick FitzSplunkLive! Utrecht - Splunk for IT Operations - Rick Fitz
SplunkLive! Utrecht - Splunk for IT Operations - Rick Fitz
 
Splunk Webinar – IT Operations auf den nächsten Level bringen
Splunk Webinar – IT Operations auf den nächsten Level bringenSplunk Webinar – IT Operations auf den nächsten Level bringen
Splunk Webinar – IT Operations auf den nächsten Level bringen
 
Greenplum Architecture
Greenplum ArchitectureGreenplum Architecture
Greenplum Architecture
 
SplunkLive! Utrecht - Splunk for Security - Monzy Merza
SplunkLive! Utrecht - Splunk for Security - Monzy MerzaSplunkLive! Utrecht - Splunk for Security - Monzy Merza
SplunkLive! Utrecht - Splunk for Security - Monzy Merza
 
Wie Sie Ransomware aufspüren und was Sie dagegen machen können
Wie Sie Ransomware aufspüren und was Sie dagegen machen könnenWie Sie Ransomware aufspüren und was Sie dagegen machen können
Wie Sie Ransomware aufspüren und was Sie dagegen machen können
 
Machine Data 101
Machine Data 101Machine Data 101
Machine Data 101
 
Data processing platforms with SMACK: Spark and Mesos internals
Data processing platforms with SMACK:  Spark and Mesos internalsData processing platforms with SMACK:  Spark and Mesos internals
Data processing platforms with SMACK: Spark and Mesos internals
 
Apache HAWQ Architecture
Apache HAWQ ArchitectureApache HAWQ Architecture
Apache HAWQ Architecture
 
Delivering business value from operational insights at ING Bank
Delivering business value from operational insights at ING BankDelivering business value from operational insights at ING Bank
Delivering business value from operational insights at ING Bank
 
MPP vs Hadoop
MPP vs HadoopMPP vs Hadoop
MPP vs Hadoop
 
Apache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & InternalsApache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & Internals
 
Softcat Splunk Discovery Day Manchester, March 2017
Softcat Splunk Discovery Day Manchester, March 2017Softcat Splunk Discovery Day Manchester, March 2017
Softcat Splunk Discovery Day Manchester, March 2017
 
Building a Security Information and Event Management platform at Travis Per...
 	Building a Security Information and Event Management platform at Travis Per... 	Building a Security Information and Event Management platform at Travis Per...
Building a Security Information and Event Management platform at Travis Per...
 
Threat Hunting with Splunk
Threat Hunting with SplunkThreat Hunting with Splunk
Threat Hunting with Splunk
 
Apache Spark 2.0: Faster, Easier, and Smarter
Apache Spark 2.0: Faster, Easier, and SmarterApache Spark 2.0: Faster, Easier, and Smarter
Apache Spark 2.0: Faster, Easier, and Smarter
 
Modern Data Architecture
Modern Data ArchitectureModern Data Architecture
Modern Data Architecture
 

Similar to Evolving as a professional software developer

Антон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLabАнтон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLabDiana Dymolazova
 
Computing with Directed Labeled Graphs
Computing with Directed Labeled GraphsComputing with Directed Labeled Graphs
Computing with Directed Labeled GraphsMarko Rodriguez
 
Brownfield Domain Driven Design
Brownfield Domain Driven DesignBrownfield Domain Driven Design
Brownfield Domain Driven DesignNicolò Pignatelli
 
Practical functional programming in JavaScript for the non-mathematician
Practical functional programming in JavaScript for the non-mathematicianPractical functional programming in JavaScript for the non-mathematician
Practical functional programming in JavaScript for the non-mathematicianIan Thomas
 
Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...InfinIT - Innovationsnetværket for it
 
Emarsys XP reggeli 2016.08.12.
Emarsys XP reggeli 2016.08.12.Emarsys XP reggeli 2016.08.12.
Emarsys XP reggeli 2016.08.12.Milán Unicsovics
 
Analyzing Big Data's Weakest Link (hint: it might be you)
Analyzing Big Data's Weakest Link  (hint: it might be you)Analyzing Big Data's Weakest Link  (hint: it might be you)
Analyzing Big Data's Weakest Link (hint: it might be you)HPCC Systems
 
Big Data: the weakest link
Big Data: the weakest linkBig Data: the weakest link
Big Data: the weakest linkCS, NcState
 
The Apache Solr Semantic Knowledge Graph
The Apache Solr Semantic Knowledge GraphThe Apache Solr Semantic Knowledge Graph
The Apache Solr Semantic Knowledge GraphTrey Grainger
 
FP vs OOP : Design Methodology by Harshad Nawathe
FP vs OOP : Design Methodology by Harshad NawatheFP vs OOP : Design Methodology by Harshad Nawathe
FP vs OOP : Design Methodology by Harshad NawatheChandulal Kavar
 
Themes for graduation projects 2010
Themes for graduation projects   2010Themes for graduation projects   2010
Themes for graduation projects 2010mohamedsamyali
 
Software Architectures, Week 1 - Monolithic Architectures
Software Architectures, Week 1 - Monolithic ArchitecturesSoftware Architectures, Week 1 - Monolithic Architectures
Software Architectures, Week 1 - Monolithic ArchitecturesAngelos Kapsimanis
 
Sudipta_Mukherjee_Resume_APR_2023.pdf
Sudipta_Mukherjee_Resume_APR_2023.pdfSudipta_Mukherjee_Resume_APR_2023.pdf
Sudipta_Mukherjee_Resume_APR_2023.pdfsudipto801
 
Thinking in parallel ab tuladev
Thinking in parallel ab tuladevThinking in parallel ab tuladev
Thinking in parallel ab tuladevPavel Tsukanov
 
History of Object Orientation in OOP.ppt
History of Object Orientation in OOP.pptHistory of Object Orientation in OOP.ppt
History of Object Orientation in OOP.pptathar549116
 
History of Object Orientation in OOP.ppt
History of Object Orientation in OOP.pptHistory of Object Orientation in OOP.ppt
History of Object Orientation in OOP.pptMuhammad Athar
 

Similar to Evolving as a professional software developer (20)

Антон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLabАнтон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLab
 
Learning to code in 2020
Learning to code in 2020Learning to code in 2020
Learning to code in 2020
 
Computing with Directed Labeled Graphs
Computing with Directed Labeled GraphsComputing with Directed Labeled Graphs
Computing with Directed Labeled Graphs
 
Brownfield Domain Driven Design
Brownfield Domain Driven DesignBrownfield Domain Driven Design
Brownfield Domain Driven Design
 
Practical functional programming in JavaScript for the non-mathematician
Practical functional programming in JavaScript for the non-mathematicianPractical functional programming in JavaScript for the non-mathematician
Practical functional programming in JavaScript for the non-mathematician
 
Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...
 
Emarsys XP reggeli 2016.08.12.
Emarsys XP reggeli 2016.08.12.Emarsys XP reggeli 2016.08.12.
Emarsys XP reggeli 2016.08.12.
 
Persian MNIST in 5 Minutes
Persian MNIST in 5 MinutesPersian MNIST in 5 Minutes
Persian MNIST in 5 Minutes
 
Analyzing Big Data's Weakest Link (hint: it might be you)
Analyzing Big Data's Weakest Link  (hint: it might be you)Analyzing Big Data's Weakest Link  (hint: it might be you)
Analyzing Big Data's Weakest Link (hint: it might be you)
 
Big Data: the weakest link
Big Data: the weakest linkBig Data: the weakest link
Big Data: the weakest link
 
The Apache Solr Semantic Knowledge Graph
The Apache Solr Semantic Knowledge GraphThe Apache Solr Semantic Knowledge Graph
The Apache Solr Semantic Knowledge Graph
 
FP vs OOP : Design Methodology by Harshad Nawathe
FP vs OOP : Design Methodology by Harshad NawatheFP vs OOP : Design Methodology by Harshad Nawathe
FP vs OOP : Design Methodology by Harshad Nawathe
 
Themes for graduation projects 2010
Themes for graduation projects   2010Themes for graduation projects   2010
Themes for graduation projects 2010
 
Software Architectures, Week 1 - Monolithic Architectures
Software Architectures, Week 1 - Monolithic ArchitecturesSoftware Architectures, Week 1 - Monolithic Architectures
Software Architectures, Week 1 - Monolithic Architectures
 
Lec 1 25_jul13
Lec 1 25_jul13Lec 1 25_jul13
Lec 1 25_jul13
 
Sudipta_Mukherjee_Resume_APR_2023.pdf
Sudipta_Mukherjee_Resume_APR_2023.pdfSudipta_Mukherjee_Resume_APR_2023.pdf
Sudipta_Mukherjee_Resume_APR_2023.pdf
 
Paradigms
ParadigmsParadigms
Paradigms
 
Thinking in parallel ab tuladev
Thinking in parallel ab tuladevThinking in parallel ab tuladev
Thinking in parallel ab tuladev
 
History of Object Orientation in OOP.ppt
History of Object Orientation in OOP.pptHistory of Object Orientation in OOP.ppt
History of Object Orientation in OOP.ppt
 
History of Object Orientation in OOP.ppt
History of Object Orientation in OOP.pptHistory of Object Orientation in OOP.ppt
History of Object Orientation in OOP.ppt
 

Recently uploaded

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard37
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 

Recently uploaded (20)

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 

Evolving as a professional software developer

  • 1. Evolving as a Professional Software Developer Anton Kirillov
  • 2. About Author antonkirillov@ akirillov@ architect@ Ph.D. in CompSci Computer Scientist, Distributed Systems Architect and Passionate Programmer
  • 3. Agenda What is this talk about ● Developers’ Essence ● Computer Science ● Polyglot Programming ● Evolution What is this talk not about ● Agile ● Soft Skills ● How to Sell ABC to XYZ
  • 4. Software Developer 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. Wikipedia
  • 5. Software Engineering 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 "Answers to questions from students of Software Engineering" (2000)
  • 6. Beauty? Beauty is more important in computing than anywhere else in technology because software is so complicated. Beauty is the ultimate defense against complexity. David Gelernter, “Machine Beauty: Elegance and the Heart of Technology”
  • 7. Programming = Art 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)
  • 10. Market Requires Tools not Skills
  • 11. 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
  • 13. Math & Abstraction The effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer. 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.
  • 14. Abstraction in CompSci ● Languages: ● OOP ● Functional ● Modern Lisps ● Control flow ● Abstract Data Types ● Lambda Abstraction ● Layered Architecture
  • 15. Abstraction Principle 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)
  • 16. Why Math • • • • • • Understanding function convexity very deeply Using induction to prove a recursive algorithm Formal correctness proofs DFAs, NFAs, Turing Machines, and theoretical computation in general 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 =)
  • 17. (Very) Applied Mathematics ● (Pure) Functions and State Machines -> Stateful/Stateless Services Models ● HOF -> DI/IoC ● Set Theory -> SQL Joins ● Probability Theory -> Load Balancing,
  • 24. Data Structures & Algorithms Use Cases
  • 25. Why Data Structures & Algorithms ● Queues: o Any Queueing processes o Distributed Persistent Queues for Event Processing • Bloom filters: • • o Used by Cassandra to check which SSTables mostly contains the key o Hbase also uses it to optimize the reads Trees: o KV Database designing o Creating file system (S-Tree in HDFS) o Suffix tree: Genomic sequencing o Zoology: Maintaining the structures of the entire animal & plant kingdom. o Social Networks : Establishing relations between users based on some key B-Trees (Binary Trees): o o • 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: o Implementation of ordered sets - Redis datastore
  • 26. 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.
  • 28. Programming Languages 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)
  • 29. 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)
  • 30. 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!
  • 31. 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 solution set. 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.
  • 33. FizzBuzz: Java for (int i = 1; i <= 100; i++){ if ((i % 15) == 0){ System.out.println("FizzBuzz"); } else if ((i % 3) == 0){ System.out.println("Fizz"); } else if ((i % 5) == 0){ System.out.println("Buzz"); } else { System.out.println(i); } }
  • 34. FizzBuzz: Java for (int i = 1; i <= 100; System.out.println(++i % 3 == 0 ? i % 5 == 0 ? "Fizzbuzz" : "Fizz" : i % 5 == 0 ? "Buzz" : i));
  • 35. FizzBuzz: Scala (1 to 100) map { x => (x % 3, x % 5) match { case (0,0) => "FizzBuzz" case (0,_) => "Fizz" case (_,0) => "Buzz" case _ => x toString } } foreach println
  • 36. FizzBuzz: Clojure (use '[match.core :only (match)]) (doseq [n (range 1 101)] (println (match [(mod n 3) (mod n 5)] [0 0] "FizzBuzz" [0 _] "Fizz" [_ 0] "Buzz" :else n)))
  • 37. FizzBuzz: Enterprise Edition EnterpriseQualityCoding/FizzBuzzEnterpriseEdition LoopComponentFactory myLoopComponentFactory = new LoopComponentFactory(); LoopInitializer myLoopInitializer = myLoopComponentFactory.createLoopInitializer(); LoopCondition myLoopCondition = myLoopComponentFactory.createLoopCondition(); LoopStep myLoopStep = myLoopComponentFactory.createLoopStep(); IsEvenlyDivisibleStrategyFactory myFizzStrategyFactory = new FizzStrategyFactory(); IsEvenlyDivisibleStrategy myFizzStrategy = myFizzStrategyFactory.createIsEvenlyDivisibleStrategy(); StringPrinterFactory myFizzStringPrinterFactory = new FizzStringPrinterFactory(); StringPrinter myFizzStringPrinter = myFizzStringPrinterFactory.createStringPrinter(); IsEvenlyDivisibleStrategyFactory myBuzzStrategyFactory = new BuzzStrategyFactory(); IsEvenlyDivisibleStrategy myBuzzStrategy = myBuzzStrategyFactory.createIsEvenlyDivisibleStrategy(); StringPrinterFactory myBuzzStringPrinterFactory = new BuzzStringPrinterFactory(); StringPrinter myBuzzStringPrinter = myBuzzStringPrinterFactory.createStringPrinter(); IsEvenlyDivisibleStrategyFactory myNoFizzNoBuzzStrategyFactory = new NoFizzNoBuzzStrategyFactory(); …..
  • 40. Evolve! ● Wiki that! ● Build a robot! ● Attack a book! ● Compete! ● Toy projects! ● Open-source! ● Coursera?
  • 41. Enjoy the Community! ● Attend conferences, check! ● Attend meetups in Your city ● Share Your knowledge, sync with community! Ads =)
  • 42. Recap ● Computer programming is the core competency ● Don’t depend on market ● Abstraction as main tool ● Choose field, not framework ● Be polyglot
  • 43. First they ignore you, then they laugh at you, then they fight you, then you win Mahatma Gandhi
  • 44. {} thisRoom getPeople foreach( person => { shakeHand(person) thanks(person) } > ~questions?

Editor's Notes

  1. Я Антон Кириллов, разрабатываю серверные платформы в ZeptoLab. Немножко понимаю в Computer Science, занимаюсь распределенными системами и обожаю программирование!
  2. Сегодняшний доклад на очень серьезную тему, я постараюсь поделиться своими взглядами на профессию, как она представляется мне. В докладе я попробую раскрыть суть профессии разработчика, почему нам нужно знать Computer Science и математику, почему важно знать больше одной парадигмы программирования и немного о том, как развиваться и как подходить к обучению. В этом докладе вы не найдете ничего о процессных практиках, навыках общения и переписки, а так же ответов на вопросы “как продать какую-то практику какому-то начальнику” Котиков не будет!
  3. Итак, я долго искал адекватное определение разработчика программного обеспечения, и не смог найти чего-то внятного и однозначного, поэтому привожу определение из Википедии. Мы видим, что разработчик ПО - это человек, который имеет дело с аспектами разработки ПО, его работа включает исследование, проектирование, имплементацию и тестирование ПО. Пока вроде все нормально. Разработчик может принимать участие в проектировании, программировании и проджект менеджменте. Бла-бла-бла… На самом деле, ключевой компетенцией разработчика являются навыки программирования! И тут я подумал: “Почему определение так размыто? Почему тестирование обособлено? Причем здесь проджект менеджмент вообще?” Почему ключевой аспект профессии окружен всем этим мусором? Какая-то несфокусированная профессия: вроде занимается всем, а чем конкретно - непонятно. И вообще, это слово “проект” никакого отношения к разработке не имеет. Вы можете вполне обоснованно возразить, что это кодеры по ТЗ кодят легаси, а разработчик, он такой весь еще владеет практиками программной инженерии, которая включает в себя управление проектами. Мы сейчас будем фокусироваться, отбрасывать лишнее и, наконец, придем к сути программирования и программистов.
  4. Под вывеской “программная инженерия” скрывается на самом деле опасный враг, который говорит нам о том, что необходимо заменить интеллектуальные дисциплины управленческими. Эти процессные практики говорят нам как программировать, если мы не умеем. Подумайте, ведь действительно адаптивное планирование спринтов с планинг покером позволяет нам оценить сроки в относительных величинах, независимо от уровня и способностей команды. А ведь навыки программистов - это ключевая вещь, которая влияет на успех, качество и сроки продукта, независимо от того какой процесс вы используете! Дейкстра еще в 70-х начал говорить о неком “софтверном кризисе”, и практически до самой смерти он пропагандировал одну простую и понятную мысль: что до тех пор, пока программированием занимаются люди, которые не знают формальных подходов к рассуждениям (логика), кризис будет только усиливаться.
  5. В классических метриках программных продуктов отсутствует понятие красоты! А ведь элегантность программного обеспечения напрямую влияет на качество! Красота важна в программировании больше, чем где-либо в технологии потому, что программное обеспечение очень сложное. Красота - единственно верное средство борьбы со сложностью! Переводя на понятный язык, под красотой мы понимаем ключевые метрики качества ПО: читабельность, расширяемость, масштабируемость, поддерживаемость и даже понятность! Отсутсвие красоты сажает вас в яму технического долга, из которой мало кто выбирался.
  6. Программирование является исскуством, потому что использет накопленные знания о мире, потому что требует навыков и изобретательности и особенно потому что производит обекты изящества! И самое главное, программист, который подсознательно воспринимает себя как творца, наслаждается тем, что он делает и делает это еще лучше!!! И именно программирование является стержнем профессии! За последние десятилетия программирование обросло ритуалами, фокус размылся, начал смещаться с сути программирования на разнообразные практики.
  7. Это вообще не связано с предыдущим слайдом и представляет ключевой тулсет для программера. Здесь мы видем, что программер 80-го уровня должен знать достаточно нестандартные структуры данных, такие как красно-черные деревья, скип листы, трайс. Может определять задачи динамического программирования, алгоритмы на графах, NP проблемы. Понимает, как его программы исполняются непосредственноа на железе, как работает сборка мусора, статическое и динамическое связывание. Эти навыки маст-хэв, чтобы быть хотя бы средним программером. Это то, что спрашивают на собеседованиях любые серьезные компании и да, это весьма интересно =) Если вы посмотрите ссылку, то из теоретических основ CompSci развитый программист должен ознакомиться с SICP, а если по этой книге занимались, то в конце вы написали интерпретатор лиспа.. Давайте посмотрим на индустрию и требования рынка.
  8. Сегодня рынок диктует разные условия, Тренды возникают и исчезают, создают шум и пропадают или становятся стандартами. Примеры такий всплесков, это Big Data, MapReduce, сейчас очень популярна такая штука, как Data Science. На самом деле, если посмотреть на список знаний, необходимых дата сайентисту - там нет ничего особенного, немного математики, немного программирования, алгоритмов и структур данных. Статистика и визуализация. Остальное - шум, который добавлен туда непонятно по какому признаку. Например OLAP как Fundamentals - это что такое вообще? Что это знание подразумевает? Тем не менее, возникновение все более наукоемких прикладных областей является позитивным фактором. Сегодняшние задачи бросают новые вызовы, ответить на которые старыми методами невозможно. Требуется все больше и больше знаний для решения задач. Но это увы в R&amp;D и прочих наукоемких областях. Я попробовал категоризовать потребности рынка и разбил их на 4 большие группы. Widespread technologies a similar to smoking: not necessary that they are good.
  9. В реальности требования рынка очень специфичны и узкосфокусированы. На мой взгляд, технологии, которые сейчас востребованы можно разделить на 4 группы. Давайте посмотрим на них еще и с точки зрения проблем, которые они решают. “Научные” определяют формальные средства для решения неких фундаментальных проблем. Как правило представляют некую модель, в терминах которой формулируется проблема и решение. Зачастую не имеют имплементации. Можно вспомнить, как возникли языки программирования. “Подход” предлагает решение уже некой конкретной, измеримой проблемы и имеет более узкий фокус, чем научная группа. Здесь мы уже имеем дело с некими готовыми продуктами. “Framework&apos;и”являются еще более узкой нишей, сфокусированной на решении вполне конкретных задач разработки. С их помощью часть проблемы уже решена, часть – ваше решение. А что же “языки”? Какие проблемы они решают? Язык позволяет решать все те же проблемы, только без привнесения сложности, которую дают фреймворки и готовые решения. Язык дает программисту возможность более точно и точечно формулировать решение проблемы. Реализовывать алгоритм. По поводу научной группы сразу понятно, что либо вы работаете в этой сфере, либо нет. Машинное обучение в системе учета времени не нужно. Такие технологии не введешь, потому что придется выдумывать проблему, которую потом решать. С коробочными решениями попроще, они меньше зависят от области, но зависят, а так же являются готовым решением проблемы, и вы пытаетесь не изучить подход к решению проблемы, а научиться пользоваться новым молотком. Фреймворки поинтереснее, там решены проблемы разработки и интеграции, а разработчику остается сконфигурировать XML, и дописать немного бизнес-логики. Фреймворк надо знать еще лучше и хорошо понимать его. В общем, никто не любит легаси, но все обожают ковыряться с фреймворками =) Какие выводы можно из этого сделать: рынок требует знаний конкретных инструментов, а не методов решения задач. Конкретные подходы (типа ООП) против научных доказательств. Юнит тесты вместо формальных моделей. Чтобы найти работу, нужно знание стнадартных инструментов, которые используются везде. К чему это приводит, хорошо ли знание СТАНДАРТНЫХ инструментов?
  10. Эти фреймворки и библиотеки, которые требует от нас рынок, спринг-хибернейт-от-года - это молотки, которыми забивают гвозди, шурупы, скобки для степлера, скрепки и монтажный клей тоже забивают Эти вещи лишают нас возможности думать, ведь не зря они называются РЕШЕНИЯ! Тебе не надо ничего делать, просто правь XML, бери мануал, интегрируй. Инструменты имеют огромное влияние на наши мыслительные привычки и, как следствие на наши умственные способности! В чем тогда заключается НАВЫК программиста? В умении пользоваться уже готовыми решениями? Кто любит легаси? Кто-нибудь любит? Ну вот, но зато все любят Спринг и Хибернейт, которые и есть легаси, потому что они не позволяют вам сделать иначе, чем предусмотрено!
  11. Мы не можем просто взять и использовать фреймворк, нужно уметь моделировать абстракции, иметь общирный инструментарий и знания. Нам нужна математика, как механизм для формализации и абстракции, CompSci в качестве тулбокса для дизайна решений и языки программирования для реализации. Кто-то скажет, что языки - это тоже инструменты. Это отчасти правда, языки оказывают огромное влияние на образ мышления. Однако, основой языка является формальная математика и аксиоматический аппарат, позволяющий формально доказывать корректность тех или иных утверждение и заключений!
  12. Эффективное использование возможнойстей абстракции должно являться ключевым навыком компетентного программиста! Математика предоставляет нам роскошнейший аппарат для этого. Давайте разбираться. Самая популярная абстракция сегодня - это *AAS, Мы также можем представить программу как функцию от огромного количества переменных! Если мы вспомним дискретную математику, то метод класса является функцией, а входные и выходные данные принадлежат множествам значений заданных для их типов. В математике абстракция - это процесс извлечения неких ключевых свойств рассматриваемого объекта и полное его отделение от реального мира и обобщение таким образом, чтобы этот объект был использован для описания схожих феноменов.
  13. В CompSci существуют следующие базовые наиболее известные абстракции, позволяющие рассуждать в общих терминах
  14. Каждая значимая часть функционала программы должна быть реализована только единожды в исходном коде. Там, где схожие функции выполняются в разных местах, в общем случае выгодно объединить их, абстрагировавшись от различающихся деталей - наследование отличный пример Еще есть популярный DRY принцип, don’t repeat yourself
  15. Как доказать, что сортировка работает корректно
  16. В некоторых случаях без математики вообще невозможно корректно решить задачу (свертка, скользящее среднее, статистика, наконец)!
  17. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed in genes and protein structures in a human cell.[1] A computer scientist specializes in the theory of computation and the design of computational systems.[2] Различные аспекты и области CS и представляют специализацию и инструментарий, а не спринг-хибернейт-от-года. вообще, Computer Science очень большая наука, которая содержит очень много разделов. Как теоритических, так и прикладных. Я просто быстро покажу, насколько эта наука обширна и интересна и приведу несколько примеров.
  18. Theory of computation: the fundamental question underlying computer science is, &quot;What can be (efficiently) automated?&quot;[11] The study of the theory of computation is focused on answering fundamental questions about what can be computed and what amount of resources are required to perform those computations. In an effort to answer the first question, computability theory examines which computational problems are solvable on various theoretical models of computation. The second question is addressed by computational complexity theory, which studies the time and space costs associated with different approaches to solving a multitude of computational problems. The famous &quot;P=NP?&quot; problem, one of the Millennium Prize Problems,[40] is an open problem in the theory of computation. Надо категории добавить (типа теория вычислимости, построение и анализ) про каждый кратенько (совсем) сказать Данные разделы предоставляют формальные средства анализа и доказательства корректности программ. Мы должны уметь доказывать правильность программ, а не только наличие тестов!
  19. Сегодня в работе это скорее всего не пригодится, но это потрясающе интересные разделы CompSci. Если у вас есть амбиции создания собственного языка программирования, то без этого точно не обойтись! Данные разделы предоставляют формальные основания программирования в целом
  20. С прикладной точки зрения все гораздо интереснее
  21. С прикладной точки зрения все гораздо интереснее
  22. Направление счетное конечное множество)) всегда есть что выбрать, где развиваться.
  23. Вот, все жалуются, что это нужно только для собеседований и прочей ерунды. Ничего подобного, давайте смотреть! (в завершение сказать, что без определенных знаний вы вообще не сможете решать некоторые типы задач эффективно)
  24. Тут приведены лишь некоторые примеры использования различных структур данных
  25. Такая абстракция как граф используется для решения огромного числа задач!
  26. Как только программиста уводят подальше от математики, сложности и сути программирования появляется пиздец. Вы когда-нибудь видели хотя бы какую-нибудь адекватную реализацию около-натурального DSL? “Wouldn&apos;t it be nice, for instance, to have programs in almost plain English, so that ordinary people could write and read them?” Дейкстра Не стоит ориентироваться на индустрию и не смотреть никуда, кроме мейнстримовых языков и библиотек.
  27. Знание различных языков и парадигм позволяет смотреть на одну и ту же проблему с разных сторон
  28. Дейкстра был специфическим человеком, но данные высказывания показательны тем, что ландшафт языков изменчив, и никогда на будет одного универсального языка. Языки появляются и исчезают, программирование остается. Раньше было большой проблемой вводить новые языки на своих проектах, потому что плохая интероперабельность, куча батхерта, сомнительный перформанс. Сейчас JVM по-честному хорош, много JVM-языков. Ландшафт языков очень сильно меняется, и чтобы остаться в седле, придется с этим смириться Все и так пишут на 6 Java и есть много реактивных областей типа банкинга, где так и будет Чтобы быть продуктивным разработчиком, недостаточно просто владеть набором библиотек (спрингхибернейтотгода), Mongo и т.д. JVM языки интероперабельны. Scala позволяет писать в смешанном стиле, что позволяет плавно переползать с Java, но имеет минус : кто как хочет так и пишет Некоторые мысли крайне сложно выражать в некоторых языках. Java принуждает декомпозировать свои идеи до уровня предметов - объектов
  29. Немного кодопримеров
  30. В Java 8 ситуация не сильно отличается
  31. Конечно, хоть это и выглядит очень круто, но суть остается той же, что и в предыдущем примере Ваши коллеги убьют вас, если увидят такое. я бы убил этого умника))
  32. Что примечательно, здесь сразу можно заметить функциональную композицию, что уже позволяет эффективно рассуждать о написанном коде
  33. Знакомо?
  34. Как бы усердно процессные практики не внедрялись, все они прилипалы к программингу, не забывайте этого! Оджайл не исправит плохого программиста! Не ориентируйтесь на рынок, ориентируйтесь на знания, Абстракции как основной инструмент, математика дает роскошный аппарат CompSci огромен, не упирайтесь в одну область, не бойтесь исследовать! Каждый язык general-purpose по-своему, выбирайтесь из смоляной ямы Тьюринга) Занимайтесь тем, что интересно вам, не бойтесь пробовать - не попробуешь, не узнаешь!
  35. Возможно над вам будут смеятся люди, которые 8 лет пишут проект для большого банка и второй год внедряют Agile. не волнуйтесь, все будет нормально =)