Skip to content

Latest commit

 

History

History
48 lines (37 loc) · 6.78 KB

File metadata and controls

48 lines (37 loc) · 6.78 KB

Essay On Becoming a Software Engineer

Bill Langenberg who is a technical manager at TripAdvisor in his write-up An Industry Guide to Becoming a Software Engineer presents skills needed and what employers expect from a software engineer. These can be generalised to what any engineer must embody.

Core computer science skills include data structures,algorithm analysis,impact analysis,coding fluency in one language and problem solving and debugging.

Data structures help in organizing and storing data that can be accessed and modified efficiently. It is important to know how it works and the performance characteristics of common operations.

Algorithm analysis simply means reading codes and determining their complexity. It is worth noting that coding patterns and data structure selection effect into overall time complexity.

Impact analysis directs the engineer in understanding what the code is doingand how it effects the production environment. A deep knowledge of estimating performance factors will help your production environment. This goes to suppplement an engineer over a developer as the former has deep knowledge and can easily perform algorithm and impact analysis. It is imperative to develop a systematic method in problem solving and debugging. This permits easy identification of a bug in a code in order to solve the problem.

Coding fluency is the combination of your knowledge on a particular coding language and how fast one can write codes without an Integrated Development Environment IDE. IDE is a GUI that contains a code editor, compiler and debugger. An engineer should build his skills by mastering one coding language's mechanics, built-ins and patterns as it helps in your collaboration and production environment.
An engineer should write good and maintainable code. Providing effective reviews to peers is also vital.
This fosters ease of understanding and collaboration in the production environment.
The world requires a software engineer to be productive, have basic security techniques, be decisive in the toolsets over a production environment and of course a mastery of linux.
An engineer should understand Linux from its installation to launching basic services like a web server. Using git and/or subversion in contributing to projects as well as updating scripts is a plus.
An engineer should be able to seek for answers from the web in order to solve problems and assist in your production environment.
It is imperative to search for the best tools to apply for a particular process. This saves alot of time in writing your codes and applying.
There are some indispensible tools necessary to understand as an engineer. They are as follows;

  1. C/C++, Java, C#,or another core,object-oriented language
  2. Python, or another script-y language for getting stuff done fast
  3. bash shell scripting
  4. SQL including joins. Basic Security vulnerabilities which requires attention must be understood in order to exploit them and harden your code against them. Security on your systems should be centered on buffer overflow and SQL injection. While securing your users from SQL injection, cross-site scripting, cross-site request forgery, etc. It should be noted that personally identifiable information should not be stored in plain text format in log access tokens nor should they be exposed. Employers require an engineer to be productive. It is essential an engineer balances requesting answers from teammates and spending time on getting answers themselves. Engineers need time to be productive. It is important while refactoring/changing existing codes to leave it in a better state. Engineers should understand that it is necessary to practice more in order to master the domain. They should participate in Hackathon, building applications with other engineers and find internships. Employers will require you build experience in order to update your resume, which will present the following essential job specification characteristics they seek:
- [x] Quality internships in software engineering
- [x] Interesting projects one participated and *completed*
- [x] An active coding project one is excited on
- [x] A reasonable <del>GPA</del>
- [x] Courses completed that fulfil the core computer science skills
- [x] Hackathon participation.

It is necessary one should present the contributions made from that of the team in the resume as well as what the project is all about. According to Dan Blumenthal there are many ways one can build the resume if no possibility of an internship.
Ensure you build something which will be visible, publicly accessible and completed.\ Participating in Open Source projects is an added experience.
Writing an app for smartphones from scratch is another initiative, while starting a company with friends will give more valuable experience.
In addition, building a network with other engineers, writing a blog periodically or keep practicing on building your skills as they will all lead to increase your experience.

It is important to take your interview preparation seriously focusing on your communication skills and technical skills.
It is essential to talk about your experiences and projects both broadly and in technical details.
Enthusiasm about the company and your possible role should be expressive.\ Exploring the company site and products and possible suggestions you might improve.
In addition, knowing the company's dress code and asking questions on the culture of the company in order to be sure you can work in such an environment.

In conclusion, it is important to identify which skills are lacking, find opportunities that will help you accomplish your goals but not chasing the highest pay check.:sparkles: :rocket: