Fog Creek Software
Discussion Board




Advice for a college student?

Hi everyone. I'm a college freshman at the moment, and I'd really appreciate some feedback. Let me tell you a little bit about my situation:

I'm an aspiring software developer. I've made myself fluent in several languages, namely Perl and C (and C from Perl), and to a lesser extent C++, and of course other, lighter languages like JavaScript. I've created numerous open source software projects and I've contributed to numerous others. I'm not the greatest programmer in the world, but I do try; I've read books like Code Complete and the Pragmatic Programmer, and I've spent a lot of time reading others' code and comparing it to mine, trying to extract whatever bits of accumulated knowledge I can.

I really like doing this, and not surprisingly, I'd like to do it for a living, which means majoring in CS. Unfortunately, my <a href="http://www.stonybrook.edu">University</a>--apparently like most others--requires at least several different advanced math courses to get a CS degree, and, well, I suck at math. Math has never been my strong suit; I never learned (or just plain forgot) some basic math skills, and I really don't have a firm foundation to build a house made out of calculus and algebra on.

To even get my foot in the CS door (CSE 110, <a href="https://scoreweb.cc.stonybrook.edu/sbuprod/course_catalog/usbny/UGRD2001/CSE.htm">here</a> are the course descriptions) and take several CS courses that would be more or less remedial for someone like me (data structures, algorithms, elements of HHLs (variables, control structures, routines, etc.) for someone who seriously *loves* his pointers), I had to either get a 4 on some math placement test or take a college-level algebra course. I opted for the course, since I knew I couldn't just waltz in and pass some math test.

Well, the course has proven to be *extremely* arduous. I've invested a monumental amount of time in it, and I'm barely getting by. I'm catching maybe 20% of what's thrown my way, and it keeps getting more and more complicated. If I can't handle garden variety college algebra, how on earth will I be able to handle *linear* algebra? (I'm not even sure what that is, but it's probably much more complicated, even though it sounds simpler.)



My heart isn't completely set on CS, though.

Another possible career path for me is the law. Not just for the money; this is something that fascinates me just as much as programming does. But law schools wanna see a great college GPA (besides a high LSAT score, which I can easily get). So I'm basically in a situation where to take the courses I'm actually interested in, I'll have to also take some courses that I have a good chance of failing, or hopefully just barely passing, thus damaging my GPA and hindering my other opportunities.

I know I've probably got some tough choices to make, but I would really appreciate some feedback from the oh-so-smart members of the JoS forum, especially from those who've found themselves in somwhat-similar situations or know someone who has.

Thanks.

Justin Sane
Friday, April 30, 2004

Sorry, here are those links:

http://www.stonybrook.edu
https://scoreweb.cc.stonybrook.edu/sbuprod/course_catalog/usbny/UGRD2001/CSE.htm

Justin Sane
Friday, April 30, 2004

I'd say that it's absolutely normal to have more trouble with math than with anything else on the road to your CS degree. It's the most complicated and abstract of the subjects taught, and my experience was similar to yours in this sense.  Don't back up, study, and remember that math skills are one of not-too-numerous things that visibly set professional programmers apart from self-taught coding monkeys.  Good interviewers do ask linear algebra questions.

Egor
Friday, April 30, 2004

CS courses do not teach you programming, they teach you Computer Science - which is distinctly maths heavy.

Mr Jack
Friday, April 30, 2004

if you want to go into programming, maybe a software engineering degree is what you are looking at

new one
Friday, April 30, 2004

I had trouble with discrete math too.. considering that I switched from premed, I shouldn't be too surprised, I guess.. After all, where I come from, Physics was a mandatory subject  and for the premed crowd, it was the throwaway subject..

Having said that, if you genuinely like programming, you'll find that some parts of the math are intuitive. It is so for me. I had to learn calculus and I didn't mind algebra to begin with, so I didn't have a lot of difficulty adapting to CS.. Hard work at the start, yes, but impossible.. no.

Even now, I can probably recognize the mathematical concept if I see it, but I'd be hard pressed to explain the name or the other supporting theories behind it. Ultimately though, I feel that it's most important for you to pick whichever field you think is right for you. Not necessarily the one with the most money, but the one that you feel you are motivated to do well in.. The rest is easy.

Good luck

deja vu
Friday, April 30, 2004

It's interesting that the OP find maths hard given that he's into programming -- the two always went hand-in-hand for me.

It must seem frustrating that CS degrees want maths if you know you are a good programmer and can't do maths. But there is a good reason for it.

I would encourage perseverance, though. Maths is, almost without a doubt, the most useful and transferrable skill there is -- much more so than programming.

Maths *is* hard, and it's often taught poorly. But I think it is possible to make significant progress, even if you find maths difficult For example, I was a maths dunce at school until the age of about 14 or 15. By the time I went to university, I was the best maths student in my year. It took hard work and some good teaching.

By the time you go to university, you might find good teaching hard to come by. It really needs to be one-on-one tuition with someone who is good at maths *and* teaching. But a university is a good place to find such people -- there may well be grad students who would be prepared to give you an hour or two a week of tuition at a reasonable price. Don't be afraid to 'fire' someone you don't feel is a good fit, and then try someone else :-)

