Hacker News new | ask | show | jobs
by 0xbadcafebee 1029 days ago
> How much of this is impostor syndrome and how much reality? How different are other fields really? I also feel any new programming task as something foreign, for which I am not ready, basically undoable from my position. But at the same time consider myself able to get into anything and everything, and of fixing and building whatever that can be done. I cannot figure out any straight explanation for such senseless duality, nor feel I adopt the same position for anything else in life.

I believe this is a side-effect of the "creative" aspect of computer programming. Creative jobs tend to have impostor syndrome, because there is no piece of paper that you receive that says "this person is 100% certified to be a song writer" or whatever that creative job is. Since software engineering also has no paper certificate, apprenticeship, mastership, etc, there is no proof that you know what you are doing, and it's all a little too loosey-goosey "figure it out for that one job". There's no certainty that you're doing it right.

A Computer Science degree is about as much evidence of you knowing what you're doing as a warranty on a hammer and chisel is evidence that you know how to cut wood joints. Software engineering is a trade, completely distinct from Computer Science. That's why so many people in the industry don't need a degree. You learn the trade on the job.

It's just bizarre that we don't have apprenticeships or trade organizations to ratify someone as a Real Programmer(TM). I can hire someone with 3 years experience working as a programmer and they'll turn out to be almost incompetent. That shouldn't be possible, especially for a job that pays $140,000. But I guess it happens with construction contractors too, so maybe it's not surprising?

6 comments

I did a two year technical program, it was called "Information Systems and Data Processing"; this was maybe two or three years before this book was published ('94-'96 maybe?). It wasn't an apprentice program but all of the people teaching the programming classes had worked with the language professionally. It made a big impression on me at the time, I think it prepared me (somewhat) for the big empty spaces that you don't really notice until you start working on a project.

It's clearly no replacement for a computer science degree, but I think there's a real benefit to spending time with people who have done the work professionally.

I think the creative and craft element is some of this (maybe most), but it's also often the case that software engineers are producing code for business domains that they are also not experts in. Most code is for business, and most programmers are not trained or experts in those business domains.
It isn't just the lack of a piece of paper, it's the fact every project is new to some extent (to exactly the extent we can't just reuse existing code) and present somewhat new challenges. Also, some difficulties scale very nonlinearly, with single changes turning the challenge from needing a few extra weeks to solve to being effectively insoluble in any reasonable timeframe, if ever. ("Check this program to see if our code standards are being followed" to "Check to see if this program will halt" can sound equivalent to a manager, but woe betide the person who tries on the second one.)
Has anyone ever written a piece of code that's really so difficult for a human to read and figure out whether it halts? Obviously it's not hard to imagine theoretical examples of a program so large nobody could figure it out within a human lifetime, but I'm not entirely convinced for real programs written by humans that checking for haltability is likely to be harder than checking for following coding standards (unless your coding standards consist purely of such narrowly and explicitly defined rules that it's 100% automatable). Just because a single algorithm that works for all possible programs can't exist doesn't mean that it's necessarily difficult for any (or even most) actual programs humans might write.
> Has anyone ever written a piece of code that's really so difficult for a human to read and figure out whether it halts?

Any interpreter for a Turing-complete language is an example.

I guess I wasn't assuming you needed to determine if it would halt for any possible (but finite) input. But fair enough.
That may depend a little on the CS degree you do/have done! Showing my age, but a CS degree at Edinburgh University in the 1980's set me up for a good career... No idea what is currently taught. That said, recently terminated a contract early as the person was taking days to do simple tasks, whereas another person was showing gumption and being productive in less timeframe, and seemingly with less of a programming background.
Oh and I learnt a lot from initial working for a software house as my first job (Logica as it happens). But I did have a base to build on. Some of the lecturers in CS dept in my era had degrees in psychology or classics...
I assume tech moves on so fast that you have to rewrite the course every year. But you do have some certifications which go some of the way, for example the sun certifications for Java.. At least you know the holder will have an idea how it fits together under the hood...
Tech moves but often in circles and not in a cumulative way. What I mean is that if you know the basic enduring time-tested principles of algorithms, data structures, tradeoffs, principles like caching, compilers, a bedrock stable programming language or two, you know the concepts of Unix as of 20 years ago, then you are well equipped to be dropped into 2023 or 2026 and get yourself into the context over a few weeks and learn the specifics on the job.

It's not like the framework churn is so important to remember. You can skip a lot of what happened between 10 and 5 years ago. So two things matter: the long term basics and the very recent specific permutations of it.

Amen!
You definitely can find crappy construction contractors out there. People simply have a greater difficulty to judge their quality of work because who knows about construction as long as the house is not falling?