11 ms·
This is a really good list. I love the simplicity. I also agree that it is both worthwhile and very interesting to learn the fundamentals of CS. That said, I t
by scandox 10y ago
This is a really good list. I love the simplicity. I also agree that it is both worthwhile and very interesting to learn the fundamentals of CS.
That said, I think it is a mistake to assume that lots of Type 2 developers wander around in a perpetual state of under-achievement. Most of these people are indeed a different class of developer (I think the word engineer is positively abused), but many of them really have almost no professional requirement to understand fundamentals. Any more than they need to understand particle physics.
These developers are a class of systems integrators and they produce a lot of usable systems, at a quality level that represents appropriate trade-offs to the business case they are employed to address.
Yes, many will say this is a less elevated pursuit. It has its own challenges and mindset. It lives at a particular level of abstraction and its very existence assumes stability of that layer of abstraction. The fact that this breaks down sometimes is besides the point.
The reality is most developers probably do Type 2 work, though very many may have or aspire to have a Type 1 level of knowledge and insight. However I think it's unfair to portray a contented Type 2 developer as lacking in some essential.
- movedx 10y agoI'm a Systems Engineer (in the DevOps/automation space) but I want to move towards development more and more. I never did attend university and my maths is poor. I'm in agreement with you that there are a lot of people running around doing perfectly fine at integrating into the industry and solving problems. Recently I've been getting more and more eager to move into development, however. Now perhaps it's just a personality thing, but I'm very keen to learn CS basics and get a good grasp of maths whilst I make this transition. I think this is important for me simply because I want to be able to utilise CS level maths to solve certain CS problems. As I never went to university, I'm losing out on some efficient solutions. All this being said, I could stumble around without this knowledge and do just fine ($200k a year, in fact) as a contractor. I just personally feel the CS level knowledge is important to become good at what I want to do.
- ragix 10y agoYou just described my current position. I'm reading as many books as I can. I want to contribute to the linux kernel.
- movedx 10y agoWhat books have you found so far? Willing to share a link to them (free or otherwise)? :)
- bogomipz 10y agoCan I ask if you contract for multiple companies or just one? What vertical banking, government? That seems like a pretty solid income. Cheers.
- movedx 10y agoThose figures are in AUD. If I worked a full working year, I would essentially earn AUD$850 * 242 (number of estimated working days in the year), or $205,700 pre-tax. That's about USD$154,000 based on xe.com and just rounding a bit. I work in any fields that need me, excluding gambling or anything immoral or unethical. EDIT: forgot to say that I work for multiple companies, yeah. I love around once every 3-6 months, essentially.
- exergy 10y agoAs an Indian guy, I've met my fair share of the type of developers you described. They don't take work home, don't have any particular passion for the job, and are biding time before they can go do an MBA and move on to investment banking or consulting with the Big 4. Just as an aside, your comment was among the most complete I've ever seen. It addressed almost every caveat that I could have though up!
- user5994461 10y ago> They don't take work home, You're not paid for doing that. Please stop.
- jackmott 10y agowell, some people are paid for that.
- freyr 10y agoSome people do that and get promoted, and in the end get paid well. You can't stop that; there are hustlers in every industry and always have been. It's only a problem if the employer starts treating this as the norm, and expects to sacrifice their personal time. Then it's time to find a new employer.
- user5994461 10y ago> Some people do that and get promoted, and in the end get paid well. The fastest way to get promoted when you are young or low on the ladder is to leave your company, not to climb up. Your future companies won't know and won't care what time you put in.
- jholman 10y agoYou're right that for most people the fastest route to advancement requires changing companies, and you're right that future companies are unlikely to care (much) or know (much). But you're wrong in your conclusion. The (good) reason to take work home is not to suck up. That's crappy strategy. The good reason to take work home is that it's practice. The sooner you put in the hours, the sooner you can get-and-keep the better jobs. Obviously there's a limit to personal endurance, and so just pushing yourself to grind out 80 low-quality hours per week is insanity. But taking work home, selected with the intention of improving your own skills, is often good advice for getting ahead. Hustle correlates with prosperity. You're right, though, that if _I_ take work home, that you, user5994461, are thereby disadvantaged in the market. Thus I assume that your imperious demand that others not pursue career success is a cynical ploy to improve your position.
- simonhamp 10y agoThis was so eloquently put, I almost completely saw past how condescending it feels :) Disclosure: I am probably a Type 1-aspiring Type 2 developer
- ultimatejs 10y agosomething tells me in this era the majority of us are not CS/theory-first developers. And that's a good thing. It's the natural thing. And it means we have true inspiration to learn CS when it naturally comes time, rather than artificially enforced training before you have anything to do with all the theory, which also means a harder time learning it.
- nkozyra 10y agoThat's a pretty broad assumption about CS grads. That it was regimented and scheduled does not preclude students being passionate about learning it. And in many cases it's the best possible environment to learn.
- ultimatejs 10y agoI agree. I'm simply saying for many it makes a lot of sense to learn the theory as it actually becomes relevant to what you're already doing. The more important thing though is that it's a line of thinking that enables people and gives them confidence to get going earlier, rather than wait until they've checked a bunch of checkboxes and have been cosigned by an institution. I think all the fears and ego-issues around not knowing enough before you get started are a bad thing, an inhibitor. That said, I now wish I had done those 4 years. It would be amazing to be able to take 4 years off just for school at 31 than to have to struggle to find time to learn in the middle of projects. But it just was never gonna be any other way for me than diving in. And after all, a mindset of continual learning is what it's all about. I think diving in and building something--regardless if you start out early with a CS degree--should be the primary focus. If you jump straight to a CS degree before even building a simple website or simple whatever, it's a mistake. And ideally develop a minor level proficiency and achieve some wins where you start feeling yourself for your growing skillset. If you jump into a CS degree without at least having that, ur making a huge bet on something you know nothing about, that you might not even enjoy.
- simonhamp 10y agoThis was so eloquently put, I almost completely saw past how condescending it feels :) Disclosure: I am probably a Type 1-aspiring Type 2 developer
- donw 10y agoMax Howell, creator of Homebrew, expressed this quite nicely: "Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off." This is not to say that computer science (CS) skills aren't important -- they are! But far too many companies base their hiring process around "are you a recent graduate from a top-tier CS school" rather than "can you do the work that needs to be done here?" Being a software engineer is about way more than just knowing what algorithm to apply to solve a clearly-stated problem. You need to know how to build automated test suites, how to make software which is easy to deploy and maintain, and how to deal with the real world, where Things Go Wrong All The Time. Having worked as a consultant for many years, with a large number of teams, I can say with some certainty that I would rather hire a person that had mediocre-at-best CS skills, but was otherwise a rock-solid software engineer. Because the amount of time they will spend implementing graph-traversal algorithms is asymptotically close to zero. They will instead spend pretty much all of their time needing to write code that other people can maintain. Why would I spend the majority of the interview process focused on the former, rather than the latter? Admittedly, this has given me quite an edge as a manager when it comes to hiring. Because my hiring process focuses on "can this person do real-world work in a real-world context", I usually manage to find rather excellent engineers that other companies overlook.
- bluejekyll 10y ago> Being a software engineer is about way more than just knowing what algorithm to apply to solve a clearly-stated problem. Actually I think this is exactly what a software engineer is. Knowing what datastructure to use in which situation because of its implementation details is important! Yes, it's not the only aspect of the job, but it's hugely important. It can be as simple as Arrays vs. LinkedLists; where Arrays have zero cost access and LinkedLists have high indexing costs, but low constant time insertion costs where you don't know the content length. This can have huge effects on the performance of an application. This is important to applications, and no, you don't have to implement the datastructure, but knowing which to use when and why can save you the time later from having to find all your performance problems.
- 10y ago
- bogomipz 10y agoI'm not familiar with these designations type 1 and type 2. Could you elaborate?
- scandox 10y agoI use the terms of the article itself
- bogomipz 10y agoI actually didn't read the section "Why Learn Computer Science" because my own bias saw this as a rhetorical question :) Now I feel silly. Thanks.
- ionised 10y agoThe article is blocked for me in work for some reason. Can you post the explanation of these terms?
- bogomipz 10y ago>"There are 2 types of software engineer: those who understand computer science well enough to do challenging, innovative work, and those who just get by because they’re familiar with a few high level tools. Both call themselves software engineers, and both tend to earn similar salaries in their early careers. But Type 1 engineers grow in to more fullfilling and well-remunerated work over time, whether that’s valuable commercial work or breakthrough open-source projects, technical leadership or high-quality individual contributions. Type 1 engineers find ways to learn computer science in depth, whether through conventional means or by relentlessly learning throughout their careers. Type 2 engineers typically stay at the surface, learning specific tools and technologies rather than their underlying foundations, only picking up new skills when the winds of technical fashion change. Currently, the number of people entering the industry is rapidly increasing, while the number of CS grads is essentially static. This oversupply of Type 2 engineers is starting to reduce their employment opportunities and keep them out of the industry’s more fulfilling work. Whether you’re striving to become a Type 1 engineer or simply looking for more job security, learning computer science is the only reliable path."
- taurath 10y agoNot frequently talked about - there's a fucking limit to how much one can learn and experience in a lifetime. I'd rather have someone that appreciates aesthetic, design, and people create a frontend for me than someone who can write a compiler from scratch. If you try to look for someone who can do both, you will be looking a very long time (and probably can't afford them). There is no such thing in this day and age as a "best possible" developer for all situations. Going through this list will definitely let you understand the underlying principles and the implementations of the code you write, and the systems its running on - I'm not downplaying the value of learning here. It does frequently feel like its a high horse thing.
- joatmon-snoo 10y agoIn my experience so far, there seems to be a line which demarcates the strong performers from the weak ones: an awareness - a basic, bare-bones understanding, if you will - of relevant theory. A sysadmin or someone in devops, for example, obviously there's minimal benefit for them to understand the ECDSA protocol, and to an extent you don't even need to know how SSH key exchange works. But being aware of them: the role of the private key and the public key, what purpose they serve and the generic high-level overview of their role in SSH - that is information someone in that position would benefit from. For a systems/app developer, yeah, you probably don't need to understand the theory behind how GC works in Java/Python/Go or the intricacies of DNS records, but when you start seeing heap size errors, weird pause times, or network connectivity issues, simply being aware of all of those things means that you know where to start looking. I'm 100% with you - there's a limit, and as with all things, you have to prioritize. But every time I see this discussion come up, there's always this push back: "street skills over book smarts!" And there's always this undercurrent that the book smarts matter but ugh why do people care so much and there's never any talk of a balance: knowing what book smarts you might one day need to supplement those street skills.
- taurath 10y agoI also agree with everything you've said - I guess the key point here is to learn what is necessary for what you do, and do a lot of learning on the peripheries to reduce blind spots. A point which many can argue about how much is "sufficient", depending on the type of work.
- byebyetech 10y agoI think 99% of developers fall into the "Type 2" as you describe.
- sbuttgereit 10y agoI agree with almost everything you say, though I disagree with your second paragraph some. I don't know that I would characterize many Type 2 devs as underachievers, per se, but I think the website we're discussing rightfully points out that there is a real difference in skill level (on the whole) that makes the competitive outlook for Type 2 much more challenging than Type 1. There are many more Type 2 than Type 1 developers. Without something to otherwise set themselves apart from the crowd, those Type 2 developers are precisely the ones you can shop the globe to replace for lowest dollar and not come out the worse for having done so. Type 1, not so easy to shop for price if that's who you really need (most don't). I say this as someone that is very much in that Type 2 category and only encounters the Type 2 developer on a regular basis. I deal in ERP systems, a subject which generally doesn't draw many Type 1's to either creating them or running them for their companies. That's not to say there aren't smart people involved in this area, nor are they underachievers. Still, by and large many of my colleagues have a certain very practical, but shallow understanding, of technology generally and simply aren't equipped for more challenging, real engineering scenario. I disagree with the website in that somehow becoming more Type 1 is necessarily the only way to bolster your competitiveness as a programmer. I do pretty good compared to many of my peers in my area of expertise not because I strive to be an engineer (which I end up doing anyway), but rather because I have gained substantial knowledge of accounting, warehouse operations, logistics support, etc. that allow me to use my modest technical skills (by comparison to the Type 1s) to achieve not just any program for my clients, but often times the right one. Sure, it may not be as efficient as it could be, or as clean, etc. but it matches the actual need better than many of my peers can achieve. The value of that domain knowledge also makes it so I don't compete directly with the Type 2s that "just program" on a global scale. It's helped with age bias, too. Anyway, I still look up to many of my Type 1 friends and (occasional) colleagues for their often times more accomplished technical skills.