+ All Categories
Transcript
Page 1: How To Become a Software Engineer

How To Become a Software Engineer

@YaroslavBunyak Senior Software Engineer, SoftServe Inc.

Page 2: How To Become a Software Engineer

Agenda

• Knowledge

• Tools

• Character

• Experience

• Value

• PR

Page 3: How To Become a Software Engineer

Who is this guy?

• Senior software engineer

• 15 years of programming experience

• 7+ as a professional

• Master’s degree in Applied Maths, 2007

Page 4: How To Become a Software Engineer

Who is this guy?

• High-performance code, real-time 3D graphics, and mathematics

• Millions of people see my code in action

• every day

• The Weather Channel, CNN, Fox News...

Page 5: How To Become a Software Engineer

English or GTFO

Page 6: How To Become a Software Engineer

English or GTFO

Page 7: How To Become a Software Engineer

Knowledge

Page 8: How To Become a Software Engineer

What?

• Hardware architecture

• Data representation

• Algorithms

• Mathematics

• Programming languages

• Technology

Page 9: How To Become a Software Engineer

Hardware

• CPU

• Memory and cache

• GPU

• more and more important today

Page 10: How To Become a Software Engineer

Data

• Bits and bytes

• Floating-point numbers

• Data structures

Page 11: How To Become a Software Engineer

Data Structures

• Array, list, queue, stack

• Map, hash map

• Tree (binary, red-black, k-D)

• Graph

Page 12: How To Become a Software Engineer

Algorithms

• Search

• Sort

• Optimization

• Recursion

• Greedy

• Scatter, Gather, Scan, Reduce

Page 13: How To Become a Software Engineer

Math

• Computers are all about math!

Page 14: How To Become a Software Engineer

Programming Languages

• Native - C, C++, Objective-C, C#

• Scripting - Python, Lua, Perl

• Web - JavaScript, Ruby, PHP

• Functional - Lisp, Scheme, Erlang

Page 15: How To Become a Software Engineer

Technology

• Multithreading

• Networking

• Database design

• GUI

• Computer graphics

• Image processing

Page 16: How To Become a Software Engineer

Tools

Page 17: How To Become a Software Engineer

What?

• IDE or editor

• Source control

• Diff / Merge

• Debugger

• Profiler

• Build system

• Bug tracker

• Task management

• Continuous integration

• Code review

• ...

Page 18: How To Become a Software Engineer

IDE

• Integrated Development Environment

• code editor

• build system

• debugger

• profiler

• ...

Page 19: How To Become a Software Engineer

IDE

• Microsoft Visual Studio

• Apple Xcode

• Qt Creator

• Eclipse

• Code::Blocks

Page 20: How To Become a Software Engineer

Editor

• Vim

• Emacs

• Notepad

• not!

Page 21: How To Become a Software Engineer

Source Control

• Version Control System (VCS)

Page 22: How To Become a Software Engineer

Source Control

Server ---------

file X, version 0 file X, version 1 File Y, version 0 File Y, version 1

... File Y, version 5

Engineer 1 -------------

Engineer 2 -------------

Page 23: How To Become a Software Engineer

Source Control

Server ---------

file X, version 0 file X, version 1 File Y, version 0 File Y, version 1

... File Y, version 5

Engineer 1 -------------

Engineer 2 -------------

Page 24: How To Become a Software Engineer

Source Control

Server ---------

file X, version 0 file X, version 1 File Y, version 0 File Y, version 1

... File Y, version 5

Engineer 1 ------------- file X, file Y

Engineer 2 ------------- file X, file Y

Page 25: How To Become a Software Engineer

Source Control

Server ---------

file X, version 0 file X, version 1 File Y, version 0 File Y, version 1

... File Y, version 5

Engineer 1 ------------- file X, file Y

Engineer 2 ------------- file X, file Y

Page 26: How To Become a Software Engineer

Source Control

Server ---------

file X, version 0 file X, version 1 File Y, version 0 File Y, version 1

... File Y, version 5

Engineer 1 ------------- file X, file Y

Engineer 2 ------------- file X, file Y

Page 27: How To Become a Software Engineer

Source Control

Server ---------

file X, version 0 file X, version 1 File Y, version 0 File Y, version 1

