9 ms·
If 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 basi
by namelost 9y ago
If 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.
- zelos 9y agoIn the UK the practical skills are taught postgraduate in a Legal Practice Course.
- ithkuil 9y agoLearning how to do X can be very easy if you accept an arbitrary level of competence as enough to claim "I know how to X". I have the feeling that a lot of people can believe they have learned to program while all what they did is to go past their chosen programming language syntax and grasped a few core CS concepts. That's quite a low barrier to entry, but if that's what people mean when they hear the word "programming", then I'd argue that Software Engineering would be a better name for the field we're here comparing with practising law.
- zebraflask 9y agoDon't let the electrical and hardware engineers hear you say that, that'll just open the old debate about whether software engineering is really engineering at all. (Kidding.)
- namelost 9y agoTo be honest I'm not really sure how it works in the US, but in the UK if a doctor has passed their exams to become a registrar, they are by that time reasonably competent to practice their chosen speciality (except for surgeons). Obviously being a doctor requires a lot of practical on-the-job training but the point is the whole process is managed top-down. Programming education is totally ad-hoc and you can be a great programmer even with a degree in agriculture.
- cryptonector 9y agoTo become a good programmer you need either a gift (which some young people have) or experience -- lots of experience. A CS education gives you a good foundation, but you still need to learn so much more: software engineering practices, lots and lots of details, a variety of programming languages and their huge libraries, mistakes mistakes mistakes (so you can learn the patterns, so you can spot them in code reviews, so you can avoid making them again, ...), full-stack-ness (so you can scale, so you can foresee problems before they strike), ...
- heedlessly2 9y agoif you want to create a CRUD app, then you probably don't need the best and latest library. There are plenty of apps out there today which support millions of users but didn't choose the most optimal database, wasn't well architected, and has mountains of sloppy technical debt.
- foamflower 9y ago> If you want to know just how hard programming is, try teaching it to someone. > 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. +1024 I have said quite a few times that the best CS program is one where you learn how to learn without being spoon fed. In fact, I know a couple great programmers who were _not_ CS (one studied econ; the other, physics), and they similarly learned how to learn without being spoon fed.
- austenallred 9y agoI run a Computer Science academy, and that’s quite literally our goal.
- jdmichal 9y agoYep. I've talked before that we are doing a huge disservice by not focusing on the sequential logic of programming, which is the first barrier to overcome. Also, we reinforce memorization over problem solving in maths throughout school. Hearing students say, "When are we ever going to use this?", was not uncommon when I was in school 15+ years ago. And as far as I can tell, the push for standardized curriculum and testing has only made this worse. https://news.ycombinator.com/item?id=15164948#15168430 https://news.ycombinator.com/item?id=15164948#15168430 https://news.ycombinator.com/item?id=12589473#12592521 https://news.ycombinator.com/item?id=12589473#12592521
- vkou 9y agoI've been teaching my partner bits and pieces of programming. Sequential logic, and control flow were some one of the easier topics.
- deleted 9y ago[deleted]
- andrei_says_ 9y agoI call this the essential learning skill and am totally bummed that our public education not only does not cultivate it but actively deters it.
- maxander 9y ago> 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. I'm pretty sure 90% of us would just look for a Stack Exchange question describing a bunch of popular database platforms and choose whichever looked best after thinking about it for a few minutes, and that outside of extreme circumstances (>terabytes of data, distributed over an actually unreliable network, other exotica) almost any option would work well enough. Which is to say, programming is complicated but it's not very precise. Compare to mechanical engineering, where if you use the wrong steel your bridge will fall down; or to medicine, where if you prescribe the wrong drug someone might just die. So while there's lots that's useful for a programmer to know, if they don't know it they can get by alright almost all the time, and it's really hard for their managers to tell the difference. (Which is also why we can get away with not having a "programming school" beyond a handful of required courses for a CS degree.) So it's hard for this to seem like a very effective barrier to entry.
- fnord123 9y ago> Compare to mechanical engineering, where if you use the wrong steel your bridge will fall down; or to medicine, where if you prescribe the wrong drug someone might just die. Dereference the wrong pointer and the rocket blows up. Forget a memory barrier and the robot brain gets corrupted memory and sees human life as an impediment to paper clip maximization. Forget to zero out some memory in a goto: cleanup section and suddenly there's a back door in a popular security library leaving machines to the whim of any curious script kiddie. I know a lot of people aren't working on real time systems or encryption libraries that have the same level of significant consequences as what you're describing, but some are.
- empthought 9y agoFor software developers (and in fact, for the general public), the smart play is to rely on real engineers to provide mechanical, electric, or electronic failsafes in their designs.
- S_A_P 9y agoThe funny thing to me is that you implicitly mention something else in this point. The languages/databases you specify are all popular in web/mobile/end user based applications, and almost exclusively never used in enterprise where C#/java/Sql/Oracle still make the vast majority of tech stacks. You could add another layer to what you are saying as do you want to build apps? platforms? or enterprise line of business software? if so you need to know entirely different stacks. Then you need to know what is important to being "good" at the chosen stack. This is just a long winded way of agreeing with you, there are vast amounts of knowledge required to "make it". Most importantly you cant ever feel like you know enough and stop trying to learn. I took about 12 months off from stretching myself and now I feel 3 years behind...
- giobox 9y ago> There are "law schools" and "med schools" to teach you all the knowledge required to become a lawyer or a doctor. Programmer now, gained a law degree in a previous life. Know lots of folks who studied medicine. The idea that med school or law school teach you "all the knowledge required to become a lawyer or a doctor" is laughable and a truly absurd statement. The sheer size of the problem domains these subjects cover alone renders this impossible, and furthermore I'd argue it's pretty insulting to insinuate that Computer Science is somehow more difficult in this regard. While I can't speak fully for medics, a law degree "hardly scratches the surface" as you put it either.
- terminalcommand 9y agoI am about to graduate from law school. I also agree that a law degree "hardly scratches the surface" of law. That's why in most countries lawyer candidates are required to do mandatory legal internships. And even after becoming a lawyer, you need to gain a lot of experience before you can be trusted to practice law without the supervision of an experienced lawyer.
- zozin 9y agoDo you have a throwaway email? I'd like to ask you a few questions about transitioning from law to programming. Thanks.
- giobox 9y agoAfraid I don't really have much to say about this - I did a postgrad Computer Science Masters, applied for Software Engineer jobs and started new career immediately following completion of Masters. I've known several law graduates follow this path. If like me you've always had an interest in the field and were a reasonably competent programmer before starting the CS degree this wasn't all that difficult by comparison - I found attaining the CS Masters easier than studying Law if I'm honest.
- tostitos1979 9y agoCS PhD here and worked over a decade. Yesterday, I made a list of over a dozen technical areas in CS I feel inadequate on. I think the issue is not that a CS Masters is easy. It is that CS knowledge is a never ending firehose. When I graduated (2008), most NoSQL systems were not even created. For anyone transitioning from law/medicine to CS, while I welcome you to the field (good for you!! tech is awesome), just be aware that tech gets obsolete very fast. While an older lawyer or doctor may be considered experienced, the newbies right out of school may run laps around you (lots of examples but the creator of Ethereum comes to mind. I know oh so many PhDs who work on distributed systems but it took a Waterloo undergrad student to think out of the box).
- throwawayjava 9y ago> Consider the basic task of choosing where you are going to store some data Yes, do consider. In many, many cases the appropriate answer is "whatever stack you're familiar with". In maybe 10% of cases the answer will boil down to technical requirements and you'll need familiarity with "Postgres, SQLite, Redis, LevelDB, ..." And that's where the bimodal distribution comes from. > 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 I don't know a lot about the law. But if you think that MDs are not "self-taught" in the same way bootcamp graduates or CS graduates are "self-taught", you should talk to an MD some time.
- mancerayder 9y agoWhich is why I question the usefulness of a computer science program/degree for the vast majority of dev positions. Learning how to learn would I imagine be the best use of such a degree; but then one with at least half a brain, given a few years in the field, starts to pick that up independently. I chose to avoid computer science degrees because in those days, in the late 90's, it was pretty much 80-90% math classes. I don't regret getting a degree in a totally different discipline: it turns out learning philosophy, history, linguistics, writing, etc. etc. was far useful to me as a person (and, arguably, a worker) than some boring math classes ever would have been. Have comp sci curriculums improved in that time? Given that job interviews these days last 4-8 hours, require group approval and whiteboarding in front of an audience, I would argue, NO. Obviously, no one trusts the degree.
- mr_toad 9y agoThe number of hours of hands-on programming in a degree (probably only a couple of hundred a year) are too few for a graduate to learn anything but the basics. Most professional programmers would put in more hours of hands on programming in a months work.
- petercooper 9y agoProgrammers have to remember a vast amount of domain knowledge. It's even more elementary than that, I think. I've encountered lots of intelligent people who lack any sort of diagnostics skills - absolutely essential for being a programmer. Things like.. the landline is broken. Well, then, get another phone, plug it in and see if it works. If it does, then it's the phone we need to look at, if it doesn't, we need to move further up the line. It frequently boggles my mind how many people struggle with simple elimination, experimentation, and narrowing down to resolve problems, and I'm not sure such people could become developers without this ability.
- laythea 9y agoThis is so true. In my job, it's the problem solving ability that is valued. Not the innate knowledge of tools etc that we use to solve the problems, however that is, off course, required also.
- petra 9y agoThat's learnable. For example, military forces teach enlisted people with varying levels of skills how diagnose systems, and it works.
- laythea 9y agoI disagree. It may be possible to teach a monkey to perform X. But can you teach a monkey to teach another monkey to perform X? EDIT: no implied insult there.
- rmah 9y agoYou can disagree but you would be wrong. I have personally taught people to diagnose and repair systems. Many others have as well. There are are also formalized methods of teaching how diagnostics. And training on how to teach it. So yes, you can teach a monkey how to teach another monkey to do X.
- laythea 9y ago
- majormajor 9y ago> 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. And yet there are a lot of examples of companies that got it wrong, picked objectively-shitty options, and still succeeded massively and then had the money to pour into cleaning up the resulting messes. There's countless options, but they don't seem to matter as much as people believe. As much as it would be nice to think Lisp is a superweapon and it's easy to replicate Paul Graham's stories, that's not what's happening in the market. There's an interesting split the OP discusses that seems to largely be a B2C vs B2B thing. With a few exceptions at the high end, many of the winners in both of these spaces aren't determined by "purely better technology" but by other things. However, in the B2B space, battles can be won much more easily on the strength of salespeople and business strategy, whereas in the consumer space, it requires more skilled implementation of ideas - great UX doesn't require technically great programming, but it requires competent execution of the original idea, in a way that a medical records system sold to a hospital administration board doesn't.
- sheepmullet 9y ago> and still succeeded massively and then had the money to pour into cleaning up the resulting messes. And they typically have to pay enormous sums of money to hire the talent required to clean up. This is large part helps create the bimodal compensation model.
- dsacco 9y ago> If you want to know just how hard programming is, try teaching it to someone. Continuing with the example from the article: law and medicine are also hard. Try teaching those to the same set of people. > Programmers have to remember a vast amount of domain knowledge. Programmers are not at all unique in their need to understand significant domain knowledge. Essentially every knowledge-based field, including those with licensing barriers to entry, also have this requirement (and arguably to a greater extent). > 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. Lawyers and doctors must also keep current with their field and the industry in general. If anything, the degree to which they must keep up with their respective fields seems to be a difference of degree when compared to software developers, not of category. I don’t think any of this difficulty is the reason why programming enjoys high salaries, because (circling back to the article’s thesis), it isn’t distinct from other fields with higher barriers to entry in that respect.
- sheepmullet 9y ago> law and medicine Law and medicine also trend towards bimodal compensation. There is an enourmous earnings difference between the top echelon of lawyers and all the other lawyers. Same thing for specialist surgeons.
- deleted 9y ago[deleted]
- saas_co_de 9y ago> Programmers have to remember a vast amount of domain knowledge And that is only half the job. You also have to practice, a lot. I think "Teach Yourself Programming in Ten Years" is about right http://norvig.com/21-days.html http://norvig.com/21-days.html You can learn academic computer science, or know a lot of trivia about programming and computers, but without years of dedicated practice it doesn't translate into actual productivity.