1. 64
  1.  

  2. 18

    I have the impression that under many companies standards, Dan wouldn’t be hired. I’ve made a couple of interviews and probably I wouldn’t recommend him either (that is if I wouldn’t know he was Redux’s creator). I know that Jack of all trades and master of none is something that in general few companies (if any) would be hiring for. But, this has made me re-evaluate how the process and criteria should be handled. Awesome post!!!

    1. 14

      I know that Jack of all trades and master of none is something that in general few companies (if any) would be hiring for.

      As a jack of all trades, I find/found work just fine ;)

      1. 5

        Same here, I change jobs every one or two years to some kind of software developer I haven’t tried before. Every company seems to want one or more tech generalists.

      2. 3

        Some of the best interview advice I ever read (can’t recall where) was along the lines of - “Your job as an interviewer is not to just find out what the candidate doesn’t know, but to find out what they’re really good at”

      3. 10

        I work on a C/C++ compiler and I admit to not knowing all the ins and outs of C, despite working with it in various contexts over the past 20 years. I always have to look things up in the standard (which is a chore just to learn to read, let alone comprehend) and I always have to experiment with an existing compiler to understand behaviour.

        The list of things in this post is incredible and long, and expecting someone to know it all is nothing short of insane. (It’s also nowhere near complete.) If that’s what companies are looking for these days, then I guess either everyone is better than me or there are a lot of liars out there.

        The best thing that school taught me was that there is more out there than you can possibly know, and it’s perfectly fine to be able to say, “I don’t know”. I think it’s really terrible to expect everyone to be an expert in things, and even worse, to admonish them for asking questions to gain knowledge.

        1. 5

          This is a good idea. I think it’d be slightly better if organized into sections (concepts, standards, specific tools, etc).

          I had been building software for a living for a dozen years (including an internship working on IBM’s DB2) before I finally learned SQL! I still don’t understand networking or security & have never used Win32.

          1. 3

            You most likely[0] will never need to know Win32, which is old. These days the modern way to interact with Windows is [WinRT](https://en.m.wikipedia.org/wiki/Windows Runtime).

            [0] let’s say, 95% likely

            1. 3

              I’d imagine if you get hired as a dev to a Windows shop with a few years history, it’s an overwhelming chance the codebase would make use of Win32 API.

              1. 3

                This is almost certainly the case with the vast majority of Windows shops. UWP and the Windows Store have relatively little traction and folks often need to build for older versions of Windows in any case. If you have legacy native code it’s in Win32 and not the Windows Runtime.

                I think the number of folks out there working on native Win32 code has diminished significantly in the early 2000s. Unless you are working on some sort of “shrink-wrap” app it’s most likely you are a .NET developer first. There are niches of WinForms and WPF where Windows experience, including Win32 is important, but it’s only a small fraction of the overall developers writing .NET code.

                1. 1

                  I would be very surprised to see anyone build stuff with Win32 aside from legacy crap, wouldn’t most windows shops have switched to C++/MFC and then. NET years ago?

                  With Win32 I refer to the C API that came out with NT 3.1 and Windows 95, #include <windows.h> kind of stuff. Does anyone ever work with that directly these days, and not use the wrapper libraries like MFC or VCL?

                  1. 3

                    I lump MFC, ATL, WTL, VCL, etc together as “Windows native code development” and assume anyone using those is pretty proficient with the <windows.h>-level development, if they are building a serious app. It’s pretty hard to avoid needing to know the low-level details since you may need to create custom controls etc. I think a good example are the Direct* APIs, like DirectComposition (https://msdn.microsoft.com/en-us/magazine/dn759437.aspx).

                    For developer productivity the message has been to go to WPF, or more recently UWP, but you then have to make a decision about OS support. VCL is probably an anomaly in how it focused on productivity, but Delphi and C++ Builder seem relegated to legacy projects even though they are accessible with free starter editions. The missteps of those products are a story all on their own.

                    1. 2

                      I would agree but there is a LOT of legacy crap out there. Would you really like to rewrite, say, winrar to omit that stuff? What about Unity3D? What about, to pick an example a friend works with, a giant awful hospital charting program that probably has 500,000 users, all of them old and non-technical, and where people may DIE if it doesn’t work right?

                      One of the reasons web apps are so popular is because being able to ignore win32 is a luxury.

                      1. 1

                        Yeah, sure, there has to be a lot of legacy windows development still going strong out there, no doubt. That said, Win32 is not something I’d consider something to put on my “to learn” list in 2019, not even in 2009. In 1999, sure.

                        1. 1

                          I wouldn’t put Windows anything on to learn list in 2019. But if you have to be a Windows dev, knowing win32 to at least basic degree is largely unavoidable.

                      2. 2

                        With Win32 I refer to the C API that came out with NT 3.1 and Windows 95, #include <windows.h> kind of stuff. Does anyone ever work with that directly these days, and not use the wrapper libraries like MFC or VCL?

                        I do. Obviously that’s not much more than an anecdote, but it’s an answer.

                        .NET is a managed environment that does things like garbage collection for you, like Java. It isn’t ever going to be as efficient as native code, and tons of things need to be native. Frankly it kind of fascinates me that there’s this idea that all new Windows code for the last 15 years would run in a managed environment; but how much code in a typical Linux distro is managed? It’s a strange inconsistency that people assume managed runtimes are appropriate on different kernels rather than appropriate for different tasks.

                        MFC and VCL were really aimed at streamlining native Windows UI development. However, tons of code isn’t really UI centric and they just don’t add much there. IMO the story of the last 15 years is the fraction of code doing client side UI has fallen from “most of it” to “a tiny part of it”.

                        So for me personally, I’m using native Windows code at work to achieve efficiency on non-UI code that is deployed at scale; and I’m using native code in my own projects because I can’t stand waiting 100’s of milliseconds for managed environments to start, and don’t want the distribution headaches of using libraries much larger than my actual code. To me that just feels shoddy. If Linux users don’t need to put up with it, I don’t see why Windows users should either, and I’m willing to spend more development time for a better end result.

              2. 5

                Great post. I tackle the problem of being aware of things I don’t yet know or fully understand by maintaining an open Trello board that lists topics I want to learn in a visual way.

                I then mark off topics I am focusing on learning now and topics I want to learn ‘Next’. This helps me greatly. I also try to learn things in context of projects I am working on and the direct knowledge I need to solve the problems I have.

                1. 1

                  How do you keep track of things that you find interesting but you shouldn’t dig deeper?

                  I used to use a system like yours (including the Trello board), but I started to notice I like everything but I don’t have to know everything. Still, I have the problem to “prune the tree of knowledge” I want to acquire.

                  1. 5

                    I keep all things I find interesting and I know in my wiki. It has over 700 topics and growing.

                    https://wiki.nikitavoloboev.xyz

                2. 4

                  This is a wonderful post. It helped reassure me that I indeed have some skills. I get in my head about not having a CS degree and doing one of those “boot camps”. I’ve been employed for almost 4 years in this profession. I’ve learned so much on the job and I really love it. Hiring at the larger companies in this industry is really just a matter of “mastering the test”. I think it’s worth learning and understanding the things that you’d need / want to know. It’s funny how often I clear my head of some of the more esoteric things I’ve learned; some of that stuff just isn’t worth holding on to.

                  1. 2

                    It’s funny how often I clear my head of some of the more esoteric things I’ve learned; some of that stuff just isn’t worth holding on to.

                    Can you provide some examples?