... File Y, version 5 File Y, version 6

Engineer 1 ------------- file X, file Y

Engineer 2 ------------- file X, file Y

Page 28: How To Become a Software Engineer

Source Control

• Update

• Commit

• Diff against previous revision

• Branch

• Integrate

Page 29: How To Become a Software Engineer

Source Control

• Centralized

• Perforce, Subversion

• Distributed

• Git, Mercurial

Page 30: How To Become a Software Engineer

DCVS

Server ---------

file X, version 0 file X, version 1 file Y, version 0 file Y, version 1

... file Y, version 5

Engineer 1 -------------

file X, version 0 file X, version 1 file Y, version 0 file Y, version 1

... file Y, version 5 file Y, changed

Engineer 2 -------------

file X, version 0 file X, version 1 file Y, version 0 file Y, version 1

... file Y, version 5

Page 31: How To Become a Software Engineer

Diff Tools

• Beyond Compare

• P4 Merge

• DiffMerge

• Kaleidoscope

• and many, many more...

Page 32: How To Become a Software Engineer

Profiler

• Instrumented

• Sampling

Page 33: How To Become a Software Engineer

Profiler

• Intel VTune

• Very Sleepy

• xperf

• (built-in) Visual Studio and Xcode

Page 34: How To Become a Software Engineer

Build System

• make

• Premake

• CMake

• Tundra

• Jam

Page 35: How To Become a Software Engineer

Research

• Vim philosophy

• spend 5 minutes to find the right tool

• profit!

• 5 minutes is okay, but 3 months probably not

Page 36: How To Become a Software Engineer

Character

Page 37: How To Become a Software Engineer

Must Have

• Initiative

• Responsibility

• Persistence

• Self-improvement

• Self-driven

• Get things done!

Page 38: How To Become a Software Engineer

Experience

Page 39: How To Become a Software Engineer

Advice #1

• Practice

• Practice

• and Practice

• Practice makes perfect

Page 40: How To Become a Software Engineer

Where To Get

• Start a hobby project

• gamedev (why not?)

• Internship

• Join open source project

• Get a job

• Probably not the best advice for a student

Page 41: How To Become a Software Engineer

Typical Path

• Don’t know how to

• Know how to

• Know how not to

Page 42: How To Become a Software Engineer

Value

Page 43: How To Become a Software Engineer

Value

• With your hard work you create value

Page 44: How To Become a Software Engineer

How To Sell Your Work?

• Salary

• hourly, fixed

• Royalty

• Share

• Freelance (contract)

• Open source

Page 45: How To Become a Software Engineer

Value

• Your work is used to create a product

• alone or within a team

• So...

Page 46: How To Become a Software Engineer

How To Sell a Product?

• Self-publishing or publisher deal

• License

• Service

• Support

• Ads

• Give away for free

Page 47: How To Become a Software Engineer

Contracts

• Consider you want to help somebody to create/enhance/support a product

• You need a contract

• yes, you DO!

Page 48: How To Become a Software Engineer

What’s in a Contract?

• Scope of work (what has to be done)

• as detailed as possible

• Cost (money)

• Support (included or not)

Page 49: How To Become a Software Engineer

What’s in a Contract?

• Now remember:

• any, ANY additional work outside of the contract scope has to be included in another contract

• Otherwise...

• you will do it for free!

Page 50: How To Become a Software Engineer

Open Source

• Choose a license

• BSD, MIT, Zlib are good ones

• GNU GPL - not so!

• Publish your code

• GitHub, Bitbucket, Google Code

Page 51: How To Become a Software Engineer

PR

Page 52: How To Become a Software Engineer

Remember

• It doesn’t matter how good you are if other people (clients, customers, employer) do not know it

• You have to promote youself

Page 53: How To Become a Software Engineer

How

• Prepare a nice CV (no BS there)

• Publish your work (code, software)

• Connect with people

• social media (Twitter)

• professional networks (LinkedIn)

• attend conferences

• Blog

Page 54: How To Become a Software Engineer

Thank You!

Page 55: How To Become a Software Engineer

Questions?

Twitter: @YaroslavBunyak e-mail: [email protected]

Page 56: How To Become a Software Engineer

In The Next Episode:Software Development Life-Cycle (SDLC)


Top Related