6 ms·
The article was about soft skills (a.k.a. interpersonal skills), but I most clearly see the distinction between expiring vs. permanent skills in my field of stu
by nayuki 6y ago
The article was about soft skills (a.k.a. interpersonal skills), but I most clearly see the distinction between expiring vs. permanent skills in my field of study, computer science + software development.
When I look at what's hot - in people's blogs, in bootcamp classes, and in what people like to boast about - I see stuff like the React framework and Node.js and MongoDB. Having been in the industry long enough, I've watched these top trends change every few years.
Meanwhile, what I learned in university is all the unpopular stuff but that which underpins the technologies we use today. For example: Mathematical proofs, regular languages and automata, time complexity, computability, balanced trees, assembly language, recursion, pointers, declarative rules, SQL, various subsystems of operating systems, etc. This stuff gets mentioned a lot less in popular discourse, but I find that my knowledge in these areas accumulate over time instead of going out of date with each new fad. Moreover, I find that this set of knowledge continues to help me understand and work with new things that come out in this field.
- gen220 6y agoI totally agree that the most unpopular, foundational stuff is essential. I do think there are some timeless bits of technical knowledge, that will serve you no matter what high-level tech (the ones you mention, and other) is fashionable. In roughly descending order of importance, I'd put forward: the shell (bash, zsh, ...), gnu coreutils, modal text editors (ed, vi, vim, emacs), fundamentals of linux sysadmin, git, the networking stack up to HTTP (starting at least from IP). these are all good examples of tools that have aged very well, provide a disproportionate amount of power relative to their learning curves, and have a very good shot at being timeless. They all also have the dual-benefit of not traditionally being taught in schools. I guess it's assumed you can pick it up along the way, which is true, but these are all complicated enough by now that they merit detailed study from time to time. In any case, because most people in the industry come from universities, they don't natively have these skills, and they can be an edge for you.
- birdyrooster 6y agoWhen I interview people I focus on those things you mentioned and so don’t bother trying to quiz them on anything domain specific to their past experience or our future expectations for them.
- mcguire 6y agoChorus: "You grill them on irrelevant details?!?"
- gen220 6y agoI will upvote this, but it can unfortunately be seen as discriminatory towards the poor folk who have built their careers maintaining windows servers. :) although, like oil and water, it's probably unlikely they'd apply for a position at a *nix-based shop.
- Consultant32452 6y agoA friend and I were joking today that we could probably create a career out of helping people/companies fix their git issues. I've been to several employers now where most of the developers have an anxiety attack when they get merge conflicts. Being good at this is really great, though I'm not sure how to capture that on a resume, because basically everyone lists git these days.
- gen220 6y agoheh I've noticed this, too. There are a group of us at work that are known as "git surgeons", maybe that's the modifying noun you're looking for! In general, claiming status as a <technology> <noun> will get you positive attention, as long as it doesn't come off too arrogant (e.g. expert, master, w/e) e.g. git guru, nix nerd. It reminds me of this excellent article [0] that I like to share with all the engineers I work with, every year or so. In that case, you'd be a "taco bell programmer". But it's maybe too self-effacing depending on your opinion of taco bell :) [0]: http://widgetsandshit.com/teddziuba/2010/10/taco-bell-programming.html http://widgetsandshit.com/teddziuba/2010/10/taco-bell-progra...
- the_af 6y ago> because basically everyone lists git these days True! And apparently you cannot skip listing it. I recently changed jobs and was told one red flag in my CV was that I didn't list git as a tool I was familiar with. This wasn't a recruiter on a buzzword hunt, but the actual technical screener. I had explicitly removed all filler because I thought interviewers wanted to focus on the important bits... (got the job anyway, thankfully).
- eldavido 6y agoCame here to say this (mostly). You mentioned a bunch of computer science stuff. There's a lot in pure software development/engineering that's rather permanent, as well. Was working on a project 7-8 months ago where we had a node codebase and a C++ one, and needed to share behavior. Rather than write it twice, I figured there had to be a way to share code directly, because I knew many node extensions have bits written in C. And of course there was -- but it required knowing about things like ABIs, reactors and event loops, linking and compiler internals, etc. There's all kinds of timeless hard skills in software dev. Knowing how to modularize things properly, how to create the right abstractions, how to name things well, how threading really works.
- deleted 6y ago[deleted]
- taneq 6y agoIt's always worth knowing and working on the basics! Also, with the "what's hot" frameworks, just because something's no longer flavour of the month doesn't mean it stops working. It's perfectly OK to build something using whatever last-month's tech you're conversant in and if it does the job, what more do you need?
- rectang 6y agoWithin the field of software development (as contrasted with computer science), there are also skills which persist beyond fads: • unit testing * source control * documentation * FOSS contribution mechanisms and licensing * security concepts like defense in depth, threat modeling Even if you learn such skills in conjunction with a specific technology, they won't expire. For instance, once you get accustomed to writing unit tests under one framework, you can easily switch to another — the hard parts are understanding how to get a good ROI on the time you spend writing tests, how to write robust tests, how to write testable code, and so on.
- TeMPOraL 6y agoTo add to your list: * debugging * profiling * logging
- Akronymus 6y ago> Meanwhile, what I learned in university is all the unpopular stuff... The stuff you listed is specifically what interest me. Most languages are quite comparable anyways, just different syntax but not fundamentally different.
- deleted 6y ago[deleted]
- bcrosby95 6y agoAren't bootcamps aimed at people with little to no development experience? Your first dive into a full web stack - regardless of which stack that is - will give you all sorts of skills that never expire. I consider it like a CS101 but for the web - would you say that CS101 teaches you stuff that expires?
- mcguire 6y agoYes and no. My CS101, CS304P, was taught in Pascal and just involved general, basic programming. It didn't so much expire as was largely irrelevant, except as a foundation for the next round of things: algorithms, data structures, formal math, assembly, machine architecture, and so on; these were then foundations for the rest of the education. Bootcamps are like taking CS101, then saying, "We're done. You can go get a job and pick up the rest as you go along." (Which is of course possible, but only for those who are very dedicated.)
- joncrane 6y agoWait, MongoDB is still hot? I thought it was debunked years ago and was essentially a laughingstock.
- derivagral 6y agoMongoDB (NASDAQ: MDB) is >$10b market cap today. Anecdotally, I've worked at multiple places that (For Reasons™) launched on Mongo, built a relational schema on top, and still exist today.
- the_af 6y agoYour anecdote rings true according to my experience. Did people in many of them end up complaining a lot about Mongo too, but "hey, it is what it is, and it's what we use now"? A consequence of this is later, junior devs have their experience shaped by this kind of places, and end up choosing Mongo for their next piece of software, perpetuating the cycle of... life?
- legerdemain 6y agoThat's the HackerNews echo chamber of received opinions in action.
- the_af 6y agoIt's still hot and used in successful businesses, regardless of its technical merits and pitfalls. It's pretty trendy, too. HN is a strange echo chamber. The same place where more than one person told me "Java is not good for general purpose development". Oh, well.
- dkarl 6y ago> SQL Generation after generation of programmers takes one look at SQL and decides it would be more convenient to believe that relational databases don't solve any of their problems. If there's one thing I would recommend to engineers at any point in their career it would be to, if they haven't already, learn enough SQL and enough about relational databases to feel comfortable using them for what they're good for. You start to see a whole class of problems as solved. And there are still plenty of cool problems to work on that relational databases don't solve well.
- cheez 6y agoAnd if you aren't convinced, SQLite (and postgres) implemented MongoDB as a feature ;-)
- StavrosK 6y agoWhich should be used very sparingly, unlike the actual MongoDB, which shouldn't be used at all.
- cheez 6y agohaha. I use it for application plugin configuration values which allows plugins to do whatever they want but also provides some structure just in case sweeping changes need to be made. Basically where schemas aren't important or will be defined by someone else.
- jointpdf 6y agoI’ve heard (way) more than one story about MongoDB mysteriously annihilating all the data. Launched into oblivion. The worst imaginable outcome for a database.
- StavrosK 6y agoOh yeah, I have two of those myself.
- 6y ago
- 908B64B197 6y agoThat's why whiteboard interviews are sticking around; Someone who knows the fundamentals can constantly grok new frameworks or tech. Even if a new hire has never used Git, if he has ever studied graphs it will be obvious to him. The opposite isn't always true.
- wolco 6y agoWhite boarding ability is really trending down lately. Being able to perform a skill in an abstract matter verbally is the opposite of what the job entails usually so it makes a poor proxy. Agree with you that fundamental skills are key. I don't think we have figured out how to measure them.
- hintymad 6y agoYeah, I was going to say the same thing. They are all soft skills. I'll add a few hard skills for STEM jobs that are not necessarily specific to any field: - Number sense. The ability to notice inconsistencies from hundreds of rows and columns of a spreadsheet, for instance, is critical to both projects and career. Being able to carry out back-of-envelop calculation is a crucial skill too. - Statistical sense. I'd even venture to say it's a survival skill. Too many people make statements that this: I saw a pattern of cloud every time when an earthquake happens, therefore, if I see the pattern, I can predict that there is going to be an earthquake. Or how many people are fooled by Simpson's paradox in their daily jobs? - Mathematical maturity. How many engineers missed the gravy train of the machine learning because they couldn't or were afraid to understand basic college maths, like linear algebra, vector calculus, or mathematical statistics? - Mathematical modeling. We don't really need to find out the boundary condition of a system of PDEs, but the ability to model a system mathematically is of huge value. - Intuition of your field. For backend engineers, for instance, the understanding of the basic theory of distributed systems, the understanding of performance modeling with queuing theory, the understanding of common data structures and algorithms in OS/databases, the understanding of concurrent and parallel programming, and the ability to code up anything reasonably prescribed, of course.
- AlchemistCamp 6y agoI've thought about this too as a student and in relation to professional skills. I call the concept "Engines vs Powerups", due to having played a number of racing games as a child where you can spend prize money from races on improvements to your car or other items between levels. It's a spectrum, too! Computer languages fall in the middle. Knowing PHP is a lot more durable than knowing Drupal, but PHP probably won't stay relevant as long as Spanish will. One thing I'd share, is that I've gotten a lot of mileage out of skills that were once hot and are now useless. In fact, part of how I got my first well-paid software job at Groupon was because I was comfortable with Backbone.js and CoffeeScript! Neither are used much at all anymore, but I learned a lot of other things at Groupon that have helped me since and they opened the door. https://alchemist.camp/learning-machine/engines-powerups https://alchemist.camp/learning-machine/engines-powerups
- Alekhine 6y agoWould you mind explaining how learning proofs has helped you? I'm currently studying computer science on my own, so I would appreciate any tips.
- nayuki 6y agoThe ability to read and write proofs lets me confirm truth independently, without needing to blindly trust someone's claims. As a quick analogy, if you know how to do arithmetic by hand, you can check whether an electronic calculator is faulty. In my opinion, here are the most important mathematical topics in computer science which are related to proofs: Basic algebra, inequalities, functions, set theory, Boolean algebra, predicates, quantification (for-all & there-exists), weak&strong&structural induction, formal definition of big-O notation, preconditions & postconditions, loop invariants, termination, recursion, regular languages, Turing machines, computability. Example: If you don't know the true definition of big-O, you can still identify common patterns by counting the number of nested loops. But there are non-standard cases (e.g. Euclid's GCD algorithm) and contrived pathological cases where you must appeal to the formal definition in order to prove anything. Example: Somebody hands you a red-black tree data structure plus algorithms, in either pseudocode or real code. How can you justify that their work is correct and won't corrupt data? You need to do proof by cases, structural induction, and big-O analysis. Example: You design a new algorithm for analyzing graphs which doesn't resemble anything in published literature. You can't just reuse other people's analyses, so you have to write your own. Without understanding how to do proofs, you're doomed to either cobbling together high-level libraries or creating things with subtle flaws. You'd be unable to synthesize new knowledge or fill in small gaps, due to not grasping the underlying theory.
- Alekhine 6y agoThank you for writing this. To be blunt I don't understand about half of the terms you used, but I eventually will. Have you ever read Euclid's Elements? I recently took one of the few classes left in the country that uses Euclid, and I've been thinking about what a computer science student could glean from it in 2020.