7 ms·
The biggest boost in productivity I've had in recent years is switching back to a statically typed language. TypeScript in my case. You can absolutely refactor
by city41 6y ago
The biggest boost in productivity I've had in recent years is switching back to a statically typed language. TypeScript in my case. You can absolutely refactor and change course _so_ much quicker and with virtually no regressions at all. Just the other day we realized a feature I was building didn't handle an important case, and I had to really change the approach. Doing it in a JavaScript would have been dramatically harder.
The investment you have to make to really grok static typing is quite large. It took about 2 years for me to be really comfortable in TS. But you'll have to claw it out of my cold dead hands now.
Before switching to web dev, I used to work in Java, C#, C++, etc. But I've been away from static typing for about a decade now. I completely forgot how beneficial it is.
- kortex 6y agoUsed to love Python. Now, unless it has type hints, not so much. Used to hate static types, or at least I thought I did. Really, I just hated C++ and Java. Go is Bae, trying to learn some rust. Computers are rigid. The more rigid the lang you talk to them, the less you get bitten. Untyped python, bash, javascript, just not worth it imho.
- redis_mlc 6y agoFYI: Perl has moderately strong typing, as well as forward references, an excellent debugger and probably the most powerful web framework, mojolicious. If you're unhappy with how loose python and js are, you might find happiness with Perl. To enable the checking: use strict; use diagnostics;
- Parazitull 6y agoTL,DR: Try F# or other "impure" ML languages if you want the security of types but you don't like actually typing the types. I also used to love js / php because because I thought types make the code unnecessarily verbose. After some pet projects with a strongly typed lang (c#) I realized the peace of mind that using types gives. But I still maintain my opinion that types make the code too verbose. But then I saw the "light" that is F# and I'm here to preach: F# has types BUT you don't need to type them (most of the time) because it has type inference. F# can be used in the .net ecosystem and most of the time it can replace C#. F# can be compiled to js (although the interop is a bit messy). F# is a better typed javascript than typescript. F# is predominantly functional but you can also write code in the non-functional(ha!) style of your choice. F# discourages you from coding mutable spaghetti F# has decent tooling: VSCode + Ionide + dotnet + paket F# has pipes |> The bad parts: F# is not a hard-core functional language like Haskell, but for me this is a positive F# is a functional language which requires a change about how you think about a program. F# doesn't have a huge community F# doesn't give you a lot of job prospects F# doesn't have a lot of 3rd party libraries (but you can use c# libraries in .net or js libraries with fable. You can also mostly port libraries from other functional languages) F# requires you to think about the order of your declaration. Cyclic dependencies are harder to accomplish although this might be a good thing.
- mjul 6y agoFor the good parts, I would add the effortless type declarations to overcome “Primitive Obsession”, the immensely useful pattern matching to ensure you cover all edge cases and what I really found to be the killer feature: Type Providers to enable typed data wrangling in just a few lines.
- mekster 6y agoIt seems type hinting is coming to Ruby 3, which im looking forward to.
- ProZsolt 6y agoI like Ruby for prototyping and quick throwaway scrips. I can write code really fast in it. Still my favorite language. But reading unfamiliar code or cooperating with others is hard. This is a good step forward in that direction.
- ric2b 6y agoNot in the source code itself, it will be in separate files according to Matt. If you want it in the source code you can use Sorbet today.
- vulcan01 6y agoIt's not exactly what you're looking for, but have you checked out mypy[1]? It is basically static typing for python. [1] https://pypi.org/project/mypy/ https://pypi.org/project/mypy/
- kortex 6y agoThat's what I meant with "unless it has type hints" but thanks for the link :) Blue ocean python I pretty much start with hints and interface definitions, the logic follows. Helps me through writing the logic when I have autocompletion of methods.
- olalonde 6y agoSame realization here, but from JavaScript to Rust. I'm still a bit more productive in JavaScript but I now regard it as technical debt to be rewritten in TypeScript/Rust as soon as possible.
- ggregoire 6y ago> The investment you have to make to really grok static typing is quite large. It took about 2 years for me to be really comfortable in TS. That sounds a bit exaggerated from my experience. If anyone interested in TS got discouraged reading your comment, it took between like 2 days and 2 weeks for my team to be really comfortable in TS. If you already know JavaScript and if you already have some experience with statically-typed languages, TS is literally JS with static types.
- lostmsu 6y agoTo be fair, TypeScript's typing is very overloaded with stuff, and is much more complicated than Java or C#'s.
- deathtrader666 6y agoHence my love for ReasonML / OCaml with the Bucklescript compiler.
- rhlsthrm 6y agoDo you use ReasonML on the backend as well? Or just something like ReasonReact? I've been interested in Reason and still wondering the best way to work it into my NodeJS/React/Typescript stack.
- itsArtur 6y agoI am not parent comment's author, but I use TS on the backend and I did look into ReasonML. I love most of Reason's syntax and FP in general, but unfortunately, reason/bucklescript ecosystem just isn't mature enough for a serious project. I'd recommend against using it unless you are in some megacorp and you can afford to build general-purpose tooling.
- mekster 6y agoDoesn't mean it's hard to get started. It only means, if you want to type everything to the detail, you can do it.
- mpoteat 6y agoYeah, TS has one of the most powerful type systems I've come across, with its distributive conditional types and type narrowing logic. Recently I've been using type predicates to "dynamically" expand 'this' in specific clauses. It's very fun to work with and allows for really safe code.
- rovr138 6y agoI can understand the appeal but I sometimes have to work in old code bases where you can’t simply swap things. What I’ve done is switch whatever I work with to Hungarian Notation. You know what the variable can hold. You can easily add a test for it. Someone that comes after will be able to know what it is. It won’t complain, but since you know the type, you can add a quick if to validate that it is what you expect it to be. It‘s actually working for us.
- decentralised 6y agoJust curious but have you tried Hegel (https://hegel.js.org/ https://hegel.js.org/)? I've only just started playing with it but it already feels superior to Typescript (for my needs)
- lloeki 6y agoIncrementally adding Sorbet to some Ruby projects has been so. good.