News for hackers. Stuff that matters.
Re:Books I recommend to my software engineering students by hardwaregeek on Thursday April 23, 2020 @08:18PM (#22963224)
I've advocated for a "canon" of books for software engineering and computer science that could be taught in school. The canon would accomplish several goals: it'd inform students about the less technical but profoundly important ideas within CS (Brooks' No Silver Bullet, The 10x cost incurred when moving from stage to stage in waterfall, how to treat and manage failure, etc.), it'd teach students how to think about problems (How To Solve It by Polya, The Design Of Everyday Things), and it'd provide history/culture (Coders At Work, Soul of A New Machine). One should, of course, learn how to program in a CS major. But there's diminishing returns on teaching programming in a class; ultimately students must make the shift from learning in class to teaching themselves. Perhaps teaching more of the "soft" aspects of CS would give better returns, especially as the students move up the ranks and start managing people.
Re:Books I recommend to my software engineering students by JamesBarney on Friday April 24, 2020 @02:59AM (#22965377)
I disagree.

I think books on software management and process are mostly lost on someone who hasn't been involved in the process. (Hell many of those books are lost on project managers)

I think the most important subjects to teach students are javascript, css, & sql (or mongo). Before you teach a beginner wood worker the "Zen of wood" you teach them how to cut a piece of wood without sawing off a finger.

The rest will come later.

Re:Books I recommend to my software engineering students by pjmorris on Friday April 24, 2020 @02:33PM (#22971481)
> I think books on software management and process are mostly lost on someone who hasn't been involved in the process.

I think that's true and fair. However, once some experience has been acquired, I believe it's helpful to evaluate whether it's good experience or bad experience. Comparisons against the literature can be helpful at that point. Case in point: I tried reading 'The Psychology of Computer Programming' in college, but it didn't make much sense to me. Coming to it 15 years later, I realize it'd have been the perfect companion to my first five years in industry, naming and describing problems I'd faced and solutions that only came through experience more painful than reading.

Re:Books I recommend to my software engineering students by _hardwaregeek on Friday April 24, 2020 @02:19PM (#22971313)
Interesting counterpoint. I kind of agree that these books will be lost on people (although I believe I got something out of them and I'm early into my career). But I'm also thinking of it as providing early exposure so that if the students need guidance later on, they know where to visit. Much as high school students find the classics boring, but upon revisiting them later in life, discover their brilliance.

I agree that you should teach the practice. My ideal education would be co-ops combined with a reading course or two on the canon.

Re:Books I recommend to my software engineering students by MamaJumba on Friday April 24, 2020 @07:09AM (#22966746)
Any books to recommend for the topics you mentioned? Especially sql or mongo.
Re:Books I recommend to my software engineering students by pjmorris on Friday April 24, 2020 @02:29PM (#22971440)
I really liked 'The Art of SQL', Stephane Faroult
Re:Books I recommend to my software engineering students by rendall on Friday April 24, 2020 @03:06PM (#22971771)
Mongo has a series of online courses
Re:Books I recommend to my software engineering students by billfruit on Friday April 24, 2020 @12:40AM (#22964706)
I'm kind of bothered by a lack of rigour and science in general software engineering disciplines. The vast majority of decisions seems to be made subjectively that any objective criteria. Also industry is very bad at documenting it's processes and experiences to the community, most documents if any are available to the company internally only.

Also detailed histories of the devdlopment of large and complex software needs to be written and studied, but I just don't see it happening.

Re:Books I recommend to my software engineering students by afpx on Friday April 24, 2020 @09:02AM (#22967482)
I wish I had more time to do that. I work at a feature factory.
Re:Books I recommend to my software engineering students by RMPR on Friday April 24, 2020 @02:16AM (#22965194)
At least for the written part there's the "Architecture of open source applications" series.
Re:Books I recommend to my software engineering students by janee on Thursday April 23, 2020 @11:34PM (#22964368)
I always thought a history book dedicated to snippets of old code or software problems that has a story to tell could be interesting.

E.g. explaining an interesting or significant software problem and it's surrounding environment from each decade for the last 7 or so decades.

Re:Books I recommend to my software engineering students by Tomis02 on Friday April 24, 2020 @02:45AM (#22965304)
> The 10x cost incurred when moving from stage to stage in waterfall

This seems to be a common falsehood propagated by Agile consultants and swallowed whole by an industry that doesn't know any better.

It doesn't look like the waterfall model was ever used on a significant scale; not as far as I remember, anyway.

https://softwareengineering.stackexchange.com/a/139107

Re:Books I recommend to my software engineering students by commandlinefan on Friday April 24, 2020 @10:02AM (#22968027)
> It doesn't look like the waterfall model was ever used

Well - yes, it was used, and still is: it's the default if you're not careful or if you don't think very hard or realistically, or are very naive. The confusion is that is was only given a name to disparage it: W. Winston Royce observed that the way most people managed software projects was completely unrealistic and didn't take into account changing requirements. He called it "waterfall" as a way to underscore how inflexible the default "write down all the requirements, then write down how long they're going to take, then do them in that amount of time" approach was.

Unfortunately, most people who adopt what they refer to as "agile" processes are still stuck in that same mindset; they think that, by having daily standups, putting in JIRA tickets, and referring to every two weeks as a "sprint", they'll somehow meet the project manager's pipe dream of 100% predictable software development schedules.

Re:Books I recommend to my software engineering students by Jtsummers on Friday April 24, 2020 @10:55AM (#22968594)
Royce didn't set it up to disparage it. He set up his idealized flow and then proceeded to add details that he believed were critical to making it work. In the end, what he proposes is what most people understand to be Waterfall but with some extra details:

- Feedback loops (because problems or deficiencies will arise)

- Involving the customer (because you don't want to spend 12-60 months building the wrong thing)

- Build a prototype (good advice)

- Document, document, document (he thinks 1500 pages is a good target)

The only thing practitioners seem to have taken away is that last bullet. He still made a strong distinction in his model between analysis, design, and implementation. Though, to be fair, at the time "programmer" was more of a technician level and design often involved making detailed designs like flowcharts and such that could be more easily translated into code. These days, design and implementation are really tangled up, and the documentation is awful an non-actionable (I've been on those teams, it's nightmare inducing). People think prose can replace a diagram, so they fill out their 1500 page quota with lots of words but no clarity.

The name came later, and was enshrined in a DOD standard by people who couldn't read past the first few pages. So they entirely missed the lessons learned he was trying to apply to it.

Re:Books I recommend to my software engineering students by jimbob45 on Friday April 24, 2020 @03:02AM (#22965393)
Agreed. Pure waterfall has become a strawman for the Agile zealots. Realistically, Waterfall is used as one component of the overall design and implementation process.
Re:Books I recommend to my software engineering students by Jtsummers on Friday April 24, 2020 @09:28AM (#22967706)
The waterfall model is definitely used at scale in DOD projects. It is as horrifying as it sounds.
Re:Books I recommend to my software engineering students by pjmorris on Thursday April 23, 2020 @08:56PM (#22963482)
'The Pragmatic Programmer', Hunt and Thomas
Re:Books I recommend to my software engineering students by GrumpyYoungMan on Thursday April 23, 2020 @10:13PM (#22963948)
Definitely needs DeMarco and Lister's "Peopleware".
Re:Books I recommend to my software engineering students by kohtatsu on Friday April 24, 2020 @01:45AM (#22965039)
I'd like to plug Responsive Communication.

It's available entirely online here http://www.ankn.uaf.edu/curriculum/AxeHandleAcademy/rc/50pat...

It was written in 1986 by the linguist Ron Scollon and his wife Suzie.

I found a paper copy on a free-book shelf outside a thrift store, and consider myself blessed to have stumbled upon it.

Re:Books I recommend to my software engineering students by pjmorris on Thursday April 23, 2020 @08:54PM (#22963466)
I agree with the idea of a canon for software engineering, probably more as a living, shifting document than as something set in stone (except, maybe, MMM, which seems perennial.)

I'm going to try an experiment, posting five books I'd put on the list, one per comment. Downvote, upvote, add your own if you like the idea.

Re:Books I recommend to my software engineering students by tjr on Thursday April 23, 2020 @11:32PM (#22964359)
Would suggest also The Inmates are Running the Asylum, and for history/culture, the Jargon File.
Re:Books I recommend to my software engineering students by pjmorris on Thursday April 23, 2020 @08:55PM (#22963469)
'The Mythical Man Month', Fred Brooks
Re:Books I recommend to my software engineering students by FigmentEngine on Friday April 24, 2020 @03:48AM (#22965631)
its shown in the main photo at the top of the article?
Re:Books I recommend to my software engineering students by harimau777 on Friday April 24, 2020 @09:26AM (#22967693)
I'd add the "Elegance is not Optional" essay from the preface to The Art of Prolog.
Re:Books I recommend to my software engineering students by falsissime on Saturday April 25, 2020 @04:23PM (#22981144)
You probably meant The Craft of Prolog by Richard O'Keefe. The preface of the Art of Prolog is about David H. D. Warren's recollections of his first encounters with Prolog.
Re:Books I recommend to my software engineering students by harimau777 on Sunday April 26, 2020 @08:10PM (#22991576)
Good catch! Thanks for pointing that out!
Re:Books I recommend to my software engineering students by voicedYoda on Thursday April 23, 2020 @09:20PM (#22963629)
Design Patterns by Gamma, Helm, Johnson, and Vlissides (aka GoF)
Re:Books I recommend to my software engineering students by crimsonalucard on Thursday April 23, 2020 @09:31PM (#22963700)
I still don't understand why people worship this book. Contrary opinion here but I think this book is actually below average.

I think it's good that it introduces the overall concept of Design patterns, but the book itself isn't really about the general concept of Design patterns.

The book is focused on OOP techniques and tricks. It makes the assumption that OOP is the most general way to modularize things and think about computation and design.

Additionally a lot of the "patterns" aren't actually good, they're actually really bad. Many of the patterns introduced by this book actually increase complexity of a program while giving only an illusory sense of increased modularity and reuse-ability.

Re:Books I recommend to my software engineering students by bob818 on Thursday April 23, 2020 @11:55PM (#22964464)
Yeah, I hated that book. I didn't really understand it. Then I read "Head First Design Patterns" and it clicked. I went back to the Gamma book and now it makes sense, but not as a first book on Design Patterns.
Re:Books I recommend to my software engineering students by rfrey on Thursday April 23, 2020 @11:34PM (#22964367)
The book didn't introduce people to design patterns, it invented the concept within the discipline of software programming.

Perhaps one needs to have been in industry before and after this book to appreciate how it introduced a common vocabulary, a mechanism for documenting and sharing experience, and a framework for thinking about common problems.

Re:Books I recommend to my software engineering students by pfranz on Friday April 24, 2020 @12:03AM (#22964491)
I agree with the first reply that the book is overrated. While it's not irrelevant, I wouldn't think it fits into a "must read" list for people learning software engineering. I often hear, "Head First Design Patterns" as a better reference if you're interested in design patterns. I own the GoF book, but have thumbed through Head First and am inclined to agree.

What I think is missing is the idea that design patters are often language smell. They're common patterns to compensate for deficiencies in the language. The GoF is most applicable to C++ code that uses a lot of OOP. Like the previous reply said, reaching for these patterns too quickly complicates things. Like using unnecessarily large words when simpler language would suffice.

Re:Books I recommend to my software engineering students by bryanrasmussen on Friday April 24, 2020 @01:36AM (#22964978)
The first expression of a concept is not necessarily the best or most useful expression. As such the book can be the first expression of the concept of Design Patterns and be worthless as a lasting text.
Re:Books I recommend to my software engineering students by crimsonalucard on Thursday April 23, 2020 @11:56PM (#22964468)
>The book didn't introduce people to design patterns, it invented the concept within the discipline of software programming.

By introduced I mean, introduced to the world for the first time. Invented is debatable concept as in was math invented or discovered? I avoid that debate by using the word "introduced."

>Perhaps one needs to have been in industry before and after this book to appreciate how it introduced a common vocabulary, a mechanism for documenting and sharing experience, and a framework for thinking about common problems.

Humans invent vocabulary for everything that they do, giving patterns names is inevitable. I would hardly call it revolutionary. This book just gave the concept of naming patterns a meta name in itself: "Design patterns." I think it's good that this was given a name but its importance is largely exaggerated.

Case in point: Other disciplines of programming don't use the term "Design patterns" or formal pattern names that frequently. In fact, technically, there are tons and tons of "Design patterns" in procedural programming, declarative programming and functional programming, yet experts in these respective fields don't feel the need to give these concepts over-inflated and complicated nomenclature.

Take currying for example. Functional programmers don't call it the "Curry pattern" nor do they refer to it as a design pattern (even though it technically is). A name just arose naturally. No need to give the concept of naming concepts another word.

To take the illustration even further, imagine driving techniques. Should I give the concept of naming driving techniques some name to exaggerate its importance? Perhaps I can, I'll call it: "Vehicular Translation patterns." And instead of talking about cars using regular English like a normal person I'll just communicate like this: "Execute the drift pattern in composition with the slide pattern and inverse throttle pattern to maneuver through that turn." Talking like this helps me sound smarter while obfuscating communication to the point where it can only be understood by a select few. The book design patterns introduced to the programming world what could potentially be done for driving as well. Needless to say, if it's pointless to do this for driving then does that mean it's pointless to do for programming? In my opinion the answer to that question is, "Yes."

In short, use english for most concepts and name things only where it matters and as it comes naturally. No need to invent an entire discipline and inflate it with made up epistemology.

I realize race car driving does have it's own nomenclature but it's not over used to the extent of design patterns nor did they feel the need to give the nomenclature it's own nomenclature (vehicle translation patterns, VTS theory for short)

Re:Books I recommend to my software engineering students by derangedHorse on Monday April 27, 2020 @06:39AM (#22994599)
Currying is a bad example, as that was a concept in mathematics before it was a software engineering concept. Also defining a vocabulary is no trivial feat. Most of software engineering is deciding what definitions for architectures, modules, and interfaces should be used to make software systems most efficient and maintainable (in a way creating a vocabulary upon a specific domain)
Re:Books I recommend to my software engineering students by crimsonalucard on Monday April 27, 2020 @09:47AM (#22995754)
Why does that make it bad? I could call it Mathematical Lambda Patterns. MLP for short and put currying under it.

Or I could just call it english vocabulary within the field of mathematics.

Every single thing you said could be done without the usage of the word "design patterns" and is already done without meta awareness of itself in all fields of engineering, science and anything.

If I were to build a house is there not a language for "architectures, modules, and interfaces" used to make houses more efficient and maintainable? Also it would be (in a way creating vocabulary upon a specific domain)

The difference is for physical architecture it's missing the pompous self importance. It does not need a name for itself. Imagine if it was called "Structural Language Patterns," and every concepts was suffixed with the word "Structual pattern."

You will note "design patterns" is actually derived from physical architecture but physical architecture does not go overboard and give itself a name other than "English Vocabulary" and attempt to communicate with big words where English will make more sense.

Re:Books I recommend to my software engineering students by specialist on Friday April 24, 2020 @12:28AM (#22964644)
Design Patterns gave us the vocabulary and opportunity to argue about design for a previously ignored level of abstraction.

Source: started design patterns study group, still active today.

Re:Books I recommend to my software engineering students by crimsonalucard on Friday April 24, 2020 @12:43AM (#22964713)
Re:Books I recommend to my software engineering students by specialist on Friday April 24, 2020 @12:00PM (#22969459)
The value of Design Patterns is the shared vocabulary. Abuse of words, grammar drives me nuts too.

But older me now understands every generation goes thru a phase where they think they newly discovered sex.

When I asked my then teenaged son the difference between "emo" and "goth", he informed me that "goth" is for old people.

Re:Books I recommend to my software engineering students by crimsonalucard on Friday April 24, 2020 @12:04PM (#22969516)
>The value of Design Patterns is the shared vocabulary.

English is shared vocabulary. What is the point of "design patterns" when you can already define a word for a pattern in english.

My argument is design patterns is 100% the abuse of words.

Re:Books I recommend to my software engineering students by specialist on Friday April 24, 2020 @12:18PM (#22969718)
Would you rather argue the precise meaning of words or discuss the nugget of an idea that someone needs your help articulating?
Re:Books I recommend to my software engineering students by crimsonalucard on Friday April 24, 2020 @12:38PM (#22969996)
Examine the two actions below:

   Given a concept, I name that concept "Gloop" and make it part of a defined word in the "English Language."

   Given a concept, I name that concept "Gloop pattern" and make it part of a defined word in "Design patterns."
Both actions have the potential to fulfill either goal you describe above depending on the definition(s) of gloop and "gloop pattern."

Independent of the definitions or assuming both mean the same thing, the two actions are one in the same. There is no benefit of using one technique over the other.

Let's give you another angle: Defining a term under the umbrella of "Design patterns" doesn't make that definition any more precise than if you defined that term under the umbrella of the english language. There is no difference period.

Design patterns is shared vocabulary. English is also shared vocabulary. But the words "Design Patterns" is part of the "English Language." By creating the term "Design patterns" in the "English Language" you are essentially recursively adding complexity to the english language by defining a redundant concept in the same concept.

Just use english. Define the pattern in english, there is no need to define the pattern in "Design patterns."

Additionally, many patterns are better described with existing english words. Why use Facade pattern, when you can just say Object wrapper. The word "Design patterns" inserts a sort of false formalism and elitism into what is essentially just creating new vocabulary in the english language. The claim I'm making in this paragraph is that while yes it's good to have some formal nomenclature, it's excessive to give all of these patterns their own names. Let the naming and the definitions flow naturally.

Other fields of programming have patterns but they don't try to turn these patterns into some kind of theoretical field with it's own nomenclature. Currying is just currying nobody calls it the "Curry pattern". Recursion is just recursion, nobody calls it the "Recursion pattern."

Re:Books I recommend to my software engineering students by specialist on Friday April 24, 2020 @01:31PM (#22970736)
I think you would have loved our study group. Especially the early years.

My personal position on the value of the art of namings, eg Facade, Proxy, Wrapper, Adapter, was somehow capturing the author's original intent. As distinct from the implementation. How it's meant to be used.

Lofty sentiment coming from someone condemned to decades of code maintenance.

Professionally, methinks design patterns, and their misuse, has been mostly detrimental. Maybe because the notions were taken too literally, treated prescriptively rather than descriptively.

Calling everything a Decorator. When it's actually a Chain of Command. And when you try to patiently explain the evils of silent failures, buried deep in the levels of indirection, to the "senior architect" author, that same architect insults your intelligence and walks off.

The mere utterance of Factory and Singleton in public somehow empowering legions of noobs littering entire organizations (and libraries) with innumerable implementations.

Trying to debug something called a "Write thru Cache" when its anything but.

Etc.

Re:Books I recommend to my software engineering students by ryanisnan on Friday April 24, 2020 @12:51AM (#22964763)
A very good pattern book that I've found to be incredibly well written is Robert Nystrom's Game Programming Patterns. I'm a huge pattern advocate, and have consulted the Gang of four pattern book many times, as well as Christopher Alexanders' A Pattern Language. Still, Nystrom presents some new patterns with very concrete examples. Even though they are presented within the domain of game development, with a little creativity their utility can be imagined elsewhere.
Re:Books I recommend to my software engineering students by endgame on Thursday April 23, 2020 @09:57PM (#22963856)
History and culture is under-taught and under-appreciated. Maybe students can have a big debate in their third year about whether or not worse really is better?
Re:Books I recommend to my software engineering students by pjmorris on Thursday April 23, 2020 @08:58PM (#22963492)
'Code Complete', Steve McConnell
Re:Books I recommend to my software engineering students by derangedHorse on Monday April 27, 2020 @06:41AM (#22994614)
I would recommend Clean Code over this one. Code Complete isn’t bad, but I feel like it’s filled with things most junior programmers already know
Re:Books I recommend to my software engineering students by pjmorris on Thursday April 23, 2020 @08:55PM (#22963472)
'Becoming A Technical Leader', Gerald Weinberg
Re:Books I recommend to my software engineering students by Jtsummers on Thursday April 23, 2020 @10:07PM (#22963918)
I probably ought to read this one. I got on a Weinberg reading kick after reading some recommendations here a few months before his death. The one I particularly liked was The Psychology of Computer Programming. While dated in many ways (like MMM), it has a lot of interesting ideas and discussion about the structure and behavior of people and teams (regardless of discipline, though he was writing about programmers). I actually have a quote that I've kept in my office IM for a while that is a paraphrasing of Fisher's Fundamental Theorem [0]:

  Fisher's Fundamental Theorem states—in terms appropriate to
  the present context—that the better adapted a system is to a
  particular environment, the less adaptable it is to new
  environments.
The theme of that quote kept coming up, I presume deliberately, in many of the later chapters.

[0] https://en.wikipedia.org/wiki/Fisher%27s_fundamental_theorem...

Re:Books I recommend to my software engineering students by pjmorris on Friday April 24, 2020 @09:19AM (#22967628)
You might also find Weinberg's 'An Introduction To General Systems Thinking' of value. Weinberg was heavily influenced by general systems theory, as illustrated by referencing Fisher, and he wrote the book as a way to introduce others to that line of thinking.
Re:Books I recommend to my software engineering students by gmassman on Friday April 24, 2020 @01:07AM (#22964832)
Isn't that why most people use Docker nowadays?
Re:Books I recommend to my software engineering students by pjmorris on Thursday April 23, 2020 @08:57PM (#22963485)
'Making Things Happen', Scott Berkun