- Study user’s requirements
- Make a part of proposal/estimation
- Develop software requirements specification (SRS)
- Define and conduct preventive actions
- Make a part of project training plan
- Create high level design (architecture design and technical solution document/SAD document)
- Develop software prototype
- Create program design/program design in details
- Review design in details
- Conduct technical training for the project
- Build application (coding) based on analysis, design of software following the coding convention
- Do unit tests
- Prepare, integrate and do main integration tests for product components
- Fix bugs
- Attend to code review, unit-test review, technical review if required
- Create software installation guideline, support documents,…
- Customer support/fix bugs in acceptance
- Maintain the product
- Make knowledge base: lesson and practice at project closure
- Create training document/conduct training course
- Share the experiences (i.e, seminar, other public channels)
Skills & Requirements
1. Programming skill:
- Excellent C programming (on Linux) skill:
- Understand & able to use all data types
- Understand & able to use all language features (in C standard)
- Able to use gcc (or clang), g++ (or clang ++), and gdb, Makefile
- Must work extremely well with socket programming & different types of socket type / protocol
- Must work extremely well with multi-threading programming & locking primitives
- Must work extremely well with standard C library functions like file I/O, string manipulation
- Work well with shared memory programming for inter-process communication
- Good knowledge at C++ programming: understand & work very well with basic data structures, language features, standard library functions.
- Understand CPU affinity & process schedulers on Linux
- Know how to optimize, benchmark code for performance, know performance/memory trade-offs when using different type of data types.
- Understand cache memory, virtual memory, user space, kernel space, and how to write code to utilize those.
- Good at shell/bash script programming
- Able to read & understand C# (basic level), able to update existing C# code (very basic level)
2.Linux administration skills:
- Able to install Ubuntu & troubleshoot problems during installation
- Able to uninstall/install/upgrade packages
- Able to use basic commands / utilities in Ubuntu
- Able to get hardware/software information in Ubuntu, good at problem trouble shooting in Ubuntu
3. Some knowledge about hardware:
- Understand SSD vs HDD performance, understand memory speed, cpu speed.
- Able to give advises to customer for hardware specifications when they need to buy a new server for running your applications.
4. Communication skills:
- There must be NO problem at writing & reading in English
- Smooth at English listening & speaking: directly (face to face) with US customer
5. Working attitude:
- Ability to response to customer anytime / anywhere (even on mobile phone, at home, during holiday…)
- Very active when working: never wait for task assignment, must find something to do (that gives benefits to customer/project) when have a free time!
- Willing to meet/meeting with customer, face to face, like twice a month.
- Keep learning new things, especially about technologies & programming.