Wednesday, July 18, 2007

Checklist of a Most Sought Software Engineer

Getting a job offer from top software companies in Cebu City don't come easy this days. You got to have the right stuffs. The level of expectation and qualification have soared tremendously the past years. It's not as simple as getting an IT degree or a colorful resume. Companies outsmart each other to get the best software engineers who can do the job. You can't be a better software engineer. You must strive to be the best. You have to standout in all areas. So how do you get to the top of the pack?

I compiled a list of pointers that would serve as your checklist and guide. These are solicited from friends and associates who are working as software engineers, project leaders, supervisors and managers at Lexmark, NEC, NCR, Epson, Exist, Accenture and Infoweapons. Take time to assess how far or close you are. There is no room for discouragement, your mantra is to
strive to be the best.

  • Expertise in C/C++. These are not old languages. These are barometers in measuring your programming skill. If you excel in these languages, chances are you would also excel in any other languages. Most programming disciplines and best practices are best demonstrated and applied by these languages. You would likely to know how a piece of a software relates to the whole computer system. The first question likely thrown at you during interview would be: What is a pointer? What is the difference between pass by value and pass by reference? What is an access violation or segmentation fault? Java, PHP, Perl, C# are good, but they only come second.

  • Solid background and knowledge of the TCP/IP protocols suite. There is an old saying that Computer is a Network. Understanding of TCP/IP protocols is synonymous to understanding the world. Most likely you will be developing client-server and network-based applications. One of the keys to producing reliable, robust and high quality network applications usually depends at the level of your understanding of the TCP/IP protocols. You must distinguish connection and connection-less oriented protocols and when to use them. Client-server model. Iterative and concurrent connections. What is IPv4 and IPv6? What is an IP address and port number. Unicast, broadcast and multicast addressing. What is a protocol and how to develop one. TCP/IP and OSI layers. Internet standard documents and governing bodies. You should be at least familiar with RFCs (Request For Comments) and internet drafts. Network sockets programming will be easy no matter what programming language you use.

  • Computer networking and administration. Being able to setup and configure a computer network is a big plus. Think of a basketball player who can play different positions. You will become more valuable to the company by not just being a software engineer who write code. Usually, part of your job involves setting up and maintaining network environment for your project, like setting up a network testbed, configuring webservers, shared repositories, file servers, bug tracking and project management systems. These tasks are usually handled by system and network engineers. Small to mid-size companies prefer to hire engineers who can wear different hats. Lastly, you will be the last one to remain when the company is in trouble.

  • Solid understanding of computer systems. You don't just confine your skills and abilities within the domain of software development. You have to be at least familiar with the hardware side. That is where your product runs. For low level programmers who write firmware, device driver and kernel code, familiarity and detailed understanding of the hardware aspect is very critical. Swap, cache, memory, bus, I/O, DMA are some jargons you don't just have to understand but how they function and integrate into the system.

  • Unix platform. Its not all Windows out there. Deeper understanding and experience in Unix systems gives you flexibility to develop programs on different environments. Large software companies usually have different teams working on specific platform such as Windows, Unix and Mac. It is at your advantage if you are not tied within one platform.

  • Solid background in data structures, algorithms and IPC. List, stack, queue, tree, trie, maps, hashes, shared-memory, semaphores, mutex, pipes, etc are building blocks of a complex program. These are the core things that you have to master.

  • Software development methodologies and SDLC. You don't code right away when asked. This is something left to newbies and fresh-graduates. You have to follow certain principles and processes. Familiarity of the software development life-cycle is very important. You must be familiar with different phases of SDLC such as Analysis, Design, Implementation, Testing and Maintenance and the activities within those phases. You also need to be aware of other unique methodologies such as Agile, Extreme programming, Pair Programming and others.

  • Software testing and Verification. As a software engineer, you are expected to prepare and write test documents to validate requirements, design and implementation of a software program. You will have the hat of a software test engineer. There is no better tester that you the developer who knows the internals and externals of a software program.

  • Software development tools. CVS, bugzilla, debugger, productivity tools, etc reflect your maturity and approach in developing serius and big software projects.

  • Database integration and XML. Software engineers hate to be called database programmers. But you have to have the right skill when needed. In most cases, huge and complicated software programs or multi-tier applications require backend databases. So SQL is necessary. You should be able to integrate common databases such as Postgres, MySql, Sqlite into your program.

  • Opensource software. If you don't know Linux, you live in a rock.

  • Secure software programming and computer security. This would be your unfair advantage. The ability to develop and produce secure code is valuable and key to the company in producing high quality software products. You will help tremendously in preventing critical, blocker and cyclic bugs to reach end-users of your product.

  • Software development processes and standards.Background on industry standard processes such as ISO, CMMI (Capability Maturity Model Integrated), 5S and 6Sigma is a plus.

  • Right attitude. Success of your company depends on the ability of its teams and employees to work and jell together. Think like a well oiled-machine. You are expected to work as a team.

2 comments:

simoncpu-test said...
This comment has been removed by the author.
simoncpu-test said...

Unfortunately, those who interview you don't usually have these qualifications. I'm often discouraged to see people bullshit their way in. Hehehe. Haay laayf. :)

[ simon.cpu ]