I'm an experienced web dev and I've recently been interviewing for new fullstack role.
# background
Previous role I used TS everyday for all types of developement: api development and frontend via React.
In my current role I inherited an non-typed codebase and I decided to use JSDocs vs Typescript.
I made that decision because I knew that our older monolith framework and setup would cause compilation issues with TS and I wanted my future self and new developers to focus their skills on other problems with higher ROI: building features, refactoring code.
JSDocs didn't mean we were cowboys: we implemented tests, we implemented JSDoc docs and type annotations, we implemented object schema validation.
We cared about the same things that TS cares about. We only said no to the compulation step and all the problems that may arrise from that sub-system.
# views
I don't believe that TS should be tech that is blindly implented for all types of apps.
I also can wager that most people don't need type safety enough to face some of the random issues caused by the compilation step of TS.
The reality is that TS adds type safety into a language ecosystem that is not built for it. We've made serious serious strides towards full support, but not enough to make it clean sailing.
Type-safety in Haskell or Rust is an entirely different story.
Weirdly I'm not alone in this view with big profile pundits like Rich Harris (SvelteJS) prefering JSDocs over TS because there's less friction when using a non-standard language.
For the tin hat owners out there there's also problem of TS being largely driven by a corporate sponsor, and like React, this setup produces a roadmap that can be at odds with the needs of smaller companies that use the project (breaking changes, fast major version api changes, deprecation of features, adding of new features that increase compilation, hurt performance etc)
# recent job hunting experience
Each time I've mentioned these views in recent interviews I've been labeled as not technical enough to work on TS projects.
It seems to me like there might be some dogmatic views at play here: - a) if you dont use/support TS you hate type safety - b) if you dont favour TS you dont understand TS enough to work with it
I'm very confused by how these events have played out and I wanted to share that with others.
I welcome any and all pro/cons comments on this.
As for me going forward? I'm going to keep my TS views to myself because I'd rather get a job than be right.
Get the job first if the basics check out. Then "pay your dues". Show that you are a good team member who is not just complaining but actually getting things done with the resources given. You may be right in your argument but make that point once you have the trust of the team. Not before that.
Also, there is a reason why things are done in a certain way at a certain company/team. It may not be perfect or ideal but you need to first understand the background/why. Then if you feel that you have a case to make, make it.
But first, Pay your dues.
A guy on my team is in love with FastAPI, yet a big project we need to integrate with uses Flask. Instead of just using Flask, he ranted on it until the lead architect on the project built a FastAPI implementation just for him... and then he never used it. This was probably for the best, as having random sections in FastAPI for no good reason would just make the code base harder to work with for every other dev who was familiar with Flask, but probably hadn't worked with FastAPI.
If a company is using TS, use TS. Being the lone hold out makes it harder on everyone. Consistency is more important than minor differences of opinion.
Especially, when there is a company wide agreement to use TypeScript. No one, wants to keep having discussions with a new colleague about why not to use jsdocs for type annotations. Time better spend on other things.
Maybe try to do some practice interviews with someone you know to see how it comes across from their perspective?
For all the developers out there, there are extremely few who understand CS concepts well enough to build things correctly.
For most of them, their knowledge is in a form of map, where they just remember how to do certain things and when they need to do that, they just follow the template that they remember.
As such, to make use of those developers, you basically need to provide handholding for them as much as possible. This is pretty much the reason for things like OOP, frameworks like React, Type safety, e.t.c. All of these basically restrict what the developer can write in order to match the defined "API" as provided by those language features.
And because things need to move forward, the optimal setup from a business perspective is to adopt a strict framework and make use of the developers, rather than focus on hiring the very few talented developers.
But you’ve got to tread the line carefully, treating it more as an academic discussion than a sermon. If you can’t strike that balance, then don’t bring it up (and if you’re so dogmatic about it anyway, then don’t work there).
It’s perhaps revealing that you consider the interviewers to be dogmatic. Are you sure that you aren’t the one coming off as dogmatic?
Personally I don't think there's any good argument not to use typescript over javascript
Edit: I think this would be much easier to accept if the job market weren't so tough right now. You could shop around for an employer better aligned and who "gets it."
Sort've reminds me of that quote "Do you want to be right, or do you want to be married?"
2. The way to present your ideas does matter. You can cheer for the beauty and elegance of something without throwing dirt at another thing
3. Devs who claim themselves to be ts-demigods (also counts for other tech ofc) but are only hunting for the newest hackiest way of creating code that noone besides them understands, can kill ur project in the same way as the java8 dev who hasn't looked at different languages or tools in 10 years and is busy debugging nullpointers for 10h a day.
I'm not saying anything new here, but most people in tech gravitate towards the most popular technologies and opinions because it's safer to do so – reiterating the popular opinion tends to be rewarded in corporate environments. Is React really the best technology for most websites? Probably not, but that doesn't stop it being the go to these days. 1, because it's what know; and 2, because no one is going to be criticised for building something in React given its adoption and approval.
But perhaps a better example here might be JSX. I remember how when JSX was first demoed people on HN were highly critical of it, but as it began to be adopted those criticisms faded and were eventually replaced with approval. In general people like what they know. New ideas tend to be received with a high degree of scepticism and popular ideas tend to guarded. JSX didn't change, but adoption changed and this changed opinion.
TS in my opinion is an imperfect solution to type safety in JS, but despite its imperfections it's a pretty damn good solution – and its a solution that's been widely adopted. I suspect even you'd admit that JSDocs isn't perfect either – even if it does have some advantages to TS. However what's indisputable is that JSDocs is much less adopted, and I'd argue adoption is an important consideration when picking technologies because a core part of writing good code is writing code others can understand and can maintain.
That said, if I were interviewing you so long as you could see both sides and expressed a generally positive attitude towards TS I'd appreciate your ability to express a unique and critical opinion, but you should understand that many will be hostile given your providing a view that isn't widely held.
You should also keep in mind that interviewing tends to be a process to screen out bad candidates rather than a process to find the most competent candidates. Interviewers typically want to confirm you have the right experience and that you can work well with the existing team and technologies. While your criticisms may be valid they may not be well received during an interview that wants to simply establish your proficiency with TS.
I always advise people to not taking interviews personally. Interviews are brutal. Interviewers often have several candidates to consider and their decisions can be influenced by when they last ate and how much sleep they got last night. Even if all the candidates are great they still need to make arbitrary decisions about which candidates to reject and which to proceed with, and your slightly more hostile attitude might be all it takes to put you on the rejection list. You need to have several data points before you take anything said in an interview onboard because it's almost all noise.
I've been rejected for some silly reasons before, but to be fair to the interviewers almost all of the time I can understand why they made their decision. Generally it's because I didn't do a good job at clearly communicating why I'd be a good pick for the role. If I can offer you advice, try not to over think things in interviews. Specifically, it's almost always better to give a clear and concise answer than giving a complicated nuanced opinion. Always try to understand what the interview is screening for and seek to reassure that you're the right person for the job. For example:
Interviewer: "We use TS a lot here. What your experience with TS and whats your opinion of it?"
You: "I have a lot of experience with TS and have used it at company a, b and c. Generally I view it very positively and enjoy using it. I think type safety is an important part of writing stable bug free code."
Only if pushed to be critical of TS should you offer a criticism, and even then I would be very careful about how critical you're being. Here I think contrasting it with some of the advantages of JSDocs would be very well received, but to starting talking about how you prefer JSDocs prior to this would only cast doubts about your fit for the role.
More than 5?
What about an org of hundreds of people? What about thousands?
I think your sentiment of not wanting to use TS is fine if you are working on hobby code or at a small company that’s fine being in their lane. Where you are the guy, or you and a few others are the “dev team”.
When you cross into organizational efficiency concerns because you have hundreds of people across geographies, where you can’t just go get coffee with them to talk about how something can be refactored to be like the 10x engineer you follow on dev.to (sarcasm btw).
TS works for these kinds of companies. TS is great for enterprises.
JS is a shitty language if you never graduate past the realization that almost all languages and technologies are shitty in many ways. You’re being hired to fuel a business, not your ego. And without this business you’re not earning a living, and probably not one as great as the one you’d have yolo-wrangling horrible code only you understand. Your goal is to build something optimal given a bunch of limitations.
You mentioned Rust and Haskell. I don’t know if you’ve worked with these professionally, but the number of candidates for these roles is far less than TS/JS. I’ve never met a Rust engineer who was making peanuts. I’ve also not met a Rust engineer who was dumb. Nobody is going to use Rust (except hobbyists) to do what they would use something like node for. What problem are you solving? IO bound? CPU bound? Distributed workloads? Come on..
So understand why enterprises choose particular technologies. I can tell from your post you don’t have the level of experience you think you have.
And yes if I sound triggered it’s because I’ve interviewed too many combative people like this who can’t back up anything beyond feels or what someone else said. It’s nothing personal against you, it’s me.
Best,
In an interview setting, it probably would make more sense to discuss its sharp edges or ways in which it can be clumsy. That is, issues that arise with using it every day, not discussing the concept of whether or not it should be used, since that ship has probably already sailed. In that case, stuff like "it requires a build step and you have to type more" is not going to be super convincing and could give an impression you didn't intend to give.