Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Hello world: Shining a light onto the culture of computer programmers (arstechnica.com)
54 points by derangedHorse on April 10, 2019 | hide | past | favorite | 60 comments


Regardless of how accurate this portrait of programmer culture is, I must say that I welcome the attempt to create some positive PR.

Our fellow nerds, doctors and lawyers, somehow got star treatment by hollywood, while our kind is usually portrayed as unattractive, awkward, laughing stock and at best a passive character in an assisting role. This tragically reflects on our perception in the real world.


As perceived by the general public, there is a huge difference: Most people have some idea, however vague, what a doctor or a lawyer actually does, while 'programming a computer' is utterly obscure and opaque to a lot of those same people.

This keeps surprising me again and again, but apparently any kind of computing device is a black box built on magic, probably to the vast majority out there.


Very true. When I'm at social occasions and I get asked what I do for a living, the subject will be hurriedly dropped when I reply that I'm a software developer. It amuses me. As you say, the whole concept seems to be so far outside of most people's frame of reference, that they have literally nothing to say on the subject.

The lack of intellectual curiosity in the general populace is dismaying to me, but it was ever thus.


> the whole concept seems to be so far outside of most people's frame of reference

What? Are you living in the same world as me?

Pretty much every industry apart from manual labour or craftsmanship related work uses software. If you work in an office chances you spend most of your time using software.

Then people go home and play on their smartphones which connect to back-end API servers developed by software engineers or stream films of netflix, also developed by software engineers.


You completely missed my point. I wasn't suggesting that the average person doesn't utilise software on a day to day basis. I was agreeing with the author of the post above mine, who pointed out that to most people, "any kind of computing device is a black box built on magic". They have absolutely no idea how their devices work, and neither do they care to find out.


The author of the post above yours absolutely concur. Everybody uses software. Few have even a basic conception of how it works.


Not sure if that's true. Legal minutiae and latin diseases are at least as opaque to people as software code, the actual work likely less glamorous than programming.


Yeah I don't really see law or medicine as any different in this regard.

People all have a basic idea of what makes you ill, what various diseases, treatments etc. are. But most people don't understand the intricacies of the endocrine system.

People all have a basic understanding of the law, what kind of sentences to expect for what crimes, how court works etc. But most people don't understand <INSERT_COMPLICATED_ASPECT_OF_LAW>.

You see where I am going with this..

People all have a basic idea of how the internet works (you connect to the network and data is returned to your computer), the difference between 4G and Wi-fi etc. But most people won't be able to explain the difference between RSA cryptogrpahy and eliptic curve cryptography.


