+ All Categories
Home > Technology > Evolving as a professional software developer

Evolving as a professional software developer

Date post: 26-Dec-2014
Category:
Upload: anton-kirillov
View: 265 times
Download: 1 times
Share this document with a friend
Description:
This is second edition of my keynote "On Being a Professional Software Developer" with slide comments (in Russian) which contain main ideas of the keynote. I hope the slides could be used as a standalone reading material.
44
Evolving as a Professional Software Developer Anton Kirillov
Transcript
Page 1: Evolving as a professional software developer

Evolving as a Professional Software Developer

Anton Kirillov

Page 2: Evolving as a professional software developer

About Author

antonkirillov@ akirillov@

architect@

Ph.D. in CompSci

Computer Scientist, Distributed Systems Architect and Passionate Programmer

Page 3: Evolving as a professional software developer

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

Page 4: Evolving as a professional software developer

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

Page 5: Evolving as a professional software developer

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)

Page 6: Evolving as a professional software developer

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”

Beauty?

Page 7: Evolving as a professional software developer

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)

Page 8: Evolving as a professional software developer

Programmers’ Competency Matrix

source: http://sijinjoseph.com/programmer-competency-matrix/

Page 9: Evolving as a professional software developer

What’s in the Market

Page 10: Evolving as a professional software developer

Market Requires Tools not Skills

Page 11: Evolving as a professional software developer

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

Page 12: Evolving as a professional software developer

Skillset

Page 13: Evolving as a professional software developer

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.

Page 14: Evolving as a professional software developer

Abstraction in CompSci

● Languages:

● OOP

● Functional

● Modern Lisps

● Control flow

● Abstract Data Types

● Lambda Abstraction

● Layered Architecture

Page 15: Evolving as a professional software developer

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)

Page 16: Evolving as a professional software developer

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 =)

Page 17: Evolving as a professional software developer

(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

Page 18: Evolving as a professional software developer

Comp Sci

Page 19: Evolving as a professional software developer

Theoretical Computer Science

Page 20: Evolving as a professional software developer

Theoretical Computer Science

Page 21: Evolving as a professional software developer

Applied Computer Science

Page 22: Evolving as a professional software developer

Applied Computer Science

Page 23: Evolving as a professional software developer

Applied Computer Science

Page 24: Evolving as a professional software developer

Data Structures & Algorithms

Use Cases

Page 25: Evolving as a professional software developer

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 keyo Hbase also uses it to optimize the reads

• Trees:o KV Database designingo Creating file system (S-Tree in HDFS)o Suffix tree: Genomic sequencingo 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 E-commerce : while accessing unique keys. B-Trees balanced multi-way search tree of order N.

o Searching : Searching quickly for a given element

• Skip Lists:

o Implementation of ordered sets - Redis datastore

Page 26: Evolving as a professional software developer

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.

Page 27: Evolving as a professional software developer

Programming Languages

Page 28: Evolving as a professional software developer

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)

Page 29: Evolving as a professional software developer

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)

Page 30: Evolving as a professional software developer

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!

Page 31: Evolving as a professional software developer

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.

Page 32: Evolving as a professional software developer

Code Samples

Page 33: Evolving as a professional software developer

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); }}

Page 34: Evolving as a professional software developer

FizzBuzz: Java

for (int i = 1; i <= 100; System.out.println(++i % 3 == 0 ? i % 5 == 0 ? "Fizzbuzz" : "Fizz" : i % 5 == 0 ? "Buzz" : i));

Page 35: Evolving as a professional software developer

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

Page 36: Evolving as a professional software developer

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)))

Page 37: Evolving as a professional software developer

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

Page 38: Evolving as a professional software developer

FizzBuzz: Enterprise EditionEnterpriseQualityCoding/FizzBuzzEnterpriseEdition

Page 39: Evolving as a professional software developer

Evolve!

Page 40: Evolving as a professional software developer

Evolve!

● Wiki that!

● Build a robot!

● Attack a book!

● Compete!

● Toy projects!

● Open-source!

● Coursera?

● Hire people smarter than You!

Page 41: Evolving as a professional software developer

Enjoy the Community!

● Attend conferences, check!

● Attend meetups in Your city

● Share Your knowledge, sync with community!

Ads =)

Page 42: Evolving as a professional software developer

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

Page 43: Evolving as a professional software developer

First they ignore you, then they laugh at you, then they fight you, then you win

Mahatma Gandhi

Page 44: Evolving as a professional software developer

{}

thisRoom getPeople foreach( person => {shakeHand(person)thanks(person)

}

> ~questions?


Recommended