Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Can we have this self-discovery process without the giant 6-figure bill?

As someone who went to college myself, I agree that it was a tremendous time for personal growth - it was also expensive as all hell, and I'm lucky I chose a field where paying it off is a piece of cake.

In any case, I think there's a false dichotomy here: there's the apprenticeship/trades camp, and the pro-college camp, but really the truth lies somewhere in between. The economy is moving towards knowledge-based jobs, but for the most part people studying for these jobs have completely abdicated their responsibility to seek apprenticeship and mentorship (in the non-regulated sense of those words).

A programmer with a CS degree and no internships, no open source, no working under experienced talent, is (nearly) worthless. An English major aspiring to write for magazines who has never published anything nor worked with a professional editor is (probably even more) worthless.

The problem here is that so many in the pro-college crowd see a degree as an end-run around having to bust your balls and apprentice with skilled professionals when apprenticeships (or internships if you want to call them that), regardless of college/no-college, is absolutely necessary.



Is this a CS-specific mindset? Because in other engineering fields, the expectation is that students will gain a strong scientific/mathematical grounding at university, but specific vocational skills, like say how to use Boeing's wind-tunnel simulation software, will be taught on the job, in training programs for new hires.


I don't think software is really different - there are certain companies with unrealistic expectations that want fresh grads to know the obscure libraries and APIs they rely on, but that's relatively uncommon.

e.g., I got hired into Amazon out of school, and they use a crapload of proprietary software internally I had to learn in a hurry. Software supports this model of operation as much as traditional engineering.

I've also interned in traditional engineering before - and the differences really aren't significant. Both software and traditional engineering fields highly value internship experience both as an indicator of competency and as a recruitment tool. IMO software simply does this on a much larger scale - e.g. literally hiring thousands of interns across a single summer.


Six figures?

You know all those taxes you (or your parents) pay to the state you are living in? Some of those are going to subsidize in-state colleges. If you want to go to an expensive private school or out-of-state because they are top notch, you'd better be top notch as well.

Like I've said elsewhere, if you aren't willing to pay the cost, maybe that degree or school isn't worth it.


>> The economy is moving towards knowledge-based jobs.

>> A programmer with a CS degree and no internships, no open source, no working under experienced talent, is (nearly) worthless. An English major aspiring to write for magazines who has never published anything nor worked with a professional editor is (probably even more) worthless.

Seems you contradict yourself when you claim there is a move towards knowledge based jobs, yet in the very next sentence, advocate that knowledge without experience is "nearly/even more than" worthless.

So are you implying that a person with a CS degree who probably did tons of programming exercises and at least 1-3 projects (i.e. requiring design, doc., etc.), who was taught by these "under experienced" PhD's who have studied the subject, wrote about it, and have done projects for 10+ years of their life produce something that is "nearly" worthless?

Holy cow, either the students priorities were very screwed up or there goes logic and rationality out the door.


I just graduated from a private school with a CS degree. Went there on a full boat with only subsidized Stafford loans to cover the cost of my room.

I am now getting into foss since I failed to get in on any of my internships / summer of code last summer, since my piece of paper is effectively worthless. I do have project experience (a course scheduler in C# for .net, a tower defense game in swing, wizard design for a seismometer program the school contracts) but employers don't care about that, especially the projects the school contracted on that I can't show the source to.

So yeah, I've been job hunting for ~4 months (some nice folks on HN even gave me some phone interviews, but it never got past that) and the lack of job experience drives away a vast 99% of employers. I have a good gigabyte and around a million lines or more of assignment and project code I could throw at them, they are just not interested :P


I just finished a Master's in CS and am facing the same problem. Just suck it up (hate that expression) and play the recruiter/interview test games. Memorize the basics of all areas of CS (stuff that you would normally look up in 30 seconds) and practice a little whiteboard coding and you'll be fine :)


I wouldn't say that is anything wrong with your education. It probably has more to do with unemployment, the economy, and outdated/ineffective hiring system. And the fact that people on HN think a formal education is worthless, and damn does that non-logic show.

Hint, if you go on to get a Masters, you'd be able to get into a government research lab with minimal hassle.


You're splitting hairs on semantics - the notion of a "knowledge economy" as we've been referring to it for, oh, 3 decades now, does not exclude the value of experience.

