20 ms·
One (semi-pedantic) quibble with the article: there absolutely are barriers to entry for programming. Programming is hard! These barriers may not be artificial,
by foamflower 9y ago
One (semi-pedantic) quibble with the article: there absolutely are barriers to entry for programming. Programming is hard! These barriers may not be artificial, but they are real.
To use a non-software example, there are barriers to entry to chip manufacturers and power companies even under anarchy. Fabs are tremendously hard to build. Power plants are extremely hard to build. Building up knowledge and skills about computers is also very hard, especially when our genes don't seem to guide us toward thinking highly logically.
And programming is hard because it requires us to understand a bunch of modular systems and then the systems they're built on, all the way down, and in some cases, all the way up. Then, we have to understand the whole integrated system of the individual modules. Not all programming problems require this level of difficulty, but these problems do exist. I've been on teams where I'm the only one who understands what the OS is doing or the CPU is doing or what the network is doing or why some other distributed component might have stopped working. Most of my teammates in these cases seemed to enjoy programming, but didn't care to become overall experts in computers as a whole.
I once had a top-tier business school grad friend claim that programming really isn't that hard and that we're all whiners. He is a genuinely smart person. Today, he himself is trying to code in JavaScript on the client side. He's a friend so I help him, but the problems he has are junior-level or even entry-level. Suffice it to say, I haven't heard much more about how programmers are "whiners" when we say programming is hard.
- Clubber 9y agoNot only is it hard, but the landscape changes frequently. You wouldn't design a system like you designed it pre-mobile, and you wouldn't design a system pre-mobile like you designed it pre-internet, and those are just the big shifts. Cloud is another big shift. A lot of people read how so and so design a system. So and so is successful, so I will design my systems that way. That's rarely ideal. Also, designs can change company to company, depending on what the company structure is, who they serve, etc. Designs can change when a company changes, so hopefully your software can change with it. Sometimes you inherit a bad system, so how do you fix it while keeping your releases in stride. That's not easy, especially when then original designers aren't there anymore. Speaking of which, what's the best release stride for this company? You might have to adjust design for that too. Was this weird code done on purpose, is it a bug, or were they trying to hack around a mistake somewhere else? Time to roll the dice, because you need to change it. How do you minimize the collateral damage if you are wrong? You also need to consider your limitations like network and persistence storage. That's a huge part that many haven't even considered yet. How are networks designed today? How is data persistence designed today? What are my options and what are my limitations with this company? What type of reports does this company need? That's a big one. How about failover, what does your system do when the network or database quits? Do you lose any data? Are you sure? How important is it to not lose data? It's not that bad if Facebook loses a post, but it sure is bad if a bank loses half of a transaction. Programming has a lot of levels that we don't even realize until we hit a new one. Turning good specs into working code is level 1. It takes a hell of a lot of brainpower and abstract thinking to just do that.
- aaavl2821 9y agoI think there are two interesting correlaries: 1) programming seems to be one of the only "hard" professions that pays well (compared to math researchers, hard science researchers, or even things like some social work -- that's really hard in entirely different ways). Of course I'm probably missing some hard stuff that pays well 2) programming seems to be the "hardest" of the high paying jobs mentioned. Once you get them, banking, consulting and law jobs actually have a lot of mindless or not super challenging work
- TheCoelacanth 9y agoProgramming is one of the few "hard" jobs that is demanded in very large quantities. There are roughly 1.6 million people working as programmers in the US[1]. That is approximately as many as all engineering professions combined (the largest individual engineering profession is mechanical with 285k). It is roughly 50% more than all life, physical and social sciences combined. [1] https://www.bls.gov/oes/current/oes_nat.htm#17-0000 https://www.bls.gov/oes/current/oes_nat.htm#17-0000
- fuggedaboudit 9y agoI guess the grass is always greener. I'm a lawyer who lurks here occasionally. Most legal jobs involve 60+ hours of work, being on call 24/7, and there is pretty much no legal equivalent of a 10Xer because almost all work is billed by the hour. There is no way to make a contract that's 10x as valuable as your competitor's, and certainly no legal equivalent of scaling to the degree of Google or Facebook. Law is incredibly challenging work - I know more than one lawyer who complains that they should have went into programming to work 9-5 at Google between free massages and endless burritos or whatever other perks you guys have. It's certainly not work you can casually do while watching youtube - especially considered there's such a thing as legal malpractice a.k.a. get something less than perfect and you could personally be on the hook for your license. Also, it seems like career longevity in software engineering is a lot higher than in law - most lawyers for the top firms (the Google/Facebook equivalents in pay) wash out by the 4th year and practically all do by the 8th. I always wondered if I made a mistake picking law over software engineering. I don't have any strong passions and I was good at reading/writing so I went into law, but have been kicking myself for missing out on stock options and equivalent pay for a laid back lifestyle. Glad to see there are programmers who think lawyers have it easy.
- rossdavidh 9y agoIn Electrical Engineering, which the article often mentions as a counterexample, the 10-year veteran is not nearly as likely to drop out of the profession. Programming has a constant bleed-out of people who learning how to program, became veterans, and then were dismayed to discover that they were going to have to do it all over again, because the libraries, frameworks, languages, etc. were different. Some just do it, but some move into management or out of the field entirely. This happens in engineering as well, but not nearly as often, and it means there is a more nearly constant shortage, I think.
- tclancy 9y agoI always wonder if some of the veteran drop-out in programming is that improvement (in my lone experience anyway) is couple with/ consists of realizing what else could go wrong. Every step up the ladder of experience affords a better view of how things can fail and that can be hard to deal with. I feel like I keep getting slower as I get older but not simply because of age; some of it is the motivation to sit down and write something that is probably going to come back and bite me in the ass (possibly through no fault of my own) later on down the line. A lifetime of programming means a whole horde of problems to think about at night.
- q845712 9y agoI was just trying to point this out! Though in a more pedagogic setting: I have a very smart coworker who's been out of school for ~1.5 years. He works quickly and tends to create bugs he has to fix later. I got him to contrast his style against our coworker in his 50s who is slower to merge, but the rarely has to fix a bug!
- geodel 9y agoYou are right. Now thinking about that It seems to me generic Software world seems more comparable to interior designing or fancy restaurants where patrons keep spending because tastes change faster than requirements.
- mattferderer 9y agoIn my experience, while there is a new library/framework/language every day, most of them aren't introducing brand new concepts that the developer has to worry about. A lot of the patterns they implement are also common in other language/frameworks. Nothing against React, but every other day someone posts a new concept that is very similar to a pattern that has existed for years. Edit: I should note, on the last sentence, this may be done by a veteran developer who knows better but is trying to introduce the concept in a new light. It could also just be a developer figuring out a common pattern on their own. I've heard the actor model pattern was developed by several different people at the same time who were unaware of each others work. I'm not saying it's a bad thing.
- namelost 9y agoIf you want to know just how hard programming is, try teaching it to someone. Programmers have to remember a vast amount of domain knowledge. Consider the basic task of choosing where you are going to store some data, well first you need to know which options exist and there's dozens of them (do you want Postgres, SQLite, Redis, LevelDB, ..?). Then you need to know the strengths and weaknesses of each. And I hope you have been keeping your knowledge up-to-date because the answer in 2018 is very different to the answer in 2008. The lack of barriers to entry actually makes it harder. There are "law schools" and "med schools" to teach you all the knowledge required to become a lawyer or a doctor. There is no "programming school", every programmer is self-taught. A computer science degree hardly scratches the surface. While there are specialisms, such as game development or embedded development, most programmers are expected to be generalists. You may find yourself needing to write networking code, and there's a whole bunch of knowledge that goes along with that. Or, many programmers end up having a working knowledge of cryptography. Sure, almost anybody can learn JavaScript or Python, and write code, but learning a programming language is only 1% of the job.
- fuggedaboudit 9y agoI have an issue with that: law school and medical school certainly do not teach you how to practice law or medicine. Computer science sounds akin to both: you get theoretical underpinnings (many of which are outdated or will be unneeded for your specialty) but all your actual learning is on the job.
- zebraflask 9y agoAgreed. I've done both law and programming. Law school categorically does not even try to teach aspiring lawyers how to practice. The classic curriculum is designed to teach you how to "think like a lawyer." There are exceptions here and there, but if you want practical skills, you have to deliberately look for the handful of seminars and clinics that teach them. Between learning to program and learning to practice law, once you get past your chosen programming language's syntax and a few core CS concepts - learning to program is much easier.
- mncolinlee 9y agoThis is absolutely true. I've claimed for years that programming is easy and it's not hard to teach to children, but I started when I was six. For older people, the field is hard to break into due to a cognitive barrier I've seen. "I don't know how to program and computers are mysterious-- therefore I don't know how to learn how to program." The biggest impediment to much larger participation in the top tiers of software engineering is imposter syndrome and the elitism of the industry when faced with a trainable candidate. Every startup aims to hire someone who can "hit the ground running" and who doesn't need an assist from anyone. Also, the largest tech companies have chosen to use LeetCode-like problems almost solely to assess candidates, which are unlike most tasks done on the job most days. These tend to select for people who trained specifically for the interview and for coding competitions, such as ACM.
- foamflower 9y agoI think we're kindred spirits in a way. I don't find programming terribly vexing, either (I started when I was 12), but trying to teach others has given me more appreciation for how difficult it is to grok something so rigidly logical. That said, I have no patience for the "smartest boy" syndrome or the, as you say, "LeetCode-like problems" given in interviews. I suspect that these interviews do "work" in the sense that they successfully filter those who know what they're doing (albeit rejecting numerous ones who do as well), but they run the risk of encouraging elitism, rockstars and "smartest boy" cultures. (I also think programmers are uniquely bad a hiring because when we can't reduce a problem to something solvable by an algorithm, we tend to try to find the cheapest heuristic.)
- mncolinlee 9y agoWhen I taught AP CS, I got around that rigidly logical issue by performing a very simple exercise on the first day of class to build an appreciation for algorithms. The students were asked to write out instructions to build a paper airplane. One by one, I would follow their directions as loosely as possible and build lopsided airplanes. The lesson did a reasonably good job of explaining how computers handled algorithms and code.
- 9y ago
- digikata 9y agoThere is one point where the article asks why programmers seem to get compensated well compared to other professions. > The second most common comment that I hear is that, of course programmers are well paid, software companies are worth so much, which makes it inevitable. But there’s nothing inevitable about workers actually being well compensated because a company is profitable. If we look at this list of the most profitable companies per employee, we see companies that pay well, like Alphabet (Google) and Facebook, but we also see hardware companies like Qualcomm, Cisco, TSMC (and arguably ARM now that they’ve been acquired by SoftBank) that don’t even pay as well software companies that don’t turn a profit, and that the compensation between the software companies that are listed isn’t very strongly related to their profit per employee. The relevant barriers to entry perhaps aren't to programming-the-skill, but programming-the-business-activity. In other words, the barriers to entering business of profiting from programming. And that makes software engineers higher priced commodity because there is higher competition from other companies, but also self-starts. Hardware companies don't have pay their engineers as well because those engineers have a harder time leaving for other businesses. There are fewer capitalized companies, and self-capitalizing a chip HW business is very difficult. (and arguably the many smaller company options in that industry are rapidly consolidating - so employer options are going down rapidly). So in the end software is paid well perhaps because the software profession deals with business areas which yield high value return on the labor, _and_ the low capital business barriers to those activites supports higher competition for software labor.
- whack 9y agoSure, programming is hard, but so is any job that pays more than the median wage. Hence why they pay more than the median wage. No one refers to "shit is hard" as a barrier-to-entry, because this "barrier" is so ubiquitous, it doesn't even need to be mentioned. Artificial barriers-to-entry though, such as the licensing requirements for doctors/lawyers, are unique to some specific professions. Hence why they are worth highlighting.
- s73v3r_ 9y ago"I once had a top-tier business school grad friend claim that programming really isn't that hard and that we're all whiners." It truly is amazing how people outside of a field always seem to have the best idea of how long something in that field takes to do.
- kudokatz 9y agohttps://xkcd.com/793/ https://xkcd.com/793/ https://xkcd.com/1831/ https://xkcd.com/1831/
- jopsen 9y agoOnce you've become a highly paid software engineer it's very human to try and justify your status by claiming that programming is exceptionally hard and therefore your status/salary is justified. That's not to say that the job isn't hard... but lots of jobs are hard. Dealing with the constant loss of people around you if you work in a retirement home or hospice is also hard; but those jobs aren't rewarded equally.
- jimbokun 9y ago"Dealing with the constant loss of people around you if you work in a retirement home or hospice is also hard; but those jobs aren't rewarded equally." That is a completely different sense of the word "hard" from "programming is hard". Working in the retirement home requires enduring emotional pain and sacrifice. Programming (at least some kinds of programming) requires a high degree of skill, knowledge, and intelligence. The distinction being there may be a larger number of people with the skills to work in a retirement home, than there are people with the skills to write particularly difficult programs.
- timr 9y agoI don't know why the parent went to hospices and nursing homes as a counterexample, but your response is missing the point: lots of jobs are hard in the way that programming is hard, and don't have the same compensation levels. Of all the programmers I have met in my life, I would trust only a select few to do the things that most professional engineers do on a daily basis. For example, control system engineering, where quite literally, life-and-death attention to detail is required. The scope of the knowledge required and (in)tolerance to error is astounding. Meanwhile, try to get a programmer to do something as essential and mundane as writing comments. It's like this eternal, "unsolvable" problem in the industry that nobody can fix. Most of the well-paid programmers I know (including quite a few at AmaGooFaceSoft) can't wrap their heads around databases well enough to deploy a low-traffic web application. And this industry is now rather routinely hiring totally inexperienced people, right out of bootcamps, at salaries that are mind-blowing to most professionals. It's clear that this stuff isn't rocket science.
- siegecraft 9y agoLack of knowledge doesn't neccesarily stop one from programming. There's nothing stopping you from calling yourself a programmer, or applying for programming jobs, and so on. Whereas to be a lawyer or a doctor you usually have to be licensed by some sort of government authority.
- dsacco 9y ago> One (semi-pedantic) quibble with the article: there absolutely are barriers to entry for programming. Programming is hard! These barriers may not be artificial, but they are real. Barriers don’t refer to how hard a discipline is skill-wise, they refer to how hard it is to enter the discipline. Law and medicine are also hard disciplines, but they have actual barriers to entry that cannot be surmounted by self-study. In this sense (which is the sense that the article means), programming does not have those barriers, no. Considering that, unless you’re going to mount an argument that programming is objectively harder than those other fields skill-wise, it doesn’t seem productive to talk about an orthogonal “barrier” to entry that the other two also share. They are all difficult, so we end up in the same position. Your comment here has spawned a large thread of people talking about how hard programming is (which frankly seems a bit self-congratulatory for this community, to be honest), but that’s completely separate from the core point being forwarded in the article; vis-a-vis, that programming is interesting and unique precisely because it has such a high compensation for a field without a central body limiting the supply (among other things). Law and medicine are also hard fields, and lawyers and doctors would be happy to explain why they’re difficult and have their own “skill-based” barriers aside from the licensing ones.
- foamflower 9y agoI've seen a few variants of this comment, so I wanted to address it. I don't think we disagree much here. I agree that medicine in particular is hard on its own. I'm not entirely sure about law, because the legal profession has only become highly-credentialed (in the US at least, which is the subject of this article) relatively recently. Regardless, to not make the trap of my b-school friend, I don't know enough to dispute whether law is super hard. I suspect it's not easy. (Just as an aside, I'll note that from what I do know about medicine and law, both professions also require an extremely logical approach. I suspect certain specialties in medicine like surgery or anesthesiology or oncology are much harder than programming for various reasons. From cursory web searches, these specialties appear to earn much more than programmers do, and even much more than other physicians.) Thus, assuming that medicine and law are also very hard (on the same order of difficulty as programming), we can likely say that even without licensing and credentialing requirements, entering the medical or legal professions would be hard. I suspect we have slightly different ideas when using the term "barriers to entry". Indeed, I might have made a better argument if I had said programming has "high" barriers to entry, since what I'm talking about is clearly a continuum and not a boolean. C'est la vie. When I use "barriers to entry" as a concept, I'm using it broadly. To me, it encapsulates not only legal or political costs, but any cost, which is why I mentioned building a power plant or a semiconductor fab. I am using it the same way I see it used in the various economics literature. In this case, I suspect the cost is that most people seem to feel uncomfortable thinking abstractly and logically, and haven't refined those skills over time. Alternatively, high capital costs are a common contributor to barriers to entry in economic analysis. "Human capital" (another econ term) is exactly how I'd categorize the learning required to practice programming, whether it is acquired through formal training or self-direction. As far as the self-congratulation, I agree, although that was not my intention. As long as I stay a few standard deviations from Erik Meijer[1] (whom I otherwise deeply respect), I'll consider it a success. ;) [1] https://vimeo.com/110554082 https://vimeo.com/110554082
- guelo 9y agoI studied Electrical Engineering in college and I've been a professional programmer for 10 years. EE is much harder.
- latj 9y agoProgramming is easy. I taught myself. It just took 5-10 years.
- throwaway287391 9y ago> These barriers may not be artificial, but they are real. Real and non-artificial? Could it be?! :P
- mr_toad 9y agoActually, I think that if someone has got to the point where they are dealing with the details of CPU and OS then they’re well along the learning curve. Many, perhaps most, people have trouble with the basics of programming. Pointers, functions, even basic iteration are concepts that cause a lot of people to flunk out of introductory programming.
- mythrwy 9y agoThis isn't popular with the "everyone can learn to code" crowd but one significant barrier to becoming a proficient programmer is intelligence. Maybe intelligence isn't the right word (after all how smart is it really to sit in front of a computer all day shuffling bits around?), a certain way of thinking or aptitude might be better. Education doesn't overcome this, training only partially overcomes this, experience doesn't necessarily overcome this. I bet most of us in the field have come across individuals with high levels of training, perhaps even very "intelligent" individuals who simply fail to fit concepts together in a useful way. Who get the pieces, who can answer quiz questions, who know facts and trivia, but simply cannot bring it all together into a useful, coherent, maintainable whole in a reasonable time frame. And I don't see this barrier being broken. Anything that can be taught by rote memorization can be automated. Anything that requires higher levels of abstract thinking may never be automated.