Book Review: Coders At Work

April 26, 2016 Book Reviews No comments

coders-at-work-cover-bigThe book “Coders At Work” is a collection of interviews of famous coders. The book takes a reader through 15 career stories. It inspires and gives insight into minds of great programmers.

Most of the selected coders are of older generations, so at times, it is hard or, rather, not exceptionally interesting to follow some of their career endeavours. Especially, if the whole career was around one system or one language that is “dead” today (think of COBOL, Fortran, PDP-1, etc). I don’t mind to know the history of the industry, but I’m not interested in too much of the details (you can blame me if you wish). On the other hand, it was very interesting to try to understand how these people think and how they approached problems they had. I really believe there is a lot to learn from them.

The author, Peter Seibel, starts interviews with a usual but interesting question about how the interviewees got involved in programming. Then, the author proceeds to questions that relate somehow to what interviewees have done in their careers. There are standard questions about debugging, favorite editor, opinion on some programming language, and other.

I liked answers to the question on how they hired people and what advise they can give to the young programmers.

There were a couple of questions that I didn’t like. One was “Do you consider yourself a scientist, an engineer, an artist, or a craftsman?”. I think it is a pointless question. These nouns can be interpreted in different ways and any answer would be just fine.

Throughout the book there was a discussion about the importance of computer science education and one of the questions was if interviewees have read the book “The Art Of Computer Programming”. It was kind of introduction to the last interview with Donald Knuth. I liked the interview with him, but I’m not sure if the author had to put so much emphasis on this personality.

The list of interviews is available at book’s website with short descriptions of who those people are and what they did. To be honest, before reading “Coders At Work”, I only knew about Douglas Crockford, Joshua Bloch, and Donald Knuth.

Conclusion

The book gives insight into how some of the great programmers achieved what they have achieved. It educates and inspires, though some of the stories might not be very exciting. At times, you may think that other big names would have made the book even more interesting. Nevertheless, I liked reading the book “Coders At Work”.


Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone


No comments


Amazon Interview Experience

April 19, 2016 Career, Opinion 4 comments

Just recently I went through the amazing interviewing process with Amazon. I had really positive experience and I would like to share with you.

Amazon Logo for a blog post on Amazon Interview Experience

Disclaimer: The opinions expressed herein are exclusively my own personal opinions. To the best of my knowledge and understanding, this blog post is compliant with Non-Disclosure Agreement I have signed.

Amazon Interview in general

First of all, it is not like any other interview I ever went to. Though, I have to mention that it is also the first time I go through the interview with a tech giant company.

The interviewing process is really language and frameworks agnostic and at the same time it is very code and problem-solving centric. So what happens is that you are not asked about any specifics of any given programming language, but you are expected to write a lot of code on a whiteboard. You are expected to solve problems and your way of tackling problems and your approaches are something that is very important and evaluated.

Now I see how Amazon manages to build great teams and deliver awesome products. In my opinion, this is because they hire problem solvers and people capable of coding and thinking. I believe bias factor is greatly reduced because of the way they do interviews.

Let me take you through my Amazon Interview experience. I have signed NDA, so I cannot share any specifics of projects they are hiring people for, nor it is appropriate to mention exact questions I was asked.

Stage 0: How to get into the process?

Amazon was organizing Hiring Event in Vienna (Austria) and one of their recruiters contacted me on LinkedIn. I don’t know whether there was anything interesting in my profile or not, but it is how it happened.

If you are actively looking for a job and want to get to the interview with one of big tech companies, seeking a direct referral from within the company is probably the best bet.

In my case, it was one of those rare HR messages which I didn’t want to ignore and decided to pursuit further. I was asked to share my resume. After it was reviewed, I was asked to do an online coding test.

Stage 1: Pre-screening coding test

To know whether you are even worth talking to there is a coding test. It is organized online, but you also have the option to program live with some coder.

You can program in any language you feel comfortable with, as long as it is one of the major ones.

My test had three problems to solve, two of which were writing code. It is very similar to what you can get on programming competitions (ACM, TopCoder, etc), but less formalized and with fewer tests. I personally spent way too much time on the first task, because I decided to implement an efficient solution using BFS. Later I realized that any solution that passes tests would be ok as well. So instead of mine O(n), O(n^2) would be fine to get me to the screening session. Two of solutions were passing their tests. I didn’t have time for the third question, so I just wrote that I didn’t have time and explained how I would have solved it.

Stage 2: Screening

Screening is just 30 minutes chat. They would only ask you basic computer science fundamentals. Questions would be completely agnostic to programming languages or technologies. I believe, they just want to check that you know basics of programming, you can express yourself and that you will feel comfortable during the interviews.

Stage 3: Interview Day

This is something awesome. My right thumb still hurts because of holding whiteboard marker. Something I really liked was that there was challenge, there was coding, there was problem solving.

Almost all other interviews I had before with other companies were standard boring questions about one specific technology stack, starting from persistence layer moving towards presentation layer. I never had to write code during my interview (maximum few lines of code). And only once I was asked to solve a specific problem for a start-up company.

I had four interviews during the day lasting for 50-60 minutes. For me, it looked like I would get a bit more senior level questions with every next interview, but I may be mistaken. I also don’t know if this is the way interviews are usually organized at Amazon.

Interview 1: Answer few situational questions, write code!

So, as I said, I cannot tell exactly what I was asked, but my first interviewer was a person who writes a lot of code himself. He would slowly transition me to the coding task, which was to implement some data structure of some sort. I guess I could be something else as well. I messed up the beginning, but later it was fairly easy and I had the implementation on a whiteboard.

Interview 2: Write code!

The second one was really interesting. It didn’t have much introduction. There was a coding problem right away. Unfortunately, I was a bit too sloppy on this one. I jumped to writing code too quickly. So, as first solution I implemented three loops O(n^3) and then, with guidance from my interviewer, I switched to writing O(n^2) solution. Somehow, even I was able to solve the problem, I feel I was too quick to jump to writing code and didn’t think enough up front. So, remember – less rush!

Interview 3: Answer few situational questions related to projects on a bit higher level, write code!

The third one was way more smooth at the beginning. Many situational questions. When we switched to writing code, I believe the problem was also more complex. I fairly quickly identified that the problem had to be solved using XYZ technique, but I struggled a lot with an actual implementation. I didn’t manage to have a complete solution, but I hope I was able to convince my interviewer that if I had a bit more time I would have had a complete solution in place.

Interview 4: Solve designing problem. Draw diagrams! And finally, ask some real questions about projects, teams, learning.

This one was the easiest for me. There were two designing questions. The first one was object-oriented design for some system. And the second one was system design for the very same system. I didn’t have issues with either one of those (at least I think so).

I was very quick with OO design. I’ve done a lot of design in the past and I believe in core principles of OOD. Besides, I have even written a book on design patterns. That had to play some role.

The system design part also went very smoothly. Probably because I have very relevant experience working for a big web company. Scalability, availability, performance principles for system design isn’t something new to me. I’ve never configured load balancer nor I ever setup Master-Slave-Replica, but I just knew these things and how they are supposed to work. Just by coincidence recently I read “Release It!” book and that could have played some role as well.

In the end, I could ask questions that were most important to me. Like questions about the team, learning and growth opportunities, projects, and technologies.

Stage 4: What happens next?

I don’t know. I’m not there yet.

Preparation

There is one aspect I don’t like about the interviewing process like this. Amazon, Facebook, Google, Microsoft are huge tech companies that have somewhat similar standardized interviewing process. You can read online about how it looks like and what are common questions. There is even book “Cracking the Coding Interview” that has 189 coding questions.

So hypothetically, let’s imagine there are two deep copies of me. And by “deep” I mean that we both have absolutely identical personalities, knowledge, background, experience. Now we are both to be interviewed in one month. Copy One doesn’t have time to prepare and just looks up what are the main types of questions. Copy Two takes a month of vacation and sits at TopCoder in practice rooms solving, say 300-500 problems. Copy One is also capable of doing it as both of us did some ACM in university 8 years ago. Now when the interview comes, Copy Two just shines and cracks all questions. Copy One struggles with solving problems but manages them somehow. So when the performance of these two copies is compared Copy Two wins. But what hiring company gets is almost identically same with a difference of 1 month of TopCoder practice.

Definitely, there are reasons why the process has to be standardized. It could have been way worse if it was otherwise.

I did prepare myself. Not as much as I would like, though. Buying a whiteboard for kids was definitely a good investment from my side. I did couple of problems on the whiteboard, watched couple of MIT lectures on algorithms, bought a copy of CLRS (I was even ready to use Master Theorem if asked).

Conclusion

I really liked interviewing process at Amazon. I appreciate all the time invested in interviewing me.

Disregard if I get an offer or not, or if I will have to decline it, I won’t change my opinion about this interviewing experience. Just going through Amazon Interview is worth the time and preparation effort.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone


4 comments


Working with Excel files using EPPlus and XLSX.JS

February 29, 2016 C#, JavaScript, Opinion, QuickTip, Tools No comments

Need to quickly generate an Excel file on the server (.NET) with no headache or need to import  another Excel file in your JS client?

I can recommend two libraries for their simplicity and ease of use.

XLSX.JS

To smooth transitioning from Excel files to electronic handling of data we offered our users possibility of importing data. As our application is web based it meant some JS library to work with Excel files. A bit of complication was that our users over time developed a habit of having all kinds of modifications in their “custom” Excel files. So something that would allow us easily work with different formats was a preference.

XLSX.JS library available on GitHub proved to be a good choice. I could only imagine how much better it is over some monsters that would only work in IE. I think starting documentation is fairly good, so I will just go through some bits and pieces from our use case.

Setting up XLSX.JS and reading files is straight forward: npm or bower, include of file and you are ready to write XLSX.readFile('test.xlsx') or App.XLSX.read(excelBinaryContents, {type: 'binary'}).

Reading as binary is probably a better bet as it will work in IE, though you will have to write some code to implement FileReader.prototype.readAsBinaryString() in IE. You can have a look at our implementation of file-select component on gist.

Using XLSX in your JavaScript is fairly easy, though there might be some hiccups with parsing dates. See this gist.

EPPlus

We also have two use cases where we need to generate Excel file on the server. One was to generate some documentation for business rules so we can have it up to date and share with our users at all times. It was implemented as part of CI that would save a file to a file system. The other use case was downloading of business related data via web interface. These two were super easy to do with open source library called EPPlus.

You just add EPPlus through NuGet and start using (var excelPackage = new ExcelPackage(newFileInfo)). See the gist below. First file demonstrates how to operate with cells and the other one just shows how you can use streams to make file downloadable.

These two libraries really helped me to efficiently implement some of the Excel file business use cases.

Next time I will have to generate Excel file on server or read it on client I will most certainly use these two again.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone


No comments


Book Review: Release it! Design and Deploy Production-Ready Software

February 19, 2016 Book Reviews No comments

Book Review: Release it! Design and Deploy Production-Ready Software“Release it!” is an excellent book that makes you and your application prepared for the harsh world of production. It talks about all kinds of things related to the most important part of development lifecycle – releasing your product and keeping it alive.

The book consists of four parts, introduced by interesting case studies, like one unhandled exception that costed an airline a day of nightmare and tons of money.

Keywords

Let me list some of the keywords from the book for better idea what the book is about:

  • Part I – Stability: scaling strategies; fail fast; SLA; timeouts; circuit breaker; bulkhead (don’t sink entire ship); common sense on log files; health checks; etc.
  • Part II – Capacity: resource pools; threads; payload sizes; db performance; cookies; caching; etc.
  • Part III – General Design Issues: load balancing; clustering; configurations; networking; security; etc.
  • Part IV – Operations: transparency; statistics; logging; monitoring systems; etc.

Pros

Things that I really liked about the book:

  • It easy to read, provided you have relevant experience
  • Real world case studies
  • “Remember This” sections after most of the chapters (better than boring summaries)
  • Realistic strategies and approaches
  • Business costs and impact discussed

There is a really nice strategy explained on zero-downtime. One, that especially boggles me, was approach related to database upgrade process for zero downtime. The strategy is relatively simple: 1) you extend the system/db and add some bits and pieces so it is backwards compatible, for db it could mean new nullable columns and triggers to fill-in data, 2) you roll out, 3) you cleanup. Easy!

Cons

Not so great things about the book:

  • Some technologies mentioned are somewhat outdated (book released in 2007)
  • Examples are in Java and frameworks mentioned are Java-world
  • At places a bit too much of Ops related things

Conclusion

The book will be most useful for developers of large enterprise applications, especially where downtime costs real money.

But, in any case, I would highly recommend any developer, and deployment engineer for that matter, to read this book!


Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone


No comments


Book Review: The Design of Everyday Things

February 1, 2016 Book Reviews No comments

TheDesignOfEverydayThings_BookCoverThere were few not so technical books that have made it to my technical reading list last year. One of those was a book called “The Design of Everyday Things”. It can probably be considered a classics for designers, it is also helpful for software developers who do some UI. But it doesn’t harm to read the book even if you have nothing to do with designing anything as it allows to understand how things are designed and why in many cases designer is there to blame and not you when something isn’t working as you were expecting.

For starters, have you even been in situation wondering how that damn thing is working? It could have been a microwave impossible to open or a complicated ticket machine in some country or software written by “lousy” software developers. Just look at the kettle on the book’s cover. Any ideas how to pour water with this kettle?

The book brings many show cases for good and bad design (somewhat dated, though). It explains what a good design means and what are constraints designers have to battle, like time, price and not the least look and feel.

Recently we found out that one of our old applications is not used by users because it is too complicated. At that same time, if used, it could save hours and hours of manual work. It is on our roadmap to rewrite this app, but at least I will have more gear in my tools belt.

I don’t think this is a required reading for software developers, but it definitely enriches your outlook. As a bonus you cal explain your co-workers why a tap in a kitchen is designed is a such and not a different way.


Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone


No comments


2016: Where Do You Want to Be In a Year?

January 19, 2016 YearPlanReport 2 comments

Some people say that the best way to motivate yourself is to be inspired and/or desperate. At the moment I don’t feel like I’m any of those two. I was very ambitious and inspired in the past, but I guess things change as you get older.

One thing that still helps me a bit with motivation is planning and recognition of my work by others. You can get inspired just by thinking on what you want to do in your life. Also, in my opinion, planning puts you in somewhat desperate situation as you want to complete items from the list. I don’t know if you like planning or not, but I use it for the above reasons and for the reason of keeping track of greater picture of my life goals.

I’ve been writing year resolution posts on my blog since 2010. There are few things that I’ve learned about planning for a year. It is easy to overestimate what can be done and to lose track if no detailed planning was done. So for this year I want to set somewhat smarter goals and do a detailed elaboration on achieving them. I will break down tasks to monthly tasks and keep track of those separately from this blog, as it will be a total mess to post it here.

92-of-all-new-year-resolutions-fail

Let me start my planning with list of life areas to improve.

I want to improve:

  • health by running regularly and doing some gym
  • life satisfaction by travelling and having more quality time with family
  • soft skills by copying the best characteristics of people I admire
  • professional skills by learning one or two technologies and doing a personal project
  • foreign languages proficiency by acquiring German B1 and fixing English accent
  • financials by learning more on investing, keeping expenses low and deciding on home purchase

Now let me convert this list into some concrete achievable and measurable items.

  1. Run 2-3 times a week for at least 5 warm months.
  2. Make start of the day more healthy and productive. Ideal scenario would be: get up at 05:55AM, drink glass of water, do exercises for 15-30 min, shower, some important task and/or planning for the day, breakfast, work… But I will consider this item achieved if I start doing exercises regularly even if it is only 2 times a week just for 10 minutes.
  3. Travel to the UK, Norway, sea side country, and do a car trip somewhere nice.
  4. Spend one hour every day with my daughter playing and learning things.
  5. Count not more than 12 weekends in a year when we didn’t go out to do some activities.
  6. Learn 12 simple skills from other people. To achieve this goal I will first identify 12 people from the community and those surrounding me and chose some characteristic I admire.
  7. Read at least 6 technical books.
  8. Watch at least 12 pluralsight courses.
  9. Write a simple stock analysing web site. It could have any set of features, point is to get something interesting running.
  10. Write any simple useful open source tool. I have WCF related idea in mind.
  11. Learn at least two web technologies. I have NodeJS and AngularJS in mind at the moment.
  12. Share knowledge more actively. Minimum would be to write 24 blog posts, answer 12 questions on SO, help few people online.
  13. Acquire B1 German certificate, attend German course, finish entire German Duolingo tree.
  14. Learn English language prosody and fix pronunciation of vowels. Optionally attend a specialized language course.
  15. Save 24X my monthly spendings, go through 13 investment books I read in 2015 and extract notes, do reviews and write about them.

In the end of this year I don’t want to find myself among those 92% who fail with their new year’s resolutions, therefore keep an eye on me and I promise I will keep an eye on you, provided that you share your list with me.

Happy New Year!

 

2016-Feb-01 UPDATE: This is how I’m now tracking completion of the above list. I have a broken-down list of tasks for each month in OneNote and I also have recurring and detailed tasks tasks in Wunderlist app.

ExampleOfTrackingNewYearResolutionList

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone


2 comments


What I have done in 2015

January 15, 2016 YearPlanReport No comments

Year 2015 was the year of travel.

AndriyBudayInIceland_1500_500

In the resolution for 2015 we only planned for Iceland and the coast of Italy. But now I wouldn’t even be able to count the number of countries we visited in just one year with our little daughter.

I somehow managed to take short vacations almost every warm month. For that I had to work some additional time, but extra effort was definitely worth the experience. Outside of Schengen Area we went to Turkey and Israel and in Schengen Area itself there are only two countries left where we haven’t been.

I was so much engaged in enjoying my life that didn’t progress that well with my professional life, but on the other hand I expanded and improved some other areas of my life by travelling, investing and doing sports.

Now let’s go through the resolution list:

Travel to Iceland

It was the greatest trip of all we had so far. My wife wrote series of blog posts on this trip (in Ukrainian).

Travel the coast of Italy and do many other car trips

Italy was a week and two days car trip from Austria, but besides of this one we had two Nordic car trips. We drove all the way to Finland from Austria and also took a hired car from Germany to Sweden. I legally set my speed record of 220km/h. I drove two absolutely different car types in Iceland and Israel – two absolutely opposite countries by weather and security situation. Contrast between these two countries is just staggering. You cannot appreciate it unless you visit those two.

Improve German by attending at least 1 course

Attended two courses and hopefully learned something.

Improve English fluency and vocabulary by spending more time on learning words from read books

Subjective, but I guess there is some improvement. I indeed spent some time after reading books on vocabulary. Next big milestone should be my accent.

Read 4 sci-fi books

Done. Enjoyed some.

Read 13 software engineering books

Partially done. Unfortunately, I started way too many of them and haven’t finished reading. Notable mention would be “C# in Depth”.

Read 13 investment books

All done. This was my list. Will have a separate review list, maybe with ratings.

Start project with potential to make money

Not really. Had few friendly offers to work on things together, but I didn’t like any.

Do programming in other languages than C# or JavaScript

Total fail. I tried to start learning F# and didn’t get it past few simple “hello world” apps.

Take part in at least one programming contest

SRM at TopCoder, but this probably cannot be considered a “contest”, therefore fail.

Visit at least one conference (even small one)

Visited .concat() in Salzburg

Write at least 26 blog posts

17 blog post written.

Increase community visibility by contributing more on github, tweeting, commenting on blogs

Subjective, but fail.

Improve health by exercising and attending swimming pool for at least 1 month

Rather success than fail. I didn’t attend swimming pool, but I ran for couple of months and will start again when it gets warmer.

Make at least 2015 euro profit on new investments in 2015

Success and fail at the same very time. I didn’t set this goal properly as I didn’t know much about investing. I was up and down as much few times during the past volatile year. I have some very small realized profit, but I’m not so keen on being active investor as it only makes brokers rich. Will tell more when it gets to it.

It is a bit late to say, but I wish you all

HAPPY NEW YEAR!

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone


No comments


Beauty of Open Source in Practice

December 20, 2015 Opinion 2 comments

We found a bug in Internet Explorer. It was acknowledged as such in two months of exhausting e-mail communication and no fix was promised.

We found a bug in open source library. It got fixed over weekend after we raised an issue.

This summarises everything I wanted to share in this post. I have more, so continue reading.

As a disclaimer, I want to say that I don’t attempt to have a comprehensive look at open source versus closed source. This is just an example of what happened in my project.

Closed source code case with Internet Explorer

We use Microsoft technologies wherever possible unless there is no sensible solution to a problem we need to solve. Application we implemented is a large offline capable single page application with tons of controls rendered at once. We noticed that IE crashes after prolonged usage of the app, though we were not experiencing the same in other bowsers. It took us a while to realise that there was a legitimate memory leak in IE. More details on how we tried to troubleshoot the issue are here. Afterwards we started long and boring communication with Microsoft, which ended in them acknowledging a bug in IE. Actually, it was a known bug. They said that attempts to fix this bug caused them more troubles, so it is unlikely that the fix will appear in any of IE11 updates or in Edge browser. We got an approval for our users to use Chrome as it doesn’t have this memory issues and in general is much faster.

Open source code case with Jurassic

The app has plenty of shared logic that we want to execute both on client and server. We decided that we want it to be written in JavaScript. As our backend is .NET we used Jurassic library to compile JavaScript code on the server and then to execute it whenever we needed it. We also tried to use Edge.js, but at the moment we are not happy about its stability when run under IIS.

We stumbled upon an interesting bug. IL code emitted by Jurassic library was causing System.InvalidProgramException on some environments. We narrowed it down to a continue statement used in for loop. We noticed that this was only used in moment.js library. We modified the code of moment.js to avoid using continue statements. This fixed the issue so were already covered by open source since we could modify it. Of course, we didn’t stop there and posted a bug on Jurassic’s forum. The guy had a look over weekend and fixed the issue for us.

Conclusion

Of course, this is just one example where using open source proved to be a nice way to go. It doesn’t always work like that and at times it is a wrong choice. I mainly wanted to share this as it was such a striking and contrasting difference for me personally.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone


2 comments


Book Review: JavaScript: The Good Parts

November 29, 2015 Book Reviews, JavaScript No comments

TheGoodPartsBook“JavaScript: The Good Parts” is the book I’ve read too late.

I understand that reading a book on JavaScript is not required as there are zillions of free tutorials, StackOverflow, and online documentation.

But because, JS is the language so popular and where it is so easy to start without reading anything, this is how most of developers start. This ends up in painful discoveries, gotchas that took ages to come to and production bugs no one knows how to reproduce.

I, actually, had a half year formal educational course on JavaScript. Unfortunately, I didn’t take it seriously. Code looked similar to C++, so I wrote few functions here and there and it was working.

Earlier this year I went to a conference where Douglas Crockford had a key note. I decided, I’ve got to read his book on JS.

Review

“JavaScript: The Good Parts“ is a quite short book. You can manage to read it in a full day, even with JS Bin open for trying things out. I’ve read it in two sessions like that.

I think if Douglas had only left the good parts of his book then it would be a really great even shorter book on JS.

Most of the book are good parts. I really liked explanations behind certain language behaviour and design decisions. Especially, I liked Appendixes A “Awful Parts” and B “Bad Parts”

In my own opinion, not so good parts are: pointless Shakespeare quotes at the beginning of chapters, redundant code in examples like a loop for creating cat doing ‘r-r-r-r’, few places where something non-JS specific is explained like RegEx, few places where something self-centric was mentioned like “Beautiful Features” chapter.

Conclusion

It is a really good book, but if you have few years of experience in JS and some more in other languages you will find very little to learn from the book.

If you are going to read any book on JavaScript at all, this one definitely has to be in you priority list.


Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone


No comments


Book Review: C# in Depth

November 27, 2015 .NET, Book Reviews, C# No comments

C# in Depth, 3rd EditionI’ve been writing C# code for more than 10 years by now and yet had a lot to learn from the book.

The book is written by Jon Skeet (the guy Number One at StackOverflow) and is a purely about the C# language. It distances itself from the .NET framework and libraries supplementing the framework.

Structure of the book follows C# language versions. This isn’t particularly useful if you are trying to learn the language by reading this book after some other introductory book. But for software professionals, though, it could be a joy, since it takes you through your years of experience with the language. It tends to remind you about times when something wasn’t possible and later it became possible. Kind of nostalgia, I would say.

First chapters could be somewhat boring. I read the book cover to cover, since I didn’t want to miss on anything, but probably it isn’t the best way to read the book.

Jon is very pedant when it comes to defining anything. This, of course, is double sided: very good when you have strong knowledge and understand components of the definition, but, unfortunately, it complicates understanding. There were some places in the book which I had to read few times to completely understand. Just for instance, in a chapter about Covariance and Contravariance:

[…] the gist of the topic with respect to delegates is that if it would be valid (in a static typing sense) to call a method and use its return value everywhere that you could invoke an instance of a particular delegate type and use its return value, then that method can be used to create an instance of that delegate type.

Jon Skeet. C# in Depth. Kindle Edition.

On the other hand, I found it very important that details are not omitted. I was reading the book for the depth of it. So details and preciseness is exactly what I was expecting, even though they come with the price of slower comprehension.

You may have different background than I do, but if you are a .NET developer with some years of experience, chances are the only chapters with new and difficult information will be those that are not reflecting everyday practical usage of C# language. For example, all of us use LINQ these days, but very few of us would need to know how it works internally or need to implement their own LINQ provider. Very few of us would dig into DLR or how async/await is working.

Almost in each and every chapter there was something where I could add to my knowledge. For me the most important chapter to read was “Chapter 15. Asynchrony with async/await”, since I have very limited experience in this feature.

Conclusion

In my opinion, the best two books ever for C# programmers are “CLR via C#” and “C# in Depth”, meaning that I just added one to this list.

“C# in Depth” is a great, precise, and thorough book to complement and enrich your knowledge.

I highly recommend reading it.


Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone


No comments