What do you really need?

In the past few weeks after the new school year started, several “first-year” students came to ask me: “As a Software students, what courses do I need to take before graduation? What other non-computer classes that I need to take so I can have good job when I graduate?”. Usually you receive this kind of questions from third year students, NOT someone just start school few weeks ago. It seems that after the financial crisis, students are paying more attention to their choices of study and the job market than ever before. Following are my suggestions:

“There are several programming languages courses that you could take. Most students start with Java or C++ but if I were you, I would take the C programming class first. I understand that today market requires mostly Java, C++, and C# languages but C has the advantages that others do not. From my view, C is the foundation of programming because it is closer to the hardware than other languages. As information systems are getting larger and more complex, you do need to develop efficient code, especially in the embedded software, so you must know C. This language will allow you to go to the level of compilers and operating systems to ensure that the code works well. If you can master C programming language, C++, C# and Java would be much easier to learn”.

“Beside programming language which is the foundation of Computer Science, Software Engineering and Information System Management, you must know the software development life cycle well. You must understand the differences between the Waterfall lifecycle, the Spiral Lifecycle, the Incremental Built Lifecycle, etc. and know which one would be suitable for which particular project. You should focus on the front-end of the lifecycle by taking the requirements engineering and the architect and design courses before graduate and build your skills in obtaining and analyzing users' requirements. Many students prefer to spend their efforts on the back-end of the Lifecycle by taking more coding and testing courses. I know that students do not like the requirements engineering course or the architect & design course because they think they are not “Technical enough” as compare with the Java or C++ courses. On the contrary, when they work, they will learn that requirements and architect are the most important skills that the industry need. Because these courses focus mostly on communication with users and customers so students do take them seriously enough”

“To some students, the “ideal job” is the job that allows them to write code. Many do NOT like to talk to people, if they have to, texting and email are their choices. In the industry, the person that have the most power and influence over others and likely being promoted to manager is the one who can communicate clearly and comfortably with customers. The key in selecting project manager is NOT on how many programming languages a person know, how many lines of code a person can generate in an hour, but how well can a person communicate. By understand what customers' needs and be able to write them clearly in requirements specs, they allow others to do their works and program their codes correctly. With poorly written and constantly change requirements, perfect code is worthless. By architect and design well, they allow others to figure out what their code is supposed to do, which function they must implement first, and what quality attributes they must consider to build their software accordingly. With bad architect and design, good code has no value”.

“Many colleges do offer classes in "Technical writing" and you should take them. I know that these classes require a lot of writings but you do need to develop writing skill even you work in the technical field. There are so many readings, writings and communicating in the software industry than you can imagine so you need to develop these skills whenever you can. Many software companies do NOT hire developers unless they can read, write, and communication well by demonstrate them during job interviews. Another very important skill that you also must have is knowing at least one foreign language such as English”.

“As technical students, you probably do not have to take business courses. This is a big mistake, although the school may NOT require it. I do suggest that you take some basic business courses so you understand the concept of accounting, finance and business rules such as supply and demand, competitive advantage, business values etc. so you will know how the business works because someday you may become project managers, product managers, Chief Information Officers (CIO) and maybe own a company and you must have these knowledge. Today, technical skill is NOT enough, you must also have business skill to survive in this highly competitive environment”.

“To get a better jobs when graduate you need to know that most software companies do NOT only look at academic achievement but also “Non-academic” activities. Experience is critical factor in the hiring decision so instead of enjoy few months vacation at home and enjoy mother's cooking meals, you should work in the summer to get the experience whether you get pay or not. The best summer job is the internship at a software company where you learn more about your future prospective as well as the company know something about you. If you cannot find jobs with software company then any works with non-software companies would be fine, as long as you are gaining something relate to your field of study. You may design a website for a local Bank, program an application for a small import/export business etc. anything that help you to put in your resume that you have work experiences. As information technology students, the biggest mistake you can make is to take any kind of job in the summer that is not relate to your field even you may make more money. I know sale jobs pay more and you can dress nicely in an office convincing people to buy something but what do you put on your resume when you graduate? Do you think a software company would select a candidate with a resume that lists: “selling refrigerators, selling TV and DVDs, selling clothes” or a resume that lists: “Programming a accounting application for a small business, design a website for a small local bank”.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University