Knowledge economy doesn't imply that experience or skill is unnecessary, it is simply a catch-all term that suggests that low-skill, menial labor jobs are disappearing (and they are). The level of training required for any in-demand job, whether it's an electrician or an astrophysicist, is much, much higher than it historically has been.

> "So are you implying that a person with a CS degree who probably did tons of programming exercises and at least 1-3 projects (i.e. requiring design, doc., etc.), who was taught by these "under experienced" PhD's who have studied the subject, wrote about it, and have done projects for 10+ years of their life produce something that is "nearly" worthless?"

I don't like to yell, but here it is plainly: YES.

The kind of things they make you work in school, even in advanced degrees, is nothing like what private industry needs. Shit, the software engineering program at my alma mater spends a shitload of time on UML, as opposed to practical architectural skills that are actually useful in the real world.

Your school projects do not in any meaningful way approximate a real software project in the real world. Your design docs are held to a completely different standard than real design docs, and the process by which they are synthesized, iterated upon, and approved is also either completely absent in academia or heavily bastardized.

Likewise, programming exercises you see your typical CS or engineering program are incredibly simplistic compared to what you would run into the real-world once you're hacking on production systems at-scale. This is why open source experience is valuable, but class projects are not.

A CS student, sans external experience, is like a Call of Duty player joining the Army. Heart might be in the right place, but by God they are a long way from ready.

[edit]

On-topic but aside: consistently the second worst programmers I've ever interviewed in my life are PhD candidates or holders. They are almost universally clueless, able to rattle off all kinds of incredibly complex knowledge, but are absolutely clueless about real-world engineering issues, and generally poor at implementation. Scalability and usability are theoretical constructs to the bulk of them.

They can talk a lot of shop about algorithms, but to get them to implement their own algorithms (and do it well) is nigh impossible. Code quality is on the whole probably worse than fresh undergrads.

Off-topic and aside: the worst demographic I've ever had the pleasure of regularly interviewing are current/former employees of outsourcing consultancies (Accenture, InfoSys, and the ilk). I'm unsure what percentage of their programmer population actually know how to code, but I wouldn't be surprised if it's < 25%. I've interviewed multiple such candidates who couldn't put together a loop in a language of their choosing.


Yeah, never heard anything about a "knowledge economy". Must be made up.

> I don't like to yell, but here it is plainly: YES.

Really? I must have went to the wrong college then or you're interviewing the wrong people. Yes, there is a reason UML is used. Its used because its a standard. Its used because its unambiguous if you know it. Its used to identify relationships, areas of repeated code, state of objects in your code, and it can easily be used to generate code, if it is learned and used properly. I have yet to see any software development book or methodology that doesn't use some form of UML knowledge. Unless you code with no design.

> Your school projects do not in any meaningful way approximate a real software project in the real world. Your design docs are held to a completely different standard than real design docs, and the process by which they are synthesized, iterated upon, and approved is also either completely absent in academia or heavily bastardized.

Likewise, programming exercises you see your typical CS or engineering program are incredibly simplistic compared to what you would run into the real-world once you're hacking on production systems at-scale. This is why open source experience is valuable, but class projects are not.

Here is what I've done as part of my CS degree: - Wrote linked lists, binary search trees, graphs, stacks/queues, and most of the well know sorting and searching algorithms used everyday by programmers FROM SCRATCH. - Wrote my own linux shell, complete with scripting interpretation, variable substitution, I/O redirection, and most of the features you find a normal bash shell. - Wrote several built-in linux commands and other commands (i.e. tail, ps, pstree, etc.) from scratch using only the linux kernel and system calls. - Designed a new calendar system for my university using the agile development methodology with all documentation produced (i.e. SRS, UML documents, requirements etc.) - Wrote a lexer and compiler, with a partner, for a made up language. - Experience implementing RDMS in mySQL and constructed tables and views for it. - Wrote a SMS text messaging system using uC/OS-II using a motorola HCS12 microcontroller complete with ring tone, memory management, clock, and serial communication. - Designed and implemented a solar charging station with COTS parts and arduinos to measure charge voltage and current (meter essentially) - Designed and implemented an RC tank, controlled via Wifi with a webcam and some small autonomous functionality - In the process of designing, implementing, and documenting a airborne particle counting network that uses rs-485 as a backbone and a control program written in C#

