Hello world: Shining a light onto the culture of computer programmers
arstechnica.com
arstechnica.com
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.
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.
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.
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.
The lack of intellectual curiosity in the general populace is dismaying to me, but it was ever thus.
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.
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.
At least the phone is water-resistant.
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 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
[0]https://blog.codinghorror.com/so-you-dont-want-to-be-a-progr...
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.
We’re not special as a group. We’re good at some stuff and also really bad at other stuff. Just like everyone else.
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.
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.
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.
• 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.
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.
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.
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)
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.
I miss working on campus at CIT (Cranfield Uni) unfortunately the pay was abysmal - some realy cool work tough.
Take my post as advice on how to enjoy something that may not be your passion.
Neither I nor GP have said that they were unilaterally miserable, so I'm not sure what you're talking about.
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.
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.
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.)
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.
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.
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.
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.
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.
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.
- 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.
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.