My original point (which you don't seem to disagree with): It's on Hollywood to fix the misrepresentation of IT workers asap and produce some heroic characters from our field.


There are people who quite like this outsider role.

Concerning the "Hollywood argument": if I think how Hollywood demands DRM in evermore standards and to infect your life, not being liked by Hollywood is one of the best advertisements for programming jobs that exist.


Conjecture here, and a pretty simple one: people like money, power, and status. Lawyers and doctors have tons of money, have power over you (you are alive, you are not in jail, all because of them), and have credentials because they need to pass hard tests. That's easy to like.

By contrast, understanding what some computer people even do is hard for the layman (no obvious power), and until pretty recently computers did not make you a lot of money. We also let pretty much any idiot with a computer write code, it is not a position of status.

Shows like Mr. Robot and Silicon Valley are already starting to show how perception is changing. Nerds still get made fun of, but you can't be laughing too much at filthy rich entrepreneurs or hackers who do whatever they want to drug dealers, the police, etc.


That picture made me cringe. Who sets a cup full of coffee right next to their laptop keyboard and phone?


I confess that I do this quite often, if there isn't enough room on the tiny coffee shop table to keep the drink and the laptop far away from each other. What else can you do?

At least the phone is water-resistant.


There's a lot of fantasy in this article. Most programmers today do very little actually - we don't wield major influence. We basically glue together a bunch of Free Open Source offerings. The most critical skill is that ability to move fast by practicing with our Free Open Source offering tools. We pay (MS, Google, or Amazon) to host our applications. And we perform maintenance on these applications for years. Nothing special, anyone can do it. More and more people enter the work force every years. Since all things are becoming automated there will be enough jobs for the foreseeable future. We get to wear nerd clothes and act smart but generally all one has to do is be able to read documentation and use a computer. I would reckon that the average 13 year old who has a good reading comprehension can do what most programmers do these days. It's like playing a video game. They would probably be better at it too.


What you describe does not look like the typical software developer job at all.

Certainly not anyone can write software. In fact, many who see themselves as "coders" are not very good at it themselves.

Edit:

I've found it's a bit similar to law in terms of skills and mindset. Some people struggle to follow the text of an actual law. Then, drafting an actual law is an even more specialised skill. In both software and law, if you draft badly you will face problems...


I sometimes think drafting laws badly is a feature not a bug - after all think of all that lucrative legal work for other lawyers.


Couldn't the same (IMO flawed) reasoning applied to the topic at hand? "Computers are made complicated on purpose - after all think of all the lucrative programming jobs"


Not in the case of laws :-(

I know of one infamous Pensions case that dragged on for well over a decade in the UK over some arcane legal arguments.

Of course the longer the case went on the more pensioners died


I have a friend who I consider to be tech savvy and very smart. He couldn't get "coding". Dropped the class and switched major (I know this is anecdotal). It's not for everyone [0]. I agree that it has gotten simpler, but it depends on what you're doing. Some developers "glue together a bunch of Free Open Source offerings" and some need to do a lot more than that.

[0]https://blog.codinghorror.com/so-you-dont-want-to-be-a-progr...


> Nothing special, anyone can do it.

That's what I'm thinking every day while I'm working and talking to other developers.

But when I try to teach, or help non-coders who decide to take up coding, I am amazed every time to find out that there's one skill that I don't even think about that seems unteachable: structural thinking.

I can teach a person how to get an input from a user. I can teach a person how to process that input. I can teach a person how to present output to the user. I have not been able to teach a person how to decompose a task "calculate effective property tax rate" (or something similar) into those steps.


I know good software engineers who believe in alternative medicines and doubt the efficacy of vaccines. I’ve met some that don’t even know the basics of how an OS or CPU works.

We’re not special as a group. We’re good at some stuff and also really bad at other stuff. Just like everyone else.


Your comment seems to be written as if it's a counterargument to something I said, but it doesn't contradict anything in my comment and I completely agree with your point.


Do you have some examples of places where you have seen this so I can avoid working there? It sounds incredibly boring.


Pick pretty much any front-end related position.

Half of my career has been spent on such things and ironically this was the better paid one.

Apparently doing interesting stuff comes with a pretty hard penalty in terms of compensation.


> Apparently doing interesting stuff comes with a pretty hard penalty in terms of compensation.

Yup, I'm trying to transition to web development strongly because of the much higher compensation and the ability to work remotely.

I admit developing nonlinear curve fitting frameworks, working with laser physics and doing biomedical algorithms engineering was much more fun and fulfilling. However, it's far more appealing to enjoy more time with my family, work from a peaceful location and never have to deal with traffic.

Though this transition to web development isn't at all helped by the fact that Javascript feels like it was a failed experiment in hell where it was probably deemed to be far too tortuous to be used as punishment; only god knows how Mr. Eich got his hands on it.

(I've professionally written code in Java, Python, Matlab, Fortran, C, Go and assembly and none of those languages come within two orders of magnitude of the disdain I have for Javascript)


You can do frontend webdev and have a lot of fun.

First of all, stop using plain JS and move to Typescript. That'll fix most of your issues with the language itself.

Second, for what's fulfilling, it depends on what you're actually working on. If you're going to just make dynamic menus for a wordpress blog then yeah, your life is gonna be boring. But nowadays "frontend" can mean writing entire apps. My latest site (https://overframe.gg/) is a SPA in React+Typescript and I had a lot of fun writing it. The nitty-gritty of reverse engineering games, simulating calculations, etc; all these are still there.


Its not the same as working at the real bleading edge though which is what the previous couple of posters meant.

I miss working on campus at CIT (Cranfield Uni) unfortunately the pay was abysmal - some realy cool work tough.


While this does sound cool in a sort of abstract way, it doesn't honestly compare to work that is genuinely at the vanguard of human understanding. That's what the person you are replying to was getting at if I'm not mistaken.


So I guess I'll just let GP be miserable in their choices then!

Take my post as advice on how to enjoy something that may not be your passion.


> So I guess I'll just let GP be miserable in their choices then!

Neither I nor GP have said that they were unilaterally miserable, so I'm not sure what you're talking about.


Nope.

Dont know how much experience you have of trying to hire developers, but the majority out there (even the ones with years of experience) don't pass the most basic of criteria for the job.

Our test for hiring is a simple app that can take a value, decrement a balance and show if the new balance is negative or not.

I've seen some of the tests that come in, 80%+ of the applicants fail to do this. A non-neglible amount will send in something that doesn't even compile.

Good developers are rare IME.

Another mate of mine that has to hire developers says he's lucky if 10% of the people who apply and get to the interview turn out they can actually write code.


Sometimes I think the same thing about what I do. Then I work with a junior and appreciate the difference that a decade+ of accumulated knowledge, instincts, and intuition makes. Yes, most of us don't gain ability the way a surgeon or aerospace engineer might, it's not that palpable, but don't undervalue yourself nevertheless. It takes a lot of work and dedication to get to "I can reliably and predictably snap stuff together like legos and make a functional system."


> Nothing special, anyone can do it.

They really can't. What you describe is beyond the vast majority of people. Not the vast majority of well educated people, perhaps, not the vast majority of STEM people, sure. But most folks? They'd take one look and run away from the insanely complex wizardry you seem to be practicing.

Also, as other posters have said - that's your experience, not everyone's. Someone has to write the automation tools. Someone has to write the libraries. Someone has to know how to write a compiler, to write crypto routines. Someone has to create AWS.

There are a lot of paint-by-numbers coding roles out there, sure, but it's far from the whole industry.


I think the problem is mixing terminologies:

• Programmer: glues together existing tools (your example)

• Software engineer/architect: builds/designs systems that can handle large loads efficiently; invents and applies techniques so the systems can become large while keeping them maintainable

• Computer scientists: invents and analyzes algorithms

That said, roles are usually mixed up as well, where a computer scientist in industry can easily spend 90% of their time programming.


I would say a true software engineer is someone that can design a system to meet a SLA, write documents which systematically show how it's measured and specced. Most software 'engineers' (including all but one of them with that title in my company) are just 'devs'.

My feeling is that a software architect is someone who can design something to try to meet an SLA but is too lazy (or too high level) to actually check it.


Most positions I've worked sit somewhere between 1 and 2, involving quite a bit of glue but a good chunk of design work as well. Had there been no design component (glue alone) the produced software probably would have been functional in the strictest sense but would also have been a slow buggy mess.


Not really a mixing of terminology considering that the scientists/engineers are only going to be a small proportion of the coding population.


As others have said, speak for yourself. Sure, there are plenty of "coders" who just bolt together stuff written by others, but somebody has to create the pieces and that takes at least a little bit of real creativity. The problem is that we don't distinguish between specialties and roles. In medicine the division is clear between various surgical and non-surgical specialties, or between physicians vs. assistants vs. nurses. In law nobody confuses contract and criminal law, or attorneys (sometimes even barristers vs. solicitors) and paralegals. But we don't do that. You're slightly right in that there are people who call themselves coders who don't really create code, but real coders aren't fantasy.


try teaching. then you would be amazed at the tiny proportion of students able to do that on their own.


Exactly. As someone who has been asked to teach an IT technician friend how to program, it's absolutely not a trivial task. You would think the problem solving skillset of a technician would help, but nope.


In real life there are still projects that are failing, that are going over time and budget. There are smart guys on those projects with masters in c.s. who are making completely boneheaded calls that will mean they aren't adding any value.

We can talk about how easy software is and it's just glueing a bunch of components together. But whole we do there are millions of devs that are flailing and failing to do that.


One issue I have seen is that when systems should be easy to make - you know, database, data wrangling, rest API - people tend to make it more challenging for themselves.

Case in point: exactly an application like what I just described, but because that was boring and basically the same application as already existed in terms of architecture, they made it a microservices application that was only supposed to communicate via events published on a central event bus. Which can be a good design pattern I guess, but they lacked an architect, formal specifications of said event bus events, and a too quick conclusion of "this needs to be in its own microservice". Tl;dr, after a year and a half they still had nothing to show for but a well put together powerpoint slide deck, and a lot of half-finished components that should in theory sorta work together.

That is, unchecked developers have a tendency to overcomplicate things for their own enjoyment / challenge. I don't know how to fix that, besides having a strong tech lead who is able to rein people in and ground them.


You could make a similar meaningless argument about electronic engineers. Most just solder together ICs, and the IC designers mostly glue together IP blocks. They pay utility companies to provide electricity.

To work at a lower level doesn't mean you're a more advanced engineer, in some ways it means the opposite; working at a higher level usually requires some understanding of what's below.


> working at a higher level usually requires some understanding of what's below.

Maybe what's immediately below. I fervently wish that "higher level" developers did have some slight clue about what happens when they make a call to lower layers, especially wrt storage since that's what I work on, but I've learned not to rely on them having any such knowledge.


Can you give a real world example of glueing "together a bunch of Free Open Source offerings"? I've heard the idea that thats all software engineers really do before but it doesn't seem realistic at all.


I strongly had that feeling when I was still doing Java + Spring; there's a huge ecosystem of well designed (or, at the time anyway) frameworks and libraries, which can all be easily hooked into each other via the Spring framework. The job of a developer was more data wrangling, designing models and relations, and defining the outward REST API. Things like creating database tables, converting to JSON, input validation etc are all handled by libraries, as a developer you mostly have to configure what models should be mapped to the database side, what to the front-end side, write some glue code to convert the one to the other, and write a bunch of documentation for the public API.

Not to disparage this work (my own work) too much, mind you; it's quite challenging to create a proper API, consistent, well-documented, etc.

I really appreciate e.g. a proper OpenAPI spec, because that means I can hit a button and have a front-end consumer library generated in Typescript, which in turn helps me more easily map a user's input (forms) with the expected input.

But yeah, it can get quite tedious / boring / unchallenging if you're not into data wrangling like that.


browsers + javascript + css (frontend opensource) ... to backend , many frameworks for each langauge, many languages all documented ... to persistence layer (mysql , postgres, mssql), and finally server but as OP said thats on amazon, Azure, Dreamhost ... etc

OP is discussing more so the practice of professional dev for 70 - 90% of the devs. Business guys want results , they dont care about scaling and so its about getting it out ASAP. Theres alot of politics, I was taken aback at first, with the idea of CS/software being very technical but it seems that this creates more of a differentiator for political manipulation, cause everyone is already skilled in analytics.

I could go into more detail but basically its all there and a search away (google). In fact there is a term in the industry called "google-fu" (like kung-fu) which means the number of searchers you need to perform to get an answer.

Its a double edge sword. All devs are on their own for learning, but all the info is out there, you just need to be willing to search and learn.

Sadly many people are not like that, and that seperates the good dev from the bad dev (besides the politics).

I assume its the same for being a surgeon, that all you have to do is study and learn the info and you can do it. But having a steady hand is very important. And sadly , if everyone had a steady hand , you'd still have the same amount of surgeons. Those who can do. You want to be a dev, open up the next tab and type into your tool bar "how to learn javascript". Realize that devs created this tool for you, and if you are not a dev its because you dont want to be. Its all there, the web is your oyster.


> browsers + javascript + css (frontend opensource) ... to backend , many frameworks for each langauge, many languages all documented ... to persistence layer (mysql , postgres, mssql), and finally server but as OP said thats on amazon, Azure, Dreamhost ... etc

All of that requires a significant amount of engineering and coding to get working. Just using a frontend framework does not give you a working application, you still have to code that application.


> to backend , many frameworks for each langauge,

As somebody who develops storage systems, I'll bet that what you consider "back end" is still multiple layers "front" of where I sit.

> server but as OP said thats on amazon

You do realize that Amazon employs thousands of coders to create that platform, right? And "borrows" code written by even more thousands, from firmware and kernels up to databases and similar? I'm sure they're still far outnumbered by the front end glue-writers, but there are still enough to create a culture worth writing about.


I think you are describing the work of a junior software engineer. Sure a junior engineer can do "google-fu" and glue together a working application but there is so much more to being a software engineer than that. Here is just a sample of the kinds of things a more seasoned engineer has to consider when developing an application. Note that none of it can be solved by simply googling and glueing in another open source piece of kit. It requires careful consideration and knowledge/experience that lets you make these decisions.

Frontend:

- Should I use a frontend framework with backend API for a single-page application? or use a standard web site with no distinction between frontend/backend.

- How will I handle mobile responsiveness of the html/css?

- How will I server css & js assets? Use a CDN or host them locally?

- Will I minify css & js?

Backend:

- What business requirements will I take into account when choosing a language/framework?

- Is speed and concurrency a must (perhaps choose Golang)? Or rapid prototyping and complex business logic (perhaps Ruby on Rails or Django)?

- Will I write a monolithic application or go for microservices?

- How important is security? Will my framework prevent vulnerabilities like XSS and SQL injection automatically?

- What web server should I use? What kind of scaling requirements do we have?

- How will we handle version control? What processes need to be put in place around deployment?

- How do we handle deployment?

Database:

- Relation SQL database or NoSQL?

- Are there any cases where I will want to de-normalise my data right away or should I wait

- How can I design my schema to be flexible yet still scalable?

- What columns need to be indexed?

Hosting:

- Use a cloud host? (AWS, Google, Azure...)

- Do we need dockerized deployments?

- Should we use kubernetes or a more managed solution?

- How important is vendor lock-in?

- How do we handle config secrets (like API keys)

- How do we handle changes in configuration (i.e. use Chef/Ansible/Terraform etc.)


"all documented" ROTFL what world do you live-in


Sure, a 13 year old could write a web ui and crud back end for a $20 IoT device. And you're correct, that's not that difficult. And while a lot of HNers live in the web world, not all of development has to do with the web. There are lots of development jobs that are much more difficult and take more skill. They don't pay FAANG money so they don't get the attention on HN, but they do exist.


I'm not going to tell you you're wrong (plenty of other people did that) but I'm wondering what experiences you've had that makes you believe the average 13 year old could pick any task and just "glue together" libraries to solve it?


You are assuming the eveyone has your /our skills here.


usually when something becomes so mechanical it is automated and the job is eliminated


Speak for yourself.

If what you are doing can be done by a 13 year old, that is your reality.

What I do requires years and years of experience/study, and 90% of the 20 year olds cannot do it, and that is being very conservative.

Of course you are talking about the average developer. But your average health personnel aren't doctors, they are nurses or assistants. And there is nothing wrong with that.


The building where I work has a rather large cubicle farm full of software engineers. Most of them are perfectly normal people. Men, women, black, white, Asian. We got all kinds. But there are a couple who are different.

- One guy I call "hoodie guy" wears a hoodie all the time. I live in Central GA where its 90-plus degrees and 90-plus humidity in the summer time. Hoodie Guy is still wearing the hoodie zipped up and hood up. Hoodie Guy doesn't talk to people.

- Got another guy who wears the same clothes all week. Asked him about it once; he said he bought 5 sets of the same clothes so he wouldn't have to choose in the morning. Like a uniform I guess.

- Got another guy who has a duplicate of the computer they work on at his house; this is not a PC. Its a purpose-built piece of mil-spec hardware that we put on airplanes to process data. We didn't give him one so he could code at home. He built it from doodads he picked up at surplus sales and trash heaps. Dude is hella smart.

But most of the people in cubicle hell are pretty normal.


I've been coding professionally for almost three decades, and the pursuit of elegant solutions makes up about 1% of my paid work. The rest of the time I'm fighting constraints: time, money, available resource, risk, all the usual. Very rarely does professional software engineering leave room for art, IMO.


A little over three decades here, and you're absolutely right. For every hour spent developing a cool algorithm, there are likely to be at least ten spent on low-level coding details, hooking it up to its inputs and outputs elsewhere in the code, writing tests, debugging other people's tests, integrating with build systems, debugging other people's build breakage, monitoring and alarms, addressing code review nit-picks, rebasing on top of whatever my coworkers jammed in while I was being diligent, documentation, etc. Any non-trivial project will also be interrupted by meetings, project-wide direction changes, on-call shifts, and so on. If I get one uninterrupted morning/afternoon of working on "elegant solutions" in a month, that's a good month.


It depends on situations: Your location, your health, age, family, finance,...

If you mostly work on a team, then it's enough to NOT create art.

In my case, i MUST create art, to abstract most of boring stuffs, because of the situation.

That means, i want to spend the least brain work in software engineering as possible with the help of art.




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

Search: