4 ms·
> necessary for an entry level position I still can't figure out how programming computers (the most complex task a human can undertake) managed to become sing
by commandlinefan 7y ago
> necessary for an entry level position
I still can't figure out how programming computers (the most complex task a human can undertake) managed to become singled out as the only profession in the history of humanity that is simultaneously assumed by so many to be something you need only a cursory understanding of to be proficient at.
- newswasboring 7y agoYeah the claim that it is "the most complex task a human can undertake" is a little.... iffy. I mean, most of the times its really not. Most of programming is exactly as complex as most of civil engineering or most of plumbing. Most of a sufficiently mature field is usually not that complex at all because the most complex stuff is abstracted out. My civil engineering friends don't design bridges from scratch and my plumber doesn't threads the pipes themselves. They rely on industry standards which give them enough abstraction to be productive. Now this is not to say on the frontiers of it its not very complicated. But so is every other field. Ever thought about plumbing a space station? Or designing a rapid deploy bridge? You can't compare frontiers of one field with the middle of the other.
- commandlinefan 7y ago> most of civil engineering or most of plumbing both fields that have strict educational and credential requirements to practice professionally. Both strictly - dare I say it - gate-kept.
- BoorishBears 7y agoYou are everything that makes people conflate enthusiasm for low level knowledge with gatekeeping. This is honestly getting worse than gatekeeping, entering the realm of illusions of grandeur. I actually can't reply directly anymore because everything I'm posting is being downvoted to hell, but it's fine, I know implying the unwashed masses blindly cutting and pasting SO answers are doing just fine for themselves is taboo in a place where people feel programmers should be taking PE certification exams but anyways, here's my response: - > Now compare your experience to that of the hypothetical stockbroker who's diving into React native app programming without even really understanding what a loop is. He has decades to go before he understands what he's doing! What's NPM? What's a text editor? Is that different than a word processor? I screwed up my initial install... how can I start over? Insisting that programming is really easy and it's gatekeepers adding requirements that make it hard isn't doing him any favors; he's going to feel like a complete failure. > _he's going to feel like a complete failure._ Why? You're casting this accusation on this hypothetical stock broker. Why are they going to feel like a complete failure? How is this hypothetical stock broker any different than I was literally hitting random buttons in the programming menu of his father's calculator until he made some text appear? > you started from the bottom/most concrete layer of abstraction No, I didn't. I started from BASIC, I only learned C because assembler looked like greek and I heard you needed assembler if you wanted those fancy graphics all the best calculator games had and I learned that C let you write assembler somehow without writing assembler. If I had quit because I didn't understand half of what I was doing (I didn't) I wouldn't be a programmer today. I didn't feel like shit, I felt like a kid who had just found a candy shop, what great things were there for me to learn next? Sure I had doubts, but they were easily drowned out by any modicum of progress I made, and soon enough I learned that it's ok because _no one_ knows all the fundamentals. Out there there's someone who's scoffing at this talk of "knowing assembler lets you know how computers work", they're ready to bust out explanations of instruction pipelining, speculative execution (for now), how memory controllers work, what the micro controller in your HDD and SDD is doing to let your assembler do any kind of useful IO without understanding how underlying media works. - And also, if the stock broker quits because they don't understand what they're doing, in what universe is telling them: "Actually go and learn this other stuff, that's the fundamentals. Just realize has a much much MUCH longer feedback loop, there's orders of magnitude more surface area before you get back to the level you were working on and can produce something that you recognize as being on the path of making the app you wanted" Going to get them to _not quit even faster_. In my experience the best way to get people feeling empowered is to let them make something that they can envision being on the path to what they want to make. Writing a hello world in assembler and having it show up in a command prompt is not going to get my stockbroker friend nearly as happy as writing a hello world in React and running it on his phone, because he sees a glimmer of how the latter gets him to his goal of an app. You're ascribing individual behavior to a broad set of people because they don't agree with your approach to learning being in their best interests. That's what I have such a problem with. Who cares if they don't know what NPM is, who cares if every time he screws up he opens App Copy (23) and deletes the current one. If they're going to quit because they don't know what NPM is or what a text editor vs word processor, how is sitting them down and trying to get them to understand assembler going to ease their anxiety? And if you feel that's hyperbole, even getting them to understand NPM past copy and pasting commands. You'd be amazed at the things people have built that help real human beings do useful things every day while never truly understanding how NPM works. There's nothing wrong with embracing people having no idea what they're doing just running at the wall until it starts to stick. It's what I did, and I couldn't have done it any other way.
- commandlinefan 7y agoWell, I don't know how close I am to getting yelled at for feeding a flame war here, but... You described yourself as "a guy who taught himself programming starting with calculators in middle school by the way (TI-Basic => C via SDCC => Assembler on calculators and MCUs". So you've had, I'm guessing, a few decades to learn and absorb all this stuff, and you started from the bottom/most concrete layer of abstraction and worked your way up - just as GP is suggesting everybody ought to do (and which I'm agreeing with). By mastering each layer before popping up to the next, each one was simple and made intuitive sense, so it seemed easy the whole time. Now compare your experience to that of the hypothetical stockbroker who's diving into React native app programming without even really understanding what a loop is. He has decades to go before he understands what he's doing! What's NPM? What's a text editor? Is that different than a word processor? I screwed up my initial install... how can I start over? Insisting that programming is really easy and it's gatekeepers adding requirements that make it hard isn't doing him any favors; he's going to feel like a complete failure. Rather, being honest with him and telling him that software abstraction is layered, and each layer depends on the ones below it, and while most people work at the top layer, each layer has idiosyncrasies that impact the layers above it that you need to understand when something goes wrong so you can easily troubleshoot problems, will probably ease his anxiety about diving into this (yes, very complicated) field. And for the record, yes, I absolutely believe that programming as a profession would benefit from professional licensing like medicine, law and accounting do.
- BoorishBears 7y agoSame reply now that I'm not rate limited... > Now compare your experience to that of the hypothetical stockbroker who's diving into React native app programming without even really understanding what a loop is. He has decades to go before he understands what he's doing! What's NPM? What's a text editor? Is that different than a word processor? I screwed up my initial install... how can I start over? Insisting that programming is really easy and it's gatekeepers adding requirements that make it hard isn't doing him any favors; he's going to feel like a complete failure. > he's going to feel like a complete failure. Why? You're casting this accusation on this hypothetical stock broker. Why are they going to feel like a complete failure? How is this hypothetical stock broker any different than I was literally hitting random buttons in the programming menu of his father's calculator until he made some text appear? > you started from the bottom/most concrete layer of abstraction No, I didn't. I started from BASIC, I only learned C because assembler looked like greek and I heard you needed assembler if you wanted those fancy graphics all the best calculator games had and I learned that C let you write assembler somehow without writing assembler. If I had quit because I didn't understand half of what I was doing (I didn't) I wouldn't be a programmer today. I didn't feel like shit, I felt like a kid who had just found a candy shop, what great things were there for me to learn next? Sure I had doubts, but they were easily drowned out by any modicum of progress I made, and soon enough I learned that it's ok because _no one_ knows all the fundamentals. Out there there's someone who's scoffing at this talk of "knowing assembler lets you know how computers work", they're ready to bust out explanations of instruction pipelining, speculative execution (for now), how memory controllers work, what the micro controller in your HDD and SDD is doing to let your assembler do any kind of useful IO without understanding how underlying media works. - And also, if the stock broker quits because they don't understand what they're doing, in what universe is telling them: "Actually go and learn this other stuff, that's the fundamentals. Just realize has a much much MUCH longer feedback loop, there's orders of magnitude more surface area before you get back to the level you were working on and can produce something that you recognize as being on the path of making the app you wanted" Going to get them to _not quit even faster_. In my experience the best way to get people feeling empowered is to let them make something that they can envision being on the path to what they want to make. Writing a hello world in assembler and having it show up in a command prompt is not going to get my stockbroker friend nearly as happy as writing a hello world in React and running it on his phone, because he sees a glimmer of how the latter gets him to his goal of an app. You're ascribing individual behavior to a broad set of people because they don't agree with your approach to learning being in their best interests. That's what I have such a problem with. Who cares if they don't know what NPM is, who cares if every time he screws up he opens App Copy (23) and deletes the current one. If they're going to quit because they don't know what NPM is or what a text editor vs word processor, how is sitting them down and trying to get them to understand assembler going to ease their anxiety? And if you feel that's hyperbole, even getting them to understand NPM past copy and pasting commands. You'd be amazed at the things people have built that help real human beings do useful things every day while never truly understanding how NPM works. There's nothing wrong with embracing people having no idea what they're doing just running at the wall until it starts to stick. It's what I did, and I couldn't have done it any other way.
- pjmlp 7y agoInformatics as well, Informatics Engineering is a protected title in many countries. While the exam can be avoided if one isn't into signing contracts and taking legal responsibility in project execution, the order still has a last word to say regarding which universities are allowed to actually claim that they give engineering titles in Informatics.
- kick 7y agothe only profession in the history of humanity that is simultaneously assumed by so many to be something you need only a cursory understanding of to be proficient at. This can be traced to the 1970s. Computer Science is only half of a field. Semi-arbitrarily splitting it off from EE harmed both fields. Instead of one complex field, there are two very shallow fields. I still can't figure out how programming computers (the most complex task a human can undertake) Neuroscience, making pizza (or most cooking, really), marketing, high-speed motorsport, psychology, most weapons development (outside of guns, which are fundamentally simple), writing mass-market books and drug development all seem to have programming beat in terms of complexity for what ninety-nine percent of professional programmers do. Jobs worded it well in an interview at one point. Something along the lines of, "I knew there was a market for people who would never be able to design hardware or put a kit together but who still would love to write their own software," in the context of why the Apple II was successful. It works just as well to show why the field is the way it is. Most computer programmers don't have a clue how the hardware works. That used to be an essential part of it. It's not any longer. The bar has gotten lower and lower, and that's not necessarily a bad thing. Python can be learned in an hour, so why not? They can still make useful things, so there's no problem with it. Just like in any other field, the bar for "proficient" is low compared to average, but the bar for "exceptional" is high.
- BoorishBears 7y agoI wouldn't even say the bar has gotten lower. The bar has multiplied into multiple bars all at the their own levels but in different dimensions. You can have an innate understanding from a single transistor to how individual frames are handled by an ethernet PHY to how the packet scheduler will interact with your userspace app and be an "exceptional" developer. But the moment someone asks you to write an Android app that hits and endpoint and displays the data with some formatting none of that matters if you've never written an Android app. Nothing is exceptional in a vacuum, and "programming" is so vast with so much space between disciplines it might as well be a vacuum.
- kick 7y agoI think there are extremes here, and you and 'commandlinefan are on opposite sides of the extreme. I'm somewhere in the middle, in that I agree with neither of you. Writing an Android application is not something that requires anyone to learn an entirely new skillset. At most, it's a programming language and a toolkit of difference for any experienced programmer.
- throwaway894345 7y agoYou don't need to be proficient for an entry level position by definition. Further, proficiency at programming is only tenuously related to an immersive knowledge of computer science topics. Further still, proficiency at software engineering is more about soft skills like writing readable code, managing projects, and collaborating with teams to ship large units of software. Having lots of knowledge of low level components or math is icing on the cake for the overwhelming majority of applications (much to my chagrin--I really like the lower levels and the technical nitty-gritty).
- commandlinefan 7y ago> You don't need to be proficient for an entry level position You do need a fair amount of education, though - for every meaningful profession _except_ programming.
- throwaway894345 7y agoSeems like “profession” just is t a very useful or meaningful term. If you insist on using it, I might suggest that “programming” and “development” aren’t professions, while software engineering is; however, there are lots of SEs whose jobs more closely resemble dev jobs.