Hacker News new | ask | show | jobs
by throwawasiudy 3459 days ago
Most, not all, but most of the good developers I've known learned to code when they were teens. CS skills have been discounted endlessly compared to other engineering professions solely because it doesn't cost anything to learn. Other forms of engineering cost a lot of money to learn beyond the knowledge required for the job.

That doesn't mean software dev is any easier. And, it's great that CS has such a low barrier to entry, and hopefully open source keeps it that way. Unfortunately the same trait makes it sound like "something anyone could do". Anyone hiring in the industry knows this is not the case.

The same trait results in 80% of those calling themselves "developers" being radically incompetent. It's one thing if you're electrical engineer that works daily in Cadence doing LVS and DRC, your license alone could cost 100k a year. Contrast that with someone who's git cloned react-starter and setup a website on AWS. The barrier to entry is so low for comp sci that credentials and accomplishments mean little, and interviews are absolutely brutal as a result.

So we get to where we are now. Interviews mean everything because degrees, references, and personal accomplishments mean so little in CS. The interview is your gateway rather than a solid degree program for other engineers.

How do we fix it? Making programming less accessible is obviously not the right way. We need a solid accreditation program like longer established professions have. CS is very new relatively (the first programmers are largely still alive, which is astounding). God help you if you go to an unaccredited electrical or mechanical engineering program, but the large majority of CS programs aren't accredited at all. Employers need to know which schools are good beyond the top 20 so they can hire effectively, and engineers need to know the same to decide which program they want to attend.

It's going to be a vicious cycle until that happens. Endless "CS programs" that don't teach you anything. Borderline scam bootcamps (some are good, but who?). Shaky employers grilling the hell out of anyone that comes through the doors. It's going to suck for everyone in the space until we have some formal definition of someone thats been properly trained. Take the bar exam for instance; In most states you can take it without any schooling, but only those truly knowledgeable will pass.

Someone that passed the bar? A lawyer. Passed your boards? A doctor. Passed CS degree program at school X? Who knows.

3 comments

The unfortunate thing about what you are saying is that a CS bar exam, or certificate, wouldn't "prove" that you have any worthwhile skills.

CS degrees are math degrees. They don't address the needs of the millions of Web Dev jobs out there.

I am not a computer scientist. I am a web developer and proud.

And any web developer accreditation program needs to address the needs of web development and NOT address the needs of computer science.

Understanding the computer science underpinnings are fairly useful. For instance, what if you are unhappy with the rendering speed of React? Rather than faff about complaining about it, you can just pull out your textbook, re-read that chapter on graph algorithms and you too can implement your own virtual DOM that calculates the least set of changes to apply to the directed graph that is the browser DOM.

That's how we end up with projects like Preact, Inferno, etc.

Now does that mean you need to read the latest papers, and be a proper computer scientist? Nope. I find that reading papers from the 70s and 80s will take you pretty far. Just rip and reapply to new circumstances.

I am a web developer.

A lot of code that I write is 'good', but its hardly clever or original---it's a simple reapplication of old practiced done 100 times in desktop GUI applications, now applied to the web.

I found that a lot of old-school GUI developers never really crossed over to the web, so a lot of that knowledge has been lost to the community at large. You can still find it in text books though :)

I have a graduate degree in CS. I'm well versed in most aspects of the field. I pride myself on writing clean, efficient code, and architecting correctly. I also have a learning disability (dyscalculia) which makes certain things difficult (discrete math, calculus, etc...).

The fact that CS is based on mathematic principles does not make it a math degree (although that did make things challenging for me at times).

> The fact that CS is based on mathematic principles does not make it a math degree (although that did make things challenging for me at times).

But in order for it to be a useful degree you need to have math as supporting subject. This is the same as if you want to be molecular biologist you need to know a few semesters worth of chemistry otherwise you'd be given endless hard time, which you seem to understand.

I studied math at uni but because I haven't studied enough it always is so much harder to grok all important things in programming and CS. I would argue that it is a huge roadblock for anyone wanting to become any good at CS, but then again there's programming and there's 'programming'.

"But in order for it to be a useful degree you need to have math as supporting subject."

My university allowed me to make a custom degree that did not include calculus and didn't take my discrete math grade into account. I'm not what you would call "well-versed" in anything math related. I understand the theory for a few things I've looked into but that's as far as it goes.

In all of my career (~10 years) I've never once found myself at a disadvantage because of it, and it's never held me back from doing or understanding something.

I'm sure there are some areas of the field I'll have difficulty with (low level graphics, etc..), but even then I find that with enough hard work and an alternative approach to understanding the problem I can get things done.

it's a big field, but so is electrical/mechanical/structural/civil engineering.

I think they'res enough basic skills in common with different flavors of development that there could be a common set of core skills and concentrations or special accreditation for the unusual stuff

A useful accreditation program would be nearly impossible to create. The most important qualities (IMHO) in a developer are adaptability, collaboration, and creative problem solving, not technical prowess. That's why interviews are so rigorous— it's largely subjective whether an interviewer thinks a candidate will be a good fit.
Canada is actually the closest to having an "accreditation" for Computer Engineering if I remember correctly. I have never interviewed in Canada so I cannot tell if your school/degree matters that much, but not everybody can consider themselves software/computer engineer if they don't have the degree going with it. Once again, I don't know how this is in practice.
In Canada, representing yourself as an "Engineer" is like representing yourself as a "Doctor". There's a professional organization that gets to say who is and is not a member. That includes "software engineer" (it does not include train engineers, btw). There are, I think, a number of legal privileges and responsibilities that come with that. I dunno, I'm not an engineer.

This has almost nothing to do with "software engineering" in practice, except that in Canada we generally call the people who write software "developers" (or "coders" or "programmers"). If a given company calls their developers "engineers", it's code for "we're an American company (and we don't respect the law (until APEG sues us))".

Do you mean basically this: https://en.wikipedia.org/wiki/Master_of_Science_in_Engineeri... ?

Canada is not on the list so that's why I'm asking.

I do not. That article, which is remarkably poorly written, has very little to do with what I'm talking about. I don't know how to concisely be a lot clearer than what I said.

Look, in Canada, as in the U.S., and to the best of my knowledge in most jurisdictions, there is a concept of professional accreditation. There are "professional organizations" that have memberships, and obviously the ruling on who is and is not a member is determined by the organization, which is all pretty normal. What's interesting is that national law enshrines certain branding around that organization. For example, in most countries, calling yourself a "doctor", without any justification, is a crime. In particular, representing yourself as a medical doctor, in a way which might mislead lay people, is "practicing without a license". In Canada, representing yourself as an "engineer" has similar rules around it. Compare with e.g. the UK situation, in which the word "engineer" itself is not legally protected, but if you call yourself a "Chartered Engineer" without the permission of Engineering Council UK, that's a crime.

To learn about the education process of an engineer, perhaps read https://en.wikipedia.org/wiki/Regulation_and_licensure_in_en... , a much more useful article than what you linked.

Almost completely unrelatedly, most academic disciplines that have related professional programs, such as medicine or law, have more than one stream of post-graduation education. One stream is intended to be primary or supplementary education for working practitioners in the field, the other for academic study in the field. For example a LL.B. (a.k.a. a J.D., as title inflation is commonplace) is typically taken after some kind of bachelor's degree, but is really more like a second bachelor's degree than it is like an M.A. or M.Sc. or Ph.D. or any other academic master's degree. If you want to do such an academic track, you might take a B.A., then an LL.B./J.D., then perhaps an LL.M. or LL.D. or Ph.D. in law. That's one bachelor's degree, one professional degree, and two academic graduate degrees.

Back to Engineering, one might take a B.Sc. (or B.Ap.Sc. or whatever) in Engineering, perhaps certify to become a professional engineer, and then one might choose to take additional formal education. If one is professionally-oriented, some schools might offer a professionally-oriented Master's degree for you. That is different from an academically-oriented Master's, and each school that offers both will have some way of disambiguating them, which is probably not fully standardized from school to school, even within Canada (or any other jurisdiction). Perhaps call one a Master's of Engineering, and the other a Master's of Science in Engineering, whatever. That's what your article was alluding to. As for its list, it only (non-exhaustively) lists countries with equivalent degrees by other names.

All of this stuff about graduate degrees is irrelevant to jrm2k6's comment and my reply thereto. jrm2k6 was mentioning that regulation about the word "engineerig" is stricter in Canada, and my reply was that that's mostly not relevant to the practice of those who write software.