Hacker News new | past | comments | ask | show | jobs | submit login

I'm class of '13 for grade school, entering college this fall at a state university. I've been programming since I was 8, and from what I can tell, my self-teaching has put me at a level above people fresh out of school with a flashy degree that says "hire me." I'm not good with words, but my point is this. I find it terribly concerning that I'm paying $50k to go to a school to learn something I already know, and know well, to take classes on subjects somewhat connected to what I'll do in a future career, to get a job full of incompetent idiots who get the same paper as me.

I'd appreciate some critiques on my thinking process




Actually, you're in a position to get more out of university than most of your peers. So let's say you're going for a CS degree, and you already know a lot of programming. Cool.

Ignore the intro programming classes and take higher-level courses. Treat prerequisites as suggestions, and don't be able to ask for permission (if needed) to skip courses or take grad courses. Grad-level cryptography, machine learning, PL theory, etc. can be great. Choose classes based on how good the professor is. Try to do some research work as soon as you can find a good professor. Working alongside upperclassmen and grad students is a great chance to learn and get tips from them. Chances are, you don't know as much about algorithms/unix/Lisp/HPC/graph-theory as you thought.

The fact that you can skip or breeze through some of the basic undergrad classes gives you flexibility to really explore new things. Hell, get that linguistics/history/art second degree you've always wanted. Go on backpacking trips or play intramural lacrosse or whatever. You should be the least concerned about the piece of paper at the end (but make sure you get it anyways).


This is good advice.

If CS intrigues you, sign up for the most advanced courses you can handle. Also, be sure not to shortchange yourself when it comes to a foundation. Lots of people can "write code" without a good understanding of datastructures and algorithms. Get as much there as you can, as it only pays dividends as you grow your software skills.

Another advantage of having a headstart is you can diversify your education. I'd recommend some electrical engineering / hardware classes to complement software; understanding memory access patterns, CPU caches, multiple cores, busses, interrupts, and basic circuits are all useful things to have in your back pocket.

Be curious! Be proactive! Reach out to professors you like or that other students rave about. Trust me, they are flattered when students take an interest in them and their work. Build those relationships as they can lead to:

- independent projects in a mentor/mentee capacity

- research opportunities

- internships

- teaching assistant opportunities (I got paid $15 / hour to assist students with assignments. I once did this for a class I was taking alongside them because the prof needed help and he trusted me and my skills.)

A relationship with a professor is such a good idea I'd say it's essential. You will one day need a letter of reference for something, and you want it to come from faculty who knows you, likes you, knows your interest, etc and can write glowingly and convincingly of your skills and personality. Too many people I knew hit up someone they took a class from and got an A in, and it was a superficial and shallow thing that didn't really get them that far.

I'll stop here, but feel free to message me for more if interested.


I've done hiring in the software space for a long time and I can virtually assure you if I saw your portfolio and your resume, even if your code was great, I would be very leery of hiring you. It will because I will assume you don't have the theoretical grounding that I want my employees to have. Having the paper doesn't assure me that you have it either, but not having it will make me think you don't.

You haven't mentioned any OS level programming you've done, or compilers, or graphics, or AI. No set or category theory, or complexity analysis or data structure analysis. These are all things that a basic CS graduate will have at least encountered (if their program is at all acceptable). It is entirely possible to learn these on your own but the more obvious way to learn them is to go where they teach them.

Further, you need to learn a big lesson that I learned at undergraduate. There are tons of people smarter than you. That isn't a bad thing, it's a good one. If you're the smartest person in the class (including the professor, TA's etc), get out of the class. Worst case scenario is that you realize that the early classes are too remedial for you and you get a professor to let you into the upper ones early. I and many of my friends did graduate level course work as undergraduates. If you can't be intellectually engaged at a major accredited university, you aren't trying.

That's not to say you can't be a good programmer without a degree. Some of the very best I know don't have a degree or not one in a computer field. But almost to a person, they feel the sting of that lack of intellectual grounding and wish they had done a degree in the subject.

All that said, the cost issue is a very real one. So working to mitigate your debt should also be a priority. I worked in the software field all the way through college. It's a field that allows for paid internships, and I even TA'd some classes as an undergraduate. Things are more expensive now than when I was in school so you will have to work harder at it than I did. Good Luck.


