11 ms·
The author says he bought these books: The Pragmatic Programmer Clean Code The Clean Coder Domain-Driven Design Growing Object-Oriented Sof
by bad_user 8y ago
The author says he bought these books:
The Pragmatic Programmer
Clean Code
The Clean Coder
Domain-Driven Design
Growing Object-Oriented Software, Guided by Tests
Continuous Delivery
Not to curb anybody's enthusiasm, however these are soft-skill books.
I've read The Pragmatic Programmer on a 10 hour flight and I fell asleep 2 or 3 times, because it was freaking boring. Beginners might get some value out of it, but it's all common sense stuff that you learn in the first couple of months on the job.
Everybody has some of these books in their bookshelf, including other classics such as the Art of Computer Programming. What I find interesting is that few people read these books, either because they are boring (the soft-skill ones) or because they are really hard to follow (AOCP), but keeping such books in your bookshelf is like a rite of passage. You can't call yourself a programmer if you don't have a couple of programming books in your bookshelf that you've never read :-)
To switch from framework learning to soft-skill books doesn't feel like much of an upgrade. If you want to learn something with long lasting value, learn actual computer science.
This means algorithms and math.
It also means exposure to paradigms like functional programming, or logic programming. I recommend Haskell, not because you need to learn yet another language, but because the knowledge ceiling in its ecosystem is really high and it's the current lingua franca for papers on functional programming.
Also some technologies are longer lasting than others. POSIX for example is still with us. The architecture of CPUs has evolved, but the basics of how a CPU processes instructions and accesses memory are the same. Frameworks and libraries come and go, but the fundamentals of concurrency, parallelism, asynchrony remain the same. Etc.
- Quarrelsome 8y ago> but it's all common sense stuff that you learn in the first couple of months on the job. The code I have had to deal with suggests that almost nobody learned "its just a view" during the decades of WinForm development. Its all very well that you're clever and the book low-balled you but don't overestimate the average developer. > This means algorithms and math. It also means exposure to paradigms like functional programming, or logic programming. Ah, your religion. I forgot how often we do algos in our day job. We glue just as much if not more and while its nice to be able to the rock the maths and algos you're not offering better advice here than the OP IMO.
- mdpopescu 8y agoYes, a lot of comments suggest most people appear to work with these paragons of programming. I have seen methods with a cyclomatic complexity of over 200 (the tool actually gave up at that point so I don't know the real number), so maybe I have an affinity to companies where "don't use global variables" is still strange advice. Also, it seems that you've been shadowbanned for about four months. Apparently you annoyed someone here.
- hinkley 8y ago“But it’s not global! I put it in this object [that is global]” Heard at least twice, and at different jobs.
- tracker1 8y agoSimilarly to static variables (globals), threading and race conditions, and/or using really ineffective structures as a caching layer.
- bobwaycott 8y agoOut of curiosity, how do you know a person has been shadowbanned?
- icebraining 8y agoIn your account page (https://news.ycombinator.com/user?id=bobwaycott https://news.ycombinator.com/user?id=bobwaycott) you have the "showdead" option, which lets you see dead comments. You can then look a user's comment history by clicking on their nickname and on "comments". Shadowbanned users are those for whom all comments are automatically dead.
- bobwaycott 8y agoAh, gotcha. Thanks!
- 8y ago
- JustSomeNobody 8y agoMy suggestions would be Programming Pearls 2nd Ed and The Practice of Programming. Classics, for sure, but so much good in them it'll make any programmer better for having read them.
- mattferderer 8y agoI agree that learning algorithms is underrated & helps you out with many aspects in life. I can't tell you how often I'm sorting something with someone (like Christmas ornaments) and want to explain the fastest route to sorting them. I don't believe those books are all common sense though. They capture excellent ideas on working with your team, managing projects & writing your code in a way that is easy for people to understand months & years later. Those skills make up the majority of a lot of developers days. They're also not that common. -Edit - I can't recall any of those books discussing patterns, which the post author mentions a few times are worth learning. I would highly agree in the value of learning patterns. One of the many patterns books for sure should be mentioned.
- umvi 8y ago> I can't tell you how often I'm sorting something with someone (like Christmas ornaments) and want to explain the fastest route to sorting them. I'm imagining you using quicksort to sort ornaments, but then I started thinking that sorting algorithms aren't as helpful in real life as they are with computers because your brain can comprehend "the big picture" and do precision swaps or innovative transformations that a computer wouldn't know to do. For example, say you need to slide some wooden blocks into a long slender box. The blocks have letters of the alphabet on them, and you want to load them such that z is in the very bottom and a it at the very top. You arrive at the table and you see the blocks are sorted - but in the reverse order. You could use a sorting algorithm to optimally correct this, or you could just flip the box over and load from the other side...
- JeremyBanks 8y agoGiven that the constant factors are so much larger and the number of items relatively small, we're unlikely to start really hitting the theoretical asymptotic complexities of sorting algorithms in these scenarios. But for what it's worth, like much real-world data, this sounds like a good fit for Timsort: https://en.wikipedia.org/wiki/Timsort https://en.wikipedia.org/wiki/Timsort It probably benefits from having a lot more sequential access than random access; the physical world is even more punishing than a processor cache.
- Swizec 8y ago> If you want to learn something with long lasting value, learn actual computer science. Correct. And if you want to advance your career, learn soft skill books. Real world software engineering, the kind that pays solid money, is 70% managing emergent complexity, 20% navigating human relationships, 7% coding, and 3% computer science. Unless you can be a unicorn[1]. Then always be a unicorn. [1] right now a unicorn is someone who can develop bleeding edge self-driving and other AI-ish algorithms. That's 70% computer science and 30% human stuff to be able to put yourself in a position where someone realizes you are the unicorn they want.
- JustSomeNobody 8y ago> ... and 3% computer science But getting a job is 90% CS based on all the LeetCode interviews companies give.
- tonyedgecombe 8y agoBizarre isn't it.
- lclarkmichalek 8y agoEasiest way to not get an offer is to be an ass in the soft skills interview.
- JustSomeNobody 8y agoThat's the remaining 10%...
- zerkten 8y agoThis unfortunately runs counter to common sense and the OP. I think the OP is trying to encourage a broad and deep understanding of CS, even if they don't see the value in "soft skills". The culture of programming interviews seems to encourage a lot of folks to ignore soft skills and focus on CS only to point where it helps getting past an interview. That doesn't help anyone, but how will we ever change the industry?
- 8y ago
- yters 8y agoI've noticed a lot of these "soft skills" seem obvious when stated out loud, but are rarely followed. The technical skills are important too, but we engineers tend to get lost in the weeds.
- taeric 8y agoBecause most soft skills are to be applied in a very tailored way. Not prescriptive, per se.
- blueboo 8y agoQuite. Skilled engineers are making the right decisions 90%, 95% of the time when it comes to these soft-skills of design and architecture. But it's that 5% error-rate that builds the technical debt that the project inevitably has to pay down. And if too many contributors have too-high an error rate, the wheels come off, design intent is abandoned, and mystical approaches become de rigeur (a la "This code doesn't do anything but it crashes if we remove it!") Crucially, decreasing that error-rate has a disproportionate benefit on how sustainable the things you build are. The rock-solid tech lead isn't going to shock you with her choices. In fact, she'll probably bore you by erring on the readable and easy-to-understand side of things. Eking out that 1% improvement really does take reading these books, thinking about them, thoughtfully trying to engage with them in your own work. So much effort for such a small improvement -- but this small improvement in one's own skills pays off exponentially in the work.
- cheapsteak 8y agoCould you clarify what you mean by "soft-skill"?
- unethical_ban 8y agoI assume they mean things like * Thinking like a programmer * Planning projects * Working with others * Time and project management * Setting up your environment etc.
- beat 8y agoYeah, all those things that are unimportant until you have to work with other human beings.
- unethical_ban 8y agoCPR is important, but I don't want to read about that when I'm taking a course on hiking and camping.
- dkonofalski 8y agoMore high-level skills like "people" skills, "conversation" skills, and things like that. They're not specific to individuals or individual languages but are general and more about concepts rather than specific examples.
- cheapsteak 8y agoPeople skills and conversation skills are also what I typically associate with "soft skills", but it doesn't seem to make sense when applied to (maybe half of) those books?
- ska 8y agoYes, the poster is using "soft skills" in an idiosyncratic way.
- taeric 8y agoAgreed to a point. But please give AOCP a try. It is much more readable than it is given credit for. So is SICP.
- jimmaswell 8y agoI've never owned a single physical programming book and I've been doing this around 10 years. The internet is more than sufficient.
- InGodsName 8y agoI don't need a book to learn Vue but learning React, Rails, Aspdotnet core needs a book. Timeline of features is usually lost when reading about them online. A book can present better timeline and overview of what all things are available in a framework.
- jimmaswell 8y agoOnline guides were entirely sufficient when I learned Rails and ASP.NET a while ago. There's no special property of dead trees and ink that makes it more suited to delivering information.
- mixmastamyk 8y agoMay be ebook or .pdf or some online. The point of a book is to dig deeper.
- InGodsName 8y agoI read pdf sir, never waste a tree when u can! There are experienced people writing books and people are even paying for them. Surely, they do have smth worth mentioning in a book.
- kyberias 8y agoHave you considered that during those 10 years you might not have learned much?
- jimmaswell 8y agoNot as much as the extremists but a decent amount. 10 years ago being first introduction to programming some time in K-12 to now: besides what you learn in a CS degree, I've made significant contributions to Unity3D games including networking code on the one that's an MMO, wrote emulators, wrote a graphical IDE with a custom assembler for NES games, made some HTML5 games like a recreation of the Windows 95 maze with Three.js, and now in the professional world I've learned a lot about a certain CMS and taken a decent amount of online courses provided at work for professional advancement, such as one on R. I'm personally satisfied with the breadth and depth of what I've learned, especially given I have other hobbies.
- Zelphyr 8y ago> This means algorithms... I'm curious what people consider the best books and/or online resources on computer algorithms are?
- lclarkmichalek 8y agoCLRS is solid.
- Zelphyr 8y agoWhat does that acronym stand for?
- lclarkmichalek 8y agoAuthor names: https://en.wikipedia.org/wiki/Introduction_to_Algorithms https://en.wikipedia.org/wiki/Introduction_to_Algorithms
- Zelphyr 8y agoOur use of acronyms is getting out of hand.
- mkl 8y ago"Introduction to Algorithms" is a pretty common title, so CLRS seems to be how it's universally known. It's (for me) the top hit on Google and Duck Duck Go. I haven't read it yet myself, though I've probably seen it recommended 100+ times.
- diminoten 8y ago> I've read The Pragmatic Programmer on a 10 hour flight and I fell asleep 2 or 3 times, because it was freaking boring. Beginners might get some value out of it, but it's all common sense stuff that you learn in the first couple of months on the job. In absolutely no way is this true, and if this is your view, you need to take a hard look at your future as a software engineer, which to be honest I'm not even sure you've ever been paid to write software with other people if you think what's in Pragmatic Programmer is common knowledge. Your comment reeks of the classic attitude that comes with getting a CS degree (or some other STEM degree) and never actually working an hour of programming professionally. The fact is, programming jobs don't involve solving hard problems, for the most part, they involve perfectly executing on an already-solved problem, and in order to do that you need to ace a bunch of "soft skills". Not just understand, but ace. Software engineering is not computer science, for the most part. Two entirely different groups of people do those things, and use two entirely different skill sets to do them. Your advice is not for the audience or author of this article. I am so sick of the attitude your comment represents.
- JamesBarney 8y agoMost developers work on projects where the success or failure of the project is determined by stakeholder interactions. There is at least an order of magnitude difference between the number of products that have failed because someone didn't use the right algorithm versus didn't set expectations appropriately, or built the wrong software. Communication matters, a lot, so books about communication and structure also matter a lot.
- InGodsName 8y agoWell, the way i am interviewed it always made me feel as if success of the company depends on my blackboard data structure and algorithm skill.
- sinuhe69 8y agoYeah, you said yourself that’s “in a interview only”. I agree that many modern interview techniques are stupid. Perhaps they think the leaders know how-to communicate well already or perhaps because soft-skills are notoriously hard to assess. But in my experience, algorithms and data structures questions can only reveal very little about the potential of the candidate. A lot of truly important skills can only assess through interaction with experienced human evaluators.
- seanmcdirmid 8y agoIsn't that really selection bias though? Projects with bad management simply don't make it. Those with bad algorithms make it but with lots of accrued technical debt. Reading a soft skills book is like taking mandatory anti-corruption training at work. It is boring because its obvious, but unfortunately some people still need it.
- tracker1 8y agoIt depends... a given software application that only has a handful of users on a dedicated server can totally survive a less than perfect implementation. Right now I'm working on an application that will be deployed to multiple independent customer sites. That same application will never likely see more than 1k users on it at the same time (mostly about 20). How much effort should be made towards optimization, or custom data stores? Or just use {insert favorite sql dbms}?
- ubernostrum 8y agoI've read The Pragmatic Programmer on a 10 hour flight and I fell asleep 2 or 3 times, because it was freaking boring. Either you already knew that the things it recommended were good ideas and were doing them, or you haven't yet learned why the things it recommended were good ideas. I know "soft skills" is a euphemism for a bunch of stuff that I'd rather not unpack here, but personally I do think learning good practices around how to write maintainable, testable code are actually, y'know, important and useful, even if they get communicated with icky horrible soft words instead of burly awesome hard math symbols. This means algorithms and math. If you say so. But the niche for heroic god-tier 100000000000000000000x rockstar wizard ninja gurus who roll their eyes at tiny puny baby-child beginners while channeling the heartbeat of the universe to derive the Perfect Algorithm™ is... pretty small, and getting smaller ever year. Working programmers don't -- or maybe shouldn't, but oops, that's a "soft skill"! -- actually re-invent all of CS from first principles on a daily basis. And there's really no level of programming you can run to anymore to escape. It's frameworks and libraries and gluing stuff together all the way down, even into the "bare" metal (which isn't so bare anymore, and is a rich programming environment in its own right). I mean, maybe you work someplace that routinely has to invent entire new fields of theoretical math just to describe the stuff you're building. But I've worked at a household-name place, and known plenty of other people who worked for other household-name places, and in my experience and their anecdotes that kind of stuff is vanishingly rare. Also, I'd be willing to bet almost anything that you didn't start out as a programmer by reading Turing's "On Computable Numbers" and going from there. You probably started out with an already-built, friendly programming environment in which you could slap things together to see what happened, and only later -- possibly years later -- started to dive into all these "fundamentals" that you now insist everyone learn up-front instead.
- fixermark 8y ago> It's frameworks and libraries and gluing stuff together all the way down, even into the "bare" metal (which isn't so bare anymore, and is a rich programming environment in its own right). + a lot. Even TensorFlow is driven by a Python API.
- ryanar 8y agoAn excellent point. To corroborate it, there was a challenge issued by Jon Bentley to Don Knuth to write a program that Doug McIlroy would then critique. The program was to parse a file and count the frequencies of words, outputting a list of the frequencies sorted highest to lowest. Knuth wrote -everything- from first principles, custom file reading, parsing, the whole nine yards. At the end he had a 10 page WEB literate programming document that solved the problem. McIlroy, in his critique, wrote a six line shell script to do the same thing tr -cs A-Za-z '\n' | tr A-Z a-z | sort | uniq -c | sort -rn | sed ${1}q McIlroy pointed out that by using generalized abstractions over small tasks, file reading, parsing, sorting, etc. you can write software that can be re-used and solve the business need in a reasonable timeframe. If we did everything from first principles then nothing would get done. The merits of McIlroys argument in the context of Bentley's challenge are another matter, but I believe that his point is a good one in the general case, we are hired to build software that meets business needs, and most of the time that does -not- mean hand-crafting purpose-built data structures and algorithms. For more on the Knuth, McIlroy story: https://franklinchen.com/blog/2011/12/08/revisiting-knuth-and-mcilroys-word-count-programs/ https://franklinchen.com/blog/2011/12/08/revisiting-knuth-an...
- DanielBMarkham 8y agoI've seen a lot of failed IT projects. % of projects that failed due to some "soft skill" issues such as covered in these books: 100% % of projects that failed because of some bit of CS somebody was missing: 0% My enthusiasm is not curbed. I think the funniest part of this comment is the fact that it's this exact attitude that makes people crash their projects: it's not tough enough. Surely there's some magic sauce we can add on top to make it tougher, right? Maybe the project is only keeping track of the 50k books and 10k patrons at the local library, but we'll certainly need a messaging system capable of huge amounts of realtime transactions, right? And what kind of cloud infrastructure is that going to take? Probably something complicated, I'm sure. As a newly-minted instrument pilot, I was lucky enough to sit in the jump seat of a local commuter as it made its way home to my local airport. We were shooting an IMC approach down to minimums. I kept my mouth shut and paid attention to the two pilots working. It was like watching a clock. Everything was dull, double-checked and cross-checked. When we finally landed, I told them "That was pretty boring" I'll never forget the pilot's reply, "That's how it's supposed to be" The vast majority of tech work is not intellectually-challenging. Even when it fails, it usually fails for these "soft" reasons. Plenty of folks are not happy with this state of affairs. Those are the people you need to keep away from the keyboards. The greatest skill you need to know as any kind of professional is the skill of dialing it back to only what's required by the client -- not what might be the most fun or interesting thing you'd like to do. That can be really, really tough.
- arandr0x 8y agoI would like to agree with you from the opposite direction. I work with a team of basically all PhDs and write several patents a year. We have a regular scientific paper reading list. (I work developing commercial software, not in research.) My job requires some understanding of at least some graduate-level math. Every year since my first year, I wrote on my self-evaluation form "I really need to learn more about (GPU computing/differential geometry/hyperparameter optimization)". And every year, I got told "be nicer to people, show your work, thoroughly explain your algorithms, double-check". (Well, different things every year, but all in that list.) The fact is, intellectually challenging work doesn't exempt people from, well, doing work. Keeping records, using processes, talking to people. There's no market for heroes who only want to pull the sword from the rock but not get any blood on their shirt.
- kyberias 8y agoYou're using the word "soft-skill" incorrectly. None of those books are about soft-skills. They are about software ENGINEERING: about software quality, software design, software testing, deployment, software life cycle etc. Computer SCIENCE does not teach you much about software engineering. As an engineer you rarely need computer science, you need engineering skills.
- pmontra 8y agoI saw many software engineers, with several different study paths, not knowing anything about how a computer and a network work. Apparently this doesn't affect significantly their efficiency at work but it's kind of stunning. On the other side, I started from logic gates, registries, network packets and ended up with their same skills, with some 20 extra years at my disposal (I couldn't learn React before it came into existence but I know JavaScript since day 1.) An exam on the second year of CS required us to write a simulator for a toy CPU, with the microcode to implement some simple machine code instructions. I remember the curses interface on a VT100 and the professor testing the program. I wonder if I could have studied my books and those other books before I was 25. Why not? But I think that it's much harder to "know" software quality, software design, software testing, deployment, software life cycle than it is to learn the fundamentals. Anything that somewhat deals with people is messier and more difficult than something that deals only with machines.
- threatofrain 8y agoThat's like saying being a mathematician involves how well you can sell yourself, therefore marketing and networking are core skills in math. Marketing and networking are core skills of life no matter where you are.
- kyberias 8y agoIt's not like that at all. Software ENGINEERING skills are important for software engineers. Period.
- ryanar 8y agoNope, as the OP said, you are misunderstanding that these books aren't teaching "soft skills", they aren't about networking or marketing, they are about how you collaborate in a work environment and build maintainable software that meets deadlines. If you haven't give some of them a shot, I find them a refreshing break from algorithms heavy books and get a lot of value from them.
- beat 8y agoContinuous delivery isn't a "soft skill". Neither is Domain-driven design. You can't see the forest for the trees.
- zorked 8y ago> POSIX for example is still with us Amen to that. I bought a house, married, had kids, visited four continents and never had to worry about money just because at some point I decided "hmm, guess I'll learn really well how Linux works". I see all new languages, frameworks, methodologies and fads woosh past on their way from explosive hype to early retirement. And I still make my money out of knowing what those few syscalls actually do.
- ohitsdom 8y agoThe Pragmatic Programmer may be soft skills and generally "common sense" advice, but it's very practical and the analogies stick with you. The two that have stuck with me are the boy scout principle (leaving an area of code cleaner than you found it) and tracer bullets (getting software in front of end users as early as possible). Both of these are simple things that everyone would agree to, but in my experience having the analogy on hand helps teams actually follow and enforce the principles more consistently.
- shitgoose 8y agoBarring sleeping on the airplane and Haskell, your comment makes a lot of sense. Especially last paragraph. And, this is a good example of a soft skill. People didn't see the value in your comment because they were triggered by completely unnecessary statements. Like love for Haskell - it should be kept private. Like color of your underwear.
- Joeri 8y agoThe Pragmatic Programmer Clean Code The Clean Coder Domain-Driven Design Growing Object-Oriented Software, Guided by Tests Continuous Delivery I have a confession to make: I haven't read any of those books, and I'm not really planning to. I have read some other broad-spectrum programming books (Mythical Man-Month, Code Complete, Design Patterns, Peopleware, some lesser known ones). I've read a summary of DDD. I've read many blog posts linked to from HN relating aspects of those books. But I've never read that specific set of books. I wonder if I'm really missing out much by not having read them, but I'm not motivated enough to find out by reading them, because there's other books I have on my reading list first (e.g. currently re-reading DDIA, after that I have Tufte lined up). Also, I never get signals from my surroundings that there are gaps in my skill set that those books would fill. Besides, having read some books is already a leg up, since many (most?) programmers don't read books.
- ryanar 8y agoI picked up Pragmatic Programmer just a few days ago and am loving it. While many of the lessons I have figured out already on my own, the book helps qualify and solidify them, giving you a place to reference if you want to teach someone else about them or push for something on your team. I think the biggest thing is that they are rather easy reads, it is nothing like diving into TAoCP.
- jacobolus 8y ago> really hard to follow (Art of Computer Programming), No it’s not. Knuth is a very clear writer. The hard part is doing the trickier exercises. Of course, it’s also a very long book. Most people only read particular sections and generally use it as a reference..
- mancerayder 8y ago>To switch from framework learning to soft-skill books doesn't feel like much of an upgrade. If you want to learn something with long lasting value, learn actual computer science. >This means algorithms and math. Uh, huh. It does, because that's how you get past interviews. After that, though: how useful are they really, your algorithms and math?
- scarface74 8y agoTo switch from framework learning to soft-skill books doesn't feel like much of an upgrade. If you want to learn something with long lasting value, learn actual computer science. This means algorithms and math. Most developers writing yet another software as a service CRUD app or a line of business app will never need to implement computers science algorithms from scratch. Every developer will need to know how to translate business requirements to software. The developers who don’t have the soft skills and all they can do is “Cracking the code” leetCode style programming will rapidly find their career stagnate. Most developers will never need to know how the CPU works or about the Posix standard.
- josephcooney 8y agoI think it's a balance that each person has to set to the "right" level for them based on the stage of their career, and the trajectory they would like it to take. What's "right" for someone who wants to become a project manager is different than what will be "right" for someone who wants to be an architect or strike out and found their own company. This topic is of some interest to me - I am co-authoring a book called "evergreen skills for software developers" https://evergreenskills.com/ https://evergreenskills.com/ and delivered a talk at a local developer conference on it about a year ago https://jcooney.net/post/2018/10/evergreen.html https://jcooney.net/post/2018/10/evergreen.html
- bmay 8y ago> these are soft-skill books. Clean Code is not a soft-skill book.
- jhuni 8y ago> It also means exposure to paradigms like functional programming, or logic programming. I recommend Haskell, not because you need to learn yet another language, but because the knowledge ceiling in its ecosystem is really high and it's the current lingua franca for papers on functional programming. Common Lisp is also ideal, it effectively supports paradigms other then functional, and has been or at least was the lingua franca for artificial intelligence for decades.