I am Jon Skeet. Ask me anything.

29 March 2018, 6:00 pmAsk Question

Jon Skeet is a Java developer working for Google in London. He is a C# author and community leader. He joined Stack Overflow in 2008, during the website's first months of existence. In the near-decade since then, Jon has answered over 34,000 questions, which works out to about 10 questions per day!

Jon is taking questions live on Hashnode coming Thursday. Don't miss out, ask him anything.

Ask Jon Skeet about:

  • Getting started with programming
  • Contributing to Open Source
  • Best practices
  • Functional Programming
  • Java programming
  • Java and C# in 2018
  • C#
  • Future of programming

Thanks everyone - this was a lot of fun, albeit tiring.

I'm sorry-not-sorry for being repetitive about diversity and the importance of communication skills. (If anything, I'm slightly surprised I didn't bring feminism in more.) Treat the repetition as a signal of their importance to me :)

Learn Something New Everyday,
Connect With The Best Developers!

Sign Up Now!

& 500k+ others use Hashnode actively.

Huy Z's photo

How much time on average do you spend on StackOverflow reading Q&As and/or answering questions?

Jon Skeet's photo

How much time do you spend on average breathing? :)

It's only a somewhat silly response, as I do treat Stack Overflow as a background activity a lot of the time, like checking mail or Twitter. When I get round to actually answering a question, that takes more time (or can do), but otherwise it's a very small context bump.

I look at Stack Overflow an awful lot - I'd be surprised if I didn't average 50-100 views of the question page per day, for example. But that doesn't take much time.

These days most of my interactions are in terms of comments, mostly encouraging questioners to ask a more specific question, or include code etc... hopefully in a positive way which will improve their skill level, rather than in a grumpy "This isn't good enough" way.

Grzegorz Herbowicz's photo

Will Kotlin replace Java?

Jon Skeet's photo

Disclaimer: I haven't used Kotlin. I know very little about it. Take all this with a pinch of salt.

COBOL's still around, so I doubt that anything will completely replace Java any time soon.

One aspect of the "Kotlin replacing Java" side of things is that I'd expect most Kotlin developers to still need to know Java, at least for a long time. You're likely to be using libraries written in Java, with Java examples and Java-based questions on Stack Overflow. Maybe libraries will come with Kotlin examples as well over time, but I suspect that relatively few will come with only Kotlin-based resources. (Is this true for Objective-C/Swift? I suspect not, but again, that's a comment from a position of ignorance.)

I suspect that the health of the Kotlin ecosystem will at least somewhat depend on the health of the Java ecosystem for a long time too. It'll be interesting to see how big "Kotlin not in a JVM-like environment" becomes.

Grzegorz Herbowicz's photo

Thank you for the insightful answer.

Jorge Luis Machado Torres's photo

What are your thoughts on doing code review, do you think that this is a good practice or waste of time?

Jon Skeet's photo

Hugely good thing, but can definitely be done badly. Nit-picking can be valuable, but it's good to acknowledge when something is only a nit.

I may come back to this answer to provide more detail later, but I could probably spend the whole time on it. It comes back to good communication, as so many things do.

I would urge everyone to regard code review as a skill to be practised and improved upon. Not many people really like doing code reviews, but I'd be scared to code anything significant without them these days. (I tend to skimp a bit on both tests and code reviews for minor tools... that saves time, and hasn't bitten me much yet. Code reviews have certainly vastly improved the code I've written though.)

Linda Lawton's photo

If you could say one thing to someone new to programming. What would it be?

Jon Skeet's photo

Persist: it will be hard, you will make mistakes, it will be frustrating - but it can also be absolutely wonderful.

(I'm being good and sticking to one thing. I could give a shortlist of maybe five that would all be pretty close - and might become the "one thing" on any particular day...)

Linda Lawton's photo

My daughter recently started universitet for computer science. I want to say something profound to enspire her but haven't been able to come up with anything. I will pass on your advice. Thank you.

Ankur Kaushal's photo

What's your definition of a Senior Developer / Programmer?

Jon Skeet's photo

I don't really have one. I think experience is important, but that experience can be gained in a very wide set of ways. I think freshness and enthusiasm are also important.

I do value communication skills very highly - and the more senior one is, the more important that becomes, in my view. You're likely to have to spend as much (or far more) time explaining your ideas to other people as you are "explaining" them to the computer (aka coding).

Peter's photo

Hi Jon,

What algorithm would you use to sort one million integers?

Jon Skeet's photo

One that someone else has implemented :) I don't doubt the value of learning underlying algorithms, but I don't pay very much attention to them these days, until I need to. In order to choose an algorithm here, I'd need to know:

  • How important it is to make the right choice. (If it's only going to run once, without tight constraints, I don't really care.)
  • Memory constraints
  • Processor constraints
  • Bounds of the problem - are these all 32-bit integers? 64-bit? 16-bit? Unbounded? The most efficient sort may well depend on those
  • Whether I'm choosing an algorithm with an implementation, or whether I'm going to have to implement it. In many cases I'd trade peak performance for not having to do it myself (with the likelihood that I'd end up with bugs for at least a while)