Six years ago, I felt similar to you coming out of high school. I had been programming for a long time, picking up whatever interested me. I was going to UCSD for Computer Science, and I already knew so much. There are a few points I'd like you to consider, though.

I didn't really know what to expect other than, "UCSD's CS program is ranked 6th in the nation." So I considered it an opportunity to learn even more, not just to prove what I already know. I looked forward to a fresh start in a new area, learning from people who obviously were very intelligent.

When I first took mandatory introductory classes, I thought, "This is so easy, I've been doing this forever." In high school though, few shared my interests at all. Here, I could make a study group and tutor others, and as some saying goes, "You can learn more by teaching."

When I finally got to upper-division classes, I saw yet another opportunity for growth. I knew what I wanted to focus on, but I also knew that I was smart enough to pick up something I was interested in without taking a class, if I put my mind to it. So I branched out, chose some classes that sounded interesting, even if they weren't directly related to my path. Machine vision, computer architecture, etc. Each one ended up teaching me new ways of looking at problems that I would never have considered if I hadn't taken that class.

University also provided me opportunities to branch out in another important area, social interaction. I joined the Ultimate Frisbee team, giving me a physical activity, new friends, and access to parties, things I never even tried in high school. I joined the student council (as the web designer) and gained insight into how bureaucracy worked.

My advice to you is this. Treat everything as an opportunity, perhaps a challenge to do something difficult, or something new, or something different. Working in the real world, I can say it would be much harder to find these opportunities with a full time job. University will prepare you for the real world in ways you would never expect, but only if you take an active role in that preparation.


Wow, thanks for all the thoughts! Really appreciate it when people who have already dealt with my problems can provide insight. I guess that's a perk of being young.

You're right, though. It's an opportunity, and my goal needs to be to make the most of it, even if it feels unnecessary from the outside.


I find it terribly concerning that I'm paying $50k to go to a school to learn something I already know, and know well, to take classes on subjects somewhat connected to what I'll do in a future career, to get a job full of incompetent idiots who get the same paper as me.

Then why are you doing it? No one is forced to go to college. Nothing is stopping you from doing anything else.

If you want a "job" and a "career" working for someone else, then you probably will need a degree — there just isn't any way around that. You don't want to do it, but that's just what you will have to do because that is what is expected by the majority of people doing the hiring. Of course, if that's what you want, you should probably just get used to it because having a job means that someone else will be deciding what you do long after you are out of college.

If you want to chart your own course and be in control of what you pursue — then go do something on your own. Start something.

I wouldn't go to college with this mindset: "to learn something I already know". If you do, you won't learn anything, because you've already predisposed yourself against it. Go with an open mind. Look for opportunities. Collaborate with others. Find the best and the brightest — those in your class that are on your level — those that are ABOVE your level ... and learn from them, work on things with them, and learn everything you can not only about code, but people.

And never stop learning outside of your official classes. Keep pouring yourself into the things you love. Become an expert.

“I have never let my schooling interfere with my education.” ~ Mark Twain


Can you find a school that costs less that $12K per year? (In California, the CSU system is about half that for residents, I think, although UC is pretty close to that)

When you go, be prepared to learn about more than computers. Learn to write and speak. Learn History and Philosophy. Lean Psychology and Biology. Learn Art and Music. Learn how other people outside of the sciences think. Take in the abstractions that come with the Math classes that will go with your C.S. studies.

I also knew I was going to do C.S. before I started my freshman year at CSU, having spent some time looking into it before hand, but there is a lot to explore while you are there. (my family couldn't afford a computer in the late 70s / early 80s, so I didn't learn any programming until senior year of high school. I did manage to learn about binary, BCD, fixed precision arithmetic, simple encryption, hex math and a few other things in our grade school and middle school libraries, though, as well as wiring and soldering electronics at home) Use that as an advantage to make sure your class selections are progressing towards your major and degree.

