I really do t think it matters. College students frequently change majors anyway. My child goes to ga tech and in high school refused to ever take computer science. Well now out of necessity she has learned some programming,loves it and is very good at it and is now considering mini ring in it. My point everything changes when u get to college and don’t worry about what other students did beforehand. Do what u like and what u are good at and it all works out in the end.
I never found that it took any love for programming to be good at it. If you can think mathematically and write with proper grammar, that’s more than half of what it takes to be a good programmer.
The entire culture of “side projects” and “working in your spare time” scares away many potentially high-quality programmers who aren’t of the obsessive variety.
The answer is not necessarily clear-cut. I have seen many a math whiz stumble badly in even basic CS courses and people who can’t integrate f(x) = 5x + 3 to save their life become great coders. I am one of the latter. After 35 years writing code for money I think there’s a few basic properties that I would attribute to a good coder that will be useful to his/her company:
- Good reader/writer. Ability to read between the lines and read what is not there a definite plus. It's not like customers or their agents (systems engineers :)) will tell you the truth about what they want
- Persistence. Think the writer's wastebasket full of first page drafts. MANY of them. Good writers know they have to write things more than once. Clueless writers don't.
- Good people and machine sooth-sayer / mind-reader. See #1
- Methodical but not stuck up about process. Process helps but all the process in the world won't help you get your Bluetooth code working with an Whatever Smartphone (guess how I know).
- Paranoid, at least a little. See #4. Normal people would spend a year thinking their code is wrong. Paranoid people grab a systems engineer and a Bluetooth packet sniffer and guess (correctly) that the Whatever's Bluetooth implementation is, well, cough...
- Works well with others, and can take an egg in the face on occasion. See #5, also helpful when smart interns make us look silly on occasion...
- Fast learner. Like, learn PHP or Python in a week fast.Knows enough languages / frameworks / OS's to know that there isn't a single one that is best.
- Analytical enough to decompose a problem into small small bits but wholistic enough to see the big picture.
- Has a life outside computers. 'nuff said.
- Has an area of expertise outside writing software, whether it's accounting, engineering this or that...
@turbo93 Your advice is really helpful and detailed haha, I wish I can have a job shadow at your company to learn more from you. Thanks everyone for your comments too And just as @scubadive said, in the worst scenario, if I found out that I’m not cut out for CS at all, I can change my major.
@turbo93 : Good list! I would add knowing when to change tactics if something is not working and not being afraid to fail or take chances when appropriate.
I can say this about my d. She hates calculus and actually she hates writing but she is extremely talented at the mechanics of writing. I think that is why cs is easy for her. It’s not her math skills it’s her language skills. She can read sheet music not ever having been taught, understands the grammar in foreign languages she does not know. I would say she is better at math than the majority of the population but hates math prefers science. You just never know.
I totally disagree. Just about anyone can learn how to program, and do it well, if they’re motivated enough.
I totally agree.
Anyone can learn the piano and do it well enough to play in an amateur band or a cruise ship or a night club. But when a DARNED GOOD coder can outcode an AVERAGE coder by several orders of magnitude, you gotta wonder. A team can use both types of coders, certainly - but one has to have enough “know thyself” to know from day one that they’re good or they’re average, and not get in the way of good coders. The problem I’ve seen with high-achieving college kids that make it into CS and then the workplace is that sometimes they have a hard time understanding their own capabilities. So, you assign them something basic and they complain that it’s too simple and they want to write the next X Windows system or some such. Or they can talk you into giving them a difficult task and they can’t do it within the time you have.
Every year I get stellar interns with near 4.0’s from stellar Big 10 schools, and I rarely see truly gifted coders. I see competent coders that after a few years get bored and quit to try something else. The figure 1 in 10 has been thrown around a lot, and I agree with it. It really does not matter how GOOD one is, as long as they understand how GOOD they are themselves. I started coding on my first day on the job, and rare as it may seem, I’m still coding 30 years and 3 months later in the same company, the last 18 with the same manager in the same team.
The closest I’ve seen to coding is architecture.My older daughter is a graduate architecture student and it’s a lot of the same there, just a bit more obvious. The ‘starchitects’ stand out a bit more (she is one :)). Do you need to be a star coder to have a good career? not really, but I’m thinking long term. Few of my friends are coding after 10-15 years let alone 30+.