Software Engineer: A Short Guide on how to be

Last update August, 2019

What?

  • A short guide customised mainly for software development/engineering role. That is, you know your destination.
  • For Egyptians graduated since 5 years, 9-months scholarship at ITI is a much better opportunity for more tracks.

The plan is as follows:

  • 1.5 of study years (10 hours a day) to build enough background to pass interviews and work smoothly as a fresh Software Engineer.
  • In next 3 years, e.g. parallel to your work, you study more to go deeper in your CS knowledge.

Background

From time to time, someone asks me about a guide to the software engineering market. There are 2 cases for such a request. First, Someone with a specialisation far from Computer Science and want to do a career shift. The other case: a student who is about to graduate and used to ignore studying, but now regrets and wants to find the shortest way to the market.

There are some good curriculum suggestions already on the web (e.g. Google one / OSSU). Although I consider them good selections, I am afraid they may take much time. It is an excellent choice for people who are not in a hurry, but if you want to find your fastest way to the market, this guide may be better.

Few Facts

  • In a CS faculty (or CS related), and even in many disciplines, where one studies 4-5 years, the students study many things that they don't actually use in the market. Why?
    • One reason is to let you explore several directions and maybe find your passion in one of the directions.
    • Studying basic courses that you 'might' need their information in an explicit or implicit way.
  • In my Country, Egypt, and in many countries, Software Engineering is the most frequent job for computer science graduates
    • Hence, having a short guide really makes much sense. It is just a puzzle, for me at least, to determine it.
    • Other roles? Software Quality, Security/Network/Database Engineers, research, ..etc

Front-End / Back-End / Full Stack Developer

  • Most of the time, an application has some front end (Web or Mobile [Android or IOS]) and back-end (processing business logic).
  • Sometimes, the application is an infrastructure project, this is where no front-end is needed (other things exist, e.g. API)
  • In my opinion, one should be familiar with both sides. Or growing up in the career might be problematic.
  • Note Fresh students who try web or mobile and start to run away as they feel it is boring. You typically underestimate the whole application complexity.

Phase 1: Programming core (9 months)

  • Programming lies in the heart of the Software Engineering Process
    • Keep that in mind: If you are strong in programming => Most of next things in the career will be a piece of cake
    • You should learn multiple languages, some compiled and some interpreted. That will help you understand programming concepts and other concerns.
    • Which language to start with? Try to know what is the frequent languages in your local market are.
    • Java or C# are always there and they are general purpose languages with great support behind them.
    • For this 1.5 years, focus on a single language.
  • Step 1 - Basic knowledge / Experience
    • Let's select Java, which is 2 parts: Java SE and Java EE.
    • Find a good book for Java SE or a YouTube playlist (In all cases read a book).
    • Go ahead till mastering the basic syntax
      • Data types, Selection, Repetition, Functions, Arrays, Creating multiple files.
      • Learn to create a base class that has some data types and member methods.
      • Learn using the Java Collections very well.
    • Implement 1-2 projects of a reasonable size. Here is an example (it is from my playlist).
      • Document your projects. Use good naming conventions.
      • Upload your projects to GitHub (Tutorials for learning how to use it)
  • Step 2 - Basic Problem Solving Skills
    • We need to be good problem-solvers. Competitive programming offers a smooth way for that.
    • At codeforces site, Master Div2-A, then Div2-B.
    • Follow my sheet to master these 2 levels.
  • Step 3 - Object-Oriented Programming
    • Every day in our work we use OOP/OOD.
    • Resume learning the language to learn the OOP basics.
      • You may need some time to be able to view things around you in terms of Objects.
    • Develop new 1-2 projects using OOP (e.g. from TopCoder projects)
  • Step 4 - Basic Algorithms and Data Structures
    • You can do this step in parallel to step 3 or after it.
    • Data structures:
      • Study the basic topics (Stack, LinkedList, Queue, Binary Search Tree)
        • Read the codes, but preferred to write some by yourself.
      • Learn Java (or C#) collections (very well)
        • Understand how to use Hashtable / Sets
      • The most critical outcome:
        • When to use a data structure?
        • What is the time complexity of it?
    • Algorithms
      • Learn to compute Algorithm Order Complexity (but not other types such as theta/omega).
      • Graph Theory: Representation (DFS, BFS, Dijkstra).
      • Binary Search technique
      • Optional but preferred
        • Greedy and Dynamic Programming.
        • Trie Data structure
        • You may keep going in my Codeforces sheet to master Div2-C.
  • Step 5 - More programming concerns
    • Keep going to finish your Java programming book.
      • Learn to use to do multi-threading, client-server app, crawl internet pages.
      • Be aware of things such as Unicode, Internationalisation, ...
    • CS 50 (Feel free to start earlier)
    • Don't waste time with Desktop GUI.
    • Read in Soft Skills (e.g. leading, management, communication.., etc).

Phase 2: More CS study (3 Month)

  • Major: Read 3-5 chapters in
    • Networking, Operating Systems, Databases
      • These courses are important. So keep reading in them in parallel to next phases. Finish a book in each subject
      • For back-end guys, go deeper in Databases.
    • Study style: Understand well / play with code
  • Minor: Read 1-2 chapters in
    • Computer Theory, Assembly programming, Computer Architecture, Computer Graphics, Cryptography, Security, Cloud Computing, Parallel Computing, Discrete Mathematics
    • Study style: Read with basic understanding
  • Avoid Math (Probability, Calculus, Linear Algebra)

Phase 3: Market Track (6 Month)

  • Either work in front-end (Web, IOS, Android) or Backend (More OOP, database, design) or be full stack (work in both)
  • During learning one of the tracks: Study Software Engineer course and learn about Agile Development
  • Whatever track: Build 3 projects of big size. This is your CV Core
  • After it, build linked-in account and find job

Phase 4: Keep learning

  • Now you found a job. Enhance your background about CS topics
  • Consider See / Google / OSSU
  • Learn a new language such as Python