2. The Ice Age
• I, test not!
• Single language.
• I care only about the code (not about: build, staging, qa, quality
of data…).
• Sprints are for Carl Lewis.
3. The DevOps Revolution
• Everybody is into CI/CD and considering continuous
deployment.
• Every developer should be familiar with a stack like:
• Jenkins.
• Ansible/Chef/Puppet..
• Docker.
• K8S.
• Terraform.
4. CI/CD
• Always keep motivation in mind!
• Main motivation is finding bugs as early as possible.
• Also, shorten time-to-market.
5. Company Culture
• And it’s not only the tech-stack.
• The technology is important.
• Company’s culture even more!
• A good pipeline depends on:
• How we treat the staging!
• Quality of tests!
6. Staging == Production
• Staging should be treated like it is production.
• Should be up 24/7.
• New versions should be deployed like they are in production.
• No manual SSH and hot fixes!
7. Everything as Code
• As software developers we are very disciplined about code.
• We use SCM.
• Write tests.
• Do code reviews.
• Document.
• Have a bug management system.
• Pipelines.
8. Everything as Code
• The modern trends try to treat everything as code:
• Data as code.
• Pipeline as code.
• Deployment as code.
• …
9. Data
• Whether we are doing machine learning or not, data is
important.
• And we need relations.
• Between different pieces of data!
• JSON-LD as a standard!
10. The DB
• Once there was the O***** (SQL DB).
• Then came NoSQL (we have some of those).
• Then we combine that with Micro-Services (each one should
have its separate DB/Schema).
• Much more difficult.
• Or not?!
11. Micro Services
• Should we split?
• What about consistency?
• Event sourcing?
• Not for everyone.
12. Polyglot
• What is your favorite language?
• The rise of “functional” languages.
• JavaScript is everywhere. (WebAssembly behind the corner).
• Pyhton for Data Scientists.
• Java + Scala + Kotlin.
• Jenkins Pipelines (Groovy).
• Golang!
13. Polyglot
• Important to distill the key ideas behind a language.
• Static/Dynamic types – current trends favor a more dynamically-
typed languages.
• Major Use-cases.
• Concurrency Management.
• Functional? (side-effects).
14. The Free Lunch is Over
• Happy single-threaded applications.
• Multi-threading is hard. Hard to avoid bugs and nearly
impossible to fully optimize.
• Transition into multi-cores.
• Transition into GPU.
• Cloud computing.
• FPGA & ASICs.
15. Hard Problem
public class Padding {
private static int COUNTER = 1 << 26;
public static class Pair {
private long c1;
private long c2;
}
private static Pair pair = new Pair();
public static class MyRunnable implements Runnable {
private final boolean firstLoop;
public MyRunnable(boolean firstLoop) {. this.firstLoop = firstLoop; }
@Override
public void run() {
16. Hard Problem
public class Padding {
private static int COUNTER = 1 << 26;
public static class Pair {
private long c1;
private long q1,q2,q3,q4,q5,q6,q7,q8;
private long c2;
}
private static Pair pair = new Pair();
public static class MyRunnable implements Runnable {
private final boolean firstLoop;
public MyRunnable(boolean firstLoop) {. this.firstLoop = firstLoop; }
@Override
public void run() {
17. Hot Technologies
• Well, there is blockchain.
• Not for everyone.
• Machine learning, on the other hand is for everyone.
• Finding patterns in the data.
• Bad data + good ML very bad outcome.
• Also, there is big data and stream processing.
18. The Modern Developer
• Should be process aware (CI/CD).
• Should have at least base knowledge of the tools (pipeline
syntax, container files (Dockerfile), terraform, helm charts).
• Should be open-minded about the data (always ML
possibilities).
• Avoid mutable-shared objects.