SlideShare a Scribd company logo
1 of 44
Download to read offline
On Being 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 (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
against complexity.
David Gelernter, “Machine Beauty: Elegance and the Heart of Technology”
Programming
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
source: http://sijinjoseph.com/programmer-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,
Probabilistic Data Structures
Comp Sci
Theoretical Computer Science
Theoretical Computer Science
Applied Computer Science (AI)
Applied CS (Engineering)
Applied Computer Science
(Computational & Informational)
Data Structures & Algorithms
Use Cases
Why Data Structures & Algorithms
● Queues:
○ 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
● Trees:
○ 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.
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 = 0; 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 = 0; 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
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();
…..
EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
FizzBuzz: Enterprise Edition
EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
Evolve!
Evolve!
● Wiki that!
● Build a robot!
● Attack a book!
● Compete!
● Toy projects!
● Open-source!
● Coursera?
● Hire people smarter than You!
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
● Don’t fear to explore
● Evolve
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

"Large-Scale Deep Learning for Building Intelligent Computer Systems," a Keyn...
"Large-Scale Deep Learning for Building Intelligent Computer Systems," a Keyn..."Large-Scale Deep Learning for Building Intelligent Computer Systems," a Keyn...
"Large-Scale Deep Learning for Building Intelligent Computer Systems," a Keyn...
Edge AI and Vision Alliance
 
Deep Learning for NLP (without Magic) - Richard Socher and Christopher Manning
Deep Learning for NLP (without Magic) - Richard Socher and Christopher ManningDeep Learning for NLP (without Magic) - Richard Socher and Christopher Manning
Deep Learning for NLP (without Magic) - Richard Socher and Christopher Manning
BigDataCloud
 

What's hot (12)

Models vs Reality: Quest for the Roots of Complexity
Models vs Reality: Quest for the Roots of ComplexityModels vs Reality: Quest for the Roots of Complexity
Models vs Reality: Quest for the Roots of Complexity
 
Microsoft Cognitive Toolkit (Atlanta Code Camp 2017)
Microsoft Cognitive Toolkit (Atlanta Code Camp 2017)Microsoft Cognitive Toolkit (Atlanta Code Camp 2017)
Microsoft Cognitive Toolkit (Atlanta Code Camp 2017)
 
"Large-Scale Deep Learning for Building Intelligent Computer Systems," a Keyn...
"Large-Scale Deep Learning for Building Intelligent Computer Systems," a Keyn..."Large-Scale Deep Learning for Building Intelligent Computer Systems," a Keyn...
"Large-Scale Deep Learning for Building Intelligent Computer Systems," a Keyn...
 
Rasa NLU and ML Interpretability
Rasa NLU and ML InterpretabilityRasa NLU and ML Interpretability
Rasa NLU and ML Interpretability
 
Deep Learning for NLP: An Introduction to Neural Word Embeddings
Deep Learning for NLP: An Introduction to Neural Word EmbeddingsDeep Learning for NLP: An Introduction to Neural Word Embeddings
Deep Learning for NLP: An Introduction to Neural Word Embeddings
 
Deep Learning for NLP (without Magic) - Richard Socher and Christopher Manning
Deep Learning for NLP (without Magic) - Richard Socher and Christopher ManningDeep Learning for NLP (without Magic) - Richard Socher and Christopher Manning
Deep Learning for NLP (without Magic) - Richard Socher and Christopher Manning
 
ODSC East: Effective Transfer Learning for NLP
ODSC East: Effective Transfer Learning for NLPODSC East: Effective Transfer Learning for NLP
ODSC East: Effective Transfer Learning for NLP
 
Multi-modal Neural Machine Translation - Iacer Calixto
Multi-modal Neural Machine Translation - Iacer CalixtoMulti-modal Neural Machine Translation - Iacer Calixto
Multi-modal Neural Machine Translation - Iacer Calixto
 
Emarsys XP reggeli 2016.08.12.
Emarsys XP reggeli 2016.08.12.Emarsys XP reggeli 2016.08.12.
Emarsys XP reggeli 2016.08.12.
 
Deep Learning as a Cat/Dog Detector
Deep Learning as a Cat/Dog DetectorDeep Learning as a Cat/Dog Detector
Deep Learning as a Cat/Dog Detector
 
Machine Learning vs. Deep Learning
Machine Learning vs. Deep LearningMachine Learning vs. Deep Learning
Machine Learning vs. Deep Learning
 
Themes for graduation projects 2010
Themes for graduation projects   2010Themes for graduation projects   2010
Themes for graduation projects 2010
 

Viewers also liked (6)

Артем Кумпель, ITmozg
Артем Кумпель, ITmozgАртем Кумпель, ITmozg
Артем Кумпель, ITmozg
 
Елена Семенова, Информзащита
Елена Семенова, ИнформзащитаЕлена Семенова, Информзащита
Елена Семенова, Информзащита
 
Ирина Матвеева
Ирина МатвееваИрина Матвеева
Ирина Матвеева
 
Сергей Комаров, Trendo
Сергей Комаров, TrendoСергей Комаров, Trendo
Сергей Комаров, Trendo
 
Алена Соснина, ENAZA
Алена Соснина, ENAZAАлена Соснина, ENAZA
Алена Соснина, ENAZA
 
Денис Витман, Студия Ёрд
Денис Витман, Студия ЁрдДенис Витман, Студия Ёрд
Денис Витман, Студия Ёрд
 

Similar to Антон Кириллов, ZeptoLab

Computing with Directed Labeled Graphs
Computing with Directed Labeled GraphsComputing with Directed Labeled Graphs
Computing with Directed Labeled Graphs
Marko Rodriguez
 
GATE, HLT and Machine Learning, Sheffield, July 2003
GATE, HLT and Machine Learning, Sheffield, July 2003GATE, HLT and Machine Learning, Sheffield, July 2003
GATE, HLT and Machine Learning, Sheffield, July 2003
butest
 
Scales02WhatProgrammingLanguagesShouldWeTeachOurUndergraduates
Scales02WhatProgrammingLanguagesShouldWeTeachOurUndergraduatesScales02WhatProgrammingLanguagesShouldWeTeachOurUndergraduates
Scales02WhatProgrammingLanguagesShouldWeTeachOurUndergraduates
Hans Ecke
 

Similar to Антон Кириллов, ZeptoLab (20)

On being a professional software developer
On being a professional software developerOn being a professional software developer
On being a professional software developer
 
Evolving as a professional software developer
Evolving as a professional software developerEvolving as a professional software developer
Evolving as a professional software developer
 
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
 
Persian MNIST in 5 Minutes
Persian MNIST in 5 MinutesPersian MNIST in 5 Minutes
Persian MNIST in 5 Minutes
 
Lec 1 25_jul13
Lec 1 25_jul13Lec 1 25_jul13
Lec 1 25_jul13
 
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
 
Paradigms
ParadigmsParadigms
Paradigms
 
GATE, HLT and Machine Learning, Sheffield, July 2003
GATE, HLT and Machine Learning, Sheffield, July 2003GATE, HLT and Machine Learning, Sheffield, July 2003
GATE, HLT and Machine Learning, Sheffield, July 2003
 
Scales02WhatProgrammingLanguagesShouldWeTeachOurUndergraduates
Scales02WhatProgrammingLanguagesShouldWeTeachOurUndergraduatesScales02WhatProgrammingLanguagesShouldWeTeachOurUndergraduates
Scales02WhatProgrammingLanguagesShouldWeTeachOurUndergraduates
 
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...
 
Thinking in parallel ab tuladev
Thinking in parallel ab tuladevThinking in parallel ab tuladev
Thinking in parallel ab tuladev
 
Cs8391 notes rejinpaul
Cs8391 notes rejinpaulCs8391 notes rejinpaul
Cs8391 notes rejinpaul
 
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)
 
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
 
