Hacker News new | ask | show | jobs
by twblalock 3596 days ago
Some of the best engineers I have worked with did not learn CS in college, or even in a boot camp. They learned on the job.

Some programmers want to believe that computer science is harder than it really is, because it inflates their egos. CS is not as difficult to learn as law, or medicine, or electrical engineering, or many other disciplines for which self-taught practitioners are exceedingly rare.

Furthermore, I've seen new hires with graduate degrees in CS fail interviews horribly, or get hired and produce horrible crap, while new self-taught hires have outperformed them significantly. A degree is no guarantee of any skill level, which is unfortunate.

4 comments

An abridged definition of engineering is "applying science to create technology". A software engineer applies computer science to create software based technologies. Under that definition you worked with programmers not engineers.

Then, true. You might have worked with programmers that seemed productive and learned on the job. But much of that learning happened at the expense of exposing the company and the customers to great risk.

For instance, if you are manipulating financial information, and you don't know what a floating point number is, you are eventually going to have a bad time. If you don't understand concurrency and parallelism, you might end up corrupting important data, if you are suffering networking issues and everything you know is HTTP at a high level... you are going to have a bad time. And the list goes on and on and on.

Friendly software development technologies were created to augment productivity, not to release people from the responsibility of knowing what is going on with them.

Now to your point, it is clear that not all computer science programs focus in producing highly-qualified software engineers. But that doesn't mean that you can simply skip the fundamentals.

Not all software requires the same degree of rigor in design and implementation. Software has bugs, but it sounds like you'd prefer if such software were never written in the first place. Regarding risk, it's as likely that the super-educated "engineer" drops unfiltered input directly into a SQL query as it is that Joe Programmer has the chance to corrupt data with a concurrency bug.
Bugs and defects will happen at the time of implementing functional and non-functional requirements no matter how strong your preparation and problem solving skills are. But they differ since assumptions would differ in nature.

Many people would work on a problem until it works (or stops being an obstacle). But it takes some preparation to understand if an implementation is acceptable from a non-functional requirement standpoint.

I never said anyone should skip the fundamentals. But you don't need to go to college to learn them.

Your nitpick on the difference between engineering and programming is ridiculous, and your definition of engineering is wrong.

In the information age, given the right questions, you might eventually get the right answers. But you need to be able to formulate the right questions first.

If you do not possess a strong problem solving approach, you might not be able to formulate those questions in the first place.

Then, corporate interest aside, there are definitions of software engineering that are very clear. Refer to the IEEE definition of software engineer for instance, it might be more aligned to mine than to the "I feel like an engineer today" idea you are trying to push.

I've been in the industry since 1999 with no CS degree, and there were no boot camps back then. I'll bypass the horn-tooting, but I've managed to do pretty well in my career :-)
Do you perceive that a CS degree could have helped you overcome challenges or mitigate risks through your career?

Have you resorted to trial an error on tasks that could have been solved by applying CS knowledge?

There have certainly been moments. However, I suspect the time and expense wouldn't have balanced out yet, and becomes more skewed the older and more experienced I get. (I was a full time developer 6 months before I would have graduated, had I done a CS degree in 4 years out of high school, so throw that income in the mix as well)

These days my role is focused on a breadth rather than depth of knowledge, my ability to learn new skills quickly, and an emphasis on solving business problems through technology. (The company I work for focuses on logistics problems core to most businesses, not Twitter-level concerns)

I agree with you but I don't think the comparison to other disciplines is fair.

It's incredibly easy to self study CS, by applying your theory, with a quick feedback cycle on 1 pc and the internet.

Something that is almost impossible in law or medicine.

On a meta level, "I've known great engineers who were self-taught and terrible engineers with CS degrees" is a recurring meme in these discussions that really adds no information to the thread - it's obvious, and it's almost a tautology.