Как да станем софтуерни инженери и да стартираме ИТ бизнес?
1. How to Become a Software
Engineer and Start IT Business?
Guidelines for Future Software
Engineers and Technological StartUpers
Svetlin Nakov
Technical Trainer
www.nakov.com
Software University
http://softuni.bg
2. 2
Become a Software Developer
Step 1: Define Your Goals
Step 2: Find Resources
Step 3: Practice, Practice, Practice!
Step 4: Join the Community
Step 5: Start a Job in the Industry
Start IT Business
The Lean Startup Principles
Table of Contents
4. Step 1: Define Your Goals
What Kind of Developer You Want to Become?
5. 5
What kind of software engineer you want to become
(what position)?
Software Developer
Designer / Front-End Developer
Developer Support Engineer
Software Quality Assurance Engineer (QA)
Business Analyst / Requirements Engineer
System Administrator / IT Specialist
Project Manager / IT Manager
Defining Your Goals
6. 6
What technology you want to learn?
Web Development
PHP / Zend / CakePHP / Symfony / MySQL
C# / ASP.NET MVC / Web Forms / EF / SQL Server
Ruby / Rails / Sinatra / MySQL
Python / Django / MySQL / PostgreSQL
Java / Java EE / Servlets / JSP / JSF / JPA / Oracle
JavaScript / Node.js / MySQL / MongoDB
HTML5, JavaScript / jQuery / AJAX / REST / JSON
Defining Your Goals (2)
7. 7
What technology you want to learn ?
Mobile Development (Smart Phones / Tablets)
iOS / iPhone / iPad / Objective C /
XCode / Cocoa Touch
Android / Java / Eclipse
Windows Phone / Silverlight / C# / Visual Studio
Blackberry / C / C++ / Java / HTML5 / WebWorks
Cross-Platform Mobile Frameworks / PhoneGap / Titanium / Rhodes
Defining Your Goals (3)
8. 8
What technology you want to learn?
Server-Side Development
Java / Java EE / Spring Framework /
Hibernate / JPS / JAX-WS / JAX-RS / Oracle
C# / .NET Framework / WCF / WWF /
ADO.NET Entity Framework / SQL Server
Database Development
Oracle / SQL Server / MySQL / PostgreSQL /
Stored Procedures / ETL / Reporting / DBA
Defining Your Goals (4)
9. 9
What technology you want to learn?
Game Development
2D / 3D Graphics / C++ / OpenGL / DirectX /
XNA / Geometry / Physics / AI / Networking
Mobile Games
Facebook Games
Embedded Development
Microcontrollers / Real-Time Systems /
RTOS / Embedded OS / C / C++ / Assembler
Defining Your Goals (5)
10. 10
Is your desired technology / position
accurate to the modern trends?
You might want to be a spacecraft
developer but do you find any job openings?
You might become a 3D game developer but check whether this is
a perspective profession
Prefer technologies and positions
with high demand in the industry!
E.g. Web developer / iOS developer
/ .NET Developer / Java developer
Defining Your Goals (6)
12. 12
Finding teaching resources for learning
the technologies you want
Join courses
Free / paid / live / online
Watch video tutorials
Follow tutorials
Just search in Google
Read books
Read articles / blogs
Find Training Resources
13. 13
Software University – http://softuni.bg
High-quality training, profession and job for
software engineers + higher education diploma
C#, Java, HTML5, JavaScript, PHP
Plans: free, online and onsite
Telerik Academy – academy.telerik.com
Free software development courses + videos
HTML5, C#, algorithms, ASP.NET MVC, mobile development, cloud
development, SEO, software engineering, QA, high-quality code, …
Free Courses for Developers
14. 14
Telerik School Academy – schoolacademy.telerik.com
PHP, Web, HTML5, JavaScript, C#, .NET, databases, SQL, SQL
Server, MySQL, ORM, ADO.NET EF, WPF, embedded systems, …
Kids Academy – telerik-kids.com
Free C++ programming courses
For 9-13 years old children
Web Design, HTML, JavaScript
http://tiny.cc/frontend-videos
Free Courses for Developers (2)
15. 15
PHP & MySQL
http://tiny.cc/php-mysql-academy
C# Programming and Algorithms
http://tiny.cc/csharp-videos
ASP.NET MVC Development
http://tiny.cc/aspnetmvc-videos
ASP.NET Web Forms Development
http://tiny.cc/aspnet-videos
Search Engine Optimization (SEO)
http://tiny.cc/seocourse-videos
Free Courses for Developers (3)
16. 16
Mobile Development
http://tiny.cc/mobile-dev-videos
iPhone Development
http://tiny.cc/iphone-dev-videos
Android Development
http://tiny.cc/android-videos
Databases and SQL
http://tiny.cc/databases-academy
http://www.db-class.org
Free Courses for Developers (4)
17. 17
High-Quality Code
http://tiny.cc/quality-code-videos
Game Development
http://tiny.cc/game-dev-videos
Java Programming
http://tiny.cc/java-dev-videos
MIT OpenCourseWare
http://tiny.cc/mit-ocw-dev-courses
Stanford Open Engineering Courses
http://see.stanford.edu/see/courses.aspx
Free Courses for Developers (5)
18. Step 3: Practice, Practice, Practice!
Work on Real-World Practical Projects
19. 19
There is only one way to learn programming and software
development
Most people learn the basics of programming in 5-6 months to
1 year (8-10 hours / day)
To learn coding well you need to write
30 000 – 50 000 lines of code (at least)
To become an expert you may need
3-5 years (full time – 8-10 hours / day)
Learn by Practice
Practice, Practice, Heavy Practice!
20. 20
To become a good developer you need to:
Solve few hundreds of programming tasks
E.g. all exercises from the Intro C# book –
introprogramming.info/intro-csharp-book
Create few larger practical projects
E.g. create your own simplified Facebook or develop your own
accounting software
Practice Every Day for Years
Practice programming every day for few years!
21. 21
Creating real-world projects is essential!
Watching videos / reading books in not enough
Work on practical projects every day
For Web developers
Learn Web design, HTML and some CMS system
Learn ASP.NET MVC or PHP or Ruby or Python
Create your own web site / blog
Create at least 5-10 web sites and applications
Create your own Facebook / Flickr / YouTube / …
Create Real-World Projects
22. 22
For desktop developers
Learn C#, databases, SQL, EF and WPF
Create your own video player / Minesweeper,
Tetris / calculator / Windows explorer / Paint
Create your own accounting software /
warehouse management / retail system
For game developers
Learn C++, OpenGL and 2D / 3D graphics
Create your own Popcorn / Xonix / Tetris
Create your own 3D striker game
Create Real-World Projects (2)
23. 23
For mobile developers
Learn some of the mobile platforms
Android / iOS / Windows Phone / Blackberry
Along with the languages, APIs and tools
Create at least 5-10 simple applications
E.g. Tetris game / calculator / alarm clock / gallery
viewer / mp3 player / video player / text editor
Create at least 2-3 more complex applications
E.g. chat server + mobile client / foursquare app
Create Real-World Projects (3)
24. 24
For embedded developers
Learn to program for 2-3 embedded platforms
E.g. Arduino + Atmel AVR + PIC
Learn C language, the tools and APIs
Learn to control peripheral devices
E.g. GPIO (input / output pins), buttons, displays, SD card, RS-232
serial interface, USB interface, timers, sensors, networking, RFID,
Bluetooth, …
Create 4-5 practical projects: e.g. traffic lights, card based access
control system, MP3 player
Create Real-World Projects (4)
25. 25
For server-side developers
Server-side development is not for beginners!
Try to start a job and study at work
Two possible tracks
Java + Java EE + ORM Frameworks + Oracle
C# + .NET + ORM + SQL Server + WCF + WWF
Learning server-side development is a big effort
Once you learn programming, it will take 3-5 years to learn server-
side development
Becoming a Software Engineer
26. 26
For database developers
Several possible tracks
Oracle / SQL Server / PostgreSQL / MySQL / cloud databases
First learn SQL, database design, database transactions and
database reporting
Get familiar with database administration
Get familiar with BI (business intelligence),
data warehouse systems, etc.
Start a job and learn at work!
Becoming a Software Engineer (2)
27. 27
For business analysts
Not for beginners – learn business
and IT, start a job and practice at work
For software architects
Not for beginners – learn software development and practice 8-10
years everyday (full time)
For software project managers
Not for beginners – learn to develop software
and practice 7-8 years everyday (full time)
Becoming a Software Engineer (3)
28. Step 4: Join the Community
User Groups, Mailing Lists,
Seminars, IT School, IT University
29. 29
To be a developer, you must
join the development community
Join Software University initiatives
Enter in the best High School / University
related to your goals in your area
Join to the user groups in your area
Take part in their seminars and events
Regularly visit the forums related to your goals
Join the mailing lists related to your goals
Join the Community
30. 30
To be a developer, you must
join the development community
Visit regularly any seminars and
conferences related to your goals
Join the local hacker space community
Join any other community organizations
Take part in all related programming contests, tournament s and
Olympiads
Create a blog and share your knowledge / establish your own events /
courses / organizations
Join the Community (2)
31. 31
initLab (hacker space in Sofia) – initlab.org
varnaLab (hacker space Varna) – varnalab.org
SofiaDev .NET user group – sofiadev.org
Java users group (Sofia) – java-bg.org
Oracle user group – bgoug.org
Sofia JavaScript user group – sofiajs.org
Ruby on Rails community – bgonrails.com
Drupal Bulgaria – drupalbg.org
Joomla Bulgaria – joomla-bg.com
Developer Communities in BG
32. 32
Photoshop Bulgaria – photoshop.bg
SQL & BI Bulgaria – bgsqlgroup.com
BG PostgreSQL Group – bgpug.groupsite.com
Silverlight Bulgaria – silverlight.bg
NLP Club Bulgaria – nlpclub.devbg.org
SharePoint User Group Bulgaria – sugbg.org
Azure User Group Bulgaria – azure.bg
Flex User Group Bulgaria – flex.riabg.org
C++ Bulgarian User Group – cppbg.devbg.org
Developer Communities in BG (2)
33. 33
Scrum Bulgaria – scrumbulgaria.org
Linux Bulgaria – linux-bulgaria.org
Linux for Bulgarians – linux-bg.org
iPhone Bulgaria – iphone-bulgaria.com
Solaris BG User Group – bgsug.filibeto.org
Bulgarian Association of Software
Developers (BASD) – devbg.org
Nakov.com Portal for Developers – nakov.com
Developer Communities in BG (3)
34. Step 5: Start a Job
Start a Job in the Software Industry
Learn and Practice at Work
35. 35
The best way to learn real-world software development:
Working on real-world commercial projects is essential to gain
practical skills and experience
The best developers learn their job at work
Start by learning programming at home / class
Start as junior developer and trainee
Become regular / senior developer / team leader
Start a Job as Developer
Start a Job as Developer!
36. Start Your Own Software Company
Guidelines for Startupers
36
37. 37
My recipe for IT startupers
First gain experience
At least 5 years in the IT industry
Starting a company is not for beginners!
Start a company and fail it to learn how not to do it
Join a really successful company learn how others do it
Start you own company find your way to do it
Start Your Own IT Company?
38. 38
You already have paying customers
Start an outsorcing company to serve them
Hire additional people, grow your team
You already have a product with real customers
Establish a product development company
You have a really genius idea for a new product
This is very risky! Everyone have a generous idea, right?
Follow the lean startup principles, first verify the idea
Reasons to Start a Company
40. License
This course (slides, examples, demos, videos, homework, etc.)
is licensed under the "Creative Commons Attribution-
NonCommercial-ShareAlike 4.0 International" license
40
Attribution: this work may contain portions from
"Fundamentals of Computer Programming with C#" book by Svetlin Nakov & Co. under CC-BY-SA license
"C# Part I" course by Telerik Academy under CC-BY-NC-SA license
41. Free Trainings @ Software University
Software University Foundation – softuni.org
Software University – High-Quality Education,
Profession and Job for Software Developers
softuni.bg
Software University @ Facebook
facebook.com/SoftwareUniversity
Software University @ YouTube
youtube.com/SoftwareUniversity
Software University Forums – forum.softuni.bg