Big Data: the weakest link
Big Data: the weakest linkBig Data: the weakest link
Big Data: the weakest link
 
Programing paradigm &amp; implementation
Programing paradigm &amp; implementationPrograming paradigm &amp; implementation
Programing paradigm &amp; implementation
 
Sudipta_Mukherjee_Resume_APR_2023.pdf
Sudipta_Mukherjee_Resume_APR_2023.pdfSudipta_Mukherjee_Resume_APR_2023.pdf
Sudipta_Mukherjee_Resume_APR_2023.pdf
 

More from Diana Dymolazova

Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудниковОнлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Diana Dymolazova
 
Современная защита виртуальных серверов. Секреты мгновенного восстановления п...
Современная защита виртуальных серверов. Секреты мгновенного восстановления п...Современная защита виртуальных серверов. Секреты мгновенного восстановления п...
Современная защита виртуальных серверов. Секреты мгновенного восстановления п...
Diana Dymolazova
 
Переиспользование кода и компонентов при разработке Windows 8 и Windows Phone...
Переиспользование кода и компонентов при разработке Windows 8 и Windows Phone...Переиспользование кода и компонентов при разработке Windows 8 и Windows Phone...
Переиспользование кода и компонентов при разработке Windows 8 и Windows Phone...
Diana Dymolazova
 

More from Diana Dymolazova (20)

Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудниковОнлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
 
