17

I been contacted to do some work remote controlling LEDs displays over TCP/IP, but my experience and preparation is mostly about high-level programming language. I said that to the person who contact me about the work and he told me that:

"if you call yourself a programmer you should know all these things"

Should a programmer really know the details of low-level programming? Or can I treat it as a black box concept, as theoretical knowledge but not necessarily doing it or implementing low level language solutions, having in mind that low-level programming is not my expertise?

9
  • 8
    When programming on a high level, you must mask out the lower levels of abstraction, or you wouldn't get anything done. It's quite useful to be able to work at lower levels though, just don't try to do everything from all levels of abstraction at once. You don't need to, but if you don't, don't apply for low-level jobs.
    – user7043
    Commented Jun 29, 2011 at 15:10
  • 1
    @delnan: When working on the high level, of course it is necessary to mask the lower level details. However, I think every programmer should know how the machines they are programming work on the lower level as well. The knowledge does not need to be too detailed - simply knowing how to build a basic computer from scratch is quite sufficient.
    – Schedler
    Commented Jun 29, 2011 at 15:18
  • 4
    "if you call yourself a programmer you should know all these things" If they wanted you so badly that they cursed for your lack of background, something is very wrong. I would disregard their comment as making no sense at all. Either they want you with your background, or they don't want you and shouldn't curse you for the background you don't have.
    – S.Lott
    Commented Jun 29, 2011 at 15:40
  • 3
    Another case of, "Whew, glad I missed that bullet!" You don't really want to work for or with such a snob do you? Commented Jun 29, 2011 at 16:53
  • 2
    @Schedler - and if they're not burning their own boards, they're total newbs. Commented Jun 29, 2011 at 16:54

10 Answers 10

37

Your contact does not know what they're talking about. There are many languages, methodologies, technologies, and so on that a single person cannot possibly know all of the necessary details very well. What you do have to know as a programmer is how to learn what you need to get the job done and have a problem-solving approach that you can apply to arrive at a solution, no matter what programming language you need to use.

Admitting what you don't know is okay, but you can also prove that you are able to learn enough to achieve the desired result, no matter what you are faced with. Good programmers are simply good problem solvers that can implement their solutions in various programming languages.

I would not be working for someone that has the attitude your contact does.

2
  • 4
    +1: The comment makes no sense in the first place.
    – S.Lott
    Commented Jun 29, 2011 at 15:40
  • Although I'll bet there's a lot of assembly-only devs who'd be happy to charge him by the hour. Commented Nov 22, 2013 at 23:06
22

"if you call yourself a programmer you should know all these things"

I strongly disagree with this statement. This would be like asking a chef to cook anything, a driver to operate any kind of motor vehicle, or a doctor to know all diseases, which is a ridiculous assumption.

To be a programmer, one has to know how to give write software in some language in order to perform some task in an automated fashion. The languages and tasks will vary from programmer to programmer just like what dishes a chef knows how to make, a driver knows how to operate, or a doctor knows how to diagnose will vary depending on how specialized one wants to be in each profession.

3
  • 2
    Yeah, until an abstraction breaks down and they have no clue as to why their code is exhibiting a performance problem, why some external library is crashing/corrupting data, etc. In my experience programmers who only know high level languages are simply not as good at their job as those who can do both. Commented Jun 29, 2011 at 15:27
  • 4
    Your missing the point. Yes high level programmers should be able to have an understanding of the low-level aspects but should he know how to write a firmware upgrade for a Linksys router?
    – maple_shaft
    Commented Jun 29, 2011 at 15:33
  • 7
    I do think they should know how to find out how, though. A big part of modern programming is knowing what to remember and what to file as reference.
    – Michael K
    Commented Jun 29, 2011 at 15:37
8

Spoken like a person who never wrote a line of code in his life. This will be the same person who will feel you should be able to do it in half the time you quote. Don't argue with an idiot.

You showed much more knowledge and character by knowing your limitations. This person talks about things he knows nothing.

I guess every carpenter should know how to carve an ornate piece of furniture. If a pilot can fly one plane, she can fly them all.

