Code: The Hidden Language of Computer Hardware and Software. It may be a bit more lower level than you're looking for, but it'd be a great foundation to build off of.
I always recommend this book called 'Clean Code'
It details a collection of techniques to keep your code readable and maintainable.
In general use good variable and method names and use more, shorter methods where appropriate
Code: The Hidden Language of Computer Hardware and Software
I'm surprised no one has mentioned this yet. This is the best book for beginners. It will cover the basic of codes (generic), how electricity works, counting systems (binary, base ten, hexadecimal), switches, boolean logic and logic gates, memory, basic computer architecture, operating systems etc.
It assumes you have no knowledge regarding any of the topics mentioned above while using intelligent and straightforward writing.
Ditto - I have a Eastern Economy Edition of K&R when I took up learning C as a hobby. When I looked up the price for the same on the US version of Amazon, the price comparison was startling.
For the money you'd be shelling out, it'd be cheaper for you to buy a brand new copy of the book from an Indian bookstore and have it shipped out to you (possibly even through an express courier like DHL or FedEx) in the US than just buy the book in the US outright.
Introduction To Algorithms is kind of the gold standard. It's heavily detailed, well written, and I'm pretty sure they put the word "Introduction" in there as a joke(it's 1292 pages).
the bookstores of American universities are independently owned/operated to the university, and in fact just license or are a reseller of materials from the university itself when it comes to branded gear.
They're known to overcharge for a lot of books. Consider that The C Programming Language costs $30 new for a copy. My university wants $50 for a used copy of an out of date printing that was based on a draft.
The professor of this class actively says "DO NOT BUY THE BOOK. I WILL PROVIDE YOU A PDF." Despite this, people still buy the book.
This semester, I bought a book for one of my classes on amazon because the bookstore was like "LOL IT'S OUT OF PRINT WE DON'T HAVE IT." This was inverse of the email (that was later claimed as "forged") from the instructor, forwarded from the bookstore, saying it was in stock. On top of that, they wanted $350 for a book that's $40 new.
Code: The Hidden Language of Computer Hardware and Software is a great intro to some basic computer science concepts. It's written to be accessible to anyone and explains things clearly.
Cracking the Coding Interview by Gayle Laakmann McDowell
This book goes over every one of those areas and gives tons of example problems. It also talks a lot about the interview process and what companies are looking for in a good candidate.
>What are your favorite resources out there that you turn to, that could be helpful in showing someone what a good review is?
Clean Code by Robert C. Martin.
This book covers all kinds of great stuff regarding correctness, maintainability, testability, etc.
I want to call your attention to something you wrote though.
>mid level engineers spending lot of time arguing about things that should not be the focus of the code reviews - e. g. variable names, code styles etc. In doing so, they are also not paying enough attention to the overall architecture, correctness, maintainability, testability etc. for the code they are reviewing.
This is a false dichotomy. Having code with well thought out names and formatting, enables having maintainable and testable code. It makes reasoning about correctness much easier. Same is true for the overall architecture. I would go so far as to say, you cannot have all of the attributes you desire, without having code that is easy to read.
Now, mid level devs are notorious for taking "Clean Code" too far, and inciting holy wars to purge the heathen sinners who dont conform 100%. Perhaps they just need their zealotry toned down. Names and formatting are definitely important, but not so important that they cant see the forest for the trees.
Clean Code taught me how to write clean code. Cannot recommend this book enough, every place I've worked I've brought a copy and at least one coworker will borrow it and find themselves really questioning a lot of their decisions. It's also a great book to refer back to every few years.
edit: Truthfully, some was experience, seeing other people's code early on. Discussing with peers. Thinking about single responsibility et cetera. I don't think there is one source but the book is something at the top of the list.
Designing Data-Intensive Applications seems to be the industry standard, although it's not Go specific.
It's written in Java, but for the most part, it's very transferable to C#. When I was a junior dev transitioning to intermediate, it was pretty worth my while. It's a relatively easy read and doesn't require you to be writing code or sitting at a computer (at least it didn't for me).
Feel free though while reading it to critically question some ideas as to how applicable they are in the C#.NET ecosystem, current best practices, and your day-to-day work. (For example, IIRC, he argues that you shouldn't prefix interfaces with the capital I
. I still do that though and I find it worthwhile.)
The C Programming Language by Kernighan and Ritchie
This book was written by the authors who developed the C language. It really helped me learn how data structures work, as well as improve control flow and program structure. The book also has a lot of exercises, which are very useful and helpful. It was though at times to grasp the concepts but after a lot of rereading I was finally able to understand and improve my programming skills in C.
I would recommend reading Design Patterns: Elements of Reusable Object-Oriented Software. That book will give you the majority of design knowledge you would gain at this point in your career from college.
If you're new to C, read K&R.
Once you've done that (or if you already know C) then read THE book on Unix programming
Awesome book Code , really helps you understand from a bottom up perspective. Super approachable without a CS background and does not need a computer in front of you to appreciate. Highly recommended.
K&R has the reputation it has because they did an excellent job of balancing between "experienced programmers can use this as a reference" and "newbie programmers can use this as a starting point. Let me clarify: K&R will not make you a better programmer, but it is an excellent example of what industry professionals would consider to be a good piece of technical documentation.
If you're going to ever work with APIs or large amounts of technical documentation about software, this book will mirror the experience you get reading "good docs". In short, learning C from this books does an excellent job of showing you how much you'll have to figure out yourself and what information you should be expected to be given to you when working in the industry.
Poorly written code generally doesn’t follow Best Practices, but includes issues like using inappropriate algorithms and data structures to manage data, and bad design decisions.
I recommend Clean Code by Robert Martin https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
He does a great job of highlighting what makes code readable, and maintainable, especially in the context of Java and OO Design and OO Programming.
I’ve heard some call it controversial. But after more than 20 years in the industry ( username relevant) I find him to be particularly on point and accurate. Personal preference aside, he knows what he is talking about and tells it like it is.
When I went, there were always a few companies where the representatives had a badge that said "I hire frosh." My advice would be to check it out to get a feel for what's going on. I wouldn't expect a whole lot, but at the very least it'll be good prep for the frosh/soph fair.
A word of advice - when I went to the fall career fair during my freshman year, I actually found it quite stressful. I ran into a couple of recruiters who came off as condescending, and the overall atmosphere seemed pretty stressful (gotta hustle for that internship). It was a bit of a contrast from the dorms and even office hours, where people are generally happy to lend a helping hand.
When I took CS 103 later, Keith Schwarz actually had a fairly negative view of the effect/messaging of the fall career fair towards freshmen. He felt that the competitiveness and the inevitable rejection of certain internships would not really provide a positive view of one's learning. Learning is a long process, and getting rejected from a dream CS internship might lead some to feel that their classes were for nothing. It's ultimately up to you whether you want to view your CS education as more of a pipeline into a good job, or an opportunity to intellectually explore (you can of course balance both, and there is no right way to do it).
So if you wanna hustle for an internship, then by all means go for it. However, keep in mind that the career fair is only one way to get your foot in the door. If you wanna be a real snek, network around and find people who can give you referrals for companies you're interested in. Also code up a project or two and put it on GitHub (with a link on your resume). Most importantly, read the good book.
La filosofia descritta da te riassume la filosofia "all'italiana" : si massimizza il guadagno, minimizzando l'investimento. Questo non solo in termini di economia, ma anche di tempo e, talvolta, di istruzione.
Personalmente penso e ho trovato aziende (anche piccole) che hanno metodi molto più rigorosi per lo sviluppo (creazione di documentazione secondo un certo stile, ogni variabile deve essere assegnata con un nome preciso, ecc..). Poi, vabbè, ci sono anche aziende molto grosse con la metodologia AGILE , ma già creare una buona documentazione e seguire poche e semplici regole , fa la differenza fra il buon "programmatore" e il mitico cuggino.
Un buon libro per i colleghi Clean code , sempre che di inglese ce ne capiscano qualcosa.
I've said it a million times and I'll say it again: Get your hands on a copy of Cracking the Coding Interview and read it from cover to cover. If you're going into college now most of the information in this book won't make sense if you don't know how to program, but regardless I would still pick it up. Study this book for interviews. If you start using this book to study for interviews (And you need to study for interviews, treat interview prep like any other class) I guarantee you can land an awesome internship and a great job.
CODE is an awesome book that covers the basics of how computers are built out of very simple components and how they operate with just a few simple instructions.
I like this book because it covers both how computers are built, but also why they are able to accomplish so much with just adding and moving numbers around.
Super easy read too. I read it in highschool and loved it
Link: https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319
Read this book - https://www.amazon.com/Bitcoin-Standard-Decentralized-Alternative-Central/dp/1119473861
As most bitcoin books are either technical in nature or written by journalists who don't understand it well. This book answers the "why" of bitcoin, the economics and monetary policy that makes it so special.
Overview - https://medium.com/@jimmysong/why-bitcoin-works-fe32879a73f5
i've been reading Designing Data-Intensive Applications by Martin Kleppman and i would recommend to all backend developers out there that want to step up their game.
(i also love that it's a language agnostic book)
Code by Charles Petzold sounds like it is exactly what you're looking for. It reads more along the lines of a novel, starting at the very beginning (electricity, binary, etc) working up through all the parts of a basic computer (including digital logic, assembly, etc). It's as good as (or better in my opinion) than any undergraduate book on OS/Computer Architecture you'll find. And a much more enjoyable read.
You may want to check out Cracking the Coding Interview. The table of contents can be found here. I'm pretty sure there is a section for each thing on your list.
Write clean code that is easy to understand. Commenting is, at best, a necessary evil.
Take this for example:
if((employee.flags & HOURLY_FLAG_ && employee.age > 50) employee.GetBenefits()
vs.
if(employee.IsEligibleForFullBenefits()) employee.GetBenefits()
Code can be self documenting; but it takes good craftsmanship and a lot of experience to make it happen.
I totally stole this example from the book Clean Code and its chapter on commenting, but it really drove the point home for me. Worth a read for anyone who wants to craft well written applications.
I'd recommend stepping away from leetcode and the other sites for a bit. I think they're useful if you need the practice in typing up the algorithms in code when you have the algorithms pretty well memorized.
I would HIGHLY recommend "Cracking the Coding Interview" https://www.amazon.com/dp/0984782850
There are also a few good YouTube videos but I don't have links handy. I will say there's a lot of garbage out there too, so skip through them liberally.
Remember the interview process is a total game. I interview candidates and even we know it's all a sorry game. But we have to check the stupid boxes because no one has come up with a better way to weed out people who can't code a for-loop.
Your ability to pass interviews is not directly correlated to your ability to actually deliver software in the real world. Interviews often don't touch on design or real world tradeoffs or continuous integration or how to manage a large project or so many of the other aspects of software engineering. Instead it comes down to rote memorization of solved algorithms and stupid array problems that never represent an actual problem someone has actually needed to solve.
In an interview: let's spend half an hour writing quicksort.
In real life: can you think of any language written that doesn't have a sort function in the standard lib?
I know you know this but I hope that this has helped.
Good luck.
To me, "leetcode" is the brand name for the concept of solving programming puzzles, just like "Kleenex" is for facial tissues. When I see someone mentioning leetcode, it could mean anything from the actual LeetCode website to Codewars, HackerRank, or any other interactive programming problem solving site.
I've seen leetcode mentioned here and also very heavily on Blind (abbreviated LC there).
This concept is not new, and is the central focus of the very popular interview prep book Cracking the Coding Interview
I would have also included:
https://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742
However at this moment in time I can no longer recommend it... we've just moved too far ahead in the JS world.