14 ms·
Hiring Developers: look for the ability to abstract and not for experience
- meesterdude 9y ago> Ideally all our interview problems should be built in a way that even a non-technical person with highly developed abstract thinking could answer. why is this any kind of ideal? What about reality? > your current technology stack is also irrelevant, the right candidate with great cognitive capacity will be able to adapt fast, pick up new things and bring new ways and ideas, breaking your team’s or company’s tunnel vision. Their fluid thinking and almost extreme ability to identify and extract patterns will exceed anything you have expected. Hire a superstar that will steamroll your existing developers - great advice. Let's not worry if they're collaborative. > I can’t stress enough that hiring based on your current technology stack or domain is extremely wrong. Never do it. Never. If the only reason you are bringing on board new developer because he has a lot of experience in your domain or with the CMS, programming language or framework that you are using, then you are making a kind of mistake it is very hard to recover from. don't hire them for any real reason you might have? Sounds like real sage wisdom. This post is classic silicon valley. Out of touch with reality, and discriminatory towards diversity. People are different. No person is more than one person. I have a lot of experience with hiring software developers. This is mostly drivel. You want to hire talent? Offer good pay, interesting work, and freedom to do it. That's step one. Step two is finding people who can do the work in the given domain(s) of your organization, and step three is finding people who can do said work with your team. There is no step four.
- rinchik 9y agoGood points. I think the topic is more complex than just finding an oompa-loompa for your current technology stack. If you think about long-term benefits for the team and company as a whole, it will be highly beneficial to bring highly able, rational and driven people on board. I'm guessing what you probably have in mind is consultancy, where you need a highly specialized individual to complete this, one, particular project, which is very different from full-time employees. Also we need to carefully start destructing and eliminating this stigma around people who are being perceived and labeled as "superstars". Great mental capacity and ability does not imply bad social skills. This marginalization hurts the industry. Great note about collaboration! This post doesn't cover an entire hiring process, just one aspect of it. Collaboration and communication skills are definitely a must.
- meesterdude 9y ago> I think the topic is more complex than just finding an oompa-loompa for your current technology stack. If you think about long-term benefits for the team and company as a whole, it will be highly beneficial to bring highly able, rational and driven people on board. See point one. It's up to you if you have oompa-loompa work to be done or are trying something entirely new. But the reality is there is a lot of talent out there - the oompa-loompas are out there too, but it's for low paying, uninteresting work (which i tried to exclude). > I'm guessing what you probably have in mind is consultancy, where you need a highly specialized individual to complete this, one, particular project, which is very different from full-time employees. no. The point I was trying to make is that we can overthink hiring, when in reality it's not that mysterious. And the reason hiring is so bad in the industry is because we think it's something it's not. > destructing and eliminating this stigma around people who are being perceived and labeled as "superstars". Great mental capacity and ability does not imply bad social skills The stigma is not around "superstars", but the quest for them and solely them in our industry. We as an industry are hyper-focused on this one type of person and missing out on all other kinds of people than can bring a variety of things to the table (aka diversity). The stigma is not that superstars are anti-social, it's that non super stars have nothing worthwhile to contribute. Which is just a recipe for the classic SV echo chamber.
- xstartup 9y ago>> The stigma is not around "superstars", but the quest for them and solely them in our industry. We as an industry are hyper-focused on this one type of person and missing out on all other kinds of people than can bring a variety of things to the table (aka diversity). The stigma is not that superstars are anti-social, it's that non super stars have nothing worthwhile to contribute. Which is just a recipe for the classic SV echo chamber. Diversity might be good for an established company but for a startup, it's not important at all. I encourage everyone to look for the right person and not waste their time on others. It's their startup, they are the person taking all risk. It's up to them to figure out what kind of person is best fit to solve their problem. After all, they've thought about both problems and solution and long enough to consider taking this risk. It's all or nothing game, no person who succeeded elsewhere can be deemed qualified to change their perception. If you need a superstar, chase him with passion.
- throwawayeoi9 9y ago> You want to hire talent? Offer good pay, interesting work, and freedom to do it. How about just offer good pay and don’t pretend like email archival or configuring LDAP or trudging through poorly-designed databases is sexy, exciting work because it isn’t? Bad news: most work isn’t interesting, and I absolutely loathe when companies, even “exciting” startups that are “changing the world”, pretend that configuring their Jenkins server is somehow life-altering, fulfilling work. Most work isn’t interesting, and that’s fine. I don’t mind configuring Jenkins, or setting up LDAP, or fixing crappy databases, or writing Yet Another Feature. I’m good at those things, and a job well-done is certainly satisfying, but let’s not pretend that my 9 to 5 is anything more than a job. I get excited about my job like I get excited about going to the dentist: it’s something I have to do to maintain a good life, and while I am certainly more than willing to do it, I don’t try to pretend like it’s particularly fun or special.
- meesterdude 9y ago> How about just offer good pay and don’t pretend like email archival or configuring LDAP or trudging through poorly-designed databases is sexy, exciting work because it isn’t? This is 100% fair as well. Some companies really do have interesting work and problems to be solved, and the work is enjoyable and satisfying. But I get that all work won't be like that, and there may be plenty of boring work as well. in your case, i think what would be relevant is making it known that these technologies are used, and that they are configured in the best way possible to ensure they're maintainable. If it's going to be boring work, it should at least be orderly.
- watwut 9y agoI think that ability to do the job and being responsible should definitely rank higher then ability to look "passionable" - which often seems to be more important. Another issue however is that there truly are people who like fixing database, configuring LDAP and other similar practical work. I have met them. They don't find that life altering, but they dont want life altering. They want to come to work, fix stuff, do the job and go home. There is no universal interesting work. What is interesting to me is not interesting to you or other people. I enjoyed fixing bugs in someone elses code, I found it interesting challenge, but quite a lot of people hate it. I like large long lived projects, quite a lot of people hate them. Too many people think that what they find interesting is what everyone finds interesting. What happens in this industry is that the company has a job that requires a lot of routine, but goes out of its way to pretend the job is exciting for people who don't. Because generic idea of superstar. So they hire someone who does not fit position at all. And they would not hire that person who would gladly do the routine thing to them and would be good at it, because he does not fit the expected profile of excitement.
- xstartup 9y ago>> You want to hire talent? Offer good pay, interesting work, and freedom to do it. As someone who has hired a lot of people and offered a 1M+ salary to some of them, they'll take your salary and start their own business with it. Pay what market will bear, never regret again. People are not that loyal no matter what you pay. Even if you pay someone lot more than what they worth, they'll attribute it to their talent and will never feel indebted or loyal to you. (as you might be thinking).
- IncRnd 9y ago> I have a lot of experience with hiring software developers. This is mostly drivel. Quoted for truth.
- tasuki 9y agoThe ability to abstract surely is important. However, I find the "four levels" a little strange. The first three aren't even abstractions! Abstract is the opposite of concrete. Abstraction is by definition not a concrete object.
- paultopia 9y agoI was thinking something similar. The first few levels of "abstraction" seem to me to be more about visualization skills and spatial reasoning. For example, we'd expect a painter to be particularly good at those, but not necessarily good at math or monads. The 4th level seems like a totally different kind of category from the first three. Which, come to think of it, matches my personal experience. I have zero spatial ability---back in the 80's in California they actually gave us standardized tests in elementary school including a spatial ability section, and my scores were always like 90+%-ile math, verbal, and like 20%-ile spatial. Never been able to draw for shit. But was always advanced in math, 99th percentile lsat (logic-heavy) scores, top grades in stats, etc. So am I at the 4th level but not at all at the first three?
- ilaksh 9y agoThe author of the article has enlarged the meaning of the word abstraction. It's just the wrong definition. It would make more sense if he described it as 'important cognitive skills'. My definition of abstraction is moving from specific examples to more general systems. I definitely remember the process as I was teaching myself programming through my childhood of learning and improving my software abstraction skills in particular ways. One type of abstraction that took a bit of practice to get good at when I was starting out like eight years old was recursion. I got better at using this type of abstraction by specifically practicing with the goal of converting loops to recursion. Another type of abstraction is creating classes in order to reuse your code. This was something I learned about and gradually got better at over the years through practice and initially from a few books like Turbo Pascal Disk Tutor when I was in middle school. Sure there are some innate abilities but I think it's not quite so cut and dry as the author makes it out to be with innate versus learned ability.
- SAI_Peregrinus 9y ago
- cjcenizal 9y agoFunny, I see where the author is coming from and agree to an extent: capacity for abstract thought is marked by ability to mentally manipulate concepts, not things. But in software engineering, I think the ability to analyze the information which constitutes a domain and then synthesize ergonomic abstractions out of that information is more relevant. Martin Fowler would call it domain modeling, I just call it software design. Of course I also obsess over names of things, interface design, and mental models, so I’m biased!
- rco8786 9y agoI didn’t read the article, but what you described sounds a lot like...abstraction. Right down to using the word explicitly.
- s_ngularity 9y agoI think he's trying to get at the distinction between being able to think in abstractions versus choosing the correct abstraction for the problem at hand. The first is a prerequisite for the second, but the second is far more important.
- aytekin 9y agoI have done countless developer interviews. I did bad hires and made good hires. Two things I learned: 1. Get them to write code (using their language of choice and google searches allowed when stuck) 2. Did they do any projects on the side? A lot of people who sound great on paper can’t write code. Or write shitty code. People who are passionate about their work read a lot and do side projects.
- rco8786 9y agoI hate the side projects trope. I’ve worked with tons of great engineers who have lives outside of code.
- shados 9y agoYou can absolutely be good without side projects. And there are a lot of ways to be useful as a software engineer. But all other things being equal, when looking at code, it literally comes down to practice. The more code you've written, the more things you've had to research and the more mistakes you've already made, the faster you'll be able to produce good code in the future. Side projects help that aspect. Because there's only so much you can do and learn during your day job. You can always make up for it with other skills, experience, or just the difficulty level of the projects you've been on and nail the job anyway. Side projects help people who DON'T have all of that nail jobs. They can go "Look, I may not have worked for Google, or I may be only a few years out of school (if I ever went to school), but I made up for it with these projects". And of course, you can always have both :)
- mlevental 9y agoyou know what i hate? recklessly divisive rhetoric. a life out of code and side-projects: the two things are not mutually exclusive. op isn't suggested he expects candidates to have written an os kernel. all op says is he/she looks for side-projects. if you were really interested in discussing the matter you would've asked some exploratory questions (e.g. what is the threshold for substantial side-project). then you would've really had an interesting conversation (because it is possible to have a life outside of programming and still be interested/engaged enough to have a couple of small side projects. and it's completely fair to expect engineers to get extra training. many many many other professions have exactly the same requirements. doctors/dentists have to regularly get re-tested on certain skills/attend conferences/etc.). but no instead you with the one-liner. try just a little harder and maybe you'll actually change someone's mind that's blindly obsessed with side-projects.
- jrochkind1 9y agoSo how does one screen for abstract thinking in an interview process?
- mixmastamyk 9y agoWas waiting for this in the article, then it ended.
- cyberpanther 9y agoThe problem is most people get abstractions wrong. Abstracting too much can lead to Architecture Astronauts. (https://www.joelonsoftware.com/2001/04/21/dont-let-architecture-astronauts-scare-you/ https://www.joelonsoftware.com/2001/04/21/dont-let-architect...) And not abstracting enough can be a mess in your code and make a product dull. By focusing too much on abstraction, you’ll get a really lopsided team. And remember it only took one really abstract thinking Willy Wonka and a bunch of oompa loompas to make really great candy. Too many Willy Wonkas and nothing would ever get done. Lastly, most people only get abstractions right with experience. So there is still some value in experience.
- dasmoth 9y agoremember it only took one really abstract thinking Willy Wonka and a bunch of oompa loompas to make really great candy An interesting difference between software and mass-produced physical goods is that a single Willy Wonka can do a fair without needing oompa loompas. It’s not an especially fashionable way of doing things right now, but don’t dismiss the possibility.
- cyberpanther 9y agoyeah but the oompa loompas keep you entertained with song and dance too.
- ben_jones 9y agoI often get abstractions wrong the first time through. Usually the second or third attempt (often days later) I'll come across something concrete that can be put into production. So while I agree abstraction in and of itself is not a silver bullet, the ability to iterate on abstraction(s) is immensely valuable. Also the plain desire to seek a better abstraction despite a "working solution" is a powerful trait when kept in check. The desire to continually do better that is.
- crdoconnor 9y agoYeah, the best abstractions I've built have been 3rd or 4th iterations after persistently refactoring to account for unexpected impedance mismatches. I'm skeptical of the notion that great code is designed up-front by "clever architects". I think the best code is usually the result of dirty hackjobs, persistently refactored into clean code.
- s0mesayitsluck 9y agoI see abstraction as the ultimate misconception of modern software engineering / development. There's so much abstraction nowadays, software developers have not the slightest clue what they are doing anymore besides copypasting some framework. We're basically at the point of developers competing in abstraction without any fundamental understanding. "I can do this with only two lines of code." In terms of the article, those people getting hired, are not necessarily the ones especially good at abstraction. They just have experience in what others have abstracted for them, to use as a tool.
- kylnew 9y agoI generally agree with this article and wanted to just post some thoughts I’ve had on this when it comes to hiring juniors out of boot camps when the expectations of CS knowledge would be tough. 1. I think they need more than 1 project, either in your domain or multiple domains better yet. To me this is one way of demonstrating abstraction capability. 2. Ask a problem that involves modeling several objects where a hierarchy might be involved. Ie modeling a service like Instacart, that has both customers and employees, but maybe are all types of Users. Do they catch on to these common traits? A question like these can even extend to more senior roles it may just be a matter of how much hinting. 3. I still believe some sort of whiteboard challenge has value, but make it fair. A lot of O(n) type problems are straight forward looping over array and doing work type things. These aren’t killer gotcha problems intended to haze or assess depth of CS skill, they are for stimulating dialogue. I was anti whiteboard for a while, particularly because I felt like I was hazing, even when I gave lots of time and did everything I could to make the candidate comfortable. But without it I feel something is missing. So my new principle is just don’t make it tricky.
- madeofpalk 9y ago> [not] intended to haze or assess depth of CS skill, they are for stimulating dialogue This 100%. We do an in-person 'pairing exercise' where they work on a simplified tax calculator. We expect people to solve the problem, but really what we're looking for is their thinking and to see _how_ they solve it. By gradually ramping up the requirements/difficulty, and by asking more questions we're able to learn a lot about the applicant.
- kylnew 9y agoI really like the idea of pairing exercises too. I’ve done an interview before as the interviewee where I didn’t actually do the typing but did all the dictating to build out a class with a TDD approach. It never felt like I was under heavy scrutiny and there was so much conversation. It’s amazing when you walk away from an interview feeling like the experience was positive/educational regardless of outcome.
- dwaltrip 9y agoPerhaps I'm misunderstanding what the author means by "no connection to the real world", but good abstractions should be deeply connected to reality. Wikipedia describes abstractions as: > a conceptual process where general rules and concepts are derived from the usage and classification of specific examples, literal ("real" or "concrete") signifiers, first principles, or other methods. > Conceptual abstractions may be formed by filtering the information content of a concept or an observable phenomenon, selecting only the aspects which are relevant for a particular subjectively valued purpose. https://en.m.wikipedia.org/wiki/Abstraction https://en.m.wikipedia.org/wiki/Abstraction
- platz 9y ago"Being abstract is something profoundly different from being vague … The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise." - dijsktra OP is confused about what abstraction is actually for
- ramzyo 9y agoWhat a great quote, thanks for sharing!
- mikmoila 9y agoAnother: "Abstraction is selective ignorance. - Andrew Koenig."
- danidiaz 9y agoTwo more: "The abstract is no more than an instrument, an organ, to see the concrete clearly." —José Ortega y Gasset "Good general theory does not search for the maximum generality, but for the right generality."—Saunders Mac Lane, who knew a thing or two about abstraction
- notduncansmith 9y ago
- jondubois 9y agoI disagree. Programming is a social activity. Developers who are too smart are not necessarily good developers. They might overengineer things and make them more complicated than they need to be and it just slows down everyone else in the team. Good engineering is really all about empathy and psychology.
- white-flame 9y agoIf somebody cannot abstract, then they will not be a good software developer, period. Code will be copy-paste, genetically engineered, and not understood even by the author why it does or does not work, meaning an inability to document it or even explain it to coworkers. Assuming people can keep fully in mind about 7-10 things at once, a person who can abstract can keep entire constructed systems in mind as one of those "things". A person who cannot abstract will only be able to hold that many immediately tangible source-code level concepts in mind, having a hard limit on the amount of complexity they can have in their projects before their mental organizational capabilities collapse, in the same way people throw up their hands and give up at math problems that are beyond them. It's a necessary but not sufficient skill; as you mention, social tuning and business mindedness tend to round out effectiveness from just raw skill. And if somebody's being an Architecture Astronaut in their "abstraction", then they're not abstracting what they're doing in context of making a workable system; they're just rote copy-pasting architectural memes that they think matches a pattern, just like the ineffective programmer.
- GuiA 9y agoThis seems like a strawman. Are there any humans with a high school diploma/college degree who "cannot abstract"?
- white-flame 9y agoIt's obviously about being able to abstract computational processes and programming constructions, as done by Developers who are Hired to build software. And yes, I've dealt with real people on all ends of this spectrum, and there's stark common denominators in their respective successes and failures. That's not to say this article is any good, but the skill of abstraction is still paramount to software development.
- guelo 9y agoIf you step back for a moment it will be obvious that the idea that experience is worthless is just plain wrong. Many times I have had to deal with the work of supposedly genius coders that is either a complete reinvention of some standard way of doing things for no benefit or overly complicated because they weren't aware of known simpler solutions. A humble strong programmer who stands on the shoulders of the aquired knowledge of their whole industry and has learned from his failures and successes will always beat the arrogant but naive 10x super abstracting genius.
- Bucephalus355 9y agoYeah what I got from this post is “discrimination against older Americans”.
- lhorie 9y agoAren't ability to abstract and experience sort of similar? I don't really consider the ability to write a generic function (instead of copy-paste) to be the same as the ability to abstract. To write a good abstraction you need to understand both the underlying system and the consumption pattern to avoid abstraction leaks, boilerplate, hiding of useful features, etc. You can't really be sure that you're writing a good abstraction without at least having some idea of what are alternative approaches and what are their strengths and weaknesses.
- IncRnd 9y ago> Aren't ability to abstract and experience sort of similar? No. They are distinguishable from each other. One may feed the other, but they are separate. > I don't really consider the ability to write a generic function (instead of copy-paste) to be the same as the ability to abstract. To write a good abstraction you need to understand both the underlying system and the consumption pattern to avoid abstraction leaks, boilerplate, hiding of useful features, etc. You are confusing abstraction with data and function hiding. In the article abstraction means the ability to meta program, translate one problem into a simpler generic problem, etc. This is a skill most of the industry lacks _in practice_. It is a skill that all 1% coders have, but it also doesn't make experience go out the window.
- dep_b 9y agoI think there can be different reasons to hire someone. If I'm running a project and I'm having all kinds of problems to get my node.js performance to an acceptable level I'd look for a programmer that knows how to tweak node.js and all parameters associated with it (scripts, server, OS). If I'm starting a project and I already have a node.js specialist aboard and I need to hire someone for the long term I can basically hire anyone with the right talents. But it's a very different story depending on the parameters.
- ddebernardy 9y agoJust have a senior software engineer or two supervise mathematicians (or to an only so slightly lesser degree, physicists). The latter are excellent at abstraction, usually pick up programming languages in no time, and can readily get steered towards using software best practices by their senior peers provided the latter can articulate a rational explanation as to why this or that best practice is just better.
- potta_coffee 9y agoI hope you're joking. I've worked with these kinds of academics and while they tend to have excellent capability for abstract thought, they also tend to not give a shit about practical matters like usability or even just shipping code.
- booleandilemma 9y agoHiring Doctors: look for the ability to abstract and not for experience. Hiring Lawyers: look for the ability to abstract and not for experience. Hiring Mechanics: look for the ability to abstract and not for experience. What is with this industry and its strange disdain for experience?
- pixelperfect 9y ago> Ideally all our interview problems should be built in a way that even a non-technical person with highly developed abstract thinking could answer. This technology is more than a century old and is called an "IQ test." But giving IQ tests is legally dicey, so SV companies use algorithmic challenges instead.