How to Become a Software Developer? Guidelines for Future Software Engineers Svetlin Nakov, Ph.D. Senior Technical Trainer www.nakov.com Telerik Software Academy academy.telerik.com Table of Contents Step 1: Define Your Goals Web / Mobile / Java / Embedded / QA / … Step 2: Find Resources Courses, Tutorials, Videos, Books, etc. Step 3: Practice, Practice, Practice! Practical Projects every day Step 4: Join the Community User groups, IT school, IT university Step 5: Start a Job in the Industry 2 Step 1: Define Your Goals What Kind of Developer You Want to Become? Defining Your Goals 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 4 Defining Your Goals (2) 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 5 Defining Your Goals (3) 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 6 Defining Your Goals (4) 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 7 Defining Your Goals (5) 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 8 Defining Your Goals (6) 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 9 Step 2: Find Resources Join Courses, Follow Tutorials, Watch Videos, Read Books, Articles, Blogs, etc. Find Training Resources Finding teaching resources for learning the technologies you want Join courses Free / paid / live / online Watch video tutorials / video courses Follow tutorials Just search in Google Read books Read articles / blogs 11 Free Courses for Developers 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, … School Academy – schoolacademy.telerik.com PHP, Web development, HTML5, JavaScript, C#, .NET, databases, SQL, SQL Server, MySQL, ORM, ADO.NET EF, WPF, 3D game development, embedded systems 12 Free Courses for Developers (2) Kids Academy – telerik-kids.com Free C++ programming courses For 9-13 years old children Algo Academy – algoacademy.telerik.com Free preparation for the informatics contests Algorithms, data structures, competitive programming for contests and Olympiads Web Design, HTML, JavaScript http://tiny.cc/frontend-videos 13 Free Courses for Developers (3) 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 14 Free Courses for Developers (4) 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 15 Free Courses for Developers (5) 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 16 Step 3: Practice, Practice, Practice! Work on Real-World Practical Projects Learn by Practice There is only one way to learn programming and software development Practice, Practice, Heavy Practice! 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) 18 Practice Every Day for Years To become a good developer you need to: Practice programming every day for few years! 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 E.g. develop your own accounting software 19 Create Real-World Projects 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 / … 20 Create Real-World Projects (2) 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 21 Create Real-World Projects (3) 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 22 Create Real-World Projects (4) 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 23 Becoming a Software Engineer 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 24 Becoming a Software Engineer (2) 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! 25 Becoming a Software Engineer (2) 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) 26 Step 4: Join the Community User Groups, Mailing Lists, Seminars, IT School, IT University Join the Community To be a developer, you must join the development community Join Telerik academy 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 28 Join the Community (2) 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 29 Developer Communities in BG 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 Sofia JavaScript Ruby on Rails – bgoug.org user group – sofiajs.org community – bgonrails.com Drupal Bulgaria – drupalbg.org Joomla Bulgaria – joomla-bg.com 30 Developer Communities in BG (2) Photoshop Bulgaria SQL & BI Bulgaria – photoshop.bg – bgsqlgroup.com BG PostgreSQL Group Silverlight NLP Club – bgpug.groupsite.com Bulgaria – silverlight.bg Bulgaria – nlpclub.devbg.org SharePoint User Group Bulgaria Azure User Group Bulgaria Flex User Group Bulgaria – sugbg.org – azure.bg – flex.riabg.org C++ Bulgarian User Group – cppbg.devbg.org 31 Developer Communities in BG (3) Scrum Bulgaria Linux Bulgaria – scrumbulgaria.org – linux-bulgaria.org Linux for Bulgarians iPhone Bulgaria Solaris – linux-bg.org – iphone-bulgaria.com BG User Group – bgsug.filibeto.org Bulgarian Association of Software Developers (BASD) – devbg.org Nakov.com Portal for Developers – nakov.com 32 Step 5: Start a Job Start a Job in the Software Industry Learn and Practice at Work Start a Job as Developer The best way to learn real-world software development: Start a Job as Developer! 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 34 How to Become a Software Developer? Questions? http://www.nakov.com