how to become a software engineer
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!
In The Next Episode:Software Development Life-Cycle (SDLC)