9 ms·
> Today's developers didn't learn binary before learning Python, why should you learn how to code without the most modern tools? This phrasing makes me wary. T
by l__l 3y ago
> Today's developers didn't learn binary before learning Python, why should you learn how to code without the most modern tools?
This phrasing makes me wary. There's a difference between being self-taught, and not even bothering to teach yourself the absolute fundamentals of computing, like binary...
- joshmanders 3y agoLearning binary and knowing what binary is are two separate things. I don't think you need to learn binary to learn to code. Been doing this for 25 years working at some big name companies, I don't know binary other than 1 is on, 0 is off. I'm starting to feel like this whole notion that newbies can't come in and learn say React or modern JavaScript without having to go all the way back to that day in 1995 when they were hashing out the std lib for JavaScript and learn every thing about it before that "Hello World!" in React starts is becoming a gatekeeping method.
- freedomben 3y ago> I don't know binary other than 1 is on, 2 is off. Either an epic troll or a great illustration :-D
- joshmanders 3y agohaha you caught that before I fixed it, that my friend is the result of my failure of math in my great edumacation in the US public school system hahaha. Also it's 9am and I just woke up a bit ago.
- rocketbop 3y agoYou should have left it as it was :)
- robomartin 3y ago> Also it's 9am and I just woke up a bit ago. You should try waking up at 6 AM
- joshmanders 3y agoI woke up at 8AM Chicago time. Which is 6AM San Francisco time. Same thing.
- robomartin 3y agoI guess jokes are no-longer a thing in our culture? Let me spell it out: You should have woken up at 6 AM. The error would have been even funnier.
- joshmanders 3y ago> I guess jokes are no-longer a thing in our culture? Nah I just think people here like to be liberal with their downvotes. "I didn't find that funny, downvote" While I didn't get the joke, I still appreciate the attempt.
- dcuthbertson 3y agoI guess the person you replied to edited their comment. Still, "1 is on, 2 is off" made me smile.
- robinduckett 3y agoLet’s hope you never have to parse an archaic binary format then
- mynameisvlad 3y agoMost people, in fact, do not have to do this. That’s an exceptionally rare thing to do that I would estimate a fraction of a percent of developers will ever encounter.
- foobarbecue 3y agoI would have put the number at 75% rather than a fraction of a percent. What do all these people do, these "developers" that never have to use bitstrings in python, deal with encodings, endianness, interface with hardware, etc.? Are they all UI people?
- mynameisvlad 3y ago> use bitstrings in python, deal with encodings, endianness, interface with hardware is nowhere even remotely close to > parse an archaic binary format The goalposts are on the other side of the field.
- foobarbecue 3y agoIn my experience, most files in userspace are in an archaic binary format. And most hardware talks archaic binary.
- mynameisvlad 3y agoMost developers interacting with files are going to be doing it through a higher level API, so while sure, technically they're stored like that, it's not like that's what the developer actually has to deal with. And most developers don't interact with hardware day to day, no. That's an exceptionally small set of people.
- Kalium 3y agoYou're absolutely right, it's definitely gatekeeping. That said, there's also a point in here that's often underappreciated. There's a big difference between someone who learns today's modern tools from nothing and someone who has a good foundation learning today's modern tools. I think it's fundamentally one of approach. The former treats coding as a trade where you just need to learn a few tools. The latter treats it as a vocation where fundamentals allow you to learn whatever tools you need. The one makes sense short-term - it gets people to paying work with modern tools in a minimum of time. The other makes sense long-term - it keeps people in paying work with modern tools for decades. When you're just getting started and looking to get that first job with the life-changing six figure paycheck, all that farting around with fundamentals that the gatekeepers are talking about seems like an absolutely massive waste of time. It is gatekeeping, but gatekeeping can and sometimes does serve a purpose that is not just the purely selfish.
- joshmanders 3y agoI've found in my years mentoring and teaching that showing something is much better at keeping them learning and interested than "Sit down and read 30 years of out dated documentation and coding practices just so you can feel the pain and agony I had, then and only then when you've proven yourself can you spit out that hello world on the screen, filthy scum!" Give them a codepen with modern React already bootstrapped so they can start just tinkering with it and changing things, man watch their EYES LIGHT UP at the possibilities... Every time I see this happen it takes me back to 1997 when I was first learning to build websites.
- Kalium 3y agoYou're completely right. That's a wonderfully kind, empathetic, and compassionate approach that's incredibly effective for teaching people what kind of power they are starting to have access to. I've found it's also one that is very expensive as measured by instructional time and energy. I've also found it relatively ineffectual for teaching fundamentals. I do not have to lecture someone about how they are unworthy and useless to know that understanding a bit of discrete mathematics, HTTP fundamentals, DNS, or relational algebra will make them better software engineers. There are absolutely people in this world who, when learning the glories of React with a codepen, will ask how things work several times and learn big-O notation... but there are far more who won't ask but would benefit from knowing anyway. Do you think it's perhaps possible that people benefit from both a solid grasp of the often-boring fundamentals as well as feeling the joy of tinkering?
- WoodenChair 3y ago> Learning binary and knowing what binary is are two separate things. I don't think you need to learn binary to learn to code. Been doing this for 25 years working at some big name companies, I don't know binary other than 1 is on, 0 is off. You're wearing your lack of CS knowledge like some kind of badge of honor. Of course you don't need deep CS knowledge to be a competent programmer. But almost undoubtedly you'll be a better programmer if you do know CS (I'm using binary here as a proxy for CS since I can't imagine having a deep knowledge of CS without knowing something fundamental like binary). How many times over those 25 years could a problem have been more efficiently solved (in programmer time or CPU time) if you had known about problem solving techniques (perhaps those related to binary knowledge for example) that you don't know from the world of CS? You'll never know... You may guess, but you'll never know what you don't know. It's not gatekeeping to say that to give someone a complete education to be a software developer we should provide them a knowledge of binary. We can teach programming in an approachable fashion AND teach binary in an approachable fashion. We do it every day at my college.
- LoganDark 3y agoWhy are you talking about CS and nonexistent "problem solving related to binary"? By "knowing binary" we are not talking about knowing machine code instructions or the details of how they are executed, but literally knowing how to read and work with binary numbers (using bitwise operations). Which isn't necessary for problem-solving or implementing most algorithms. (Yes, there are algorithms that use bitwise operations. They're technically expendable and it doesn't make you any less of a programmer not to know everything. Especially if you're using Python or JavaScript!)
- feoren 3y ago> nonexistent "problem solving related to binary" Are you joking? Without understanding binary, you can't understand: - Numeric types, which numbers can be represented exactly, their failure modes, etc. - Bit-field flags, e.g. for enums - IP address masks and other bitmasks - Anything at all about modern cryptography - Anything at all about data compression - The various ways color is represented in images - Any custom binary format, MIDI, USB, anything low-level at all Honestly the list goes on and on. It's absolutely insane to me to hear people say that you can be a competent software engineer without understanding binary.
- tensor 3y agoI've literally had to use knowledge of binary and number representation just last month in order to implement a lower level protocol. You may not use it in your simple CRUD app jobs but it's absolutely not "some old thing people only had to use back in the day."
- joshmanders 3y ago> You may not use it in your simple CRUD app jobs but it's absolutely not "some old thing people only had to use back in the day." My point is that most jobs are simple CRUD app jobs or positioning divs on a screen, not deep seeded CS stuff.
- foobarbecue 3y agoFYI https://www.merriam-webster.com/words-at-play/deep-seated-deep-seeded-usage https://www.merriam-webster.com/words-at-play/deep-seated-de...
- jlarocco 3y ago> My point is that most jobs are simple CRUD app jobs or positioning divs on a screen... It's really not "most jobs." Although I do agree that a CS or software engineering degree is overkill for that type of stuff. Also, "knowing binary" is a strawman, and not a very good one. A newbie developer getting confused by bit flags isn't a big deal. Point them to Wikipedia and let them read about it. The much bigger problem is when inexperienced developers go off and write a ton of bad spaghetti code, re-invent a bunch of wheels they never learned about, and generally just write crap because they're clueless about best practices (or even any practices at all). Now the clueless newbie is slowing down everybody else and creating a maintenance nightmare. TBH, most new developers are pretty bad (self taught, university taught, or whatever). The important thing is having experienced people around to point them in the right direction and help them get "real world" experience. Gate keeping isn't always a bad thing.
- Hirrolot 3y agoI occasionally have to manipulate binary numbers too. But, aside from bitwise operations, I almost always forget what I had learned last time and have to re-read the material again.
- causi 3y agoI didn't know there were computer nerds who can't at least count in binary.
- foobarbecue 3y agoAnd hex, or any other base for that matter. Fundamental concepts and not difficult... I mean, hopefully people learned about place value in elementary school...?
- Fradow 3y agoThere is a difference between going all the way back to 1995 / reading old documentation vs learning the basics of CS. This strawman is used in several comments. CS is not "some old knowledge you might never use". Knowing that it's way faster to search by key in a hashmap rather than iterating through a whole array is useful. Knowing why it's a bad practice not to have primary key (and other DB knowledge) is useful. Knowing the stages of a HTTP request is useful. You can get a job and actually do some productive work without any of that, but that some point not knowing all those basics is going to harm your work.
- picometer 3y ago+1, and also, CS fundamentals absolutely can be learned & exercised in the use of high-level tools. One of the beauties of that knowledge is that its concepts are transferable across domains and layers of the computational stack. Pro tip for anyone working w/ junior devs, especially those who came through bootcamps and the like: you can point them to CS knowledge without actually calling it CS.
- foobarbecue 3y agoSo when you're reading code and you get to a bitmask... what do you do?
- kazinator 3y ago> Learning binary and knowing what binary is are two separate things. Knowing what binary is lets you generate smooth sounding sentences about it, which someone else who also only knows what binary is accepts as true. Learning binary lets you actually exploit its properties in a solution.
- denton-scratch 3y ago> Learning binary and knowing what binary is are two separate things. Really? Binary isn't a language like Python, it's a notation; either you understand it or you don't (you could say it's 'binary', I suppose). If you don't understand it, you don't know what it is.
- feoren 3y ago[flagged]
- Dylan16807 3y ago> I don't think you need to learn binary to learn to code. Been doing this for 25 years working at some big name companies, I don't know binary other than 1 is on, 0 is off. I... guess? But the full explanation of binary is only a paragraph long. At a certain point that seems like something you'd have to avoid on purpose.
- plondon514 3y agoI could see there being a future course about binary on codeamigo actually. I'm not saying people shouldn't learn the fundamentals of computing, rather, it's not knowledge that's a requirement to have before building most modern applications. Before it was "learn C before learning Python" but some people didn't love that either...I guess my point is, we've been moving to higher and higher abstractions ever since computer programming was invented, the next abstraction is probably going to be talking to an AI to write some code that you need to vet, the above is just marketing speak for that.
- luuuzeta 3y agoHow are courses created? Who creates them? >Made with in How did all the haze treats you yesterday?
- plondon514 3y agoMy friend/co-founder and I wrote these courses. Thanks for asking. I didn't leave my apartment. Hope everyone who is forced to be outside for work is safe, and this passes soon.
- ChrisMarshallNY 3y agoIn my case, I started with the FET junction (electronics). My first program was Machine Code, designed on a pad of lined paper, and punched directly into RAM, via a hex keypad. These days, I write Swift. It's nice to not need to deal with the way Machine Code works, but I'm glad I learned it. That said, everything we learn takes up NVR, so there's a strong argument to be had, against the need to learn below a certain fundamental floor.
- xbar 3y agoThe pathways formed by all those fundamental and low level operations create capabilities and reasoning strategies that are very valuable. Perhaps they are even unachievable in other ways.
- robomartin 3y ago> My first program was Machine Code, designed on a pad of lined paper, and punched directly into RAM, via a hex keypad. Yup. That's also where I started. In fact, I still own one of these in mint condition: https://www.hewlettpackardhistory.com/item/making-a-case/ https://www.hewlettpackardhistory.com/item/making-a-case/ I truly believe the low level fundamentals are crucially important. Even today, in the days of Python and Javascript. Not to go too far, about a year ago I was working on an embedded board we designed which used MicroPython. The communications protocol required IBM CRC-16 to be calculated. MicroPython could not run this calculation fast enough. Since MicroPython allows you to insert code in assembler, I just wrote the CRC routine (an many others) in ARM assembler. The performance boost was, as one would expect, massive. Writing the code wasn't a problem at all given my background. Having this knowledge also allows you to reach for optimizations that someone who has only seen high level languages and (as posters elsewhere in the thread have revealed) don't understand low level code or even binary. A simple example of this is that comparing to zero is faster than comparing to a value. The simple explanation being that you have to juggle registers and perhaps even read and store that value from memory every time you go around a loop. All processors have the equivalent of a JZ and JNZ (jump if zero, jump if not zero) instruction, which does not require anything to be fetched from memory or register swapping. Of course, this is processor and task dependent. And then I wonder about such things as DeMorgan, bit-wise operations, masking, etc. I was surprised to read some of the comments on this thread about people not being comfortable with binary beyond 1=true and 0=false. I don't understand how someone can develop non-trivial software without having a solid foundation. I mean, even for CSS you should understand what "FFC21A" or "3FE" means, where it comes from and how to work with these numbers.
- deleted 3y ago[deleted]
- asow92 3y agoSeconded. And I'd posit that learning CS theory and fundamentals like binary shouldn't be too difficult if the individual is savvy enough to grok the finer points of Python.
- echelon 3y agoI dislike this perspective. I taught myself programming at age 12, well before undergrad. If I'd been forced to learn binary before I could make websites and games, I would have given up. I might have even avoided programming forever. I think the very first thing someone should learn is the fastest path to build something that interests and delights them. Theory can come later, when they're ready to appreciate it.
- asow92 3y agoYou could have made learning binary a game. Learning binary isn't difficult and should only take a few days to a week of lecture to grasp a sufficient understanding.
- echelon 3y ago> should only take a few days This doesn't work for everybody! Let people learn in the direction that interests them. The highest energy reward function first. Once they feel rewarded, then let them learn theory. They'll have a deeper appreciation and the stamina to press deeper.
- haswell 3y agoRealistically, one can achieve quite a lot without needing to ever think about binary, and today’s languages/frameworks explicitly enable this. I’m not arguing that someone shouldn’t eventually teach themselves more fundamentals as they mature their skillset, but most modern languages are so many abstractions above binary that it’s more of a distraction while learning about the basics of code in the context of real world use cases. Understanding assembly on some level is in a similar category. I think of this more as an avenue for specialization. One need not learn these things to get started, but they may very well need these things if they want to continue their journey past a certain point.
- deleted 3y ago[deleted]
- Swizec 3y ago> There's a difference between being self-taught, and not even bothering to teach yourself the absolute fundamentals of computing, like binary Been doing this for almost 30 years now, about 15 of those professionally. I think the last time I used binary was in a microcontrollers class in high school. Even in college, yeah we talked a lot about binary, we learned the single most useful thing in my career – truth tables – and we dived deep into how CPUs toss bits around. Did we ever use binary for anything practical? No of course not, that’s what the compiler is for. I mean I guess the real question is: What does “learn binary” even mean? Knowing it exists? That’s easy. Knowing that your code is eventually all binary? Yeah great. Knowing how NAND gates and such work? Well that’s discrete mathematics, bool algebra, quantum physics, circuit design, and whatever field of math talks about translating problems from one to another, not “binary”. Being able to calculate, by hand, numbers from binary to octal and decimal? Meh you can have a computer do that or google the algorithm when you need it. Does “learning binary” mean memorizing the ASCII table so you can read hex dumps or whatever? Maybe, doubt a lot of modern engineers still do that tho.
- nmnmnmnmnm 3y ago>Did we ever use binary for anything practical? No of course not, that’s what the compiler is for. How to tell people you have never implemented anything performance sensitive in your life without spelling it out bluntly in a nutshell. The code of any popular image processing/decoder/encoder/compression/cryptographic libraries is littered with the use of bit operators because they operate at the fundamental building block level of computing, they are the most efficient and the "sufficiently smart compiler" that supposedly always produces the best interpretation is a lie. You merely need to skim through any implementation of jpeg, of h264 or anything that actually matters in this world to see the practical application of working on bits in the real world. But sure, understanding computer architecture is meaningless. Trust the compiler. Thank gods I can still see stutters scrolling a web page on a 16 core CPU with 64gb of ram. I don't know how I could live my life if people actually knew how to make proper programs!
- Swizec 3y ago> How to tell people you have never implemented anything performance sensitive in your life without spelling it out bluntly in a nutshell And that’s okay. Millions of engineers work on software that leverages those fine-tuned optimizations. Hundreds of engineers make them. Plus I grew up in an era of cheap compute. Everything got faster every 18 months for free. Even now computers as a whole keep getting faster and faster despite the cap on single core performance. Even at my relatively high level, the performance concerns I spent months learning about in 2005, just don’t matter anymore when you can get a single server with terabytes of ram and petaflops of compute. 99% of [user facing] code just isn’t performance bound these days. What does it matter if your loop takes 10ms or 20ms when the data is a 300ms network call away
- tester756 3y agoI'll argue - bitwise operations, they're fundamentals too, but If you arent working close to hardware, then for example doing bitwise operations may be really rare. I don't think I've met a problem that required them even once during my first few years as SE. I've had CS degree and years of experience and I werent proficient with those, I needed to write it down in steps and then I started working closer to hardware where those operations were common and I've learned it I don't even remember whether we were doing them in school
- ivan_gammel 3y agoBoolean logic is close to bitwise operations and it is the knowledge without which nobody should dare to call themselves a software engineer.
- tester756 3y agois close, yet no the same. There's difference between "do you understand this if ladder" or "can you simplify this boolean expression" and "clear bits 3, 25, 26, 27 of this register and set bits 25, 26, 27 to value 0b101" I'm not saying that this is hard or something, just the 3rd thing is really rare unless you work close to hardware or some other specific tasks
- ivan_gammel 3y agoI think the generalization skill that allows to go from one to another is essential. If someone has only some basic understanding of boolean expressions, but cannot apply this knowledge to binary numbers, this is a good characterization of their programming skills in general.
- johnnny 3y agoI work in networking, not particularly close to the hardware. I have colleagues who manipulate IP addresses by looking at the string representation of the address, splitting on the `.`, casting each part back to an integer, etc. Their code breaks as soon as we use a netmask other that /24 or (shock, horror!) we run in an IPv6 environments.
- hahamrfunnyguy 3y agoI don't really understand the hurdle to "learning binary". It's not necessary to understand how binary works to complete a hello world program, but I think it's something that you want to get a handle on pretty quickly. If I recall correctly, we only spent a few minutes on it in a larger lesson about different schemes for representing numbers in Comp Sci I. I don't think I've performed binary arithmetic since that class, but it's good to know how it works and I could always look up/figure out how to do those calculations again if I needed to.
- mynameisvlad 3y agoBy your own admission you have never used the knowledge you learned. Why exactly is it “good to know how it works” if you literally have never used that knowledge? Why is it “something you want to get a handle on pretty quickly” if you don’t touch binary? Are there places where it would come up? Most certainly. Is it required learning for every single dev out there? Highly debatable.
- Kalium 3y agoI've certainly benefited from knowing about floating point error. I likely would have spent a lot of time confused about why certain kinds of math kept coming out wrong without know about the underlying representation of floats, how it results in error, why this tradeoff is good for most scenarios, and other options. The problem is that this is the sort of foundational knowledge that isn't easily gained through the learn-as-needed approach that applies to higher level things. Most people can notice when they don't know how to use a library. It's probably not obvious to most people who don't already know about it that their computer can handle numbers wrong.
- mynameisvlad 3y ago> It's probably not obvious to most people who don't already know about it that their computer can handle numbers wrong. 0.1+0.2=0.30000000000004 is not obvious? When a floating point error happens, it’s quite plainly obvious. At that point, someone would look up a SO article like https://stackoverflow.com/questions/588004/is-floating-point-math-broken https://stackoverflow.com/questions/588004/is-floating-point... and learn about it. And from there, FPE mitigations. Would you get to the mitigations faster if you knew binary? Sure, the first time you ever hit it. But that seems to be bottom of the barrel optimization, IMO.
- i-use-nixos-btw 3y agoIt would be unsettling for a software engineer to have little knowledge of the fundamentals. But software engineers aren't the only people using python. I work with data scientists - with degrees in data engineering from computer science departments in very good universities - and I am certain that they believe a computer to be a magical box. I know for sure they're terrified of binary. Honestly, I'm looking forward to the day that they actually use functions and classes properly. I wish I was exaggerating, I really do. It'd make my life easier. And it is no surprise - I've seen the supplementary material attached to papers that come out of those departments. I won't go into too much detail, but I don't know how any codebase could more closely resemble a house of cards and still function. They still have successful careers in what they're good at. After all, one of the main reasons that python is so successful is that it can be used by people who don't know much - or care much - about programming. It can obviously be used by far more capable hands to do many more things, but for applied tasks it takes the pain out of learning something that they consider tangential.
- LoganDark 3y ago> Today's developers didn't learn binary before learning Python I didn't learn binary before Python. I learned Lua before Python. But now I'm messing around with low-level C++, and Rust. Where you started doesn't necessarily have anything to do with where you are now.