Answers.Body: <p>I think in most places I experienced, a Digital Binary Logic primitives ( Binary, Hexa Vs Decimal, ASCII code, AND,OR, XOR definition,....) precedes the first programming course; but not a complete course only as a part of the general introduction usually from Barti Book (maybe I mis-spelled the author name)
  The main digital logic design course usually comes in 2nd year</p>
  <p>I guess what must be a pre-requisite is math &amp; discrete math; students have to know arrays, matrices, sets,..... and some operations on them to practice programming. In fact even the basic logic primitives, we first took thru SET Union &amp; Intersection</p>
  <p>There are things we took for granted because our pioneers drew us the lines so we just do as our predecessors, but here there are some reasoning
  -A developer should understand why increment is faster than +1, Shift is faster than multiply by 2, the use of registers, cache memory,...
  -&amp; as I wrote in the comment in Ethereum for example, System Programming will make it easier to understand EVM, tokens, parsing although not the same
  -The primitives of Bitcoin on the other hand maybe easier for someone who knew even a little assembly</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-08-20T15:05:49.833Z
Answers.Text: I had a whole course about logic, which helped me a lot, but I'm on a specific field at the boundary between CS engineering and electronical engineering, so this was really necessary. But I guess this would help any CS student to be familiarized with abstraction without having to learn a specific language. It helps at the very beginning to stick to paper and learn to abstract things.
Answers.UserDisplayName: YCN-
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-08-18T22:26:51.280Z
Answers.LastActivityDate: 2021-08-20T16:02:52.930Z
Answers.LastEditDate: 2021-08-20T16:02:52.930Z
Answers.UserDisplayName: ShAr
Answers.Body: <p><strong>TL;DR</strong></p>
  <p>I'm not saying it's not a good class to take, I'm saying that it's not really an <em>essential prerequisite</em> anymore, and can be relegated to a more advanced class at a later stage to provide deeper knowledge and context.</p>
  <hr />
  <p>The first year of college I did contained a boolean algebra class that delved into formal logic, boolean algebra, Karnaugh diagrams, ... Was it very useful for the programming classes we took? <em>Somewhat</em>.</p>
  <p>Learning how to refactor and simplify complex logical evaluations was definitely a good skill to have. Things like finding the negation of <code>(a || b) &amp;&amp; c</code>, or simplifying <code>(a &amp;&amp; b) || b</code> to <code>b</code> are things that will definitely come in handy.</p>
  <p>Karnaugh diagrams? Not really. Thematically, they are also about simplifying logical evaluations, but they do it in a way that is unintuitive to someone who reads the end result, which makes for bad code readability and you'd be better off with a slightly less terse but considerably more readable alternative.<br />
  That being said, in certain contexts there are cases where efficiency trumps readability, and I've whipped out a genuine Karnaugh diagram in those situations.</p>
  <p>But my college days were 12 years ago, and it was an outdated course by contemporary standards. We were still being taught C (C++ was for year 2), and even did a week's introduction on Fortran and Cobol. In that situation, boolean algebra makes a lot of sense.<br />
  Since then, the scene has dramatically changed, and there's less stress on these oldschool logical skills. I work with people who have only just graduated, they never had any oldschool logic classes but they are IMO skilled developers (relative to their experience).</p>
  <blockquote>
  <p>I read with interest the thread Why Computer Science students learn Digital Logic Design?, where Dr. Buffy and others argue for a programming abstraction stack that has logic at its bottom.</p>
  </blockquote>
  <p>If you ask me to design a software development course from scratch, I will innately focus on things I was taught. I will whip out Karnaugh diagrams, and C++ pointers, and data normalization, and ...</p>
  <p>It's natural for people to always advocate that the way they think about things is therefore a good summation of essential knowledge for new starters, but that is not always the case.<br />
  I'm not saying that these skills are completely useless, but not all of them are as relevant today as they were back in the day when the people (who today are experienced mentors) were still in school. Paradigms change, and different skills take priority.</p>
  <p>There is a significant difference between me and the fresh graduates who are 12 years my junior (at least 50% of the course material), but they are better prepared for the 2021 development scene than I would've been when I started working, which shouldn't be surprising at all.</p>
  <p>To summarize, while I personally very much value formal logic and still apply it in my work, I'm not as eager to claim that it is as essential to a newcomer than it was to me when I was a newcomer.</p>
  <p>To be clear: I'm not saying it's not a good class to take. <strong>I'm saying that it's not really an essential prerequisite anymore</strong>, and can be relegated to a more advanced class at a later stage to provide deeper knowledge and context.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-10-07T13:59:12.837Z