1
  • I agree, for my its like saying that because you are a doctor you should know how to do a Open heart surgery. But in real life you know he must be a specialist in order to do it, but in programming the difference in hard to tell when you just look it from outside as the 'all mighty programmers'.
    – job
    Commented Jun 29, 2011 at 15:42
6

Most CS programs in school will give you some knowledge in low level programming. I, for example, had assembler classes using the 8088 processor (OK...so that dates me a bit). I think, however, that a lot of trade schools these days bypass that knowledge - pipe up with a comment if that is not true.

Bottom line, it is always good to know what happens on the chip level - besides, your high level languages will eventually end up there when it is run.

However, to have someone tell you that you are not a programmer because you currently don't know low level programming is ignorant. If you need to have those skills for the current project, then you should have enough smarts or motivation to learn the skills you need and then apply them.

I would have to seriously consider not taking that project if the client is already talking to you that way - you never know where that could go.

6

I really despise it when people say "You need to know X to call yourself a programmer." Really? Well some people work on COBOL all day and LOVE IT. They may have gotten so good at it and their problem domain that next to them we're all pretenders.

Seriously, give people respect for solving the problems they're faced in cool and interesting ways. Understand that great problem solving comes from a diversity of backgrounds. Not whether they've mastered a supposed "checklist" of skills that everyone's supposed to know so they can all think the same way. That's the EXACT OPPOSITE of what we want. Everyone's "checklist" is and should be different. The more different the better. Programming is problem solving these days. Respect those that do it well and understand that everyone comes to the table with different strengths. That's the only way we're going to help each other work effectively as a team. Just because knowing "C" or something really helps this one guy be awesome, doesn't mean that because you don't know it you automatically fail.

3

I suggest that you read this :

http://www.joelonsoftware.com/articles/LeakyAbstractions.html

As explained, when you use an abstraction, what is lower level always has an influence on what you are doing. This can be performancewise, cause of failure, security reasons, and so on.

So definitively, you should now about these stuffs. Not especially being a specialist of asm or CPU architecture. But knowing enough to document yourself when you need to know more is, indeed, a must have.

2
  • Maybe i need to clarify that i know how TCP/IP works =), my point is implementing something like sockets over TPC/IP is beyond my knowledge, can i learn it on the fly? of course, Do I want to learn it? not really, mainly because i dont feel confident that the final result will be fully proven for a production environment or will comply with all the requirements in the given time. I just think in the time that it took me to reach the level of expertise in high-level language, and i dont think the time given will be enough to know all the gotchas, that give my a risky sensation.
    – job
    Commented Jun 29, 2011 at 15:34
  • This is the point : you don't need to be an expert. But you need to know the basics. So you will know what are the limits of the abstraction you are using - that's the minimum, and know how to document yourself when the limit are reached.
    – deadalnix
    Commented Jun 29, 2011 at 15:41
2

His argument is a good example of the No True Scotsman logical fallacy.

However, the difference between low and high level programming isn't the language, it's the application knowledge domain. Assigning a value to true could mean turning on an LED or enabling mouse click events on a widget. The language doesn't care.

For example, take a look at this library for working with an LED matrix on an arduino. It's not rocket science here, and really any programmer would be able to understand it with a little effort if they didn't put up a "low-level oh no!" mental block.

1

Each Programming Language has its own pros and cons. Learning a few, would give you a great perception on what to use and how to use it effectively when given a project.

As a programmer, you can specialize on a specific PL, using it as your only tool to solve any problem, you can also know a lot of PL but specialize on nothing and a lot more in between these extremes.

Maybe person who told you that "Phrase" is frustrated, perhaps you were not the only contact person he has spoken to.

knowing the problem and knowing what skill set is needed to be able to solve the problem effectively is one good trait of a programmer. Alas on your case, since you do not have the required skill set, you may perhaps refer your contact person to another programmer with the necessary skill set.

cheers,

wardy

1

Having the theoretical knowledge is good. Being able to learn the low-level language when necessary is very important.

But as for "if you call yourself a programmer you should know all these things", who can know everything about everything? Before they even do them?

-2

I will re-phrase

"if you call yourself a programmer you should know all these things"

TO

"if you call yourself a programmer you should know enough that you can quickly learn all these things"

Not the answer you're looking for? Browse other questions tagged or ask your own question.