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
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: login — POST /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> | <a href="/register.php" class="green smallbold">Create account</a></span>
</form>
Name: login — POST /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