Answers.LastActivityDate: 2021-10-07T13:59:12.837Z
Answers.UserDisplayName: Flater
Answers.Body: <p>In my view, starting a <em>Computer Science</em> program with digital logic makes no sense at all, though a course that covers it later is certainly valuable. The main tool of CS is programming, not digital logic.</p>
  <p>On the other hand, a program in Computer Engineering (if such even exist) would probably do well to start there. For Electrical Engineering it might also, but that isn't my field and I haven't examined curricula for it.</p>
  <p>But let me discuss why this might be reasonable in Computer Engineering or Electrical Engineering.</p>
  <p>In those fields, <a href="https://en.wikipedia.org/wiki/Logic_gate" rel="nofollow noreferrer">digital logic</a> isn' the bottom of a hierarchy, but is actually in the middle of one. It depends fundamentally on lower level things, is complete unto itself, and higher level things depend fundamentally on it. Computer engineering (building devices) uses digital logic in its design process, for example. It is a fundamental <em>tool</em> that enables higher level things to be built in hardware, just as programming allows higher level things to be built in software (operating systems and such).</p>
  <p>In an engineering course (other than software engineering which is a bit misnamed, actually), digital logic is probably a more fundamental tool than programming. So, it is natural to start there.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-08-20T15:32:57.960Z
Answers.Text: I come from an Engineering faculty, but even in other places I worked on like Computer & Information Sciences ( gets divided in 4th year to IT, Computer Science, Scientific Computing) it is almost the same; An Introduction before /with 1st programming course, digital logic design in 2nd year or 2n semester before Computer Architecture ( I think Assembly lang, System Programming, Compilers,.. need Digital Logic; & they r necessary even for a developer to understand tokens, EVM,.. better for ex.)
Answers.UserDisplayName: ShAr
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-08-19T12:58:04.133Z
Answers.LastActivityDate: 2021-08-19T12:58:04.133Z
Answers.UserDisplayName: Buffy
Body: <p>I read with interest the thread <a href="https://cseducators.stackexchange.com/questions/5606/why-computer-science-students-learn-digital-logic-design">Why Computer Science students learn Digital Logic Design?</a>, where Dr. Buffy and others argue for a programming abstraction stack that has logic at its bottom.</p>
  <p>Is anyone aware of a Computer Engineering (or Computer Science, or Electrical Engineering) curriculum with a required digital logic course that is a prerequisite for the first programming course?</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-08-17T08:13:09.013Z