Camilo's photo

What effective approaches or techniques do you suggest to study and master a certain technology? Like, for example C# or CSS.

Jon Skeet's photo

This is probably a pretty personal question - I suspect people learn in different ways. (And I know far fewer technologies than people seem to expect me to. If you're a web developer, you probably know more languages than I do, to start with...)

If you know you're going to need to know a language/platform well (rather than "just enough to get by") then I'd recommend starting at the basics, and layering the knowledge. That's far more effective in my experience than diving straight into a mobile app with a cloud backend, all written in unfamiliar languages and deployed using a tool you've never used before. When something goes wrong, if you have a solid foundation, you can generally work out where to go from there. If you're mired in 10 different technologies which are new to you, you may well have no idea where the problem lies at all - or how to diagnose it.

Diagnostic skills are really important to me. If I'm going to do any work in a particular area, I want to be able to do at least one of three things pretty easily: a) run tests; b) use a debugger; c) write logs. Ideally all three, but having at least one is important.

Damien Dennehy's photo

Hi Jon,

I've been a developer for ten years, but in the last year I have been managing a team of twelve. In your experience what is a simple thing that a new manager should do?

Thanks, Damien

Jon Skeet's photo

I was a manager for 6 months before moving back to being an individual contributor. I may be a manager again some day, but it's not on my bucket list. So all the rest of this answer is really hypothetical, but...

Work out what your goal is. Write it down. If it focuses on either you leading, or accomplishes on the product, tear it up and think again. If it focuses on the team, that's a start. If it focuses on the individuals on the team, you're really cooking... and then add value in terms of bringing those individuals together.

For example, I'd have a personal mission statement of something like "I will enable each of the team members to achieve more than they even realize they can, and bring the team together to be awesome." (That awesomeness may be building something awesome. It may be realizing that something doesn't need to be built. It may be finding out what does need to be built.)

My view of good management almost certainly reflects my beliefs as a Christian in Jesus as the "Servant King" - it inspires me to look for and attempt to model "servant leadership". Your team aren't there to make you look good: you're there to make them look good.

Shrike's photo

Hi Jon. I wonder about "java vs c#" thing. You work for Google, how does it come with such huge C# background to work in a Java/Python/C++ company? Do you use your .net skills at work?

What's your attitude to Java? Do you know it? If not are you planing to start learning?

Is there any chance Google turns to C#/.NET world?

Thanks!

Show +1 replies
Shrike's photo

Thank you for the answer. Do I understand correctly that Google itself isn't using .NET internally (besides making its cloud dotnet-friendly for users)?

Jon Skeet's photo

I'm not sure how far I can answer that, I'm afraid. We're pretty tight-lipped about internal code. Sorry!

StartupSanatana(Venkat.KL)'s photo

What's Your Take on WebRTC?

Jon Skeet's photo

I really don't have one, I'm afraid. I suspect it may have some really valuable uses, and plenty of useless ones that people are briefly excited about, but that's just a generic opinion of almost any new technology.

Mohamed Elshawaf's photo

I'll suppose this is really "ask me ANYTHING", I was looking for a long time, for an answer to this question: Can EF code first replace all database-centric features like stored procedures, views, UDF.. Etc, and still maintaining high performance?

Jon Skeet's photo

You can ask me anything, but that doesn't mean I'll have a useful answer. I'm afraid I know very little about EF myself. I can see a place for stored procs where logic is required "close to the data" but in my former roles where I actually used SQL in business apps, I still preferred to avoid them where possible.

Mohamed Elshawaf's photo

Thanks Jon for your answer and your value time helping us. Greetings

StartupSanatana(Venkat.KL)'s photo

Hi Mr.Jon Skeet,

Curious to know directly from you like; For a Large Scale "Video Chat" as the One of the "Main Features" Application (both web/mobile), Kindly Suggest Preferred Languages, Technolgies, and Platforms which can be Used.

As an extended Question: especially the Open Source.

Regards,

Show +1 replies
StartupSanatana(Venkat.KL)'s photo

StartupSanātana is a Startup providing Everlasting Eternal Solutions to Spiritual way of Living Requirements (Needs & Gaps)

It's OK; What is the Most Preferred Latest Open Source Languages, Technolgies, and Platforms...?

Jon Skeet's photo

"Most preferred" for what? In general over the industry? The Stack Overflow Developer Survey for 2018 is probably more useful than anything else I could say here, really.

StartupSanatana(Venkat.KL)'s photo

Curious to know your Compare & Contrast between "Angular JS" versus "ReactJS" THX.

Jon Skeet's photo

Well, one apparently has a space in, and the other doesn't. Any further comments I might make would be less informed than that...

StartupSanatana(Venkat.KL)'s photo

StartupSanātana is a Startup providing Everlasting Eternal Solutions to Spiritual way of Living Requirements (Needs & Gaps)

Could You Kindly be more specific like; Amoung Two Which One is "One" in Your Reply. THX. Sorry to Ask Silly follow-up Question.

Syed Fazle Rahman's photo

Which editor do you use?

  • Sublime Text
  • VS Code
  • Atom
  • Something else?
Jon Skeet's photo

Visual Studio, almost exclusively, for "real" code. I use an emacs-like editor called Jed for general text editing, mostly because I learned it in university, and have muscle memory for it now.

I'm a pretty "shallow" user of most tools - I'm sure there are very useful features in every tool I use that I've just never got round to learning.

I do have SublimeText installed, and tend to use that for non-VS scenarios where I want to do search/replace across multiple files, or to browse a large set of files.

I've played with VS Code several times but never quite become familiar enough with it. Maybe I need to try again.

StartupSanatana(Venkat.KL)'s photo

What's Your Advice for a Startups Worldwide other than Bay-Area, especially from India.

Jon Skeet's photo

Warning: no experience whatsoever at creating a startup. That said...

Make sure you build a diverse culture from the start. Once you've realized that your company has 50 engineers all of whom are men with the same background, it's going to be much harder to change that.

Syed Fazle Rahman's photo

Hi Jon,

A very serious question! Do you like pineapple on pizza? Why, why not? 👨‍💻🍕🍍

Jon Skeet's photo

Absolutely, and I've never understood why so many people think this is odd.

Pizza is almost the only context in which I do like pineapple - I find it too stringy in a fruit salad, for example. It's okay in a sweet and sour dish, so long as there isn't too much of it.

But on pizza? Absolutely - and not just for "ham and pineapple". When ordering take-out I'll often start with a meat-based pizza, and swap out pepperoni for pineapple.

Chris Geirman's photo

I've 5k rep points on stack overflow. It's an interesting platform. I've noticed that answering some questions pay dividends better than others (... better title, better formed questions, etc). And providing a thoughtful, complete, and humble answer is key (IMHO). What other insights have you gleaned from your experiences? What do you think is the most effective way to rack up those rep points?

Jon Skeet's photo

I think it depends on what you view as "paying dividends". One dividend is enjoyment: are you enjoying the time you're putting in? That's typically easier with a well-asked question.

Another might be skills learned: are you picking up new techniques, new approaches by solving someone else's problem? Are you improving your communication skills?

Another might be the dividend to the world: is your answer making the world a better place, not just for the person who asked the question but others who may be facing the same problem?

And yes, there's rep. A number on a server somewhere. Don't pay that too much attention :) There are effective ways to rack up rep points that don't accomplish anything else nearly as worthwhile. My advice is not to go there. Focus on things that matter, and typically the rep will come as a side-effect, at least in many cases.

Syed Fazle Rahman's photo

What's your take on the recent Blockchain bubble? Have you coded or wish to code a decentralised app?

Jon Skeet's photo

It's never really interested me, to be honest. While we're in the maybe-bubble, it's hard to tell whether or not it's actually a bubble. We'll only be able to tell in 5, 10 or 20 years. I don't expect it to reach the top of my list of things I should investigate further any time soon, but that's just me... it doesn't mean it's inherently uninteresting.

Sakshi Mittal's photo

Hi Jon, If you ever see this, how would you recommend starting contributing to open source if you have basic programming knowledge? Thanks

Arthur Brown's photo

Hi Jon,

Thanks for hosting this AMA. What motivated you to answer questions on SO? I have been following your work since a long time.

Jon Skeet's photo

The bottom line is that I enjoy helping people. It makes me feel good, in the way that generosity often does for most people. (See "The Money Song" from Avenue Q for more details...)

But it's way more than just altruism:

  • I enjoy solving problems; small, tractable problems where you know you've done the job are great.
  • I enjoy finding out more about coding - give me a question about some obscure bit of the C# spec where the behaviour surprises me, and I'll be very happy.
  • I benefit from improving my communication skills, which Stack Overflow certainly helps with massively. I believe communication is one of the most undervalued skills in a software engineer... so why wouldn't I want to get better at it? :)
Shrilakshmi Shastry's photo

Hii Jon ,
What is your suggestion for a beginner to improve UI and UX skills??

Jon Skeet's photo

Well, you could look at any UI I come up with, then do the exact opposite.

Seriously, I have close to no UI/UX skills. The closest I can come is in terms of API design - that's a style of UX, but very different from web or app design.

To speak (yet again) from ignorance, I would expect that important aspects would be:

  • Working out how you're different from your users
  • Working out what the most important user experiences are, and making those awesome
  • Getting feedback and listening to it
Shrilakshmi Shastry's photo

Computer Science Undergraduate Student

THANKS FOR YOUR SUGGESTION

jalpesh vadgama's photo

Hello Jon,

First all, Thanks for the AMA. I would like to know what is your day to day workflow. How you manage your work be productive and still able to keep on eye on SO. Are you using any specific tools for the that or any productivity tips?

Jon Skeet's photo

You may be massively overestimating my productivity, of course... but I don't have any secret sauce, I'm afraid. I work from home a fair amount, which is great for productivity, happiness and a flexible family life - I'd like to see more companies enable this.

If there's one trait I have which is pretty useful, it's quick context switching. I'm really bad at true multi-tasking, but I can context switch from one task to another quickly in most cases. (There are some things where that really doesn't work, particularly for code reviews in codebases I don't know well.)

Now I could be fooling myself of course - it's very possible (probable, even) that if I tried to context switch far less often, I'd be more productive. I might even gain better concentration overall. I don't know whether we'll ever find out.

jalpesh vadgama's photo

Co-Founder, FutureStack Solution, Full Stack developer having more than 13+ years of experience in web technologies.

Great answer Thanks, Jon!!

Petru Vasile Avram's photo

I'd like to know your opinion on the new(-ish) wave of system programming language.

To qualify this question: is it reasonable to want to have a programming language to be used for the vast majority of serious, money making, world changing (however arrogant or unrealistic this might sound) of engineering tasks?

Jon Skeet's photo

I would take issue with the assumption that code that changes the world and makes money needs to be written in a system-level language.

One of the beautiful things about the way technology is going is that we're able to take advantage of a range of technologies together, and use the most appropriate one at each layer.

Any world-changing app is likely to end up using code written in a system-level language, but that doesn't mean the app has to be written in that system-level language.

Take ML: with something like TensorFlow, I gather a data scientist is likely to write most of their code in Python... not a system-level language. The core of TensorFlow no doubt needs system-level work, but someone could write world-changing ML without using that language themselves.

Of course, you could view TensorFlow itself as a "serious, money-making, world-changing" task - and I'd agree, but I wouldn't want anyone to think that those words can't also be used to describe applications. Intrastructure and apps enable each other - let's not encourage a view that one is inherently better than the other.

I should note that I don't work in any system-level language myself. I've heard mostly-good things about go, but haven't used it. I've written C and a tiny bit of C++ in the past, but nothing significant. I don't think that's impeded either my career or my possibility of accomplishing things. But I'm still really grateful to people who do write infrastructure, and it's nice to see that the ecosystem of system-level languages seems like it's doing well.

Kareem's photo

Should programmer learn data science ?

Jon Skeet's photo

"Should" always feels a bit worrying to me. It suggests a homogeneity which I'd like to reject.

Does data science appeal to you? If so, go for it! There are awesome possibilities, more than ever before, I'm sure.

Does data science really not appeal? Don't make yourself feel miserable or guilty about it. There are plenty of other areas to explore. Maybe learn just enough about data science to let you communicate effectively with those who do love it, but then don't sweat it.

Kareem's photo

Thank you for answering ! :D

Igor Dimcevski's photo

Steak with or without ketchup?

Jon Skeet's photo

Definitely ketchup on the fries with the steak, but at most only small amounts with the steak itself... and ideally not in the same mouthful as mustard on the steak. (And again, mustard in small amounts.)

