Software Engineering Body of Knowledge
computer.org
computer.org
The value for me, I think, will be this.
I'm an older (61) software engineer. A document like this can serve as a starting point for discussion in the software group of which I am a member. It can be something like a reference design for software practice within the group.
By reference design, I mean, something that the group considers or consults when discussing or designing how its own practices should be.
I'm thinking about facilitating some short (15 minute) discussions within our group to introduce the document and its contents, and then see if people think it would be worth our time to consult it when designing our own policies and procedures.
Thoughts?
For example it talks about design patterns but only in an abstract way, not what pattern could help you solve certain classes of problems (2.3.3).
Or API design, great that's a constant source of contention, again, nothing meaty to reference in a discussion either (2.4.1).
I'm probably grossly misunderstanding the purpose of that document. I was hoping it to be more similar to the OWASP cheat sheets [0] but more general.
That may be a bit much. It covers a lot (300+ pages just to identify and describe each area of study), and many people can and will go entire careers without needing to know about certain things, and be very effective software engineers (knowing more about compilers is useful in many ways, but by no means required to be an effective programmer in many areas).
I would say it's good for finding gaps in your knowledge in areas that you have contact with, and as a good syllabus if you are branching into something unfamiliar. Would a person be served well by reading through this entirely and at least having been exposed to certain topics once? Yes. Should they necessarily have studied every topic? No. The field is to wide to expect everyone to know everything. This helps with that though, since it lets people identify gaps in knowledge that are currently important that they can then research more.
Anyways, this doc is gonna be useful for me because while I took computer science & engineering as a major in college, I never ended up taking a course that taught me how to holistically look at software engineering as a discipline and all the terms that come with it.
All good stuff to ensure as a baseline for people working on projects you're on. Working with someone on a project that can't sort a requirement from a spec can be problematic.
I think it's a great read.
Analogous to this is the PMBOK which is required reading for PM certifications.
Areas of knowledge are certainly some kind of 'body', but the term always sounds to me like something you just keep adding more stuff onto the outside as you go, like a big snowball of ideas. And knowledge can become defunct, irrelevant, or disproven over time.
And there's something about the way it tries to sound almost authoritative, without claiming to be scientific.
People in the industry refer to the PMBOK ("Pimbock") pretty frequently. There are lots of people in big-time project management that disdain aspects of the PMI (including and especially the PMP certification, which is often re-named as "pretty much pointless"), but the PMBOK is a valuable document -- ESPECIALLY for people new to the field.
We could do worse, in software, than to emulate that particular success.
While that's not impossible, it must be noted other STEM organizations that predate the PMI have their own "body of knowledge" definitions, for example:
- https://www.nspe.org/resources/licensure/resources/professio...
I look forward to seeing the SWEBOK also improve over time.
Also, I'm not sure why some of the comments fail to acknowledge the benefit of having a collection of best practices intended to be tailored for each individual use case. That's what the PMBOK is and how it is used when used properly.
Perhaps, but couldn't we could do better instead?
There's already more than enough project management in software teams. Do we also have to emulate the all the turgid rules and mindless checklists that PM's use?
I suspect this is yet another attempt at forcing software engineering workflows into something that's more compatible with PM mentality. Or possibly to commoditize the practice of software engineering. IMHO, it's just a different kind of crack for some management consultants to offer to their c-suite clients.
Given how poorly most software teams are run, I do not think this is demonstrably true.
"Do we also have to emulate the all the turgid rules and mindless checklists that PM's use?"
Programmers have a terrible reputation for refusing to entertain anything outside the process of programming. This kind of comment is emblematic of that mindset.
OK, but one does not "fix" organizational problems by adding more layers of PM.
But I also have an immediate reaction to the term "body of knowledge" in the context of PM, which is to reinterpret it as "cargo cult." Hopefully they have something different in mind here, but that's often what it ends up as in practice.
https://www.pmi.org/pmbok-guide-standards/foundational/pmbok
True, but at the same time, old software is still around; if you can look up the terms and practices from 'back when' using an overview like this, or at the very least have enough broad knowledge to recognize what it is, you're already ahead.
I've only skimmed it (the PDF is linked elsewhere), but it looks like just the resource for a professor of software engineering and -design to have and become acquainted with - know a little about a lot of things, then go from there.
The software engineering world has a pendulum that swings between "strict process" and "just write code", and right now we're pretty far into the just writing code camp.
SWEBOK captures a lot of the push in the late 90s, early 2000s to make software engineering a licensed profession. Where most of the work would be done in UML diagrams and committees before any code was written. The thinking was that if the diagrams were thorough enough that the coding part would be trivial, almost like how blueprints are for building a house.
If the pendulum does swing back, let's hope those strict processes operate on code this time, instead of on silly code-adjacent time-wasting activities.
The point of separating documentation and code is that the assumption is that the documentation (design) is correct, having been reviewed and the code should implement it correctly, correctness being verified by review and testing.
Those strict processes should absolutely operate on code, but they are useless if they operate only on the code.
You can find the PDF via your favourite search engine.
[1] https://www.iiba.org/career-resources/a-business-analysis-pr...
[0] https://itabok.iasaglobal.org/itabok3_0/engagement-model-ove...
But his book reference is pretty good https://handbookofsoftwarearchitecture.com/books/
It's hard to see how even the most expert contributors and skilled editors could compress a whole industry of knowledge that much and end up with something useful. Inevitably, much of the specific knowledge presented in the Guide is simplified to the point of arguably being wrong, dated to the point of arguably being obsolete, or just missing the point altogether.
As someone else pointed out, this is only a "guide to" the field of software engineering. It does cite additional references as well (details in appendix C), though there are only 36 references supporting the entire Guide and some of them are old and of debatable relevance to modern software development. This edition of the Guide is nearly a decade old now, so it obviously doesn't include references to good books that have been published more recently and adopt a more objective, evidence-led style when discussing which modern practices actually work that was sorely lacking in most books from a decade or two ago.
In particular, it feels like it targets that stage of problem solving where I've defined my problem and am looking for prior art, but am having a trouble searching simply because I don't know what the people who previously met this problem called it.
For this particular step of problem solving a very broad, very shallow general outline of the whole field, or even just a glossary of terms that tries to cover the whole field, feels like just the tool for the job.
I don't see anything wrong with that book. It is covering very broad scope and maybe if you would want to know why building software is complex and you don't have any knowledge in the topic that would be a good starting point.
Like if you would be an owner of a gym chain and because of current situation you would like to start software company. This could give you an idea why it is not just having "an app idea" and why those pesky developers demand so much money.
I like this part in the book:
Most people are limited in their ability to hold complex structures and information in their working memories, especially over long peri- ods of time. This proves to be a major factor influencing how people convey intent to com- puters and leads to one of the strongest drives in software construction: minimizing complex- ity. The need to reduce complexity applies to essentially every aspect of software construction and is particularly critical to testing of software constructions.
I'm currently writing a series of e-books with a similar goal: https://www.dev-concepts.dev/table-of-contents
Being aware of ideas, concepts & terms helps a ton to create clear mental models, find solutions more efficiently and reduce tunnel vision (e.g., John Doe works on back-end and thinks that front-end development is simple/easy).
Of course a single book, cannot explain all that much, but I really feel like it's possible to share the main ideas, explain the jargon, what matters and why, what to pay attention to, etc. Readers gain a rough understanding of various ideas, and can come back for more if/when they need to dive into other subjects.
I'm eager to get opinions/ideas about this.
Software.
I ran into DMBOK just a few days ago when trying to figure out how to level up my schema-design skills.
It sounds potentially useful as a map breaking down which directions to research in, but based on my research DMBOK also seems potentially much broader and shallower than what I need if what I'm really interested in is just the data modeling / data implementation slice.
SWEBOK doesn't doesn't appeal as much to me personally right this moment, because my software engineering foundation already feels secure. DMBOK and PMBOK on the other hand feel more potentially interesting because they cover adjacent fields, so they feel like they'd be helpful in giving me hooks to grow towards being a "T-shaped" expert.
DMBOK in particular sounds intriguing because my company and team are running into more and more data scalability and queryability challenges. I'm no stranger to day-to-day data modeling and schema building as it applies to webapps, but data modeling is something I've never had any formal training in, so I suspect my solutions tend to be only naively mature. I'm probably currently sitting in the Dunning-Kruger valley of data modeling.
At the same time, DMBOK is intimidating because it's only available as a giant paper tome. I am a minimalist and am worried about the space on my bookshelf.
I'd appreciate any impressions you can give if you've used it in the past. Curious about the other DAMA publications as well.
It can be a nice exercise to read through it with a group at your company. Have people relate to what is stated in the book to create actionable goals.
Can you speak to your specific situation at the time and any specific takeaways?
More nitty-gritty... any suggestions for how to read through as a group in remote work? Feels like the only way might be to get each person a copy...
Every meeting started with five minutes of writing on post-it notes how the contents of the chapter related to us (6-10 people in each meeting). Each person then put their post-it notes on a whiteboard. We had several categories to put the notes into (like "good"/"bad"/"how to apply"). This encourages people to read as they need to actively participate and contribute in the discussion. However, this book is not for everyone, some will definitely find it boring and dry. I think it is more fun the deeper you are involved in data related issues.
The end of the meeting consisted of us summarizing the results to see if people were experiencing the topic similarly. We had several stakeholders in the reading group and they were from different siloes in the enterprise. It was nice to see that a lot of the experience was shared and there was general agreement regarding feedback.
One memorable takeaway was the realization that we needed a data dictionary. That eventually led to a pilot project.
I like the idea of having a body of knowledge, but given the loose definitions above, I'm not sure this is useful or practical beyond documenting some potential best practices/techniques.
The IT field has expaneded since then. So your point is kinda right: I don't think SWEBOK covers mobile or ML fields well, for example. But there is a still some value to cover traditinal software engineering field, as it still exists and it's not that small.
The Career Programmer: Guerilla Tactics for an Imperfect World (Expert's Voice) https://www.amazon.com/dp/1590596242/ref=cm_sw_r_cp_api_glt_...
Published in 2006, it feels like it was written for a mid-90s world of waterfall process and shrink-wrapped software (6-month death marches to immovable ship dates). No mention of agile methods or the idea that web applications might be developed and deployed differently. It plays upon Dilbert-esque stereotypes of managers and marketing folks, and assumes a 100% adversarial relationship between the brilliant programmers and everyone else.
Maybe I've just been lucky, but this isn't at all representative of the world I live in. I guess I'm fortunate not to have to adopt such a cynical worldview as the author.
Then again, don't take my word for it, I only read half the book before I put it back into the huge stack of unread books next to my desk.