Comments.Text: For my degree requirements for a B.S. in computer science a logic course was required but it was not a `prerequisite for the first programming course`. I think making it a prerequisite before any programming course would make getting to the higher level courses, think critical path, such as complier design all that harder and thus would not expect to see it as a prerequisite before the first programming course. In other words such a requirement would extend the critical path for all programming classes for such a degree.
Comments.UserDisplayName: Guy Coder
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-08-17T15:04:49.653Z
Comments.Text: I don't, however, advocate that digital logic be taught before programming in a CS curriculum. It is at the bottom of the stack (from the CS standpoint) but not the first thing taught.
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-08-18T20:05:30.577Z
Comments.Text: I suspect that there will be no answer because there probably isn't such a program.  (It certainly seems like a bad idea to me to create a program that literally starts there.)
Comments.UserDisplayName: Ben I.
Tags: <curriculum-design>
Title: Do any Computer Engineering programs have a required digital logic course that comes before the first course in programming
ThreadText: # Do any Computer Engineering programs have a required digital logic course that comes before the first course in programming
  
  (Asked by: username_0 on 2021-08-16)
  
  I read with interest the thread [Why Computer Science students learn Digital Logic Design?](https://cseducators.stackexchange.com/questions/5606/why-computer-science-students-learn-digital-logic-design), where Dr. username_2 and others argue for a programming abstraction stack that has logic at its bottom.
  
  Is anyone aware of a Computer Engineering (or Computer Science, or Electrical Engineering) curriculum with a required digital logic course that is a prerequisite for the first programming course?
  
  **Tags:** curriculum-design
  
  > **Comments:**
  > **username_1**: For my degree requirements for a B.S. in computer science a logic course was required but it was not a `prerequisite for the first programming course`. I think making it a prerequisite before any programming course would make getting to the higher level courses, think critical path, such as complier design all that harder and thus would not expect to see it as a prerequisite before the first programming course. In other words such a requirement would extend the critical path for all programming classes for such a degree.  
  > **username_2**: I don't, however, advocate that digital logic be taught before programming in a CS curriculum. It is at the bottom of the stack (from the CS standpoint) but not the first thing taught.  
  > **username_3**: I suspect that there will be no answer because there probably isn't such a program.  (It certainly seems like a bad idea to me to create a program that literally starts there.)  
  
  ---
  
  ## 3 answers
  
  ### Answer by username_2 on 2021-08-19. Score: 3
  
  In my view, starting a *Computer Science* program with digital logic makes no sense at all, though a course that covers it later is certainly valuable. The main tool of CS is programming, not digital logic.
  
  On the other hand, a program in Computer Engineering (if such even exist) would probably do well to start there. For Electrical Engineering it might also, but that isn't my field and I haven't examined curricula for it.
  
  But let me discuss why this might be reasonable in Computer Engineering or Electrical Engineering.
  
  In those fields, [digital logic](https://en.wikipedia.org/wiki/Logic_gate) isn' the bottom of a hierarchy, but is actually in the middle of one. It depends fundamentally on lower level things, is complete unto itself, and higher level things depend fundamentally on it. Computer engineering (building devices) uses digital logic in its design process, for example. It is a fundamental *tool* that enables higher level things to be built in hardware, just as programming allows higher level things to be built in software (operating systems and such).
  
  In an engineering course (other than software engineering which is a bit misnamed, actually), digital logic is probably a more fundamental tool than programming. So, it is natural to start there.
  
  > **Comments:**
  > **username_4**: I come from an Engineering faculty, but even in other places I worked on like Computer & Information Sciences ( gets divided in 4th year to IT, Computer Science, Scientific Computing) it is almost the same; An Introduction before /with 1st programming course, digital logic design in 2nd year or 2n semester before Computer Architecture ( I think Assembly lang, System Programming, Compilers,.. need Digital Logic; & they r necessary even for a developer to understand tokens, EVM,.. better for ex.)  
  
  ---
  
  ### Answer by username_4 on 2021-08-18. Score: 2
  
  I think in most places I experienced, a Digital Binary Logic primitives ( Binary, Hexa Vs Decimal, ASCII code, AND,OR, XOR definition,....) precedes the first programming course; but not a complete course only as a part of the general introduction usually from Barti Book (maybe I mis-spelled the author name)
  The main digital logic design course usually comes in 2nd year
  
  I guess what must be a pre-requisite is math & discrete math; students have to know arrays, matrices, sets,..... and some operations on them to practice programming. In fact even the basic logic primitives, we first took thru SET Union & Intersection
  
  There are things we took for granted because our pioneers drew us the lines so we just do as our predecessors, but here there are some reasoning
  -A developer should understand why increment is faster than +1, Shift is faster than multiply by 2, the use of registers, cache memory,...
  -& as I wrote in the comment in Ethereum for example, System Programming will make it easier to understand EVM, tokens, parsing although not the same
  -The primitives of Bitcoin on the other hand maybe easier for someone who knew even a little assembly
  
  > **Comments:**
  > **username_5**: I had a whole course about logic, which helped me a lot, but I'm on a specific field at the boundary between CS engineering and electronical engineering, so this was really necessary. But I guess this would help any CS student to be familiarized with abstraction without having to learn a specific language. It helps at the very beginning to stick to paper and learn to abstract things.  
  
  ---
  
  ### Answer by username_6 on 2021-10-07. Score: 0
  
  **TL;DR**
  
  I'm not saying it's not a good class to take, I'm saying that it's not really an *essential prerequisite* anymore, and can be relegated to a more advanced class at a later stage to provide deeper knowledge and context.
  
  ---
  
  The first year of college I did contained a boolean algebra class that delved into formal logic, boolean algebra, Karnaugh diagrams, ... Was it very useful for the programming classes we took? *Somewhat*.
  
  Learning how to refactor and simplify complex logical evaluations was definitely a good skill to have. Things like finding the negation of `(a || b) && c`, or simplifying `(a && b) || b` to `b` are things that will definitely come in handy.
  
  Karnaugh diagrams? Not really. Thematically, they are also about simplifying logical evaluations, but they do it in a way that is unintuitive to someone who reads the end result, which makes for bad code readability and you'd be better off with a slightly less terse but considerably more readable alternative.  
  That being said, in certain contexts there are cases where efficiency trumps readability, and I've whipped out a genuine Karnaugh diagram in those situations.
  
  But my college days were 12 years ago, and it was an outdated course by contemporary standards. We were still being taught C (C++ was for year 2), and even did a week's introduction on Fortran and Cobol. In that situation, boolean algebra makes a lot of sense.  
  Since then, the scene has dramatically changed, and there's less stress on these oldschool logical skills. I work with people who have only just graduated, they never had any oldschool logic classes but they are IMO skilled developers (relative to their experience).
  
  > I read with interest the thread Why Computer Science students learn Digital Logic Design?, where Dr. username_2 and others argue for a programming abstraction stack that has logic at its bottom.
  
  If you ask me to design a software development course from scratch, I will innately focus on things I was taught. I will whip out Karnaugh diagrams, and C++ pointers, and data normalization, and ...
  
  It's natural for people to always advocate that the way they think about things is therefore a good summation of essential knowledge for new starters, but that is not always the case.  
  I'm not saying that these skills are completely useless, but not all of them are as relevant today as they were back in the day when the people (who today are experienced mentors) were still in school. Paradigms change, and different skills take priority.
  
  There is a significant difference between me and the fresh graduates who are 12 years my junior (at least 50% of the course material), but they are better prepared for the 2021 development scene than I would've been when I started working, which shouldn't be surprising at all.
  
  To summarize, while I personally very much value formal logic and still apply it in my work, I'm not as eager to claim that it is as essential to a newcomer than it was to me when I was a newcomer.
  
  To be clear: I'm not saying it's not a good class to take. **I'm saying that it's not really an essential prerequisite anymore**, and can be relegated to a more advanced class at a later stage to provide deeper knowledge and context.
  
  
  ---
  
  