How To Become a Software Engineer

Post on 07-Dec-2014

301 views 4 download

Tags:

description

I presented it to students of National University of Water Management and Natural Resources Use (Rivne, Ukraine). Basically, it's an overview of knowledge and skills that students expected to have after graduation.

transcript

How To Become a Software Engineer

@YaroslavBunyak Senior Software Engineer, SoftServe Inc.

Agenda

• Knowledge

• Tools

• Character

• Experience

• Value

• PR

Who is this guy?

• Senior software engineer

• 15 years of programming experience

• 7+ as a professional

• Master’s degree in Applied Maths, 2007

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

English or GTFO

English or GTFO

Knowledge

What?

• Hardware architecture

• Data representation

• Algorithms

• Mathematics

• Programming languages

• Technology

Hardware

• CPU

• Memory and cache

• GPU

• more and more important today

Data

• Bits and bytes

• Floating-point numbers

• Data structures

Data Structures

• Array, list, queue, stack

• Map, hash map

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

• Graph

Algorithms

• Search

• Sort

• Optimization

• Recursion

• Greedy

• Scatter, Gather, Scan, Reduce

Math

• Computers are all about math!

Programming Languages

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

• Scripting - Python, Lua, Perl

• Web - JavaScript, Ruby, PHP

• Functional - Lisp, Scheme, Erlang

Technology

• Multithreading

• Networking

• Database design

• GUI

• Computer graphics

• Image processing

Tools

What?

• IDE or editor

• Source control

• Diff / Merge

• Debugger

• Profiler

• Build system

• Bug tracker

• Task management

• Continuous integration

• Code review

• ...

IDE

• Integrated Development Environment

• code editor

• build system

• debugger

• profiler

• ...

IDE

• Microsoft Visual Studio

• Apple Xcode

• Qt Creator

• Eclipse

• Code::Blocks

Editor

• Vim

• Emacs

• Notepad

• not!

Source Control

• Version Control System (VCS)

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

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

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

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

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

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

Source Control

• Update

• Commit

• Diff against previous revision

• Branch

• Integrate

Source Control

• Centralized

• Perforce, Subversion

• Distributed

• Git, Mercurial

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

Diff Tools

• Beyond Compare

• P4 Merge

• DiffMerge

• Kaleidoscope

• and many, many more...

Profiler

• Instrumented

• Sampling

Profiler

• Intel VTune

• Very Sleepy

• xperf

• (built-in) Visual Studio and Xcode

Build System

• make

• Premake

• CMake

• Tundra

• Jam

Research

• Vim philosophy

• spend 5 minutes to find the right tool

• profit!

• 5 minutes is okay, but 3 months probably not

Character

Must Have

• Initiative

• Responsibility

• Persistence

• Self-improvement

• Self-driven

• Get things done!

Experience

Advice #1

• Practice

• Practice

• and Practice

• Practice makes perfect

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

Typical Path

• Don’t know how to

• Know how to

• Know how not to

Value

Value

• With your hard work you create value

How To Sell Your Work?

• Salary

• hourly, fixed

• Royalty

• Share

• Freelance (contract)

• Open source

Value

• Your work is used to create a product

• alone or within a team

• So...

How To Sell a Product?

• Self-publishing or publisher deal

• License

• Service

• Support

• Ads

• Give away for free

Contracts

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

• You need a contract

• yes, you DO!

What’s in a Contract?

• Scope of work (what has to be done)

• as detailed as possible

• Cost (money)

• Support (included or not)

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!

Open Source

• Choose a license

• BSD, MIT, Zlib are good ones

• GNU GPL - not so!

• Publish your code

• GitHub, Bitbucket, Google Code

PR

Remember

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

• You have to promote youself

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

Thank You!

Questions?

Twitter: @YaroslavBunyak e-mail: ybunyak@gmail.com

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