Alternatively, there are lots of books out there for all levels and abilities (I know the Dummies series has some!). There is also the internet -- something which was not available to me when I was really studying maths. (Perhaps this isolation helped, as the 'net wasn't there as a distraction, but if you use it sensibly, studying maths doesn't have to be so insular.)

There are some good resources on the web to help you when you get stuck:

Ask Dr. Math: http://mathforum.org/dr.math/
Eric Weinstein's Mathworld: http://mathworld.wolfram.com/
Usenet may also be very useful.

Another useful tool is a computer algebra system. These are programs that do symbolic manipulation -- they will do integrals and derivatives etc., and are really useful for checking your answers. Mathematica is good, and you can get a student license at a very good price (around $100, compared to around $2000 for the regular version -- although the two are identical). You could also try free versions. I like Eigenmath http://www.eigenhead.com/ which is available for Windows and OS X.

I'd encourage you to contunue trying to learn maths. But be aware that self-directed study is quite hard, and you need to define clear goals. When you get stuck on a question, set aside a fixed amount of time to work on it for (20 minutes, say), and then move on. You can always go back later. As a college student, you need to learn how to learn.

Good luck.

C Rose
Friday, April 30, 2004

[By "free versions", I meant free *alternatives*, not warez :-) ]

C Rose
Friday, April 30, 2004


Go read The Pragmatic Programmer.


From that, start building up an "experience protfolio" and run it like an investment portfolio.

Have a few regular "Hey, this should get me a job now" sort of things along with some "this might or might not ever turn into a job" sort of things and grow it from there.

KC
Friday, April 30, 2004

> I really like doing this, and not surprisingly, I'd like to do it for a living, which means majoring in CS.

I don't know if that's true. Perhaps CS (Computer Science) is about the theory and history and future of computing, and there are *other* fields like Software Engineering that are about the practice of it.

---

I was pretty good at maths, at high school: good enough to go to Cambridge with a scholarship, to take an undergraduate maths degree there. I found the maths Cambridge almost excessively difficult for various reasons (I gave up on some of the courses entirely, and finished with a without-honours 'pass' by learning 60% of the courses very well and the other 40% not at all), and I find professional programming much easier than academic maths. I still use *some* maths in programming (knowing two to the power of thirty two, for example, and what "O(n log n)" means when they talk about the efficiency of an algorithm, and being unafraid of symbols such as "x" and "i" representing numbers in equations), but not much; I haven't used any calculus, for example, since my time as an intern when they asked me to use "queueing theory" to model the performance of a WAN.

There is *some* programming that wants 'advanced' maths skills (statistics etc.) ... not that the programming itself is especially difficult, but when you design software you need to understand what you're modeling (e.g. if you're designing bookkeeping software then you need to understand bookkeeping) ... but I'd say that most programming (I've mostly been working with telecommunications and device driver software) doesn't.

Christopher Wells
Friday, April 30, 2004

Jason,

I was failing Calculus I at CMU my freshman year.  I got desperate towards the end of the semester, so I finally went to my TA and asked for help.  He spent hours with me helping me out.  A few days before the exam we went into a classroom and he had me do problems on the chalkboard for a couple hours.  I got an A on the final, thus bringing my final grade up to a stellar C-.  (yes, my other tests were that bad).

My point is, go talk to your Professor.  If I had spoken to mine earlier, I'm sure he would have helped me out.  Get some private tutoring, either from an upperclassman, or a grad student or something.  Don't be too proud to ask for help.  And don't worry, you aren't the first person to do poorly in math.

Good luck to you.  Oh, and remember:
d(hi/ho) = (ho dhi - hi dho)/ho ho

nathan
Friday, April 30, 2004

I own a software company.  I develop, sell, and market software.

My degree was in electrical engineering.

I don't use any math beyond trig, but I use it a lot for screen graphics.

GETTING THINGS DONE is what matters
If I were hiring a programmer, I wouldn't care what degree they had, I'd care what they could do.  I'd prefer that you'd spent 2 years reading Joel's list of programming books (Code Complete, Pragmatic Programmer, Rapid App develoment, etc.) and actually APPLYING those skills.

DOMAIN KNOWLEDGE+ PROBLEM SOLVING>DEGREE
My success has less to do with my programming skill (i'm self taugh) and more to do with my domain knowledge and ability to SOLVE PROBLEMS.)

TALK to EMPLOYERS. Verify that you need at CS degree.

There's a lot of talk on JoS about the fact that CS degrees are about theory and don't *necessarily* prepare you for programming.

Mr. Analogy
Friday, April 30, 2004

Does your university offer a B.A., or only a B.S.?  Mine had both, and a friend of mine did the B.A. in CompSci so he could avoid the more arduous math classes.  It hasn't hurt his career any.

Kyralessa
Friday, April 30, 2004

I didn't realize that Joel had a list, but then after a mention above, I came across it and realized that the beginning of his was the same as mine:


* The Mythical Man-Month
* Rapid Development: Taming Wild Software Schedules
* Code Complete: A Practical Handbook of Software Construction
* The Pragmatic Programmer: From Journeyman to Master

Then I have some stuff by Martin Fowler & Kent Beck....

Good call Joel

KC
Friday, April 30, 2004

Many, many years ago I transferred to Stony Brook from a much tougher school to pick up a degree in Comp Sci (The much tougher school didn't offer it as a degree). They wouldn't transfer all of my advanced computer classes from the much tougher school until I took the prerequisites.

Really. This included the busy-work and boolean algebra class (was that CS110, or CS113? I forget).

The one thing I did learn from this, which has proved valuable to this day, is that sometimes you just have to do the work even if it is below you.

So my advice: suck it up and deal with it. You need the degree to get a job, and you need the nonsense classes for a degree.

And if you can't understand linear algebra, you are probably not going to be a good software engineer -- not because it is relevant, but because you need to be able to learn and understand moderately complicated topics all the time as a software engineer. Either the fundementals of ray tracing, how a trade is processed, or the workflow at the crisis hotline -- wherever your software is going to be used, you need to be able to understand the domain.

Of course, the same could be said for circuit design, and I failed that twice....

Gustavo W.
Friday, April 30, 2004

*  Recent Topics

*  Fog Creek Home