Image of the glider from the Game of Life by John Conway
Skip to content

Good Advice For Computer Science Students

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, you want to pick a job that takes you from the mundane to the exciting. The only jobs that encourage this culture are jobs that encourage growth and learning. For example, at my current job at introPLAY, I recognize, as well as my boss, that my Python skills are very new and unexperienced. While I was hired for my frontend skills in HTML, CSS and JavaScript, the company I work for fosters the training and learning that is necessary for me to learn Python and help progress the speed of development for the company. Even more so, as is with most web development positions, new problems present itself daily, and I am constantly battling how to tackle the problem at hand. This mental stretching and learning is a great work environment.

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.

{ 10 } Comments

  1. anonim using Firefox 2.0.0.3 on Windows XP | May 24, 2007 at 9:45 am | Permalink

    Hi

    Any book (or any other) recommendation for point númber 4? I've already finished my cs studies and I was working (until now) in a "bad" job. I had a lot of maths during my university and somehow I feel I've already lost a lot of that knowledge.

    For a start i've switched job...

    Great post.

  2. mr blorb using Internet Explorer 7.0 on Windows Vista | May 24, 2007 at 11:25 am | Permalink

    8. Instead of learning how to be a replaceable code monkey, learn something real. In example quality processes, specification process, (contract) law, project management, ..

    Almost anything goes here besides coding, and you will not be human waste anymore. Try for instance going to some arts classes and do some finger painting with oil paint.

  3. Roshan Shariff using Firefox 2.0.0.3 on Ubuntu 64 bits | May 24, 2007 at 1:43 pm | Permalink

    If you want to solve programming problems with a mathematical bent, Project Euler isn't a bad place to start.

    Another book you might want to read if your experience with programming is limited to C/C++/Java etc. is Structure and Interpretation of Computer Programs. The entire book is available online and I highly recommend the accompanying lectures (Google for the videos) to gain a different perspective on what computer programming is about.

  4. dabaR using Firefox 2.0.0.3 on Ubuntu | May 25, 2007 at 10:03 am | Permalink

    Hey, Aaron!

    What concrete examples of putting the 7 points of advice in action can you give from your experience?

  5. phoenyx using Firefox 2.0.0.3 on Ubuntu | May 25, 2007 at 4:50 pm | Permalink

    I never have liked using lines of code as a metric (especially without context). It implies that languages that require more lines of code to do something are somehow better.

    I'd like to point out that there is probably a "quiz" or "challenge" for the language of your choice.

  6. Vineet Kumar using Firefox 2.0.0.6 on Mac OS | September 3, 2007 at 4:23 pm | Permalink

    I wouldn't call the python challenge a perfect fit for a 4th year CS undergrad. I've played through the challenge, and while I think it's really cool, there are definitely some tasks that require bits of wisdom that are generally off-topic for CS classes. Without that wisdom, which only comes through experience, I think the python challenge would prove frustrating.

  7. Justin George using Firefox 2.0.0.6 on Windows XP | September 4, 2007 at 1:02 am | Permalink

    I love the 'write a program that sorts...' one.

    (arrayname).sort does the trick. I love Ruby.

    Javascript is almost that simple: (arrayname).sort( function(a,b){ return a - b; })

    Why must people ask these things at interviews?

  8. Tony using Firefox 2.0.0.6 on Mac OS | September 4, 2007 at 2:36 pm | Permalink

    The 100,000 lines of code is a misleading point. Any competent programmer can write thousands of lines of code, implementing the same sorting algorithms and binary trees over and over and over...

    A cleaver line of Ruby or Perl or Python can easily outweight a block of generic Java, at least in terms of education and experience.

  9. JOHN DUNCAN using Firefox 3.0.11 on Windows 2000 | July 23, 2009 at 4:30 am | Permalink

    Why should a lecturer ask a person the process of Mail merging yet if you draw the process she doesnt give you any marks.

  10. Thierry Mlisho using Safari 534.8 on Unknown O.S. | September 14, 2012 at 5:29 am | Permalink

    I feel very excited with these advises and I'll apply them In my studies.

{ 1 } Trackback

  1. [...] 26th, 2007 Via Planet Ubuntu i read Aaron Toponces Good Advice For Computer Science Students. Read his article! For reference here is the short version of the [...]

Post a Comment

Your email is never published nor shared.

Switch to our mobile site