If this isn't enough experience, then I must be living in a fantasy land. By the way, I've done no open source, but many of these projects (ones with arduino and linux) could qualify.

> They can talk a lot of shop about algorithms, but to get them to implement their own algorithms (and do it well) is nigh impossible. Code quality is on the whole probably worse than fresh undergrads.

Go figure, they know a lot about algorithms that the programmers probably just use API calls to do. Also, implementing complex algorithms in an interview isn't exactly easy or time conducive.

All I know is, I've seen some crap code from programmers (with no CS degrees) that were commercially certified in the language they were running in. I mean I'm talking extreme no-no's (i.e. magic numbers, lack of enum use, lack of comments, no early exiting loops, god objects etc.) stuff that I actually got marked down for in my college assignments.


> "Here is what I've done as part of my CS degree: - Wrote linked lists, binary search trees, graphs, stacks/queues, and most of the well know sorting and searching algorithms used everyday by programmers FROM SCRATCH"

None of which you will ever be called upon to do during your career. You are paid to judiciously use all of the above, not regurgitate the standard implementation. Which is not to say that your efforts are entirely wasted - there is value in deep understanding of the fundamentals, but it is an insufficient parameter for employment.

> "Wrote several built-in linux commands and other commands (i.e. tail, ps, pstree, etc.) from scratch using only the linux kernel and system calls."

See above. Rewriting shell commands is really, really, really far from, say, engineering a highly scalable e-commerce platform that can take literally millions of hits per minute.

The problems we work on in private industry is way harder, way bigger, and way more involved than reimplementing select, discrete pieces of Linux. We also do it in teams, so your lone gunman bit won't exactly work out.

This is the problem we run into when interviewing hardcore academics - so many John Wayne-types who have never worked at production-scale, who have never experienced the full breadth of building a product (as opposed to simply write working code), who trivialize the endeavor, and then find themselves overwhelmed. Computer science is only a tiny sliver of what a software engineer has to do in his day to day.

> "If this isn't enough experience, then I must be living in a fantasy land."

Welp, sorry to burst your bubble. It's insufficient. You could've spent all of that time interning for software companies and your odds will be much, much better. To be fair though, there are a lot of your peers who don't even have said projects under their belts, so you're far from scraping the bottom of your peers.

Experience, experience, experience, this is mantra we need to repeat at every new CS student. Code is only a tiny part of your day in the private sector, your mastery of the full scope of being a software engineer is far more important.

> "but many of these projects (ones with arduino and linux) could qualify."