To the author's point, though, when I went to CSU starting in 1983, it was about $500 / year in fees, going up to about $1000/yr when I finished in '88 (yeah, it's been a while). Now, for my university bound daughter, I'm looking at about $7000/yr in fees for CSU. Choose how and where you spend your money wisely


I wouldn't be so critical about your peers, but that comes with your age. Also, you seem to be fairly good with words. Look at the next several years as an opportunity and attempt to extract as much value as you can (but do so in the most time efficient manner as possible.) Also, don't get to sucked in to the party scene, it's over-rated.


You're right, I was wrong to be so critical. I suppose my point comes from a percentage, perhaps small, perhaps large, of free riders in the industry. But that comes with every career.

My life plan as of right now is to go off to college as planned, but focus time on both schooling and working on my real world experiences. I'm still too young and naive; hopefully stress and general education can fix some of that.

About parties, though: I've never been the type. I don't have time for much leisure, and had to give up TV/games to focus on current school and hobbies. Partying doesn't sound overrated, just sad.


do yourself a favor and major in something with a lot of girls in it. learn what makes them tick. TRUST ME ON THIS ONE.

you will never, ever again be in the situation of having so many females vying for your attention. if you squander it, you will regret it.

teach yourself computer science and get a degree in something else like psychology or biology or something.


Eh, not necessarily. In the 30-35 age range, if you're looking for an actual serious relationship and not just a fling, you'll find there are a lot of girls who spent their 20s getting their careers in order and amassing life experience, and now find they want a husband but all the decent guys were taken in their mid-20s.

I'd say that the teens and 22-28 range are hardest for guys, and 28-35 and 65-80 are hardest for women, with college being about equal for both sexes. In your teens most girls cluster their attention on the hottest or most socially confident guys, and from 22-28 guys have to compete with older, more established males for girls that are still somewhat attracted to the trappings of success. But once they get to their late 20s, most people realize that a.) if they want to start a family of someone roughly the same age, they better do it soon b.) the superficial things that most people like in a partner - hotness, money, success, popularity - don't really matter much when you spend every day with them and really get to know them, and what does matter are things like kindness, character, emotional stability, etc. and c.) most of the people who realized this earlier dropped out of the dating pool and got married in their 20s. Women have a much stricter time horizon than guys do at this point, so guys tend to have the advantage in the dating pool.

I've heard dating past the mid-30s is weird, with a lot of divorcees and a lot of folks with baggage from past relationships. I see a lot of age-unbalanced couples in this range, with guys in their mid-40s coming off a failed marriage dating girls in their mid-20s, or single mothers having a string of not-too-serious boyfriends while juggling childcare and a job. Then once you get to 65, guys again have the advantage, because women tend to live longer and so there are a number of widows while very few widowers. I've heard that single guys in retirement communities get so much ass, but for some reason nobody wants to talk about that...


> you'll find there are a lot of girls who spent their 20s getting their careers in order and amassing life experience

yeah, in other words, they spent their best years on someone else (probably LOTS of someone elses), and now that they're hitting the limits of what their youth/sex appeal can get them, they want some guy with a paycheck who they can slowly mold into a schlub, only to divorce him later.

if you read your post carefully you say the exact same thing, just in 3 or 4 different ways.

if you want to land a good relationship you HAVE to expose yourself to women at an early age and actively work on attraction/improving yourself, or else you're going to be the fucking sucker who picks up the tab later on in life. the illusion of dating being "better" in your 30s is simply women with fewer and fewer choices settling for less favorable selections, which is a recipe for disaster.

the problem is so many guys, especially in IT, are completely CLUELESS to this dynamic and just go all-in the first time a reasonably pretty woman 'chooses' them.

if she wouldn't have dated/slept with the you in your 20s, you sure as HELL don't want to get involved with her when you're in your 30s.


If you actually are as good as you say you are, then don't go. Spend the time getting real work experience.


I second this. Take the first professional job you can get (and you can start freelancing and putting stuff on github to help you get that job), you can use that to bounce into a higher paying job after a year or two. Once you're inside the industry people won't bother looking at your piece of paper or lack thereof.

I spent 3 years at University doing a completely non software related degree, gave it up, was doing feelance web design, then luckily managed to get into a professional software developer position (for relatively low pay). After 16 months I moved into another job with a 40% pay increase and much better environment/conditions.

I've never looked back.


After reading some of the insightful comments above, I'd like to add that it would be good to round out your skill set beyond web development. Learn C, it will teach you great things. Learn Linux (and read the source code), you'll learn a lot about how complex systems work.

If you do go down the path of university, then make sure you stray outside what they teach. Challenge yourself, because that's how you improve, and you'll also differentiate yourself when someone is looking to hire you.


I consider myself pretty good; I honestly have no baseline, but I've spent several years working with PHP, HTML5, JavaScript, I've learned Node.js, and I've built several working prototype projects over my high school years. They're clean, follow standards, and have been great learning experiences for me (trial and error beats lectures, for me).

This being said, I have a bad feeling that my portfolio won't outweigh a degree. I don't know why degrees are valued more than actual knowledge, but that seems to be what the data shows.


> I've spent several years working with PHP, HTML5, JavaScript, I've learned Node.js

It sounds like you've learned something about one domain, using high level languages to accomplish similar tasks. There is an awful lot more to learn, trust me. Hopefully you will take courses on operating systems, data structures and algorithms, building a compiler, etc. Learning different paradigms like functional programming and logic programming will give you different perspectives on computing and make you a better programmer.

I teach computer science to undergraduates and students like yourself sometimes have problems to start with (hopefully this won't apply to you). This can be because they've picked up bad habits (PHP?) or because you breeze through the first year and get bored or get in the habit of thinking they know it all.

Anyway, computer science and software engineering are definitely subjects worth studying at university level. There are deep intellectual challenges involved in mastering the material and universities are the place to tackle them. If you just want to get a job (programmer as tradesman, like a plumber or whatever), do that instead. There are some situations in which the tradesman might have an advantage over the scientist, but if you're going to write a system for me I want to know that you understand complexity and so on and so on.


> I consider myself pretty good; I honestly have no baseline...

This is your only blocker to success. I also had a lack of self confidence -- I put this up to the pedestal we put university degrees upon.

By what you've done so far, it sounds like you are better than most 90% of people finishing with Computer Science degrees. There are employers who can see that -- but most recruiters do not (though they do latch on to buzzwords).

Demonstrate your passion and your skill and you'll easily get a job somewhere in the industry.


jaxbot, I was a hiring manager at a major Silicon Valley semiconductor company for many years before I retired.

Unfortunately, the CS degree really does open doors. If you're good, you can skip the degree. But you must be really good. Honestly, the best engineer I worked with in my whole career (and who was on my staff) was a high-school dropout. But he was incredibly great, and devoured books on languages and software engineering. He is the kind of guy that would have a relevant input about "Is Haskell or Lisp a better language?"

But not having a degree did limit his career. He always had work because everyone loved him and knew he was brilliant and humble. But doors that might have been open to him were closed. Every choice in life has a cost.

There really is some benefit to doing the degree. It will force you to dig into some areas that you might not have dug into manually. Algorithms, data structures, discrete math, linear algebra, calculus, compilers, languages, computer architecture, etc. You need all that stuff to be a great SW engineer.

My advise to you is to get the degree but treat it as your "day job." Then, do what you're really passionate about. Take grad level courses, or just do random stuff that you think is cool and put it in github.

I interviewed thousands of new college grads. About 75% of them absolutely suck. The guys who I made offers to were almost always guys who did stuff on their own. Right before I retired, the last guy I made a job offer to showed me an app he had written for his iphone that simulated how particles diffuse in a solvent, and his resume showed a link to the code that he wrote.

His GPA was only a 3.5. But I totally got him: he was great because he had a passion for digging into stuff, and not just for jumping through professors' hoops.

In general, the correlation I found between GPA and competence was this:

< 3.0, something is wrong, don't hire this guy 3.0 - 3.5, this guy isn't good at jumping through hoops, but he might be great if he has a passion for programming and has done lots of side work. 3.5 - 3.9, this is the sweet spot. Lots of great people in this category who did both great and school and also did stuff in their spare time. 3.9 - 4.0, oddly, the quality seemed to go down here a little bit. These are the people who spent all their Friday and Saturday nights studying instead of developing social skills, and didn't really do much besides strategize about how to jump through the professors' hoops and get an A in everything.

Obviously, I'm generalize and there are always exceptions. But if you interview thousands of candidates you see the trend.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: