www.embeddedrelated.com Open in urlscan Pro
162.211.80.118  Public Scan

Submitted URL: https://r20.rs6.net/tn.jsp?f=0013Ahckxv_cgmJE2MP1ZHm46H9eCQ8LH2c_CS5FRVHyl12_yjWCX3ah2Z1aEBWMKiQM_9ytDzrBHxmEvtHOfAV...
Effective URL: https://www.embeddedrelated.com/showarticle/1589.php
Submission: On November 23 via manual from AT — Scanned from DE

Form analysis 4 forms found in the DOM

<form id="registrationForm" class="pure-form pure-form-stacked">
  <fieldset>
    <div class="pure-g">
      <div class="pure-u-1 pure-u-md-1-2">
        <label for="username"><b>Choose a Username</b></label>
        <input type="text" id="username" name="username" class="pure-u-23-24" maxlength="20" autocomplete="new-password" required="">
      </div>
      <div class="pure-u-1 pure-u-md-1-2">
        <label for="email"><b>E-Mail (Work, School or ieee)</b></label>
        <input type="email" id="email" name="email" class="pure-u-23-24" required="">
      </div>
      <!--            <div class="pure-u-1 pure-u-md-1-2">
            </div>-->
      <div class="pure-u-1 pure-u-md-1-2">
        <label for="firstname"><b>First Name</b></label>
        <input type="text" id="firstname" name="firstname" class="pure-u-23-24" required="">
      </div>
      <div class="pure-u-1 pure-u-md-1-2">
        <label for="lastname"><b>Last Name</b></label>
        <input type="text" id="lastname" name="lastname" class="pure-u-23-24">
      </div>
      <!--            <div class="pure-u-1 pure-u-md-1-2">
                <label for="personalemail">E-Mail (Personal)</label>
                <input type="email" id="personalemail" name="personalemail" class="pure-u-23-24"/>
            </div>-->
      <div class="pure-u-1 pure-u-md-1-2">
        <label for="multi-employer"><b>Employer</b></label>
        <input type="text" id="multi-employer" name="employer" class="pure-u-23-24" required="">
      </div>
      <div class="pure-u-1 pure-u-md-1-2">
        <label for="jobtitle"><b>Job Title</b></label>
        <select id="jobtitle" name="jobtitle" class="pure-input-1" style="width:95%">
          <option value="-1">Select Best Match</option>
          <option value="Embedded Software Engineer">Embedded Software Engineer</option>
          <option value="Embedded Hardware Engineer">Embedded Hardware Engineer</option>
          <option value="Machine Learning Engineer">Machine Learning Engineer</option>
          <option value="DSP Engineer">DSP Engineer</option>
          <option value="FPGA Engineer">FPGA Engineer</option>
          <option value="Project Manager">Project/Team Manager</option>
          <option value="President / CEO">President/CEO</option>
          <option value="Vice President / CTO">Vice President/CTO</option>
          <option value="Director">Director</option>
          <option value="Teacher">Professor/Teacher/Instructor</option>
          <option value="Student">Student</option>
          <option value="Graduate Student">Graduate (MS or PhD) Student</option>
          <option value="Sales/Marketing">Sales/Marketing</option>
          <option value="Other">Other</option>
        </select>
      </div>
      <div class="pure-u-1 pure-u-md-1-2">
        <label for="country"><b>Country</b></label>
        <select id="country" name="country" class="pure-input-1" style="width:95%">
          <option value="-1">Select Country</option>
          <option value="Afghanistan">Afghanistan</option>
          <option value="Albania">Albania</option>
          <option value="Algeria">Algeria</option>
          <option value="American Samoa">American Samoa</option>
          <option value="Angola">Angola</option>
          <option value="Anguilla">Anguilla</option>
          <option value="Antartica">Antartica</option>
          <option value="Antigua and Barbuda">Antigua and Barbuda</option>
          <option value="Argentina">Argentina</option>
          <option value="Armenia">Armenia</option>
          <option value="Aruba">Aruba</option>
          <option value="Ashmore and Cartier Island">Ashmore and Cartier Island</option>
          <option value="Australia">Australia</option>
          <option value="Austria">Austria</option>
          <option value="Azerbaijan">Azerbaijan</option>
          <option value="Bahamas">Bahamas</option>
          <option value="Bahrain">Bahrain</option>
          <option value="Bangladesh">Bangladesh</option>
          <option value="Barbados">Barbados</option>
          <option value="Belarus">Belarus</option>
          <option value="Belgium">Belgium</option>
          <option value="Belize">Belize</option>
          <option value="Benin">Benin</option>
          <option value="Bermuda">Bermuda</option>
          <option value="Bhutan">Bhutan</option>
          <option value="Bolivia">Bolivia</option>
          <option value="Bosnia and Herzegovina">Bosnia and Herzegovina</option>
          <option value="Botswana">Botswana</option>
          <option value="Brazil">Brazil</option>
          <option value="British Virgin Islands">British Virgin Islands</option>
          <option value="Brunei">Brunei</option>
          <option value="Bulgaria">Bulgaria</option>
          <option value="Burkina Faso">Burkina Faso</option>
          <option value="Burma">Burma</option>
          <option value="Burundi">Burundi</option>
          <option value="Cambodia">Cambodia</option>
          <option value="Cameroon">Cameroon</option>
          <option value="Canada">Canada</option>
          <option value="Cape Verde">Cape Verde</option>
          <option value="Cayman Islands">Cayman Islands</option>
          <option value="Central African Republic">Central African Republic</option>
          <option value="Chad">Chad</option>
          <option value="Chile">Chile</option>
          <option value="China">China</option>
          <option value="Christmas Island">Christmas Island</option>
          <option value="Clipperton Island">Clipperton Island</option>
          <option value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option>
          <option value="Colombia">Colombia</option>
          <option value="Comoros">Comoros</option>
          <option value="Congo, Democratic Republic of the">Congo, Democratic Republic of the</option>
          <option value="Congo, Republic of the">Congo, Republic of the</option>
          <option value="Cook Islands">Cook Islands</option>
          <option value="Costa Rica">Costa Rica</option>
          <option value="Cote d'Ivoire">Cote d'Ivoire</option>
          <option value="Croatia">Croatia</option>
          <option value="Cuba">Cuba</option>
          <option value="Cyprus">Cyprus</option>
          <option value="Czeck Republic">Czeck Republic</option>
          <option value="Denmark">Denmark</option>
          <option value="Djibouti">Djibouti</option>
          <option value="Dominica">Dominica</option>
          <option value="Dominican Republic">Dominican Republic</option>
          <option value="Ecuador">Ecuador</option>
          <option value="Egypt">Egypt</option>
          <option value="El Salvador">El Salvador</option>
          <option value="Equatorial Guinea">Equatorial Guinea</option>
          <option value="Eritrea">Eritrea</option>
          <option value="Estonia">Estonia</option>
          <option value="Ethiopia">Ethiopia</option>
          <option value="Europa Island">Europa Island</option>
          <option value="Falkland Islands (Islas Malvinas)">Falkland Islands (Islas Malvinas)</option>
          <option value="Faroe Islands">Faroe Islands</option>
          <option value="Fiji">Fiji</option>
          <option value="Finland">Finland</option>
          <option value="France">France</option>
          <option value="French Guiana">French Guiana</option>
          <option value="French Polynesia">French Polynesia</option>
          <option value="French Southern and Antarctic Lands">French Southern and Antarctic Lands</option>
          <option value="Gabon">Gabon</option>
          <option value="Gambia, The">Gambia, The</option>
          <option value="Gaza Strip">Gaza Strip</option>
          <option value="Georgia">Georgia</option>
          <option value="Germany">Germany</option>
          <option value="Ghana">Ghana</option>
          <option value="Gibraltar">Gibraltar</option>
          <option value="Glorioso Islands">Glorioso Islands</option>
          <option value="Greece">Greece</option>
          <option value="Greenland">Greenland</option>
          <option value="Grenada">Grenada</option>
          <option value="Guadeloupe">Guadeloupe</option>
          <option value="Guam">Guam</option>
          <option value="Guatemala">Guatemala</option>
          <option value="Guernsey">Guernsey</option>
          <option value="Guinea">Guinea</option>
          <option value="Guinea-Bissau">Guinea-Bissau</option>
          <option value="Guyana">Guyana</option>
          <option value="Haiti">Haiti</option>
          <option value="Heard Island and McDonald Islands">Heard Island and McDonald Islands</option>
          <option value="Holy See (Vatican City)">Holy See (Vatican City)</option>
          <option value="Honduras">Honduras</option>
          <option value="Hong Kong">Hong Kong</option>
          <option value="Howland Island">Howland Island</option>
          <option value="Hungary">Hungary</option>
          <option value="Iceland">Iceland</option>
          <option value="India">India</option>
          <option value="Indonesia">Indonesia</option>
          <option value="Iran">Iran</option>
          <option value="Iraq">Iraq</option>
          <option value="Ireland">Ireland</option>
          <option value="Ireland, Northern">Ireland, Northern</option>
          <option value="Israel">Israel</option>
          <option value="Italy">Italy</option>
          <option value="Jamaica">Jamaica</option>
          <option value="Jan Mayen">Jan Mayen</option>
          <option value="Japan">Japan</option>
          <option value="Jarvis Island">Jarvis Island</option>
          <option value="Jersey">Jersey</option>
          <option value="Johnston Atoll">Johnston Atoll</option>
          <option value="Jordan">Jordan</option>
          <option value="Juan de Nova Island">Juan de Nova Island</option>
          <option value="Kazakhstan">Kazakhstan</option>
          <option value="Kenya">Kenya</option>
          <option value="Kiribati">Kiribati</option>
          <option value="Korea, North">Korea, North</option>
          <option value="Korea, South">Korea, South</option>
          <option value="Kuwait">Kuwait</option>
          <option value="Kyrgyzstan">Kyrgyzstan</option>
          <option value="Laos">Laos</option>
          <option value="Latvia">Latvia</option>
          <option value="Lebanon">Lebanon</option>
          <option value="Lesotho">Lesotho</option>
          <option value="Liberia">Liberia</option>
          <option value="Libya">Libya</option>
          <option value="Liechtenstein">Liechtenstein</option>
          <option value="Lithuania">Lithuania</option>
          <option value="Luxembourg">Luxembourg</option>
          <option value="Macau">Macau</option>
          <option value="Macedonia, Former Yugoslav Republic of">Macedonia, Former Yugoslav Republic of</option>
          <option value="Madagascar">Madagascar</option>
          <option value="Malawi">Malawi</option>
          <option value="Malaysia">Malaysia</option>
          <option value="Maldives">Maldives</option>
          <option value="Mali">Mali</option>
          <option value="Malta">Malta</option>
          <option value="Man, Isle of">Man, Isle of</option>
          <option value="Marshall Islands">Marshall Islands</option>
          <option value="Martinique">Martinique</option>
          <option value="Mauritania">Mauritania</option>
          <option value="Mauritius">Mauritius</option>
          <option value="Mayotte">Mayotte</option>
          <option value="Mexico">Mexico</option>
          <option value="Micronesia, Federated States of">Micronesia, Federated States of</option>
          <option value="Midway Islands">Midway Islands</option>
          <option value="Moldova">Moldova</option>
          <option value="Monaco">Monaco</option>
          <option value="Mongolia">Mongolia</option>
          <option value="Montserrat">Montserrat</option>
          <option value="Morocco">Morocco</option>
          <option value="Mozambique">Mozambique</option>
          <option value="Namibia">Namibia</option>
          <option value="Nauru">Nauru</option>
          <option value="Nepal">Nepal</option>
          <option value="Netherlands">Netherlands</option>
          <option value="Netherlands Antilles">Netherlands Antilles</option>
          <option value="New Caledonia">New Caledonia</option>
          <option value="New Zealand">New Zealand</option>
          <option value="Nicaragua">Nicaragua</option>
          <option value="Niger">Niger</option>
          <option value="Nigeria">Nigeria</option>
          <option value="Niue">Niue</option>
          <option value="Norfolk Island">Norfolk Island</option>
          <option value="Northern Mariana Islands">Northern Mariana Islands</option>
          <option value="Norway">Norway</option>
          <option value="Oman">Oman</option>
          <option value="Pakistan">Pakistan</option>
          <option value="Palau">Palau</option>
          <option value="Panama">Panama</option>
          <option value="Papua New Guinea">Papua New Guinea</option>
          <option value="Paraguay">Paraguay</option>
          <option value="Peru">Peru</option>
          <option value="Philippines">Philippines</option>
          <option value="Pitcaim Islands">Pitcaim Islands</option>
          <option value="Poland">Poland</option>
          <option value="Portugal">Portugal</option>
          <option value="Puerto Rico">Puerto Rico</option>
          <option value="Qatar">Qatar</option>
          <option value="Reunion">Reunion</option>
          <option value="Romainia">Romainia</option>
          <option value="Russia">Russia</option>
          <option value="Rwanda">Rwanda</option>
          <option value="Saint Helena">Saint Helena</option>
          <option value="Saint Kitts and Nevis">Saint Kitts and Nevis</option>
          <option value="Saint Lucia">Saint Lucia</option>
          <option value="Saint Pierre and Miquelon">Saint Pierre and Miquelon</option>
          <option value="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</option>
          <option value="Samoa">Samoa</option>
          <option value="San Marino">San Marino</option>
          <option value="Sao Tome and Principe">Sao Tome and Principe</option>
          <option value="Saudi Arabia">Saudi Arabia</option>
          <option value="Scotland">Scotland</option>
          <option value="Senegal">Senegal</option>
          <option value="Serbia">Serbia</option>
          <option value="Seychelles">Seychelles</option>
          <option value="Sierra Leone">Sierra Leone</option>
          <option value="Singapore">Singapore</option>
          <option value="Slovakia">Slovakia</option>
          <option value="Slovenia">Slovenia</option>
          <option value="Solomon Islands">Solomon Islands</option>
          <option value="Somalia">Somalia</option>
          <option value="South Africa">South Africa</option>
          <option value="South Georgia and South Sandwich Islands">South Georgia and South Sandwich Islands</option>
          <option value="Spain">Spain</option>
          <option value="Spratly Islands">Spratly Islands</option>
          <option value="Sri Lanka">Sri Lanka</option>
          <option value="Sudan">Sudan</option>
          <option value="Suriname">Suriname</option>
          <option value="Svalbard">Svalbard</option>
          <option value="Swaziland">Swaziland</option>
          <option value="Sweden">Sweden</option>
          <option value="Switzerland">Switzerland</option>
          <option value="Syria">Syria</option>
          <option value="Taiwan">Taiwan</option>
          <option value="Tajikistan">Tajikistan</option>
          <option value="Tanzania">Tanzania</option>
          <option value="Thailand">Thailand</option>
          <option value="Tobago">Tobago</option>
          <option value="Toga">Toga</option>
          <option value="Tokelau">Tokelau</option>
          <option value="Tonga">Tonga</option>
          <option value="Trinidad">Trinidad</option>
          <option value="Tunisia">Tunisia</option>
          <option value="Turkey">Turkey</option>
          <option value="Turkmenistan">Turkmenistan</option>
          <option value="Tuvalu">Tuvalu</option>
          <option value="Uganda">Uganda</option>
          <option value="Ukraine">Ukraine</option>
          <option value="United Arab Emirates">United Arab Emirates</option>
          <option value="United Kingdom">United Kingdom</option>
          <option value="Uruguay">Uruguay</option>
          <option value="USA">USA</option>
          <option value="Uzbekistan">Uzbekistan</option>
          <option value="Vanuatu">Vanuatu</option>
          <option value="Venezuela">Venezuela</option>
          <option value="Vietnam">Vietnam</option>
          <option value="Virgin Islands">Virgin Islands</option>
          <option value="Wales">Wales</option>
          <option value="Wallis and Futuna">Wallis and Futuna</option>
          <option value="West Bank">West Bank</option>
          <option value="Western Sahara">Western Sahara</option>
          <option value="Yemen">Yemen</option>
          <option value="Yugoslavia">Yugoslavia</option>
          <option value="Zambia">Zambia</option>
          <option value="Zimbabwe">Zimbabwe</option>
        </select>
      </div>
      <div class="pure-u-1 pure-u-md-1-2">
        <label for="state"><b>State</b></label>
        <select id="state" name="state" class="pure-input-1" style="width:95%">
          <option value="">State (Select Country First)</option>
        </select>
      </div>
      <div class="pure-u-1 pure-u-md-1-2">
        <label for="password1"><b>Password</b></label>
        <input type="password" id="password1" name="password1" class="pure-u-23-24">
      </div>
      <div class="pure-u-1 pure-u-md-1-2">
        <label for="password2"><b>Confirm Password</b></label>
        <input type="password" id="password2" name="password2" class="pure-u-23-24">
      </div>
    </div>
    <label for="privacychkbx" class="pure-checkbox">
      <input type="checkbox" id="privacychkbx"> By checking this box, I agree with the <a href="/terms" target="_blank" style="text-decoration: underline;">terms of use</a> and
      <a href="/privacy" target="_blank" style="text-decoration: underline;">privacy policy</a>
    </label>
    <label for="oktocontactchkbx" class="pure-checkbox">
      <input type="checkbox" id="oktocontactchkbx"> By checking this box, I consent to receive occasional emails from the *Related sites and their partners. I understand that these emails will only contain relevant information and that I can
      unsubscribe at any time. </label>
    <input type="hidden" name="js_on" id="js_on" value="2023">
    <input type="hidden" name="ct_submit_time" id="ct_submit_time" value="1700732807">
    <button type="submit" class="pure-button button-more">Submit</button>
  </fieldset>
</form>

Name: loginPOST /showarticle/1589.php

<form name="login" class="pure-form" action="/showarticle/1589.php" method="post">
  <fieldset>
    <input name="usernameposted" type="text" class="pure-input-login" placeholder="Username" required="">
    <input name="passwordposted" type="password" class="pure-input-login" placeholder="Password" required="">
    <button type="submit" class="pure-button pure-button-green">Sign in</button>
    <label for="remember" style="display: block;">
      <input id="remember" type="checkbox" name="remember" value="checked" checked="" style="padding: 10px;"> Remember me </label>
  </fieldset>
  <span class="condensed"><a href="/forgot.php" class="green smallbold">Forgot username or password?</a> &nbsp;|&nbsp; <a href="/register.php" class="green smallbold">Create account</a></span>
</form>

Name: loginPOST /new2/allpages.php

<form name="login" action="/new2/allpages.php" method="post">
  <label>Email / Username</label> <input type="text" name="usernameposted"><br>
  <label>Password</label> <input type="password" name="passwordposted"><br>
  <div class="action_btns">
    <div class="one_half first">
      <button type="submit" class="btn btn_green">Login</button>
    </div>
  </div>
</form>

POST /new2/ajax_process_registration.php

<form id="registerform" action="/new2/ajax_process_registration.php" method="post">
  <label>Email Address</label> <input type="email" name="email"><br>
  <label>Username</label> <input type="text" name="username" maxlength="16"><br>
  <label>Password</label> <input type="password" name="passwd"><br>
  <label>Confirm Password</label> <input type="password" name="passwd2"><br>
  <input type="checkbox" name="terms"> I agree with the <a href="/terms" target="_blank">terms of use</a> and <a href="/privacy" target="_blank">privacy policy</a>.<br><br>
  <input type="checkbox" name="newsletter"> Yes, I want to subscribe to your world famous newsletter and see for myself how great it is. I also understand that I can unsubscribe VERY easily!<br>
  <div id="recaptcha1" style="margin-top: 10px; margin-bottom: 10px; transform:scale(0.88);-webkit-transform:scale(0.88);transform-origin:0 0;-webkit-transform-origin:0 0;"></div>
  <!--              <div class="checkbox">
                  <input id="send_updates" type="checkbox" name="newsletter" checked> <label for=
                  "send_updates">Send me occasional email updates</label>
              </div>-->
  <div class="action_btns">
    <div class="one_half">
      <a class="btn back_btn" href="#">Back</a>
    </div>
    <div class="one_half last">
      <button type="submit" class="btn btn_green">Register</button>
    </div>
  </div>
</form>

Text Content

Blogs

Home
Blogs
Forums
Quizzes!
Courses
Tutorials
Books
Free PDFs
Webinars
Code Snippets
Login / Register

 * Home
 * Blogs
   * From the Editor
   * Recent Posts
   * Popular (this month)
   * Popular (all time)
 * Forums
 * Quizzes!
 * Courses
 * Tutorials
 * Books
 * Free PDFs
 * Webinars
 * Code Snippets

   Blogs    Nathan Jones  


EMBEDDED SYSTEMS ROADMAPS

Nathan Jones●November 9, 2023
 * Software Development
 * Education
 * Career




INTRODUCTION

What does it mean to be an "embedded systems engineer"? What skills would it be
beneficial for you to develop if you want to be a successful one? Whether you've
only just finished your first Arduino project or you've been building embedded
systems for decades, we could all benefit from periodically assessing our skills
against a baseline and identifying new skills that we can learn. What follows
are a handful of opinions about the skills that should be considered as part of
a core body of embedded systems or software engineering knowledge. I want to
emphasize the word "opinions" because there is no one answer to what an embedded
systems engineer should know (nor is there, really, for any field). Nonetheless,
these "opinions" can be useful to identify the things "we don't know that we
don't know", helping make us more well-rounded engineers. (I feel like I
experience serendipity all the time in my professional career, by pursuing
things of their own accord to make myself a better engineer and then, surprise!,
it's needed on a project on which I'm working.) I hope you enjoy this list!



ACM CURRICULUM GUIDELINES FOR UNDERGRADUATE DEGREE PROGRAMS IN COMPUTER
ENGINEERING (2016)

The Association of Computing Machinery periodically provides recommendations to
undergraduate schools about what to include in certain degree paths and a
section of their recommendations from 2016 for a computer engineering degree
includes skills and knowledge related to embedded systems. Starting on page 80
of the PDF linked above, the ACM provides a list of course objectives applicable
to a one-semester course on embedded systems, which includes the following
subject areas:

This is your typical "intro to embedded systems" course, with the goal being to
introduce a student to their first microcontroller, which they will program in
an IDE with either the vendor HAL or peripheral registers. They are taught what
an embedded system is, how they are programmed and built, and how to use the
peripherals on the microcontroller such as GPIO, timers, interrupts, UART, SPI,
and I2C. Some courses will also discuss the basics of multitasking, RTOSes,
networking, or other useful concepts.



This article is available in PDF format for easy printing

In fact, the other courses listed by the ACM as part of an undergraduate degree
in computer engineering (shown below) also seem applicable to a course of study
for an embedded systems engineer.

Recommended math courses include

 * Analysis of Continuous Functions,
 * Discrete structures,
 * Linear algebra, and 
 * Probability and statistics.

The PDF linked above lists recommended course objectives for each of the above
courses. A few excellent books (based solely on my own opinion) that discuss
these introductory concepts are listed below.

 * Making Embedded Systems (Elecia White)
   * One of the few (only?) introductory books I know of that's truly
     MCU-agnostic
   * Note: A second edition is set to be published in March 2024
 * Programming Embedded Systems (Michael Barr)
 * AVR Programming (Elliot Williams)
 * Embedded Systems Architecture (Daniele Lacamera)
   


EMBEDDED SKILLS TREE (ELECIA WHITE)


Elecia White, host of the Embedded.fm podcast and author of Making Embedded
Systems, has written an embedded systems skills tree using a neat hexagonal
chart.

The idea is that you start at the bottom, with "Get an Arduino", and once that
skill or task has been completed, you move on to any other task that shares an
edge with that task and repeat. The chart expands outwards and upwards and is
set up to encourage multiple different paths to achieving mastery.

The list is broad and it includes both skills that might fall into an
introduction to embedded systems course ("Configure a timer", "Implement a state
machine", "Implement MCU sleep in a low-power project") and also more advanced
skills that commercial embedded systems projects might need ("Write a
bootloader", "Use a multi-core processor", "Create a CI/CD system").



EMBEDDED SYSTEMS ENGINEERING ROADMAP (MEYSAM PARVIZI)


Meysam Parvizi [m3y54m] is a GitHub user who's created an embedded systems
roadmap that covers everything from using a multimeter to understanding CAN.

It's a thorough list, though the idea that certain skills are "required" should
maybe be taken with a grain of salt. When this roadmap was discussed on the
Embedded.fm Slack I also remember some folks thinking that the application areas
(automotive, aerospace, agriculture, etc) should have been given greater
emphasis. Like many fields, having a broad skill set can make you marketable and
useful on many different projects but it's the specific skills that are needed
to accomplish the task at hand (which can vary greatly from field to field and
even project to project) that can make you invaluable to a specific team.



BETTER EMBEDDED SYSTEMS BY PHILIP KOOPMAN

In 2010, Philip Koopman, a long-time embedded systems engineer who specializes
in safety-critical systems, published a book that described all of the ways in
which embedded systems designs tend to fail their design reviews, including
discussions of everything from software architecture to the use of mutexes to
designing for reliability.


I've sometimes described this book as "showing you everything you have yet to
learn" about embedded systems, by which I mean it pretty well encompasses the
skills (beyond those covered in an introductory course) that someone might need
in their career to build and produce high-quality embedded systems. It makes an
excellent follow-up to an introductory course, especially if one uses it to
generate further study in one or more of the book's subject areas. The treatment
of all but a few topics is, unfortunately and expectedly, a little sparse and my
biggest complaint is that Phillip doesn't really provide many references for
further research (even though each chapter ends with a "Resources" section).
Also, the book doesn't discuss hardware much at all, as could have been
predicted by the book's title.


SOFTWARE ENGINEERING BODY OF KNOWLEDGE (IEEE COMPUTING SOCIETY)

Not to be outdone by the ACM, the IEEE Computing Society has also produced a
guide to their definition of a "software engineering body of knowledge" for
several years. Their guide (available here) lists 15 knowledge areas.

The knowledge areas are fairly comprehensive (reminiscent of the ACM guidelines
above) but, like "Better Embedded System Software", the list doesn't really
include any hardware considerations.



SOFTWARE SYSTEMS ENGINEERING PROGRAMMES: A CAPABILITY APPROACH (LANDWEHR, ET
AL.)


In 2017, an octet of software engineering researchers (that included famed
software engineer and researcher David Parnas) published a paper that discussed
the capabilities that they believed software engineers needed to be successful
in their jobs.


 1.  Communicate precisely between developers and stakeholders
 2.  Communicate precisely among developers
 3.  Design human-computer interfaces
 4.  Design and maintain multi-version software
     * Identify and separate changeable concerns
     * Document to ease revision
     * Use parameterization
     * Design software that can be moved to many platforms
     * Design software that is easily extended or contracted
     * Design and maintain products that will be offered in many versions
 5.  Design software for reuse
 6.  Ensure that software products meet quality standards
 7.  Develop secure software
 8.  Create and use models in system development
 9.  Specify, predict, analyze and evaluate performance
 10. Be disciplined in development and maintenance
 11. Use metrics in system development
 12. Manage complex projects
     

The authors state that many current computer science degrees don't teach these
skills because computer science is a "research field" while software engineering
is a "class of professions". Additionally, they claim that the capabilities
listed are fundamental to the discipline of software engineering and, therefore,
somewhat timeless. I think it's a good list, particularly in that it seems to
acknowledge the skills most often needed for building successful embedded
systems "in the wild", more than merely being able to understand or design them.



"EMBEDDED SYSTEMS IS TOO BROAD; THERE'S NO WAY TO CREATE A SINGLE LIST OF CORE
SKILLS THAT EVERY EMBEDDED SYSTEMS ENGINEER IS SUPPOSED TO KNOW!" OR "I'VE BEEN
AN EMBEDDED SYSTEMS ENGINEER FOR OVER 40 YEARS AND I'VE NEVER NEEDED X" AND
RELATED COMPLAINTS COUNTERARGUMENTS

Regarding the former, I think this statement is patently false. Embedded
systems doesn't have a monopoly on being a "very broad discipline"; computer
science is equally broad and the field of medicine is arguably much, much
broader! Both of those fields somehow manage to identify a core set of required
knowledge for every practitioner (as evidenced by their respective degree paths)
and I think it's possible for embedded systems to do the same. Even this paper,
which seems to advocate for embedded systems education to look like
apprenticeships, admits that there are certain skills which are commonly lacking
in entry-level embedded systems engineers and which, therefore, would be good to
include in an introductory course of study. Additionally, although the specific
tools that are used might change, I think it is possible to enumerate a set of
skills that every embedded systems engineer ought to know. The exact nature of
"debugging" might look different from project to project, but I would argue that
all embedded systems engineers need to be good debuggers, for example.


Further, if embedded systems really doesn't have a core skill set and if it's
really best taught like an apprenticeship then we've begun to relegate it more
to the realm of "trade" than "engineering discipline". The emergence of coding
"boot camps" is the result of a similar push in the realm of computer science, I
think, and it seems that although this helps create more people to fill the job
of writing software it doesn't produce people who can necessarily write good
software or, maybe more fairly, architect good software systems. With the rise
of software and embedded systems in financial systems, avionics, and
automobiles, I think there's an imperative to not just make working embedded
systems but robust and secure embedded systems, qualities that don't necessarily
arise when something is taught merely as a trade. On a related note, and
speaking to the second counterargument above, I think it's to our own benefit to
establish and have a broad skill set. Although developing an embedded system
based on an 8-bit microcontroller is vastly different from developing one for an
application processor running embedded Linux, I would argue that the embedded
systems developer who specializes in programming the former and who has never
programmed the latter is doing themselves a disservice. Although it's definitely
possible to have a long and successful career as an embedded systems engineer
without knowing certain skills that others would consider important, I believe
that learning those skills helps make one a more well-rounded engineer and
improves their work in the areas where they do most of their work.


For these reasons, I think that embedded systems engineers can and should define
a core skill set that all embedded systems engineers should strive to know.



WRAPPING UP

First, take a breath! You might be feeling overwhelmed right now about how much
you don't know and I'm here to tell you that it's okay to have lots left to
learn! If you enjoy this field then think of it like being a master craftsman:
there is joy in getting better, regardless of how close or far away the goal
seems to be. Then, pick an area above that you don't know much about and start
learning! Do an internet search for a term you aren't familiar with, pick up one
of the books or PDFs I linked, or come up with a fun project you can complete
that will require a skill you don't know how to do yet. I wish you all the best
on your journey!


Do you have a favorite embedded systems roadmap or topic that wasn't listed? Do
you have a favorite book about embedded systems that other folks should know
about? Then you can also sound off in the comments to help make our community
better!


--------------------------------------------------------------------------------

You might also like... (promoted content)
Free Webinar: Getting Started with Zephyr RTOS
Free Webinar: Getting Started with Zephyr RTOS
Check out Memfault's New Sandbox!
Check out Memfault's New Sandbox!


--------------------------------------------------------------------------------

Comments
 * Comments
 * Write a Comment
   Select to add a comment

To post reply to a comment, click on the 'reply' button attached to each
comment. To post a new comment (not a reply to a comment) check out the 'Write a
Comment' tab at the top of the comments.

Please login (on the right) if you already have an account on this platform.

Otherwise, please use this form to register (free) an join one of the largest
online community for Electrical/Embedded/DSP/FPGA/ML engineers:

Thank you for your patience while we process your registration.
Choose a Username
E-Mail (Work, School or ieee)
First Name
Last Name
Employer
Job Title Select Best Match Embedded Software Engineer Embedded Hardware
Engineer Machine Learning Engineer DSP Engineer FPGA Engineer Project/Team
Manager President/CEO Vice President/CTO Director Professor/Teacher/Instructor
Student Graduate (MS or PhD) Student Sales/Marketing Other
Country Select CountryAfghanistanAlbaniaAlgeriaAmerican
SamoaAngolaAnguillaAntarticaAntigua and BarbudaArgentinaArmeniaArubaAshmore and
Cartier
IslandAustraliaAustriaAzerbaijanBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBermudaBhutanBoliviaBosnia
and HerzegovinaBotswanaBrazilBritish Virgin IslandsBruneiBulgariaBurkina
FasoBurmaBurundiCambodiaCameroonCanadaCape VerdeCayman IslandsCentral African
RepublicChadChileChinaChristmas IslandClipperton IslandCocos (Keeling)
IslandsColombiaComorosCongo, Democratic Republic of theCongo, Republic of
theCook IslandsCosta RicaCote d'IvoireCroatiaCubaCyprusCzeck
RepublicDenmarkDjiboutiDominicaDominican RepublicEcuadorEgyptEl
SalvadorEquatorial GuineaEritreaEstoniaEthiopiaEuropa IslandFalkland Islands
(Islas Malvinas)Faroe IslandsFijiFinlandFranceFrench GuianaFrench
PolynesiaFrench Southern and Antarctic LandsGabonGambia, TheGaza
StripGeorgiaGermanyGhanaGibraltarGlorioso
IslandsGreeceGreenlandGrenadaGuadeloupeGuamGuatemalaGuernseyGuineaGuinea-BissauGuyanaHaitiHeard
Island and McDonald IslandsHoly See (Vatican City)HondurasHong KongHowland
IslandHungaryIcelandIndiaIndonesiaIranIraqIrelandIreland,
NorthernIsraelItalyJamaicaJan MayenJapanJarvis IslandJerseyJohnston
AtollJordanJuan de Nova IslandKazakhstanKenyaKiribatiKorea, NorthKorea,
SouthKuwaitKyrgyzstanLaosLatviaLebanonLesothoLiberiaLibyaLiechtensteinLithuaniaLuxembourgMacauMacedonia,
Former Yugoslav Republic ofMadagascarMalawiMalaysiaMaldivesMaliMaltaMan, Isle
ofMarshall IslandsMartiniqueMauritaniaMauritiusMayotteMexicoMicronesia,
Federated States ofMidway
IslandsMoldovaMonacoMongoliaMontserratMoroccoMozambiqueNamibiaNauruNepalNetherlandsNetherlands
AntillesNew CaledoniaNew ZealandNicaraguaNigerNigeriaNiueNorfolk IslandNorthern
Mariana IslandsNorwayOmanPakistanPalauPanamaPapua New
GuineaParaguayPeruPhilippinesPitcaim IslandsPolandPortugalPuerto
RicoQatarReunionRomainiaRussiaRwandaSaint HelenaSaint Kitts and NevisSaint
LuciaSaint Pierre and MiquelonSaint Vincent and the GrenadinesSamoaSan MarinoSao
Tome and PrincipeSaudi ArabiaScotlandSenegalSerbiaSeychellesSierra
LeoneSingaporeSlovakiaSloveniaSolomon IslandsSomaliaSouth AfricaSouth Georgia
and South Sandwich IslandsSpainSpratly IslandsSri
LankaSudanSurinameSvalbardSwazilandSwedenSwitzerlandSyriaTaiwanTajikistanTanzaniaThailandTobagoTogaTokelauTongaTrinidadTunisiaTurkeyTurkmenistanTuvaluUgandaUkraineUnited
Arab EmiratesUnited KingdomUruguayUSAUzbekistanVanuatuVenezuelaVietnamVirgin
IslandsWalesWallis and FutunaWest BankWestern
SaharaYemenYugoslaviaZambiaZimbabwe
State State (Select Country First)
Password
Confirm Password
By checking this box, I agree with the terms of use and privacy policy By
checking this box, I consent to receive occasional emails from the *Related
sites and their partners. I understand that these emails will only contain
relevant information and that I can unsubscribe at any time. Submit



SIGN IN

Sign in Remember me Forgot username or password?  |  Create account


YOU MIGHT ALSO LIKE...

Free Webinar: Getting Started with Zephyr RTOS


ABOUT NATHAN JONES

I am an active-duty Army officer and instructor at West Point in the Department
of Physics and Nuclear Engineering. I have taught (or am slated to teach) "Cyber
Fundamentals", "Digital Logic", "Computer Architecture", "Basic Electrical
Engineering", and "Physics 1". I love building fun or useful electronic devices
and then teaching people how they work!





POPULAR POSTS BY NATHAN JONES

 * What does it mean to be 'Turing complete'?


BLOGS - HALL OF FAME

So You Want To Be An Embedded Systems Developer
Steve Branam



Introduction to Microcontrollers
Mike Silva



Important Programming Concepts (Even on Embedded Systems)
Jason Sachs



How FPGAs Work and Why You'll Buy One
Yossi Krenin



MSP430 Launchpad Tutorial
Enrico Garante



Arduino Robotics
Lonnie Honeycutt




FREE PDF DOWNLOADS


Bare-metal programming for ARM - A hands-on guide


Memory allocation in C


C++ Tutorial

All FREE PDF Downloads




QUICK LINKS

 * Home
 * Blogs
 * Forums
 * Quizzes!
 * Courses
 * Tutorials
 * Books
 * Free PDFs
 * Webinars
 * Code Snippets
 * comp.arch.embedded


ABOUT EMBEDDEDRELATED.COM

 * Advertise
 * Contact
 * Privacy Policy
 * Terms of Service
 * Cookies Policy


SOCIAL NETWORKS







THE RELATED MEDIA GROUP


Login

Email / Username
Password

Login
Create free account | Forgot password?
Email Address
Username
Password
Confirm Password
I agree with the terms of use and privacy policy.

Yes, I want to subscribe to your world famous newsletter and see for myself how
great it is. I also understand that I can unsubscribe VERY easily!


Back
Register