Date post: | 07-Dec-2014 |
Category: |
Technology |
Upload: | yaroslav-bunyak |
View: | 301 times |
Download: | 4 times |
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)