Unless these projects were shipped to users (whether it's the public or a client), and unless these were done as part of a team, they really won't. The benefit of open source experience is less about the open source part, and more about having been exposed to how a real, product-shipping team operates.

Lone-wolf open source projects are, of course, of some value, since it serves as a reasonable work sample, but it does not eliminate the need for team software experience, which is the real benefit of joining an active open source project.

> "Go figure, they know a lot about algorithms that the programmers probably just use API calls to do."

They know a lot about the algorithms, but they have no fucking clue when it comes to implementing and applying this in a real-world context. And sadly, shipping product is what makes money, knowledge of algorithms is not an end, it is a means.

> " I mean I'm talking extreme no-no's (i.e. magic numbers, lack of enum use, lack of comments, no early exiting loops, god objects etc.) stuff that I actually got marked down for in my college assignments."

Here's the trick: these are minor problems in the grand scheme of things. Which is to say, you can fix a programmer that has bad style, but you cannot fix one that just doesn't know WTF is up. I will hire an excellent engineer with mediocre code style over a mediocre engineer with excellent style. One helps ship a product, the other will write perfect code that has trouble proving relevant IRL.


I laughed when you only pointed out two of the things I listed in what I accomplished for my CS degree and went on to say it was "insufficient" because we don't have budget and time schedules like companies do in order to actually do production scale work. Not only that, the point of doing those things isn't to ship it to the masses, its to create something useful and to sharpen your skills. Case in point, your professor and sometimes the university are your customers. They evaluate your work, give you suggestions, and help you identify things you did wrong or could do better on.

I also laughed at the assumptions you made about me somehow being a lone ranger and not doing group work... I guess I should ask if you've even went to or been in a college.

You seem to have incredibly high and almost unmeetable standards that would actually require a college grad. Yet, you seem so adamant that a degree isn't necessary which is illogical since you usually pick up software engineering experience, group work, and a solid understanding from graduates. Not only that, its a pretty good guarantee they will do well if the have decent grades. If you're telling me you are willing to pick programmers up off the street expecting them to know software engineering concepts like scalability, modeling, and being on a development schedule. Programmers who've got a couple of projects under their belt that probably involved no human contact and probably aren't even that good due to lack of formal training. And you are willing to train them to be up to par, then you must be living in a fantasy world or we have completely different concepts of what programmer and computer scientist/engineer are.

One last thing. If you think god objects, no early exiting of loops, and lack of enum use are "style" problems, then I can see why you are hiring the wrong people.


> "its to create something useful and to sharpen your skills."

And there's nothing wrong with that - what I am saying is that if your goal is gainful employment in the software sector, that is insufficient. Creating useful one-offs is a long, long way from consistently shipping - which is experience you can only get, as a student, via internships, active open source, or hell, entrepreneurship.

You are not going to get that no matter how many class assignments or projects you work on.

> "because we don't have budget and time schedules like companies do in order to actually do production scale work"

And therein lies the rub. Software-for-fun, without constraints, is really, really cool, and completely unlike software in the private sector. They are completely different beasts, and your everyday life as a software engineer is only fractionally writing code.

Think about it this way: you're an incredible sprinter, but you're looking to join a triathlon. No matter how good you get at sprinting, it is insufficient for success in the overall scheme of things. This is the line that separates a very good, but very green programmer from a guru-level senior.

> "I guess I should ask if you've even went to or been in a college."

Yes. And let me tell you, those 4-man projects they have you working on are nothing like working in a software shop. Hell, it's not even very much like working in a 4-man startup, where the bulk of your day becomes architectural, business, and product-focused.

I'll be impressed the day they can craft a CS curriculum that even remotely approximates the actual dynamics of professional software work.

> "You seem to have incredibly high and almost unmeetable standards that would actually require a college grad."

Note that I didn't say that you absolutely won't get a job without prior professional experience. You may, but your road is going to be unnecessarily difficult. For every one of "you" (i.e., someone with a great deal of self-hacking, and presumably did well in school, but lacks real professional experience) there are tens of thousands who went the other route. I've been through the fresh-grad hiring cycle several times now, and companies will go into bidding wars with each other for the graduates with prior internship experience.

Everyone else is just picking at the scraps - not particularly slim scraps mind you, but you are not treated like an A-player. This may be an unfair judgment, but such is the state of the industry. Hiring is an incredibly difficult task, and most means of judging skill are incredibly noise-heavy. An internship guarantees a company a known quantity for very little risk, and they will favor them heavily above all others.

> "Yet, you seem so adamant that a degree isn't necessary which is illogical since you usually pick up software engineering experience, group work, and a solid understanding from graduates."

Thankfully software engineering is not yet a regulated profession. You can ship product and code without going to school for it - and many people do. I've hired one or two, and worked with many more - they are pragmatic programmers who are well-rounded. They will be rough around the edges on the CS side, but that's something you can fix with experience and training.

A CS degree has a relatively low correlation with being a capable programmer. A lot lower than one would expect anyhow, especially since the vast majority of code being written in this industry do not delve into CS fundamentals very often.

> "If you're telling me you are willing to pick programmers up off the street expecting them to know software engineering concepts like scalability, modeling, and being on a development schedule."

Lots of people graduate from college (or don't go at all) knowing this. That's why we pay them the big bucks - this is the demographic that's being courted by all sides by multiple companies throwing $150K+ numbers into the air. Yes, for a fresh undergrad.

You know how, as a programmer, you leave school knowing this?

You ship product. You ship it a lot, either on your own, or you do it as part of internships with other companies, or you join active open source projects with strong leadership. You do not learn this from hacking on class projects or assignments.

> "Programmers who've got a couple of projects under their belt that probably involved no human contact and probably aren't even that good due to lack of formal training."

Formal training is the most overrated part of software engineering, really. Software is absolutely a trade, and is realistically not unlike plumbing or carpentry. Lots of hustle along with experience are much more valuable than academic knowledge. And who do you think has a more realistic experience with human contact in software: the guy who's shipped product as part of a team, or the guy who got assigned to a group assignment and hacked it out in a week?

> "And you are willing to train them to be up to par"

Oh yeah, we are. Because they are way further along than a green CS grad with no experience. They have experience shipping code, which is the hardest thing to learn, and encompasses a huge number of skills. The whole "not having super amazing CS knowledge" part is fixable, particularly if you have strong mentorship and guidance. Fixing a pure-academic is really hard, though it can also be done.

> "If you think god objects, no early exiting of loops, and lack of enum use are "style" problems, then I can see why you are hiring the wrong people"

And what percentage of CS graduates do you think will commit all of the above sins? Having a CS degree in no way promises that they won't make stupid, shitty decisions like that. Like I keep telling you: having a CS degree doesn't have as strong of a correlation with "being a competent programmer" than you imagine. I have seen all of the above and worse from CS grads. So why would I value "having a CS degree" over anything else? Why wouldn't I value real world experience that actually trains shitty habits like this out of people?


> Creating useful one-offs is a long, long way from consistently shipping.

Yes it is. There is a lot of software, consistently shipped, that is shit. And if you honestly think creating one off items is useless, please go down to your local universities research department and tell me why one off items like robots, exoskeletons, autonomous quad copters, that came straight out of the university from the work of students means nothing.

>Software-for-fun, without constraints, is really, really cool, and completely unlike software in the private sector.

Yeah, as if students have all the time in the world to produce software without anything like a budget, or schedule, or progress meetings. Yup, we all take one class a term. That's why it takes us 4-5 years to graduate.

> This is the line that separates a very good, but very green programmer from a guru-level senior.

So, you want senior level, but you're willing to start from scratch by pulling people who have no degrees. How can you have any guarantee of a formal knowledge base? Why the hell would you want to waste time fixing things like style and teaching people software engineering (which isn't only about shipping product that you are so gun-ho about)? You do know software engineering is in most computer science curriculum.

> They will be rough around the edges on the CS side, but that's something you can fix with experience and training.

Something you wouldn't have to do if you pulled college students, like me for example.

> You ship product. You ship it a lot, either on your own, or you do it as part of internships with other companies, or you join active open source projects with strong leadership. You do not learn this from hacking on class projects or assignments.

I fail to see how that makes getting a CS degree worthless. It says that either a lot of junk is put out, or you are in the parcel business. Shipping code is something for product managers and sales people if you're working for a company. The Internet if you aren't. If you think that's what separates the men from the boys, see points 1-3. I wonder why I don't see a lot of books on shipping code when I go on Amazon or to the local book store... I wonder why... I guess we can all just forget about good software if "shipping code" is the grand answer...

Yeah, I've done an internship with a company and guess what? There are people without CS degrees that are commercially certified in the languages they develop in and suck. The code they ship is buggy with hardly any input validation and doesn't work according to customer requirements. There are people that don't even know OOP concepts, or even basic design patterns. They don't produce any UML diagrams because they use their own ass backwards design notation and they don't have a consistent development methodology.

> Lots of hustle along with experience are much more valuable than academic knowledge.

Except with my academic knowledge I don't need to be hustled or have basic, remedial things fixed. I can also identify problems with existing systems and solve them competently. I don't need to be "taught" basic practices. I may need to be refreshed from time to time, but I know "what" I need refreshing on and "why".

> And what percentage of CS graduates do you think will commit all of the above sins?

A low percentage. I've committed some, but my professor caught them and I fixed them. I don't have to be told those habits are bad by my boss. I don't need to be told how to do things efficiently. But hey, if you want to spend time fixing problems that programmers are clueless on, go ahead. So I ask the same question, how many programmers do you think can identify such problems and fix them themselves?

> Why wouldn't I value real world experience that actually trains shitty habits like this out of people?

Because I don't need real world experience to train those shitty habits out of me.


You can easily go to college without a 6-figure bill. I finished two master's degrees and paid very little. All one has to do is leave their ego at the door and not go to the best school they can get into for their credentials. I scored high on the SAT and instead of going IVY-league I went to a lesser school for free. I scored high on the GMAT. Instead of going to HBS I went to a lesser school and finished a masters in CS and an MBA for a fraction of the price.




Consider applying for YC's Fall 2026 batch! Applications are open till July 27.

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

Search: