While reading Planet Gnome, I read a good post by Clare So discussing programming suggestions for CS students. I thought it was a particularly good read, and would like to also discuss it here. The inspiration for his post, and mine as well, comes from a list of suggestions found on Google (that link is in Chinese, so to see a translated version in English, click here (I hope you will apologize my slaughtering the translation on points 3 & 6. Maybe someone can suggest a better translation?)).
1. Practice the fundamentals. Don't spend all your efforts on popular languages and tools, and the skills listed in the job advertisements. Instead, master your skills in statistics, computing, databases, operating systems, computer architecture, computer networks and discrete mathematics. Try to solve problems in Donald Knuth's "Art of Programming". If you can solve most of the problems, your skills in computing are not bad.
2. Seek more challenges. Experience in programming can reinforce your knowledge. Try to accumulate the experience of writing 100,000 lines of code when you are in your 4th year.
3. Practice, practice, practice. Do not underestimate any of the actual work, such as seemingly simple coding or testing. You will gain professional experience pursuing and paying attention to the details of the code.
4. Don't forget about mathematics. Math is gymnastics to your brain. Math is everywhere. If you are particularly interested in math-intensive tasks, such as video and image processing, you will need these skills as your tools.
5. Develop a team spirit and to learn how to work well with others.
6. Encourage innovation, and don't necessarily stick to the authors code in the books.
7. Work strategically. Try to find meaningful and interesting summer job or part-time job if it does not affect you schoolwork. Go find a place that pays attention to programming. Working with a good boss, your code will be used by clients. Don't rush to become a boss. Your goal must be to learn from other people. When you are working or finding a job, don't only look at benefits and the job title. Pick an environment that encourages learning, a company that is willing to train employees, and a company that regards you as an important person. Last, but not least, pick a good boss.
This is good advice. If I may, I'd like to expound a bit on a couple of them.
Seek More Challenges: Writing 100,000 lines of code by your 4th year of college is an impressive feat by any standards. Even if all that code is spread across a number of different languages during your college career. However, you're not going to hit that level just doing your homework in the CS department. You need to code on projects or just for fun outside of school, and you need to find the time to do it.
There's more to just reaching 100,000 lines, though. It's about discipline. It's about learning fundamentals. It's about finding the very difficult scenarios, and how to solve them. Ultimately, writing 100,000 lines of code before you even graduate, is about experience. You will be properly molded as a programmer and developer.
The #1 challenge that students face, however, is finding what to code. How do you just sit down at your computer, and start coding? You need a project, or a problem to solve. You need something that will keep you motivated to write the problem. www.pythonchallenge.com is a perfect fit. Each page on the site presents you with a problem. You code the challenge in the Python programming language and modify the URL with the answer, moving on to the next challenge. Although it's a far cry from writing 100,000 lines of code, it's a good challenge that will stretch your mind, and get you coding. There are many other examples and challenges online to get you coding.
Don't forget about mathematics: Coming from a Mathematics major, I can back this point up until the cows come home. Programming and software development require a great deal of logically thinking through problems. Just the other day, a friend of mine and I were discussing technical questions that are asked in software development interviews. Usually, they are fairly nasty, going back to the fundamentals that you learned while in college, or studying. However, most of the problems presented, if they're a good interviewer, are logic-based, and this is where your skill as a mathematician will shine.
For example, one question in just such an interview could be "Here is an array of randomly placed integers. Write a program that sorts the array." While your skill as a programmer will shine, your skill as a mathematician will shine brighter. Even if the syntax is bad, and would not compile, the logical thought process behind the algorithm is what the interviewer will be looking for.
I've heard complaints from students year-round that what they are learning in math class, they will never use in their career, or in real life. My rebuttal has always been that they are further from the truth than they realize. By learning the math skills that they are, even if it is differential equations or triple integrals, they are honing their skill in logic. Being able to sit down, and workout even the most insane and unrealistic math problems means that you are able to think through a problem, and come up with a solution, going from one step to the other. If you can do this without a well-formulated equation sitting in front of you in black and white on textbook paper, then you are skilled indeed. Learn math.
Finally, work strategically: When looking for a computer programming or software development job, as the tip suggests, look for a job that encourages growth and an employer that is willing to train your, increasing your skill and potential. There are good programming jobs and there are bad ones. The bad jobs will put you in tasks that are mundane, and don't stretch your imagination. The same thing over and over. Initially, there may be a learning curve when hired learning the task, but after several repetitions, day after day, the learning curve levels and the job becomes boring and mundane.
So there you have it. Some great advice for CS students looking to get into the field. To be honest, I wish I would've known some of these tips when I was attending school. In fact, I wish some of the faculty would've taken the time to go over these as well. These tips are pearls of great worth, and if taken seriously, will propel your development career far and fast.