Advice to Computer Science student
A student wrote to me: “As a first year student in computer science, I am confused by several programming languages. My friends told me that I should learn PHP and Java. My school only teaches Java. What language should I learn now? Should I take additional special trainings for other languages? Please advise.
Answer: I have answered this question many times before. Please read previous answers since each year, I often receive several questions about programming languages. The fact that certain languages are currently “Hot” should not influence your long term learning goals. Languages come and go, some stay a little longer but eventually they will be replaced as technology changes. Do not confuse programming languages with the fundamental concepts that you are learning in school now. They are the foundation where you will build your career on.
As first year computer science student, you will learn programming languages such as C++ or Java because they are popular now. Once you learn one language, it is very easy to learn another and you do not need special trainings. As a college student, you will be taught the fundamental concepts of programming such as object oriented, functional, or procedural, etc. You must understand certain concepts, patterns, data structures, and logic as they will give you a strong foundation to work with any future languages. You need to know about development life cycles such as waterfall, agile, spiral etc. You also need to know about certain development approaches such as structure, scrum, extreme programming, parallel programming etc.
I believe students need to know the basic language of C or C++ as it is the fundamental. It will help you to know more about relationship between hardware and software such as memory utilization etc. Today, many applications in the Web environment requires Java, C# and Dot.Net. There are several newer languages such as Python, Ruby, Ajax, PHP, JS, CSS (If you like to hack) but if you already know C++ or Java then you can learn these languages in about few weeks.
To be a better programmer, please remember that it is not about how many language that you know but how do you write your code. You must learn about “secure coding” by put security first when write code. If you are using a database, learn how to avoid SQL injection. If you're accepting user input, learn how to avoid buffer overruns. Since nobody work alone anymore, you must develop how to write clean and maintainable code. Make sure that you have comment, name variables well so other can understand your logic when they review or maintain your code.
If you like to work in the web development environment, you need to know Java, C#, Dot.Net and JavaScript well. Today it seems like Ruby and Python are replacing PHP for the web. If you like mobile platform environment, make sure that you learn about iOS, Java, Objective C for Apple and Java and JavaScript for Android. Another hot area is Web 2.0 that requires skills in Adobe Flex, JavaScript, Adobe Flash, AJAX and JavaScript Object Notation.
Beside technical skills, please focus on “soft-skills” such as listening, communication, teamwork, collaboration, and if possible take one or two additional business courses. Today most companies will seek computer graduates who understand the business and can discuss, communicate technical things to business people and customers. Many global companies also require at least one foreign language (prefer English), knowledge of finance, leadership skills and certain knowledge about globalization. Many computer science students believe that “Computer is all about technical skills, it is NOT”. To build a career in this field, you need more than just technical. You must communicate well in both orally and in writing. In this globalized world, you need certain skills that can help you to compete, to adapt to rapidly changing market conditions. You must learn much more than programming languages to survive because we are no longer in the 20th century but in the 21st century or the knowledge age, where broader knowledge and deeper skills are needed.
Sources
- Blogs of Prof. John Vu, Carnegie Mellon University