Braydie Grove's photo

What are your thoughts on F#?

Jon Skeet's photo

Well, it's reasonably easy to play on the recorder, which is a good start. I don't think I've tried it on the trumpet yet (which I've only just started playing) so I can't comment there.

If you meant the programming language, it's my guilty secret - I really need to learn F# at some point. Although my name is on the cover of Real-World Functional Programming and I did write some of it, Tomas Petricek did the vast bulk of the work, and I've forgotten the tiny bit of F# I knew.

On the other hand, without knowing it I can still be grateful for its existence, in terms of the new features it has inspired in C#.

Nikos Vaggalis's photo

Hi, Nikos from i-programmer.info . What's your advice to beginning programmers.Should one get to learn Java or C#?, looking at the matter both career prospect wise as well as programming language capabilities/style/framework wise.

Jon Skeet's photo

I would definitely not think about a career to start with. If you're just beginning, you probably don't have enough experience yet to know that it's a career you even want to pursue.

The most important thing I'd suggest is to find a language you get along with and which lets you do things that you find fun and (maybe) useful.

I do think there's a benefit in starting with something small and immediate. If you're right at the start of coding, don't expect to build the next Halo over the school holidays. I like to emphasize small tasks that are still useful or fun. For example, if I'm learning a new language, I'll implement a little guess-the-number game. That's a small, achievable task that has a concrete, interactive goal.

Or as an example of more useful-for-existing-activities skills, I've learned most of what I know about spreadsheets (which isn't much) by coming up with scoring sheets for board or card games (Scrabble, Mexican Trains, The Great Dalmuti etc).

When you're starting to get serious, I'd try to get a solid foundation on which to build - but that's probably not something for the very first few weeks of coding, where you're constantly experimenting. You don't want to spend ages on academic-sounding (though important) topics just to play a bit. There's a balance here...

Digital Innovator's photo

Hi.

How do I integrate TypeScript into every layer of the MERN Stack (i.e. MongoDB, Express.js and Node.js, not just ReactJS) using the MERN.io repo?

Thanks.

Jon Skeet's photo

I'm afraid I've never even heard of MERN before - I'm sure you already know more about any reasonable answer to this than I do, I'm afraid.

Cecil Phillip's photo

Do you have any suggestions on Function programming techniques that would be beneficial for C# developers to learn?

Jon Skeet's photo

Tomas Petricek did the vast majority of the work on "Real-World Functional Programming" (published by Manning) - I tagged along for the ride, but enjoyed doing so. There's a lot in there.

Cecil Phillip's photo

What are some of the future features of C# that you're most looking forward to ?

Jon Skeet's photo

I'm fascinated to see how nullable reference types play out, in terms of adoption. That goes for a lot of other things - there's a cadence of adoption, when libraries, tutorials etc start to make it important to know about features. C# 7 tuples don't have much usage yet as far as I've seen, but could become really important over time. Who can say? I'll be watching closely...

I'm interested by the shapes proposals, but I'm not sure whether it might be a bridge too far. (That said, I've usually been wrong about things like that.)

"Extension everything" is interesting, and I'm expecting to have fun using it to come up with some really evil code.

More generally, I'm looking forward to seeing how the C# team thinks about not bringing new features out. How can the language stay relevant without becoming a kitchen sink? Which features will be retained only for backward-compatibility, but not used by new code?

Cecil Phillip's photo

I know you've done quite a bit investigation into LINQ in the past. I'd love to hear your thoughts on Reactive Extensions

Jon Skeet's photo

Ooh, RX. I haven't really used it much for quite a long time. When I did, I found it really, really interesting - but not terribly easy to use in reality. I just got confused a lot of the time. I still loved the ideas, but didn't quite see how to put them into practice.

Now it looks like a lot of people are very successful with RX in its various forms, and I definitely don't want to dissuade them. I don't even want to dissuade anyone who isn't currently using RX from giving it a try. I just want to avoid anyone else who finds it hard from feeling bad about themselves. I don't feel guilty for not embracing it wholeheartedly.

Len Lattanzi's photo

Cause everyone asks this (or similar) of me...

What's the future "promising" programming language, framework, OS, platform(s) that are on your horizon?

Jon Skeet's photo

I'm struggling just to keep up with C# well enough to write about it in C# in Depth.

I do think .NET Core is awesome, and I'm enjoying seeing it go from strength to strength.

I think cloud computing in general is starting to reach a new level of maturity which is very welcome, too.

Len Lattanzi's photo

"There are only two hard things in Computer Science: cache invalidation, naming things, and off by one errors." - Jeff Robbins

Thank-you

Nikos Vaggalis's photo

When writing a book as in your C# in Depth, how do you strike the balance between recycling old material and covering the language's newest features? For example do you leave out stuff that was done in a particular way under an older C# version since under a newer version alternative ways of going about the same thing have been introduced?

Jon Skeet's photo

I'm currently writing the 4th edition, and I'm nearly at the end of writing about C# 2... which I've done from scratch, mostly. I'm condensing C# 2, 3 and 4 into one chapter per version, which means cutting out a lot of the detail, unfortunately. (Fortunately the 4th edition comes with an ebook of the 3rd edition, so you can look there for more details.)

As an example of this, I've barely mentioned anonymous methods - I'll go into all the detail of captured variables etc when I cover lambda expressions, because that's what I expect the vast majority of C# developers to use these days.

Nikos Vaggalis's photo

Is Stackoveflow creating hordes of copy and paste programmers, hindering truefull education or is it the other way around, that is complementing education?

Jon Skeet's photo

I expect it's a mixture, and that it's always been a mixture. I hope those who do just copy and paste right now eventually see that it's only a short-term benefit compared with the longer-term benefit of learning how things work. (Having said that, sometimes, if it's just "what command line argument do I need to do X" copy/paste is very effective, I've found.)

I don't think the availability of Stack Overflow has made things significantly worse here - people who are focused on "just get the job done" have always been able to find shortcuts without investing the time in learning more, I suspect. It's also important not to demonize people with that approach; we may think they're not doing themselves any favours, but it doesn't mean they're evil or should be treated badly. This is a failing in myself - I suspect I've been too harsh with those who don't appear to want to learn, in the past. I hope to improve in the future.

Peter's photo

Is Node Time a never-ending project, or will it one day be 'complete'?

Jon Skeet's photo

I suspect that the only point at which I'll take down Noda Time is when Microsoft has embraced/reimplemented it and it's in the framework. I'd be absolutely fine with that.

Until then, I at least need to keep producing updates when there are new versions of time zone data.

Realistically, there haven't been many changes in the codebase since 2.0. I want to release a 3.0 which removes binary serialization and embraces Span<T> at some point (it may well only target netstandard2.0) but there aren't many extra features I really want to add. There's range-related stuff we might be able to do, and maybe there are some extra calendars we could add, but I'm pretty satisfied with the bulk of it.

(There's a lot of work that could improve the docs and web site, but that's somewhat separate.)

William Estoque's photo

What essential books do you recommend that are related to programming?

Jon Skeet's photo

I suspect the book that would improve the software engineering world most if all software engineers read it and really took it in would be "Everyday Sexism" by Laura Bates. Understanding how shockingly sexist the world is in all kinds of different ways, and then thinking how that applies within the software industry, might help us to overcome it - both in terms of our own industry diversity, and building products which better serve all users. (There are plenty of other great feminist books of course; that's just one that I know is pretty accessible and has the kind of data/evidence that I suspect a lot of existing software engineers may find compelling.)

That's a serious answer, but if you really pressed me for a programming book, I'm not sure what I'd recommend, other than C# in Depth of course. I have shelves and shelves of programming books, and I rarely use them. I do think books are a great way of learning a language or framework, mostly because they're structured knowledge, designed for the task - all the information is usually out there already, but you don't know the order in which to read it. Books provide that ordering, as well as a consistent narrative and approach - hopefully, anyway.

Nikos Vaggalis's photo

Is a book these days, where there's competition by other mediums at large, like video lectures/mooc's, still considered a viable option? Have you considered using those newest mediums for teaching ?

Jon Skeet's photo

I've recorded various Pluralsight videos, and some of my conference talks are online too. I think it's important that there are lots of different media available for teaching, because people learn in different ways.

Personally I find reading (whether online or - less often these days - in book form) more useful than videos for most things, but I know it varies.

I do think there's a lot of benefit in a structured approach to learning when you're a relative beginner in a topic, instead of learning piecemeal. I'd expect a good online course to do that in the same way that a book does, but there's less benefit in watching lots of different, uncoordinated videos, each on one different language feature, for example... each video may assume a different amount of knowledge beforehand, use different metaphors etc. With a structured, ordered approach you can build from one topic onto another.

Want to read more?

Browse featured discussions

© 2020 · Hashnode