tags:

views:

139

answers:

3

When I look at job descriptions for Google, Amazon etc, they all require C++ and Linux/Unix experience. Could someone please define what this usually means in the context of job qualifications? Do I know how to browse the file system in Linux? Do I know how to run commands? Is C++ coding completely different for Linux/Unix envs(compiler should only be different right)? Thanks.

+4  A: 

This usually means you know the developer tools available on *nix systems, as well as the low level architecture of the c interface into the os (system calls). Specifically the way libraries are laid out /usr/include for example, the way make works on *nix systems. The shells available and their differences (bash, ksh, sh) as well as how to use the tools (commands) to create sophisticated scripts. It also means knowing the system calls so you can levereage the low level semantics.

ennuikiller
"It also means knowing the system calls so you can levereage the low level semantics." So you mean the API to the OS, kind of like Win32 API?
TheNoob
+1  A: 

Linux/Unix part is what ennuikiller described, knowing the system, basic usage, APIs, Makefiles, etc.

The second part, C++, tends to fall into two categories. People are either looking for basic understanding of pointers, memory usage, STL, templates and such or they're looking for development experience with specific libraries like Boost or Qt.

I would say majority of what I have seen/interviewed for are for the first part, basic knowledge of the language, pointers, templates. Every so often I would see a job that asked for experience with Qt or Boost, but those are generally for mid- to senior-level positions.

To generalize a little, if you have installed a Linux distribution and have tried to develop using *nix tools, you should know enough for the first requirement. For C++ if you can create a basic implementation of a linked list template class (append/delete/print/search/sort functions) you know enough.

This is, of course, based on just those two requirements and knowing nothing more about the position. You might need to know Linux networking functions, File I/O, sorting, tree traversal and host of other APIs and algorithms, depending on what the job calls for.

Misha M
A: 

With C++ experience and without Linux experience, I was able to be a senior developer: solely responsible for design, coding, and testing of an independent feature/component.

However I needed a helper/team leader who was willing to answer my Unix-specific questions, about how to:

  • List files, test file attributes, etc., well enough to use source control
  • Use a source code editor (I edited on Windows, compiled on Linux)
  • Create makefiles (or equivalent)
  • Help with using gdb, tell me that valgrind exists
ChrisW