5 ms·
Even though CS fundamentals and contributing in teams are somewhat different skills, in my experience the terrible developers that contribute negatively to the
by bad_user 10y ago
Even though CS fundamentals and contributing in teams are somewhat different skills, in my experience the terrible developers that contribute negatively to the project tend to be those that do not have a good grasp of CS fundamentals.
I mean, some problems we are faced with are very, very challenging and if somebody can't figure out how to reverse a binary tree or do a FizzBuzz, then what can he do?
Also I'm hearing this advice to hire engineers recommended by other engineers quite often, however speaking as somebody constantly engaged in hiring decisions at our company, I must say that recommendations don't scale.
You see, outside the SF bubble of course, our friends are mostly not into software development and we engineers are kind of introverts, goes with the territory, so we don't have that many friends or acquaintances anyway, except for people that we meet on the Internet, which usually live in another city or country. If an employee can produce one good recommendation, that's way, way above the average. It's such a rare event actually that such employees need reward.
This advice also misses the point. The problem is that our industry is constantly growing and there aren't enough good people to go around. Which means we have to take the plunge and hire beginners as well. Investing in the education of beginners is the only way a company can scale in talent. But even then you need a filter. You can't hire anybody that walks through that door, as firing people is a serious drag on morale and a net loss for the company.
So what filter can you apply to beginners? CS education of course, or in other words what people should have learned in school.
- walrus1066 10y agoI find a lot of CS education is not applicable to most SE roles, as they operate at a higher level of abstraction. I've never had to implement a binary tree, if I did, I would be reinventing the wheel. A lot of the necessary skills are hard, if not impossible, to teach in higher education. Mainly because there, you tend to be given an exact, unambiguous specification. Whereas in the commercial world, I've never seen that to be the case, the developers role is to collaborate with the business to nail down the specifics of a high-level business goal. Implementing the code is the easy bit :)
- bad_user 10y ago> Implementing the code is the easy bit :) For web forms that replace an Excel spreadsheet, the kind that usually gets passed around over email or in a Dropbox, yes, the business requirements are usually the ones that are problematic, as you are expected to grok a lot of domain specific details in only a couple of days. But then again IMO, your experience is biased by the problems you've been working on. > I've never had to implement a binary tree, if I did, I would be reinventing the wheel. If you actually had problems involving trees, you'd know that besides the usual data-structures we all know and love, problems involving trees and graphs rarely have prepackaged solutions and the available solutions are leaky abstractions for which you have to know how they work in order to fine tune them or to make a choice between the available solutions. Consider that problems involving graphs many times involve NP solutions that are unacceptable, but that admit solutions producing approximate results, which may or may not be acceptable for your problem. And sure, maybe the problems that you're solving don't involve trees or graphs. That's fine, I think it's been 2 years since I saw a graph problem myself, but then again, medics learn a lot more than they need to treat the common cold, in order for them to be prepared. I wouldn't want to be treated by a doctor that doesn't have the proper education, since my life is on the line. And yet we are the industry that accepts people without a college degree, but given that we also have a lot of responsibility on our shoulders, how accepting can we get? Consider that we build software that controls buildings, that drive cars, that process the confidential data of people. And we as software developers, when we meet, what are we going to talk about anyway? Sure, you might have some personal projects we can talk about, but lets circle back to beginners. What are you going to talk about with somebody fresh out of college or high-school? And even with seniors, not everybody has an interesting project to talk about, so how are you going to assess their worth? Sure, you can always do a trial, but the reality is that firing people is hard and expensive, that's just the way things are and most companies prefer false negatives.
- matt_wulfeck 10y ago> If you actually had problems involving trees, you'd know that besides the usual data-structures we all know and love, problems involving trees and graphs rarely have prepackaged solutions... You seem to argue that having deep understandings of these types of issues makes you a better employee in the long term because eventually you will come across a hard problem that requires these skills. I would argue that an engineer who doesn't have a great grasp on the internals of fundamental CS data structures, but knows how to priotize time, will work on somebody else's mess or deal with corporate BS without complaining is more valuable both in the short and long term. These types of engineers are just simply better and more productive to work with.
- pjc50 10y agoAlso if you restrict hiring to recommendations it's going to be even worse for your diversity. We can at least try to have a recruitment system that doesn't place too much weight on what people's faces look like or nebulous "cultural fit".
- adrianN 10y agoOther than warm-fuzzies, what are the benefits of a diverse workforce for a company? If you could eliminate the problem of bad hires by only hiring jewish black transwomen to the exclusion of anybody else, shouldn't you do it?
- matt_wulfeck 10y agoThe benefit is that you satisfy unspoken but strongly enforced diversity requirements. I'm not being cheeky, this is very important when someone starts to take a critical eye towards your company.
- guitarbill 10y agoIt's hilarious, because our best hires are people who had no CS education. Meanwhile, some of the worst hires were CS grads. Things that are hard to teach: Can you work in a team, especially if some of them are remote workers? Can you leave your ego behind? Can you deal with the corporate BS that gets in the way of programming? Can you think of the user, use-cases, business value, etc of the feature/product you're developing? Can you digest technical information? Things that are not hard to teach: CS fundamentals, programming (given a basic understanding of logic). I won't go as far as to say a CS education is harmful, but it isn't a good indicator, either. Personally, I find CS, in trying to validate itself as a "science" (which it is not, no scientific method, just like maths isn't science, but still valuable), makes stuff over-complicated and relies on terminology far too much. And by focussing on it, you lose a huge pool of potential applicants.
- bad_user 10y agoThat CS fundamentals and programming are easy to teach is a myth that keeps being perpetuated and I don't understand why. I'm also involved in an education program for children and as a matter of fact computer science is among the most difficult subjects to teach, right up there with math. Yes, you can increase interest and engagement by better teaching methods (e.g. playing and building games), but that CS is hard is indisputable. > Can you work in a team, especially if some of them are remote workers? Can you leave your ego behind? In our line of work, working as an individual on your own piece is actually what happens in 90% of cases. The other 10% you have to cooperate with your team to make decisions and to reach compromises on points of intersection, on protocols, on best practices, etc. But if we are honest with ourselves, collaboration in our industry means having contention / concurrency in the development process and that doesn't scale and minimizing contention leads to better productivity. This is why we hate open spaces, why we ended up with micro-services, or why we split big teams in smaller teams. It's all about achieving parallelism by reducing the needed collaboration. Don't take offense in me saying this, but team work is a soft skill that isn't hard to teach or learn at all. So lets be blunt. You're talking about assholes and having assholes really depends on your company's culture and what gets tolerated. If you don't tolerate assholes, some people will change their attitude, some will leave and the rare few will have to be fired, but such cases are rare.
- borplk 10y agoJunior people who are very good at CS often struggle with "real-world software". I had to explain to such a developer once why it was a bad idea to store multiple values into a single database column. It was a simple task of adding a few integer columns to a table but he couldn't let go of the "optimizations" in his mind about how he could use binary bits to represent what we wanted to represent and all that... A person with good CS fundamentals need to go through some tough times for a few years at dev shops where the rubber meets the road and then they'll develop a technical taste.
- bigato 10y agoIf a guy does not understand the DB theory related to data normalization, I wouldn't call him good at CS. At least not DB related CS.
- matt_wulfeck 10y agoThe problem is he/she might be right in a vacuum. Denormalizing the data might be "100x faster!", but they're naive to every other technical non-technical burden that comes along with that decision. Part of our interview process is selecting for people who can come up with the most efficient answer, but efficiency is a squishy thing when you're a member of a team.
- lkitching 10y agoI wouldn't say someone who's never heard of first normal form has 'good CS fundamentals'.
- nradov 10y agoMost CS education has only limited applicability to real-world software product development. It's like hiring a BS Physics graduate to do mechanical engineering work. Sure a smart person can eventually learn to do the practical engineering stuff but it will take a lot of training and mistakes along the way.