Рабочая коммуникация. Как общаться с коллегами? ч.2
Рабочая коммуникация. Как общаться с коллегами? ч.2Рабочая коммуникация. Как общаться с коллегами? ч.2
Рабочая коммуникация. Как общаться с коллегами? ч.2
 
Рабочая коммуникация. Как общаться с коллегами? ч.1
Рабочая коммуникация. Как общаться с коллегами? ч.1Рабочая коммуникация. Как общаться с коллегами? ч.1
Рабочая коммуникация. Как общаться с коллегами? ч.1
 
В какие игры играют команды
В какие игры играют командыВ какие игры играют команды
В какие игры играют команды
 
Проектирование мобильного приложения
Проектирование мобильного приложенияПроектирование мобильного приложения
Проектирование мобильного приложения
 
Как быть счастливым в работе
Как быть счастливым в работеКак быть счастливым в работе
Как быть счастливым в работе
 
SCRUM: Как полететь в космос за полтора часа
SCRUM: Как полететь в космос за полтора часаSCRUM: Как полететь в космос за полтора часа
SCRUM: Как полететь в космос за полтора часа
 
Работа в офисе или Фриланс. Что выбрать?
Работа в офисе или Фриланс. Что выбрать?Работа в офисе или Фриланс. Что выбрать?
Работа в офисе или Фриланс. Что выбрать?
 
Работа в игровой индустрии: профессия или призвание?
Работа в игровой индустрии: профессия или призвание?Работа в игровой индустрии: профессия или призвание?
Работа в игровой индустрии: профессия или призвание?
 
Стартап внутри корпорации или как дожить до второго релиза
Стартап внутри корпорации или как дожить до второго релизаСтартап внутри корпорации или как дожить до второго релиза
Стартап внутри корпорации или как дожить до второго релиза
 
Импотека или как перестать быть кому-то должным
Импотека или как перестать быть кому-то должнымИмпотека или как перестать быть кому-то должным
Импотека или как перестать быть кому-то должным
 
Как заставить работодателя работать на тебя
Как заставить работодателя работать на тебяКак заставить работодателя работать на тебя
Как заставить работодателя работать на тебя
 
Облако рядом. От теории к кейсам.
Облако рядом. От теории к кейсам.Облако рядом. От теории к кейсам.
Облако рядом. От теории к кейсам.
 
Современная защита виртуальных серверов. Секреты мгновенного восстановления п...
Современная защита виртуальных серверов. Секреты мгновенного восстановления п...Современная защита виртуальных серверов. Секреты мгновенного восстановления п...
Современная защита виртуальных серверов. Секреты мгновенного восстановления п...
 
Карьера через руководителя: чего они хотят?
Карьера через руководителя: чего они хотят?Карьера через руководителя: чего они хотят?
Карьера через руководителя: чего они хотят?
 
Переиспользование кода и компонентов при разработке Windows 8 и Windows Phone...
Переиспользование кода и компонентов при разработке Windows 8 и Windows Phone...Переиспользование кода и компонентов при разработке Windows 8 и Windows Phone...
Переиспользование кода и компонентов при разработке Windows 8 и Windows Phone...
 
Android и iOS приложение на .NET за 24 часа. Инструкция по применению
Android и iOS приложение на .NET за 24 часа. Инструкция по применениюAndroid и iOS приложение на .NET за 24 часа. Инструкция по применению
Android и iOS приложение на .NET за 24 часа. Инструкция по применению
 
Enterprise-приложения: Web против Objective C
Enterprise-приложения:  Web против Objective CEnterprise-приложения:  Web против Objective C
Enterprise-приложения: Web против Objective C
 
Java Embedded у вас дома
Java Embedded у вас домаJava Embedded у вас дома
Java Embedded у вас дома
 
Современные технологии в R&D проектах
Современные технологии в R&D проектахСовременные технологии в R&D проектах
Современные технологии в R&D проектах
 

Recently uploaded

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 

Антон Кириллов, ZeptoLab

  • 1. On Being 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 (2000) "Answers to questions from students of Software Engineering"
  • 6. 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 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)
  • 8. Programmers’ Competency Matrix source: http://sijinjoseph.com/programmer-competency-matrix/
  • 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, Probabilistic Data Structures
  • 24. Data Structures & Algorithms Use Cases
  • 25. Why Data Structures & Algorithms ● Queues: ○ 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 ● Trees: ○ 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
  • 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 = 0; 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 = 0; 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 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(); ….. EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
  • 40. Evolve! ● Wiki that! ● Build a robot! ● Attack a book! ● Compete! ● Toy projects! ● Open-source! ● Coursera? ● Hire people smarter than You!
  • 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 ● Don’t fear to explore ● Evolve
  • 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?