+ All Categories
Home > Technology > How To Become a Software Engineer

How To Become a Software Engineer

Date post: 07-Dec-2014
Category:
Upload: yaroslav-bunyak
View: 301 times
Download: 4 times
Share this document with a friend
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.
Popular Tags:
56
How To Become a Software Engineer @YaroslavBunyak Senior Software Engineer, SoftServe Inc.
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)


Recommended